Ale*_*lke 1 random cpu assembly
我想知道设计特定于CPU的指令以生成随机数的原因是什么?
英特尔处理器具有RDRAND和RDSEED。PPC也有一个等效的指令。
拥有一个单独的芯片并仅仅做一些I / O来获得这些数字,是否更有意义?在我看来,当I / O已经存在了很长时间并且应该可以正常工作的时候,对于非常专门的指令(大多数软件永远不会使用随机数!)来说,这会使CPU变得更加复杂。
我们都有。
TPM可以生成加密安全的随机数(毕竟,它是“加密芯片”),并且自Haswell以来,TPM出现在许多(如果不是全部)基于Intel的主板上。
专有的CSRNG PCI(e)卡也可以在市场上买到。
我曾经参加了有关Arduino的自制CSRNG的演示。
那家伙没有统计或代数的概念。老实说,整个演示文稿是可悲的。
您不能仅仅制造一个芯片并声称它是CSRNG,还必须获得认证,有标准和方法。
获得这些认证既昂贵又困难。
此外,要处理宽带宽,您还需要一个快速(u)处理器。
TPM委托人的目标之一是使其价格便宜,最终结果是TPM芯片运行缓慢。
如果加上相对较低的此类芯片市场需求,我们可以清楚地看到CSRNG芯片确实很昂贵。
外部设备也容易受到物理攻击,可以很容易地对芯片进行拆焊/拆封,或者轻松地拔出或更换总线。
即使对于CPU内部的CSRNG也是如此,攻击是已知的,可以通过改变其晶体管来降低其熵。
但是,这需要一种完全不同的工具。
PCI(e)CSRNG可能会使用DMA传输所需数量的熵字节,这需要与操作系统进行某种协调的接口,例如在传输进行时。
而且,当然,有效负载将存储在内存中,这意味着更大的软件表面攻击以及将其加载到寄存器中的额外步骤。
访问内存的顺序约为200-300个周期。
使用端口映射的IO(即in指令)会将有效负载直接带到寄存器中,但一次只能加载32位,并且这没有比普通负载快。
RDRAND是一种用户模式指令,它允许用户模式应用程序访问CSRNG,而没有任何额外负担,但可以检查其支持。
它配备了几乎所有最新的CPU,几乎感觉像是免费的。
最后,还有营销方面的内容。
如果您的制造工艺得到改善,并且在模具中给了您[在此处插入一个合理的长度单位]平方的空间,您可以改善微架构或添加新功能。
前者很难,后者则相对容易设计,它可能会给您带来超越竞争对手的优势:通用工具在CPU上的运行速度更快,而且仅仅是因为您可以负担更多的裸片空间。