可重复构建( Reproducible Builds)是证明软件供应链安全的必要手段,2022已被纳入SupplyChainSecurityCon的topics以及微软的S2C2F(Secure Supply Chain Consumption Framework)当中,并受到了Google开源安全团队的支持赞助。OpenSSF/SLSA在软件供应链完整性与包管理最佳实践中也对可重复构建有所要求。2022年openEuler已初步建设可重复构建能力。
什么是可重复构建
对于可重复的构建,给定相同的源代码、构建环境和构建指令,任何人均可重建出Bit to Bit完全相同的指定制品。
可重复构建的目的与意义
可重复构建可以验证二进制是否被植入后门,避免潜在安全风险,从而保障二进制的质量。构建环境和构建工程能够被还原,使依赖变化范围最小化、测试最小化,方便问题定位、提高开发效率。
通过可重复构建可以创建从代码到制品的可独立验证路径,结合已有的代码发布签名、软件仓库签名、安全启动等技术,使开源代码从生产到使用的全过程可追溯成为可能。
构建差异产生的原因
在代码构建期间,从源代码到产品发布的二进制包,中间每一个步骤、每一个构建工具都有可能引入二进制差异,而这些差异经过逐步放大,导致最终发布的二进制包每次编译都不相同,而且差异非常巨大。
二进制差异案例(差异放大)
导致构建差异的因素有很多,包含环境、时间戳、随机数、文件乱序等等,这些差异都是在构建过程中生成的。数字签名可以证明源码和二进制的唯一性,但是无法证明源码与二进制之间对应关系的一致性。证明源码与二进制一致性的工作量非常大、技术难度高。例如下图在各编译过程中可能会产生差异的因素:



最低0.47元/天 解锁文章
394

被折叠的 条评论
为什么被折叠?



