0.4.0
-
0.4.0
- Reframe "supported libraries" as "supported formats"
- Add suites with symmetric signing
- Add DBE as supported format
-
0.3.0
Language | Confirmed Compatible with Spec Version | Minimum Version Confirmed | Implementation |
---|---|---|---|
C | 0.1.0 | n/a | cipher.c |
NodeJS | 0.1.0 | n/a | node_algorithms.ts |
Browser JS | 0.1.0 | n/a | web_crypto_algorithms.ts |
Python | 0.1.0 | n/a | identifiers.py |
Java | 0.1.0 | n/a | CryptoAlgorithm.java |
Dafny | 0.1.0 | n/a | AlgorithmSuites.dfy |
Java | 0.3.0 | 0.3.0 | AlgorithmSuite.java |
An algorithm suite is a collection of cryptographic algorithms and related values. The algorithm suite defines the behaviors supported formats MUST follow for cryptographic operations.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
Specification: NIST FIPS 297
The Advanced Encryption Standard (AES) is a symmetric block cipher encryption algorithm.
Specification: NIST Special Publication 800-38D
Galois/Counter Mode is a mode of operation for block ciphers that provides authenticated encryption with additional data (AEAD).
If specified to use GCM, the AWS Encryption SDK MUST use GCM with the following specifics:
- The internal block cipher is the encryption algorithm specified by the algorithm suite.
Specification: NIST Special Publication 800-38A
Cipher Block Chaining is a mode of operation for symmetric key block ciphers that provides data confidentiality but does not provide authenticated encryption.
If specified to use CBC, the S3 Encryption Client MUST use CBC with the following specifics:
- CBC MUST only be used to decrypt existing ciphertexts.
- CBC MUST NOT be used to encrypt new ciphertexts.
Specification: NIST Special Publication 800-38A
Counter is a mode of operation for symmetric key block ciphers that provides data confidentiality but does not provide authenticated encryption.
If specified to use CTR, the S3 Encryption Client MUST use CTR with the following specifics:
- CTR MUST only be used to decrypt existing ciphertexts.
- CTR MUST NOT be used to encrypt new ciphertexts.
The identity key derivation function (Identity KDF) is a key derivation algorithm.
The Identity KDF MUST take a byte sequence as input, and MUST return the input, unchanged, as output.
If included in the algorithm suite, the algorithm suite's encryption key length MUST equal the algorithm suite's key derivation input length.
Specification: RFC 5869
The HMAC-based extract-and-expand key derivation function (HKDF) is a key derivation algorithm.
The following table inclues the cryptographic formats supported by the Material Providers Library. Both short and long name MUST be unique.
Cryptographic Format (long) | Cryptographic Format (short) |
---|---|
AWS Encryption SDK Message Format | ESDK |
S3 Encryption Client Cryptographic Format | S3EC |
AWS Database Encryption Cryptographic Format | DBE |
The following tables includes the algorithm suites supported by the Material Providers Library for each supported format. The Material Providers Library MUST provide a set of algorithm suite ENUM for each supported format.
ESDK Algorithm Suite ENUM |
---|
ALG_AES_128_GCM_IV12_TAG16_NO_KDF |
ALG_AES_192_GCM_IV12_TAG16_NO_KDF |
ALG_AES_256_GCM_IV12_TAG16_NO_KDF |
ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256 |
ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256 |
ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256 |
ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256_ECDSA_P256 |
ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 |
ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 |
ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY |
ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 |
S3 EC Algorithm Suite ENUM |
---|
ALG_AES_256_CBC_IV16_NO_KDF |
ALG_AES_256_CTR_IV16_TAG16_NO_KDF |
ALG_AES_256_GCM_IV12_TAG16_NO_KDF |
DBE Algorithm Suite ENUM |
---|
ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384 |
ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384 |
The Material Providers Library MUST provide
an ENUM that is the super set of all the supported format algorithm suites enum
called the Algorithm Suite ENUM.
In this specification this Algorithm Suite ENUM
will be denoted as Format.FormatENUM
to uniquely identify an Algorithm Suite ENUM across all supported formats.
For example ESDK.ALG_AES_128_GCM_IV12_TAG16_NO_KDF
is the Algorithm Suite ENUM for the ESDK Algorithm Suite ENUM ALG_AES_128_GCM_IV12_TAG16_NO_KDF
.
This means that different formats MAY have duplicate Format Algorithm Suite ENUM.
Algorithm Suite ENUM |
---|
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256_ECDSA_P256 |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256 |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256 |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256 |
ESDK.ALG_AES_256_GCM_IV12_TAG16_NO_KDF |
ESDK.ALG_AES_192_GCM_IV12_TAG16_NO_KDF |
ESDK.ALG_AES_128_GCM_IV12_TAG16_NO_KDF |
S3EC.ALG_AES_256_CBC_IV16_NO_KDF |
S3EC.ALG_AES_256_CTR_IV16_TAG16_NO_KDF |
S3EC.ALG_AES_256_GCM_IV12_TAG16_NO_KDF |
DBE.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384 |
DBE.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384 |
The following table includes all supported algorithm suites.
The value 00 00
is reserved
and MUST NOT be used
as an Algorithm Suite ID in the future.
Algorithm Suite ID MUST be a unique hex value across all supported algorithm suites.
Algorithm Suite ENUM | Algorithm Suite ID (hex) | Message Format Version | Algorithm Suite Data Length (bytes) |
---|---|---|---|
DBE.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384 | 67 00 | 1.0 | N/A |
DBE.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384 | 67 01 | 1.0 | N/A |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 | 05 78 | 2.0 | 32 |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY | 04 78 | 2.0 | 32 |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | 03 78 | 1.0 | N/A |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | 03 46 | 1.0 | N/A |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256_ECDSA_P256 | 02 14 | 1.0 | N/A |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256 | 01 78 | 1.0 | N/A |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256 | 01 46 | 1.0 | N/A |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256 | 01 14 | 1.0 | N/A |
ESDK.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | 00 78 | 1.0 | N/A |
ESDK.ALG_AES_192_GCM_IV12_TAG16_NO_KDF | 00 46 | 1.0 | N/A |
ESDK.ALG_AES_128_GCM_IV12_TAG16_NO_KDF | 00 14 | 1.0 | N/A |
S3EC.ALG_AES_256_CBC_IV16_NO_KDF | 00 70 | 1.0 | N/A |
S3EC.ALG_AES_256_CTR_IV16_TAG16_NO_KDF | 00 71 | 1.0 | N/A |
S3EC.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | 00 72 | 1.0 | N/A |
The following table includes key derivation information for supported algorithm suites.
Algorithm Suite ENUM | Key Derivation Input Length (bits) | Algorithm | Hash Function | Salt Length (bits) | Key Commitment |
---|---|---|---|---|---|
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384 | 256 | HKDF | SHA-512 | N/A | True |
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384 | 256 | HKDF | SHA-512 | N/A | True |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 | 256 | HKDF | SHA-512 | 256 | True |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY | 256 | HKDF | SHA-512 | 256 | True |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | 256 | HKDF | SHA-384 | 0 | False |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | 192 | HKDF | SHA-384 | 0 | False |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256_ECDSA_P256 | 128 | HKDF | SHA-256 | 0 | False |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256 | 256 | HKDF | SHA-256 | 0 | False |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256 | 192 | HKDF | SHA-256 | 0 | False |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256 | 128 | HKDF | SHA-256 | 0 | False |
ESDK.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | 256 | Identity KDF | N/A | 0 | False |
ESDK.ALG_AES_192_GCM_IV12_TAG16_NO_KDF | 192 | Identity KDF | N/A | 0 | False |
ESDK.ALG_AES_128_GCM_IV12_TAG16_NO_KDF | 128 | Identity KDF | N/A | 0 | False |
S3EC.ALG_AES_256_CBC_IV16_NO_KDF | 256 | Identity KDF | N/A | 0 | False |
S3EC.ALG_AES_256_CTR_IV16_TAG16_NO_KDF | 256 | Identity KDF | N/A | 0 | False |
S3EC.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | 256 | Identity KDF | N/A | 0 | False |
The following table includes the encryption settings for supported algorithm suites.
Algorithm Suite ENUM | Encryption Algorithm | Encryption Algorithm Mode | Encryption Key Length (bits) | IV Length (bytes) | Authentication Tag Length (bytes) |
---|---|---|---|---|---|
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384 | AES | GCM | 256 | 12 | 16 |
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384 | AES | GCM | 256 | 12 | 16 |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 | AES | GCM | 256 | 12 | 16 |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY | AES | GCM | 256 | 12 | 16 |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | AES | GCM | 256 | 12 | 16 |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | AES | GCM | 192 | 12 | 16 |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256_ECDSA_P256 | AES | GCM | 128 | 12 | 16 |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256 | AES | GCM | 256 | 12 | 16 |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256 | AES | GCM | 192 | 12 | 16 |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256 | AES | GCM | 128 | 12 | 16 |
ESDK.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | AES | GCM | 256 | 12 | 16 |
ESDK.ALG_AES_192_GCM_IV12_TAG16_NO_KDF | AES | GCM | 192 | 12 | 16 |
ESDK.ALG_AES_128_GCM_IV12_TAG16_NO_KDF | AES | GCM | 128 | 12 | 16 |
S3EC.ALG_AES_256_CBC_IV16_NO_KDF | AES | CBC | 256 | 16 | N/A |
S3EC.ALG_AES_256_CTR_IV16_TAG16_NO_KDF | AES | CTR | 256 | 16 | N/A |
S3EC.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | AES | GCM | 256 | 12 | 16 |
The following table includes commitment information for supported algorithm suites. These values are only relevant to algorithm suites that support key commitment.
Algorithm Suite ENUM | Key Derivation Input Length (bits) | Algorithm | Hash Function | Salt Length (bits) |
---|---|---|---|---|
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384 | 256 | HKDF | SHA-512 | N/A |
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384 | 256 | HKDF | SHA-512 | N/A |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 | 256 | HKDF | SHA-512 | 256 |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY | 256 | HKDF | SHA-512 | 256 |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | N/A | N/A | N/A | N/A |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | N/A | N/A | N/A | N/A |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256_ECDSA_P256 | N/A | N/A | N/A | N/A |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256 | N/A | N/A | N/A | N/A |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256 | N/A | N/A | N/A | N/A |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256 | N/A | N/A | N/A | N/A |
ESDK.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | N/A | N/A | N/A | N/A |
ESDK.ALG_AES_192_GCM_IV12_TAG16_NO_KDF | N/A | N/A | N/A | N/A |
ESDK.ALG_AES_128_GCM_IV12_TAG16_NO_KDF | N/A | N/A | N/A | N/A |
S3EC.ALG_AES_256_CBC_IV16_NO_KDF | N/A | N/A | N/A | N/A |
S3EC.ALG_AES_256_CTR_IV16_TAG16_NO_KDF | N/A | N/A | N/A | N/A |
S3EC.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | N/A | N/A | N/A | N/A |
The following table includes signature information for supported algorithm suites.
An algorithm suite with a symmetric signature algorithm MUST use intermediate key wrapping.
Algorithm Suite ENUM | Asymmetric Signature Algorithm | Symmetric Signature Algorithm |
---|---|---|
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384 | Not applicable | HMAC with SHA-384 |
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384 | ECDSA with P-384 and SHA-384 | HMAC with SHA-384 |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 | ECDSA with P-384 and SHA-384 | Not appliccable |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY | Not applicable | Not appliccable |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | ECDSA with P-384 and SHA-384 | Not appliccable |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | ECDSA with P-384 and SHA-384 | Not appliccable |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256_ECDSA_P256 | ECDSA with P-256 and SHA-256 | Not appliccable |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256 | Not applicable | Not appliccable |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256 | Not applicable | Not appliccable |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256 | Not applicable | Not appliccable |
ESDK.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | Not applicable | Not appliccable |
ESDK.ALG_AES_192_GCM_IV12_TAG16_NO_KDF | Not applicable | Not appliccable |
ESDK.ALG_AES_128_GCM_IV12_TAG16_NO_KDF | Not applicable | Not appliccable |
S3EC.ALG_AES_256_CBC_IV16_NO_KDF | Not applicable | Not appliccable |
S3EC.ALG_AES_256_CTR_IV16_TAG16_NO_KDF | Not applicable | Not appliccable |
S3EC.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | Not applicable | Not appliccable |
Based on the algorithm suite, there may be additional requirements to the wrapping and serialization of encrypted data keys (EDKs).
The following table includes EDK wrapping information for supported algorithm suites.
Algorithm Suite ENUM | EDK Wrapping Algorithm |
---|---|
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384 | Intermediate Key Wrapping |
DDBEC.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384 | Intermediate Key Wrapping |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384 | Direct Key Wrapping |
ESDK.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY | Direct Key Wrapping |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | Direct Key Wrapping |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384 | Direct Key Wrapping |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256_ECDSA_P256 | Direct Key Wrapping |
ESDK.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256 | Direct Key Wrapping |
ESDK.ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256 | Direct Key Wrapping |
ESDK.ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256 | Direct Key Wrapping |
ESDK.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | Direct Key Wrapping |
ESDK.ALG_AES_192_GCM_IV12_TAG16_NO_KDF | Direct Key Wrapping |
ESDK.ALG_AES_128_GCM_IV12_TAG16_NO_KDF | Direct Key Wrapping |
S3EC.ALG_AES_256_CBC_IV16_NO_KDF | Direct Key Wrapping |
S3EC.ALG_AES_256_CTR_IV16_TAG16_NO_KDF | Direct Key Wrapping |
S3EC.ALG_AES_256_GCM_IV12_TAG16_NO_KDF | Direct Key Wrapping |
Encrypted data keys produced under algorithms suites using Direct Key Wrapping have no additional requirements, other than those already perscribed by the EDK Ciphertext specification.
For algorithm suites including symmetric signing, additional steps are needed in order to create material unique for each encrypted data key that can be used for symmetric signing. Through the creation of intermediate material during the key wrapping process, those with access to unwrap a particular encrypted data key also have access to symmetric signing material associated with that particular encrypted data key. With this property, a message can be created that is decryptable by several parties, but also signed by each party such that party A can be sure that the message was not updated by party B. Only those with the ability to wrap data keys for all parties are capable of creating messages that will be authenticated by all parties.
Encrypted data keys produced under algorithm suites using Intermediate Key Wrapping, have the following requirements:
- For each encrypted data key, a distinct
intermediate key
MUST be generated using cryptographically secure random bytes. This intermediate key MUST have length equal to the encryption key length of the algorithm suite. - For each encrypted data key, a symmetric signing key MUST be derived from the
intermediate key
using the key derivation algorithm in the algorithm suite, with the following specifics:- The input key material is the
intermediate key
- The salt is empty
- The info is "AWS_MPL_INTERMEDIATE_KEYWRAP_MAC" as UTF8 bytes.
- The input key material is the
- For each encrypted data key, a
key encryption key
MUST be derived from theintermediate key
using the key derivation algorithm in the algorithm suite, with the following specifics:- The input key material is the
intermediate key
- The salt is empty
- The info is "AWS_MPL_INTERMEDIATE_KEYWRAP_ENC" as UTF8 bytes.
- The input key material is the
- The EDK ciphertext MUST be the following serialization:
Field | Length (bytes) | Interpreted as |
---|---|---|
Wrapped Plaintext Data Key | The algorithm suite's encryption key length + 12 | Bytes |
Wrapped Intermediate Key | Determined by the keyring responsible for wrapping | Bytes |
The wrapped plaintext data key MUST be the result of the following AES GCM 256 Encrypt operation:
- Plaintext: the plaintext data key in the related encryption or decryption materials.
- Encryption key: The
key encryption key
derived above. - AAD: The encryption context in the related encryption or decryption materials, serialized according to it's specification.
- IV: The IV is 0.
This value MUST be equal to the algorithm suite's encryption key length + 16.
The wrapped intermediate key has the same requirements for wrapping as the EDK Ciphertext normally has under Direct Key Wrapping.
The fields described below are REQUIRED to be specified by algorithm suites, unless otherwise specified.
A value that uniquely identifies an algorithm suite.
A 2-byte hex value that MUST uniquely identify an algorithm suite. This 2-byte value SHOULD be used to bind algorithm suites to ciphertext.
The block cipher encryption algorithm.
The length of the input encryption key MUST equal the encryption key length specified by the algorithm suite.
The AEAD operation mode used with the encryption algorithm.
The length of the input IV MUST equal the IV length specified by the algorithm suite. The length of the authentication tag MUST equal the authentication tag length specified by the algorithm suite.
The length of the encryption key used as input to the encryption algorithm.
The length of the initialization vector (IV) used with the encryption algorithm.
The length of the authentication tag used with AEAD.
This key derivation algorithm defines what key derivation function (KDF) to use for encryption key generation. The specified KDF algorithm MUST be used to generate the encryption algorithm encryption key input.
The length of the input to the Key Derivation Algorithm.
AES-GCM is not key committing by default. Key commitment is a property, which ensures that exactly one data key can be used to decrypt a ciphertext. However, not all algorithm suites provide this property.
- True
- False
A key that is used to provide key commitment to AES-GCM.
This key derivation algorithm defines what key derivation function (KDF) to use for commitment key generation. The specified KDF algorithm MUST be used to generate the commit key.
The length of the commit key used to verify key commitment.
This field is OPTIONAL.
The asymmetric signature algorithm defines what asymmetric algorithm to use for asymmetric signature generation and verification.
If the algorithm suite includes an asymmetric signature algorithm:
- Asymmetric signatures MUST be generated using the specified asymmetric signature algorithm.
- Asymmetric signatures MUST be verified using the specified asymmetric signature algorithm.
If the algorithm suite does not include a asymmetric signature algorithm:
- Asymmetric signatures MUST NOT be generated.
- Asymmetric signatures MUST NOT be verified.
This field is OPTIONAL.
The symmetric signature algorithm defines what symmetric algorithm to use for symmetric signature generation and verification.
If the algorithm suite includes an symmetric signature algorithm:
- Symmetric signatures MUST be generated using the specified symmetric signature algorithm.
- Symmetric signatures MUST be verified using the specified symmetric signature algorithm.
- The algorithm suite MUST also use Intermediate Key Wrapping.
If the algorithm suite does not include a symmetric signature algorithm:
- Symmetric signatures MUST NOT be generated.
- Symmetric signatures MUST NOT be verified.
Indicates the serialization or message format version for the supported algorithm suite. This value can be duplicated across supported formats. This MUST be used to branch any serialization/deserialization logic in supported formats.
ESDK
- 1.0
- 2.0
S3EC
- 1.0
DDBEC
- 1.0
Algorithm suites may capture a variable-per-algorithm-suite length of data relevant to that algorithm suite’s mode of operation.
- Algorithm Suite 05 78 MUST store the commit key in the suite data
- Algorithm Suite 04 78 MUST store the commit key in the suite data
Then length of the algorithm suite data. The field MAY be length 0. Its length and how the contents are used are determined by the algorithm suite. Where the contents are stored is determined by the message format.
- 32
You should use the default algorithm suite.
You should use an algorithm suite that supports key commitment.
You may use the non-default AES-GCM with key derivation and signing key algorithm suites if key derivation input lengths of other sizes are required.
If the users who encrypt and the users who decrypt are equally trusted, you may use AES-GCM with only key derivation algorithm suites.
You should not use AES-GCM with only key derivation algorithm suites if the users who encrypt and the users who decrypt are not equally trusted.
You should not use AES-GCM without key Derivation or signing, except for backwards compatibility.
You should not use AES-CBC unless you need to decrypt legacy ciphertexts encrypted using AES-CBC.
You should not use AES-CTR unless you need to perform partial decryption of a ciphertext object encrypted using AES-GCM in a client that does not support a safe mode of partial ciphertext decryption.