2016-05-18 164 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作爲內核熵源安裝,那麼您的應用程序無論哪種方式都有好處。

這些問題中的任何一個都不僅僅是您的應用程序的性質以及它的典型使用方式。如果加密硬件不太可能成爲部署故事的一部分,那麼我沒有理由更改您的代碼。但是,如果您的產品和加密硬件傾向於顯示在同一臺主機上,那麼您的客戶將從您的照明中受益。