Trustix - Nix二进制替换的新模型
Trustix是一个工具,通过比较一组独立提供者的给定构建输入的构建输出,来建立对软件二进制文件的信任。
概述
我们经常使用预构建的软件二进制文件,并相信它们对应于我们想要的程序。 但没有什么能保证这些二进制文件确实是从程序源代码和合理的构建指令构建而来的。 常见且代价高昂的供应链攻击利用这一点来分发恶意软件,这也是大多数软件通过集中的、高度安全的提供者交付的原因之一。 Trustix是通过NGI0 PET资助开发的一个工具,以不同的、去中心化的方式建立对二进制文件的信任。 这提高了安全性,为小型提供者能够交付安全代码的互联网铺平了道路,最终为用户提供更安全、更丰富的选择。
Trustix是为Nix生态系统开发的。
这如何转化到Nix中?
在Nix生态系统中,预构建的二进制文件通过所谓的_二进制替换器_分发。 与其他集中式缓存系统类似,它们在向用户交付软件包时是信任链中的单一故障点。 这有几个问题:
首先,如果有人设法入侵NixOS Hydra构建机器及其密钥,他们可能会向用户上传带有后门的构建。 在Nix生态系统中,被盗用的密钥甚至更危险,因为https://cache.nixos.org由于设置方式无法使用滚动密钥。 这意味着被盗用的密钥实际上会导致缓存中的_所有_软件包都被入侵。 它们必须重新构建或垃圾回收,这代价非常高。
其次,构建二进制文件的NixOS Hydra _硬件_也可能受到入侵,更注重安全的用户可能不信任它。
有关更多背景信息,请参阅原始项目公告。
Trustix设计
Trustix
旨在通过分布式信任和信任敏捷性来解决这个问题。
本质上,它比较了一组独立构建者的构建输出,这些构建者记录并交换构建输入/输出对的哈希值。
这是通过以下方法实现的:
- 每个构建者都与一个公钥-私钥对相关联
- 在构建后钩子中,构建的输出哈希(NAR哈希)被上传到账本(一个签名的仅追加构建结果日志)。
这允许用户根据参与构建者的M-of-N投票来信任二进制替换。
这里有一个例子:
假设我们配置了4个构建者:Alice
、Bob
、Chuck
和Dan
。
我们将Trustix
配置为需要3/4多数才能信任构建。
Alice
、Bob
、Dan
和Chuck
都声称已构建了hello
派生。
所有构建者都参与Trustix网络,并精确地传达他们构建了什么,包括描述hello
构建输入的哈希,以及他们得到的输出的另一个哈希。
对于相同的输入,前3个构建者得到了相同的输出哈希,但Chuck
得到了不同的结果。
Trustix用户现在可以使用这些信息来:
- 跟踪大量构建者的构建可重现性。
- 只信任已经得到选定构建者多数确认的构建。
- 自动识别并排除行为不当的构建者,如上例中的
Chuck
。
相关项目
文档
文档作为CI的一部分构建,并发布在Github Pages上。
更多资源
一系列外部资源,可深入了解Trustix及其理念。
- Trustix公告文章
- Trustix背后数据结构的详细信息
- 关于Trustix如何实现去中心化可信共识的文章
- NGI0 PET资助页面,概述了Trustix的主要理念
开发
有关开发说明,请参阅HACKING.md
关于项目
Trustix的开发由Tweag I/O赞助,并得到NLNet基金会和欧盟委员会下一代互联网计划通过NGI Zero PET(隐私和信任增强技术)基金的资助。