-
Notifications
You must be signed in to change notification settings - Fork 39
Description
Perhaps the following can weigh in here:
[✅] @carl-wallace
[❓] @dghgit
[❓] @ounsworth
CMS -- artifacts_cms_v2.zip
This is version 2 of the CMS artifacts format. It may change, if it needs to change.
Within providers/<provider_name>/[implementation_name/]
- artifacts_cms_v2.zip
artifacts_cms_v2/subfolder which will contain the artifactsartifacts_cms_v2/expected_plaintext.txt# The message which was encrypted and can be compared against the decrypted artifacts.artifacts_cms_v2/ukm.txt# The User Keying Material (UKM) included in some of the enveloped messages.artifacts_cms_v2/<ta oid>_<ta friendly name>_ta.der# ML-DSA trust anchor used to sign the KEM end-entity certificates:
- For MlKem512 use MlDsa44
- For MlKem768 and MlKem768 based composites, use MlDsa65
- For MlKem1024 and MlKem1024 based composites use MlDsa87artifacts_cms_v2/<oid>_<friendly>_ee.der# The KEM certificate that the message is enveloped to.artifacts_cms_v2/<oid>_<friendly>_priv.der# The private key to decrypt the enveloped messages.artifacts_cms_v2/<oid>_<friendly>_kemri_ukm_<kdf>.der# An Enveloped artifact using KEMRI’s UKM field and one of the Mandatory to Implement (MTI) KDFs for the KEM algorithm.artifacts_cms_v2/<oid>_<friendly>_kemri_auth_<kdf>.der# An AuthEnveloped artifact using KEMRI without UKM and one of the MTI KDFs for the KEM algorithm.artifacts_cms_v2/<oid>_<friendly>_kemri_<kdf>.der# Enveloped artifacts using KEMRI without UKM and the specified KDF.
Friendly
Per #96 we would like a text description of the algorithm in the artifact names to make artifacts directory listings easier to read. Stick something same in there, for example the appropriate name from oid_mapping.md.
Trust Anchor
A trust anchor isn't necessary to verify the KEMRecipientInfo artifacts, but if you provide it, we can test that the EE certificate is signed by the TA. If it is not provided, this test will be skipped.
DER vs PEM
We picked DER encoding so there's not an extra layer to mess up. You probably have a DER<->PEM re-encoding tool.
Encryption Algorithms
Use id-aes<size>wrap for KEK algorithm where <size> is appropriate for your <oid>. Each I-D/RFC should specify this.
Use aes-<size>-gcm for the CEK algorithm in the <oid>_kemri_auth_<kdf>.der artifact. Use aes-<size>-cbc for all others.
MTI KDFs
Each RFC will specify MTI KDFs, and allow for others as well.
You MUST have a <oid>_<friendly>_kemri_<kdf>, <oid>_<friendly>_kemri_ukm_<kdf>.der, and <oid>_<friendly>_kemri_auth_<kdf>.der artifacts for all MTI KDFs.
You MAY provider artifacts for other KDFs with the following caveats:-
Pure ML-KEM (draft-ietf-lamps-cms-kyber-05 Section 2.2.2):
ML-KEM-512 SHOULD be used with a KDF capable of outputting a key
with at least 128 bits of preimage strength and with a key
wrapping algorithm with a key length of at least 128 bits.
ML-KEM-768 SHOULD be used with a KDF capable of outputting a key
with at least 192 bits of preimage strength and with a key
wrapping algorithm with a key length of at least 192 bits.
ML-KEM-1024 SHOULD be used with a KDF capable of outputting a key
with at least 256 bits of preimage strength and with a key
wrapping algorithm with a key length of at least 256 bits.
Composite ML-KEM (draft-ietf-lamps-pq-composite-kem-05 Section 8.1):
SHOULD use algorithms of equivalent strength or greater to the MTI KDFs in the table listed below:
The following are the MTI KDFs for ML-KEM based pure and composites:
| I-D/RFC | Algorithm | Wrap | MTI KDF | <kdf> string |
|---|---|---|---|---|
| draft-ietf-lamps-cms-kyber-05 | ML-KEM-512 | id-aes128-wrap | HKDF with SHA-256* | id-alg-hkdf-with-sha256* |
| draft-ietf-lamps-cms-kyber-05 | ML-KEM-768 | id-aes256-wrap | HKDF with SHA-256* | id-alg-hkdf-with-sha256* |
| draft-ietf-lamps-cms-kyber-05 | ML-KEM-1024 | id-aes256-wrap | HKDF with SHA-256* | id-alg-hkdf-with-sha256* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-RSA2048 | id-aes128-wrap | HKDF with SHA-256** | id-alg-hkdf-with-sha256** |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-RSA3072 | id-aes128-wrap | HKDF with SHA-256** | id-alg-hkdf-with-sha256** |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-RSA4096 | id-aes128-wrap | HKDF with SHA-256** | id-alg-hkdf-with-sha256** |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-X25519 | id-aes128-wrap | KMAC256-KDF** | id-kmac256** |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-ECDH-P384 | id-aes256-wrap | HKDF with SHA-256** | id-alg-hkdf-with-sha256** |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-ECDH-brainpoolP256r1 | id-aes256-wrap | HKDF with SHA-256** | id-alg-hkdf-with-sha256** |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM1024-ECDH-P384 | id-aes256-wrap | KMAC256-KDF** | id-kmac256** |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM1024-ECDH-brainpoolP384r1 | id-aes256-wrap | KMAC256-KDF** | id-kmac256** |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM1024-X448 | id-aes256-wrap | KMAC256-KDF** | id-kmac256** |
The following is the MTI KDF for RSA-KEM:
| I-D/RFC | Algorithm | Wrap | MTI KDF | <kdf> string |
|---|---|---|---|---|
| draft-ietf-lamps-rfc5990bis-10 | RSA-KEM | id-aes128-wrap | KDF3 w/ SHA-256 *** | id-kdf-kdf3 *** |
* Based on draft-ietf-lamps-cms-kyber-05
** Based on draft-ietf-lamps-pq-composite-kem-05
*** Based on draft draft-ietf-lamps-rfc5990bis-10
The markdown for the above is:
## CMS -- artifacts_cms_v2.zip
This is version 2 of the CMS artifacts format. It may change if needs change.
Within `providers/<provider_name>/[implementation_name/]`
- artifacts_cms_v2.zip
- `artifacts_cms_v2/` subfolder which will contain the artifacts
- `artifacts_cms_v2/expected_plaintext.txt` # The message which was encrypted and can be compared against the decrypted artifacts.
- `artifacts_cms_v2/ukm.txt` # The User Keying Material (UKM) included in some of the enveloped messages.
- `artifacts_cms_v2/<ta oid>_<ta friendly name>_ta.der` # ML-DSA trust anchor used to sign the KEM end-entity certificates:
- For MlKem512 use MlDsa44
- For MlKem768 and MlKem768 based composites, use MlDsa65
- For MlKem1024 and MlKem1024 based composites use MlDsa87
- `artifacts_cms_v2/<oid>_<friendly>_ee.der` # The KEM certificate that the message is enveloped to.
- `artifacts_cms_v2/<oid>_<friendly>_priv.der` # The private key to decrypt the enveloped messages.
- `artifacts_cms_v2/<oid>_<friendly>_kemri_ukm_<kdf>.der` # An Enveloped artifact using KEMRI’s UKM field and one of the Mandatory to Implement (MTI) KDFs for the KEM algorithm.
- `artifacts_cms_v2/<oid>_<friendly>_kemri_auth_<kdf>.der` # An AuthEnveloped artifact using KEMRI without UKM and one of the MTI KDFs for the KEM algorithm.
- `artifacts_cms_v2/<oid>_<friendly>_kemri_<kdf>.der` # Enveloped artifacts using KEMRI without UKM and the specified KDF.
#### Friendly
Per https://github.com/IETF-Hackathon/pqc-certificates/issues/96 we would like a text description of the algorithm in the artifact names to make artifacts directory listings easier to read. Stick something same in there, for example the appropriate name from [oid_mapping.md](docs/oid_mapping.md).
#### Trust Anchor
A trust anchor isn't necessary to verify the KEMRecipientInfo artifacts, but if you provide it, we can test that the EE certificate is signed by the TA. If it is not provided, this test will be skipped.
#### DER vs PEM
We picked DER encoding so there's not an extra layer to mess up. You probably have a DER<->PEM re-encoding tool.
#### Encryption Algorithms
Use `id-aes<size>wrap` for KEK algorithm where `<size>` is appropriate for your `<oid>`. Each I-D/RFC should specify this.
Use `aes-<size>-gcm` for the CEK algorithm in the `<oid>_kemri_auth_<kdf>.der` artifact. Use `aes-<size>-cbc` for all others.
#### MTI KDFs
Each RFC will specify MTI KDFs, and allow for others as well.
You *MUST* have a `<oid>_<friendly>_kemri_<kdf>`, `<oid>_<friendly>_kemri_ukm_<kdf>.der`, and `<oid>_<friendly>_kemri_auth_<kdf>.der` artifacts for all MTI KDFs.
You *MAY* provider artifacts for other KDFs with the following caveats:-
Pure ML-KEM (`draft-ietf-lamps-cms-kyber-05` Section 2.2.2):
\```
ML-KEM-512 SHOULD be used with a KDF capable of outputting a key
with at least 128 bits of preimage strength and with a key
wrapping algorithm with a key length of at least 128 bits.
ML-KEM-768 SHOULD be used with a KDF capable of outputting a key
with at least 192 bits of preimage strength and with a key
wrapping algorithm with a key length of at least 192 bits.
ML-KEM-1024 SHOULD be used with a KDF capable of outputting a key
with at least 256 bits of preimage strength and with a key
wrapping algorithm with a key length of at least 256 bits.
\```
Composite ML-KEM (`draft-ietf-lamps-pq-composite-kem-05` Section 8.1):
\```
SHOULD use algorithms of equivalent strength or greater to the MTI KDFs in the table listed below:
\```
The following are the MTI KDFs for ML-KEM based pure and composites:
| I-D/RFC | Algorithm | Wrap | MTI KDF | `<kdf> string` |
| - | - | - | - | - |
| draft-ietf-lamps-cms-kyber-05 | ML-KEM-512 | id-aes128-wrap | HKDF with SHA-256\* | id-alg-hkdf-with-sha256\* |
| draft-ietf-lamps-cms-kyber-05 | ML-KEM-768 | id-aes256-wrap | HKDF with SHA-256\* | id-alg-hkdf-with-sha256\* |
| draft-ietf-lamps-cms-kyber-05 | ML-KEM-1024 | id-aes256-wrap | HKDF with SHA-256\* | id-alg-hkdf-with-sha256\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-RSA2048 | id-aes128-wrap | HKDF with SHA-256\*\* | id-alg-hkdf-with-sha256\*\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-RSA3072 | id-aes128-wrap | HKDF with SHA-256\*\* | id-alg-hkdf-with-sha256\*\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-RSA4096 | id-aes128-wrap | HKDF with SHA-256*\* | id-alg-hkdf-with-sha256*\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-X25519 | id-aes128-wrap | KMAC256-KDF*\* | id-kmac256*\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-ECDH-P384 | id-aes256-wrap | HKDF with SHA-256*\* | id-alg-hkdf-with-sha256*\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM768-ECDH-brainpoolP256r1 | id-aes256-wrap | HKDF with SHA-256*\* | id-alg-hkdf-with-sha256*\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM1024-ECDH-P384 | id-aes256-wrap | KMAC256-KDF*\* | id-kmac256*\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM1024-ECDH-brainpoolP384r1 | id-aes256-wrap | KMAC256-KDF*\* | id-kmac256*\* |
| draft-ietf-lamps-pq-composite-kem-05 | MLKEM1024-X448 | id-aes256-wrap | KMAC256-KDF*\* | id-kmac256*\* |
The following is the MTI KDF for RSA-KEM:
| I-D/RFC | Algorithm | Wrap | MTI KDF | `<kdf> string` |
| - | - | - | - | - |
| draft-ietf-lamps-rfc5990bis-10 | RSA-KEM | id-aes128-wrap | KDF3 w/ SHA-256 \*\*\* | id-kdf-kdf3 \*\*\* |
\* Based on draft-ietf-lamps-cms-kyber-05
\*\* Based on draft-ietf-lamps-pq-composite-kem-05
\*\*\* Based on draft draft-ietf-lamps-rfc5990bis-10