#source #arch-linux #input #signed #links #authenticate #artifact

app backseat-signed

验证从签名的衍生品到其源输入的加密链接

1 个不稳定版本

0.1.0 2024 年 4 月 2 日

#2329命令行工具

GPL-3.0-or-later

35KB
674

backseat-signed

验证从签名的衍生品到其源输入的加密链接。

这个概念有点愚蠢,但有一些有趣的特性 - 软件发布通常是这样的

example-0.1.0.tar.gz <- example-0.1.0.tar.gz.sig

✨精彩✨。然而,这种简单性的奢侈并不总是可用,上游可能没有签名他们的发布,或者他们签名的某些中间构建工件而不是实际的源代码 *暗示暗示*

那么,如果这个不可用怎么办?让我给你这个替代链

example-0.1.0.tar.gz <- PKGBUILD <- .BUILDINFO <- .pkg.tar.zst <- .pkg.tar.zst.sig

由于一系列幸运的巧合,当一个 Arch Linux 软件包维护者对一个从 example-0.1.0.tar.gz 构建的软件包进行签名时,他们会签名包含一个哈希值的东西,该哈希值包含一个哈希值(.pkg.tar.zst/.BUILDINFO)的东西,这个哈希值包含原始 example-0.1.0.tar.gz 的哈希值。

或者这个呢?

example-0.1.0.tar.gz <- example_0.1.0.orig.tar.xz <- Sources.xz <- Release <- Release.gpg

这需要仔细观察,因为在 Debian 中,源 tar 包通常会被重新压缩,所以只比较内层的 .tar,外层的压缩层被忽略。

但这不是出错了么?

的确,你可以使用 backseat-signed 验证 xz-5.6.1.tar.gzsha256:2398f4a8e53345325f44bdd9f0cc7401bd9025d736c6d43b372f4dea77bf75b8)在 Debian 和 Arch Linux 中都存在。

但这正是 xz 事件如此重要的一件事。

两者都使用了不是VCS快照的东西,而是使用了一个带有通过autotools预处理的源代码的存档(以及一些手动更改),这可以说是中间构建工件。

由于这两个发行版都打算从源代码构建(具有不同级别的严格性),它们应该优先考虑使用例如git archive拍摄的VCS快照。

理想情况下,您可以

git -C source-code/ -c tar.tar.gz.command="gzip -cn" archive --prefix="example-0.1.0/" -o "example-0.1.0.tar.gz" "v0.1.0"
backseat-signed verify --todo ./debian.todo example-0.1.0.tar.gz
backseat-signed verify --todo ./archlinux.todo example-0.1.0.tar.gz

这希望使人们应该进行代码审查的源代码相当明显。 🦝

然后,可以添加可重复构建来验证从-> 二进制的路径(整个路径)。

如何使用管道命令

对于Arch Linux

# prepare what we want to compare with
git clone 'https://github.com/abishekvashok/cmatrix'
git -C cmatrix/ -c tar.tar.gz.command="gzip -cn" archive --prefix="cmatrix-2.0/" -o "cmatrix-2.0.tar.gz" "v2.0"

# for the lack of a better keyring file
# verify cmatrix-2.0-3-x86_64.pkg.tar.zst.sig -> cmatrix-2.0-3-x86_64.pkg.tar.zst
wget 'https://archive.archlinux.org/packages/c/cmatrix/cmatrix-2.0-3-x86_64.pkg.tar.zst'{,.sig}
backseat-signed plumbing archlinux-pkg-from-sig --keyring /usr/share/pacman/keyrings/archlinux.gpg --sig cmatrix-2.0-3-x86_64.pkg.tar.zst.sig cmatrix-2.0-3-x86_64.pkg.tar.zst
# verify cmatrix-2.0-3-x86_64.pkg.tar.zst -> PKGBUILD
wget 'https://gitlab.archlinux.org/archlinux/packaging/packages/cmatrix/-/raw/2.0-3/PKGBUILD'
backseat-signed plumbing archlinux-pkgbuild-from-pkg --pkg cmatrix-2.0-3-x86_64.pkg.tar.zst PKGBUILD
# verify PKGBUILD -> cmatrix-2.0.tar.gz
backseat-signed plumbing archlinux-file-from-pkgbuild --pkgbuild PKGBUILD cmatrix-2.0.tar.gz

对于Debian

# prepare what we want to compare with
git clone 'https://github.com/abishekvashok/cmatrix'
git -C cmatrix/ -c tar.tar.gz.command="gzip -cn" archive --prefix="cmatrix-2.0/" -o "cmatrix-2.0.tar.gz" "v2.0"

# verify Release.gpg -> Release -> Sources.xz
backseat-signed plumbing debian-sources-from-release --keyring debian-archive-bookworm-automatic.asc --sig Release.gpg --release Release Sources.xz
# verify Sources.xz -> cmatrix-2.0.tar.gz
# if debian recompressed your file, you need to provide this file too with `--orig cmatrix_2.0.orig.tar.xz`
backseat-signed plumbing debian-tarball-from-sources --sources Sources.xz cmatrix-2.0.tar.gz

[!重要] 此工具仍然是实验性的,并且一些您期望更灵活的东西被硬编码。如果出现问题,请打开github问题。 🖤

为什么使用过去式'-signed'?

此工具不创建签名,它只收集和验证它们。

致谢

此软件是由与2020年代欧洲左翼自主黑客场景相关的人类提供的,作为对xz后门事件的回应。它旨在使开源权威透明到足以将它们视为公共商品。

此项目通过无政府共产主义在没有公共资金的情况下运营。

许可

GPL-3.0--以后

依赖项

~23–35MB
~495K SLoC