Hi NIST pqc-forum! (CC IETF PQUIP)
Ā
Context: within the IETF thereās a push to standardize seed-based private key storage for ML-DSA and ML-KEM (aka in PKCS#12 files). There are a number of great advantages of seed-based private keys, including bandwidth, resistance to publickey-privatekey mismatch attacks, and the observation that ML-DSA + Ed25519 and ML-KEM + X25519 hybrids can efficiently derive both halves from the same 32-byte seed is brilliant [1]
Ā
But it just came to my attention that private key seed might be forbidden by FIPS 203 / 204. Specifically, re-expanding the key from seed requires access to the KeyGen_internal function, and both 203 and 204 have similar wording in their introductions to their āInternal Functionsā sections:
Ā
āOther than for testing purposes, the interfaces for key generation and signature generation specified in this section should not be made available to applications, as any random values required for key generation and signature generation shall be generated by the cryptographic module.ā
Ā
Which seems like it would forbid an application in FIPS-mode from importing / exporting a private key as a seed.
Ā
Ā
However, there is also language:
Ā
āTwo particular cases in which implementations may refrain from destroying intermediate data are:
data and shall be treated with the same safeguards as a private keyā
Ā
Which seems to imply that itās perfectly ok for an application to access ML-DSA.KeyGen_internal and to store the private key as a seed. But this language seems to be in conflict with the language above.
Ā
Ā
So which is it? Is it FIPS-compliant to import / export private keys as seeds in, for example, PKCS#12 files?
Ā
Ā
PS ā sorry if this has been asked and answered already, Iām suffering from hyper-email-itis between this and all the IETF email lists.
Ā
[1]: https://datatracker.ietf.org/doc/draft-connolly-cfrg-xwing-kem/
---
Mike Ounsworth
Software Security Architect, Entrust
Ā
--
You received this message because you are subscribed to the Google Groups "pqc-forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pqc-forum+...@list.nist.gov.
To view this discussion visit https://groups.google.com/a/list.nist.gov/d/msgid/pqc-forum/CH0PR11MB573944D1440B5F75DB7260E29F4B2%40CH0PR11MB5739.namprd11.prod.outlook.com.
To unsubscribe from this group and stop receiving emails from it, send an email to pqc-forum+unsubscribe@list.nist.gov.
To unsubscribe from this group and stop receiving emails from it, send an email to pqc-forum+...@list.nist.gov.
--
You received this message because you are subscribed to the Google Groups "pqc-forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pqc-forum+...@list.nist.gov.
To view this discussion visit https://groups.google.com/a/list.nist.gov/d/msgid/pqc-forum/5b603caa-849b-4c65-bed4-aae1aa25670cn%40list.nist.gov.
FIPS 203 also says that:
āFor every computational procedure that is specified in this standard, a conforming implementation may replace the given set of steps with any mathematically equivalent set of steps. In other words, different procedures that produce the correct output for every
input are permitted.ā
I interpret APIs as mathematical steps in the computation process. For example, a single call to multiply() could
be replaced by multiple calls to add(). My view would be FIPS 203 can implemented with different APIs and still be compliant with the FIPS 203 specification. That is different from
FIPS-validation, which might require a specific API for practical purposes.
Cheers,
John
Ā
--
You received this message because you are subscribed to the Google Groups "pqc-forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pqc-forum+...@list.nist.gov.
To view this discussion visit https://groups.google.com/a/list.nist.gov/d/msgid/pqc-forum/5b603caa-849b-4c65-bed4-aae1aa25670cn%40list.nist.gov.
--
You received this message because you are subscribed to the Google Groups "pqc-forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
pqc-forum+...@list.nist.gov.
++ Deirdre.
Ā
(sorry for repeating myself from my other email).
Ā
It seems clear to me that FIPS 203 allows a crypto module to *internally* store the (properly-DRBGād) 64 byte seed and call ML-KEM.KeyGen_internal() at a later time. What is not clear to me is if FIPS 203 allows you to import a 64 byte seed from outside the cryptographic module (ex.: viaĀ PKCS#12 file), because then the module has no way to prove that the seed was generated with an approved DRBG. Gorjanās statement that this is allowed seems in direct conflict with the language discouraging KeyGen_internal() from being exposed to applications.
Ā
Ā
Also, I would like this same question specifically answered about ML-DSA (FIPS 204) where Section 6 does not contain that sentence about re-expanding a key from a seed. Are private key seeds allowed for ML-KEM but not for ML-DSA?
Ā
---
Mike Ounsworth
Ā
From: Deirdre Connolly <durumcr...@gmail.com>
Sent: Wednesday, October 30, 2024 1:21 PM
To: Gorjan Alagic <gorjan...@nist.gov>
Cc: pqc-forum <pqc-...@list.nist.gov>; Orie Steele <or...@transmute.industries>; p...@ietf.org <p...@ietf.org>; Mike Ounsworth <Mike.Ou...@entrust.com>
Subject: [EXTERNAL] Re: [pqc-forum] Is it FIPS-compliant to use private key seed for ML-DSA / ML-KEM?
Ā
I think part of the confusion is FIPS 203 says storing the (d, z) seed is allowed and it can be expanded via calling `ML-KEM.āKeyGen_internal()`, but then elsewhere in the document it says "the [internal] interfaces specified in this section
--
To unsubscribe from this group and stop receiving emails from it, send an email to pqc-forum+unsubscribe@list.nist.gov.