Nac*_*rya 6 c++ windows winapi cryptography cryptoapi
我们的一款产品目前使用CryptGenRandom API 来生成随机数。最近,我遇到了 Cryptography API: Next Generation (CNG),它为此提供了一个新的 API BCryptGenRandom(在 bcrypt.h 中)。根据 MSDN 中提供的描述 - 两个 API 均符合 Windows Vista Service Pack 1 (SP1) 及更高版本中的 NIST SP800-90 标准。
小智 4
关于你的第一个问题,不,正如你所指出的,根据 MSDN,这两个 API 使用相同的伪随机数生成器算法。可能更相关的是指出这两个 API 使用相同的 Windows 内核熵源来提供 PRNG。
关于你的第二个问题,这更有趣,因为它提出了一个问题:主机是否有更高质量的 RNG 可作为第 3 方附加组件(例如硬件安全模块,HSM)。硬件 RNG 可以通过 CNG (BCryptGenRandom)、遗留 CAPI (Crypto API、CryptGenRandom) 和/或作为内核模式熵源公开。如果前两者之一(但不是两者),您的应用程序只有在调用特定的 RNG API 时才会受益。但如果硬件 RNG 作为内核熵源安装,那么您的应用程序无论哪种方式都会受益。
这是否重要更多的是您的应用程序的性质及其通常如何使用的问题。如果加密硬件不太可能成为部署故事的一部分,那么我认为没有理由更改您的代码。但是,如果您的产品和加密硬件倾向于出现在同一主机上,那么您的客户将从您启用该功能中受益。