与普通 USB 驱动器相比,将 GPG/SSH 私钥存储在智能卡上有何不同?

信息安全 SSH pgp 智能卡
2021-08-29 23:40:51

我对私钥/公钥密码学有基本的了解,并且已经将它用于 SSH 登录和 GPG 加密/签名有一段时间了。但是,我始终将私钥/密钥环保存在我的主目录(.gnupg 和 .ssh)中的默认位置。显然,我可以将密钥传输到 USB 驱动器,理论上这意味着我的计算机上的键盘记录器或单独的 USB 驱动器都不足以获取我的私钥。

能够存储私钥的智能卡和YubiKey Neo之类的设备(似乎是单个加密狗中的智能卡 + USB 读卡器)比将私钥存储在普通的 USB 拇指驱动器上提供了哪些好处?

智能卡是否曾经向 SSH 或 GPG 等应用程序“泄露”私钥?如果是这样,似乎任何拥有 PIN 和设备本身的人仍然可以获得私钥,并且与常规 USB 驱动器相比没有任何优势。如果不是,那么在不知道私钥的情况下,应用程序究竟是如何工作的?

3个回答

智能卡是否曾经向 SSH 或 GPG 等应用程序“泄露”私钥?如果是这样,似乎任何拥有 PIN 和设备本身的人仍然可以获得私钥,并且与常规 USB 驱动器相比没有任何优势。如果不是,那么在不知道私钥的情况下,应用程序究竟是如何工作的?

理想情况下,不。

这种令牌的主要优点是它保持其密钥秘密,并在硬件设备本身上执行加密活动(如解密、签名等),从不泄露私钥。

因此,例如,您可以从设备请求公钥,并使用该公钥加密文件(无论设备是否存在)。但是要解密文件,您必须插入令牌并要求它为您解密文件。

实际的实现细节因设备而异,但这是您想要发生的事情的总体思路。

此外,这些加密令牌通常采用一些物理安全措施来帮助防止攻击者拆卸设备并直接检索密钥。不可能 100% 确定地进行保护,但使用单芯片设计(而不是包含谨慎的存储芯片)和大量使用环氧树脂等措施很常见。

OpenPGP 智能卡不会泄露您的密钥。基本的签名和解密任务由卡的内置加密处理器执行,并且只有在输入您的 PIN 码后才可用。

想象一下您的 OpenPGP 客户端(例如,GnuPG)发送一个请求“解密这个密码块”,然后由卡执行(实际加密是使用更快的块密码完成的,并且在计算机的 CPU 上),或者“签名此密钥的此用户 ID”,这再次由卡执行。

如果密钥是在卡上生成的,它将永远不会离开卡。或者,可以在您的计算机上生成密钥并将其上传到卡——它们不会再次离开卡,但可能会从创建它们的计算机中提取。


拇指驱动器存储可以访问的整个密钥。如果它连接到您的计算机,则可以从中下载私钥。

老实说,这完全取决于卡本身。这项工作的外部安全设备通常采用以下三种形式之一:存储 PC 计算的机密;自己进行所有秘密存储和计算;介于两者之间。提供真正安全性的卡使用板载密钥进行签名,最好也是在设备上生成。这个想法是密钥在任何情况下都不会离开设备,因为客户端不能被信任(即恶意软件)。

使用这些可以通过两种方式帮助您:

  1. PC 上的恶意软件被简化为消息伪造,而智能卡是内部人员。根据配置,它还可能需要自定义恶意软件,从而进一步降低您的风险。

  2. 将智能卡丢给小偷并不应该像丢失笔记本电脑或充满秘密的 USB 驱动器那样让您担心。

  3. 您可以将智能卡放入您可能随身携带的钱包中。

  4. 如今,相当多的商用笔记本电脑都配备了智能卡读卡器。

您应该寻找的一个特殊功能是内置在阅读器中的密码键盘。原因是这可以帮助您建立一个可信的路径,您的 PIN 可以直接进入智能卡。如果没有这个,您可能已经通过键盘将其输入到恶意软件感染的计算机中。受信任的路径可以防止通过某些“经过认证”的加密 USB 记忆棒的密码/pin 进行破坏。具有此功能的示例在下面的链接中。(以及 GPG 智能卡说明的旧链接。)

http://www.gnupg.org/howtos/card-howto/en/ch02s02.html

OpenSSH 与智能卡在这里。

http://www.gooze.eu/howto/using-openssh-with-smartcards