可重现构建
概述
可重现构建(Reproducible Builds)是一种软件工程实践:给定相同的源代码和构建环境,任何人在任何时间进行构建都应该得到逐位相同的二进制文件。
关键内容
动机
Thompson 在1984年展示了编译器可以在翻译过程中注入恶意代码,而源代码审查无法检测到。可重现构建的核心目标正是回应 Thompson 的挑战:让任何人都能独立验证分发的二进制文件确实是从声称的源代码编译而来的。
原理
如果构建过程是完全确定性的,那么: - 任何人用相同的源代码和构建环境,应该得到相同的二进制文件 - 如果构建结果不一致,说明构建过程被篡改了
实践
- Debian:截至2020年代中期,已有超过90%的软件包实现了可重现构建
- Arch Linux:推动可重现构建实践
- F-Droid:Android 应用商店,所有应用必须可重现构建
- Tor Browser:实现了可重现构建
局限性
- 不能解决 Thompson 攻击的根本问题(构建工具本身可能被感染)
- 但如果攻击者只控制了一个构建工具,DDC 可以检测到不一致
来源
- raw/books/计算机科学/15-thompson-trusting-trust.md
相关
- Thompson 信任信任论文 — 问题的来源
- 供应链安全 — 所属领域
- C 语言 — CompCert 是验证对象