大公司如何保护他们的私人(代码签名)密钥?

信息安全 保护 代码签名
2021-08-18 09:53:55

前段时间,我阅读了我们的王关于CA 及其私钥(根)密钥的规范答案。

最近,我偶然发现了有关如何管理 iOS 和 android 的代码签名密钥的问题。

基本上作为后续行动,我只需要问自己:

大公司(如苹果、微软、谷歌、英特尔……)如何保护他们有价值的代码签名密钥?

特别是这个问题可以分解为:这些公司如何确保只有有效的构建被签名(即访问管理)以及他们在物理上做了什么来保护私钥?特别是根 CA 使用的安全措施与公司使用的安全措施的比较可能很有趣。

这个问题也是由我较早的“大公司如何保护他们的源代码? ”引发的,在那里我得到了有趣的、意想不到的答案,例如“他们只使用私人 GitHub 存储库”。特别是有人可能会怀疑构建机器只有一个软件密钥来签署它产生的所有构建,我希望澄清这一点(在学习实际保护的过程中)。

至于“为什么”保护密钥很重要:

  • 如果 Apple 的密钥丢失(悄悄地?)任何人都可以签署 iOS 或 Mac OS X 版本或应用程序,这将破坏 Apple 的大部分安全措施。
  • 如果微软的密钥被泄露,与苹果相同的应用程序惨败将继续存在,此外,攻击者可能会将恶意 Windows 更新推送到目标计算机。
  • 如果英特尔的密钥被泄露,就有可能签署英特尔处理器代码更新并签署任意 SGX 软件,从而在目标系统中深度实施恶意软件,如果不改变硬件就无法摆脱这种恶意软件。
  • 如果 Google 的密钥被泄露,人们可以任意伪造 Google 应用程序(可以说是最弱的攻击场景)

像往常一样,我不希望回答说“窃取/滥用此类密钥是非法的”,因为法律可能不是阻止那些只能宣布其违法行为为“绝密”的机构或阻止不这样做的犯罪分子的有效方法反正也不在乎法律。

此外,我想快速澄清一下,为什么我排除“撤销”作为解决方案:a)这并不总是可能的,尤其是对于硬件制造商,如果公钥实际上是硬编码(出于安全原因)到硬件中。b) 如果他们不得不撤销密钥,对公司形象的损害将是巨大的。因此,虽然撤销在某些情况下可能有效(例如,对于小型应用程序开发人员),但对于大公司而言,这不是一个好的选择。

2个回答

很多过程都可以称为“代码签名”,从发布带有 pgp 签名哈希的 tar 文件等等。

对于您提到的那种大公司,最终会涉及 HSM(显然不止一个,以防数据中心被僵尸或其他东西超越)。困难的部分不是实际密钥的存储位置,而是整个发布工程过程,以保证交付的签名二进制文件确实来自存储库中的源代码。

它有很大的不同。我见过的一些方法是。开发工作站上的软键,不太安全。智能卡锁在保险箱里,安全但笨重。中央代码签名服务器,带有用于私钥保护的 hsm,非常安全且可审计。

CA/Browser 论坛创建了所有公共 CA 必须遵守的规范,已经发布了 CA 颁发代码签名证书的指南。在这种情况下,恕我直言,这是一个宝贵的资源。 https://cabforum.org/ev-code-signing-certificate-guidelines/ (我与此规范无关,但它对于公共代码签名证书很重要)

订户(代码签名)密钥的私钥保护没有详细说明,但在第 10.3.2 节中进行了描述。