Random-Number-Generator

您可以將記憶體錯誤用作密碼學的隨機性來源嗎?

  • March 5, 2021

顯然,如果您需要一個隨機數進行加密,您的程式碼應該使用從硬體獲取它的 api。但是,並非所有硬體都有可用的 SRNG。如果您正在處理安全關鍵應用程序,並且硬體 RNG 不可用*,則適當的操作過程是中止執行*。

但是,並非每個應用程序都被視為安全關鍵。也就是說,雖然您需要安全性,但您不必擔心過於復雜的攻擊,因為,1.您的應用程序不值得被老練的黑客破解 2.您的任何數據都不是嚴格保密的(您不希望它被破壞,但這不會是世界末日)。

假設一個非安全關鍵應用程序,在沒有硬體 RNG 或 ECC 記憶體的機器上執行,分配大量記憶體(可能在一個長循環中)並使用最終發生的錯誤作為隨機源是否可行?這會比 PRNG 更安全嗎?

(..)分配大量記憶體(可能在一個長循環中)並使用最終發生的錯誤作為隨機性來源是否可行?

**否。**實際使用記憶體錯誤作為隨機源將需要操作 DRAM 時序參數,正如本答案和參考中所設想的那樣。

在地面上正常工作的電腦中的記憶體錯誤率非常低;每週檢測到的任何大於一個錯誤(由具有ECC日誌記錄的機器報告)都是維護的原因

$$ # $$. 因此,所提出的方法需要一個最終不切實際的延遲來獲得任何熵,或者一台不可靠的電腦;對於一個建造良好的人來說,這主要發生在海拔高度(尤其是在南大西洋異常中)。另外,如果機器有 ECC,則很難以便攜方式檢測錯誤(ECC 錯誤的報告往往是專有的混亂);如果不是這樣,並且有相當多的錯誤,那就是擔心最終會阻止程序按預期執行。 更實用的熵源包括

  • 音頻或影片輸入;更普遍的是ADC的輸出。

  • 以相對於 CPU 時鐘的高精度測量的事件時間(例如,通過RDTSC 指令API獲得的性能計數器)。來源包括:

    • 按鍵(值提供額外的熵)
    • 滑鼠/指點設備移動(位置提供額外的熵)
    • 網路數據包的到達
    • 來自旋轉硬碟的數據可用性
    • 具有獨立晶體的實時時鐘 IC 中的秒變化(熵率低,但熵相當可靠)

提取熵相對容易:本質上,散列任何你能得到的熵。一件極其困難的事情是斷言真正收集了多少熵的可靠下限。要非常保守,不要假設某些東西會成立。事情出乎意料地發生了變化,尤其是當有一個活躍的對手時,正如我們在加密貨幣中所假設的那樣。


$$ # $$DRAM 的可靠性研究給出了廣泛不同的估計。然而,我們談論的是 100 倍的 100 FIT par DRAM IC,其中故障時間是每 10 9 個設備·小時的預期故障數。以最高的 10 4  FIT 為例,一台具有 4 個 DIMM 的電腦,每個具有 18 個 DRAM IC(到 2017 年底,足夠使用 DDR4 主流的 32 GiB 和 ECC),我們每週會出現 1.2 次預期故障。 我對伺服器的有限現場經驗是,當 ECC 警報的頻率超過每週一次時,這是有原因的,通常是記憶體規格或設置不匹配(僅適用於新機器)或特定 IC 中的特定位邊緣的 DIMM(或磨損,對於已經安靜地嗡嗡作響一段時間的機器)。錯誤日誌的主要優點是幫助辨識這種情況,以及要更換的 DIMM,而不是全部報廢。

有一些技術可以故意增加 DRAM 錯誤的發生率;包括將刷新率降低到遠低於製造商規格,和/或使用RowHammer讀/寫模式。但是,這非常依賴於 DRAM 型號。在作業系統中可靠、便攜地做到這一點是非常困難的。MemTest 想要盡可能多地擁有這台機器是有原因的。

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