Add support for ML-DSA PQC keys#19
Add support for ML-DSA PQC keys#19stefanberger wants to merge 8 commits intolinux-integrity:next-testingfrom
Conversation
1a1ad73 to
b04726b
Compare
80459bf to
37929f9
Compare
372ffa0 to
22c8a2b
Compare
|
Hi @stefanberger , If I understand the PR correctly, it's actually implementing Pre-Hash ML-DSA. Unfortunately, Currently CNSA 2.0 doesn't allow Pre-Hash ML-DSA,
|
Yes, I am actually aware of exactly this and was wondering whether CNSA 2.0 was either incomplete/incorrect, this had to do something with timing of publication versus timing of HashML-DSA addition to standard, or this means that HashML-DSA is optional and ML-DSA can be used also for hashes. So basically this CNSA 2.0 means "forget about HashML-DSA"?? But then CNSA 2.0 is from NSA and HashML-DSA is from NIST. Left hand / right hand problem?
|
... Also CNSA 2.1 could come out requiring "HashML-DSA" for products created in 202X and later -- if you can maintain backwards compatibility somehow. |
a91c745 to
fe98da5
Compare
|
Latest code push now uses pure-mode ML-DSA. |
6d327ef to
261c24b
Compare
|
Patch: "Support signing with ML-DSA keys when OpenSSL >=3.5 is available"
|
|
Patch: examples: Implement script to create ML-DSA-65 CA and signing keys AI comment: |
|
AI reported: |
Notify the user which signature version will be created when first --v3 (--v2) is passed and then switched to --v2 (--v3). Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
03bb46b to
4b507e2
Compare
|
Both fixed. |
|
|
||
| if (*sig) { | ||
| if (siglen < (1 + sizeof(*hdr) + slen)) { | ||
| siglen = -1; |
There was a problem hiding this comment.
Is this where the comment "Attempts to assign -1 to siglen, instead of slen." belongs?
There was a problem hiding this comment.
Printing an error here now but siglen = -1 is okay IMO.
There was a problem hiding this comment.
size_t is unsigned, while ssize_t is signed. siglen is defined as size_t, so it can't be -1.
| } else { | ||
| *sig = malloc(1 + sizeof(*hdr) + slen); | ||
| if (!*sig) { | ||
| siglen = -1; |
There was a problem hiding this comment.
Presumably also here?
There was a problem hiding this comment.
Printing an error here now but siglen = -1 is okay IMO.
There was a problem hiding this comment.
Same issue as above: size_t is unsigned, while ssize_t is signed. siglen is defined as size_t, so it can't be -1.
2271194 to
655f0ed
Compare
mimizohar
left a comment
There was a problem hiding this comment.
Typo: uppress -> suppress in "Add IGNORE_EMBEDDED_FUNCTION name to checkpatch ignore list to uppress the"
mimizohar
left a comment
There was a problem hiding this comment.
From AI: Missing '[' before "${min}"
error: if [ "${maj}" -lt 3 ] || ( [ "${maj}" -eq 3 ] && "${min}" -lt 5 ] ); then
corrected: if [ "${maj}" -lt 3 ] || ( [ "${maj}" -eq 3 ] && [ "${min}" -lt 5 ] ); then
Rename the suffix of temporary file from $FILE.tmp to $FILE.ima_file_id to encode in its name that it holds and ima_file_id structure. Fix an error message. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Add IGNORE_EMBEDDED_FUNCTION name to checkpatch ignore list to suppress the following type of warning: WARNING: Prefer using '"%s...", __func__' to using 'create_sigv3_mldsa', \ this function's name, in a string Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Set the size of an xattr_value that can be read to MAX_SIGNATURE_SIZE so that ML-DSA keys can also be read once enabled (and MAX_SIGNATURE_SIZE gets a larger value). Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Fix a memory leak by freeing pkey. Have it not report an error message again since an error was already reported. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
OpenSSL >= v3.5.0 supports signing with ML-DSA-44/65/87. Add support for it to the imaevm_create_sigv3 library function. Since the ML-DSA signatures require a lot more space for the signature now, increase the size of the array where the signatures are stored. The following are the sizes of ML-DSA signatures by key type: - ML-DSA-44: 2420 - ML-DSA-65: 3309 - ML-DSA-87: 4627 Prevent signature V2 from being created with any other key types than 'RSA', 'EC', 'GOST' (ECRDSA), or 'SM2'. In the functions that created a v2 signature, only RSA, ECDSA, and ECRDSA signatures are created and they can easily work with the old buffer size of less than 1024 bytes. The size available for extended attributes may be smaller than what is required by the ML-DSA signature size, and therefore may not be possible to store for example ML-DSA-87 signatures (depends on type of filesystem). Nevertheless, extend the MAX_SIGNATURE_SIZE to the required size of ML-DSA-87 and display an error if writing the signature of a size larger than 4k did not work. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
ima-gen-local-ca-mldsa65.sh creates a CA with an ML-DSA-65 key and ima-genkey-mldsa65.sh creates an ML-DSA-65 IMA file signing key along with its certificate. Also add a scripts for creating a ML-DSA-44 and ML-DSA-87 IMA file signing keys. The latter key is good for local testing with the largest possible signature. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Create ML-DSA-44 & ML-DSA-65 keys if ML-DSA-44 can be created with the installed version of OpenSSL. Add test cases for signing and verifying with these types of keys. Do not test with ML-DSA-87 keys since the signatures they create may be too large for some filesystems' xattrs. On Btrfs for example it would be possible to store the large signatures. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
This series adds support for ML-DSA PQC key support to the library and evmctl and adds test cases for signing and verifying to the sign_verfiy.test. It requires availability of OpenSSL 3.5.