Encryption

是否有任何工具可以分析密碼算法的性能?

  • December 11, 2020

我如何分析加密算法的性能以製作表格和圖表來比較它們。我看過幾篇論文,但沒有論文解釋它是如何完成的。

通過時間比較數據塊大小等……

像密鑰大小、塊大小、功率、吞吐量、數據長度、處理的字節數 (MiB/s) 和每字節週期數。

範例論文:

沒有給出它是因為假設您無論如何都知道它,如果您處理加密算法,或者您不需要它,因為它複雜且耗時,並且世界上只有少數人需要它,並且可以適當地閱讀結果。

要測試吞吐量(Mb/sec,與處理的數據相同),您需要一個快速的設備來寫入,通常 hdd 本身會增加太多延遲來正確測量這一點。你可以使用 ram 文件系統,然後寫在那裡。你沒有提到作業系統,所以我假設linux。你寫了一個大文件並測量它所花費的時間

知道您製作的文件有多大以及花費了多少時間,您就可以計算吞吐量,將文件大小除以所用時間。你可以使用寫入/dev/null,但很難預測作業系統會做多少優化,所以我建議避免這種情況。

密鑰大小在算法初始化中給出,如果不提供此資訊,您將無法啟動。如果 Crypto++ 向您隱藏此資訊,請嘗試搜尋其他內容。或者尋找預設值。對於 AES,它的16 個字節

塊大小相同。相同的連結顯示 AES 的塊大小也是 16 字節。與前面的情況一樣,您自己設置它,並且許多算法接受不同版本的密鑰大小和塊大小。這些是由使用者在開始時給出的。或者是預設值,可以在特定實現、算法+使其工作的程序中找到。

功率很難估計,因為設備的效率差異很大。即使您為您的設備測量它,對於另一台設備它也會有所不同。最簡單的方法是在 RAM 中寫入一個大文件,刪除它,再寫入,循環數小時,直到筆記型電腦電池耗盡。然後檢查你的電池有多大。

或者嘗試在功率計上檢查您的公寓的功耗,但這更不精確。正確的方法會使用這樣的東西

如果您將空閒執行的電腦與正在執行您的任務的電腦進行比較,您可以獲得更精確的結果。這樣您就可以自動排除所有不適用於加密任務的部分,例如螢幕。

每個字節的周期是最複雜的部分。為此,您實際上需要閱讀程式碼並查看從頭到尾完成了多少操作,然後將這些操作量除以輸出的大小。如果一個算法需要 17 次操作,如加法、異或和乘法,並且一個設備可以在一個時鐘時間內完成所有這些操作,並且輸出是 4 字節長,那麼結果是 17/4=4.25 個週期/字節。請記住,現代 CPU 可以對非常大的字進行操作,即 128 位(16 字節),並且某些操作可能需要很長時間,例如求冪,可能需要 100 次操作。您需要找到給定機器上每個操作的成本。通常它是 1 用於加法、位運算、乘法,大約 10 用於除法,sqrt,100 用於更複雜的操作,如現代 CPU 的指數、三角函式。微控制器可能只有快速添加。GPU 可能有快速除法,但沒有位運算。快速是指一個循環操作。這樣一來,它就會在一個時鐘步驟中執行一個動作,例如加法。

您可能還對檢查算法的強度感興趣。這是通過減小密鑰大小並使用分析輸出中的模式的程序來完成的,例如 TestU01。是我最喜歡的關於這個主題的作品,我喜歡它主要是為了簡單和視覺化:

和這個網站一般。它可以讓您了解密碼學人員的總體思維方式、他們使用的工具、他們在算法中的價值。

TLDR:您問的是花費一生的時間來收集非常複雜的任務所需的工具。我不能給你所有的。並且沒有現成的解決方案。很少有人需要這個。

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