基於Hash函數的PRNG
流程非常類似於對稱密碼的CTR工作模式
算法的偽碼如下
m = ⌈n/outlen⌉
data = V
W = the null String
for i = 1 to m
wi = H(data)
W = W || wi
data = (data + 1) mod 2seedlen
return leftmost n bits of W
說明:
V是種子,seedlen為V的長度,n是需要的輸出位數,H是Hash函數
對於諸如SHA-2等強密碼學Hash算法,目前還沒有發現基於Hash方案的PRNG的已知或可疑缺陷。SP800-90標准對V提供了周期性地更新。
基於MAC的PRNG
基於MAC的PRNG幾乎都是HMAC構造的。與基於Hash的方案相比,其劣勢是執行時間會增大一倍,因為HMAC對於每個輸出塊都要執行兩次Hash函數運算。但是HMAC方案的優勢是可以提供更高的安全性。
對基於MAC的方案,需要兩個輸入:密鑰K和種子V,對於每個輸出分組的密鑰都是相同的,而每個分組的輸入數據都等於前一分組的MAC值。為了增加安全性,SP800-90標准提供了對K和V的周期性更新。