Random-Number-Generator
NIST DRBG 算法的可選參數
當我瀏覽DRBG 的 NIST-SP-800-90Ar1規範時,我發現在文件中的所有 3 個指定結構中都提到了security_strength:Hash_DRBG、HMAC_DRBG、CTR_DRBG。但是,它們都被標記為可選:
- security_strength:實例化的安全強度。這個參數對於Hash_DRBG是可選的,因為它沒有被使用。
和
- security_strength:實例化的安全強度。這個參數對於HMAC_DRBG是可選的,因為它沒有被使用。
和
{3 沒有 df,4 有 df}。security_strength:實例化的安全強度。此參數對於CTR_DRBG是可選的。
而在之前那個丟臉的版本中,甚至都沒有提到這個參數。
包含它的理由是什麼,或者我們可以推斷出什麼?
部分答案是SP 800-90A 的 2012 版本包括第四個 DRBG 結構 Dual_EC_DRBG (§10.3.1.2),需要該
security_strength
參數。由於一個 DRBG 風格需要這個參數,為了有一個通用的介面,所有的 DRBG 風格都必須採用這個參數。在 Dual_EC_DRBG 中,security_strength
僅用於一件事:選擇曲線。使用
security_strength
10.3.1 節中的 和表 4,選擇具有安全強度的最小可用曲線security_strength
。seedlen
,p
,a
,b
,n
,P
,的值Q
由曲線確定。Dual_EC_DRBG在公開後被退役,可能是 NSA 的後門,但它的遺產以這種次要的方式倖存下來。
讓我無法理解的是為什麼 Dual_EC_DRBG 根據安全強度選擇曲線,而 Hash_DRBG 和 HMAC_DRBG 通過選擇散列算法進行參數化,而 CTR_DRBG 通過選擇分組密碼進行參數化。