Entropy
位串的熵率
- 如何計算位串的“熵率”?
- “NIST Randomness Test Suite”是否提供任何測試來測量熵源的熵?
- 如何檢查位串的“偏見”?
先感謝您。
- 沒有比特串的“熵率”之類的東西。這是創建位串的過程的熵率的簡寫。因此,要分析以確定該熵率的是位串是如何產生的,而不是位串本身。
如果一個比特串
0000
是由四次公平投擲硬幣產生的,則該程序的熵率為 4 比特/比特串,而創建比特串每一比特的程序的熵率為 1(比特/比特)。知道位串在此確定中沒有用。如果一個比特串
0101
是通過0
交替開始產生的,那麼熵率為零。 2. “NIST Randomness Test Suite”接受位串作為輸入,並確定該位串中的位是獨立且均勻隨機創建的假設是否可以接受,或者應該因為太不可能而被拒絕。
當假設為真時,測試通常會接受該假設,但偶爾會拒絕它(現代版本輸出一個p 值,即假設被拒絕的機率,即使它實際上成立)。
當假設為假時,測試得出的結論在很大程度上取決於實際過程。
- 如果該過程是使用恆定位串初始化的CSPRNG,則其熵率為零,但測試得出的結論就像假設為真(熵率為 1 位/位)一樣。
- 如果該過程是一個與假設有區別的自然來源(例如,如果每個比特由 20 次公平的硬幣投擲決定,並且
1
如果至少有 10 個正面;這是一個相當大的獨立比特的來源1
),一些與假設成立時相比,套件中的測試更有可能被拒絕;可能性取決於來源和測試。
- 要檢查位串的“偏差”,首先定義位串的“偏差”;我知道沒有公認的定義。
要測試一個位串是否可以來自沒有偏差的隨機獨立位源,請計算它有多少位,以及有多少位
1
;然後,用這兩個整數武裝起來,使用(也許是單面的)卡方檢驗。這將告訴我們是否可以自信地拒絕假設。NIST Randomness Test Suite 中的單比特測試可以做到這一點,但僅限於長比特串。