本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
常见问题
- 和?有何 AWS Encryption SDK 不同 AWS SDKs?
-
AWS SDKs
提供了用于与 Amazon Web Services 交互的库 (AWS),包括 AWS Key Management Service (AWS KMS)。的某些语言实施(例如适用AWS Encryption SDK 于 .NET 的)始终需要采用相同编程语言的 AWS SDK。 AWS Encryption SDK只有当您在密钥环或主密钥提供程序中使用 AWS KMS 密钥时,其他语言实施才需要对应 AWS SDK。有关详细信息,请参阅 AWS Encryption SDK 编程语言 中有关您的编程语言的主题。 您可以使用与 AWS SDKs 进行交互 AWS KMS,包括对少量数据(使用对称加密密钥最多为 4096 字节)加密和解密,以及生成用于客户端加密的数据密钥。但是,生成数据密钥时,必须管理整个加密和解密过程,包括使用外部数据密钥加密数据、安全丢弃明文数据密钥 AWS KMS、安全丢弃明文数据密钥、存储加密数据密钥,然后解密数据密钥和数据。 AWS Encryption SDK 为您处理此过程。
AWS Encryption SDK 提供了一个库,该库使用行业标准和最佳实践加密和解密数据。其生成数据密钥,使用您指定的包装密钥对其进行加密,然后返回加密消息,其为包含加密数据和解密所需的加密数据密钥的便携式数据对象。到解密时,您传入加密消息和至少一个包装密钥(可选),然后 AWS Encryption SDK 返回您的明文数据。
您可以在中 AWS KMS keys 将用作包装密钥 AWS Encryption SDK,但这不是必需的。您可以使用自己生成的加密密钥以及来自密钥管理器或本地硬件安全模块的加密密钥。 AWS Encryption SDK 即使您没有 AWS 账户,也可以使用。
- 与 Amazon S3 加密客户端有何 AWS Encryption SDK 不同?
-
中的 Amazon S3 加密客户端为 Amazon Simple Storage Service(Amazon S3)中存储的数据 AWS SDKs 提供加密和解密。这些客户端与 Amazon S3 紧密耦合在一起,并且仅适用于在该位置中存储的数据。
为可以存储在任何地方的数据 AWS Encryption SDK 提供加密和解密功能。 AWS Encryption SDK 和 Amazon S3 加密客户端不兼容,因为它们生成具有不同数据格式的密文。
- AWS Encryption SDK支持哪些加密算法,哪种算法是默认算法?
-
AWS Encryption SDK 使用伽罗瓦/计数器模式(GCM)中的高级加密标准(AES)对称算法(称为 AES-GCM)以加密您的数据。其允许您从多种对称和非对称算法中进行选择,以便对加密数据的数据密钥进行加密。
对于 AES-GCM,默认算法套件为 AES-GCM,具有 256 位密钥、密钥派生(HKDF)、数字签名和密钥承诺。 AWS Encryption SDK 还支持 192 位和 128 位加密密钥以及加密算法,无需数字签名和密钥承诺。
在所有情况下,初始化向量 (IV) 长度为 12 个字节;身份验证标签长度为 16 个字节。默认情况下,SDK 使用数据密钥作为基于 HMAC 的密 extract-and-expand钥派生函数 (HKDF) 的输入来派生 AES-GCM 加密密钥,还会添加椭圆曲线数字签名算法 (ECDSA) 签名。
有关选择要使用的算法的信息,请参阅支持的算法套件。
有关支持的算法的实施详细信息,请参阅算法参考。
- 如何生成初始化向量 (IV) 以及将其存储在何处?
-
AWS Encryption SDK 使用确定性的方法为每个帧构造不同的 IV 值。此过程可 IVs 确保消息中的永远不会重复。(在 AWS Encryption SDK for Java 和版本 1.3.0 之前 AWS Encryption SDK for Python,会为每个帧 AWS Encryption SDK 随机生成一个唯一的 IV 值。)
IV 存储在 AWS Encryption SDK 返回的加密消息中。有关更多信息,请参阅AWS Encryption SDK 消息格式参考。
- 如何生成、加密和解密每个数据密钥?
-
方法取决于您使用的密钥环或主密钥提供程序。
中的 AWS KMS 密钥环和主密钥提供程序 AWS Encryption SDK 使用 AWS KMS GenerateDataKeyAPI 操作来生成各个数据密钥,并使用其包装密钥对其进行加密。为了使用其他 KMS 密钥加密数据密钥副本,其使用 AWS KMS Encrypt 操作。为了解密数据密钥,其使用 AWS KMS Dec rypt 操作。有关详细信息,请参阅中的 “ AWS Encryption SDK 规范” 中的AWS KMS 密钥环
。 GitHub 其他密钥环使用各种编程语言的最佳实践方法生成数据密钥并进行加密和解密。有关详细信息,请参阅 Specification 的 Fr amework 部分
中的密钥环或主密钥提供程序 AWS Encryption SDK 规范。 GitHub - 如何跟踪用于加密我的数据的数据密钥?
-
他们为你 AWS Encryption SDK 做这件事。在加密数据时,该开发工具包加密数据密钥,并将加密的密钥与加密的数据一起存储在它返回的加密的消息中。在解密数据时, AWS Encryption SDK 从加密的消息中提取加密的数据密钥,对其进行解密,然后使用该密钥解密数据。
- 如何将加密的数据密钥与其加密数据一起 AWS Encryption SDK 存储?
-
中的加密操作 AWS Encryption SDK 返回加密消息,这是包含加密数据及其加密数据密钥的单个数据结构。消息格式包含至少两个部分:标头 和正文。消息标头包含加密的数据密钥以及有关消息正文组成方式的消息。消息正文包含加密的数据。如果算法套件包含数字签名,则消息格式包括包含签名的页脚。有关更多信息,请参阅 AWS Encryption SDK 消息格式参考。
- AWS Encryption SDK 消息格式会给我的加密数据增加多少开销?
-
增加的开销金额 AWS Encryption SDK 取决于多个因素,包括以下因素:
-
明文数据的大小
-
使用哪些支持的算法
-
是否提供其他经过身份验证的数据 (AAD) 以及该 AAD 的长度
-
包装密钥或主密钥的数量和类型
-
帧大小(在使用帧数据时)
如果在默认配置中 AWS Encryption SDK 使用 [将一个 AWS KMS key 作为包装密钥(或主密钥),无 AAD,非帧数据,带签名的加密算法],开销大约为 600 个字节。一般来说,您可以合理地假设 AWS Encryption SDK 增加 1 KB 或更少的开销,不包括提供的 AAD。有关更多信息,请参阅 AWS Encryption SDK 消息格式参考。
-
- 我是否可以使用自己的主密钥提供程序?
-
是。实施详细信息因使用的支持的编程语言而有所不同。不过,所有支持的语言允许定义自定义加密材料管理器(CMMs)、主密钥提供程序、密钥环、主密钥和包装密钥。
- 我是否可以使用多个包装密钥加密数据?
-
是。您可以使用附加包装密钥(或主密钥)加密数据密钥,以便在位于不同区域或无法用于解密时提供冗余。
要使用多个包装密钥加密数据,请创建一个具有多个包装密钥的密钥环或主密钥提供程序。在使用密钥环时,您可以创建一个具有多个包装密钥的密钥环或多重密钥环。
当您使用多个包装密钥加密数据时,会 AWS Encryption SDK 使用一个包装密钥生成明文数据密钥。数据密钥是唯一的,在数学上与包装密钥无关。此操作会返回明文数据密钥以及由包装密钥加密的数据密钥的副本。然后是加密方法,即使用其他包装密钥加密数据密钥。生成的加密消息包含加密的数据以及加密的数据密钥,每个包装密钥具有一个加密的数据密钥。
可以通过在加密操作中使用的任一包装密钥以解密加密消息。 AWS Encryption SDK 使用包装密钥解密加密的数据密钥。然后,它使用明文数据密钥以解密数据。
- 我可以使用哪些数据类型进行加密 AWS Encryption SDK?
-
的多数编程语言实施均 AWS Encryption SDK 可加密原始字节(字节数组)、I/O 流(字节流)和字符串。 AWS Encryption SDK 适用于 .NET 的不支持 I/O 流。我们为每种支持的编程语言提供了示例代码。
- 加密(和解 AWS Encryption SDK 密input/output (I/O)流是如何进行的?
-
AWS Encryption SDK 创建封装底层 I/O 流的加密或解密流。加密或解密流对读取或写入调用执行加密操作。例如,它可以读取基础流上的明文数据,并在返回结果之前对其进行加密。或者,它可以从基础流中读取密文,并在返回结果之前对其进行解密。我们为每种支持流式传输的支持的编程语言提供了加密和解密流的示例代码。
AWS Encryption SDK 适用于 .NET 的不支持 I/O 流。