c – CryptGenRandom和CNG BCryptGenRandom API之间的区别

我们的一个产品目前正在使用
CryptGenRandom API进行随机数生成.最近,我遇到了Cryptography API:Next Generation(CNG),它提供了一个新的API
BCryptGenRandom(在bcrypt.h中).根据MSDN中提供的说明 – 两个API都符合Windows Vista Service Pack 1(SP1)及更高版本中的NIST SP800-90标准.

>如果我使用默认的Microsoft提供程序,那么两个API之间的随机数生成过程是否有任何区别?
>如果没有任何差异,我是否应该转向CNG API,因为CNG是CryptoAPI的长期替代品?

最佳答案 关于你的第一个问题,不,正如你所指出的,每个MSDN,两个API都使用相同的伪随机数生成器算法.可能更相关的是指出两个API使用相同的Windows内核熵源来为PRNG提供信息.

关于你的第二个问题,这更有意思,因为它提出了一个问题,即主机是否有更高质量的RNG可用作第三方附加组件(例如硬件安全模块,HSM).可以通过CNG(BCryptGenRandom),传统CAPI(Crypto API,CryptGenRandom)和/或作为内核模式熵源来暴露硬件RNG.如果前两个中的任何一个(但不是两个)都有,那么只有当您调用特定的RNG API时,您的应用才会受益.但是,如果硬件RNG作为内核熵源安装,那么您的应用程序可以从中受益.

这些问题是否更重要的是您的应用程序的性质以及它通常如何使用的问题.如果加密硬件不太可能成为部署故事的一部分,那么我认为没有理由改变您的代码.但是,如果您的产品和加密硬件往往出现在同一主机上,那么您的客户将从中受益于您点亮该功能.

点赞