【问题标题】:Reproducible build and binary signing可重现的构建和二进制签名
【发布时间】:2022-01-05 10:19:44
【问题描述】:

我正在开发一个开源项目,并且一直致力于使构建可重现,以便我的用户可以将我分发的二进制文件的校验和与他们自己的构建进行比较(如果他们要使用/从源代码)。

不幸的是,新版本的 Windows 和 MacOS 使用代码签名来检查二进制文件并在未签名的情况下阻止其执行(我知道有一些方法可以覆盖它并执行二进制文件,但这是不友好)。

我想对我分发的二进制文件进行签名,以便我的用户可以毫无问题地运行它们。但我不确定是否可以在保持可重现构建的同时做到这一点。

要使构建具有可重现性,最终用户必须拥有构建项目所需的所有工具/源代码,并且一旦编译,最终结果应该是与我的结果相同的二进制文件正在分发。但这意味着我必须分发用于签署二进制文件的私钥/证书,这不是一个好主意,原因有很多。

有没有办法同时拥有可重现的构建和签名的二进制文件?

【问题讨论】:

    标签: build code-signing


    【解决方案1】:

    这是为开源创建可重复签名构建的一般方法。

    按如下方式创建您的“签名二进制文件”脚本:

    1. 编译项目
    2. 对项目的签名原像进行校验和
    3. 将校验和与文件SIGNING_CHECKSUM进行比较

    如果有匹配:

    1. 使用SIGNING_SIGNATURE中的签名来构建包
    2. 验证SIGNING_SIGNATURE 是否由SIGNING_PUBLIC_KEY 签名

    如果没有匹配:

    1. 将校验和保存到文件SIGNING_CHECKSUM
    2. 使用本地签名密钥对二进制文件进行签名
    3. 将签名保存到文件SIGNING_SIGNATURE
    4. 验证SIGNING_SIGNATURE 是否由SIGNING_PUBLIC_KEY 签名

    最终结果是任何人都可以重现地构建未经篡改的源代码。只要修改不修改签名原像,任何人都可以编辑源代码并可重复地构建二进制文件。只有有权访问签名密钥的开发人员才能签署新版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多