Random-Number-Generator

從相機輸入收集的熱雜訊的安全熵提取器?

  • October 21, 2016

我已經閱讀了這篇論文(pdf),其中討論了測量從相機輸入中收集的熱雜訊的熵。他們估計最小熵約為每像素 4 位。從 X500 的相機來看,估計每種顏色 1 位看起來是最安全的選擇:

在此處輸入圖像描述

論文提到了一些未來關於如何提取隨機數據的研究工作。**編輯:**我發現了同一作者的論文,其中討論了一些我將閱讀更多的方法。

我想知道的是如何以資訊論的方式從每個像素中提取熵,即。獲得真正的隨機性。散列函式不適用於此目的。理解軟體中的實現也應該很簡單。

一個想法是為像素的每種顏色獲取最低有效位。將 3 位異或在一起。輸出 1 位。在處理完所有像素並輸出所有位之後,然後通過馮諾依曼提取器執行它們,這就是最終輸出。

另一種是取一個累加器S,初始化為零。將下一個字節異或到它上面,然後循環一位。重複 8 個字節或根據需要重複。從理論上講,它採用輸入中的已知規律並一一消除它們。字節中的位是有偏差的,因此是旋轉的。我們可能還期望 RGB 值有偏差,因此我們希望確保相同數量的 R、G 和 B 進入每一位。

這些方法中的任何一種在理論上是安全的嗎?我願意接受任何適當的方法(或參考任何先前的論文),以保守的方式從這裡的任何知名密碼學家那裡正確地做到這一點。

該問題要求一種適用於特定相機的熵提取器,即資訊理論上安全,但基於散列函式並非完全安全的理由拒絕散列。恐怕對於這些陳述中相同的安全定義,書上沒有任何內容;也許沒有什麼可能。


問題中考慮的一種方法似乎是:對三個顏色通道讀數的低位進行異或運算,並將結果提供給馮諾依曼提取器。即使假設問題中的實驗數據成立,也無法從資訊理論上證明這將給出與隨機或什至是無偏的結果無法區分的結果。相反,可以證明對於某些輸入模型,輸出是有偏差的;並且在實踐中類似的嘗試中還發生了更令人驚訝的事情。那是因為:

  • 有理由相信同一像素的通道高度相關;組合其中的幾個是一種任意方式,不考慮它們的性質,理論上可以使我們獲得比單獨使用任何通道更少的熵,即使組合器在其輸入不是不相關的假設下在理論上是資訊安全的。
  • 如果輸入相互獨立的位,則可以保證馮諾依曼提取器產生無偏輸出;但是這裡有理由擔心連續讀數是相互關聯的(例如:同一掃描行中的像素所採用的模擬路徑是相同的,因此該行的容量會產生相關性)。
  • 只保留具有已知熵的讀數的低位可以保證將熵降低到每個樣本最多1 位,但是沒有理論上的最小值,無論截斷前的熵有多高,除非做出一些詳細的假設初始樣本(特別是:可以想像 ADC 在從大的輸入變化中恢復時具有其低位常數)。

基於散列或類似原語的加密熵提取器是最好的東西,具有合理的安全原理,不需要了解熵源中的某些物理模型和硬體。它們是健壯的:一個健全的加密熵提取器令人信服地給出了在計算上與隨機輸入中的任何事故無法區分的輸出,除了自初始化以來輸入中的熵損失,或提取器的內部狀態通過側通道洩漏。

相比之下,在其輸入端依賴某個源模型的簡單提取器往往會失敗,因為該模型不准確,甚至可能是短暫的(例如:由電源瞬態引起的 ADC 飽和、一段時間後的內部重新校准或溫度變化)。


如果一個人堅持某種極其簡單的東西(在密碼學意義上不安全),並且有一定程度的理論證明,對於未知模型的自然熵源來說,它不太可能是災難性的,那麼人們可以使用

  • 一個大的乘法擾碼器 $ n $ - 位狀態(詳述如下);這是一個簡單的熵累加器,容量很容易調整;如果它的輸入是,它的輸出可以證明是完全隨機的,否則它會平滑地降級為簡單的 PRNG;
  • 輸入感測器通道輸出的所有位;
  • 對其輸出進行二次採樣,保持每個 $ s $ th位,具有子採樣因子 $ s $ 與 $ n $ 並且使得剩餘比特率舒適地低於手頭經驗數據估計的輸入熵率(例如,安全/軟糖因子為 8,如果採取下一步,則為 2);因此,在這裡,如果我們每像素輸入 24 位並且每個像素估計有 2.1 位熵(右列的第二個圖證明了這一點),我們想要 $ s $ 至少 824/2.1 或 224/2.1;四捨五入到下一個素數,以擴大我們的選擇範圍 $ n $ , 那是 $ s=97 $ , 或者 $ s=29 $ 下一步;
  • 可選地後跟一個馮諾依曼提取器,它將平均比特率除以 4(並使其不規則,這可能不受歡迎);它可能會消除可能存在於低 $ n $ 即使其他一切都按計劃進行;它使密碼分析攻擊嘗試將輸出與隨機區分開來更加複雜;
  • 注意丟棄早期的輸出,直到丟棄的位數是數倍 $ n $ ;
  • 請注意以上任何內容都不會對熵源有任何回饋(這將使源模型與擾碼器無關的假設無效)。

乘法加擾器是圍繞 LFSR 建構的,基於度的二進制多項式 $ n\ge1 $ . 多項式必須具有常數項集(確保它不會失去熵),並且通常被選擇為原始的(這避免了許多糟糕的選擇;並使輸入停留在 0 的預期週期最大化,儘管這在這裡不是必需的)。例如,與 $ x^{23}+x^{18}+1 $ ,電信中使用的擾頻器示意圖

乘法擾碼器

在電信領域, $ n $ 必須很小(以便在出錯的情況下快速重新同步解擾器)。我們寧願想要狀態更大的東西,比如 $ x^{256}+x^{187 }+x^{125}+x^{60}+1 $ ,取自Jörg Arndt 的數學數據表的eq-primpoly-w5.txt,引用 Janusz Rajski、Jerzy Tyszer:GF(2) 上的原始多項式,具有均勻分佈係數,最高 660 次,在電子測試雜誌:理論和Applications, vol.19, pp.645-657, 2003. 軟體實現可以使用數組 $ b $ 256位,8位索引 $ i $ (索引上的所有操作都被截斷為 8 位)

  • 對於每個輸入位 $ x $
    • $ i\gets i+1 $
    • $ x\gets x\oplus b_i\oplus b_{i+60}\oplus b_{i+125}\oplus b_{i+187} $
    • $ b_i\gets x $
    • 輸出 $ x $

我不是一個有名的密碼學家,我只是為了興趣而建構真正的隨機數生成器。我有這樣一個基於攝像頭的設備,可以在我旁邊的長凳上生成真正的隨機數。

確實沒有實用的方法可以避免某種形式的散列以進行熵提取。你甚至用你的 XOR + rotate 提議來暗指它。這就是 SHA 之類的雜湊函式在內部執行的操作。

我推斷您想避免像 SHA 這樣的加密雜湊,這與我做出的決定完全相同。沙什瑪。您不需要不可逆的加密雜湊,因為您將真正的隨機性輸入到函式中,因此反轉它只會讓您恢復隨機性。許多 TRNG 不使用加密方法。

不幸的是,您的 CMOS 熵源將包含熵率的顯著變化。如果您對相機圖像執行圖形均衡,您將能夠看到這些。馮諾依曼根本不會幫助自動相關。如果你只是在搗亂,那麼這無關緊要。如果您想將您的設備用於生產,相關性會殺死您。您必須將整個圖像視為單個熵塊。矩陣提取器將完美執行。

  1. 生成由良好隨機數組成的矩陣 M。它的大小將取決於實現全熵所需的壓縮程度。您需要壓縮,因為您的圖像不是 100% 的熵,因此您需要將其壓縮為純粹的東西。
  2. 矩陣 I 是圖像。
  3. 因此,您的輸出熵是$$ M $$.$$ I $$

它實際上非常簡單,但它仍然是一種雜湊。唯一的問題是它非常慢。這就是為什麼沒有商業 TRNG 使用相機的原因。我編寫了自己的 512 kb 替換/置換網路,而我的設備以 120 kb/s 的速度輸出 0.3 位/像素。之所以如此之低,是因為我的相機圖像是 JPEG,我假設您正在處理 TIFF。如果您改用 JPEG,提取速度會快得多。但這真的很隨機。

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