Skip to content
All news
News

Go 1.27 brings post-quantum signatures to the stdlib

By quantakrypto Research3 min read
TL;DR

Read this first

Go 1.27 (August 2026) adds crypto/mldsa, a standard-library implementation of the ML-DSA post-quantum signature scheme (FIPS 204), with the MLDSA44, MLDSA65, and MLDSA87 parameter sets. crypto/x509 now handles ML-DSA keys, public keys, and signatures, and crypto/tls now offers ML-DSA signature schemes in TLS 1.3. It follows crypto/mlkem, which landed the ML-KEM key exchange in Go 1.24. For a Go service, adding post-quantum authentication is now closer to a version bump than a project.

For most of the post-quantum transition, using the new algorithms meant reaching for a third-party library: a crate, a fork, a wrapper around a reference implementation, often unmaintained, rarely audited, and always one more dependency to justify. That is exactly the friction that keeps migrations on the whiteboard. Go 1.27 removes a large piece of it for one ecosystem. The signature side of post-quantum cryptography is now in the standard library.

What actually shipped

  • crypto/mldsa: a new package implementing ML-DSA (FIPS 204), the lattice-based signature standard, with all three parameter sets, MLDSA44, MLDSA65, and MLDSA87, trading signature and key size for security level.
  • crypto/x509: support for ML-DSA private keys, public keys, and signatures, so certificates can carry post-quantum signatures.
  • crypto/tls: ML-DSA signature schemes in TLS 1.3 (MLDSA44, MLDSA65, MLDSA87), so a handshake can be authenticated with a post-quantum signature, not just protected by a post-quantum key exchange.

This is the second half of the pair. Go 1.24 already added crypto/mlkem for ML-KEM (FIPS 203), the key-establishment side that protects a session against harvest-now-decrypt-later. ML-DSA is the authentication side: proving who you are with a signature a quantum computer cannot forge. With both in the standard library, a Go service can run a fully post-quantum TLS 1.3 handshake, key exchange and authentication, without leaving the platform.

Why it matters more than one release note

Defaults decide migrations. When a post-quantum primitive lives in a niche library, adopting it is a decision someone has to make, defend, and maintain. When it lives in the standard library of a language that runs a large share of the internet's infrastructure, adopting it becomes the path of least resistance, and the reviewers stop asking why you added a dependency. This is the same movement we wrote about on the wire, where ML-KEM became the browser default: the algorithms are leaving the specialist ghetto and becoming ambient. Signatures were the laggard, because the migration story for authentication (certificates, chains, roots) is harder than for key exchange. Putting ML-DSA in crypto/x509 and crypto/tls is how that starts to move.

TL;DR

The point

Post-quantum signatures just became a standard-library import for one of the internet's busiest server languages. The barrier to post-quantum authentication in Go dropped from find-and-vet-a-library to upgrade-and-configure. That is the kind of change that turns a migration from a project into a default.

If you run Go services, the practical read: on 1.27 you can begin testing ML-DSA in TLS and issuing certificates with post-quantum signatures, and you should inventory where your authentication still rests on RSA or ECDSA, the algorithms NIST plans to disallow after 2035. The tools are now in the box. What remains is knowing where the old signatures live, which is a cryptographic inventory problem.

References

Get started

Turn quantum risk into a credential.

Book a discovery call and get an indicative scope and pricing for your organisation.