我们现在签署代码

Sigstore 是一种免费且与生态系统无关的软件签名服务,它使开发者能够签署、验证和保护他们的软件项目及其依赖项。

Sigstore 在两周前宣布了其免费且与生态系统无关的软件签名服务正式可用,让开发者能够签名、验证和保护他们的软件项目及其依赖项。Trail of Bits 非常高兴能成为该项目的一部分,并且我们在首届 SigstoreCon 上介绍了我们的工作。

Sigstore for Python Packaging: Next Steps for Adoption - William Woodruff, Trail of Bits - YouTube

CNCF(云原生计算基金会)的照片

CNCF [Cloud Native Computing Foundation]

12.9 万订阅者

Sigstore for Python Packaging: Next Steps for Adoption - William Woodruff, Trail of Bits

CNCF [Cloud Native Computing Foundation]

搜索

稍后观看

分享

复制链接

信息

购物

点按取消静音

如果播放没有立即开始,请尝试重启设备。

更多视频

更多视频

你已退出

你观看的视频可能会被添加到电视的观看历史中,并影响电视的推荐。要避免这种情况,请在你的计算机上取消并登录到 YouTube。

取消确认

分享

包含播放列表

检索共享信息时发生错误。请稍后重试。

在以下网址观看

0:00

0:00 / 24:30 •直播

在 YouTube 上观看

虽然有机会谈论 Sigstore 非常棒,但我们不想止步于此。我们认为 Sigstore 是朝着可访问的软件签名迈出的关键且非常必要的一步,它已成为软件供应链管理和安全的关键组成部分。

以下是 Trail of Bits 为 Sigstore 生态系统的整体增长所做的贡献(并将继续贡献!)的一些方式。 准备好了!

Sigstore 到底是什么?

对于那些不熟悉的人:Sigstore 是一个 Linux 基金会 项目,由大型科技公司和备受尊敬的学术机构贡献,专注于一个简单的使命:为每个人实现代码签名和验证。

它如何做到这一点有点复杂。 Sigstore 由两个核心服务组成:

  • Fulcio,一个公共根证书颁发机构,它为授权身份颁发短期签名证书,并将这些证书提交到证书透明度日志;
  • Rekor,一种用于签名工件的透明度和时间戳服务,具有强大的完整性保证。

Fulcio 和 Rekor 共同允许程序员生成短期签名证书,公开提交到这些证书(使得攻击者难以偷偷获得有效证书),针对这些证书对工件进行签名,然后公开提交到生成的签名(再次,使得偷偷摸摸的攻击者更难)。

这两项服务使用标准格式和协议(x509v3CT),以便与先前存在的验证方案和机制互操作。因此,Sigstore 已经进入了先前存在的工作流程:你今天可以使用 gitsign 使用 Sigstore 对 git 提交进行签名,而无需对 git 本身进行任何修改!

Sigstore 有什么特别之处?

Sigstore 基本上是一个 PKI 生态系统,但专门用于短期签名证书。

但 Sigstore 的特别之处在于身份:Fulcio 是一个根 CA,但仅适用于开发者或机器身份。 更准确地说,Fulcio 不会让任何证书签名请求通过:请求必须附带一个 OpenID Connect (OIDC) Token,该Token证明了预期的身份。 然后将该身份烘焙到签名证书中,允许任何人针对该证书确认签名。

当 Fulcio 收到 OIDC Token(实际上只是一个 JSON Web Token)时,它会使用 OIDC 的 .well-known 查找协议针对其声称来自的服务对其进行验证。 目前支持少数服务(具有已知高质量的 IdP),其中包括:

  • GitHub: 可以证明个人电子邮件身份(对应于 GitHub 帐户),也可以证明工作流程操作的机器身份。

  • Google 和 Microsoft: 支持个人电子邮件身份,包括非服务帐户。 换句话说:只要你拥有 Google 或 Microsoft 帐户,你就可以证明已链接到它的电子邮件,即使该电子邮件不受 Google 或 Microsoft 控制。

  • Kubernetes: 基于云的 Kubernetes 实例(例如,由 AWS、Azure 和 Google Cloud 提供)可以证明其集群身份。

这种以身份优先的方法颠覆了代码签名:验证者不是手动建立对公钥背后身份的信任(这是基于 PGP 的代码签名的规范),而是采用他们信任的公共身份,然后简单地询问公共签名日志该身份是否已对其想要使用的工件进行签名。 最终结果:默认情况下是强大的密码学原语,不再有脆弱的密钥管理(无论在哪一端),不再有断裂的信任网络,以及一个公开访问的透明度日志,使所有签名方都保持诚实。

该模型另外支持强大的抗滥用技术,例如“无密钥”签名:用户可以不持有长期签名密钥,而是可以创建一个短期密钥,从 Fulcio 请求一个证书,并在所有签名操作完成后将其丢弃。 密钥永远不会离开内存,也永远不会被重用,从而大大降低了密钥被盗的威胁(和爆炸半径)。

如何使用 Sigstore?

从抽象的角度来看,Sigstore 的“身份优先”模型可能有点令人费解。 这是一个如何使用的示例:

首先,我们将安装 sigstore-python,这是 Sigstore 的官方(并且由 Trail of Bits 维护!)Python 实现:

$ python -m pip install sigstore

安装完成后,我们可以使用它来签署本地文件(你可以签署任何内容,包括任何语言的 Python 包或发行版!):

$ python -m sigstore sign README.md
Waiting for browser interaction...
Using ephemeral certificate:
-----BEGIN CERTIFICATE-----
MIICwTCCAkegAwIBAgIUZr4/MflYaUb/SSw0CgNj+qLZDhMwCgYIKoZIzj0EAwMw
NzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRl
cm1lZGlhdGUwHhcNMjIxMDI4MTYzMjQzWhcNMjIxMDI4MTY0MjQzWjAAMHYwEAYH
KoZIzj0CAQYFK4EEACIDYgAEVBG9SWAO0pkbhrsKtDUN4Il5OK115yp+Ai5GiDYW
V1obpF1Ih+/NrtTDN+tdkop0T6Z8eotVjpnyrFpc4TbA6okIZ2eo6oFwRD3tn/mG
4BFPgm4O4Nvgih+f75M845c1o4IBSTCCAUUwDgYDVR0PAQH/BAQDAgeAMBMGA1Ud
JQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBRE3hH5uBNf4l/EDxedz0aNNAZX+zAf
BgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzAjBgNVHREBAf8EGTAXgRV3
aWxsaWFtQHlvc3Nhcmlhbi5uZXQwLAYKKwYBBAGDvzABAQQeaHR0cHM6Ly9naXRo
dWIuY29tL2xvZ2luL29hdXRoMIGKBgorBgEEAdZ5AgQCBHwEegB4AHYACGCS8ChS
/2hF0dFrJ4ScRWcYrBY9wzjSbea8IgY2b3IAAAGEH3BI7gAABAMARzBFAiEAnrGB
RDQMHW26GT4H/nCvTBQ7RzBI3ix8rRewG6Bii10CIBnjNsSYBhNB77nNmAheoxxj
XQWJuQ4n2iQu9FB4AGeKMAoGCCqGSM49BAMDA2gAMGUCMQDaV/a8myBO5yKDBTvS
fM9ziqC1zOiDrXXg+k4lVg02idTHeukbUZTKsROzOsPSRfUCMCsp30CTXrJPBUfN
dCxmp44zCE7/yGkNCu+5waxPhOI7mXrfQ7FqzmZ0Z5cs9H/CiA==
-----END CERTIFICATE-----

Transparency log entry created at index: 6052228
Signature written to file README.md.sig
Certificate written to file README.md.crt

这就能用了™。 在幕后,Sigstore 正在:

1. 创建一个新的本地临时密钥对;

2. 检索 OIDC 身份Token,可以通过交互式 OAuth2 流程或环境凭证检测

3. 向 Fulcio 提交一个证书签名请求,结合 OIDC Token和临时密钥对的私钥的所有权证明;

4. 从 Fulcio 接收 SCT、证书和中间链,并验证所有三个;

5. 实际使用私钥对输入进行签名;

6. 将签名、输入的哈希和签名证书发布到 Rekor;

7. 在本地保存所有必要的验证材料,以便稍后分发和验证。

最终结果:对于输入 README.md,sigstore-python 生成一个 README.md.crt,其中包含(PEM 编码的)x509 签名证书,以及一个 README.md.sig,其中包含(base64 编码的)签名。

然后,我们可以使用任何普通的 x509 检查工具(如 openssl x509)来检查证书,并确认其扩展包含 Sigstore 特定的条目,用于我们签名的身份。 缩写为仅证书的扩展:

        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage:
                Code Signing
            X509v3 Subject Key Identifier:
                96:96:0F:0F:FB:19:76:15:15:D8:82:BB:8A:04:07:14:E8:85:EA:DA
            X509v3 Authority Key Identifier:
                DF:D3:E9:CF:56:24:11:96:F9:A8:D8:E9:28:55:A2:C6:2E:18:64:3F
            X509v3 Subject Alternative Name: critical
                email:william.woodruff@trailofbits.com
            1.3.6.1.4.1.57264.1.1:
                https://accounts.google.com
            CT Precertificate SCTs:
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : 08:60:92:F0:28:52:FF:68:45:D1:D1:6B:27:84:9C:45:
                                67:18:AC:16:3D:C3:38:D2:6D:E6:BC:22:06:36:6F:72
                    Timestamp : Oct 28 16:44:57.279 2022 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:44:02:20:1E:FB:5C:97:4D:BB:EC:A2:51:14:9A:A7:
                                FC:EB:59:9B:10:AA:37:5F:13:E0:D0:D3:ED:4D:3D:36:
                                18:E1:53:38:02:20:5C:67:61:F4:2E:15:3D:25:14:79:
                                7F:94:F7:5F:A2:9D:2F:15:71:B9:15:29:AF:7A:9F:3D:
                                09:77:3B:C1:5E:68

当然,这只是人工检查。 为了实际根据其签名工件验证文件,我们可以使用 sigstore verify:

## this automatically discovers README.md.crt and README.md.sig
$ python -m sigstore verify \
    --cert-email william.woodruff@trailofbits.com \
    --cert-oidc-issuer https://accounts.google.com \
    README.md
OK: README.md

同样,这就能用了™:

1. 我们验证签名证书 (README.md.crt) 是否由 Sigstore 证书链签名,将其链接回 Fulcio 根证书;

2. 我们检查证书的 SAN 和颁发者扩展是否与我们期望的身份(我的电子邮件地址,由 Google 的 IdP 证明)相对应

3. 我们验证签名 (README.md.sig) 是否由签名证书证明的公钥生成;

4. 我们在 Rekor 中检查与当前验证材料匹配的记录,然后检查生成的记录的 Merkle 包含证明和签名条目时间戳签名;

5. 最后,我们确认签名在证书有效时已集成到 Rekor 中。

最后两个 Rekor 步骤还可以通过 Chainguard 出色的 Rekor Web 界面 进行可视化:

总而言之,这些检查提供了强有力的证据,证明有权控制我的电子邮件身份(即我)的人在特定时间签署了工件,所有这些都无需我验证方直接管理密钥材料!

光明的现在和未来

现在 Sigstore 已正式可用,我们可以加速将它集成到当前缺乏强大代码签名模型的生态系统中的计划。 我们已经取得了一些进展,包括:

  • CPython 本身现在随 Sigstore 签名一起发布,使用我们自己的 sigstore-python 创建。 你今天可以使用上面完全相同的 sigstore verify 命令来验证它们!

  • 一个 GitHub Action,用于签名工件并自动将签名附加到发布版本,所有这些都使用 GitHub Actions 的内置 OIDC 提供程序!

也就是说,还有很多工作要做:

  • sigstore-python 需要大量工作才能达到 1.0 稳定版本,包括稳定可导入的 Python API 的工作。

  • 需要关键的 UX 工作,以确保用户了解他们在验证身份的签名时到底在做什么。

  • 作为 Sigstore 项目对可用性和弹性的总体承诺的一部分,我们正在开发一个一致性测试套件,Sigstore 的每个独立 客户端 实现 都需要通过。 我们将在未来几个月与每个实现合作,帮助他们将其集成到他们的 CI 系统中。

  • Sigstore 已经在许多生态系统中成功使用,但我们在 Trail of Bits 尤其对其在 PyPI 上的使用以及最终在 pip 等软件包安装程序中的最终使用感兴趣。 我们正在积极与 Python 软件包社区合作,将 Sigstore 支持引入 PyPI!

总的来说,我们认为 Sigstore 有着非常光明的未来,我们很高兴能成为其中的一员。 如果你像我们一样对 Sigstore 感到兴奋,那么我们很乐意收到你的来信

  • 原文链接: blog.trailofbits.com/202...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Trail of Bits
Trail of Bits
https://www.trailofbits.com/