CSPRNG 作為流密碼的基準?
我對安全協議的限制是我希望我的 RNG 作為 CSPRNG,並且我還希望它超級快。
如果我使用 Salsa20 或 ChaCha 或 AES 計數器模式,我無法獲得所需的速度。我希望我的 PRNG 以 100 Gbps 或更高的速度工作。
此外,我需要加密保護。
對此有什麼建議嗎?是否存在這樣的 CSPRNG 可以為我提供 100Gbps 或更高速度的輸出流?或者換句話說,可以提供速度為每秒 10^-11 位的比特流?
PS:我不關心系統要求,平台可以是FPGA,GPU等,我只需要一些數字來比較並知道用任何一種可行的平台(不是超級電腦)我可以實現的目標任何 CSPRNG 中的 100Gbps?
首先要注意的是 SEJPM 在評論中所說的,性能取決於硬體——水平(核心數等)和垂直(時鐘速度等)維度。第二件要理解的事情是,儘管 CSPRNG 和流密碼可以共享底層原語,但它們的安全要求是不同的。
那麼現在,讓我們開始吧——有哪些著名的對稱密鑰原語?
排除硬體平行度時需要考慮 2 個維度:
- 塊大小,
- 每個塊的執行時間。
成績從慢到快:$$ \text{Moderate} < \text{Fast} < \text{Very Fast} < \text{High} < \text{Very High}. $$成績是我個人的看法。
我還沒有對不同的硬體和實現進行系統的基準測試,但是這裡提供了數字以供快速參考。我使用了我自己的(幾乎沒有優化過的)MySuiteA庫,以及匆忙編寫的臨時基準測試程式碼。
接下來,我們可以考慮實施方面。
- SBox現代密碼學智慧是這樣說的:如果必須使用查找表來實現 SBox(因為它是高速記憶體側通道),請避免使用 SBox,因此 AES 在這裡是最危險的;
- 塊大小AES 也很危險,因為它的塊大小很小 - 128 位對於 nonce 和計數器來說太小了。ChaCha20 也只有 128 位的 nonce 和 counter 空間,但它有更大的狀態和抗側通道的非線性層。
- ARX 與二元多項式ARX 代表 Add-Rotate-Xor,這是獲得非線性的傳統範式(ChaCha20 遵循此)。它的實現缺點是在進行硬體實現時需要更複雜的電路,這就是沒有算術加法的地方 - 基於二進制多項式的那些有一個勝利(Gimli,Keccak)。
- 字長看到我的軟體 AES 實現實際上非常糟糕,這讓我很驚訝,但無論如何,它無論如何都是面向字節的算法。我想在這裡指出的是,Keccak-p
$$ 800,12 $$表現優於 Keccak-p$$ 1600,24 $$不是因為更小的塊大小,而是因為輪數更少——與使用本機字長相比,在 64 位機器上使用 32 位字實際上是一個缺點。正是由於這個原因,SHA-512 在 64 位電腦上的性能優於 SHA-256。
側面資料:
Gimli 去年進行了全面的區分攻擊:https ://eprint.iacr.org/2020/744 。Gimli 並不是唯一的 384 位排列,Xoodoo 也是一個很好的 384 位排列,並且是由發明 Keccak 的同一組人創作的,但我還沒有在我的套件中實現基準測試。
即使對於簡單的操作(例如將 PRNG 輸出與某些數據進行異或運算),您也想要一個難以達到的速度。除非有一些嚴肅的專用硬體工程,否則您不會獲得 CSPRNG 的速度。
但你不需要這個!順序速度與未指定硬體的 PRNG 無關。如果您需要的 PRNG 速度超出您的處理器可以提供的速度,請並行執行多個實例,使用盡可能多的處理器來達到所需的速度。 $ N $ 並行工作的 CSPRNG 實例,每個實例都使用從 CSPRNG 獲得的種子實例化,構成一個 CSPRNG $ N $ 乘以每個實例的速度。