Repository navigation
Conversation
Post-quantum ML-DSA (FIPS 204) certificates are much larger than RSA or ECDSA ones: a single ML-DSA-65 certificate is about 10K characters and an ML-DSA-87 certificate about 13.5K characters as base64-encoded PEM, over the 8192 character limit of the certificate fields in ClusterImagePolicy and ImagePolicy. Raise the limit of caRootsData, caIntermediatesData and fulcioCAData to 32768 characters, enough for a root and an intermediate, or two roots, at ML-DSA-87. The public key fields stay at 8192, which already fits ML-DSA-87 public keys (about 4.8K characters). This only relaxes validation, so every existing object stays valid. Add integration tests with real ML-DSA-65/87 certificates that fail with the previous limit, and tests that reject data over the new limit.
|
Pipeline controller notification This PR uses the pipeline controller for second-stage tests. Selection and triggering follow the repository configuration. Use |
|
@harche: This pull request references OCPNODE-4791 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.1.0" version, but no target version was set. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
Skipping CI for Draft Pull Request. |
|
Hello @harche! Some important instructions when contributing to openshift/api: |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
⛔ Files ignored due to path filters (7)
📒 Files selected for processing (5)
Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 1 remain after this review. 📝 WalkthroughWalkthroughThe image policy type and its two CRD schemas increase the maximum length for Fulcio CA data, CA roots, and CA intermediate bundles from 8,192 to 32,768 characters. Their descriptions now state that the limit accommodates post-quantum (ML-DSA) certificates. Other validation rules remain unchanged. Priority: ➖ Normal Merge Risk: ⚪ Minimal · up to The larger certificate limit and its tests are consistent across the changed files. No concrete merge-blocking issue was established. 🚥 Pre-merge checks | ✅ 15✅ Passed checks (15 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Raises the size limit of the certificate fields in
ClusterImagePolicyandImagePolicyso they can hold post-quantum ML-DSA (FIPS 204) certificates. Tracked in OCPNODE-4791, under the ML-DSA sigstore signature validation epic OCPNODE-4638.Why
ML-DSA certificates are much larger than RSA or ECDSA ones.
maxLengthapplies to the base64 encoding of the PEM data, and these are the sizes measured with OpenSSL 3.6:With the current limit of 8192 characters, a single ML-DSA-65 or ML-DSA-87 certificate is rejected in a
PKIorFulcioCAWithRekorpolicy. A bundle of two ML-DSA-44 certificates is rejected too. CRI-O 1.38 already verifies ML-DSA sigstore signatures (Go 1.27crypto/mldsa, sigstore >= v1.11.0), and MCO copies the key and certificate data intopolicy.jsonwithout parsing it. That leaves these limits as the only blocker for ML-DSA PKI and Fulcio roots of trust.Change
caRootsData,caIntermediatesDataandfulcioCAData:maxLength8192 → 32768. That is enough for a root plus an intermediate, or two roots, at ML-DSA-87.keyDataandrekorKeyDatastay at 8192, which already fits ML-DSA-87 public keys.32768 keeps about the same headroom 8192 gave the largest classical certificates: 8192 fits three RSA-4096 certificates, and 32768 fits two ML-DSA-87 certificates (a root and an intermediate, or an old and a new root during rotation). CEL cost isn't a constraint: the most expensive rule (
findAll) is estimated at 52,437 against a per-rule limit of 10,000,000. Raising the limit further later is non-breaking.This only relaxes validation, so every existing object stays valid.
Tests
New cases for both
ClusterImagePolicyandImagePolicy, using real ML-DSA certificates:caRootsData,caIntermediatesDataandfulcioCADataover 32768 characters are rejectedWith the previous limit, each of the four positive cases fails, for example:
With this change,
make -C tests test GINKGO_EXTRA_ARGS='--focus=imagepolicies'passes all 74 specs, andmake lintreports 0 issues.