6 个版本 (破坏性更新)

0.5.0 2024年7月23日
0.4.0 2022年11月21日
0.3.0 2022年7月23日
0.2.0 2022年1月2日
0.1.1 2021年8月24日

#776命令行工具

Download history 84/week @ 2024-07-19 20/week @ 2024-07-26 1/week @ 2024-08-02

每月下载 105

GPL-3.0 许可

3MB
802

pacman-bintrans

这是 Arch Linux 软件包管理器 pacman 的二进制透明度的实验性实现。该项目最初受到了 Mozilla 的先前工作的工作的强烈启发,然后使用 sigstore 透明日志重新实现

加密签名可以证明消息来自拥有私钥控制权的人,但无法证明私钥没有签署其他消息。在更新安全性中,这意味着签名的更新是更新真实性的强烈指标,但你不能确定这个更新是每个人得到的同一个更新。控制更新密钥的人可以构建恶意更新,签署它并将其专门提供给你。这种攻击比将恶意更新推送给所有用户更难被发现。

由于透明日志与“单用途密钥”配合最佳,这意味着密钥只用于签署 Arch Linux 软件包,因此我们正在创建一个特殊的“透明度密钥”。操作员需要为每个 Arch Linux 软件包签名并将签名上传到透明日志。他们还需要维护一个审计日志,以跟踪每个签名的创建原因。

然后,外部审计员可以获取 sigstore 中的所有签名并检查它们是否属于官方发布的软件包。

用法

pacman-bintrans 通过在 /etc/pacman.conf 中注册为自定义传输来集成到 pacman 中

XferCommand = /usr/bin/pacman-bintrans -O %o %u --transparency-url https://pacman-bintrans.vulns.xyz/sigs/ --pubkey 'RWSC6c8TVaOYGoe60E+sPiPgumSQENiSNJrBOH6IUYdfmY9xIDJCFXa2'

要验证一切是否正常工作,您可以清除您的下载缓存,使用 pacman -Scc,然后尝试使用 pacman -Suy filesystem 重新下载和重新安装软件包。

pacman 仍然验证 pgp 签名,但除了运行 rekor-cli verify 以确保它已在 sigstore 透明日志中适当记录外,还运行每个软件包。

验证可重复构建

Arch Linux 有多个独立的重建器。重建器跟踪 Arch Linux 中的所有预编译软件包,下载源代码并尝试重新编译,并期望生成的软件包与官方预编译软件包完全相同。Arch Linux 通过发布描述构建环境的BUILDINFO 文件来支持这一功能。重建器可以使用此文件设置一个几乎完全相同的构建环境,以匹配原始构建环境的所有编译器和库版本。在撰写本文时,这适用于 Arch Linux 中约 86% 的所有软件包。软件不应尝试跟踪任何无法合理归一化的构建环境,例如通过探测当前日期/时间或通过在构建时而不是运行时测试 CPU 功能(如 SSE/AVX)。

要查询重建器以获取您即将安装的每个更新,您可以使用 --rebuilder <url> 选项,此选项可以设置多次

--rebuilder https://reproducible.archlinux.org/
--rebuilder https://r-b.engineering.nyu.edu/
--rebuilder https://wolfpit.net/rebuild/
--rebuilder https://rebuilder.pitastrudl.me

完整命令可能如下所示

XferCommand = /usr/bin/pacman-bintrans -O %o %u --transparency-url https://pacman-bintrans.vulns.xyz/sigs/ --pubkey 'RWSC6c8TVaOYGoe60E+sPiPgumSQENiSNJrBOH6IUYdfmY9xIDJCFXa2' --rebuilder https://reproducible.archlinux.org/ --rebuilder https://r-b.engineering.nyu.edu/ --rebuilder https://wolfpit.net/rebuild/

要为每个更新配置所需成功的构建阈值,可以使用此选项

--required-rebuild-confirms 2

🚧 但是等等! 🚧 拒绝所有至少未被其他两方复制的软件包是一个令人激动的目标,具有巨大的安全效益,但遗憾的是,仍然有太多不可复制的软件包,没有人能够使用 仅可复制的软件 构建 一个有用的系统。如果您将 --required-rebuild-confirms 与大于 0 的任何值一起使用,您的更新系统最终将停止工作,因为 pacman 无法下载任何不可复制的更新(这可能甚至包括重要的安全更新)。

生成透明性证明

本节面向计划启用二进制透明性的软件包维护人员。

cd pacman-bintrans-sign
cargo run --release -- -v \
    --repo-url 'https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch' --repo-name core --architecture x86_64 \
    --signature-dir ../www/ --pubkey-path ~/keys/minisign.pub --seckey-path ~/keys/seckey

搜索透明性日志

有一个命令可以列出到目前为止记录的所有签名

cd pacman-bintrans-monitor
cargo run

通过代理获取

可以通过 --proxy <value> 标志通过代理(例如 Tor)进行所有请求,出于隐私原因。这包括软件包下载、连接到 --transparency-url、连接到透明性日志以及连接到任何重建器的连接。

XferCommand = /usr/bin/pacman-bintrans --proxy 'socks5h://127.0.0.1:9050' --bypass-proxy-for-pkgs -O %o %u --transparency-url https://pacman-bintrans.vulns.xyz/sigs/ --pubkey 'RWSC6c8TVaOYGoe60E+sPiPgumSQENiSNJrBOH6IUYdfmY9xIDJCFXa2'

要加快升级速度,您可以使用 --bypass-proxy-for-pkgs,这样软件包就可以直接下载,但额外的安全检查将通过代理运行。

致谢

当前开发是通过 GitHub 赞助者 民众资助的。

2021 年的初始开发由 Google 和 The Linux Foundation 资助。

许可证

GPLv3+

依赖项

~21–40MB
~613K SLoC