此时此刻,我正在我的新GPG智能卡上生成一个私钥。
在linux上,随机输入是通过键盘上的按键、网络数据包、鼠标移动等来提供的。
我的智能卡上的芯片是如何产生不可预测的随机数的?
发布于 2019-02-12 02:03:31
几乎所有--如果不是全部--智能卡上都有一个真正的随机数生成器(TRNG)。TRNG通常依赖于热噪声或时钟漂移,但其他熵源是可能的。可以找到更多的技术评估,例如这里(“数字设备的随机性来源及其Viktor Fischer的可测试性”)。对于更长的一组选项,请查看“维基百科上的硬件随机数生成器页面。实现哪一种取决于您正在使用的智能卡的特定模型。这可能很难找到,因为通常这类信息隐藏在您无法访问的技术文档中。
这种TRNG产生的熵通常在智能卡上的操作系统、应用程序和/或库使用之前被白化和/或输入CSPRNG。通常RNG是根据FIPS 140-2或AIS31 (德国BSI)进行验证的,可能是共同标准认证的一部分。TRNG / CSPRNG的认证通常在特定处理器的数据表中提到,认证可能表明所使用的TRNG精确。
在您的情况下,毫无疑问,无论是白化TRNG还是CSPRNG种子,TRNG都用于为密钥对生成两个键大小为一半的素数。这需要很大的随机性。使用多少熵和随机性取决于实现,也可能取决于实现在寻找素数方面有多大的运气。
请注意,Linux现在也将在芯片上使用随机性,这些芯片支持英特尔指定的RDRAND实现,并根据AMD对Ryzen芯片的协议复制。因为并不是每个人都相信这种随机源,所以混合其他来源的熵是很常见的。其他CPU,如VIA的Eden处理器,已经移植了其他基于芯片的解决方案。主板通常也包含一个TPM芯片,这通常是基于智能卡的设计,并具有相同的硬件TRNG。
https://security.stackexchange.com/questions/201132
复制相似问题