此刻,我正在我的新 GPG 智能卡上生成一个私钥。
在 linux 上,随机数将由键盘上的击键、网络数据包、鼠标移动等提供。
我的智能卡上的芯片如何生成不可预测的随机数?
此刻,我正在我的新 GPG 智能卡上生成一个私钥。
在 linux 上,随机数将由键盘上的击键、网络数据包、鼠标移动等提供。
我的智能卡上的芯片如何生成不可预测的随机数?
几乎所有(如果不是全部)智能卡上都有一个真正的随机数生成器 (TRNG)。大多数情况下,TRNG 取决于热噪声或时钟漂移,但其他熵源也是可能的。可以在此处找到对此的更多技术评估(“数字设备中的随机性来源及其可测试性,Viktor Fischer”)。要获得更长的选项集,请查看Wikipedia 上的“硬件随机数生成器”页面。实现哪个取决于您使用的智能卡的具体型号。可能很难找到,因为通常这种信息隐藏在您可能无法访问的技术文档中。
这种 TRNG 生成的熵通常在被智能卡上的操作系统、应用程序和/或库使用之前被白化和/或馈入 CSPRNG。通常,RNG 会根据 FIPS 140-2 或 AIS31(德国 BSI)进行验证,这可能是通用标准认证的一部分。TRNG / CSPRNG 的认证通常会在特定处理器的数据表中提及,并且该认证可能会指明所使用的精确 TRNG。
在您的情况下,毫无疑问,白化的 TRNG 或从该 TRNG 播种的 CSPRNG 用于为您的密钥对生成两个密钥大小一半的素数。这需要很大的随机性。使用多少熵和随机性取决于实现以及实现在找到素数时可能有多少运气。
请注意,Linux 现在还将在支持英特尔指定的 RDRAND 实现的芯片上使用随机性,并根据 AMD 的协议为其 Ryzen 芯片复制。因为不是每个人都信任这种随机来源,所以通常会混合来自其他来源的熵。其他 CPU,例如威盛的 Eden 处理器,也采用了其他基于芯片的解决方案。主板通常还包含一个 TPM 芯片,该芯片通常基于智能卡设计,并且具有相同类型的硬件 TRNG。