构建签名服务器
Android APK 签名模型期望签名密钥在应用的整个生命周期中保持不变。这体现在 Android 签名密钥的推荐使用期限上:20 年以上 。基于此,很难将应用迁移到新密钥。因为签名密钥是防止 APK 冒充其他人的重要部分,所以 Android 签名密钥必须在应用的整个生命周期中保证安全。
F-Droid 存储库的签名密钥遵循一个非常相似的模型:签名密钥是安全识别 F-Droid 存储库的重要方式。因此,同样的考虑适用于F-Droid 存储库签名密钥和APK签名密钥。这也提供了一些真正有用的好处。由于存储库索引文件和 APK 的完整性由存储库签名保证,文件可以通过任何最方便的方法交付,它们的完整性将被 F-Droid 客户端应用,f-droid.org 部署过程和 Repomaker 自动验证。
这意味着安全负担从在线的公开的网络服务器转移到了私密的签名机器上。只要让这台机器远离公众的视线,就能在很大程度上提高安全性。可以采取一些额外的措施来进一步提高签名过程的安全性。这里有一些方法,从最简单和最不安全的开始,然后是更安全的设置,但需要更多的工作来设置和运行。签名不是一个资源密集型的过程,所以任何机器都可以工作,甚至是一台 10 年前的基本的笔记本电脑。我们建议使用一个最小的 Debian 安装,并从头构建机器。
带有 HSM 的自动签名服务器
对于一个完全自动化的签名设置,运行签名的机器需要在线并持续运行。理想情况下,这台机器不能有远程访问,至少远程访问应该被非常仔细地控制和监控。笔记本电脑即使在禁用远程访问的情况下,也能很容易地工作,因为它提供了一个内置的键盘和显示器。如果需要远程访问,那么任何基本的个人电脑都可以工作。使用硬件安全模块 (HSM) 来存储密钥可以防止在服务器被攻破时密钥被盗。攻击者只能在该服务器上运行签名过程。
理想情况下,这台机器只能通过 Tor 访问。 这隐藏了服务器的物理位置,并隐藏了来自网络的流量。这使得攻击者更难找到实际的机器进行攻击。
对于HSM,我们推荐使用 Nitrokey 硬件,因为它们是自由软件/硬件,并提供广泛的选择。使用一台单独的机器将签名密钥放在 HSM 上。一个好的 HSM 会保存一个审计跟踪,记录签发了多少个签名,所以这些信息可以用来创建一个自动审计程序并在签名过多的时候发出警报。这可能意味着这台服务器被攻破并被用来签署未经授权的软件包。
另一种可能是使用类似 Fedora 的 Sigul 这样的涉及三台机器的设置。
专门用于签名的基本笔记本电脑
从一台可以完全清除并从头构建的笔记本电脑开始。最重要的是,只在上面安装必要的软件。例如,不要安装任何浏览器,因为这是最常见的攻击向量。不应安装或配置远程访问设置(如 SSH 或 VNC)。为了签名应用和存储库,有人会拿出这台笔记本电脑,将其连接到网络,并运行签名过程。然后,签名的结果可以通过网络连接发布。当签名完成后,可以关闭机器,断开连接,并保存在一个安全的地方。
这可以通过一些定制的脚本使之相当自动化。运行该程序的人只需要拿出机器,连接它,打开它,等待程序完成,然后再把它收起来。
使用 U 盘的完全离线签名笔记本电脑
这个过程是基于与前一个例子相同的基本的经过裁剪的笔记本电脑。但是这一次,在安装过程中应该完全禁用网络。例如,在许多笔记本电脑中,很容易从物理上拆除 WiFi 卡。因此,使用不包括以太网插口的笔记本电脑是有意义的,这些插口通常无法移除。否则,可以将所有与网络有关的内核模块列入屏蔽名单。由于这台机器是完全离线的,额外使用 HSM 的额外工作并不那么重要但也无妨。
下载完整的 Debian CD 或 DVD 镜像来运行安装。请务必验证 GPG 签名和 SHA-256 哈希值。为了更新离线机器,需要进行 apt 离线 设置。
为了格外小心,所有使用的软件都应经过验证。Chromebook 是物美价廉的笔记本电脑,可以原生运行 Linux。它们也可以使用 Coreboot 作为 BIOS。
- 用现金购买现成的电脑,避免运输,尤其是跨境运输
- 购买一个支持 Debian 的 Chromebook,带有可移动的 Wi-Fi 硬件,不需要二进制 blob
- 安装一个可重复构建的 Coreboot 二进制文件
- 从一个可重复构建的 Debian 镜像中安装,完全清除Chrome OS
物理环境
最后要考虑的是签名发生的物理地点,以及重要设备的存放地点。签署环境必须在物理上是安全的。否则,没有办法防止笔记本电脑或 HSM 丢失或被用于签名不适当的内容。对于离线机器,把它们放在一个上锁的房间里是一个好的开始。对于在线机器,强制所有的网络流量和远程访问通过 Tor 进行可以向网络观察者隐藏机器的物理位置。
对于高风险的签名密钥,使用多层防护很重要:
- 限制对 HSM 或智能卡的物理访问
- 安全摄像机
- 现场安保人员
- 访客记录
- 一款可安全使用工具的服务器,适用于在线代码签名服务器
签署服务器应与基础设施的其他部分在物理上分开。日志,机器和网络应定期进行审计。
困难的决定
理想情况下,所有这些做法都会落实到位,但这些安全措施中的每一项都要付出困难,费用和复杂性的代价。它们也会推迟定期更新的进程。因此,实施太严格的安全政策有风险,就像实施不够的风险一样。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论