Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JCConf 2026

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

JCConf 2026

From Theory to Practice: Real-World Lessons in Post-Quantum Cryptography Migration

Avatar for Akihiro Nishikawa

Akihiro Nishikawa

August 16, 2026

More Decks by Akihiro Nishikawa

Other Decks in Technology

Transcript

  1. From Theory to Practice: Real-World Lessons in Post-Quantum Cryptography Migration

    NISHIKAWA, Akihiro / Cloud Solution Architect, Microsoft
  2. Agenda Act 1: Why migration starts now Act 2: Java

    platform reality Act 3: Inventory and evidence Act 4: Five migration tracks Act 5: Rollout plan
  3. You do not need to be a cryptographer PQC =

    algorithms that run on today's computers, built to resist future quantum attacks • This is engineering work, not a maths lecture • Start with TLS. Then check what TLS does not cover • Byte-level detail lives in the appendix
  4. What you can take back on Monday PQC migration is

    not one switch. • JEP 527: a strong pilot path for hybrid TLS 1.3 in SunJSSE • It helps HTTPS key exchange — it does not migrate the app • Pick one real Java service. Find every crypto touchpoint • Name an owner and evidence for each one • Choose one reversible hybrid TLS pilot
  5. Five-track model • Track T: TLS and HTTPS key exchange

    • Track S: signed/encrypted objects — JWT, CMS, XML, JWE • Track C: certificates and PKI • Track K: KeyStores, HSMs, KMS platforms • Track P: partner protocols AS2, AS4, S/MIME, OFTP2 • Guardrail: never hide application encryption under TLS
  6. What Is at Risk – and What Is Not Not

    every algorithm must change. • At risk: RSA, Diffie-Hellman, ECDH, ECDSA • They agree keys, sign messages, prove identity • AES, SHA-2, SHA-3, HMAC — policy review, not first target • Find the public-key decision points first
  7. Why now? Lead time, not panic • NIST, NSA, UK

    NCSC point across this decade and the 2030s • Scoped guidance — not one universal deadline • Your date depends on system, jurisdiction, regulator • Work backwards from the date you must be ready • Month one is discovery, ownership, vendors, partners
  8. A customer case: why lead time matters • Thousands of

    touchpoints across apps, JDKs, libraries, keys, certs • Most sat outside the security module. Ownership was fragmented • Manual review did not scale • What worked: a four-layer inventory • What failed: runtime capability treated as route evidence — the edge terminated TLS
  9. HNDL – Harvest Now, Decrypt Later • Record protected traffic

    today, break the public-key part later • For recorded TLS, the decision that matters is key exchange • Hybrid TLS 1.3: clear scope, reversible change • But the first pilot is not always the biggest risk • Rank stored data by how long it must stay secret
  10. Two clocks: confidentiality and authenticity Two clocks, two problems. •

    Forgeable signatures mean impersonation — certs, JWTs, receipts • That is not the same as decrypting old captured traffic • Confuse the clocks and you delay the work that helps HNDL • The answer is not either-or. It is sequencing
  11. Java PQC platform map Ask "which surface?", not "does Java

    support PQC?" • Building blocks: ML-KEM, ML-DSA, KDF • JEP 527 connects them to one surface: hybrid TLS 1.3 in SunJSSE • JEP 527 helps Track T — not objects, certs, KeyStores, HSM, partners • Oracle plans hybrid TLS across LTS lines, JDK 8 to 25 • A vendor roadmap is not deployed evidence
  12. Primitive APIs are not application migration • A JDK primitive

    gives you ML-KEM or ML-DSA — nothing more • Each use case still needs a standard, a library, key material • Plus an owner and evidence • JWT, CMS, XML Signature, JAR signing, KeyStores mature separately • Track readiness per use case, not as one Java-wide status
  13. What JEP 527 changes in TLS • Client offers a

    hybrid group such as X25519MLKEM768 • Session secret combines classical X25519 and ML-KEM • An attacker must break both — that is the HNDL reduction • RFC 10024 puts the three ECDHE-MLKEM groups on the Standards Track • Delivered in JDK 27; GA planned 15 September 2026 • Record protection still uses normal AEAD ciphers
  14. Why hybrid, not pure PQC? • Compatibility and risk management

    • Classical fallback may be permitted — visible, owned, time-bounded • Hidden fallback means unmeasurable HNDL exposure • TLS 1.2 is a separate problem: move candidates to 1.3 first
  15. Cryptography is hidden in application systems • Framework defaults, HTTP

    clients, database drivers • KeyStores, TrustStores, JWT signing • Security sets policy. Platform ships approved providers • Application teams know which change breaks production • Migration is shared work
  16. Four-layer inventory Make each layer a search you can run

    before lunch. • Build — crypto libraries and TLS implementations • Source — crypto calls and algorithm strings • Config — KeyStores, TrustStores, TLS settings, endpoints • Runtime — evidence from the real route or object • Record owner, control point, and evidence for each hit
  17. One service, one inventory record • Five fields: track, owner,

    control point, behaviour, evidence • Track T · edge platform · public gateway · TLS 1.3 X25519 · gateway log • Blank owner, control point, or evidence = not ready for a decision • One service by hand teaches the method • You scale it with an automated crypto inventory in CI
  18. Demo beat 1: four-layer inventory with crypto-audit-demo • Build: Spring

    Security, DB driver, Bouncy Castle, JDK providers • Source: explicit crypto calls and algorithm strings • Config: TLS settings, KeyStores, certificates • Runtime: JFR shows TLS and certificate activity • Limit — JDK 27 JFR does not record the negotiated group • Hidden crypto becomes a backlog. Not yet proof
  19. How many crypto touchpoints are hiding? src/main ├── java/com/example/pqcdemo │

    ├── config │ │ └── SecurityConfig.java │ ├── controller │ │ └── ApiController.java │ ├── PqcDemoApplication.java │ └── service │ ├── EncryptionService.java │ ├── HmacService.java │ ├── JwtService.java │ └── LicenseService.java └── resources ├── application.properties └── keystore.p12
  20. What the audit finds - dependencies • Review first •

    JWT signing libraries • database drivers using TLS • general-purpose crypto providers 🔴 Quantum-vulnerable as used 🟡 Needs review 🟢 Low-risk 🔴 Nimbus JOSE+JWT used here for RSA (RS256) JWS 🟡 Bouncy Castle General-purpose crypto provider 🟡 Google Tink Algorithm hidden in key template 🟡 Spring Security BCrypt, crypto utilities 🟡 PostgreSQL JDBC TLS via driver configuration - easy to miss in code review 🟢 Commons Codec Hashing/encoding utilities 🟡 JDK built-in JCA/JCE Always available
  21. What the audit finds - source and config Crypto is

    often hidden behind framework APIs. 🔴 Spring Security: NimbusJwtEncoder signs JWTs with RSA. 🟡 Bouncy Castle: JcaContentSignerBuilder takes the signing algorithm as an argument. 🟡 Spring Boot: server.ssl.* enables TLS with almost no Java code. Keyword grep alone is not enough. • Read framework configuration and builder calls.
  22. What the audit finds – KeyStore Quantum-vulnerable material, but not

    the full TLS story 🔴 RSA-2048 server key 🔴 RSA-signed certificate chain Used for HTTPS authentication in this service. Same keystore is also referenced by JWT and licence flows in this demo. Needs review for certificate and signature migration. Does not prove the negotiated TLS named group.
  23. Layer 4 Needs Three Views Capability SSLContext.getDefault().getSupportedSSLParameters().getCipherSuites() or, per sockets:

    sslSocket.getSupportedSSLParameters().getNamedGroups() Configuration SSLParameters.setNamedGroups(...) -Djdk.tls.namedGroups=... Runtime JFR: jdk.TLSHandshake / jdk.X509Certificate / jdk.SecurityProviderService (since JDK20) Clear named-group proof: JSSE debug (-Djavax.net.debug=ssl:handshake:verbose) or packet capture: Outside the JVM: Edge TLS / Managed crypto / External identity
  24. What the audit finds – JFR runtime audit • Static

    analysis can miss runtime-only crypto behaviour. • Enable these JFR events below • Capture with jcmd JFR.start or a recording template. Events Helps with jdk.TLSHandshake TLS protocol version, cipher suite, peer, and certificate id jdk.X509Validation certificate-chain validation jdk.X509Certificate certificate inventory: subject, issuer, signature algorithm, key type, key size, validity jdk.SecurityPropertyModification security-property changes jdk.Deserialization deserialization-related security events jdk.SecurityProviderService provider, service type, and algorithm lookup
  25. Demo beat 2: deterministic hybrid TLS proof Close the gap:

    prove the negotiated group. • Client allows only the hybrid group and forces TLS 1.3 • Server allows only the same group • A successful handshake proves the group was selected • JSSE handshake debug captures the offer and the selection • Paired ClientHello and ServerHello = Level 3 evidence
  26. Evidence ladder for PQC readiness 1. Capability — the runtime

    can do it 2. Configuration — the service asks for it 3. Technical proof — the real route or object shows it 4. Business proof — the real client or partner accepts it 5. Operational proof — monitoring, rollback, owner, expiry Level 1 or 2 is preparation, not migration complete
  27. Crypto-agility makes migration possible • New and old data follow

    different rules during migration • Encrypt-new, decrypt-old. Sign-new, verify-old • Every exception needs an owner, a reason, and an expiry • Bad: algorithm names hard-coded in business logic • Good: business code asks for a use case; policy supplies the rest
  28. Crypto-agility example: policy, not hard-coding • Bad • code calls

    Signature.getInstance("SHA256withRSA") directly • Good • business code asks for a use case; policy supplies the rest • Policy layer supplies • algorithm, provider, key alias, validity, rollback • JWT policy: RS256 today, move only when everyone is ready • Default design for new Java services from day one
  29. Configuration – e.g. application.yml tls: key-exchange-mode: hybrid named-groups: [X25519MLKEM768, x25519]

    certificates: mode: classical application-signatures: mode: classical Keep four things in configuration: 1. Separate modes by migration track 2. Use standard names and complete transformations 3. Keep TLS named-group order outside code 4. Keep message-protection provider and message-protection: policy outside code cms-smime-mode: classical-baseline provider: BC content-cipher: AES/GCM/NoPadding key-wrap: RSAES-OAEP oaep-digest: SHA-256 oaep-mgf: MGF1 oaep-mgf-digest: SHA-256 oaep-label: empty pqc-pilot-target: ML-KEM-based CMS recipient flow when provider and peers are ready legacy-verify-allowed: true
  30. Track T – TLS / HTTPS key exchange • Start

    from a stable TLS 1.3 baseline • Pilot hybrid key exchange • Keep the hybrid group and classical fallback visible • Level 3 only when proof comes from the route you care about • Clear risk model, clear boundary
  31. Track T pitfalls • Enabling a group does not prove

    a session negotiated it • Resumed sessions do not show the same signal — test both • Larger ClientHello: middleboxes may drop it, showing as timeouts • JDK 27 puts the hybrid group first by default • Treat the JDK upgrade itself as a routelevel rollout item
  32. Choose the rollout boundary Where does TLS actually terminate? •

    If traffic ends at a CDN or LB, backend JVM settings change nothing • Service-to-service: SunJSSE may be the control point • Mesh, database, broker, partner gateway own part of the decision • Name five things: boundary, control point, evidence, fallback metric, rollback • Collect evidence at the same boundary as the control point
  33. Track S – Signed and encrypted application objects • Not

    the pipe — the objects the app creates, stores, sends • Signed: sign-new, verify-old-and-new during coexistence • Encrypted: encrypt-new, decrypt-old-and-new • Record creator, consumer, key, and how long old objects live • Done only when the real format works end to end — and rejects bad input
  34. Track C – Certificates / PKI • In TLS 1.3

    the session key comes from the ephemeral exchange • An RSA or ECDSA certificate can still use the hybrid group • Certificates solve a different problem: future impersonation • Plan CA hierarchy, TrustStore, renewal, revocation, pinning, validation
  35. Track K – Key and secret management Track K is

    often the blocker. • You cannot convert an RSA key into ML-DSA or ML-KEM • Create new key material alongside the old • Check the real path: key types, provider, rotation, backup, recovery, audit • Certificates, signatures, and partners all depend on keys • An untracked fallback is a downgrade, not a safe mode
  36. Track P – Partner protocols • Another organisation is involved

    • Transport may follow Track T — the message layer is separate • Name partner, gateway, security profile, test artefact, fallback, cutover • AS2 and AS4 use different message-security stacks • An HTTPS upgrade alone proves nothing about the message path
  37. Same discipline, different mechanisms The operating model is reusable, not

    the handshake. • Choose a boundary. Name the owner. Find the control point • Run a small pilot. Collect proof. Keep fallback visible • Define rollback. Monitor exceptions • T is the reference case; S coexists objects; C plans PKI • K coexists keys; P tests bilaterally
  38. Production change order A dependency model, not one fixed plan.

    • Track T often moves first — it reduces HNDL and you control it • Track K discovery starts in parallel: everything depends on keys • Track P cuts over late, but the conversation starts early • The goal is not solving every track at once
  39. Pilot success gates • Scope and owner are named •

    Security: the real route proves negotiation and visible fallback • Compatibility: real clients complete the workflow • Operations: baseline, thresholds, rollback action, owner • A metric without a threshold is observation, not a gate
  40. Observability and policy PQC migration is not a single ticket.

    • Standards, libraries, providers, and partners keep changing • Start-up checks, runtime telemetry, policy exceptions, CI checks • Exceptions need an owner, a reason, and an expiry • Without observability, old algorithms return through a dependency bump • Watch negotiation, fallback, cert and key lifecycle, exceptions
  41. Final guardrail: ask for evidence Every PQC claim needs a

    boundary and evidence. • "Java supports PQC" — which track? • "The provider supports it" — did the real route or object use it? • "The partner is ready" — which version, profile, test, rollback owner? • These questions protect the plan from overclaiming
  42. Key takeaways – the Monday test Five things to remember:

    • Quantum risk starts with public-key crypto • JEP 527 gives Track T a path — not the whole application • Readiness is evidence, not capability • Plan all tracks in parallel; sequence production • New service? Put the seams in before release Monday: one service, five fields, one reversible Track T pilot