Answers:
镜像的内容使用PGP密钥直接或间接签名。从Debian发行版的“根”开始:
Release
在中使用分离的签名签名Release.gpg
,包含所有程序包索引和安装程序哈希(InRelease
现在将两者结合在一起)的哈希(MD5,SHA1,SHA256 );binary-amd64
)包含封装的散列(MD5和SHA256)。哈希和签名通过工具检查,例如apt-get
使用存储在系统上的PGP密钥(由管理apt-key
)。因此,只要接收系统是健全的,默认情况下,如果尚未通过归档PGP密钥(间接)对其进行签名,则不能从Debian归档安装任何软件包。如果镜像上的任何入侵者也无法控制相关的PGP密钥,则它们将无法替换二进制文件。
这意味着破坏归档文件不足以实际损害最终用户系统。您还需要破坏那些系统已经信任的PGP密钥。(由此得出的结论是,向Debian系统添加密钥并不是一件容易的事。)这在一定程度上解决了您的第一个问题,因为档案库的安全性并不重要。尽管如此,关键系统(发生签名的地方)仍受到严格的监视和监督,很少有人可以访问它们。
确保软件包“实际上是维护者认为的软件包”涉及更多。这是包采取的路径:
如果维护者将二进制文件和软件包源一起上传,则这些文件最终将被提供(暂时)。由于现在上传二进制文件是可选的,因此跳过它们越来越普遍,最终将删除上传的二进制文件。(在Ubuntu中一直是这种情况。)其他二进制文件是否符合维护者的期望取决于所构建的网络。因此,建筑物也是关键的系统,在严密的监督下并且几乎没有人接触。由于所有工件均已签名,因此始终可以验证文件的完整性:首先根据维护者的密钥,然后针对buildds的密钥,最后针对存档的密钥。
正如plugwash指出的那样,原始签名在镜像上不可用,并且任何DD都可以上载丢失的二进制文件。原始签名可以从debian-devel-changes档案中获取。
总而言之,尽管当前系统并不完美,但它确实为您可以从镜像下载的所有文件提供了可追溯性。为了改善这种状况,我们付出了许多努力:可复制的版本(将允许独立验证二进制文件与已发布源的对应关系),删除维护者提供的二进制文件...
apt-get
使用这些本地预嵌入的密钥验证软件包,因为它信任它们?
debian-archive-keyring
包装中提供。使用这些密钥apt-get
验证Release
文件,并使用Release
和Packages
文件中包含的哈希值对文件包进行验证。