Randomness

生成安全證書需要多少熵?

  • June 14, 2017

因此,在 OpenSSL 中,您擁有-engine輸入自己的熵作為生成任何內容的源的標籤。

  1. 所以如果你想生成一個 2048 位的 RSA 證書,你需要多少熵才能保證它的安全?
  2. 1 個真正的隨機字節甚至 1 位熵是否足以生成安全證書?
  3. 你需要更多的熵來獲得更大的證書嗎?
  4. 熵是使用原始的還是與其他東西混合(在 的情況下openssl -engine)?

“多少熵”​​的答案總是“128 位”。

棘手的一點是“熵”這個詞經常被誤用。一般來說,情況如下:

  • 電腦是確定性機器。一次了解其完整狀態(磁碟、RAM 和 CPU 寄存器的內容) $ T $ , 可以隨時計算其行為和狀態 $ T’ > T $ ,只要沒有註入新的未知資訊。從概念上講,這是關於模擬機器。
  • 攻擊者的目標是嘗試恢復生成密鑰時的狀態,以便能夠模擬密鑰生成過程,從而獲得私鑰。然而,攻擊者並不知道關於狀態的一切,所以他將不得不“猜測”,即為他所缺乏的資訊嘗試可能的值。這被稱為“蠻力”。
  • “攻擊者不知道的東西”可以量化為“熵”的概念:我們會說狀態的熵為 $ n $ 位,如果最好的蠻力策略平均需要, $ 2^{n-1} $ 在擊中正確的之前嘗試。

請注意,這個概念並不要求未知資訊完全是一系列均勻隨機位。定義是這樣的,如果攻擊者知道除了 $ n $ 位(從攻擊者的角度來看)完全隨機、均勻且相互獨立,則熵為 $ n $ 位。在更實際的設置中,“熵位”來自對物理事件的測量(例如,源自硬體的中斷的精確計時);這些度量將被編碼超過 $ n $ 位。這不是什麼大問題,因為我們總是可以通過將所有熵位散列在一起以某種方式“集中”熵位。

如果攻擊者未知的數據是一個字節,那麼攻擊者最多只能嘗試 $ 256 $ 可能的值(平均 $ 128 $ ) 來恢復私鑰。這與說 8 位不能包含超過 8 位的熵是一樣的(如果攻擊者對字節有一些部分了解,例如他知道某些值是否比其他值更有可能,則可能包含更少)。

所需的熵量基本上是:“足以使蠻力變得愚蠢地昂貴”。“128 位”是“太多”的傳統價值(這是新的傳統;20 年前,我們會使用 80 位,但技術和經濟的不懈進步使 $ 2^{80} $ 計算任務不像以前那麼可笑)。如果您的私鑰是使用加密安全的 PRNG生成的,該 PRNG本身植入了累積至少 128 位熵的攻擊者未知數據,那麼根據定義,暴力破解該熵是不可行的(攻擊者將無法嘗試多於可能值空間的可忽略不計的一小部分),然後工作就完成了。

請注意,攻擊者可以在嘗試暴力破解生成種子和嘗試使用其數學結構從公鑰中解開私鑰之間進行選擇(例如,在 RSA 密鑰的情況下嘗試分解模數)。他將使用對他來說最容易的策略。從這個意義上說,你“只”需要足夠的熵來使數學破解比 PRNG 種子蠻力更容易。在實踐中,您注入了足夠的熵以使暴力破解不可行,並且您使用非對稱密鑰,因此在數學上破壞它們也不可行(例如,使用 RSA,使用 2048 位或更多位)。

一些人認為,如果量子電腦能夠實現,那麼,在某種意義上(並且有很多通常不言而喻的警告),擁有量子電腦的攻擊者可以用量子暴力破解 $ n $ - 帶成本的位 PRNG 種子 $ 2^{n/2} $ 僅(使用Grover 算法的變體);因此,需要“256 位”來防止這種情況。另一方面,工作中的量子電腦會以極高的效率突破 RSA、DSA、DH 或橢圓曲線密鑰的數學運算,這說明這一點沒有實際意義:只要你使用 RSA,你就是在打賭量子電腦會做不存在(而且,就目前而言,這不是那麼糟糕的賭注)。

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