Replies: 3 comments
|
Thanks for this inventory. I've been maintaining something similar (using a different tool: https://www.ibm.com/docs/en/quantum-safe/quantum-safe-explorer/2.x?topic=quantum-safe-explorer-overview). About JWT, we started discussing with @sberyozkin about support for ML-DSA, and it's in progress. For WebAuthN, we haven't started work yet, but we will follow the same approach as for JWT. About your questions,
|
|
Thanks Clément, useful to know on all three. Quantum Safe Explorer is the build-and-semantic-analysis end of this; my scanner is deliberately the opposite trade, a no-build syntactic pass, so it is blind to exactly the Vert.x, Netty and Elytron sites you mention, where the algorithm arrives through an API rather than a JCA literal. Good to have that confirmed rather than assumed. The SmallRye JWT move to Nimbus and ML-DSA is the one production site the scan did flag, PublicKeySubstitution rebuilding an RSAPublicKey through KeyFactory. If it helps, I am happy to re-run the auditor once that PR lands and post the residual here, so you can see what the switch clears and what is left. When WebAuthn starts, WebAuthnCredentialRecord is the equivalent seam. If you found PQC Migration Readiness interesting, please leave us a star on our GitHub repository ⭐ https://github.com/Arpan0995/pqc-migration-readiness |
Uh oh!
There was an error while loading. Please reload this page.
In #55982 the conclusion was that Quarkus's post-quantum work sits in the TLS layer (Vert.x, Netty, the OpenSSL engine and the
key-exchange-groupsconfiguration) and in the JWT libraries, and @michalvavrik asked for focused follow-ups after analysing the current branch. This is one such follow-up from a different angle: a call-site scan of the Quarkus repository itself, to see how much asymmetric crypto Quarkus's own code touches.I maintain a static auditor that finds where a Java codebase uses quantum-vulnerable asymmetric crypto and estimates what changing it would cost (https://github.com/Arpan0995/pqc-migration-readiness, Apache-2.0). It reads source only, no build. I ran 1.4.0 on the 3.39.2 tag.
Headline: Quarkus's own code has a small asymmetric-crypto surface, and it sits where you would expect. 22,057 files scanned, 80 findings in 17 modules, and the top of the ranking is Quarkus's own integration-test harnesses rather than shipped extensions.
integration-tests/test-extension/extension/deployment,integration-tests/test-extension/extension/runtime,extensions/security-webauthn/runtime+4 moreintegration-tests/test-extension/extension/deployment,integration-tests/elytron-security,integration-tests/bouncycastle+6 moreintegration-tests/elytron-security,integration-tests/bouncycastle,test-framework/security-webauthn+1 moreintegration-tests/test-extension/extension/deployment,integration-tests/elytron-security,integration-tests/bouncycastle+3 moretest-framework/security-webauthnThe ranking as the tool prints it. One caveat first: its test-scope heuristic keys on
src/testpaths, and Quarkus keeps its integration tests as full modules with code undersrc/main, so rows 1 to 4, 7, 10 and 11 are test harnesses ranked as production. Discount them, and read the effort range above with the same discount, since most of its sites are theirs.integration-tests/test-extension/extension/deploymentintegration-tests/elytron-securityintegration-tests/bouncycastleintegration-tests/test-extension/extension/runtimeextensions/security-webauthn/runtimeextensions/smallrye-jwt/runtimetest-framework/security-webauthnextensions/devservices/oidcextensions/oidc-client-registration/runtimeintegration-tests/bouncycastle-fipsintegration-tests/oidc-client-registrationWhat is left after discounting the harnesses is four production sites:
extensions/security-webauthn/runtime:WebAuthnCredentialRecordrebuilds credential public keys throughKeyFactoryfor EC, EdDSA and RSA (lines 123 to 133) and casts them toECPublicKey,EdECPublicKeyandRSAPublicKey. That is the seam a post-quantum WebAuthn credential would have to pass through once the COSE side of that settles.extensions/smallrye-jwt/runtime:PublicKeySubstitutionis anObjectSubstitution<RSAPublicKey, PublicKeyProxy>and rebuilds the key withKeyFactory.getInstance("RSA"). An ML-DSA verification key would not pass through it as written.extensions/devservices/oidc: RSA key generation inOidcDevServicesProcessor(line 436) for the dev-services token issuer.extensions/oidc-client-registration/runtime:ClientMetadatabranches onRSAPublicKeyandECPublicKeywhen it serialises keys.Everything else in the list is an integration test or the build-time test extension. The scan finds no TLS pins in production code at all, which matches where #56262 ended up: the key-exchange choice lives in configuration and in the engine, not in Java literals.
Two limitations to state plainly:
quarkus.tls.*orsmallrye.jwt.*settings appears here. For Quarkus that is a property of the codebase, not a gap in it, and it is the reason the TLS half of Post-Quantum Cryptography (PQC) support: TLS key exchange and JWT signing readiness #55982 is invisible to this kind of scan by design.Two questions for the security team:
The full report is 80 findings, so the JSON and SARIF are small; happy to attach them if useful.
All reactions