前段时间,我阅读了我们的熊王关于CA 及其私钥(根)密钥的规范答案。
最近,我偶然发现了有关如何管理 iOS 和 android 的代码签名密钥的问题。
基本上作为后续行动,我只需要问自己:
大公司(如苹果、微软、谷歌、英特尔……)如何保护他们有价值的代码签名密钥?
特别是这个问题可以分解为:这些公司如何确保只有有效的构建被签名(即访问管理)以及他们在物理上做了什么来保护私钥?特别是根 CA 使用的安全措施与公司使用的安全措施的比较可能很有趣。
这个问题也是由我较早的“大公司如何保护他们的源代码? ”引发的,在那里我得到了有趣的、意想不到的答案,例如“他们只使用私人 GitHub 存储库”。特别是有人可能会怀疑构建机器只有一个软件密钥来签署它产生的所有构建,我希望澄清这一点(在学习实际保护的过程中)。
至于“为什么”保护密钥很重要:
- 如果 Apple 的密钥丢失(悄悄地?)任何人都可以签署 iOS 或 Mac OS X 版本或应用程序,这将破坏 Apple 的大部分安全措施。
- 如果微软的密钥被泄露,与苹果相同的应用程序惨败将继续存在,此外,攻击者可能会将恶意 Windows 更新推送到目标计算机。
- 如果英特尔的密钥被泄露,就有可能签署英特尔处理器代码更新并签署任意 SGX 软件,从而在目标系统中深度实施恶意软件,如果不改变硬件就无法摆脱这种恶意软件。
- 如果 Google 的密钥被泄露,人们可以任意伪造 Google 应用程序(可以说是最弱的攻击场景)
像往常一样,我不希望回答说“窃取/滥用此类密钥是非法的”,因为法律可能不是阻止那些只能宣布其违法行为为“绝密”的机构或阻止不这样做的犯罪分子的有效方法反正也不在乎法律。
此外,我想快速澄清一下,为什么我排除“撤销”作为解决方案:a)这并不总是可能的,尤其是对于硬件制造商,如果公钥实际上是硬编码(出于安全原因)到硬件中。b) 如果他们不得不撤销密钥,对公司形象的损害将是巨大的。因此,虽然撤销在某些情况下可能有效(例如,对于小型应用程序开发人员),但对于大公司而言,这不是一个好的选择。