Stream-Cipher
計算每個字節的周期
每字節的周期數似乎是設計和選擇流密碼的關鍵問題。例如,來自 Wikipedia 的 RC4 在原始 Pentium 晶片上具有 7 個週期/字節。
這是如何計算的?他們是否只是對數兆字節的加密進行計時,然後除以 CPU 的時鐘速度?他們是否在某個表中查看彙編程式碼和每條指令的查找周期,在流水線、分支預測等方面進行計算?
通過查看程序集來預測速度是很困難的,特別是因為處理器會執行各種具有記憶體的技巧(例如分支預測)。所以是的,這都是關於測量的。
它有一種藝術;例如,您寧願重複加密相同的相對較小的緩衝區(4 或 8 kB)以避免記憶體效應。一種方法是進行足夠多次的重複加密,以消除由於外部活動引起的隨機影響(例如 IRQ)(例如,您調整循環計數以使執行時間至少為 5 秒)。另一種是使用平台循環計數器來獲得精確的測量值。無論哪種方式,您都需要做一些“熱身”,以確保程式碼全部在 L1 記憶體中,並且分支預測已達到其永久狀態;在為受 JIT 編譯的虛擬機(例如 Java 或 .NET 實現)進行基準測試時,這一點尤其重要。
有關如何使用“重複處理”方法在散列函式上完成的範例,請參見sphlib 。eBACS是一項巨大的基準測試工作,它更喜歡使用循環計數器。