最佳实践:使用单个私钥作为一个人,还是使用多个来跨域识别自我?

信息安全 隐私 SSH 密钥管理 匿名 密钥生成
2021-08-16 17:28:32

这里的问题类似,我想将同样的问题应用于一个

例如,我在手中植入了一个芯片,其中包含一个加密的私钥,用作我的个人唯一标识符。因为它与我的身体有联系,所以它持有的钥匙只有一个来源。

我目前使用此密钥对我自己的服务器进行身份验证。我想做的是注册这个密钥的公共组件以供工作使用。

假设密钥本身足够安全,这会给我的密钥和我使用它的服务器带来哪些漏洞?
我应该考虑创建额外的私钥来识别我吗?

2个回答

这种方法的问题是每个目的地都使用相同的身份,因此网站可以交换笔记以查看您去过的地方并绘制您可能不想公开的相关性。

有几种方法可以解决此问题,例如FIDO U2F 安全密钥中使用的方法。在这种情况下,设备包含对称密钥(不是非对称密钥对)和必要的加密硬件,因此密钥永远不需要离开设备。

在现场注册时,设备会创建一个新的公钥/私钥对,并将公钥连同该密钥的“密钥 ID”一起发送到服务器。在身份验证时,站点向浏览器发送该用户的“密钥 ID”,并期望使用相应的公钥对响应进行签名。

但不是存储与每个密钥 ID 对应的私钥,ID 本身就是使用设备的秘密对称密钥加密的私钥。

该协议还有其他功能可以使网络钓鱼成为不可能,但这些超出了此答案的范围。

请注意,这只是安全的,因为秘密永远不会离开硬件。任何硬件安全令牌都适用相同的原则;这是真正的安全密钥和拇指驱动器之类的东西之间的根本区别;可以复制存储设备。这与人工植入的密钥不一致,因为在由 NFC 供电的情况下进行实际加密计算所需的硬件需要太多区域才能舒适地贴在皮肤下。

使用像这样的协议会给您带来额外的优势,即它已经被其他人的站点支持,因此您只需要担心您的本地实现。但对于 SSH 密钥等来说,它并不是那么好。如果您要将它用作 SSH 密钥,则必须让它以某种方式与您的密钥代理进行通信(这可能意味着编写一个新的密钥代理)。

跨不同域使用相同的私钥基本上安全的如果您向系统进行身份验证,则不会泄露您的私钥,并且该系统无法冒充您。因此,您可以在工作和个人系统中使用您的密钥,而工作系统则无法访问您的个人系统。

但是,通常有理由使用不同的密钥。例如,您的工作可能有一个策略,即他们需要一份用于访问其系统的所有私钥的副本。在这种情况下,您可能需要使用单独的密钥。

tylerl 还提到了隐私问题。而且它比大多数人想象的要严重一些,因为在大多数协议中,客户端证书是在未加密的情况下传输的。