我正在尝试创建一个安全策略来存储和维护我公司用户之间的密钥。
以下答案基于我根据您的帖子假设的那些要求(我将在下面称呼您的用户员工):
目前,想法是:
- 为每个用户生成一个仅具有认证功能的主密钥。将此密钥备份到物理保管库中。
认证限制似乎是合理的,所以没有人(应该)意外地对主密钥进行加密,并且您的员工无法阅读该消息。
- 为此主密钥生成吊销证书,并将其存储在物理保险库中。
或者,您也可以添加一些公司作为指定的撤销者。这可能会使处理一堆吊销证书更容易,并映射到实际发生的情况(公司吊销员工的密钥):
gpg --desig-revoke [key-id]
- 生成加密子密钥并将其存储在物理保险库中,然后将其移动到 Yubikey。
如果您想保持阅读员工信息的能力,这似乎是必需的。在某些司法管辖区可能是一个法律问题,或者要求您防止任何私人使用公司邮件地址。
- 直接在 Yubikey 上生成 auth 子密钥(用于 ssh)。
如果不再使用,身份验证和签名子密钥都可以简单地交换。不持有副本在安全方面似乎是合理的,您所要做的就是分发新密钥(并可能在服务器上切换密钥)。
特别是如果您有共享基础设施,您甚至可以考虑在经过身份验证的服务器上使用 monkeysphere。Monkeysphere在员工的主密钥上依赖于 OpenPGP 信任网络(即,受信任的公司密钥的签名),并将其子密钥添加到sshd,因此您甚至可以托管身份验证子密钥而无需更改各个服务器,但这并不常见很少使用,但可以很好地与用于 SSH 的 GnuPG 身份验证子密钥集成。
现在我有一堆问题:
- 如果有人离开公司会怎样?我想我应该使用主密钥撤销证书来取消主密钥及其所有子密钥。
只需要撤销主键,如果主键是,子键会自动失效。请记住使身份验证子密钥无效sshd!
与其使用预先生成的吊销证书(不包括当前日期,也没有具体的吊销原因),不如使用主键进行吊销(GnuPG 随时生成新的吊销证书)。
- 如果用户丢失了他的 Yubikey,会发生什么?我应该撤销整个主密钥,还是只撤销子密钥?
主键安全地存储在您的保险库中,那么为什么要撤销它呢?撤销子密钥,生成一个新集合,并分发一个新的 Yubikey。优点是,所有传入的证书都保持有效,您不必分发新的主键。事实上,所有需要做的只是为所有用户更新员工的密钥。
- 如果密钥丢失,我需要向用户提供一个新密钥。我可以只导入旧的主+加密密钥吗?然后什么,生成一个新的 auth ssh 密钥?在这种情况下,为什么还要区分主密钥/加密密钥?
您尚未描述将主键存储在员工的 YubiKey 上。它们不是日常使用所必需的,最好还是不要放在那里。
- 如何处理某些用户应该共享相同密钥的事实?例如,用于签署包的密钥,或用于加密某些共享文件的密钥。
OpenPGP 允许为加密消息添加多个收件人。这是替代方案吗?可以通过签署员工密钥的公司密钥来验证签名。
您不能轻易撤回共享密钥,您所能做的就是撤销它。否则,您有多种选择:
- 有一些签名/解密服务。这可能是一个构建服务器,也为一些经过身份验证的用户签名包。还有一些 OpenPGP 邮件传输代理可以随时随地加密/解密,您可以使用它来将组加密密钥映射到多个用户(MTA 使用私有组加密密钥解密,并为所有员工加密密钥重新加密)。
- 将子键作为文件分发给所有员工。如果您需要撤销子密钥(例如,其中一名员工离开),这将变得很烦人,因为您必须托管分布式密钥。
- 在 OpenPGP 智能卡(或 YubiKeys,实现 OpenPGP 智能卡协议)上分发子密钥,这样您就可以真正撤回智能卡(因为无法从智能卡中导出密钥)。缺点是,如果一名员工丢失了钥匙或者离开公司后没有交还钥匙,你仍然需要撤销。管理物理设备的安全性更容易,因为它们不容易被复制。
- 在一张保护良好的智能卡上拥有一个共享密钥(不会轻易丢失或被盗),多人可以访问。