Randomness

這真的是TRNG嗎?

  • January 19, 2017

作為我學士論文的附錄,我提出了一個使用 JPEG 圖像作為熵源的 TRNG 解決方案。

它是開源的,可在GitHub上找到。

我的問題是: 這真的可以被視為 TRNG 嗎?

顯然我試圖創建一個 TRNG(而不是 PRNG 或 CSPRNG),但你知道……魔鬼在細節中。

這裡有一些資訊,所以你可以幫助我確定它是否可以被視為 TRNG 或只是一瓶蛇油 :)

這個怎麼運作

  • 它使用兩個不同的輸入圖像(具有相同的解析度)。這些圖像被認為是獨立的,因為在兩個不同的時刻擷取。
  • 它使用混合技術,因此如果兩個圖像中至少有一個是不可預測的,則輸出將是不可預測的。
  • 僅考慮總像素量的一部分。CSPRNG SecureRandom為每個考慮的像素設置必須丟棄多少連續像素。以這種方式,避免了連續像素之間的相關性。這也保證瞭如果生成器執行兩次,將生成兩個不同的輸出。
  • 僅考慮藍色通道。因此避免了不同通道之間的相關性。
  • 可以在圖像中找到的雜訊位於最低有效位 ( LSB )。因此,僅使用每個輸入字節的 LSB。您也可以選擇考慮第二個最低有效位。

布魯斯施奈爾指南

在 Applied Cryptography 中,Bruce Schneier 列出了一些準則來檢查生成器是否可以被視為 (CS)PRNG 或 TRNG:

  1. 出於我們的目的,如果序列生成器具有以下屬性,則它是偽隨機的
    : 它看起來是隨機的。這意味著它通過了我們能找到的所有隨機性統計測試。
  1. 對於密碼安全的偽隨機序列,它還必須具有以下屬性:

它是不可預測的。在完全了解生成序列的算法或硬體以及流中所有先前位的情況下,預測下一個隨機位將是什麼在計算上肯定是不可行的。

  1. 撇開哲學不談,從我們的角度來看,如果序列生成器具有這個額外的第三個屬性,它就是真正的隨機
    : 它不能被可靠地複制。如果您使用完全相同的輸入(至少盡可能準確)執行序列生成器兩次,您將獲得兩個完全不相關的隨機序列。

而我提出的解決方案:

  1. 我執行了一些測試,看起來很有希望。也許需要其他測試(?)
  2. 它不使用雜湊函式。每個輸出位僅取決於特定像素。因此,如果攻擊者知道先前創建的位,他就無法預見未來的位。
  3. 它使用 CSPRNG 來選擇要考慮的像素。因此,執行生成器兩次,每次都會生成兩個不同的輸出。

就是不行。

如果您使用某些文件和 CSPRNG 作為確定性算法的數據源,則它不是真正的隨機數生成器。

根據您自己的 Schneier 報價:

如果您使用完全相同的輸入(至少盡可能準確)執行序列生成器兩次,您將獲得兩個完全不相關的隨機序列。

聽起來您的生成器會生成相同的數字,所以…不要將 CSPRNG 誤認為是您的生成器。CSPRNG 是生成器的輸入。(即使不是,CSPRNG 的相同輸入也是相同的輸出)。

還有其他問題(比如認為同一個地方的兩個圖像是獨立的),但它們不再重要了。

顯然我試圖創建一個 TRNG

這是一個很好的贈品,你真的不知道你在做什麼。無法使用類似圖靈機上的某些軟體創建 TRNG。沒有人可以,永遠不會。

我認為您從根本上誤解了 Jericho Comms 中的熵源,這是您從中獲得此資訊的開源項目。這實際上確實有硬體隨機性的來源。

您建議僅將顏色的最低有效位作為輸入數據。您沒有提到的是使用原始的、未處理的 CCD 雜訊。

JPEG 不能用作 TRNG。它們經過處理和優化,從 LSB 中剝離資訊,因此輸出是軟體隨機性。此外,白皮書建議使用在“取景”期間獲取的恆定圖像流以獲得更高的熵

來自白皮書:

..他們的測試是通過在鏡頭蓋仍然打開的情況下從取景器擷取幀來針對光學感測器雜訊進行的。對他們結果的獨立測試表明,這確實在結果數據中產生了一些熵。… 為了防止軟體降噪和壓縮造成的干擾或偏差,數位相機的 RAW 模式

$$ 74 $$ 應該使用。

因為,正如您的學術同行已經證明的那樣,這可能實現硬體 TRNG 的一種合理方式。如果您要保留成像晶片的隨機性,這可能會起作用。但除非你能直接控制拍照的過程,否則它是不可靠的。

引用自:https://crypto.stackexchange.com/questions/43010