与 99% 的用户一样,我从现成的二进制文件安装 Ubuntu。
我如何才能自己验证这些二进制文件确实来自 Ubuntu 的原始源代码?
最好能核实 NSA 或其他人没有与 Ubuntu 或 Linode(我的 VPS 提供商)合作来破坏二进制文件。如果我们能核实二进制文件,他们也不太可能首先尝试这样做,因为这样很容易就能揭发他们。
答案1
您可以下载源代码并自行编译。但是请稍等 - 首先您必须检查源代码,因为如果 Canonical 与 NSA 合作,他们可能在某处输入了一些代码以允许键盘记录器或可以远程激活的东西。
所以...
- 下载源代码后,
- 你必须检查所有代码,
- 然后编译它!
可是等等 -你能相信编译器吗?
答案2
如果您不愿意接受“因为 Ubuntu 是这么说的”,那么您就不能。
答案3
Ubuntu 提供了在您自己的机器上编译软件包的便捷方法。但是,没有办法检查您下载的二进制软件包中的可执行文件是否来自该源代码。Ubuntu 使用的签名过程大大降低了第三方篡改软件包的风险,但您仍然必须相信在编译之前没有添加任何有害代码,而这些代码未反映在可下载的源代码中。
原因是,获取与已编译软件包中完全相同的二进制文件非常困难,因为这些二进制文件取决于确切的编译器版本、其选项,并且可能还有一些路径或环境变量被编译到二进制文件中。因此,您在自行编译时无法获取完全相同的二进制文件,这将“验证”下载的二进制文件。
实际上有一个小型研究社区专门研究这个问题——如何使编译可重现。
话虽如此,手动比较下载的二进制文件和自编译的二进制文件能检测添加/修改的代码,因此如果有人提供二进制文件和源代码并在二进制文件中隐藏某些内容的话,这将是有风险的,因为这可以被检测到。
但是,正如前面提到的,还存在信任编译器的问题……
答案4
使用 Ubuntu 的 MD5 进行检查。如果您从文件中获得的 MD5 与 Ubuntu 发布的 MD5 相匹配,则没有人篡改过中间的二进制文件。