2016-05-18 310 views
4

我们的一个产品目前使用CryptGenRandom API生成随机数。最近,我遇到了加密API:新一代(CNG),它提供了一个新的API BCryptGenRandom(在bcrypt.h中)。按照MSDN中提供的说明 - 两种API都符合Windows Vista Service Pack 1(SP1)及更高版本中的NIST SP800-90标准。CryptGenRandom和CNG BCryptGenRandom API之间的区别

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

回答

1

关于你的第一个问题,正如你指出的,根据MSDN,这两个API都使用相同的伪随机数生成器算法。可能更相关的是指出两个API使用相同的Windows内核熵源来提供PRNG。

关于第二个问题,这更有趣,因为它提出了主机是否具有更高质量的RNG作为第三方附加组件(例如硬件安全模块HSM)的问题。硬件RNG可以通过CNG(BCryptGenRandom),传统CAPI(Crypto API,CryptGenRandom)和/或作为内核模式熵源公开。如果前两者中的任何一个(但不是两者),则只有在它调用特定的RNG API时,您的应用才会受益。但是,如果硬件RNG作为内核熵源安装,那么您的应用程序无论哪种方式都有好处。

这些问题中的任何一个都不仅仅是您的应用程序的性质以及它的典型使用方式。如果加密硬件不太可能成为部署故事的一部分,那么我没有理由更改您的代码。但是,如果您的产品和加密硬件倾向于显示在同一台主机上,那么您的客户将从您的照明中受益。

相关问题