刚刚,2025图灵奖揭晓!面对即将瘫痪的传统密码学,Go 语言的“抗量子”底牌曝光

本文永久链接 – https://tonybai.com/2026/03/19/2025-turing-award-go-quantum-resistant-cryptography

大家好,我是Tony Bai。

就在昨天(2026 年 3 月 18 日),计算科学界的最高荣誉——ACM A.M. 图灵奖正式揭晓。2025 年的图灵奖,颁给了 Charles H. Bennett 和 Gilles Brassard 两位伟大的科学家,以表彰他们在“量子密码学(Quantum Cryptography)”和量子信息科学领域的开创性贡献。

或许你会觉得,图灵奖、量子力学、薛定谔的猫……这些高大上的词汇离我们每天 CRUD 的业务代码太遥远了。

但实际上,这场发端于理论物理界的革命,正在引发全球软件工程界一场最高级别的“红色预警”。

早期的图灵奖往往颁发给操作系统、数据库或编程语言的设计者(比如Unix 之父、B 语言(C 语言前身)以及 Go 语言联合设计者的Ken Thompson),而这次颁给量子密码学,传递出了一个极其明确的信号:传统的数字世界护城河,马上就要守不住了。

今天,借着图灵奖揭晓的热点,我想和大家聊一个极其硬核、且关乎我们所有后端开发者未来饭碗的话题:当“量子末日(Q-Day)”逼近,作为云原生时代绝对霸主的 Go 语言,手里究竟握着怎样的“抗量子底牌”?

你的数据,正被黑客“先存后破”

在理解 Go 团队的动作之前,我们必须先弄懂,为什么我们需要“后量子密码学(PQC)”?

目前,我们用来保护 HTTPS 流量、验证 JWT 登录、以及签署 Git 提交的底层基石,绝大多数是 RSA 或 ECC(椭圆曲线)算法 。这些算法的安全假设,建立在大质数分解和离散对数计算极其困难的数学事实上。

但早在 1994 年,Peter Shor 就提出了著名的 Shor 算法。该算法在数学上证明了:只要拥有一台足够规模的量子计算机,RSA 和 ECC 算法不仅能被破解,而且破解速度是指数级倍增的!

你可能会想:“量子计算机离真正商用还早着呢,急什么?”

黑客们可不这么想。现在全球的顶级黑客和某些国家级 APT 组织,正在疯狂执行一种名为 “Store Now, Decrypt Later”(先收集,后破解,SNDL) 的战略。

他们把现在截获的、由 RSA/ECC 加密的核心机密数据全部存储在硬盘里。等若干年后量子计算机成熟,他们就能在一瞬间把这些历史机密全部解开。

为了应对这场“降维打击”,美国国家标准与技术研究院(NIST)紧急发布了后量子密码学(PQC)的 FIPS 标准草案。而作为全球云基础设施底层语言的 Go,自然被推到了抗击量子危机的第一线。

Go 团队的“抗量子”谋略

如果你经常关注 Go 社区,你会发现 Go 核心团队早就确定了引入新密码学算法的策略。在 Go 官方仓库的 Issue #64537(crypto: post-quantum support roadmap)中,现任 Go 安全团队负责人 Roland Shoemaker 和 Go 密码学专家 Filippo Valsorda 明确抛出了 Go 在面对量子危机时的三大铁律:

  1. 绝对不当小白鼠:Go 标准库只实现那些结构已经绝对稳定、并在业界(如 WebPKI、TLS)被广泛验证的算法。那些还在实验阶段的半成品,一律拒之门外。
  2. “按需”引入,绝不盲目:PQC 算法分为两类,一类是密钥封装(KEM,用于加密和协商密钥),一类是数字签名(Signature,用于身份认证)。
  3. “内测”转“公测”机制:任何新的 PQC 算法,Go 都会先在 internal 包中悄悄跑几个版本,等把所有可能的开发者“误用坑”都踩平了,才会暴露为 Public API。

基于这套严谨的哲学,Go 团队打出了他们的第一张底牌:优先解决“先收集后破解”的威胁。

在 Go 1.24 中,Go 已经通过提案 #70122 和 #69985,在底层网络库中悄然集成了 ML-KEM(即 Kyber 算法)与 X25519 的混合密钥交换机制。(注:ML-KEM 从 Go 1.23 就以实验特性引入)

这意味着,如果你使用的是最新的 Go 版本构建的 HTTPS 服务,你的连接在建立之初,就已经具备了抵抗未来量子计算机窃听的能力!

密钥交换的问题解决了,那么用来证明身份的数字签名(Digital Signatures)呢?这就引出了 Go 团队即将放出的第二张王炸。

揭开 crypto/mldsa 的硬核源码

数字签名的重要性不言而喻:微服务之间的 mTLS 认证、固件升级包的防篡改、区块链的交易防伪,全靠它。

就在最近,Filippo 在 Go 官方 GitHub 上正式提交了 Issue #77626(proposal: crypto/mldsa: new package),提议在即将到来的 Go 1.27 中,正式向全世界暴露 ML-DSA(NIST FIPS 204 标准)的公有 API。

让我们剥开这层提案,看看顶级大厂架构师是如何设计这套跨时代 API 的。

极简的参数集隔离

ML-DSA 并不是一个单一算法,它包含了不同的安全级别。Go 提案非常干净利落地定义了三个常量函数:

func MLDSA44() Parameters // 推荐日常使用,安全级别相当于 AES-128
func MLDSA65() Parameters // 相当于 AES-192
func MLDSA87() Parameters // 极高安全级别,相当于 AES-256

开发者不需要去记忆复杂的参数结构,只需像拼积木一样调用。

拒绝“半展开密钥”,将安全做到极致

如果你看源码,会发现 NewPrivateKey 除了传入 params 参数集外,只需要传入一个极短的 seed(种子字节),而不是业内的“半展开密钥(Semi-expanded keys)”。

为什么?Filippo 在讨论中给出了让人拍案叫绝的解释:

“半展开密钥是一个极其糟糕的格式。它不仅占用空间更大,加载速度更慢,而且更危险。我们只会支持基于 Seed 的密钥派生。”

这体现了 Go 始终如一的安全哲学:如果一种格式有被开发者误用的风险,那就从 API 层面彻底物理隔绝它。

巧妙应对“预哈希(External μ)”难题

传统签名时,我们通常先用 SHA256 算个 Hash,再对 Hash 签名。但 ML-DSA 的底层数学机制非常复杂,它要求对 H(H(pubkey) || 0×00 || context || message) 进行极度严苛的处理。

Go 团队没有去破坏原有的 crypto.Signer 接口,而是极其巧妙地发明了一个“虚拟的占位符”:crypto.MLDSAMu。

这个常量虽然属于 Hash 类型,但它不支持被实例化,调用 New() 会直接引发 Panic。它仅仅作为一个“信号标记”传递给 SignerOpts,优雅地实现了向下兼容。

为什么我们还不能在 X.509 证书里用它?

看到这里,很多着急的开发者(尤其是一些政企、军工背景的开发团队,正面临 CNSA 2.0 强制要求在 2025 年升级 PQC 的死命令)在 Issue 里疯狂催问:

“API 都做好了,为什么不顺手把它集成进 crypto/x509 证书解析里?为什么还不让在 TLS 中直接使用 ML-DSA 证书?”

Filippo 的回答,直接揭露了目前后量子时代最尴尬的一个物理瓶颈,也展现了他作为世界级密码学家的极致架构克制

“如果我们现在就把 ML-DSA-87 塞进 TLS,你知道一个 TLS 握手包会变得多大吗?足足 19KB!

大家要知道,传统的 RSA 签名不过几百字节,ECC 签名更是只有几十个字节。我们过去 30 年的互联网协议(如 TCP/IP、TLS),都是建立在“签名数据极小、传输成本几乎为零”的物理假设上的。

如果你用 ML-DSA 给证书签名,证书链上一叠加,一次最普通的 HTTPS 握手,瞬间需要传输几十 KB 的数据。在移动网络弱网环境下,这会导致大规模的丢包、延迟飙升,甚至是全球互联网的“大塞车”。

为了通过安全审计而罔顾物理性能,这不是高级软件工程,这是在耍流氓。

Go 团队的判断是:我们有时间去设计更好的协议(比如使用 Merkle Tree 证书),而不是现在急功近利地把数万字节的“肥胖签名”强塞进原本轻巧的 TLS 隧道里。

这种“不将就”的架构底线,正是 Go 语言最迷人的地方。

小结:在不确定的未来中,拥抱底层逻辑

图灵奖颁给量子密码学,不仅是对 Bennett 和 Brassard 两位科学先驱的最高致敬,更吹响了全球软件工程界系统升级的冲锋号。

从优先落地对抗 SNDL 攻击的 ML-KEM,到极度克制、优雅设计的 crypto/mldsa,再到坚决抵制“19KB 肥胖握手包”的底线坚守。我们看到的是 Go 语言团队对工程效率、安全性与网络物理特性的深度掌控。

资料链接:

  • https://awards.acm.org/about/2025-turing
  • https://github.com/golang/go/issues/64537
  • https://github.com/golang/go/issues/77626

今日互动探讨

如果在未来两年,为了抗击量子计算机,我们所有的 HTTPS 请求都要变慢 200 毫秒,甚至服务器内存消耗要翻倍,你觉得这个代价值得吗?在你的业务线里,有面临密码学升级的强制合规要求吗?

欢迎在评论区分享你的看法!


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

别再无脑 go get @latest 了!你的服务器可能下一秒就被黑客接管

本文永久链接 – https://tonybai.com/2026/03/19/proposal-support-dependency-cooldown-in-go-tooling

大家好,我是Tony Bai。

试想一个极其真实的“黑色星期五”场景:

下班前一小时,你为了修复一个无关紧要的小 Bug,或者只是心血来潮想把项目里的依赖库清理一下,于是你顺手在终端里敲下了极其熟练的几个字符:

go get -u

或者 

go get github.com/xxx/yyy@latest

看着屏幕上飞速滚动的下载进度条,一排排依赖被成功升级到带有 v1.x.x 的最新版本,你的心里涌起了一阵莫名的舒适与安全感。毕竟,在绝大多数程序员的潜意识里:“最新版 = 修复了所有已知漏洞 = 性能更强 = 最安全”。

但如果我今天告诉你,你敲下的那个 @latest,其实是黑客精心为你准备的“夺命接引符”呢?

这绝不是危言耸听。就在不久前,Go 官方 GitHub 仓库中出现了一个引发核心开发团队激烈讨论的提案:Issue #76485(在 Go 工具链中支持依赖冷却期)。

这个提案的提出,暴露出我们在面对一种名为“供应链投毒”的高级攻击时,防御体系有多么脆弱。

今天,我们就来硬核扒开这个提案背后的深层技术逻辑,看看 Go 官方打算如何拯救我们的依赖树。

你以为的最新版,其实是黑客的“盲区红利”

近几年来,在 NPM、PyPI 乃至 Rust 的 Crates.io 生态中,“开源供应链投毒”早就不是什么新鲜事了。黑客们的攻击手段已经从早期的“暴力破解服务器”,演变成了极其阴险的“社会工程学与自动化投毒”。

他们的套路简单粗暴,但杀伤力惊人:

黑客会去盗取某个高星级开源库作者的 GitHub 账号,或者利用极具迷惑性的“拼写错误(Typosquatting,比如把 mongodb 拼成 mogodb)”发布一个恶意包。在这个包的 init() 函数里,他们悄悄塞进一段挖矿脚本、一段窃取服务器环境变量(包含 AWS Key 或数据库密码)的后门代码,然后打上一个闪亮的最新版本号,比如 v1.9.9。

这个时候,谁最先更新依赖,谁就最先成为黑客刀下的韭菜。

在网络安全界,有一个极其残酷的定律:恶意代码从发布到被发现,是存在一个“致命时间差”的。

当一个投毒包被发布到全世界的代理镜像(Proxy)上,到它被安全社区的白帽子发现、逆向分析、并最终拉黑(报 CVE 漏洞),通常需要几天到几周的时间。

在这段无人察觉的“安全盲区”里,你对“最新版”的盲目狂热,恰恰成了黑客最喜欢的传播加速器。你在帮黑客做大范围的灰度测试,而你的生产服务器,就是那只可怜的小白鼠。

Go 的三道防线:MVS 与 SumDB 的极限,以及最后的防守漏洞

很多 Go 开发者看到这里可能会不服气:“Tony 老师,你说的都是 Node.js 和 Python 那边的事儿。我们 Go 语言的依赖管理系统可是业界公认最安全的!”

没错,Go 语言在设计模块系统(Go Modules)时,确实比其他语言多长了几个心眼。我们目前拥有两道底层防线:

第一道防线:MVS(最小版本选择,Minimal Version Selection)。

当你安装一个依赖时,NPM 默认会去寻找符合语义化版本(SemVer)的“最新兼容版本”。但 Go 的 MVS 算法极其保守,它只会选择能满足所有依赖要求的最老版本(即最小版本)。这意味着,即使黑客发布了一个带毒的 v1.2.9,只要你的项目依赖树只要求 v1.2.0,Go 就绝对不会自作多情地帮你自动升级到最新版。MVS 直接掐断了黑客通过“传递依赖”悄悄感染你的路径。

第二道防线:SumDB(校验和数据库)。

如果你在本地偷偷篡改了某个版本的代码,Go 会在构建时大声报错。因为 Go 引入了一个基于密码学的透明日志系统 sum.golang.org。每一个包的版本只要一经发布,它的哈希值就会被永久记录在这个不可篡改的账本上。黑客无法“悄悄替换”一个已经存在的历史版本。

既然有了 MVS 和 SumDB,我们是不是就绝对安全了?

错!这两道防线有一个致命的盲点:它们防不住“开发者手贱”。

如果黑客发布了一个全新的带毒版本 v2.0.0,而你为了追求新特性,或者仅仅是强迫症发作,主动在终端里敲下了 go get -u,或者 go get xxx@latest,那么 MVS 的保护伞将瞬间失效。你主动把门禁打开,把伪装成“最新版”的木马迎进了核心机房。

终极杀招:Go 社区的建议——“让子弹飞一会儿”

既然传统的静态代码扫描防不住这种零日投毒,既然开发者总是管不住手想要升级最新版,那该怎么办?

Go 社区在提案中给出了一种解法:“既然投毒被发现需要时间,那我们就用魔法打败魔法——给依赖强行加一个物理隔离的冷却期(Cooldown)。”

在这个代号为 #76485 的提案中,开发者提出引入一个全新的环境变量来掌控全局:

GOCOOLDOWN=15d go mod tidy

这句话的底层指令是:“Go 工具链请注意,在帮我拉取或更新依赖时,请自动屏蔽掉所有发布时间少于 15 天的包。哪怕它的版本号再高、特性再诱人,只要它太年轻,一律当它不存在。”

这个设计的底层逻辑简直绝妙:绝大多数开源投毒攻击,在极度活跃的头几天内就会被安全专家揪出来。只要你忍住不当全网第一批“小白鼠”,等这个包在开源世界里被成千上万的其他语言开发者“趟过雷”,冷却了 15 天依然安然无恙,那么它大概率就是真正安全的。

这就是传说中的:只要我跑得足够慢,黑客的镰刀就永远割不到我。

如何骗过时间?Go 底层的极度严谨

看到这里,有经验的高级架构师肯定会抛出一个极其尖锐的质疑:

“等等!如果黑客在发布恶意包的时候,直接篡改 Git 的 Tag 时间,把今天的发布时间伪造成三个月前,这所谓的冷却期不就成了一个毫无防备的摆设了吗?”

如果你能想到这层,说明你已经具备了极强的黑客攻防思维。但在提案的深度讨论中,Go 密码学包主要维护者 FiloSottile 等核心开发者,早就把黑客的这条退路给焊死了。

在 Go 团队的设计构想中,冷却期的计算,绝对不依赖于容易被任意篡改的 Git Tag 或包作者自己声称的发布时间。

相反,Go 将调用我们前面提到的那套坚如磐石的基础设施——SumDB

当全球代理(如 proxy.golang.org)第一次看到并抓取某个包的全新版本时,SumDB 会在它的密码学叶子节点上,不可撤销地打上一个“首次观测时间戳(First-observed timestamp)”

这就像是去典当行抵押物品。小偷可以随意把手表的出厂日期磨掉改成十年前,但他绝对无法欺骗典当行头顶那带时间戳的监控录像。只要 SumDB 的日志显示这块表是昨天刚拿进来的,那么 GOCOOLDOWN 就会无情地将其拦截在门外。

至此,Go 语言的供应链防线形成了完美的逻辑闭环:

  • MVS 确保了你不会被动卷入升级;
  • SumDB 确保了历史包的绝对不可篡改;
  • 而全新的 Cooldown(冷却期),则补齐了你主动拉取最新版时的最后一块安全护盾。

小结:在特性落地前,我们该怎么保护自己?

虽然目前 #76485 依然在激烈的 Proposal Review(提案评审)阶段,甚至可能最终会演变成一个外部的轻量级过滤代理工具,但它透露出的底层工程哲学,值得每一位后端开发者立刻应用到日常的高并发架构中:

  1. 立刻戒掉 @latest 的瘾:在生产环境中,尽量不要使用 go get -u 去盲目追新。稳定运行了几个月的依赖树,如果没有极其严重的 Bug 或报出的 CVE 安全漏洞,绝对不要去动它。
  2. 拥抱自动化的“安全缓冲期”:如果你在公司内部使用了 Renovate 或 Dependabot 这样的自动依赖更新机器人,立刻去后台把“最小发布年龄(Minimum Release Age)”配置项打开,设置为 7 天或 15 天。让机器替你踩刹车。
  3. 敬畏时间,建立护城河:软件工程不是追星买首发。让别人不重要的边缘业务先去帮这个开源库的最新版“踩坑”,这是一个能够扛起千万级 QPS 的资深架构师应有的沉稳与克制。

在险象环生的网络世界里,时间不仅是解药,更是我们最强大的防火墙。期待 GOCOOLDOWN 的防守理念早日普及,让我们彻底告别每天提心吊胆更新依赖的日子。

资料链接:https://github.com/golang/go/issues/76485


今日互动探讨

你在公司里,遇到过因为同事“手贱升级了最新依赖”而导致生产环境崩溃,或者遭遇供应链投毒的血泪史吗?

欢迎在评论区疯狂吐槽与分享


认知跃迁:读懂底层机制,才能看透系统架构的本质

从保守的 MVS,到密码学级别的 SumDB,再到今天探讨的反直觉的 GOCOOLDOWN,你会发现,Go 团队在设计这门语言的工具链时,处处透着一种对工程稳定性、安全性的极致追求和克制。

然而,令人遗憾的是,很多开发者写了五六年的 Go 代码,却依然只停留在“会用 Gin 写写 CRUD 接口”的表层。他们对 Go 工具链底层的设计哲学、并发调度的本质、内存模型的安全逻辑一无所知。一旦线上的高并发系统出现复杂的性能瓶颈,或是遭遇底层的安全漏洞,往往束手无策,只能靠瞎猜。

如果你渴望突破这种“熟练调包侠”的瓶颈,想要像顶级大厂架构师一样,看透 Go 语言背后的系统级设计思维,建立起坚不可摧的技术护城河——

我的极客时间专栏 Tony Bai·Go语言进阶课 正是为你量身定制。

在这 30+ 讲极其硬核的内容中,我不仅带你剥开语法糖,深挖 Goroutine 调度、Channel 哲学、内存逃逸;更会带你全面吃透 Go 的工程化实践,把构建、依赖管理背后的深层逻辑一次性讲透。

目标只有一个:助你完成从“Go 熟练工”到“能做顶级架构决策的 Go 专家”的蜕变!

扫描下方二维码,加入专栏。不要用战术上的勤奋,掩盖战略上的懒惰。让我们一起用架构师的视角,重新认识 Go 语言。


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


原「Gopher部落」已重装升级为「Go & AI 精进营」知识星球,快来加入星球,开启你的技术跃迁之旅吧!

我们致力于打造一个高品质的 Go 语言深度学习AI 应用探索 平台。在这里,你将获得:

  • 体系化 Go 核心进阶内容: 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏,夯实你的 Go 内功。
  • 前沿 Go+AI 实战赋能: 紧跟时代步伐,学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等,掌握 AI 时代新技能。
  • 星主 Tony Bai 亲自答疑: 遇到难题?星主第一时间为你深度解析,扫清学习障碍。
  • 高活跃 Gopher 交流圈: 与众多优秀 Gopher 分享心得、讨论技术,碰撞思想火花。
  • 独家资源与内容首发: 技术文章、课程更新、精选资源,第一时间触达。

衷心希望「Go & AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚,享受技术精进的快乐!欢迎你的加入!

img{512x368}


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com
这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats