<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Paulo Victor Leite Lima Gomes</title>
    <description>The latest articles on DEV Community by Paulo Victor Leite Lima Gomes (@pvgomes).</description>
    <link>https://dev.to/pvgomes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F109646%2F27accb17-594d-4776-b421-db7cca109bfe.jpg</url>
      <title>DEV Community: Paulo Victor Leite Lima Gomes</title>
      <link>https://dev.to/pvgomes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pvgomes"/>
    <language>en</language>
    <item>
      <title>A vulnerability report is not a bug ticket</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Wed, 16 Sep 2026 14:00:20 +0000</pubDate>
      <link>https://dev.to/pvgomes/a-vulnerability-report-is-not-a-bug-ticket-25hg</link>
      <guid>https://dev.to/pvgomes/a-vulnerability-report-is-not-a-bug-ticket-25hg</guid>
      <description>&lt;p&gt;It is 16:47 on a Friday.&lt;/p&gt;

&lt;p&gt;The report does not arrive in the security inbox. It arrives in a public GitHub issue, or worse, in the community Slack, or a DM to whoever was last active on the repo. It is written by someone who clearly knows what they are doing. There is a payload. There is a reproduction. There is a version number, and it is the version you shipped to production last week.&lt;/p&gt;

&lt;p&gt;And it is public.&lt;/p&gt;

&lt;p&gt;By 17:05 you have three problems, not one. There is a vulnerability. There is a disclosure control failure. And there is a small group of people trying to decide, in real time, who is allowed to read the thread, who owns the fix, and whether the person who found it is going to publish on Monday regardless of what you say.&lt;/p&gt;

&lt;p&gt;That last part is not a security problem. It is an operations problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  SECURITY.md is the front door, not the process
&lt;/h2&gt;

&lt;p&gt;Most projects that "have disclosure" have a &lt;code&gt;SECURITY.md&lt;/code&gt; with an email address and a sentence about responsible disclosure. Maybe a PGP key. Maybe a 90-day quote lifted from a blog post.&lt;/p&gt;

&lt;p&gt;That is a front door. A door is not a building.&lt;/p&gt;

&lt;p&gt;CNCF published a &lt;a href="https://www.cncf.io/blog/2026/09/07/handling-vulnerability-reports-recipe-card/" rel="noopener noreferrer"&gt;handling vulnerability reports recipe card&lt;/a&gt; in September 2026 aimed exactly at small and medium projects without a security team. It is good guidance, and it is honest about scope: it covers the policy artifacts. The hard part is not the policy text. The hard part is that a policy document does not decide who gets woken up, who has write access to the private fix branch, or who signs off on the advisory wording.&lt;/p&gt;

&lt;p&gt;GitHub gives you &lt;a href="https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/about-privately-reporting-a-security-vulnerability" rel="noopener noreferrer"&gt;private vulnerability reporting&lt;/a&gt; and &lt;a href="https://docs.github.com/en/code-security/concepts/vulnerability-reporting-and-management/repository-security-advisories" rel="noopener noreferrer"&gt;repository security advisories&lt;/a&gt; with private forks, private discussion, CVE requests, and coordinated publication. OpenSSF's &lt;a href="https://github.com/ossf/wg-vulnerability-disclosures" rel="noopener noreferrer"&gt;vulnerability disclosures working group&lt;/a&gt; publishes templates and runbooks. CISA has a &lt;a href="https://www.cisa.gov/resources-tools/resources/vulnerability-disclosure-policy-template" rel="noopener noreferrer"&gt;disclosure policy template&lt;/a&gt;. FIRST has an entire &lt;a href="https://www.first.org/standards/frameworks/psirts/psirt_services_framework_v1.1" rel="noopener noreferrer"&gt;PSIRT services framework&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The tooling exists. The templates exist. And teams still improvise the moment a real report lands, because none of that tells you who owns triage at 16:47 on a Friday.&lt;/p&gt;

&lt;p&gt;My take:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a vulnerability report is not a bug ticket. It is an operational event with a clock attached.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The clock is the entire point. A bug can sit in a backlog for a quarter. A vulnerability report starts an embargo, and an embargo is a countdown that a stranger is holding.&lt;/p&gt;

&lt;h2&gt;
  
  
  the first 24 hours decide everything
&lt;/h2&gt;

&lt;p&gt;The first 24 hours determine whether this becomes engineering work or organizational panic. Panic looks like: a dozen people pulled into a call, three half-fixes started in parallel, a draft advisory circulating in a doc that is not access-controlled, and public speculation while nobody has confirmed impact.&lt;/p&gt;

&lt;p&gt;The output of the first 24 hours should be small and boring:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Acknowledged.&lt;/strong&gt; The reporter knows a human received it, and knows approximately when they will hear more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contained.&lt;/strong&gt; The report is in a private channel, not a public issue, and comments are frozen in the public place if it leaked there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owned.&lt;/strong&gt; One named person owns the report until it closes. Not a team. A person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classified.&lt;/strong&gt; Initial severity, affected versions, and exploitability — provisional is fine, unstated is not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled.&lt;/strong&gt; A tentative disclosure date, communicated to the reporter.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you cannot produce those five things within a day, your &lt;code&gt;SECURITY.md&lt;/code&gt; is marketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  the intake contract
&lt;/h2&gt;

&lt;p&gt;Intake is where most processes quietly fail, because the reporting path is whatever channel the reporter happens to find. You cannot fix that by asking nicely. You fix it by making the intended path obviously the best one.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One canonical intake.&lt;/strong&gt; Private vulnerability reporting enabled on the repo, plus a monitored security address for people who do not want to use GitHub. Both routed to the same place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Say what happens next on the page.&lt;/strong&gt; "We acknowledge within 3 business days, we triage within 5, we will tell you our severity assessment and target disclosure window." A reporter who knows the timeline argues less about the timeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require evidence, not drama.&lt;/strong&gt; Affected version or commit, component, reproduction steps or PoC, observed impact, and whether the reporter has shared it anywhere else. That last question matters more than people expect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restrict the audience from the start.&lt;/strong&gt; A security alias that forwards to a 40-person engineering mailing list is not a private channel. It is a leak with extra steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assume reports will land in public anyway.&lt;/strong&gt; Someone will file the issue publicly. Have a canned response that moves the conversation without confirming exploitability, and a moderator who can lock the thread fast.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The intake contract is not about gatekeeping researchers. It is about making sure the first person who reads the report is the right person.&lt;/p&gt;

&lt;h2&gt;
  
  
  the triage contract
&lt;/h2&gt;

&lt;p&gt;Triage is where "vulnerability" and "bug" get separated, and it is the step AI is currently making harder.&lt;/p&gt;

&lt;p&gt;A working triage decision answers five questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Is this a vulnerability or a robustness bug?&lt;/strong&gt; A crash on malformed input is not automatically a security issue. An auth bypass is, even if the user must already be authenticated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is the impact if exploited?&lt;/strong&gt; Confidentiality, integrity, availability, or privilege boundary crossed. Be specific about which boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How exploitable is it really?&lt;/strong&gt; Does it require a local attacker, an authenticated tenant, a non-default configuration, or a specific race window? Severity without exploitability context is a number nobody can act on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which versions are affected, and which are supported?&lt;/strong&gt; Fixing an unsupported version is a gift, not an obligation. Say so early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What does the reporter hear, and when?&lt;/strong&gt; A triaged report always gets a reply with the assessment, even when the assessment is "not a vulnerability, here is why."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is the one teams skip, and it is the cause of most hostile disclosures. Researchers escalate when they are ignored, not when they are told no.&lt;/p&gt;

&lt;h2&gt;
  
  
  the embargo contract
&lt;/h2&gt;

&lt;p&gt;An embargo is not secrecy. It is a coordinated agreement with a deadline, and it should have the smallest useful group of people inside it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smallest useful group.&lt;/strong&gt; Everyone who must act, nobody who is merely curious. Product managers who are not shipping a mitigation do not need the PoC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the timeline down.&lt;/strong&gt; Report date, triage date, fix target, disclosure date. Everyone in the thread can see the same clock.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Know what confidentiality means in practice.&lt;/strong&gt; Private advisory or private fork instead of a public PR. No screenshots of the exploit in a shared doc. No vague "we have an issue" in the incident channel that turns into a game of twenty questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide the default window before you are under pressure.&lt;/strong&gt; 90 days is a convention, not a rule. Some projects use 7 days for actively exploited issues and 30 for everything else. What matters is that the number is written down and defensible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle disagreement explicitly.&lt;/strong&gt; If the reporter wants to publish early, or you need an extension, that is a negotiation with a stated reason — not silence and not a legal threat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The embargo ends when the fix is available, or when the deadline arrives and it is not. Both are allowed. Pretending the deadline does not exist is how you end up reading about your own bug on a security news site with no patch ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  the fix and release contract
&lt;/h2&gt;

&lt;p&gt;This is where disclosure becomes ordinary engineering, with two differences: the branch is private, and the communication is public.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Private fix path.&lt;/strong&gt; Private fork or advisory branch, minimal diff, and reviewers who were explicitly added. No drive-by refactors while the clock runs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focused review.&lt;/strong&gt; Security fixes get a second pair of eyes from someone who can evaluate the boundary being crossed, not just the code style. Reviewers outside the embargo circle do not get the context, and that is fine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test evidence.&lt;/strong&gt; A regression test that fails before the fix and passes after. If you cannot write it, say why in the advisory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixed version plus mitigation.&lt;/strong&gt; Not every team can upgrade immediately. Backports, config workarounds, feature flags, and WAF rules are all legitimate. An advisory that says "upgrade" and nothing else gets ignored by everyone who cannot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advisory, CVE, and user notification.&lt;/strong&gt; GHSA draft, CVE requested when the ecosystem needs it, severity with the exploitability caveats from triage, affected versions, credits to the reporter, and a link to the fixed release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tell your users where they actually look.&lt;/strong&gt; Release notes, a mailing list, a security page, an RSS feed, a Slack or Discord announcement. Publishing the advisory is not notifying users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The measure of a good fix-and-release contract is the person running your software in production who finds out what to do without reading a research write-up.&lt;/p&gt;

&lt;h2&gt;
  
  
  the AI wrinkle
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.cncf.io/blog/2026/04/16/the-ai-driven-shift-in-vulnerability-discovery-what-maintainers-and-bug-finders-need-to-know/" rel="noopener noreferrer"&gt;AI-driven shift in vulnerability discovery&lt;/a&gt; is real, and it cuts both ways.&lt;/p&gt;

&lt;p&gt;More reports are now generated by models pointed at codebases, and some of them are genuinely good: real bugs, real reproduction steps, reachable paths that a human reviewer missed. Others are confident, well-formatted, plausible-sounding findings with no reachable impact — a stack trace, an invented threat model, and a severity score chosen for drama.&lt;/p&gt;

&lt;p&gt;Two things change:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Triage volume goes up without triage quality going up with it.&lt;/strong&gt; A process that assumed a few thoughtful reports a month now gets a stream of synthetically detailed ones. That is fine as long as triage is evidence-based: does the repro actually work against a supported version? Is the code path reachable in a default deployment? Is the described impact real, or does it assume an attacker who already has the access the finding claims to escalate?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;False positives get expensive because they look like real work.&lt;/strong&gt; Every convincing-but-wrong report costs an engineer a day. Track that cost. If a share of your inbound reports never reproduce, that is a process input, not an annoyance — it tells you where your intake needs a reproduction requirement enforced harder.&lt;/p&gt;

&lt;p&gt;The upside is equally real. AI-assisted review is genuinely good at finding the class of bug that humans skim past: missing authorization checks, unsafe deserialization, off-by-one in parsing, weak validation at boundaries. The maintainers who benefit are the ones whose triage process can absorb a higher volume without lowering the bar.&lt;/p&gt;

&lt;p&gt;Which is the whole point of an operations contract. It is the thing that lets you say "this is credible" or "this is not" quickly, and move on either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  a practical checklist for maintainers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;code&gt;SECURITY.md&lt;/code&gt; points to one canonical private intake channel and states response timelines.&lt;/li&gt;
&lt;li&gt;[ ] Private vulnerability reporting is enabled on every actively maintained repo.&lt;/li&gt;
&lt;li&gt;[ ] One named owner for triage, with a documented backup.&lt;/li&gt;
&lt;li&gt;[ ] A severity assessment template: impact, exploitability, affected versions, default-config reachability.&lt;/li&gt;
&lt;li&gt;[ ] A written disclosure window with defaults and an escalation path for active exploitation.&lt;/li&gt;
&lt;li&gt;[ ] An embargo list discipline: smallest group, audited access, no public forks or PRs.&lt;/li&gt;
&lt;li&gt;[ ] A private fix procedure: advisory branch, focused reviewers, regression test required.&lt;/li&gt;
&lt;li&gt;[ ] A release procedure that ships the fix, the advisory, the CVE, the mitigation, and the notification.&lt;/li&gt;
&lt;li&gt;[ ] A public-leak playbook: canned response, thread lock, move to private, no confirmation of exploitability.&lt;/li&gt;
&lt;li&gt;[ ] Credit and thank reporters, including the ones who file a false positive in good faith.&lt;/li&gt;
&lt;li&gt;[ ] A quarterly game day: walk a synthetic report through the whole path and time it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this requires a security team. It requires someone to write down the decision that would otherwise be made by five people in a panic under time pressure.&lt;/p&gt;

&lt;p&gt;A bug ticket asks "what should we build next." A vulnerability report asks "what do we do in the next 24 hours, and who decides." Different queues, different clocks, different consequences.&lt;/p&gt;

&lt;p&gt;Write the contract before the reporter finds the door.&lt;/p&gt;




&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CNCF/TAG Security: &lt;a href="https://www.cncf.io/blog/2026/09/07/handling-vulnerability-reports-recipe-card/" rel="noopener noreferrer"&gt;Handling vulnerability reports — recipe card&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CNCF: &lt;a href="https://www.cncf.io/blog/2026/04/16/the-ai-driven-shift-in-vulnerability-discovery-what-maintainers-and-bug-finders-need-to-know/" rel="noopener noreferrer"&gt;The AI-driven shift in vulnerability discovery&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenSSF: &lt;a href="https://github.com/ossf/wg-vulnerability-disclosures" rel="noopener noreferrer"&gt;Vulnerability Disclosures Working Group repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenSSF: &lt;a href="https://openssf.org/groups/vulnerability-disclosures/" rel="noopener noreferrer"&gt;Vulnerability Disclosures group overview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Docs: &lt;a href="https://docs.github.com/en/code-security/concepts/vulnerability-reporting-and-management/repository-security-advisories" rel="noopener noreferrer"&gt;Repository security advisories&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Docs: &lt;a href="https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/about-privately-reporting-a-security-vulnerability" rel="noopener noreferrer"&gt;About privately reporting a security vulnerability&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CISA: &lt;a href="https://www.cisa.gov/resources-tools/resources/vulnerability-disclosure-policy-template" rel="noopener noreferrer"&gt;Vulnerability disclosure policy template&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;FIRST: &lt;a href="https://www.first.org/standards/frameworks/psirts/psirt_services_framework_v1.1" rel="noopener noreferrer"&gt;PSIRT Services Framework v1.1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>the revolut breach is an automation boundary problem</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Tue, 15 Sep 2026 16:47:45 +0000</pubDate>
      <link>https://dev.to/pvgomes/the-revolut-breach-is-an-automation-boundary-problem-1kje</link>
      <guid>https://dev.to/pvgomes/the-revolut-breach-is-an-automation-boundary-problem-1kje</guid>
      <description>&lt;p&gt;Revolut did not get hacked.&lt;/p&gt;

&lt;p&gt;Someone asked for customer data from an email that looked like it came from a government agency, and Revolut sent it.&lt;/p&gt;

&lt;p&gt;That is the whole story, and it is worse than a hack.&lt;/p&gt;

&lt;h2&gt;
  
  
  what actually happened
&lt;/h2&gt;

&lt;p&gt;Revolut confirmed it disclosed sensitive customer data to fraudsters who submitted fraudulent information requests from a legitimate government agency email domain. In its own words, it identified "a sophisticated external impersonation scam where an unauthorised third party utilised a legitimate government agency domain email to submit fraudulent requests for information."&lt;/p&gt;

&lt;p&gt;The exposed data is the kind that cannot be reissued: passport and driver's licence copies, verification selfies, dates of birth, postal and email addresses, phone numbers, bank statements, IBANs, withdrawal records, and transaction histories including Bitcoin activity.&lt;/p&gt;

&lt;p&gt;Revolut says a limited number of customers were affected, that it notified them directly, and that its systems and customer funds were not compromised. On detection it blocked the sender and alerted the government agency, law enforcement, data protection, and financial regulators.&lt;/p&gt;

&lt;p&gt;The attackers appear to have gone after high net worth individuals, many of them in crypto, and an extortion payment was reportedly demanded.&lt;/p&gt;

&lt;p&gt;None of this is new in shape. Researchers linked a wave of similar incidents in 2021 and 2022 to the Lapsus$ group, which used compromised law enforcement accounts and forged emergency data requests to pull data out of Apple, Meta, and Discord. The FBI issued an alert in 2024 about fraudulent emergency data requests, noting a growing market on criminal forums for access to compromised email accounts specifically to send them.&lt;/p&gt;

&lt;p&gt;So the pattern is documented, the tactic is known, and it still worked.&lt;/p&gt;

&lt;h2&gt;
  
  
  the weak link was identity, not cryptography
&lt;/h2&gt;

&lt;p&gt;Everything in that pipeline probably worked exactly as designed. TLS terminated correctly. The domain authenticated. The ticket was created, the approval probably existed, the audit log was written.&lt;/p&gt;

&lt;p&gt;None of that answers the only question that matters: is the human on the other end who they claim to be?&lt;/p&gt;

&lt;p&gt;Domain authentication proves a mail server, not a person. SPF, DKIM, and DMARC tell you the message really came from that domain. They tell you nothing about who composed it, whether the mailbox is compromised, or whether an insider sold access to it. A valid domain is a weak signal dressed up as a strong one, because it is the only signal most teams look at.&lt;/p&gt;

&lt;p&gt;The attacker did not defeat Revolut's security. They used the fact that the request was boring enough to be processed and official enough to be trusted.&lt;/p&gt;

&lt;h2&gt;
  
  
  your security ends where your process begins
&lt;/h2&gt;

&lt;p&gt;Every company has workflows that make decisions based on an external identity claim. A request from a regulator. A vendor onboarding email. A "support" phone call. A bank details change form with a letterhead attached. A legal letter asking for records.&lt;/p&gt;

&lt;p&gt;Those dependencies are not failures by themselves. You cannot verify the world. But they are the boundary of your security model, and most teams have never drawn that boundary anywhere.&lt;/p&gt;

&lt;p&gt;Here is the exercise that matters, and it is not a security tool purchase:&lt;/p&gt;

&lt;p&gt;List every automated workflow that can be triggered by someone outside the company. Then mark, for each one, whether the trigger's identity is verified by you or merely asserted by them.&lt;/p&gt;

&lt;p&gt;Asserted identity plus automation equals a breach waiting for a plausible email.&lt;/p&gt;

&lt;p&gt;That single column usually explains incidents like this better than any threat model.&lt;/p&gt;

&lt;h2&gt;
  
  
  the channels we never treated as engineering
&lt;/h2&gt;

&lt;p&gt;Look at the asymmetry in how we treat interfaces.&lt;/p&gt;

&lt;p&gt;An API gets tokens, scopes, mTLS, network boundaries, rotation, rate limits, and a team that looks at it every day. If someone changes an API integration, it goes through review.&lt;/p&gt;

&lt;p&gt;Email and phone calls got treated as plain data transfer. Not engineering. Just the way humans talk to companies.&lt;/p&gt;

&lt;p&gt;But the moment an email can trigger a workflow that exports identity documents, email is not data transfer anymore. It is an unauthenticated control plane with a human-shaped interface. It is also the most automated channel in the company, because we wired inboxes into ticketing systems, compliance queues, and now AI agents that triage and summarise.&lt;/p&gt;

&lt;p&gt;We hardened the channel we already understood and left the one that arrives as text.&lt;/p&gt;

&lt;p&gt;That is the structural finding in this incident, and it applies far beyond Revolut.&lt;/p&gt;

&lt;h2&gt;
  
  
  guardrails, not reminders
&lt;/h2&gt;

&lt;p&gt;If the root cause is a workflow that trusts an unverified channel, then "be more careful" is not a control. These are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier by reversibility, not by category.&lt;/strong&gt; If an action cannot be undone, it should never run fully automated. Handing over passport scans, selfies, and transaction histories is irreversible. That step needs a human with a name attached to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Separate routine from exceptional, and default the exceptional path to human.&lt;/strong&gt; Automate the common case if you must. Anything unusual becomes a break-glass path with named approvers. Make "unusual" a computable property: new requester, broader data scope than previous requests, unusual volume, unusual urgency, unusual time of day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify out of band, always.&lt;/strong&gt; Call the agency on a number you already had, not one from the email. Use a portal with mutual authentication. If you must accept email, require signed requests with keys exchanged out of band. "The domain looked right" is not verification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use AI to screen, not to decide.&lt;/strong&gt; Models are genuinely good at the anomaly detection humans skip under deadline pressure: pressure language, a request much broader than the last ten, first-time contact, mismatched signatures, formatting that does not match the agency's usual output. Let AI raise the flag and route to a human. Never let it be the final approver for an irreversible disclosure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cap the blast radius structurally.&lt;/strong&gt; Ask why one request can return passports, selfies, statements, IBANs, and crypto transaction history together. Separate stores, shorter retention on biometrics, per-request record limits, and alerts on bulk document export turn a catastrophe into an inconvenience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log decisions as data.&lt;/strong&gt; Who asked, what was disclosed, who approved, and on what evidence. If you cannot reconstruct that in an hour, you cannot answer a regulator in a week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rehearse the manual path.&lt;/strong&gt; An untested review process becomes a rubber stamp the first time a legal deadline meets a tired engineer.&lt;/p&gt;

&lt;h2&gt;
  
  
  is revolut the villain here
&lt;/h2&gt;

&lt;p&gt;Partly, and it is fair to say so. They owned the workflow, and the workflow handed over documents.&lt;/p&gt;

&lt;p&gt;But look at what they did not own. The government's email domain. The agency's inability to be impersonated. And the assumption, shared across the industry, that a request arriving through an official channel is an official request.&lt;/p&gt;

&lt;p&gt;If a legitimate domain can be used to request identity documents, and nobody in the loop is required to verify the requester, then every fintech running the same compliance process has the same exposure. Revolut is the one that got the email. It is not the only one that would have answered it.&lt;/p&gt;

&lt;p&gt;Regulators have a part to play too. Lawful data requests should travel over authenticated channels: signed requests, registered endpoints, mutual TLS, an auditable registry of who is authorised to ask. Until that exists, companies are expected to be polite, fast, and legally compliant over a channel that proves nothing. That is a bad deal, and it is being paid for by customers whose passports are now circulating.&lt;/p&gt;

&lt;h2&gt;
  
  
  what to do on monday
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inventory every automated workflow that a third party can trigger.&lt;/li&gt;
&lt;li&gt;Mark each trigger as verified or merely asserted.&lt;/li&gt;
&lt;li&gt;Remove full automation from exceptional and irreversible paths.&lt;/li&gt;
&lt;li&gt;Add out-of-band verification for any disclosure of identity documents.&lt;/li&gt;
&lt;li&gt;Put AI in the screening layer, with a human on the approval.&lt;/li&gt;
&lt;li&gt;Alert on bulk access to documents, selfies, and transaction history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lesson is not that Revolut trusted an email. The lesson is that a whole industry automated a channel that was never designed to prove identity, and then treated the resulting trust as a security control.&lt;/p&gt;

&lt;p&gt;Fix the boundary first. Then automate.&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://therecord.media/revolut-scam-crypto-impersonation" rel="noopener noreferrer"&gt;The Record: Revolut handed customer data to fraudsters using government email account&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bleepingcomputer.com/news/security/revolut-discloses-data-breach-exposing-financial-info-passports/" rel="noopener noreferrer"&gt;BleepingComputer: Revolut discloses data breach exposing financial info, passports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.malwarebytes.com/blog/news/2026/09/revolut-gave-customer-ids-and-financial-data-to-a-government-impostor" rel="noopener noreferrer"&gt;Malwarebytes: Revolut gave customer IDs and financial data to a government impostor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.forbes.com/sites/boazsobrado/2026/09/15/revolut-shock-fake-government-email-leaks-passports-bitcoin-77200/" rel="noopener noreferrer"&gt;Forbes: Revolut shock, fake government email leaks passports and Bitcoin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ic3.gov/CSA/2024/241104.pdf" rel="noopener noreferrer"&gt;FBI IC3: Cyber criminals use compromised email accounts to submit fraudulent emergency data requests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum tls is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Tue, 15 Sep 2026 15:00:18 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-50df</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-50df</guid>
      <description>&lt;p&gt;Every few months someone asks me when quantum computers will break RSA.&lt;/p&gt;

&lt;p&gt;I have stopped answering that question, because it is not the question engineering teams actually have.&lt;/p&gt;

&lt;p&gt;The question they have is much less glamorous: do we know which of our services, SDKs, middleboxes, payment integrations, and certificate workflows will tolerate a bigger handshake, a hybrid key exchange, and eventually post-quantum signatures? Most teams cannot answer that today. And 2026 is the year the cloud providers started answering it for them, by changing the defaults.&lt;/p&gt;

&lt;p&gt;That is the whole story. The quantum timeline is a distraction. The migration is already arriving through the boring doors: managed TLS endpoints, SDK defaults, CDN edge configuration, OS crypto libraries, and certificate tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  the narrow technical shift
&lt;/h2&gt;

&lt;p&gt;Strip away the hype and the change is small and specific.&lt;/p&gt;

&lt;p&gt;TLS 1.3 key exchange is currently dominated by X25519, an elliptic-curve Diffie-Hellman variant. It is fast, small, and well understood. The post-quantum concern is not that someone recorded your traffic and can decrypt it now. It is that a future quantum computer could decrypt recorded traffic later, which is exactly why anything with a long confidentiality lifetime, like a banking session log or a signed document, gets uncomfortable first.&lt;/p&gt;

&lt;p&gt;The industry response was never "replace X25519 with something quantum-safe." It was hybrid: run the classical curve and the post-quantum key encapsulation together, and combine the results. If either holds, the session holds. That is what ML-KEM (FIPS 203, the standardized descendant of CRYSTALS-Kyber) provides, and it is why the IETF draft on ML-KEM for TLS 1.3 exists in the first place.&lt;/p&gt;

&lt;p&gt;The practical consequence is size. A hybrid key share is much larger than an X25519 key share. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bigger ClientHello messages&lt;/li&gt;
&lt;li&gt;more bytes before the handshake completes&lt;/li&gt;
&lt;li&gt;more chances to hit fragmentation, MTU limits, or middleboxes that "helpfully" drop what they do not recognize&lt;/li&gt;
&lt;li&gt;more chances for an old client to negotiate a fallback group and nobody notice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here is the part people conflate: key exchange and signatures are different problems with different timelines. ML-KEM protects the session key. Post-quantum signatures and how they land in certificates and code signing is a separate migration with its own compatibility and trust-chain pain. You can ship the first without having solved the second, and you probably should, because the first is already being turned on for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  what changed in 2026
&lt;/h2&gt;

&lt;p&gt;This stopped being a standards-track slide deck this year.&lt;/p&gt;

&lt;p&gt;AWS shipped ML-KEM hybrid post-quantum TLS support across KMS, ACM, and Secrets Manager, and it is explicit that the older CRYSTALS-Kyber support will be removed across AWS service endpoints in 2026. That second sentence is the one to underline. This is not an opt-in curiosity anymore. It is a controlled API surface with a deprecation calendar attached.&lt;/p&gt;

&lt;p&gt;Cloudflare documents post-quantum support for edge-to-origin TLS, including X25519MLKEM768 for key agreement and ML-DSA for origin authentication, with clear notes about where it is supported and where it is constrained. Microsoft shipped Windows platform support for ML-KEM hybrid TLS groups and is openly talking about an accelerated migration path for critical products and services toward 2029. The IETF draft for ML-KEM in TLS 1.3 is active.&lt;/p&gt;

&lt;p&gt;And then there is the measurement reality. A June 2026 measurement paper looking at post-quantum readiness across more than 32,000 domains found the internet is not uniformly ready, with particular lag around banking and government TLS 1.2 endpoints and post-quantum certificate adoption. I find that more useful than any roadmap slide, because it says the failure modes will be uneven and depend on what your specific clients do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhzgu3hiae5nlit5zn7l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhzgu3hiae5nlit5zn7l.gif" alt="this is fine" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  translate it into platform work
&lt;/h2&gt;

&lt;p&gt;Here is where I push back on how most teams are framing this.&lt;/p&gt;

&lt;p&gt;If PQC lives only in a security-owned ticket, it will get treated as a cryptography review that produces a PDF and no changes. That is a mistake. The actual work is platform work, and it looks a lot like every other platform migration you have done badly before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inventory your outbound clients and TLS stacks.&lt;/strong&gt; Not your externally facing load balancers, which are usually the easy part, but everything that makes an outbound TLS connection. Application runtimes, language crypto libraries, JDK versions, Go and Rust toolchains, database drivers, message bus clients, cron jobs, batch exports, and the one internal tool that has not been rebuilt since a migration ago. Different stacks gain hybrid group support at different times, and some old ones never will.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test service-to-service paths end to end.&lt;/strong&gt; A handshake does not happen between two applications. It happens through whatever is in the middle: proxies, API gateways, service meshes with their own TLS origination, CDNs, WAFs, egress filters, and vendor middleboxes that terminate and re-establish TLS. Those are where the surprises live. Payment and fintech integrations are the highest-stakes version of this, because a partner that pins groups, inspects traffic, or terminates in something old will fail in a way that looks like "the vendor is down."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the right signals.&lt;/strong&gt; This migration is observable, which is the only good news in the story. Track negotiated group, not just protocol version. Track handshake size and handshake latency, because hybrid key exchange changes both. Track fallback and retry counts, because a silent fall back to a classical group is the most likely failure mode and it will look like success unless you instrument it. Track TLS error rates by client version and by dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Split certificates and code signing from key exchange.&lt;/strong&gt; Do not let an ML-KEM rollout turn into an ML-DSA certificate plan. Hybrid key exchange is mostly a library-and-config change. Post-quantum certificates and code signing involve CA support, trust stores, chain sizes, and signing infrastructure that your build pipeline may not tolerate yet. Separate owners, separate timelines, separate proof.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not hand it to security alone.&lt;/strong&gt; Security should define the standard and the target state. Platform should own the inventory, the rollout mechanics, the fallback policy, and the observability. Application teams own their own clients. If nobody owns the list of things that must still work, the list will be incomplete at exactly the wrong moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  "turn it on" is not a strategy
&lt;/h2&gt;

&lt;p&gt;My biggest skepticism about how this is being sold is the implied simplicity. Enable hybrid groups, prefer PQC, done.&lt;/p&gt;

&lt;p&gt;That is not a strategy, because it cannot answer three questions:&lt;/p&gt;

&lt;p&gt;What actually negotiated? If you cannot show, per path, which group was used, you do not know whether you are post-quantum or whether a proxy quietly negotiated something classical on your behalf.&lt;/p&gt;

&lt;p&gt;What fell back, and why? Fallback is not automatically a failure, but an unobserved fallback is. Browsers and clients will happily downgrade. If you are not measuring it, you are guessing.&lt;/p&gt;

&lt;p&gt;What broke? Bigger handshakes hit real constraints: MTU and fragmentation, connection setup latency budgets, throughput on high-connection-count services, and any queue or timeout that was tuned against a smaller handshake. You will find these in a canary, or you will find them in production.&lt;/p&gt;

&lt;p&gt;A migration you cannot observe is a migration you cannot finish. You will end up with a partial rollout, a permanent exception list, and a security posture that only exists on the diagram.&lt;/p&gt;

&lt;h2&gt;
  
  
  a small checklist to start without panic
&lt;/h2&gt;

&lt;p&gt;You do not need to rewrite anything this quarter. You need to know things you currently do not know.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List every TLS client you operate, with the runtime and crypto library version behind each one.&lt;/li&gt;
&lt;li&gt;Pick three paths: one internal service-to-service, one through a proxy or mesh, one to an external partner or payment integration.&lt;/li&gt;
&lt;li&gt;Turn on hybrid key exchange in a non-production environment and capture what negotiated, what fell back, and how big the handshake got.&lt;/li&gt;
&lt;li&gt;Add negotiated group and handshake metrics to your existing TLS observability before you roll anything out.&lt;/li&gt;
&lt;li&gt;Write down your fallback policy explicitly: are silent classical fallbacks acceptable, and for how long?&lt;/li&gt;
&lt;li&gt;Track the AWS CRYSTALS-Kyber removal timeline and any provider deprecation notices for the endpoints you depend on.&lt;/li&gt;
&lt;li&gt;Keep certificate and code-signing PQC work in a separate track with its own owner.&lt;/li&gt;
&lt;li&gt;Give the whole thing a name, an owner, and a date. A migration without an owner is a rumor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this requires predicting quantum computing timelines. It requires knowing your own system, which is the same work that makes every other migration survivable.&lt;/p&gt;

&lt;p&gt;The teams that treat post-quantum TLS as a platform inventory problem will barely notice when the defaults flip. The teams that wait for the cryptography debate to resolve will discover, under pressure, that the change already shipped in a dependency they do not control.&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS post-quantum TLS client configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare post-quantum cryptography documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare PQC to origin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;New Windows features to secure today's data in a post-quantum world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF draft: ML-KEM for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;Measurement of post-quantum readiness across the web (arXiv)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum tls is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Tue, 15 Sep 2026 14:00:24 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-1iek</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-1iek</guid>
      <description>&lt;p&gt;Every few months someone asks me when quantum computers will break RSA.&lt;/p&gt;

&lt;p&gt;I have stopped answering that question, because it is not the question engineering teams actually have.&lt;/p&gt;

&lt;p&gt;The question they have is much less glamorous: do we know which of our services, SDKs, middleboxes, payment integrations, and certificate workflows will tolerate a bigger handshake, a hybrid key exchange, and eventually post-quantum signatures? Most teams cannot answer that today. And 2026 is the year the cloud providers started answering it for them, by changing the defaults.&lt;/p&gt;

&lt;p&gt;That is the whole story. The quantum timeline is a distraction. The migration is already arriving through the boring doors: managed TLS endpoints, SDK defaults, CDN edge configuration, OS crypto libraries, and certificate tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  the narrow technical shift
&lt;/h2&gt;

&lt;p&gt;Strip away the hype and the change is small and specific.&lt;/p&gt;

&lt;p&gt;TLS 1.3 key exchange is currently dominated by X25519, an elliptic-curve Diffie-Hellman variant. It is fast, small, and well understood. The post-quantum concern is not that someone recorded your traffic and can decrypt it now. It is that a future quantum computer could decrypt recorded traffic later, which is exactly why anything with a long confidentiality lifetime, like a banking session log or a signed document, gets uncomfortable first.&lt;/p&gt;

&lt;p&gt;The industry response was never "replace X25519 with something quantum-safe." It was hybrid: run the classical curve and the post-quantum key encapsulation together, and combine the results. If either holds, the session holds. That is what ML-KEM (FIPS 203, the standardized descendant of CRYSTALS-Kyber) provides, and it is why the IETF draft on ML-KEM for TLS 1.3 exists in the first place.&lt;/p&gt;

&lt;p&gt;The practical consequence is size. A hybrid key share is much larger than an X25519 key share. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bigger ClientHello messages&lt;/li&gt;
&lt;li&gt;more bytes before the handshake completes&lt;/li&gt;
&lt;li&gt;more chances to hit fragmentation, MTU limits, or middleboxes that "helpfully" drop what they do not recognize&lt;/li&gt;
&lt;li&gt;more chances for an old client to negotiate a fallback group and nobody notice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here is the part people conflate: key exchange and signatures are different problems with different timelines. ML-KEM protects the session key. Post-quantum signatures and how they land in certificates and code signing is a separate migration with its own compatibility and trust-chain pain. You can ship the first without having solved the second, and you probably should, because the first is already being turned on for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  what changed in 2026
&lt;/h2&gt;

&lt;p&gt;This stopped being a standards-track slide deck this year.&lt;/p&gt;

&lt;p&gt;AWS shipped ML-KEM hybrid post-quantum TLS support across KMS, ACM, and Secrets Manager, and it is explicit that the older CRYSTALS-Kyber support will be removed across AWS service endpoints in 2026. That second sentence is the one to underline. This is not an opt-in curiosity anymore. It is a controlled API surface with a deprecation calendar attached.&lt;/p&gt;

&lt;p&gt;Cloudflare documents post-quantum support for edge-to-origin TLS, including X25519MLKEM768 for key agreement and ML-DSA for origin authentication, with clear notes about where it is supported and where it is constrained. Microsoft shipped Windows platform support for ML-KEM hybrid TLS groups and is openly talking about an accelerated migration path for critical products and services toward 2029. The IETF draft for ML-KEM in TLS 1.3 is active.&lt;/p&gt;

&lt;p&gt;And then there is the measurement reality. A June 2026 measurement paper looking at post-quantum readiness across more than 32,000 domains found the internet is not uniformly ready, with particular lag around banking and government TLS 1.2 endpoints and post-quantum certificate adoption. I find that more useful than any roadmap slide, because it says the failure modes will be uneven and depend on what your specific clients do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhzgu3hiae5nlit5zn7l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhzgu3hiae5nlit5zn7l.gif" alt="this is fine" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  translate it into platform work
&lt;/h2&gt;

&lt;p&gt;Here is where I push back on how most teams are framing this.&lt;/p&gt;

&lt;p&gt;If PQC lives only in a security-owned ticket, it will get treated as a cryptography review that produces a PDF and no changes. That is a mistake. The actual work is platform work, and it looks a lot like every other platform migration you have done badly before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inventory your outbound clients and TLS stacks.&lt;/strong&gt; Not your externally facing load balancers, which are usually the easy part, but everything that makes an outbound TLS connection. Application runtimes, language crypto libraries, JDK versions, Go and Rust toolchains, database drivers, message bus clients, cron jobs, batch exports, and the one internal tool that has not been rebuilt since a migration ago. Different stacks gain hybrid group support at different times, and some old ones never will.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test service-to-service paths end to end.&lt;/strong&gt; A handshake does not happen between two applications. It happens through whatever is in the middle: proxies, API gateways, service meshes with their own TLS origination, CDNs, WAFs, egress filters, and vendor middleboxes that terminate and re-establish TLS. Those are where the surprises live. Payment and fintech integrations are the highest-stakes version of this, because a partner that pins groups, inspects traffic, or terminates in something old will fail in a way that looks like "the vendor is down."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the right signals.&lt;/strong&gt; This migration is observable, which is the only good news in the story. Track negotiated group, not just protocol version. Track handshake size and handshake latency, because hybrid key exchange changes both. Track fallback and retry counts, because a silent fall back to a classical group is the most likely failure mode and it will look like success unless you instrument it. Track TLS error rates by client version and by dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Split certificates and code signing from key exchange.&lt;/strong&gt; Do not let an ML-KEM rollout turn into an ML-DSA certificate plan. Hybrid key exchange is mostly a library-and-config change. Post-quantum certificates and code signing involve CA support, trust stores, chain sizes, and signing infrastructure that your build pipeline may not tolerate yet. Separate owners, separate timelines, separate proof.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not hand it to security alone.&lt;/strong&gt; Security should define the standard and the target state. Platform should own the inventory, the rollout mechanics, the fallback policy, and the observability. Application teams own their own clients. If nobody owns the list of things that must still work, the list will be incomplete at exactly the wrong moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  "turn it on" is not a strategy
&lt;/h2&gt;

&lt;p&gt;My biggest skepticism about how this is being sold is the implied simplicity. Enable hybrid groups, prefer PQC, done.&lt;/p&gt;

&lt;p&gt;That is not a strategy, because it cannot answer three questions:&lt;/p&gt;

&lt;p&gt;What actually negotiated? If you cannot show, per path, which group was used, you do not know whether you are post-quantum or whether a proxy quietly negotiated something classical on your behalf.&lt;/p&gt;

&lt;p&gt;What fell back, and why? Fallback is not automatically a failure, but an unobserved fallback is. Browsers and clients will happily downgrade. If you are not measuring it, you are guessing.&lt;/p&gt;

&lt;p&gt;What broke? Bigger handshakes hit real constraints: MTU and fragmentation, connection setup latency budgets, throughput on high-connection-count services, and any queue or timeout that was tuned against a smaller handshake. You will find these in a canary, or you will find them in production.&lt;/p&gt;

&lt;p&gt;A migration you cannot observe is a migration you cannot finish. You will end up with a partial rollout, a permanent exception list, and a security posture that only exists on the diagram.&lt;/p&gt;

&lt;h2&gt;
  
  
  a small checklist to start without panic
&lt;/h2&gt;

&lt;p&gt;You do not need to rewrite anything this quarter. You need to know things you currently do not know.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List every TLS client you operate, with the runtime and crypto library version behind each one.&lt;/li&gt;
&lt;li&gt;Pick three paths: one internal service-to-service, one through a proxy or mesh, one to an external partner or payment integration.&lt;/li&gt;
&lt;li&gt;Turn on hybrid key exchange in a non-production environment and capture what negotiated, what fell back, and how big the handshake got.&lt;/li&gt;
&lt;li&gt;Add negotiated group and handshake metrics to your existing TLS observability before you roll anything out.&lt;/li&gt;
&lt;li&gt;Write down your fallback policy explicitly: are silent classical fallbacks acceptable, and for how long?&lt;/li&gt;
&lt;li&gt;Track the AWS CRYSTALS-Kyber removal timeline and any provider deprecation notices for the endpoints you depend on.&lt;/li&gt;
&lt;li&gt;Keep certificate and code-signing PQC work in a separate track with its own owner.&lt;/li&gt;
&lt;li&gt;Give the whole thing a name, an owner, and a date. A migration without an owner is a rumor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this requires predicting quantum computing timelines. It requires knowing your own system, which is the same work that makes every other migration survivable.&lt;/p&gt;

&lt;p&gt;The teams that treat post-quantum TLS as a platform inventory problem will barely notice when the defaults flip. The teams that wait for the cryptography debate to resolve will discover, under pressure, that the change already shipped in a dependency they do not control.&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS post-quantum TLS client configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare post-quantum cryptography documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare PQC to origin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;New Windows features to secure today's data in a post-quantum world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF draft: ML-KEM for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;Measurement of post-quantum readiness across the web (arXiv)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum tls is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Tue, 15 Sep 2026 12:00:32 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-24fe</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-24fe</guid>
      <description>&lt;p&gt;Every few months someone asks me when quantum computers will break RSA.&lt;/p&gt;

&lt;p&gt;I have stopped answering that question, because it is not the question engineering teams actually have.&lt;/p&gt;

&lt;p&gt;The question they have is much less glamorous: do we know which of our services, SDKs, middleboxes, payment integrations, and certificate workflows will tolerate a bigger handshake, a hybrid key exchange, and eventually post-quantum signatures? Most teams cannot answer that today. And 2026 is the year the cloud providers started answering it for them, by changing the defaults.&lt;/p&gt;

&lt;p&gt;That is the whole story. The quantum timeline is a distraction. The migration is already arriving through the boring doors: managed TLS endpoints, SDK defaults, CDN edge configuration, OS crypto libraries, and certificate tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  the narrow technical shift
&lt;/h2&gt;

&lt;p&gt;Strip away the hype and the change is small and specific.&lt;/p&gt;

&lt;p&gt;TLS 1.3 key exchange is currently dominated by X25519, an elliptic-curve Diffie-Hellman variant. It is fast, small, and well understood. The post-quantum concern is not that someone recorded your traffic and can decrypt it now. It is that a future quantum computer could decrypt recorded traffic later, which is exactly why anything with a long confidentiality lifetime, like a banking session log or a signed document, gets uncomfortable first.&lt;/p&gt;

&lt;p&gt;The industry response was never "replace X25519 with something quantum-safe." It was hybrid: run the classical curve and the post-quantum key encapsulation together, and combine the results. If either holds, the session holds. That is what ML-KEM (FIPS 203, the standardized descendant of CRYSTALS-Kyber) provides, and it is why the IETF draft on ML-KEM for TLS 1.3 exists in the first place.&lt;/p&gt;

&lt;p&gt;The practical consequence is size. A hybrid key share is much larger than an X25519 key share. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bigger ClientHello messages&lt;/li&gt;
&lt;li&gt;more bytes before the handshake completes&lt;/li&gt;
&lt;li&gt;more chances to hit fragmentation, MTU limits, or middleboxes that "helpfully" drop what they do not recognize&lt;/li&gt;
&lt;li&gt;more chances for an old client to negotiate a fallback group and nobody notice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here is the part people conflate: key exchange and signatures are different problems with different timelines. ML-KEM protects the session key. Post-quantum signatures and how they land in certificates and code signing is a separate migration with its own compatibility and trust-chain pain. You can ship the first without having solved the second, and you probably should, because the first is already being turned on for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  what changed in 2026
&lt;/h2&gt;

&lt;p&gt;This stopped being a standards-track slide deck this year.&lt;/p&gt;

&lt;p&gt;AWS shipped ML-KEM hybrid post-quantum TLS support across KMS, ACM, and Secrets Manager, and it is explicit that the older CRYSTALS-Kyber support will be removed across AWS service endpoints in 2026. That second sentence is the one to underline. This is not an opt-in curiosity anymore. It is a controlled API surface with a deprecation calendar attached.&lt;/p&gt;

&lt;p&gt;Cloudflare documents post-quantum support for edge-to-origin TLS, including X25519MLKEM768 for key agreement and ML-DSA for origin authentication, with clear notes about where it is supported and where it is constrained. Microsoft shipped Windows platform support for ML-KEM hybrid TLS groups and is openly talking about an accelerated migration path for critical products and services toward 2029. The IETF draft for ML-KEM in TLS 1.3 is active.&lt;/p&gt;

&lt;p&gt;And then there is the measurement reality. A June 2026 measurement paper looking at post-quantum readiness across more than 32,000 domains found the internet is not uniformly ready, with particular lag around banking and government TLS 1.2 endpoints and post-quantum certificate adoption. I find that more useful than any roadmap slide, because it says the failure modes will be uneven and depend on what your specific clients do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhzgu3hiae5nlit5zn7l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhzgu3hiae5nlit5zn7l.gif" alt="this is fine" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  translate it into platform work
&lt;/h2&gt;

&lt;p&gt;Here is where I push back on how most teams are framing this.&lt;/p&gt;

&lt;p&gt;If PQC lives only in a security-owned ticket, it will get treated as a cryptography review that produces a PDF and no changes. That is a mistake. The actual work is platform work, and it looks a lot like every other platform migration you have done badly before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inventory your outbound clients and TLS stacks.&lt;/strong&gt; Not your externally facing load balancers, which are usually the easy part, but everything that makes an outbound TLS connection. Application runtimes, language crypto libraries, JDK versions, Go and Rust toolchains, database drivers, message bus clients, cron jobs, batch exports, and the one internal tool that has not been rebuilt since a migration ago. Different stacks gain hybrid group support at different times, and some old ones never will.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test service-to-service paths end to end.&lt;/strong&gt; A handshake does not happen between two applications. It happens through whatever is in the middle: proxies, API gateways, service meshes with their own TLS origination, CDNs, WAFs, egress filters, and vendor middleboxes that terminate and re-establish TLS. Those are where the surprises live. Payment and fintech integrations are the highest-stakes version of this, because a partner that pins groups, inspects traffic, or terminates in something old will fail in a way that looks like "the vendor is down."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the right signals.&lt;/strong&gt; This migration is observable, which is the only good news in the story. Track negotiated group, not just protocol version. Track handshake size and handshake latency, because hybrid key exchange changes both. Track fallback and retry counts, because a silent fall back to a classical group is the most likely failure mode and it will look like success unless you instrument it. Track TLS error rates by client version and by dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Split certificates and code signing from key exchange.&lt;/strong&gt; Do not let an ML-KEM rollout turn into an ML-DSA certificate plan. Hybrid key exchange is mostly a library-and-config change. Post-quantum certificates and code signing involve CA support, trust stores, chain sizes, and signing infrastructure that your build pipeline may not tolerate yet. Separate owners, separate timelines, separate proof.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not hand it to security alone.&lt;/strong&gt; Security should define the standard and the target state. Platform should own the inventory, the rollout mechanics, the fallback policy, and the observerability. Application teams own their own clients. If nobody owns the list of things that must still work, the list will be incomplete at exactly the wrong moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  "turn it on" is not a strategy
&lt;/h2&gt;

&lt;p&gt;My biggest skepticism about how this is being sold is the implied simplicity. Enable hybrid groups, prefer PQC, done.&lt;/p&gt;

&lt;p&gt;That is not a strategy, because it cannot answer three questions:&lt;/p&gt;

&lt;p&gt;What actually negotiated? If you cannot show, per path, which group was used, you do not know whether you are post-quantum or whether a proxy quietly negotiated something classical on your behalf.&lt;/p&gt;

&lt;p&gt;What fell back, and why? Fallback is not automatically a failure, but an unobserved fallback is. Browsers and clients will happily downgrade. If you are not measuring it, you are guessing.&lt;/p&gt;

&lt;p&gt;What broke? Bigger handshakes hit real constraints: MTU and fragmentation, connection setup latency budgets, throughput on high-connection-count services, and any queue or timeout that was tuned against a smaller handshake. You will find these in a canary, or you will find them in production.&lt;/p&gt;

&lt;p&gt;A migration you cannot observe is a migration you cannot finish. You will end up with a partial rollout, a permanent exception list, and a security posture that only exists on the diagram.&lt;/p&gt;

&lt;h2&gt;
  
  
  a small checklist to start without panic
&lt;/h2&gt;

&lt;p&gt;You do not need to rewrite anything this quarter. You need to know things you currently do not know.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List every TLS client you operate, with the runtime and crypto library version behind each one.&lt;/li&gt;
&lt;li&gt;Pick three paths: one internal service-to-service, one through a proxy or mesh, one to an external partner or payment integration.&lt;/li&gt;
&lt;li&gt;Turn on hybrid key exchange in a non-production environment and capture what negotiated, what fell back, and how big the handshake got.&lt;/li&gt;
&lt;li&gt;Add negotiated group and handshake metrics to your existing TLS observability before you roll anything out.&lt;/li&gt;
&lt;li&gt;Write down your fallback policy explicitly: are silent classical fallbacks acceptable, and for how long?&lt;/li&gt;
&lt;li&gt;Track the AWS CRYSTALS-Kyber removal timeline and any provider deprecation notices for the endpoints you depend on.&lt;/li&gt;
&lt;li&gt;Keep certificate and code-signing PQC work in a separate track with its own owner.&lt;/li&gt;
&lt;li&gt;Give the whole thing a name, an owner, and a date. A migration without an owner is a rumor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this requires predicting quantum computing timelines. It requires knowing your own system, which is the same work that makes every other migration survivable.&lt;/p&gt;

&lt;p&gt;The teams that treat post-quantum TLS as a platform inventory problem will barely notice when the defaults flip. The teams that wait for the cryptography debate to resolve will discover, under pressure, that the change already shipped in a dependency they do not control.&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS post-quantum TLS client configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare post-quantum cryptography documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare PQC to origin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;New Windows features to secure today's data in a post-quantum world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF draft: ML-KEM for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;Measurement of post-quantum readiness across the web (arXiv)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum TLS is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Tue, 15 Sep 2026 10:32:04 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-325b</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-325b</guid>
      <description>&lt;p&gt;Post-quantum TLS stopped being a cryptography conference topic and became ordinary platform work some time in 2026.&lt;/p&gt;

&lt;p&gt;Most engineering teams did not notice, because it arrived the way most infrastructure changes arrive: as defaults.&lt;/p&gt;

&lt;p&gt;A cloud SDK bump. A CDN flag flipped at the edge. A KMS endpoint that negotiates something different than it did last quarter. A browser quietly preferring a hybrid group on every TLS 1.3 handshake. Nobody got a migration project. Everybody got a migration surface.&lt;/p&gt;

&lt;p&gt;The quantum-timeline argument is a distraction here. Whether RSA falls in 2030, 2035, or later than anyone alive cares about is a legitimate research question and a completely useless planning input for a platform team. The engineering problem is not "when does quantum break RSA?" The problem is:&lt;/p&gt;

&lt;p&gt;Do we know which of our services, SDKs, middleboxes, payment integrations, and certificate workflows actually tolerate larger handshakes, hybrid key exchange, ML-KEM defaults, and eventually post-quantum signatures?&lt;/p&gt;

&lt;p&gt;That question has a boring, testable answer. That is what makes it a platform problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  the narrow technical shift nobody explained clearly
&lt;/h2&gt;

&lt;p&gt;Let me compress the crypto down to the part platform engineers need.&lt;/p&gt;

&lt;p&gt;TLS 1.3 has two cryptographic jobs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Key agreement&lt;/strong&gt; — both sides derive a shared secret so the rest of the session can be encrypted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt; — the server proves who it is, usually with an RSA or ECDSA certificate signature.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Post-quantum work is hitting these two at different times, with different maturity, and different operational blast radius. Conflating them is how teams end up with a two-year plan that should have been a two-week test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key agreement is the part already shipping.&lt;/strong&gt; The dominant approach is hybrid: keep the classical X25519 exchange and add an ML-KEM (formerly Kyber) component alongside it. The session secret stays safe as long as either component holds. Cloudflare's implementation is the one most people will meet first — X25519MLKEM768 is now a standard group in TLS 1.3, supported at the edge and documented for edge-to-origin paths.&lt;/p&gt;

&lt;p&gt;The practically relevant property of hybrid key exchange? &lt;strong&gt;Nothing breaks because it's post-quantum.&lt;/strong&gt; It breaks because it's bigger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signatures and certificates are the slower half.&lt;/strong&gt; ML-DSA exists and is being integrated, but post-quantum certificate authentication touches CA hierarchies, trust stores, client compatibility, device firmware, and the whole certification lifecycle. That is a genuinely multi-year migration. It is also &lt;em&gt;not&lt;/em&gt; what most of the "we support PQC" announcements are about, which is why reading them carefully matters.&lt;/p&gt;

&lt;p&gt;IETF work on ML-KEM for TLS 1.3 is active through 2026, so the wire format is close to settled. Good news: you can test now.&lt;/p&gt;

&lt;h2&gt;
  
  
  why this is already on your platform, whether you planned it or not
&lt;/h2&gt;

&lt;p&gt;The reason I think platform teams should care right now is not standards activity. It is that the defaults are moving underneath you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS&lt;/strong&gt; already supports ML-KEM hybrid post-quantum TLS for KMS, ACM, and Secrets Manager, and has signaled that older CRYSTALS-Kyber support will be removed across AWS service endpoints in 2026. That is a deprecation with a date, which is the most reliable form of "you will deal with this."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; documents PQC across its TLS stack, including X25519MLKEM768 and ML-DSA for origin authentication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft&lt;/strong&gt; has shipped Windows platform support for ML-KEM hybrid TLS groups and is talking publicly about accelerating migration of critical products toward 2029.&lt;/li&gt;
&lt;li&gt;Measurement work from mid-2026 across tens of thousands of domains shows readiness is deeply uneven — banking and government endpoints lagging, post-quantum certificate adoption near zero.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is the most useful one for anyone building fintech infrastructure. The interesting question is never "does PQC work?" It obviously works in a lab. The interesting question is &lt;strong&gt;where in your call graph it stops working&lt;/strong&gt;, because that is where your production traffic goes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpqqai5gqi4fow8om981.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpqqai5gqi4fow8om981.gif" alt="the handshake got bigger and nobody told the middlebox" width="478" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  translate it into platform work
&lt;/h2&gt;

&lt;p&gt;Here is the honest version of the migration.&lt;/p&gt;

&lt;h3&gt;
  
  
  inventory outbound clients and TLS stacks
&lt;/h3&gt;

&lt;p&gt;Every service that opens a TLS connection is a client, and most of them are invisible. Go's crypto/tls, Java's JSSE, Node's OpenSSL bindings, Python's ssl, Rust's rustls, plus every vendor SDK that bundles its own stack. Count the language runtimes, then count the SDKs that don't respect the runtime's defaults.&lt;/p&gt;

&lt;p&gt;That second number is usually the surprise.&lt;/p&gt;

&lt;h3&gt;
  
  
  test service-to-service paths through every middlebox
&lt;/h3&gt;

&lt;p&gt;This is where the migration actually gets hard, because the interesting failures live in components nobody considers TLS clients:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reverse proxies and load balancers&lt;/li&gt;
&lt;li&gt;API gateways&lt;/li&gt;
&lt;li&gt;service meshes with mTLS everywhere&lt;/li&gt;
&lt;li&gt;CDN edge-to-origin links&lt;/li&gt;
&lt;li&gt;WAFs doing TLS inspection&lt;/li&gt;
&lt;li&gt;payment and banking integrations with fixed TLS profiles&lt;/li&gt;
&lt;li&gt;old appliances that will never get a firmware update&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A middlebox that reconstructs or inspects TLS can choke on a ClientHello it doesn't recognize. Some will reject unknown key share groups. Some will negotiate down. Some will fail in a way that only shows up under load.&lt;/p&gt;

&lt;h3&gt;
  
  
  watch the right signals
&lt;/h3&gt;

&lt;p&gt;You cannot migrate what you cannot observe. The measurements that matter during a PQC rollout are not CPU graphs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;handshake size on the wire&lt;/li&gt;
&lt;li&gt;handshake latency, especially cold connections across regions&lt;/li&gt;
&lt;li&gt;TLS error rates split by client version and destination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;negotiated group&lt;/strong&gt; per connection — this is the number that tells you whether the hybrid path is actually being used&lt;/li&gt;
&lt;li&gt;fallback rates, because a silent fallback to classical key exchange looks identical to success if you only check for errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That fallback point deserves emphasis. A connection that quietly negotiates X25519 instead of X25519MLKEM768 is &lt;em&gt;working&lt;/em&gt;. It is also not post-quantum. If your only signal is "did the request succeed," you will report a green migration that never happened.&lt;/p&gt;

&lt;h3&gt;
  
  
  plan certificates as a separate track
&lt;/h3&gt;

&lt;p&gt;Key exchange and signatures are different projects with different timelines. Hybrid key agreement can be enabled, measured, and rolled back in weeks. Post-quantum certificate chains touch CA operations, trust stores, hardware, and code signing, and they are a genuinely long-horizon program.&lt;/p&gt;

&lt;p&gt;Do not let the first one create fake urgency for the second, and do not let the second block the first.&lt;/p&gt;

&lt;h3&gt;
  
  
  don't make this a security-team ticket
&lt;/h3&gt;

&lt;p&gt;This is the mistake I'd push back on hardest. If PQC lands in the security backlog as a single ticket titled "quantum readiness," it will sit there until a cloud provider forces the issue at a bad time.&lt;/p&gt;

&lt;p&gt;The work is distributed by nature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;platform owns the runtime and library inventory&lt;/li&gt;
&lt;li&gt;service teams own their SDKs and integration tests&lt;/li&gt;
&lt;li&gt;networking owns proxies, gateways, and middleboxes&lt;/li&gt;
&lt;li&gt;security owns the crypto policy and the deprecation timeline awareness&lt;/li&gt;
&lt;li&gt;SRE owns the observability and rollback path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a coordination problem, not a crypto problem. Treating it as crypto is how it stays unowned.&lt;/p&gt;

&lt;h2&gt;
  
  
  "turn it on" is not a strategy
&lt;/h2&gt;

&lt;p&gt;The skeptical core of this post: enabling hybrid post-quantum TLS is a one-line config change in most stacks, and that is exactly why it is dangerous.&lt;/p&gt;

&lt;p&gt;If you flip the flag and nobody can answer these, you haven't migrated anything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which clients negotiated the hybrid group, and which silently fell back?&lt;/li&gt;
&lt;li&gt;Which services failed to connect, and did they fail loudly or retry down to classical?&lt;/li&gt;
&lt;li&gt;What does the handshake look like through the proxy, the mesh, and the CDN?&lt;/li&gt;
&lt;li&gt;Can we revert without a full deploy?&lt;/li&gt;
&lt;li&gt;Do we know the before/after handshake size and latency numbers for our real traffic, not a benchmark?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the standard I'd hold a PQC rollout to. Not "we enabled it." "We can prove what negotiated, what fell back, and what broke."&lt;/p&gt;

&lt;h2&gt;
  
  
  a practical starting checklist
&lt;/h2&gt;

&lt;p&gt;Small on purpose. This should be days of work, not a program.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;List every TLS stack you ship.&lt;/strong&gt; Runtimes, SDKs, proxies, sidecars, appliances. Note who owns each.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick one internal call path&lt;/strong&gt; — a low-risk service-to-service link through your gateway — and enable hybrid key exchange there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instrument the negotiated group per connection.&lt;/strong&gt; If you can't see it, stop and fix that first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record baseline handshake size and latency&lt;/strong&gt; before the change, and compare after. Cold connections across regions, not localhost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the middleboxes deliberately.&lt;/strong&gt; Force the new group, watch the proxy, mesh, and any TLS-inspecting appliance. Break it on purpose in staging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the rollback down.&lt;/strong&gt; One flag, one revert, one documented path back to classical.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track the deprecations.&lt;/strong&gt; Kyber removal, SDK changes, CDN defaults. These are the real deadlines; the quantum timeline is not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate the certificate track&lt;/strong&gt; and give it a real owner with a multi-year horizon.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do that and you will be ahead of most of the industry for a fraction of the cost, because the industry is currently waiting for a reason to start.&lt;/p&gt;

&lt;p&gt;The cloud providers are not waiting. They are making Post-quantum TLS the default quietly, endpoint by endpoint, and the only question that matters is whether you find out from a rollout you ran or from an incident you didn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;AWS: ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS: post-quantum TLS client configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare: post-quantum cryptography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare: post-quantum cryptography to origin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;Microsoft: new Windows features to secure today's data in a post-quantum world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF draft: ML-KEM key agreement for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;Measurement of post-quantum readiness across 32,011 domains (June 2026)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum TLS is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Tue, 15 Sep 2026 10:00:36 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-1bae</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-1bae</guid>
      <description>&lt;p&gt;Post-quantum TLS stopped being a cryptography conference topic and became ordinary platform work some time in 2026.&lt;/p&gt;

&lt;p&gt;Most engineering teams did not notice, because it arrived the way most infrastructure changes arrive: as defaults.&lt;/p&gt;

&lt;p&gt;A cloud SDK bump. A CDN flag flipped at the edge. A KMS endpoint that negotiates something different than it did last quarter. A browser quietly preferring a hybrid group on every TLS 1.3 handshake. Nobody got a migration project. Everybody got a migration surface.&lt;/p&gt;

&lt;p&gt;The quantum-timeline argument is a distraction here. Whether RSA falls in 2030, 2035, or later than anyone alive cares about is a legitimate research question and a completely useless planning input for a platform team. The engineering problem is not "when does quantum break RSA?" The problem is:&lt;/p&gt;

&lt;p&gt;Do we know which of our services, SDKs, middleboxes, payment integrations, and certificate workflows actually tolerate larger handshakes, hybrid key exchange, ML-KEM defaults, and eventually post-quantum signatures?&lt;/p&gt;

&lt;p&gt;That question has a boring, testable answer. That is what makes it a platform problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  the narrow technical shift nobody explained clearly
&lt;/h2&gt;

&lt;p&gt;Let me compress the crypto down to the part platform engineers need.&lt;/p&gt;

&lt;p&gt;TLS 1.3 has two cryptographic jobs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Key agreement&lt;/strong&gt; — both sides derive a shared secret so the rest of the session can be encrypted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt; — the server proves who it is, usually with an RSA or ECDSA certificate signature.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Post-quantum work is hitting these two at different times, with different maturity, and different operational blast radius. Conflating them is how teams end up with a two-year plan that should have been a two-week test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key agreement is the part already shipping.&lt;/strong&gt; The dominant approach is hybrid: keep the classical X25519 exchange and add an ML-KEM (formerly Kyber) component alongside it. The session secret stays safe as long as either component holds. Cloudflare's implementation is the one most people will meet first — X25519MLKEM768 is now a standard group in TLS 1.3, supported at the edge and documented for edge-to-origin paths.&lt;/p&gt;

&lt;p&gt;The practically relevant property of hybrid key exchange? &lt;strong&gt;Nothing breaks because it's post-quantum.&lt;/strong&gt; It breaks because it's bigger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signatures and certificates are the slower half.&lt;/strong&gt; ML-DSA exists and is being integrated, but post-quantum certificate authentication touches CA hierarchies, trust stores, client compatibility, device firmware, and the whole certification lifecycle. That is a genuinely multi-year migration. It is also &lt;em&gt;not&lt;/em&gt; what most of the "we support PQC" announcements are about, which is why reading them carefully matters.&lt;/p&gt;

&lt;p&gt;IETF work on ML-KEM for TLS 1.3 is active through 2026, so the wire format is close to settled. Good news: you can test now.&lt;/p&gt;

&lt;h2&gt;
  
  
  why this is already on your platform, whether you planned it or not
&lt;/h2&gt;

&lt;p&gt;The reason I think platform teams should care right now is not standards activity. It is that the defaults are moving underneath you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS&lt;/strong&gt; already supports ML-KEM hybrid post-quantum TLS for KMS, ACM, and Secrets Manager, and has signaled that older CRYSTALS-Kyber support will be removed across AWS service endpoints in 2026. That is a deprecation with a date, which is the most reliable form of "you will deal with this."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; documents PQC across its TLS stack, including X25519MLKEM768 and ML-DSA for origin authentication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft&lt;/strong&gt; has shipped Windows platform support for ML-KEM hybrid TLS groups and is talking publicly about accelerating migration of critical products toward 2029.&lt;/li&gt;
&lt;li&gt;Measurement work from mid-2026 across tens of thousands of domains shows readiness is deeply uneven — banking and government endpoints lagging, post-quantum certificate adoption near zero.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is the most useful one for anyone building fintech infrastructure. The interesting question is never "does PQC work?" It obviously works in a lab. The interesting question is &lt;strong&gt;where in your call graph it stops working&lt;/strong&gt;, because that is where your production traffic goes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzs0vzzfds0vgl2kk8bl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzs0vzzfds0vgl2kk8bl.gif" alt="the handshake got bigger and nobody told the middlebox" width="350" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  translate it into platform work
&lt;/h2&gt;

&lt;p&gt;Here is the honest version of the migration.&lt;/p&gt;

&lt;h3&gt;
  
  
  inventory outbound clients and TLS stacks
&lt;/h3&gt;

&lt;p&gt;Every service that opens a TLS connection is a client, and most of them are invisible. Go's crypto/tls, Java's JSSE, Node's OpenSSL bindings, Python's ssl, Rust's rustls, plus every vendor SDK that bundles its own stack. Count the language runtimes, then count the SDKs that don't respect the runtime's defaults.&lt;/p&gt;

&lt;p&gt;That second number is usually the surprise.&lt;/p&gt;

&lt;h3&gt;
  
  
  test service-to-service paths through every middlebox
&lt;/h3&gt;

&lt;p&gt;This is where the migration actually gets hard, because the interesting failures live in components nobody considers TLS clients:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reverse proxies and load balancers&lt;/li&gt;
&lt;li&gt;API gateways&lt;/li&gt;
&lt;li&gt;service meshes with mTLS everywhere&lt;/li&gt;
&lt;li&gt;CDN edge-to-origin links&lt;/li&gt;
&lt;li&gt;WAFs doing TLS inspection&lt;/li&gt;
&lt;li&gt;payment and banking integrations with fixed TLS profiles&lt;/li&gt;
&lt;li&gt;old appliances that will never get a firmware update&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A middlebox that reconstructs or inspects TLS can choke on a ClientHello it doesn't recognize. Some will reject unknown key share groups. Some will negotiate down. Some will fail in a way that only shows up under load.&lt;/p&gt;

&lt;h3&gt;
  
  
  watch the right signals
&lt;/h3&gt;

&lt;p&gt;You cannot migrate what you cannot observe. The measurements that matter during a PQC rollout are not CPU graphs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;handshake size on the wire&lt;/li&gt;
&lt;li&gt;handshake latency, especially cold connections across regions&lt;/li&gt;
&lt;li&gt;TLS error rates split by client version and destination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;negotiated group&lt;/strong&gt; per connection — this is the number that tells you whether the hybrid path is actually being used&lt;/li&gt;
&lt;li&gt;fallback rates, because a silent fallback to classical key exchange looks identical to success if you only check for errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That fallback point deserves emphasis. A connection that quietly negotiates X25519 instead of X25519MLKEM768 is &lt;em&gt;working&lt;/em&gt;. It is also not post-quantum. If your only signal is "did the request succeed," you will report a green migration that never happened.&lt;/p&gt;

&lt;h3&gt;
  
  
  plan certificates as a separate track
&lt;/h3&gt;

&lt;p&gt;Key exchange and signatures are different projects with different timelines. Hybrid key agreement can be enabled, measured, and rolled back in weeks. Post-quantum certificate chains touch CA operations, trust stores, hardware, and code signing, and they are a genuinely long-horizon program.&lt;/p&gt;

&lt;p&gt;Do not let the first one create fake urgency for the second, and do not let the second block the first.&lt;/p&gt;

&lt;h3&gt;
  
  
  don't make this a security-team ticket
&lt;/h3&gt;

&lt;p&gt;This is the mistake I'd push back on hardest. If PQC lands in the security backlog as a single ticket titled "quantum readiness," it will sit there until a cloud provider forces the issue at a bad time.&lt;/p&gt;

&lt;p&gt;The work is distributed by nature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;platform owns the runtime and library inventory&lt;/li&gt;
&lt;li&gt;service teams own their SDKs and integration tests&lt;/li&gt;
&lt;li&gt;networking owns proxies, gateways, and middleboxes&lt;/li&gt;
&lt;li&gt;security owns the crypto policy and the deprecation timeline awareness&lt;/li&gt;
&lt;li&gt;SRE owns the observability and rollback path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a coordination problem, not a crypto problem. Treating it as crypto is how it stays unowned.&lt;/p&gt;

&lt;h2&gt;
  
  
  "turn it on" is not a strategy
&lt;/h2&gt;

&lt;p&gt;The skeptical core of this post: enabling hybrid post-quantum TLS is a one-line config change in most stacks, and that is exactly why it is dangerous.&lt;/p&gt;

&lt;p&gt;If you flip the flag and nobody can answer these, you haven't migrated anything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which clients negotiated the hybrid group, and which silently fell back?&lt;/li&gt;
&lt;li&gt;Which services failed to connect, and did they fail loudly or retry down to classical?&lt;/li&gt;
&lt;li&gt;What does the handshake look like through the proxy, the mesh, and the CDN?&lt;/li&gt;
&lt;li&gt;Can we revert without a full deploy?&lt;/li&gt;
&lt;li&gt;Do we know the before/after handshake size and latency numbers for our real traffic, not a benchmark?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the standard I'd hold a PQC rollout to. Not "we enabled it." "We can prove what negotiated, what fell back, and what broke."&lt;/p&gt;

&lt;h2&gt;
  
  
  a practical starting checklist
&lt;/h2&gt;

&lt;p&gt;Small on purpose. This should be days of work, not a program.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;List every TLS stack you ship.&lt;/strong&gt; Runtimes, SDKs, proxies, sidecars, appliances. Note who owns each.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick one internal call path&lt;/strong&gt; — a low-risk service-to-service link through your gateway — and enable hybrid key exchange there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instrument the negotiated group per connection.&lt;/strong&gt; If you can't see it, stop and fix that first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record baseline handshake size and latency&lt;/strong&gt; before the change, and compare after. Cold connections across regions, not localhost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the middleboxes deliberately.&lt;/strong&gt; Force the new group, watch the proxy, mesh, and any TLS-inspecting appliance. Break it on purpose in staging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the rollback down.&lt;/strong&gt; One flag, one revert, one documented path back to classical.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track the deprecations.&lt;/strong&gt; Kyber removal, SDK changes, CDN defaults. These are the real deadlines; the quantum timeline is not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate the certificate track&lt;/strong&gt; and give it a real owner with a multi-year horizon.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do that and you will be ahead of most of the industry for a fraction of the cost, because the industry is currently waiting for a reason to start.&lt;/p&gt;

&lt;p&gt;The cloud providers are not waiting. They are making Post-quantum TLS the default quietly, endpoint by endpoint, and the only question that matters is whether you find out from a rollout you ran or from an incident you didn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;AWS: ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS: post-quantum TLS client configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare: post-quantum cryptography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare: post-quantum cryptography to origin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;Microsoft: new Windows features to secure today's data in a post-quantum world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF draft: ML-KEM key agreement for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;Measurement of post-quantum readiness across 32,011 domains (June 2026)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum TLS is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Tue, 15 Sep 2026 09:01:10 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-42kc</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-42kc</guid>
      <description>&lt;p&gt;Every post-quantum TLS discussion eventually turns into a fight about dates.&lt;/p&gt;

&lt;p&gt;When will a cryptographically relevant quantum computer show up? Is it 2030, is it 2040, is it never, is "harvest now, decrypt later" actually a thing for my threat model? Someone brings up Shor's algorithm, someone else brings up the storage cost of keeping ciphertext for a decade, and forty minutes later the meeting ends without anyone writing a single line of configuration.&lt;/p&gt;

&lt;p&gt;I have started to find that debate genuinely uninteresting.&lt;/p&gt;

&lt;p&gt;Not because the risk is fake. Because it is not the problem that engineering teams actually have to solve this quarter.&lt;/p&gt;

&lt;p&gt;The problem teams have is this: post-quantum TLS is no longer a research topic that lives in a standards committee. It is arriving as ordinary platform surface area — cloud provider defaults, SDK flags, CDN behavior, operating system crypto libraries, and eventually the certificate workflows that hold your mTLS paths together. And the surface is arriving before most teams have an inventory of the things it will touch.&lt;/p&gt;

&lt;p&gt;That is the migration. Not the calendar.&lt;/p&gt;

&lt;h2&gt;
  
  
  what is actually changing in the handshake
&lt;/h2&gt;

&lt;p&gt;Strip the drama away and the change is narrower than it sounds.&lt;/p&gt;

&lt;p&gt;TLS today authenticates and agrees on keys using classical public-key cryptography. Key agreement usually comes from something like elliptic curve Diffie-Hellman, and authentication comes from RSA or ECDSA signatures in the certificate chain. Quantum computers threaten the math underneath both of those assumptions, but for different reasons and on different timelines.&lt;/p&gt;

&lt;p&gt;The first migration wave is about key agreement, and it is hybrid.&lt;/p&gt;

&lt;p&gt;In practice that means a classical algorithm such as X25519 is combined with a post-quantum key encapsulation mechanism, ML-KEM (the standardized descendant of CRYSTALS-Kyber). Cloudflare's edge-to-origin documentation names the group as X25519MLKEM768. AWS, Microsoft, and the IETF work on ML-KEM for TLS 1.3 all point at the same shape.&lt;/p&gt;

&lt;p&gt;Hybrid is the important word. We are not ripping out classical crypto overnight. We are adding a post-quantum component next to it, so a connection still holds up if either half turns out weaker than expected. That is a sensible engineering choice and it is also why the migration looks harmless in a design review.&lt;/p&gt;

&lt;p&gt;It is not harmless in production.&lt;/p&gt;

&lt;p&gt;The handshake gets bigger. A post-quantum key share adds hundreds of bytes to the ClientHello, which means the first flight can split across multiple TCP packets, which means every middlebox on the path gets an opportunity to do something creative. Some stacks will negotiate the new group. Some will fall back to classical. Some will just fail, in a place that never appeared on an architecture diagram because the diagram ended at "load balancer."&lt;/p&gt;

&lt;p&gt;AWS published benchmark numbers suggesting the performance cost is manageable, especially with TLS connection reuse. Good. That is one provider's workload, not yours. Your connection patterns, retry behaviour, proxy chain, and mobile clients are the only benchmark that counts.&lt;/p&gt;

&lt;p&gt;And keep one boundary sharp: key exchange is not authentication.&lt;/p&gt;

&lt;p&gt;ML-KEM protects the key agreement. Post-quantum signatures — ML-DSA and friends — are a separate migration for certificates, client certificates, mTLS verification, code signing, internal CAs, and HSMs. Negotiating a hybrid key share does not make any of that quantum-safe. When a dashboard collapses both into one green check mark, someone is about to make a bad decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  the defaults are already moving
&lt;/h2&gt;

&lt;p&gt;The reason I would put this on a platform roadmap instead of a research backlog is that other people are already making the decision for you.&lt;/p&gt;

&lt;p&gt;AWS supports ML-KEM hybrid post-quantum TLS for KMS, ACM, and Secrets Manager, and has been explicit that clients need to be updated to offer ML-KEM when talking to AWS service endpoints. It has also flagged that older CRYSTALS-Kyber support is going away across AWS service endpoints in 2026. Read that again slowly: one of the three services is the thing your workloads call to decrypt secrets and bootstrap. That is not a lab endpoint.&lt;/p&gt;

&lt;p&gt;Cloudflare documents post-quantum key agreement between its edge and origins, and separately covers post-quantum authentication toward origins with ML-DSA, including the awkward detail that presenting a post-quantum certificate does not help if the verifier still happily accepts classical ones on the same trust path.&lt;/p&gt;

&lt;p&gt;Microsoft is shipping ML-KEM hybrid TLS groups at the Windows platform level and talking about accelerating migration of critical products and services toward 2029. The IETF draft for ML-KEM key agreement in TLS 1.3 is alive and moving.&lt;/p&gt;

&lt;p&gt;None of those are opt-in research previews you can safely ignore. They are the boring defaults forming underneath your services.&lt;/p&gt;

&lt;h2&gt;
  
  
  this is platform work wearing a security costume
&lt;/h2&gt;

&lt;p&gt;The failure mode I expect is ownership, not technology.&lt;/p&gt;

&lt;p&gt;Security teams will correctly frame the risk, publish a target state, and hand over a document. Then the actual work lands in TLS library versions, runtime base images, ingress controllers, sidecar proxies, managed load balancers, trust stores, SDK upgrades, retry logic, dashboards, and rollback switches — and none of that is crypto. It is platform plumbing.&lt;/p&gt;

&lt;p&gt;So the first deliverable is not a quantum readiness strategy. It is an inventory.&lt;/p&gt;

&lt;p&gt;Start with who initiates TLS and with what:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java services on the JDK TLS stack, and Java services on the AWS CRT HTTP client, which are not the same client&lt;/li&gt;
&lt;li&gt;Node.js borrowing OpenSSL through the runtime&lt;/li&gt;
&lt;li&gt;Go using the standard library&lt;/li&gt;
&lt;li&gt;Rust on rustls or native-tls&lt;/li&gt;
&lt;li&gt;Python sitting on a system OpenSSL or a bundled wheel&lt;/li&gt;
&lt;li&gt;mobile apps pinned to whatever the OS decides&lt;/li&gt;
&lt;li&gt;vendor SDKs that ship their own HTTP client and quietly ignore your config&lt;/li&gt;
&lt;li&gt;sidecars and service mesh data planes doing outbound TLS on behalf of a service&lt;/li&gt;
&lt;li&gt;CI jobs, batch workers, and that one CronJob everybody forgot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then map the destinations. Cloud APIs like KMS, ACM, Secrets Manager, STS, and S3. Identity providers. Observability vendors. Webhook targets. Internal APIs behind gateways and meshes. And in a fintech context, payment processors, card networks, and banking partners, where TLS requirements are often contractual, occasionally bizarre, and held together by a runbook written by someone who left two reorganisations ago.&lt;/p&gt;

&lt;p&gt;Those partner paths are where a crypto migration becomes a support incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  test the path, not the box
&lt;/h2&gt;

&lt;p&gt;The classic mistake here is proving one component and declaring the route safe.&lt;/p&gt;

&lt;p&gt;"The service supports TLS 1.3." Great. Does the whole path support the handshake you intend to negotiate?&lt;/p&gt;

&lt;p&gt;"The origin supports X25519MLKEM768." Great. Does your current Cloudflare configuration actually negotiate it to the origin, on the hostname that matters, with the same rules?&lt;/p&gt;

&lt;p&gt;"The SDK has a flag." Great. Is that SDK the HTTP client your production service actually ends up using, or did a transitive dependency pick a different one?&lt;/p&gt;

&lt;p&gt;"The library supports ML-DSA." Great. Does your private CA, renewal pipeline, HSM, mTLS verifier, deployment automation, and rollback plan agree?&lt;/p&gt;

&lt;p&gt;What you want are tests that look like production paths, not component unit tests:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser to CDN to origin&lt;/li&gt;
&lt;li&gt;edge to origin with your real caching and WAF rules in front&lt;/li&gt;
&lt;li&gt;service to KMS and Secrets Manager in every environment, including the one that only exists for incident response&lt;/li&gt;
&lt;li&gt;service to payment or banking partner endpoints&lt;/li&gt;
&lt;li&gt;pod through mesh sidecar through egress gateway to an internal API&lt;/li&gt;
&lt;li&gt;mobile app through a corporate network to your API gateway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The word "through" is carrying all the weight in those bullets. TLS migrations rarely fail at the endpoints. They fail at the thing in between that was never supposed to care.&lt;/p&gt;

&lt;h2&gt;
  
  
  "turn it on" is not a strategy
&lt;/h2&gt;

&lt;p&gt;Here is the skeptical part, and it is the part I would defend hardest.&lt;/p&gt;

&lt;p&gt;Enabling post-quantum key agreement is not an action unless you can prove what happened afterwards. Otherwise you have changed a setting and acquired a feeling.&lt;/p&gt;

&lt;p&gt;The minimum useful telemetry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;negotiated TLS version&lt;/li&gt;
&lt;li&gt;negotiated key exchange group&lt;/li&gt;
&lt;li&gt;handshake failure rate, split by client runtime, SDK version, region, and egress path&lt;/li&gt;
&lt;li&gt;HelloRetryRequest rate, because that is where extra round trips and latency show up&lt;/li&gt;
&lt;li&gt;fallback rate to classical key exchange&lt;/li&gt;
&lt;li&gt;TLS handshake latency, and connection reuse behaviour&lt;/li&gt;
&lt;li&gt;ClientHello size distribution where your stack lets you see it&lt;/li&gt;
&lt;li&gt;certificate chain and signature algorithm wherever authentication is in scope&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will not get all of that on day one. Almost nobody can. But if your only signal is "the service still looks up," you are not testing a migration, you are guessing about one.&lt;/p&gt;

&lt;p&gt;And the failure mode I fear most is not a loud outage. It is quiet partial success. The flag is on in one region and not another. Browser traffic negotiates hybrid, service-to-service stays fully classical. The edge path got upgraded while origin authentication stayed old all the way down. Everything reports healthy, and the only thing that actually changed is the confidence level in a slide.&lt;/p&gt;

&lt;p&gt;Security migrations love partial success, because partial success produces screenshots. Production needs evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  certificates are a separate workstream
&lt;/h2&gt;

&lt;p&gt;Certificates deserve their own plan, not a bullet inside "enable PQ TLS."&lt;/p&gt;

&lt;p&gt;The June 2026 measurement work across 32,011 domains is a useful reality check here. It found real adoption of modern protocols and hybrid post-quantum key exchange, but also stubborn TLS 1.2 usage in critical sectors like banking and government, and no hybrid post-quantum certificate adoption in the observed set.&lt;/p&gt;

&lt;p&gt;That is exactly the shape I would expect. Key exchange moves first, because browsers, CDNs, cloud providers, and TLS libraries can drag a lot of that surface forward at once. Certificate trust infrastructure moves slowly, because it is federated, regulated, audited, pinned in strange places, and painfully operational.&lt;/p&gt;

&lt;p&gt;For fintech teams this cuts both ways. Cloud providers and browsers pull you forward. Partners, legacy clients, compliance constraints, and external integrations hold you back. A workable plan has to be modern enough to negotiate the new defaults and conservative enough not to break the business path that is not ready — and it has to know which path is which.&lt;/p&gt;

&lt;p&gt;So keep it separate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;key exchange first, where the platform supports it&lt;/li&gt;
&lt;li&gt;certificate and signature inventory in parallel&lt;/li&gt;
&lt;li&gt;mTLS verification rules reviewed explicitly, not assumed&lt;/li&gt;
&lt;li&gt;private CA capability, HSM support, and renewal automation checked&lt;/li&gt;
&lt;li&gt;certificate pinning found, and either removed or updated on purpose&lt;/li&gt;
&lt;li&gt;partner TLS requirements written down instead of remembered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Certificate pinning deserves a special mention. If an old mobile app, an embedded client, or a partner integration pins certificate or algorithm assumptions, you want to discover it before a routine security change becomes a customer-visible incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  rollback, then rollout
&lt;/h2&gt;

&lt;p&gt;Post-quantum TLS should roll out like anything else that touches connection establishment.&lt;/p&gt;

&lt;p&gt;Small scope. Known clients. Clear metrics. A rollback switch. No hero deploys.&lt;/p&gt;

&lt;p&gt;For outbound clients that might mean hybrid key agreement for one service talking to KMS in one environment, then expanding by service class. For edge-to-origin, it might mean specific origins before zone-wide behaviour. For a mesh, it might mean proving it in a canary namespace that shares the same ingress, egress, and observability path as production.&lt;/p&gt;

&lt;p&gt;The rollback questions should be boring enough to answer in one sentence each:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how do we disable hybrid key agreement for this client?&lt;/li&gt;
&lt;li&gt;how do we force classical fallback if a partner path breaks?&lt;/li&gt;
&lt;li&gt;how do we detect that fallback happened?&lt;/li&gt;
&lt;li&gt;who is allowed to change the setting at 2am?&lt;/li&gt;
&lt;li&gt;which metric tells us the rollback worked?&lt;/li&gt;
&lt;li&gt;what user-visible behaviour triggers the rollback?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If nobody can answer those, the rollout is not ready, no matter how good the readiness deck is.&lt;/p&gt;

&lt;h2&gt;
  
  
  the checklist I would actually run
&lt;/h2&gt;

&lt;p&gt;If I owned a platform this quarter, I would not start a "quantum-safe transformation programme." I would start with eight boring things.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build the TLS client inventory.&lt;/strong&gt; Services, runtimes, TLS libraries, SDK versions, sidecars, mobile clients, CI jobs, batch workers. Write down the outbound destinations too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flag the security-critical paths.&lt;/strong&gt; KMS, Secrets Manager, ACM, identity, and anything payment-adjacent will move early, whether or not you planned for it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test hybrid key exchange outside production.&lt;/strong&gt; Real client libraries, real proxies, realistic connection reuse. Measure latency and failure rates, not just success.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add negotiation telemetry.&lt;/strong&gt; Negotiated version and group, fallback, HelloRetryRequest, handshake latency. Without this, every claim about readiness is vibes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attack the middleboxes.&lt;/strong&gt; CDNs, WAFs, API gateways, meshes, load balancers, corporate proxies, partner gateways. That is where a boring TLS change becomes an incident.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Split certificates out.&lt;/strong&gt; ML-KEM key agreement and ML-DSA signatures are different migrations. Treat CA, mTLS, HSM, pinning, and renewal as their own track.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write rollback before rollout.&lt;/strong&gt; A crypto migration without a rollback path is a production experiment with a better acronym.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep security and platform in the same room.&lt;/strong&gt; Security owns the risk. Platform owns the machinery. Product teams own the partner dependencies. Splitting that too cleanly turns migration into archaeology.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this requires panic. It requires inventory, evidence, and the willingness to be boring about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  the punchline
&lt;/h2&gt;

&lt;p&gt;Post-quantum TLS is not waiting for your organisation to finish arguing about quantum timelines.&lt;/p&gt;

&lt;p&gt;It is showing up in provider changelogs, SDK flags, CDN defaults, operating system crypto libraries, and partner questionnaires. Some of it will be opt-in. Some of it will become preferred behaviour. Some of it will arrive as one line in a release note that quietly changes what production negotiates on a Tuesday afternoon.&lt;/p&gt;

&lt;p&gt;The teams that handle this well will not be the ones with the most dramatic quantum roadmap. They will be the ones who can answer simple questions:&lt;/p&gt;

&lt;p&gt;What do our clients actually support?&lt;/p&gt;

&lt;p&gt;What did this connection negotiate?&lt;/p&gt;

&lt;p&gt;Where did it silently fall back?&lt;/p&gt;

&lt;p&gt;Which path broke, and did the telemetry even notice?&lt;/p&gt;

&lt;p&gt;Can we turn it off?&lt;/p&gt;

&lt;p&gt;That is the migration. Not prophecy, not hype, not another argument about dates.&lt;/p&gt;

&lt;p&gt;Just platform work that gets a lot easier if you start before the default changes under you.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;AWS Security Blog: ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS Developer Guide: Use hybrid post-quantum TLS with AWS KMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare docs: Post-quantum cryptography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare docs: Post-quantum between Cloudflare and origin servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;Microsoft Security Blog: New Windows features to secure today's data in a post-quantum world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF Datatracker: ML-KEM Post-Quantum Key Agreement for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;arXiv 2606.16473: measurement study of post-quantum readiness across 32,011 domains&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum TLS is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Mon, 14 Sep 2026 15:02:29 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-2edj</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-2edj</guid>
      <description>&lt;p&gt;The least useful post-quantum TLS conversation is the one where everyone argues about when a quantum computer will break RSA.&lt;/p&gt;

&lt;p&gt;It is fun in the way all prediction fights are fun. Someone has a chart. Someone has a more skeptical chart. Someone says "harvest now, decrypt later" with the face of a person who has said it in eight meetings this quarter.&lt;/p&gt;

&lt;p&gt;Fine.&lt;/p&gt;

&lt;p&gt;But for engineering teams, that is not the interesting problem anymore.&lt;/p&gt;

&lt;p&gt;The interesting problem is much more boring and much more dangerous:&lt;/p&gt;

&lt;p&gt;Do we know which of our clients, SDKs, proxies, service meshes, CDNs, KMS integrations, payment providers, middleboxes, observability tools, and certificate workflows will tolerate the post-quantum TLS migration when the defaults start moving under us?&lt;/p&gt;

&lt;p&gt;That is the work.&lt;/p&gt;

&lt;p&gt;Not because quantum doom arrives tomorrow morning with a calendar invite. Because the platform surface is already changing. AWS has ML-KEM hybrid post-quantum TLS support in KMS, ACM, and Secrets Manager. Cloudflare documents post-quantum key agreement between its edge and origins. Microsoft has ML-KEM and ML-DSA in its crypto platform surface, hybrid TLS in SymCrypt-OpenSSL, and Windows TLS support on the roadmap. The IETF TLS work for ML-KEM in TLS 1.3 is active enough that this is not "future crypto" in the abstract anymore.&lt;/p&gt;

&lt;p&gt;This is becoming normal migration work.&lt;/p&gt;

&lt;p&gt;And normal migration work is where production breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  the narrow change is not that mystical
&lt;/h2&gt;

&lt;p&gt;Let us remove the drama for a second.&lt;/p&gt;

&lt;p&gt;TLS today usually relies on classical public-key cryptography during the handshake. The client and server agree on keys using mechanisms like elliptic curve Diffie-Hellman. Quantum computers, if they become strong enough, are a problem for those public-key assumptions.&lt;/p&gt;

&lt;p&gt;Post-quantum TLS changes the key agreement side of the handshake so that the connection can resist that future attack class. In practice, the migration path most platforms are using first is hybrid key exchange: keep a classical algorithm like X25519 and combine it with a post-quantum algorithm like ML-KEM.&lt;/p&gt;

&lt;p&gt;The hybrid part matters. It means we are not throwing away the classical mechanism overnight. We are adding a post-quantum component while preserving the current security properties if one side of the hybrid story turns out to be weaker than expected.&lt;/p&gt;

&lt;p&gt;That sounds tidy. It is not free.&lt;/p&gt;

&lt;p&gt;The handshake gets bigger. More bytes move at connection startup. ClientHello messages may split across packets. Some intermediaries and old TLS stacks will behave badly, because protocol ossification is basically the internet's hobby. Some connections will negotiate the new group. Some will fall back. Some will fail in places nobody had on the architecture diagram because the diagram stopped at "load balancer."&lt;/p&gt;

&lt;p&gt;AWS measured this as a manageable performance cost for its KMS benchmark, especially when TLS connection reuse is enabled. That is good news. It is also not a permission slip to skip testing. Benchmarks from a cloud provider are not a substitute for your own connection patterns, your own proxies, your own mobile clients, and your own suspicious enterprise network path that somehow still matters because the CFO uses it.&lt;/p&gt;

&lt;p&gt;The other important distinction: key exchange is not certificates.&lt;/p&gt;

&lt;p&gt;ML-KEM helps with key agreement. Post-quantum signatures are the separate authentication problem. Your certificate chain, client certificates, mTLS setup, code signing, internal CAs, HSMs, and certificate rotation workflows do not become quantum-safe just because one TLS connection negotiated a hybrid key share.&lt;/p&gt;

&lt;p&gt;This is exactly where I expect teams to get sloppy.&lt;/p&gt;

&lt;p&gt;"We turned on PQC" will be used to describe three different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hybrid key agreement on inbound browser traffic&lt;/li&gt;
&lt;li&gt;hybrid key agreement on service-to-service traffic&lt;/li&gt;
&lt;li&gt;post-quantum authentication through certificates or signatures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are not the same migration. If a dashboard flattens them into one green check mark, be suspicious.&lt;/p&gt;

&lt;h2&gt;
  
  
  the cloud default will arrive before the spreadsheet is perfect
&lt;/h2&gt;

&lt;p&gt;The reason to start now is not panic.&lt;/p&gt;

&lt;p&gt;The reason to start now is that cloud defaults have a habit of becoming production defaults while the backlog still says "investigate."&lt;/p&gt;

&lt;p&gt;AWS is already explicit that customers need to update TLS clients and SDKs to offer ML-KEM when connecting to AWS service HTTPS endpoints. For services like KMS and Secrets Manager, that is not an academic endpoint. That is the path your applications use to decrypt secrets, fetch configuration, generate data keys, and bootstrap sensitive workloads.&lt;/p&gt;

&lt;p&gt;Cloudflare is also a good preview of the operational shape. It supports X25519MLKEM768 in the edge-to-origin path and documents the fact that adding ML-KEM can split the ClientHello across two packets. That tiny sentence is a whole migration hiding in plain sight.&lt;/p&gt;

&lt;p&gt;Can your origin handle it?&lt;/p&gt;

&lt;p&gt;Can the load balancer in front of the origin handle it?&lt;/p&gt;

&lt;p&gt;Can the WAF handle it?&lt;/p&gt;

&lt;p&gt;Can the appliance nobody wants to own handle it?&lt;/p&gt;

&lt;p&gt;Can the old Java service using a pinned runtime handle it?&lt;/p&gt;

&lt;p&gt;Can the fintech partner endpoint handle it?&lt;/p&gt;

&lt;p&gt;This is why I do not like framing post-quantum TLS as a security team project. Security should absolutely drive the risk framing and target state. But the actual migration is platform plumbing: TLS libraries, SDK versions, runtime images, ingress controllers, sidecars, managed load balancers, trust stores, certificate issuance, client retry behavior, dashboards, and rollback switches.&lt;/p&gt;

&lt;p&gt;That is platform work.&lt;/p&gt;

&lt;p&gt;If only the cryptography people own it, the migration will produce beautiful documents and then die at the first strange proxy.&lt;/p&gt;

&lt;h2&gt;
  
  
  inventory beats speeches
&lt;/h2&gt;

&lt;p&gt;The first useful deliverable is not a quantum readiness strategy deck.&lt;/p&gt;

&lt;p&gt;It is an inventory.&lt;/p&gt;

&lt;p&gt;Start with outbound clients. Which services initiate TLS connections, and with which runtime stacks?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java with JDK TLS&lt;/li&gt;
&lt;li&gt;Java with AWS CRT&lt;/li&gt;
&lt;li&gt;Node.js with OpenSSL through the runtime&lt;/li&gt;
&lt;li&gt;Go with the standard library&lt;/li&gt;
&lt;li&gt;Rust with rustls or native-tls&lt;/li&gt;
&lt;li&gt;Python with OpenSSL through the system or a bundled package&lt;/li&gt;
&lt;li&gt;mobile clients pinned to OS behavior&lt;/li&gt;
&lt;li&gt;vendor SDKs with their own HTTP clients&lt;/li&gt;
&lt;li&gt;sidecars doing outbound TLS on behalf of the service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then map the destinations.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS KMS, ACM, Secrets Manager, STS, S3, and other cloud APIs&lt;/li&gt;
&lt;li&gt;payment processors&lt;/li&gt;
&lt;li&gt;card networks and banking partners&lt;/li&gt;
&lt;li&gt;identity providers&lt;/li&gt;
&lt;li&gt;observability vendors&lt;/li&gt;
&lt;li&gt;webhook targets&lt;/li&gt;
&lt;li&gt;internal APIs behind meshes or gateways&lt;/li&gt;
&lt;li&gt;customer-controlled endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the part where fintech teams should pay attention. Payment and banking integrations are often full of TLS constraints that nobody wants to touch unless a certificate is expiring. Some partners still have very specific TLS requirements. Some mutual TLS setups are held together by a certificate runbook last edited by a person who left three reorganizations ago. Some "temporary" proxies became permanent infrastructure by surviving long enough.&lt;/p&gt;

&lt;p&gt;Post-quantum TLS will find those places.&lt;/p&gt;

&lt;p&gt;Better you find them first.&lt;/p&gt;

&lt;h2&gt;
  
  
  test the path, not the box
&lt;/h2&gt;

&lt;p&gt;A common mistake in migrations like this is testing one component and declaring the path safe.&lt;/p&gt;

&lt;p&gt;"The service supports TLS 1.3."&lt;/p&gt;

&lt;p&gt;Good. Does the whole path support the actual handshake you intend to use?&lt;/p&gt;

&lt;p&gt;"The origin supports X25519MLKEM768."&lt;/p&gt;

&lt;p&gt;Good. Does Cloudflare negotiate it to the origin through your current configuration?&lt;/p&gt;

&lt;p&gt;"The SDK has a flag."&lt;/p&gt;

&lt;p&gt;Good. Is that the HTTP client your production service actually uses, or did the dependency injection layer quietly choose a different one?&lt;/p&gt;

&lt;p&gt;"The certificate library supports ML-DSA."&lt;/p&gt;

&lt;p&gt;Good. Does your certificate authority, renewal pipeline, HSM, deployment process, mTLS verifier, and rollback plan support it too?&lt;/p&gt;

&lt;p&gt;You need end-to-end tests that look like production paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser to CDN to origin&lt;/li&gt;
&lt;li&gt;Cloudflare edge to origin&lt;/li&gt;
&lt;li&gt;service to AWS KMS&lt;/li&gt;
&lt;li&gt;service to Secrets Manager&lt;/li&gt;
&lt;li&gt;service to payment provider&lt;/li&gt;
&lt;li&gt;service through mesh sidecar to internal API&lt;/li&gt;
&lt;li&gt;mobile app to API gateway&lt;/li&gt;
&lt;li&gt;batch job through corporate egress proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The word "through" is doing a lot of work there.&lt;/p&gt;

&lt;p&gt;TLS migrations do not only fail at endpoints. They fail at the thing between endpoints that was not supposed to care.&lt;/p&gt;

&lt;h2&gt;
  
  
  observability needs to know what negotiated
&lt;/h2&gt;

&lt;p&gt;"Turn it on" is not a strategy.&lt;/p&gt;

&lt;p&gt;It is barely even an action unless you can prove what happened after you turned it on.&lt;/p&gt;

&lt;p&gt;For post-quantum TLS, the minimum useful telemetry is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;negotiated TLS version&lt;/li&gt;
&lt;li&gt;negotiated key exchange group&lt;/li&gt;
&lt;li&gt;handshake failure rate&lt;/li&gt;
&lt;li&gt;HelloRetryRequest rate&lt;/li&gt;
&lt;li&gt;fallback rate to classical key exchange&lt;/li&gt;
&lt;li&gt;TLS handshake latency&lt;/li&gt;
&lt;li&gt;connection reuse behavior&lt;/li&gt;
&lt;li&gt;ClientHello size distribution where you can measure it&lt;/li&gt;
&lt;li&gt;errors by client runtime, SDK version, region, and egress path&lt;/li&gt;
&lt;li&gt;certificate chain and signature algorithm where authentication is in scope&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably will not get all of that on day one. Fine. Start with what your proxies, load balancers, service mesh, CDN, and client libraries can expose.&lt;/p&gt;

&lt;p&gt;But if the only signal is "the service still seems up," you are flying blind.&lt;/p&gt;

&lt;p&gt;The scary failure mode is not always total outage. The scarier one is false confidence. A team believes it is running post-quantum key agreement because the setting is enabled somewhere, but most traffic is falling back silently. Or one region negotiates the new group and another does not. Or browser traffic looks modern while service-to-service traffic is still entirely classical. Or the shiny edge path is upgraded, but the origin authentication path is still old RSA all the way down.&lt;/p&gt;

&lt;p&gt;Security migrations love partial success because partial success produces screenshots.&lt;/p&gt;

&lt;p&gt;Production needs evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  certificates are their own migration
&lt;/h2&gt;

&lt;p&gt;Cloudflare's origin documentation is useful because it refuses to hide the awkward part: post-quantum signatures are a separate track.&lt;/p&gt;

&lt;p&gt;It talks about ML-DSA for origin-facing authentication features, not just ML-KEM key agreement. It also calls out downgrade behavior: presenting a post-quantum certificate is not enough if the verifier still accepts classical certificates in the same trust path.&lt;/p&gt;

&lt;p&gt;That should make every platform team slightly uncomfortable, in a healthy way.&lt;/p&gt;

&lt;p&gt;Certificate workflows are usually older than people admit. They cross team boundaries. They include public CAs, private CAs, mTLS, device certificates, HSMs, Kubernetes secrets, ingress annotations, Terraform modules, emergency renewal docs, and maybe a spreadsheet called &lt;code&gt;certs-final-v3.xlsx&lt;/code&gt; if your organization has a sense of humor by accident.&lt;/p&gt;

&lt;p&gt;Do not bundle all of that into "enable PQ TLS."&lt;/p&gt;

&lt;p&gt;Plan it separately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;key exchange migration first where the platform supports it&lt;/li&gt;
&lt;li&gt;certificate and signature inventory in parallel&lt;/li&gt;
&lt;li&gt;mTLS verification rules reviewed explicitly&lt;/li&gt;
&lt;li&gt;private CA capability checked&lt;/li&gt;
&lt;li&gt;HSM and KMS support checked&lt;/li&gt;
&lt;li&gt;renewal and rollback rehearsed&lt;/li&gt;
&lt;li&gt;certificate pinning found and removed or updated&lt;/li&gt;
&lt;li&gt;partner requirements documented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Especially certificate pinning. If there is an old mobile app, embedded client, or partner integration pinning assumptions about certificates or algorithms, you want to discover it before a security migration turns into a customer-support incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  the banking/government lag is a warning
&lt;/h2&gt;

&lt;p&gt;The June 2026 measurement paper on post-quantum readiness is useful because it shows the internet doing what the internet does: migrating unevenly.&lt;/p&gt;

&lt;p&gt;Across 32,011 domains, the authors found real adoption of modern protocols and hybrid post-quantum key exchange, but also stubborn TLS 1.2 usage in critical sectors like banking and government. They also found no hybrid post-quantum certificate adoption in their observed set.&lt;/p&gt;

&lt;p&gt;That is exactly the pattern I would expect.&lt;/p&gt;

&lt;p&gt;Key exchange can move first because browsers, CDNs, cloud providers, and TLS libraries can push a lot of that surface forward. Certificates are slower because trust infrastructure is messy, regulated, audited, pinned, vendor-dependent, and painfully operational.&lt;/p&gt;

&lt;p&gt;For fintech teams, this matters for two reasons.&lt;/p&gt;

&lt;p&gt;First, you will be pulled forward by cloud providers and browsers.&lt;/p&gt;

&lt;p&gt;Second, you will be held back by partners, legacy clients, compliance constraints, and external integrations.&lt;/p&gt;

&lt;p&gt;The migration plan has to handle both directions at the same time. You need to be modern enough to negotiate the new defaults where available, and conservative enough to avoid breaking business-critical paths that are not ready yet.&lt;/p&gt;

&lt;p&gt;That is not a crypto debate.&lt;/p&gt;

&lt;p&gt;That is compatibility engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  rollback is part of the design
&lt;/h2&gt;

&lt;p&gt;Post-quantum TLS rollout should look like every other serious platform rollout.&lt;/p&gt;

&lt;p&gt;Small scope first. Known clients first. Clear metrics. Rollback switch. No hero deploys.&lt;/p&gt;

&lt;p&gt;For outbound clients, that may mean enabling hybrid TLS only for one service calling KMS in one environment, then expanding by service class. For edge-to-origin, it may mean testing selected origins before relying on zone-wide behavior. For service mesh, it may mean proving behavior in a canary namespace with the same ingress, egress, and observability path as production.&lt;/p&gt;

&lt;p&gt;The rollback question should be boring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do we disable hybrid key agreement for this client?&lt;/li&gt;
&lt;li&gt;How do we force classical fallback if a partner path breaks?&lt;/li&gt;
&lt;li&gt;How do we know fallback happened?&lt;/li&gt;
&lt;li&gt;Who is allowed to change the setting?&lt;/li&gt;
&lt;li&gt;What metric tells us the rollback worked?&lt;/li&gt;
&lt;li&gt;What customer-facing behavior would trigger rollback?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If nobody can answer those, the rollout is not ready.&lt;/p&gt;

&lt;p&gt;And yes, this can feel absurd. We are talking about preparing rollback behavior for a future-facing cryptographic migration that most users will never notice.&lt;/p&gt;

&lt;p&gt;That is platform engineering. Most of the work is making sure users never notice.&lt;/p&gt;

&lt;h2&gt;
  
  
  what i would do now
&lt;/h2&gt;

&lt;p&gt;If I owned a platform today, I would not start with a grand "quantum-safe transformation program."&lt;/p&gt;

&lt;p&gt;I would start with a small, practical checklist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Build the TLS client inventory.&lt;/strong&gt; List services, runtimes, TLS libraries, SDK versions, sidecars, mobile clients, and outbound destinations. Do not forget CI jobs and batch workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Identify cloud service paths.&lt;/strong&gt; Pay special attention to KMS, Secrets Manager, ACM, identity, storage, and payment-adjacent services. Security-critical endpoints will move early.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Test hybrid key exchange in non-production.&lt;/strong&gt; Use real client libraries, real proxies, and realistic connection reuse. Measure handshake latency and failure rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Add negotiation telemetry.&lt;/strong&gt; At minimum, learn which TLS version and key exchange group were negotiated where your stack exposes it. Without this, every claim is vibes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Exercise middleboxes.&lt;/strong&gt; CDNs, WAFs, API gateways, service meshes, load balancers, corporate proxies, and partner gateways are where boring TLS changes become incidents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Separate certificate planning.&lt;/strong&gt; ML-KEM key agreement and ML-DSA signatures are different migration tracks. Treat private CA, mTLS, HSM, certificate pinning, and renewal flows as their own workstream.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Write rollback instructions before rollout.&lt;/strong&gt; A crypto migration without rollback is just a production experiment with a better acronym.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Keep security and platform in the same room.&lt;/strong&gt; Security owns the risk. Platform owns much of the machinery. Product teams own the traffic and partner dependencies. Splitting those too cleanly is how migrations become archaeology.&lt;/p&gt;

&lt;p&gt;None of this requires panic.&lt;/p&gt;

&lt;p&gt;It requires inventory, evidence, and boring discipline.&lt;/p&gt;

&lt;h2&gt;
  
  
  the punchline
&lt;/h2&gt;

&lt;p&gt;Post-quantum TLS is not waiting for your organization to finish debating quantum timelines.&lt;/p&gt;

&lt;p&gt;It is arriving through provider defaults, SDK options, CDN behavior, operating system support, TLS library releases, and partner requirements. Some of it will be opt-in. Some of it will become preferred behavior. Some of it will show up as a minor-looking changelog entry that quietly changes what production negotiates on a Tuesday.&lt;/p&gt;

&lt;p&gt;The teams that handle it well will not be the ones with the most dramatic quantum slide deck.&lt;/p&gt;

&lt;p&gt;They will be the ones that can answer simple questions:&lt;/p&gt;

&lt;p&gt;What do our clients support?&lt;/p&gt;

&lt;p&gt;What did this connection negotiate?&lt;/p&gt;

&lt;p&gt;Where did it fall back?&lt;/p&gt;

&lt;p&gt;Which path broke?&lt;/p&gt;

&lt;p&gt;Can we roll it back?&lt;/p&gt;

&lt;p&gt;That is the migration.&lt;/p&gt;

&lt;p&gt;Not hype. Not prophecy. Not a religious war about timelines.&lt;/p&gt;

&lt;p&gt;Just another piece of platform work that becomes much easier if you start before the default changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;AWS Security Blog: ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS Developer Guide: Using hybrid post-quantum TLS with AWS KMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare SSL/TLS docs: Post-quantum cryptography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare SSL/TLS docs: Post-quantum between Cloudflare and origin servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;Microsoft Security Blog: New Windows features to secure today's data in a post-quantum world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF Datatracker: ML-KEM Post-Quantum Key Agreement for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;arXiv: Measurement Study of Post-Quantum Readiness of Internet: 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum TLS is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Mon, 14 Sep 2026 14:03:27 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-1eo5</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-1eo5</guid>
      <description>&lt;p&gt;The least useful post-quantum TLS conversation is the one where everyone argues about when a quantum computer will break RSA.&lt;/p&gt;

&lt;p&gt;It is fun in the way all prediction fights are fun. Someone has a chart. Someone has a more skeptical chart. Someone says "harvest now, decrypt later" with the face of a person who has said it in eight meetings this quarter.&lt;/p&gt;

&lt;p&gt;Fine.&lt;/p&gt;

&lt;p&gt;But for engineering teams, that is not the interesting problem anymore.&lt;/p&gt;

&lt;p&gt;The interesting problem is much more boring and much more dangerous:&lt;/p&gt;

&lt;p&gt;Do we know which of our clients, SDKs, proxies, service meshes, CDNs, KMS integrations, payment providers, middleboxes, observability tools, and certificate workflows will tolerate the post-quantum TLS migration when the defaults start moving under us?&lt;/p&gt;

&lt;p&gt;That is the work.&lt;/p&gt;

&lt;p&gt;Not because quantum doom arrives tomorrow morning with a calendar invite. Because the platform surface is already changing. AWS has ML-KEM hybrid post-quantum TLS support in KMS, ACM, and Secrets Manager. Cloudflare documents post-quantum key agreement between its edge and origins. Microsoft is putting ML-KEM hybrid TLS support into Windows. The IETF TLS work for ML-KEM in TLS 1.3 is active enough that this is not "future crypto" in the abstract anymore.&lt;/p&gt;

&lt;p&gt;This is becoming normal migration work.&lt;/p&gt;

&lt;p&gt;And normal migration work is where production breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  the narrow change is not that mystical
&lt;/h2&gt;

&lt;p&gt;Let us remove the drama for a second.&lt;/p&gt;

&lt;p&gt;TLS today usually relies on classical public-key cryptography during the handshake. The client and server agree on keys using mechanisms like elliptic curve Diffie-Hellman. Quantum computers, if they become strong enough, are a problem for those public-key assumptions.&lt;/p&gt;

&lt;p&gt;Post-quantum TLS changes the key agreement side of the handshake so that the connection can resist that future attack class. In practice, the migration path most platforms are using first is hybrid key exchange: keep a classical algorithm like X25519 and combine it with a post-quantum algorithm like ML-KEM.&lt;/p&gt;

&lt;p&gt;The hybrid part matters. It means we are not throwing away the classical mechanism overnight. We are adding a post-quantum component while preserving the current security properties if one side of the hybrid story turns out to be weaker than expected.&lt;/p&gt;

&lt;p&gt;That sounds tidy. It is not free.&lt;/p&gt;

&lt;p&gt;The handshake gets bigger. More bytes move at connection startup. ClientHello messages may split across packets. Some intermediaries and old TLS stacks will behave badly, because protocol ossification is basically the internet's hobby. Some connections will negotiate the new group. Some will fall back. Some will fail in places nobody had on the architecture diagram because the diagram stopped at "load balancer."&lt;/p&gt;

&lt;p&gt;AWS measured this as a manageable performance cost for its KMS benchmark, especially when TLS connection reuse is enabled. That is good news. It is also not a permission slip to skip testing. Benchmarks from a cloud provider are not a substitute for your own connection patterns, your own proxies, your own mobile clients, and your own suspicious enterprise network path that somehow still matters because the CFO uses it.&lt;/p&gt;

&lt;p&gt;The other important distinction: key exchange is not certificates.&lt;/p&gt;

&lt;p&gt;ML-KEM helps with key agreement. Post-quantum signatures are the separate authentication problem. Your certificate chain, client certificates, mTLS setup, code signing, internal CAs, HSMs, and certificate rotation workflows do not become quantum-safe just because one TLS connection negotiated a hybrid key share.&lt;/p&gt;

&lt;p&gt;This is exactly where I expect teams to get sloppy.&lt;/p&gt;

&lt;p&gt;"We turned on PQC" will be used to describe three different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hybrid key agreement on inbound browser traffic&lt;/li&gt;
&lt;li&gt;hybrid key agreement on service-to-service traffic&lt;/li&gt;
&lt;li&gt;post-quantum authentication through certificates or signatures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are not the same migration. If a dashboard flattens them into one green check mark, be suspicious.&lt;/p&gt;

&lt;h2&gt;
  
  
  the cloud default will arrive before the spreadsheet is perfect
&lt;/h2&gt;

&lt;p&gt;The reason to start now is not panic.&lt;/p&gt;

&lt;p&gt;The reason to start now is that cloud defaults have a habit of becoming production defaults while the backlog still says "investigate."&lt;/p&gt;

&lt;p&gt;AWS is already explicit that customers need to update TLS clients and SDKs to offer ML-KEM when connecting to AWS service HTTPS endpoints. For services like KMS and Secrets Manager, that is not an academic endpoint. That is the path your applications use to decrypt secrets, fetch configuration, generate data keys, and bootstrap sensitive workloads.&lt;/p&gt;

&lt;p&gt;Cloudflare is also a good preview of the operational shape. It supports X25519MLKEM768 in the edge-to-origin path and documents the fact that adding ML-KEM can split the ClientHello across two packets. That tiny sentence is a whole migration hiding in plain sight.&lt;/p&gt;

&lt;p&gt;Can your origin handle it?&lt;/p&gt;

&lt;p&gt;Can the load balancer in front of the origin handle it?&lt;/p&gt;

&lt;p&gt;Can the WAF handle it?&lt;/p&gt;

&lt;p&gt;Can the appliance nobody wants to own handle it?&lt;/p&gt;

&lt;p&gt;Can the old Java service using a pinned runtime handle it?&lt;/p&gt;

&lt;p&gt;Can the fintech partner endpoint handle it?&lt;/p&gt;

&lt;p&gt;This is why I do not like framing post-quantum TLS as a security team project. Security should absolutely drive the risk framing and target state. But the actual migration is platform plumbing: TLS libraries, SDK versions, runtime images, ingress controllers, sidecars, managed load balancers, trust stores, certificate issuance, client retry behavior, dashboards, and rollback switches.&lt;/p&gt;

&lt;p&gt;That is platform work.&lt;/p&gt;

&lt;p&gt;If only the cryptography people own it, the migration will produce beautiful documents and then die at the first strange proxy.&lt;/p&gt;

&lt;h2&gt;
  
  
  inventory beats speeches
&lt;/h2&gt;

&lt;p&gt;The first useful deliverable is not a quantum readiness strategy deck.&lt;/p&gt;

&lt;p&gt;It is an inventory.&lt;/p&gt;

&lt;p&gt;Start with outbound clients. Which services initiate TLS connections, and with which runtime stacks?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java with JDK TLS&lt;/li&gt;
&lt;li&gt;Java with AWS CRT&lt;/li&gt;
&lt;li&gt;Node.js with OpenSSL through the runtime&lt;/li&gt;
&lt;li&gt;Go with the standard library&lt;/li&gt;
&lt;li&gt;Rust with rustls or native-tls&lt;/li&gt;
&lt;li&gt;Python with OpenSSL through the system or a bundled package&lt;/li&gt;
&lt;li&gt;mobile clients pinned to OS behavior&lt;/li&gt;
&lt;li&gt;vendor SDKs with their own HTTP clients&lt;/li&gt;
&lt;li&gt;sidecars doing outbound TLS on behalf of the service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then map the destinations.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS KMS, ACM, Secrets Manager, STS, S3, and other cloud APIs&lt;/li&gt;
&lt;li&gt;payment processors&lt;/li&gt;
&lt;li&gt;card networks and banking partners&lt;/li&gt;
&lt;li&gt;identity providers&lt;/li&gt;
&lt;li&gt;observability vendors&lt;/li&gt;
&lt;li&gt;webhook targets&lt;/li&gt;
&lt;li&gt;internal APIs behind meshes or gateways&lt;/li&gt;
&lt;li&gt;customer-controlled endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the part where fintech teams should pay attention. Payment and banking integrations are often full of TLS constraints that nobody wants to touch unless a certificate is expiring. Some partners still have very specific TLS requirements. Some mutual TLS setups are held together by a certificate runbook last edited by a person who left three reorganizations ago. Some "temporary" proxies became permanent infrastructure by surviving long enough.&lt;/p&gt;

&lt;p&gt;Post-quantum TLS will find those places.&lt;/p&gt;

&lt;p&gt;Better you find them first.&lt;/p&gt;

&lt;h2&gt;
  
  
  test the path, not the box
&lt;/h2&gt;

&lt;p&gt;A common mistake in migrations like this is testing one component and declaring the path safe.&lt;/p&gt;

&lt;p&gt;"The service supports TLS 1.3."&lt;/p&gt;

&lt;p&gt;Good. Does the whole path support the actual handshake you intend to use?&lt;/p&gt;

&lt;p&gt;"The origin supports X25519MLKEM768."&lt;/p&gt;

&lt;p&gt;Good. Does Cloudflare negotiate it to the origin through your current configuration?&lt;/p&gt;

&lt;p&gt;"The SDK has a flag."&lt;/p&gt;

&lt;p&gt;Good. Is that the HTTP client your production service actually uses, or did the dependency injection layer quietly choose a different one?&lt;/p&gt;

&lt;p&gt;"The certificate library supports ML-DSA."&lt;/p&gt;

&lt;p&gt;Good. Does your certificate authority, renewal pipeline, HSM, deployment process, mTLS verifier, and rollback plan support it too?&lt;/p&gt;

&lt;p&gt;You need end-to-end tests that look like production paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser to CDN to origin&lt;/li&gt;
&lt;li&gt;Cloudflare edge to origin&lt;/li&gt;
&lt;li&gt;service to AWS KMS&lt;/li&gt;
&lt;li&gt;service to Secrets Manager&lt;/li&gt;
&lt;li&gt;service to payment provider&lt;/li&gt;
&lt;li&gt;service through mesh sidecar to internal API&lt;/li&gt;
&lt;li&gt;mobile app to API gateway&lt;/li&gt;
&lt;li&gt;batch job through corporate egress proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The word "through" is doing a lot of work there.&lt;/p&gt;

&lt;p&gt;TLS migrations do not only fail at endpoints. They fail at the thing between endpoints that was not supposed to care.&lt;/p&gt;

&lt;h2&gt;
  
  
  observability needs to know what negotiated
&lt;/h2&gt;

&lt;p&gt;"Turn it on" is not a strategy.&lt;/p&gt;

&lt;p&gt;It is barely even an action unless you can prove what happened after you turned it on.&lt;/p&gt;

&lt;p&gt;For post-quantum TLS, the minimum useful telemetry is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;negotiated TLS version&lt;/li&gt;
&lt;li&gt;negotiated key exchange group&lt;/li&gt;
&lt;li&gt;handshake failure rate&lt;/li&gt;
&lt;li&gt;HelloRetryRequest rate&lt;/li&gt;
&lt;li&gt;fallback rate to classical key exchange&lt;/li&gt;
&lt;li&gt;TLS handshake latency&lt;/li&gt;
&lt;li&gt;connection reuse behavior&lt;/li&gt;
&lt;li&gt;ClientHello size distribution where you can measure it&lt;/li&gt;
&lt;li&gt;errors by client runtime, SDK version, region, and egress path&lt;/li&gt;
&lt;li&gt;certificate chain and signature algorithm where authentication is in scope&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably will not get all of that on day one. Fine. Start with what your proxies, load balancers, service mesh, CDN, and client libraries can expose.&lt;/p&gt;

&lt;p&gt;But if the only signal is "the service still seems up," you are flying blind.&lt;/p&gt;

&lt;p&gt;The scary failure mode is not always total outage. The scarier one is false confidence. A team believes it is running post-quantum key agreement because the setting is enabled somewhere, but most traffic is falling back silently. Or one region negotiates the new group and another does not. Or browser traffic looks modern while service-to-service traffic is still entirely classical. Or the shiny edge path is upgraded, but the origin authentication path is still old RSA all the way down.&lt;/p&gt;

&lt;p&gt;Security migrations love partial success because partial success produces screenshots.&lt;/p&gt;

&lt;p&gt;Production needs evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  certificates are their own migration
&lt;/h2&gt;

&lt;p&gt;Cloudflare's origin documentation is useful because it refuses to hide the awkward part: post-quantum signatures are a separate track.&lt;/p&gt;

&lt;p&gt;It talks about ML-DSA for origin-facing authentication features, not just ML-KEM key agreement. It also calls out downgrade behavior: presenting a post-quantum certificate is not enough if the verifier still accepts classical certificates in the same trust path.&lt;/p&gt;

&lt;p&gt;That should make every platform team slightly uncomfortable, in a healthy way.&lt;/p&gt;

&lt;p&gt;Certificate workflows are usually older than people admit. They cross team boundaries. They include public CAs, private CAs, mTLS, device certificates, HSMs, Kubernetes secrets, ingress annotations, Terraform modules, emergency renewal docs, and maybe a spreadsheet called &lt;code&gt;certs-final-v3.xlsx&lt;/code&gt; if your organization has a sense of humor by accident.&lt;/p&gt;

&lt;p&gt;Do not bundle all of that into "enable PQ TLS."&lt;/p&gt;

&lt;p&gt;Plan it separately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;key exchange migration first where the platform supports it&lt;/li&gt;
&lt;li&gt;certificate and signature inventory in parallel&lt;/li&gt;
&lt;li&gt;mTLS verification rules reviewed explicitly&lt;/li&gt;
&lt;li&gt;private CA capability checked&lt;/li&gt;
&lt;li&gt;HSM and KMS support checked&lt;/li&gt;
&lt;li&gt;renewal and rollback rehearsed&lt;/li&gt;
&lt;li&gt;certificate pinning found and removed or updated&lt;/li&gt;
&lt;li&gt;partner requirements documented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Especially certificate pinning. If there is an old mobile app, embedded client, or partner integration pinning assumptions about certificates or algorithms, you want to discover it before a security migration turns into a customer-support incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  the banking/government lag is a warning
&lt;/h2&gt;

&lt;p&gt;The June 2026 measurement paper on post-quantum readiness is useful because it shows the internet doing what the internet does: migrating unevenly.&lt;/p&gt;

&lt;p&gt;Across 32,011 domains, the authors found real adoption of modern protocols and hybrid post-quantum key exchange, but also stubborn TLS 1.2 usage in critical sectors like banking and government. They also found no hybrid post-quantum certificate adoption in their observed set.&lt;/p&gt;

&lt;p&gt;That is exactly the pattern I would expect.&lt;/p&gt;

&lt;p&gt;Key exchange can move first because browsers, CDNs, cloud providers, and TLS libraries can push a lot of that surface forward. Certificates are slower because trust infrastructure is messy, regulated, audited, pinned, vendor-dependent, and painfully operational.&lt;/p&gt;

&lt;p&gt;For fintech teams, this matters for two reasons.&lt;/p&gt;

&lt;p&gt;First, you will be pulled forward by cloud providers and browsers.&lt;/p&gt;

&lt;p&gt;Second, you will be held back by partners, legacy clients, compliance constraints, and external integrations.&lt;/p&gt;

&lt;p&gt;The migration plan has to handle both directions at the same time. You need to be modern enough to negotiate the new defaults where available, and conservative enough to avoid breaking business-critical paths that are not ready yet.&lt;/p&gt;

&lt;p&gt;That is not a crypto debate.&lt;/p&gt;

&lt;p&gt;That is compatibility engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  rollback is part of the design
&lt;/h2&gt;

&lt;p&gt;Post-quantum TLS rollout should look like every other serious platform rollout.&lt;/p&gt;

&lt;p&gt;Small scope first. Known clients first. Clear metrics. Rollback switch. No hero deploys.&lt;/p&gt;

&lt;p&gt;For outbound clients, that may mean enabling hybrid TLS only for one service calling KMS in one environment, then expanding by service class. For edge-to-origin, it may mean testing selected origins before relying on zone-wide behavior. For service mesh, it may mean proving behavior in a canary namespace with the same ingress, egress, and observability path as production.&lt;/p&gt;

&lt;p&gt;The rollback question should be boring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do we disable hybrid key agreement for this client?&lt;/li&gt;
&lt;li&gt;How do we force classical fallback if a partner path breaks?&lt;/li&gt;
&lt;li&gt;How do we know fallback happened?&lt;/li&gt;
&lt;li&gt;Who is allowed to change the setting?&lt;/li&gt;
&lt;li&gt;What metric tells us the rollback worked?&lt;/li&gt;
&lt;li&gt;What customer-facing behavior would trigger rollback?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If nobody can answer those, the rollout is not ready.&lt;/p&gt;

&lt;p&gt;And yes, this can feel absurd. We are talking about preparing rollback behavior for a future-facing cryptographic migration that most users will never notice.&lt;/p&gt;

&lt;p&gt;That is platform engineering. Most of the work is making sure users never notice.&lt;/p&gt;

&lt;h2&gt;
  
  
  what i would do now
&lt;/h2&gt;

&lt;p&gt;If I owned a platform today, I would not start with a grand "quantum-safe transformation program."&lt;/p&gt;

&lt;p&gt;I would start with a small, practical checklist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Build the TLS client inventory.&lt;/strong&gt; List services, runtimes, TLS libraries, SDK versions, sidecars, mobile clients, and outbound destinations. Do not forget CI jobs and batch workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Identify cloud service paths.&lt;/strong&gt; Pay special attention to KMS, Secrets Manager, ACM, identity, storage, and payment-adjacent services. Security-critical endpoints will move early.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Test hybrid key exchange in non-production.&lt;/strong&gt; Use real client libraries, real proxies, and realistic connection reuse. Measure handshake latency and failure rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Add negotiation telemetry.&lt;/strong&gt; At minimum, learn which TLS version and key exchange group were negotiated where your stack exposes it. Without this, every claim is vibes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Exercise middleboxes.&lt;/strong&gt; CDNs, WAFs, API gateways, service meshes, load balancers, corporate proxies, and partner gateways are where boring TLS changes become incidents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Separate certificate planning.&lt;/strong&gt; ML-KEM key agreement and ML-DSA signatures are different migration tracks. Treat private CA, mTLS, HSM, certificate pinning, and renewal flows as their own workstream.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Write rollback instructions before rollout.&lt;/strong&gt; A crypto migration without rollback is just a production experiment with a better acronym.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Keep security and platform in the same room.&lt;/strong&gt; Security owns the risk. Platform owns much of the machinery. Product teams own the traffic and partner dependencies. Splitting those too cleanly is how migrations become archaeology.&lt;/p&gt;

&lt;p&gt;None of this requires panic.&lt;/p&gt;

&lt;p&gt;It requires inventory, evidence, and boring discipline.&lt;/p&gt;

&lt;h2&gt;
  
  
  the punchline
&lt;/h2&gt;

&lt;p&gt;Post-quantum TLS is not waiting for your organization to finish debating quantum timelines.&lt;/p&gt;

&lt;p&gt;It is arriving through provider defaults, SDK options, CDN behavior, operating system support, TLS library releases, and partner requirements. Some of it will be opt-in. Some of it will become preferred behavior. Some of it will show up as a minor-looking changelog entry that quietly changes what production negotiates on a Tuesday.&lt;/p&gt;

&lt;p&gt;The teams that handle it well will not be the ones with the most dramatic quantum slide deck.&lt;/p&gt;

&lt;p&gt;They will be the ones that can answer simple questions:&lt;/p&gt;

&lt;p&gt;What do our clients support?&lt;/p&gt;

&lt;p&gt;What did this connection negotiate?&lt;/p&gt;

&lt;p&gt;Where did it fall back?&lt;/p&gt;

&lt;p&gt;Which path broke?&lt;/p&gt;

&lt;p&gt;Can we roll it back?&lt;/p&gt;

&lt;p&gt;That is the migration.&lt;/p&gt;

&lt;p&gt;Not hype. Not prophecy. Not a religious war about timelines.&lt;/p&gt;

&lt;p&gt;Just another piece of platform work that becomes much easier if you start before the default changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;AWS Security Blog: ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS Developer Guide: Using hybrid post-quantum TLS with AWS KMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare SSL/TLS docs: Post-quantum cryptography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare SSL/TLS docs: Post-quantum between Cloudflare and origin servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;Microsoft Security Blog: New Windows features to secure today's data in a post-quantum world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF Datatracker: ML-KEM Post-Quantum Key Agreement for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;arXiv: Measurement Study of Post-Quantum Readiness of Internet: 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum tls is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Mon, 14 Sep 2026 12:01:33 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-3hh9</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-3hh9</guid>
      <description>&lt;p&gt;The least useful question about post-quantum TLS is still the one people like asking first:&lt;/p&gt;

&lt;p&gt;When will quantum computers break today's public-key cryptography?&lt;/p&gt;

&lt;p&gt;I get why the question is attractive. It sounds strategic. It lets everyone argue about timelines, threat models, nation states, and whether the whole thing is hype. It also lets engineering teams postpone the boring work, because if the scary computer is far enough away, the migration can stay in the "future crypto" bucket.&lt;/p&gt;

&lt;p&gt;That bucket is leaking.&lt;/p&gt;

&lt;p&gt;Post-quantum TLS is already turning into ordinary platform migration work. Not because every company suddenly needs to panic about quantum attacks tomorrow morning, but because cloud providers, browsers, operating systems, CDNs, SDKs, cryptographic libraries, and compliance teams are starting to expose the surface area now.&lt;/p&gt;

&lt;p&gt;AWS supports ML-KEM hybrid post-quantum TLS for KMS, ACM, and Secrets Manager. Cloudflare documents post-quantum key agreement between visitors, its edge, and origins. Microsoft has Windows platform support for ML-KEM hybrid TLS groups and post-quantum APIs. The IETF TLS work is active. The measurements say internet readiness is uneven, especially in sectors that should know better.&lt;/p&gt;

&lt;p&gt;That is the migration signal.&lt;/p&gt;

&lt;p&gt;The engineering problem is not "when does quantum break RSA?"&lt;/p&gt;

&lt;p&gt;The engineering problem is "do we know which of our services, SDKs, middleboxes, payment integrations, certificate workflows, and observability paths will tolerate the TLS ecosystem changing underneath them?"&lt;/p&gt;

&lt;p&gt;Most teams cannot answer that yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  what is actually changing
&lt;/h2&gt;

&lt;p&gt;The first wave is mostly about key exchange.&lt;/p&gt;

&lt;p&gt;In normal TLS 1.3 today, clients and servers use classical elliptic-curve key agreement such as X25519 or P-256 to establish shared secrets for the connection. Post-quantum TLS introduces key establishment based on ML-KEM, the NIST-standardized key encapsulation mechanism that came out of the Kyber work.&lt;/p&gt;

&lt;p&gt;The practical deployment pattern is usually hybrid key exchange. The client and server combine a classical algorithm with ML-KEM, so the connection is protected as long as at least one side of the hybrid construction remains sound. That is why you see names like &lt;code&gt;X25519MLKEM768&lt;/code&gt;: familiar X25519 plus ML-KEM-768.&lt;/p&gt;

&lt;p&gt;This sounds exotic until you translate it into production behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the TLS ClientHello can get larger&lt;/li&gt;
&lt;li&gt;the server response can get larger&lt;/li&gt;
&lt;li&gt;handshakes do a little more cryptographic work&lt;/li&gt;
&lt;li&gt;clients and servers need compatible TLS stacks&lt;/li&gt;
&lt;li&gt;middleboxes that make assumptions about handshake size or extensions can misbehave&lt;/li&gt;
&lt;li&gt;fallback behavior starts to matter a lot&lt;/li&gt;
&lt;li&gt;observability needs to show what actually negotiated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS's measurements are a useful sanity check here. In their KMS benchmark, enabling hybrid post-quantum TLS added roughly 1,600 bytes to the handshake and a small amount of compute. With TLS connection reuse enabled, the measured request-rate impact was almost invisible for that workload. Without connection reuse, the penalty was larger but still not dramatic.&lt;/p&gt;

&lt;p&gt;That is good news, but it is not permission to stop thinking.&lt;/p&gt;

&lt;p&gt;Your workload is not AWS's benchmark. Your network path may have old proxies. Your mobile clients may use older TLS libraries. Your service mesh may terminate and re-originate TLS. Your fintech partner may still be on TLS 1.2. Your payment gateway may have a device in the path that nobody has touched since a migration three org charts ago.&lt;/p&gt;

&lt;p&gt;"The crypto is fast enough" and "our platform is ready" are different claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  signatures are a separate migration
&lt;/h2&gt;

&lt;p&gt;One trap in this conversation is mixing key exchange with signatures and certificates.&lt;/p&gt;

&lt;p&gt;Hybrid ML-KEM in TLS is about establishing the connection secrets. It helps with the "harvest now, decrypt later" concern: an attacker records encrypted traffic today and hopes to decrypt it later with a quantum computer.&lt;/p&gt;

&lt;p&gt;Post-quantum signatures are a different problem. Certificates, certificate chains, hardware security modules, code signing, device identity, private PKI, certificate transparency, ACME workflows, load balancers, origin authentication, and audit requirements all get involved.&lt;/p&gt;

&lt;p&gt;Cloudflare's origin documentation is interesting because it points at both sides of the house: post-quantum key agreement to the origin, and ML-DSA for origin authentication in supported paths. That is exactly how this will land in real platforms. First the key exchange knob appears. Then certificate and signature paths start appearing. Then someone asks why the team treated it as one ticket.&lt;/p&gt;

&lt;p&gt;Do not treat it as one ticket.&lt;/p&gt;

&lt;p&gt;Key exchange, public TLS certificates, private service certificates, client certificates, KMS/HSM integrations, and code-signing chains should be planned separately. They share vocabulary, but they do not share the same blast radius, owner, tooling, or rollback story.&lt;/p&gt;

&lt;p&gt;If security creates a single epic called "enable PQC", platform teams should split it before the work starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  the cloud default problem
&lt;/h2&gt;

&lt;p&gt;The reason this matters now is not that every team needs to flip every switch today.&lt;/p&gt;

&lt;p&gt;The reason is that platform defaults have a way of becoming production defaults before anyone has finished the inventory.&lt;/p&gt;

&lt;p&gt;AWS is a good example. It already supports ML-KEM hybrid TLS on security-critical services like KMS, ACM, and Secrets Manager, and it says older CRYSTALS-Kyber support will be removed across AWS service endpoints in 2026. AWS customers using older clients can fall back to classical key agreement when the old Kyber support disappears, but that sentence should make platform teams uncomfortable.&lt;/p&gt;

&lt;p&gt;Fallback is not the same as readiness.&lt;/p&gt;

&lt;p&gt;If your KMS client silently falls back to classical TLS and nobody records it, you did not migrate. You just failed quietly in the safest available direction. That may be the right runtime behavior, but it is a terrible migration signal.&lt;/p&gt;

&lt;p&gt;The same pattern shows up with CDNs and origins. Cloudflare has supported post-quantum hybrid key agreement for visitor-to-edge TLS 1.3 for years, but edge-to-origin support depends on the origin stack, protocol, and configuration. An internet user may have a post-quantum-protected connection to the edge while your origin path remains classical. Or your browser path may be ready while a server-to-server client is not.&lt;/p&gt;

&lt;p&gt;That split is normal. It is also easy to misunderstand.&lt;/p&gt;

&lt;p&gt;Platforms need to know where TLS terminates, where it restarts, which negotiated group was actually used, and which policy decided the fallback. Without that, "we enabled PQC" is just a sentence in a slide deck.&lt;/p&gt;

&lt;h2&gt;
  
  
  inventory before ideology
&lt;/h2&gt;

&lt;p&gt;The practical starting point is not a cryptography debate. It is inventory.&lt;/p&gt;

&lt;p&gt;Start with outbound clients. Which services talk to AWS KMS, Secrets Manager, ACM, payment providers, identity providers, banks, partners, and internal APIs over TLS? Which SDK versions do they use? Which HTTP clients? Which TLS libraries? Which container base images? Which runtime versions?&lt;/p&gt;

&lt;p&gt;This is where the real mess appears.&lt;/p&gt;

&lt;p&gt;A Java service using the AWS SDK with a modern CRT client is a different migration target from an old JVM using a default TLS provider. A Rust service using rustls is different from a Go service pinned to an old toolchain. A mobile app with embedded networking code is different from a backend worker. A legacy appliance behind a private link is different from a Lambda function. A payment integration with strict certification is different from a disposable internal dashboard.&lt;/p&gt;

&lt;p&gt;Then map the termination points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public edge&lt;/li&gt;
&lt;li&gt;CDN&lt;/li&gt;
&lt;li&gt;WAF&lt;/li&gt;
&lt;li&gt;load balancer&lt;/li&gt;
&lt;li&gt;API gateway&lt;/li&gt;
&lt;li&gt;service mesh sidecar&lt;/li&gt;
&lt;li&gt;ingress controller&lt;/li&gt;
&lt;li&gt;outbound proxy&lt;/li&gt;
&lt;li&gt;corporate proxy&lt;/li&gt;
&lt;li&gt;private connectivity&lt;/li&gt;
&lt;li&gt;payment and banking partners&lt;/li&gt;
&lt;li&gt;KMS, HSM, and secrets services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every TLS termination point is a policy point. Every re-origination point is a place where the post-quantum property may stop and start again.&lt;/p&gt;

&lt;p&gt;That is the platform view. It is less glamorous than reading algorithm names, but it is the view that prevents production surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  middleboxes are where optimism goes to die
&lt;/h2&gt;

&lt;p&gt;TLS migrations are rarely broken by the happy path.&lt;/p&gt;

&lt;p&gt;They are broken by the thing in the middle that nobody remembers owning.&lt;/p&gt;

&lt;p&gt;Post-quantum key exchange makes this worse because larger handshakes and newer TLS extensions stress old assumptions. Some boxes inspect ClientHello messages. Some enforce brittle allowlists. Some have buffer limits. Some do TLS interception. Some fail open, some fail closed, and some fail in a way that looks like random packet loss at 2 percent of traffic.&lt;/p&gt;

&lt;p&gt;If you work in fintech, this should feel familiar. The clean architecture diagram says service A calls partner B over TLS. The production path says service A calls an outbound proxy, then a network appliance, then a private connectivity service, then a partner gateway, then something on the other side that nobody is allowed to inspect directly.&lt;/p&gt;

&lt;p&gt;The only honest way to migrate that is to test the real path.&lt;/p&gt;

&lt;p&gt;Not just "curl from my laptop."&lt;/p&gt;

&lt;p&gt;Test from the actual workload environment. Test through the actual proxy. Test with the actual SDK. Test the payment provider sandbox and, when allowed, a controlled production path. Test with connection reuse on and off. Test with the same retry behavior the service uses in anger.&lt;/p&gt;

&lt;p&gt;And when the fallback happens, record it.&lt;/p&gt;

&lt;h2&gt;
  
  
  observability is the migration control plane
&lt;/h2&gt;

&lt;p&gt;Here is the part I would be annoying about in a design review: if nobody can tell what negotiated, nobody has enabled anything meaningful.&lt;/p&gt;

&lt;p&gt;A post-quantum TLS rollout needs observability before rollout. At minimum, teams should be able to answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which TLS version negotiated?&lt;/li&gt;
&lt;li&gt;Which key exchange group negotiated?&lt;/li&gt;
&lt;li&gt;Did the client offer ML-KEM or a hybrid group?&lt;/li&gt;
&lt;li&gt;Did the server select it?&lt;/li&gt;
&lt;li&gt;Did the connection fall back to classical key exchange?&lt;/li&gt;
&lt;li&gt;Which client library and version made the connection?&lt;/li&gt;
&lt;li&gt;Which proxy or load balancer handled it?&lt;/li&gt;
&lt;li&gt;Did handshake failures, latency, or retry rates change?&lt;/li&gt;
&lt;li&gt;Did connection reuse hide a handshake problem until scale changed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of this data lives in load balancer logs. Some lives in CDN analytics. Some can be exposed by TLS libraries. Some may require synthetic probes. Some may need targeted packet captures in test environments.&lt;/p&gt;

&lt;p&gt;The exact implementation matters less than the discipline: negotiate, observe, prove, then expand.&lt;/p&gt;

&lt;p&gt;"Turn it on" is not a strategy. "We can prove 97 percent of KMS traffic negotiated &lt;code&gt;X25519MLKEM768&lt;/code&gt;, 3 percent fell back because of these client versions, and here is the upgrade plan" is a strategy.&lt;/p&gt;

&lt;p&gt;That sentence is also the difference between platform engineering and theater.&lt;/p&gt;

&lt;h2&gt;
  
  
  the readiness gap is real
&lt;/h2&gt;

&lt;p&gt;The internet is not moving as one clean block.&lt;/p&gt;

&lt;p&gt;A 2026 measurement study across 32,011 domains found that modern protocols like TLS 1.3 and QUIC are spreading, but a meaningful slice of domains still rely on TLS 1.2, with banking and government called out among the sectors where the gap matters. The same paper looked at negotiated TLS parameters, key exchange, and certificates, which is exactly the sort of messy operational evidence this migration needs.&lt;/p&gt;

&lt;p&gt;That finding matches the platform intuition. Consumer browsers and big CDNs can move quickly. Large cloud providers can move their managed endpoints. But enterprise clients, partner integrations, regulated systems, old JVMs, TLS-terminating appliances, and private PKI workflows move slowly.&lt;/p&gt;

&lt;p&gt;So the rollout will be uneven.&lt;/p&gt;

&lt;p&gt;Uneven rollouts are where compatibility assumptions become incidents.&lt;/p&gt;

&lt;p&gt;This is why I dislike the framing of PQC as a security team's future project. Security should absolutely drive the risk model and migration pressure. But the work touches platform ownership: runtime images, SDK baselines, service meshes, gateway configuration, certificate automation, observability, change management, and rollback.&lt;/p&gt;

&lt;p&gt;If the only team with a ticket is security, the migration is already under-scoped.&lt;/p&gt;

&lt;h2&gt;
  
  
  what I would do first
&lt;/h2&gt;

&lt;p&gt;I would not start by mandating post-quantum TLS everywhere.&lt;/p&gt;

&lt;p&gt;I would start by making the platform able to see it.&lt;/p&gt;

&lt;p&gt;Pick one important but bounded path. AWS KMS is a good candidate for many teams because it is security-sensitive, heavily used, and now has concrete client configuration. Enable hybrid post-quantum TLS in a controlled environment. Record the negotiated group. Measure handshake latency and error rates. Verify that connection reuse behaves the way you think it does. Then try the same thing through your real service runtime, not a toy client.&lt;/p&gt;

&lt;p&gt;From there, build the inventory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;services that can offer hybrid ML-KEM today&lt;/li&gt;
&lt;li&gt;services blocked by old SDKs or TLS libraries&lt;/li&gt;
&lt;li&gt;paths that terminate at the CDN only&lt;/li&gt;
&lt;li&gt;edge-to-origin paths that can negotiate hybrid key agreement&lt;/li&gt;
&lt;li&gt;proxies and middleboxes that need explicit testing&lt;/li&gt;
&lt;li&gt;partner integrations that need certification or support confirmation&lt;/li&gt;
&lt;li&gt;certificate workflows that will be affected later by post-quantum signatures&lt;/li&gt;
&lt;li&gt;dashboards that can prove negotiation and fallback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gives you a migration map instead of a slogan.&lt;/p&gt;

&lt;p&gt;It also gives security something better than "we are waiting for the industry." It gives them dates, owners, blockers, and evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  the small checklist
&lt;/h2&gt;

&lt;p&gt;If you want a non-dramatic starting point, this is the checklist I would put in front of a platform team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inventory outbound TLS clients, SDKs, runtimes, and TLS libraries.&lt;/li&gt;
&lt;li&gt;Identify every TLS termination and re-origination point.&lt;/li&gt;
&lt;li&gt;Separate key exchange migration from certificate and signature migration.&lt;/li&gt;
&lt;li&gt;Pick one bounded path, such as KMS, and test hybrid ML-KEM end to end.&lt;/li&gt;
&lt;li&gt;Capture negotiated TLS version, key exchange group, fallback, latency, and errors.&lt;/li&gt;
&lt;li&gt;Test through real proxies, gateways, service meshes, CDNs, and partner paths.&lt;/li&gt;
&lt;li&gt;Check connection reuse assumptions before trusting benchmark numbers.&lt;/li&gt;
&lt;li&gt;Track old SDKs and clients that silently fall back to classical key exchange.&lt;/li&gt;
&lt;li&gt;Add dashboards before broad enablement.&lt;/li&gt;
&lt;li&gt;Treat payment, banking, KMS, HSM, secrets, and private PKI paths as first-class migration surfaces.&lt;/li&gt;
&lt;li&gt;Write the rollback story before turning defaults on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this requires panic.&lt;/p&gt;

&lt;p&gt;It does require refusing the comfortable story that post-quantum TLS is just a crypto library upgrade. It is not. It is a platform migration with cryptography inside it.&lt;/p&gt;

&lt;p&gt;The teams that do the boring inventory now will have a quiet advantage later. When the defaults move, they will already know which clients can negotiate, which paths fall back, and which certificate workflows are a separate project.&lt;/p&gt;

&lt;p&gt;Everyone else will discover their TLS architecture from error rates.&lt;/p&gt;

&lt;p&gt;That is a lousy way to learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;AWS: ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS: Using hybrid post-quantum TLS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare SSL/TLS docs: Post-quantum cryptography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare SSL/TLS docs: Post-quantum between Cloudflare and origin servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;Microsoft: New Windows Features to Secure Today's Data in a Post-Quantum World&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF: ML-KEM Post-Quantum Key Agreement for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;arXiv: Measurement Study of Post-Quantum Readiness of Internet: 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
    <item>
      <title>post-quantum tls is a platform migration, not a crypto project</title>
      <dc:creator>Paulo Victor Leite Lima Gomes</dc:creator>
      <pubDate>Mon, 14 Sep 2026 10:33:27 +0000</pubDate>
      <link>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-1499</link>
      <guid>https://dev.to/pvgomes/post-quantum-tls-is-a-platform-migration-not-a-crypto-project-1499</guid>
      <description>&lt;p&gt;The least useful question about post-quantum TLS is still the one people like asking first:&lt;/p&gt;

&lt;p&gt;When will quantum computers break today's public-key cryptography?&lt;/p&gt;

&lt;p&gt;I get why the question is attractive. It sounds strategic. It lets everyone argue about timelines, threat models, nation states, and whether the whole thing is hype. It also lets engineering teams postpone the boring work, because if the scary computer is far enough away, the migration can stay in the "future crypto" bucket.&lt;/p&gt;

&lt;p&gt;That bucket is leaking.&lt;/p&gt;

&lt;p&gt;Post-quantum TLS is already turning into ordinary platform migration work. Not because every company suddenly needs to panic about quantum attacks tomorrow morning, but because cloud providers, browsers, operating systems, CDNs, SDKs, cryptographic libraries, and compliance teams are starting to expose the surface area now.&lt;/p&gt;

&lt;p&gt;AWS supports ML-KEM hybrid post-quantum TLS for KMS, ACM, and Secrets Manager. Cloudflare documents post-quantum key agreement between visitors, its edge, and origins. Microsoft has Windows platform support for ML-KEM hybrid TLS groups and post-quantum APIs. The IETF TLS work is active. The measurements say internet readiness is uneven, especially in sectors that should know better.&lt;/p&gt;

&lt;p&gt;That is the migration signal.&lt;/p&gt;

&lt;p&gt;The engineering problem is not "when does quantum break RSA?"&lt;/p&gt;

&lt;p&gt;The engineering problem is "do we know which of our services, SDKs, middleboxes, payment integrations, certificate workflows, and observability paths will tolerate the TLS ecosystem changing underneath them?"&lt;/p&gt;

&lt;p&gt;Most teams cannot answer that yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  what is actually changing
&lt;/h2&gt;

&lt;p&gt;The first wave is mostly about key exchange.&lt;/p&gt;

&lt;p&gt;In normal TLS 1.3 today, clients and servers use classical elliptic-curve key agreement such as X25519 or P-256 to establish shared secrets for the connection. Post-quantum TLS introduces key establishment based on ML-KEM, the NIST-standardized key encapsulation mechanism that came out of the Kyber work.&lt;/p&gt;

&lt;p&gt;The practical deployment pattern is usually hybrid key exchange. The client and server combine a classical algorithm with ML-KEM, so the connection is protected as long as at least one side of the hybrid construction remains sound. That is why you see names like &lt;code&gt;X25519MLKEM768&lt;/code&gt;: familiar X25519 plus ML-KEM-768.&lt;/p&gt;

&lt;p&gt;This sounds exotic until you translate it into production behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the TLS ClientHello can get larger&lt;/li&gt;
&lt;li&gt;the server response can get larger&lt;/li&gt;
&lt;li&gt;handshakes do a little more cryptographic work&lt;/li&gt;
&lt;li&gt;clients and servers need compatible TLS stacks&lt;/li&gt;
&lt;li&gt;middleboxes that make assumptions about handshake size or extensions can misbehave&lt;/li&gt;
&lt;li&gt;fallback behavior starts to matter a lot&lt;/li&gt;
&lt;li&gt;observability needs to show what actually negotiated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS's measurements are a useful sanity check here. In their KMS benchmark, enabling hybrid post-quantum TLS added roughly 1,600 bytes to the handshake and a small amount of compute. With TLS connection reuse enabled, the measured request-rate impact was almost invisible for that workload. Without connection reuse, the penalty was larger but still not dramatic.&lt;/p&gt;

&lt;p&gt;That is good news, but it is not permission to stop thinking.&lt;/p&gt;

&lt;p&gt;Your workload is not AWS's benchmark. Your network path may have old proxies. Your mobile clients may use older TLS libraries. Your service mesh may terminate and re-originate TLS. Your fintech partner may still be on TLS 1.2. Your payment gateway may have a device in the path that nobody has touched since a migration three org charts ago.&lt;/p&gt;

&lt;p&gt;"The crypto is fast enough" and "our platform is ready" are different claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  signatures are a separate migration
&lt;/h2&gt;

&lt;p&gt;One trap in this conversation is mixing key exchange with signatures and certificates.&lt;/p&gt;

&lt;p&gt;Hybrid ML-KEM in TLS is about establishing the connection secrets. It helps with the "harvest now, decrypt later" concern: an attacker records encrypted traffic today and hopes to decrypt it later with a quantum computer.&lt;/p&gt;

&lt;p&gt;Post-quantum signatures are a different problem. Certificates, certificate chains, hardware security modules, code signing, device identity, private PKI, certificate transparency, ACME workflows, load balancers, origin authentication, and audit requirements all get involved.&lt;/p&gt;

&lt;p&gt;Cloudflare's origin documentation is interesting because it points at both sides of the house: post-quantum key agreement to the origin, and ML-DSA for origin authentication in supported paths. That is exactly how this will land in real platforms. First the key exchange knob appears. Then certificate and signature paths start appearing. Then someone asks why the team treated it as one ticket.&lt;/p&gt;

&lt;p&gt;Do not treat it as one ticket.&lt;/p&gt;

&lt;p&gt;Key exchange, public TLS certificates, private service certificates, client certificates, KMS/HSM integrations, and code-signing chains should be planned separately. They share vocabulary, but they do not share the same blast radius, owner, tooling, or rollback story.&lt;/p&gt;

&lt;p&gt;If security creates a single epic called "enable PQC", platform teams should split it before the work starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  the cloud default problem
&lt;/h2&gt;

&lt;p&gt;The reason this matters now is not that every team needs to flip every switch today.&lt;/p&gt;

&lt;p&gt;The reason is that platform defaults have a way of becoming production defaults before anyone has finished the inventory.&lt;/p&gt;

&lt;p&gt;AWS is a good example. It already supports ML-KEM hybrid TLS on security-critical services like KMS, ACM, and Secrets Manager, and it says older CRYSTALS-Kyber support will be removed across AWS service endpoints in 2026. AWS customers using older clients can fall back to classical key agreement when the old Kyber support disappears, but that sentence should make platform teams uncomfortable.&lt;/p&gt;

&lt;p&gt;Fallback is not the same as readiness.&lt;/p&gt;

&lt;p&gt;If your KMS client silently falls back to classical TLS and nobody records it, you did not migrate. You just failed quietly in the safest available direction. That may be the right runtime behavior, but it is a terrible migration signal.&lt;/p&gt;

&lt;p&gt;The same pattern shows up with CDNs and origins. Cloudflare has supported post-quantum hybrid key agreement for visitor-to-edge TLS 1.3 for years, but edge-to-origin support depends on the origin stack, protocol, and configuration. An internet user may have a post-quantum-protected connection to the edge while your origin path remains classical. Or your browser path may be ready while a server-to-server client is not.&lt;/p&gt;

&lt;p&gt;That split is normal. It is also easy to misunderstand.&lt;/p&gt;

&lt;p&gt;Platforms need to know where TLS terminates, where it restarts, which negotiated group was actually used, and which policy decided the fallback. Without that, "we enabled PQC" is just a sentence in a slide deck.&lt;/p&gt;

&lt;h2&gt;
  
  
  inventory before ideology
&lt;/h2&gt;

&lt;p&gt;The practical starting point is not a cryptography debate. It is inventory.&lt;/p&gt;

&lt;p&gt;Start with outbound clients. Which services talk to AWS KMS, Secrets Manager, ACM, payment providers, identity providers, banks, partners, and internal APIs over TLS? Which SDK versions do they use? Which HTTP clients? Which TLS libraries? Which container base images? Which runtime versions?&lt;/p&gt;

&lt;p&gt;This is where the real mess appears.&lt;/p&gt;

&lt;p&gt;A Java service using the AWS SDK with a modern CRT client is a different migration target from an old JVM using a default TLS provider. A Rust service using rustls is different from a Go service pinned to an old toolchain. A mobile app with embedded networking code is different from a backend worker. A legacy appliance behind a private link is different from a Lambda function. A payment integration with strict certification is different from a disposable internal dashboard.&lt;/p&gt;

&lt;p&gt;Then map the termination points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public edge&lt;/li&gt;
&lt;li&gt;CDN&lt;/li&gt;
&lt;li&gt;WAF&lt;/li&gt;
&lt;li&gt;load balancer&lt;/li&gt;
&lt;li&gt;API gateway&lt;/li&gt;
&lt;li&gt;service mesh sidecar&lt;/li&gt;
&lt;li&gt;ingress controller&lt;/li&gt;
&lt;li&gt;outbound proxy&lt;/li&gt;
&lt;li&gt;corporate proxy&lt;/li&gt;
&lt;li&gt;private connectivity&lt;/li&gt;
&lt;li&gt;payment and banking partners&lt;/li&gt;
&lt;li&gt;KMS, HSM, and secrets services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every TLS termination point is a policy point. Every re-origination point is a place where the post-quantum property may stop and start again.&lt;/p&gt;

&lt;p&gt;That is the platform view. It is less glamorous than reading algorithm names, but it is the view that prevents production surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  middleboxes are where optimism goes to die
&lt;/h2&gt;

&lt;p&gt;TLS migrations are rarely broken by the happy path.&lt;/p&gt;

&lt;p&gt;They are broken by the thing in the middle that nobody remembers owning.&lt;/p&gt;

&lt;p&gt;Post-quantum key exchange makes this worse because larger handshakes and newer TLS extensions stress old assumptions. Some boxes inspect ClientHello messages. Some enforce brittle allowlists. Some have buffer limits. Some do TLS interception. Some fail open, some fail closed, and some fail in a way that looks like random packet loss at 2 percent of traffic.&lt;/p&gt;

&lt;p&gt;If you work in fintech, this should feel familiar. The clean architecture diagram says service A calls partner B over TLS. The production path says service A calls an outbound proxy, then a network appliance, then a private connectivity service, then a partner gateway, then something on the other side that nobody is allowed to inspect directly.&lt;/p&gt;

&lt;p&gt;The only honest way to migrate that is to test the real path.&lt;/p&gt;

&lt;p&gt;Not just "curl from my laptop."&lt;/p&gt;

&lt;p&gt;Test from the actual workload environment. Test through the actual proxy. Test with the actual SDK. Test the payment provider sandbox and, when allowed, a controlled production path. Test with connection reuse on and off. Test with the same retry behavior the service uses in anger.&lt;/p&gt;

&lt;p&gt;And when the fallback happens, record it.&lt;/p&gt;

&lt;h2&gt;
  
  
  observability is the migration control plane
&lt;/h2&gt;

&lt;p&gt;Here is the part I would be annoying about in a design review: if nobody can tell what negotiated, nobody has enabled anything meaningful.&lt;/p&gt;

&lt;p&gt;A post-quantum TLS rollout needs observability before rollout. At minimum, teams should be able to answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which TLS version negotiated?&lt;/li&gt;
&lt;li&gt;Which key exchange group negotiated?&lt;/li&gt;
&lt;li&gt;Did the client offer ML-KEM or a hybrid group?&lt;/li&gt;
&lt;li&gt;Did the server select it?&lt;/li&gt;
&lt;li&gt;Did the connection fall back to classical key exchange?&lt;/li&gt;
&lt;li&gt;Which client library and version made the connection?&lt;/li&gt;
&lt;li&gt;Which proxy or load balancer handled it?&lt;/li&gt;
&lt;li&gt;Did handshake failures, latency, or retry rates change?&lt;/li&gt;
&lt;li&gt;Did connection reuse hide a handshake problem until scale changed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of this data lives in load balancer logs. Some lives in CDN analytics. Some can be exposed by TLS libraries. Some may require synthetic probes. Some may need targeted packet captures in test environments.&lt;/p&gt;

&lt;p&gt;The exact implementation matters less than the discipline: negotiate, observe, prove, then expand.&lt;/p&gt;

&lt;p&gt;"Turn it on" is not a strategy. "We can prove 97 percent of KMS traffic negotiated &lt;code&gt;X25519MLKEM768&lt;/code&gt;, 3 percent fell back because of these client versions, and here is the upgrade plan" is a strategy.&lt;/p&gt;

&lt;p&gt;That sentence is also the difference between platform engineering and theater.&lt;/p&gt;

&lt;h2&gt;
  
  
  the readiness gap is real
&lt;/h2&gt;

&lt;p&gt;The internet is not moving as one clean block.&lt;/p&gt;

&lt;p&gt;A 2026 measurement study across 32,011 domains found that modern protocols like TLS 1.3 and QUIC are spreading, but a meaningful slice of domains still rely on TLS 1.2, with banking and government called out among the sectors where the gap matters. The same paper looked at negotiated TLS parameters, key exchange, and certificates, which is exactly the sort of messy operational evidence this migration needs.&lt;/p&gt;

&lt;p&gt;That finding matches the platform intuition. Consumer browsers and big CDNs can move quickly. Large cloud providers can move their managed endpoints. But enterprise clients, partner integrations, regulated systems, old JVMs, TLS-terminating appliances, and private PKI workflows move slowly.&lt;/p&gt;

&lt;p&gt;So the rollout will be uneven.&lt;/p&gt;

&lt;p&gt;Uneven rollouts are where compatibility assumptions become incidents.&lt;/p&gt;

&lt;p&gt;This is why I dislike the framing of PQC as a security team's future project. Security should absolutely drive the risk model and migration pressure. But the work touches platform ownership: runtime images, SDK baselines, service meshes, gateway configuration, certificate automation, observability, change management, and rollback.&lt;/p&gt;

&lt;p&gt;If the only team with a ticket is security, the migration is already under-scoped.&lt;/p&gt;

&lt;h2&gt;
  
  
  what I would do first
&lt;/h2&gt;

&lt;p&gt;I would not start by mandating post-quantum TLS everywhere.&lt;/p&gt;

&lt;p&gt;I would start by making the platform able to see it.&lt;/p&gt;

&lt;p&gt;Pick one important but bounded path. AWS KMS is a good candidate for many teams because it is security-sensitive, heavily used, and now has concrete client configuration. Enable hybrid post-quantum TLS in a controlled environment. Record the negotiated group. Measure handshake latency and error rates. Verify that connection reuse behaves the way you think it does. Then try the same thing through your real service runtime, not a toy client.&lt;/p&gt;

&lt;p&gt;From there, build the inventory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;services that can offer hybrid ML-KEM today&lt;/li&gt;
&lt;li&gt;services blocked by old SDKs or TLS libraries&lt;/li&gt;
&lt;li&gt;paths that terminate at the CDN only&lt;/li&gt;
&lt;li&gt;edge-to-origin paths that can negotiate hybrid key agreement&lt;/li&gt;
&lt;li&gt;proxies and middleboxes that need explicit testing&lt;/li&gt;
&lt;li&gt;partner integrations that need certification or support confirmation&lt;/li&gt;
&lt;li&gt;certificate workflows that will be affected later by post-quantum signatures&lt;/li&gt;
&lt;li&gt;dashboards that can prove negotiation and fallback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gives you a migration map instead of a slogan.&lt;/p&gt;

&lt;p&gt;It also gives security something better than "we are waiting for the industry." It gives them dates, owners, blockers, and evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  the small checklist
&lt;/h2&gt;

&lt;p&gt;If you want a non-dramatic starting point, this is the checklist I would put in front of a platform team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inventory outbound TLS clients, SDKs, runtimes, and TLS libraries.&lt;/li&gt;
&lt;li&gt;Identify every TLS termination and re-origination point.&lt;/li&gt;
&lt;li&gt;Separate key exchange migration from certificate and signature migration.&lt;/li&gt;
&lt;li&gt;Pick one bounded path, such as KMS, and test hybrid ML-KEM end to end.&lt;/li&gt;
&lt;li&gt;Capture negotiated TLS version, key exchange group, fallback, latency, and errors.&lt;/li&gt;
&lt;li&gt;Test through real proxies, gateways, service meshes, CDNs, and partner paths.&lt;/li&gt;
&lt;li&gt;Check connection reuse assumptions before trusting benchmark numbers.&lt;/li&gt;
&lt;li&gt;Track old SDKs and clients that silently fall back to classical key exchange.&lt;/li&gt;
&lt;li&gt;Add dashboards before broad enablement.&lt;/li&gt;
&lt;li&gt;Treat payment, banking, KMS, HSM, secrets, and private PKI paths as first-class migration surfaces.&lt;/li&gt;
&lt;li&gt;Write the rollback story before turning defaults on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this requires panic.&lt;/p&gt;

&lt;p&gt;It does require refusing the comfortable story that post-quantum TLS is just a crypto library upgrade. It is not. It is a platform migration with cryptography inside it.&lt;/p&gt;

&lt;p&gt;The teams that do the boring inventory now will have a quiet advantage later. When the defaults move, they will already know which clients can negotiate, which paths fall back, and which certificate workflows are a separate project.&lt;/p&gt;

&lt;p&gt;Everyone else will discover their TLS architecture from error rates.&lt;/p&gt;

&lt;p&gt;That is a lousy way to learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/security/ml-kem-post-quantum-tls-now-supported-in-aws-kms-acm-and-secrets-manager/" rel="noopener noreferrer"&gt;AWS: ML-KEM post-quantum TLS now supported in AWS KMS, ACM, and Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/pqtls.html" rel="noopener noreferrer"&gt;AWS KMS: Using hybrid post-quantum TLS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/" rel="noopener noreferrer"&gt;Cloudflare SSL/TLS docs: Post-quantum cryptography&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-to-origin/" rel="noopener noreferrer"&gt;Cloudflare SSL/TLS docs: Post-quantum between Cloudflare and origin servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/new-windows-features-to-secure-today%E2%80%99s-data-in-a-post-quantum-world/4523370" rel="noopener noreferrer"&gt;Microsoft: New Windows Features to Secure Today's Data in a Post-Quantum World&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem/" rel="noopener noreferrer"&gt;IETF: ML-KEM Post-Quantum Key Agreement for TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2606.16473" rel="noopener noreferrer"&gt;arXiv: Measurement Study of Post-Quantum Readiness of Internet: 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To test my projects, I use &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;. If you want $20 USD to get started, &lt;a href="https://railway.com?referralCode=G_jRmP" rel="noopener noreferrer"&gt;use this link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opinion</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
