可复现构建
可复现构建 是什么?
可复现构建通过特定的构建实践,使同一份源代码在同一构建指令下,无论何时何地构建都能产生比特位一致的工件。
可复现构建消除构建过程中的非确定性,使任何拥有源代码和构建配方的人都能独立重建出完全相同的二进制,并按字节与发布版本比较。这需要控制时间戳、构建路径、环境变量、随机性、本地化、文件顺序与编译器选项。Reproducible Builds 项目、Debian、NixOS、Arch Linux、Tor、F-Droid 与 Bazel 在该领域投入颇多。结合签名 provenance,可复现构建让第三方 rebuilder 验证某个二进制确实来自公开的源代码,从而帮助识别单一构建者被入侵的情形(如 SolarWinds 事件)。它也是达到 SLSA 最高构建等级的必备条件,并是关键开源软件赢得信任的基础。
● 示例
- 01
对 Tor Browser 发布版本进行独立重建,结果与官方二进制按字节完全一致。
- 02
基于 Bazel 的服务,在任意 worker 上由同一提交产生相同的 SHA-256 摘要。
● 常见问题
可复现构建 是什么?
通过特定的构建实践,使同一份源代码在同一构建指令下,无论何时何地构建都能产生比特位一致的工件。 它属于网络安全的 应用安全 分类。
可复现构建 是什么意思?
通过特定的构建实践,使同一份源代码在同一构建指令下,无论何时何地构建都能产生比特位一致的工件。
可复现构建 是如何工作的?
可复现构建消除构建过程中的非确定性,使任何拥有源代码和构建配方的人都能独立重建出完全相同的二进制,并按字节与发布版本比较。这需要控制时间戳、构建路径、环境变量、随机性、本地化、文件顺序与编译器选项。Reproducible Builds 项目、Debian、NixOS、Arch Linux、Tor、F-Droid 与 Bazel 在该领域投入颇多。结合签名 provenance,可复现构建让第三方 rebuilder 验证某个二进制确实来自公开的源代码,从而帮助识别单一构建者被入侵的情形(如 SolarWinds 事件)。它也是达到 SLSA 最高构建等级的必备条件,并是关键开源软件赢得信任的基础。
如何防御 可复现构建?
针对 可复现构建 的防御通常结合技术控制与运营实践,详见上方完整定义。
可复现构建 还有哪些其他名称?
常见的别称包括: 确定性构建, 比特级一致构建。
● 相关术语
- appsec№ 1053
SLSA Framework
Supply-chain Levels for Software Artifacts:OpenSSF 发布的分级要求集合,逐级强化软件构建、签名与验证,以抵御供应链篡改。
- appsec№ 1069
软件供应链安全
保护软件生产链中每一个环节——源代码、依赖、构建、签名、分发与部署——使其免受篡改、恶意代码与完整性破坏的学科。
- appsec№ 870
来源证明(Provenance Attestation)
对软件工件如何生成(源代码、构建系统、参数与依赖)进行签名且可机器验证的声明,使使用者能够信任其来源。
- appsec№ 305
依赖固定
把软件依赖以精确版本进行声明,通常结合加密哈希,使构建始终消费同一批工件并抵御供应链篡改的实践。
- appsec№ 166
CI/CD 安全
保护持续集成与持续交付流水线,防止其被入侵、被注入恶意代码、机密泄露与未授权部署的一整套控制。
- appsec№ 784
软件包签名
对软件包进行加密签名,使使用者能够验证发布者身份并确认工件在发布后未被篡改。