请点击上方蓝字TonyBai订阅公众号!
在今年3月份,Microsoft Azure团队宣布开设Go开发人员博客[1],旨在向开发者通报Microsoft在Go领域的最新动态,包括如何在Azure上部署Go工作负载以及与Go编程相关的文章。
然而,经过一段时间的关注,我发现该博客上的大多数文章都呈现出类似下图中的标题格式:
似乎微软在紧跟Go的发布节奏,发布自己维护的fork版本[2]。那么,这些fork版本与上游Go究竟有何不同呢?通过查阅其fork版的README文件[3],我们可以找到答案:
原来微软的Go分支主要是为了向开发者提供符合FIPS 140-2标准[4]的Go加密库[5]。
近期,Russ Cox也发起了一个新提案[6],旨在使Go的加密库符合FIPS 140标准,以便能够去除Boring Crypto库。
对于许多对加密领域不太熟悉的读者来说,这可能会引发一系列疑问:什么是FIPS 140标准?Go目前对FIPS 140标准的支持状态如何?新提案将如何影响Go未来对FIPS 140标准的支持?
在这篇文章中,我们就一起了解一下FIPS 140标准、Go对其支持的现状以及未来的支持策略。
1. 什么是FIPS 140标准认证
FIPS 140(联邦信息处理标准第140号)是美国政府制定的一套计算机安全标准,主要用于规定加密模块的要求。该标准由美国国家标准与技术研究院(NIST)发布,旨在确保用于加密的硬件和软件模块满足一定的安全标准。
FIPS 140标准经历了多个版本的演进:
FIPS 140-1
于1994年发布,2002年撤回。它首次定义了四个安全级别和十一项要求领域。
FIPS 140-2
于2001年发布,考虑了技术的发展和用户反馈,是国际标准ISO/IEC 19790:2006的基础文件。FIPS 140-2仍然在使用,直到2022年4月某些应用程序的测试可以继续进行。FIPS 140-2定义了四个安全级别:
级别1:最低要求,所有组件必须是“生产级”的,且不允许有明显的安全漏洞。
级别2:增加了物理防篡改的要求,要求有角色基础的身份验证。
级别3:要求更高的物理防篡改能力和基于身份的认证,同时要求对模块的关键安全参数接口进行物理或逻辑隔离。
级别4:对物理安全要求更严格,要求能够抵御环境攻击。
FIPS 140-3
在2019年发布,作为FIPS 140-2的继任者,FIPS 140-3对标准进行了更新,使其与国际标准更为一致,并引入了新的安全要求。
FIPS 140认证由加密模块验证计划(CMVP)负责,该计划是NIST与加拿大通信安全局(CSE)共同运营的。认证过程涉及对加密模块的详细测试,确保其符合相应的标准要求。所有使用加密的美国联邦政府部门都必须使用经过FIPS 140认证的模块。
FIPS 140并不保证使用该标准的模块一定是安全的,但它确立了一系列文档和测试要求,确保加密模块在设计和实现上的可靠性。对于希望使用加密模块的用户和开发者来说,确认所使用的模块是否有现有的验证证书是非常重要的。
FIPS 140是美国政府对加密模块的要求,许多公司需要遵守这些标准以满足合规性需求,尤其是一些企业在与美国政府及其他受监管行业的合作中,FIPS合规性变得至关重要,这也是微软为何要建立Go Fork分支满足FIPS合规性,以及Go团队发起尽快让Go加密库满足FIPS合规性的提案的根本原因。随着Go在受监管环境中的采用增加,FIPS合规性将影响Go的吸引力和开发者体验。
那么当前Go密码学包对FIPS的支持是怎样的呢?我们继续往下看。
2. Go密码学包对FIPS标准支持的现状
到目前为止(Go 1.23.x版本[7]"的is