文章摘要
Go语言通过在其标准库和go命令中内置FIPS 140支持,解决了用户在使用Go时面临的FIPS 140合规性问题。FIPS 140-3验证的Go加密模块现已成为Go内置加密库的基础,自Go 1.24版本起包含的v1.0.0模块已获得CAVP证书A6650,并提交至CMVP,进入模块处理列表。这使得Go成为符合FIPS 140标准的最简单、最安全的方式,满足了越来越多受监管环境的需求。
文章总结
文章主要内容总结
标题: Go 加密模块的 FIPS 140-3 认证 - Go 编程语言
来源: The Go Blog
作者: Filippo Valsorda (Geomys), Daniel McCarney (Geomys), 和 Roland Shoemaker (Google)
日期: 2025年7月15日
1. FIPS 140-3 认证的背景与需求
FIPS 140 是加密实现的标准,尽管它并不直接提升安全性,但在某些受监管的环境中,FIPS 140 合规性是强制要求。Go 语言用户过去在实现 FIPS 140 合规性时面临诸多挑战,包括安全性、开发体验、功能性和发布速度等问题。
2. Go 语言的原生 FIPS 140 支持
Go 语言通过在标准库和 go 命令中内置 FIPS 140 支持,解决了这一需求。FIPS 140-3 认证的 Go 加密模块现已成为 Go 内置加密库的基础,首个版本 v1.0.0 随 Go 1.24 发布。该模块已获得 CAVP 证书 A6650,并已提交至 CMVP,进入 Modules In Process List。
3. 开发与认证过程
Geomys 与 Go 安全团队合作,主导了该模块的实现,并致力于为 Go 社区提供广泛的 FIPS 140-3 认证。Google 和其他行业利益相关者与 Geomys 签订了合同,将特定操作系统环境纳入认证范围。这是首个非 JVM 内存安全库获得 FIPS 140 认证。
4. 开发者体验
该模块完全透明地集成到 Go 应用程序中,所有使用 Go 1.24 构建的程序都已默认使用该模块进行 FIPS 140-3 认证的算法操作。模块通过 fips140=on GODEBUG 选项启用,支持通过环境变量或 go.mod 文件设置。此外,还提供了实验性的 fips140=only 模式,严格限制非认证算法的使用。
5. 安全性与优化
在开发该模块时,首要目标是匹配或超越现有 Go 标准库加密包的安全性。例如,crypto/ecdsa 始终生成带对冲的签名,以防止随机数生成器故障导致的私钥泄露。此外,随机数生成在 FIPS 140-3 模式下使用符合标准的用户空间 NIST DRBG,并结合内核生成的随机数,确保安全性。
6. 广泛的平台支持
FIPS 140-3 模块仅在经过测试或“供应商确认”的操作系统环境下才合规。Geomys 的认证测试覆盖了多种 Linux 发行版、macOS、Windows 和 FreeBSD,支持 x86-64、ARMv8/9、ARMv7、MIPS、z/Architecture 和 POWER 等硬件平台,总计 23 个测试环境。
7. 全面的算法覆盖
所有 FIPS 140-3 认证的算法在标准库中均由 Go 加密模块实现,并经过验证测试。例如,后量子 ML-KEM 密钥交换(FIPS 203)也在 Go 1.24 中引入并验证,支持 FIPS 140-3 合规的后量子安全连接。
8. 未来展望
Go 将继续支持 v1.0.0 版本的加密模块,直到下一个版本获得完全认证。Geomys 计划每年至少验证一次新模块版本,以确保 FIPS 140 构建不会落后。
总结: Go 语言通过内置 FIPS 140-3 认证的加密模块,显著简化了开发者在受监管环境中实现合规性的过程,提供了更好的安全性、开发体验和平台支持。
评论总结
主要观点总结:
对Go语言及其社区的影响
- 评论1(aranw)提出了对Go语言及其社区可能受到的影响的疑问,特别是与其他语言的差异。
- 关键引用:
- "I’m curious to understand what implications this will have on Go and where it is used?"
- "How does this differ to other languages as well?"
- 关键引用:
- 评论1(aranw)提出了对Go语言及其社区可能受到的影响的疑问,特别是与其他语言的差异。
Go加密库的NIST验证及其意义
- 评论2(tptacek)指出Go的标准加密库几乎完全通过了NIST验证,这对希望进入联邦政府市场的供应商来说是利好消息,但也提醒不应盲目使用FIPS 140。
- 关键引用:
- "the standard Go cryptographic library is almost fully NIST-validated."
- "nobody should be using crypto/fips140 unless they know specifically why they’re doing that."
- 关键引用:
- 评论3(hamburglar)认为这一进展大大简化了Go项目的FIPS-140合规流程。
- 关键引用:
- "They just made it super easy."
- 关键引用:
- 评论2(tptacek)指出Go的标准加密库几乎完全通过了NIST验证,这对希望进入联邦政府市场的供应商来说是利好消息,但也提醒不应盲目使用FIPS 140。
FIPS-140合规性与安全性
- 评论6(firesteelrain)询问使用该库是否仍需应用程序本身通过FIPS验证,认为这仅使合规流程更简便。
- 关键引用:
- "Does the use of the library in your application still require the application itself to be FIPS validated?"
- 关键引用:
- 评论9(SAI_Peregrinus)提到Go团队在FIPS-140合规性中找到了避免降低安全性的方法,特别是避免了虚拟机使用的限制。
- 关键引用:
- "FIPS-140 compliance usually leads to reduced security, but it looks like the Go team found ways around the main janky bits."
- 关键引用:
- 评论6(firesteelrain)询问使用该库是否仍需应用程序本身通过FIPS验证,认为这仅使合规流程更简便。
其他观点
- 评论4(dangoodmanUT)提出这一功能是否已在MS Go中实现。
- 关键引用:
- "I think this was in MS Go before, right?"
- 关键引用:
- 评论5(dadrian)以幽默的方式提到FIPS验证的取消可能对经济有积极影响。
- 关键引用:
- "If DOGE had done nothing other than get rid of FIPS validation, the GDP unlock alone would have solved the debt problem."
- 关键引用:
- 评论4(dangoodmanUT)提出这一功能是否已在MS Go中实现。
总结:
评论主要围绕Go语言的加密库通过NIST验证及其对FIPS-140合规性的影响展开。多数评论认为这一进展简化了合规流程,但也提醒不应盲目使用FIPS 140。同时,Go团队在保持安全性的前提下实现了合规性,得到了积极评价。