對稱密鑰有效性假設?
我可以使用香農熵之類的方法來確定對稱密鑰的適用性嗎?我發現了一個不是使用 CSPRNG 生成的對稱密鑰,它的香農熵非常低。
我對來自 CSPRNG 的 100 萬個密鑰進行了實驗,其香農熵至少
x
為我發現的所有弱對稱密鑰的香農熵小於x
. 我不認為這裡的值在x
這里特別重要,但我想知道拒絕不符合此要求的對稱密鑰是否合理。基本上作為不良配置的對策。
根據我對這些 評論的理解,問題的測試需要 $ \ell=64 $ 來自 Windows RNGCryptoServiceProvider 的字節,使其 $ n=2\ell=128 $ 團體 $ b=4 $ 位,數個數 $ n_i $ 組與每個 $ 2^b=16 $ 位模式 $ i $ , 計算 $ p_i=n_i/n $ ,並且對於一個極限 $ x=0.9 $ 支票 $$ x\le-\frac1b\sum_{p_i\ne0}p_,\log_2\left(p_i\right) $$
問題的測試應該很少失敗。它甚至在一百萬次測試中進行一次的機率(據報導)似乎小於 $ 0.2% $ 根據我的模擬:我見過 $ 25 $ 活動 $ 18\times10^9 $ 樣品測試。有些事情是不一致的,與接下來的事情無關。
該測試的靈感來自於每比特源的香農熵公式 $ b $ - 已知機率的位獨立值 $ p_i $ ,但這裡我們不計算香農熵,因為我們是在樣本上操作,而不是在源上,並且香農熵沒有為樣本定義。這 $ p_i $ 是實驗頻率,而不是來源的機率。我看不出這個公式是如何成立的。
更新:我已經詢問了那裡的測試,並得到了詳細的答案。事實證明,它被稱為G 檢驗或 Woolf 對數概似比檢驗,是Pearson 的可靠替代方案 $ \chi^2 $ 測試。
我可以使用香農熵之類的方法來確定對稱密鑰的適用性嗎?
如果確定源頭來自一個旨在成為 CSPRNG 的建築,則不會。對此類輸出的測試只能提供錯誤的安全保險,或檢測嚴重錯誤。正確的方法是仔細檢查規範,並在可能的情況下檢查 CSPRNG 的實現。
但這不是問題所在。
我擔心使用這樣的過濾器來防止人為錯誤可能會反過來造成安全風險。
在實踐中並沒有。以下兩個挑剔只是理論上的:
- 限制為通過測試的鍵顯然會將鍵空間減少到某種(不可察覺的)程度。
- 如果側通道攻擊是一個問題,執行測試可能會洩漏有關密鑰的資訊。但是,如果它們是,那就是問題,而不是測試。
我確實對相信該測試來擷取一個糟糕的 CSPRNG 持嚴重保留意見:
- CSPRNG 最常見的問題是不正確的播種,並且測試無法捕捉到它。
- 更一般地說,從輸出中證明甚至有意義地確認 CSPRNG 的質量顯然是不可能的:我們可以製造通過任何預先存在的測試的 CSPRNG,但對於知道其內部結構的人來說卻是極其薄弱的。
獨立地,如前所述,如果只有一百萬個測試報告失敗(並且密鑰是 64字節),那很可能是異常情況。它可能在測試中,或者在如何使用生成器中,或者在對生成器設計輸出的假設中,而不是在生成器本身中。
錯誤地將選擇不當的密鑰安裝到系統中
測試確實有一些機會捕捉到這種情況,如果小的誤報率(如果我正確理解的話,遠低於 1 億個密鑰中的一個)是可以容忍的,為什麼不呢?但是,嘗試從密鑰本身的值中檢測錯誤必然是不可靠的。例如,測試不會擷取 DES 的最喜歡的測試密鑰
0123456789ABCDEF
,重複。一種可取的做法是製定防止此類錯誤的程序。例如,使用專用設備傳輸密鑰,或具有完整性保護的數據塊,或作為最後手段的深思熟慮的密鑰檢查值。