我們如何比較兩種加密算法的性能?
假設我想比較 RSA 和 Paillier 加密算法。我用同一種程式語言編寫了兩個不同的程序。現在如何在這兩者之間進行比較,它們可以在哪些方面進行比較?
有相同的工具嗎?
我將收集評論並從中建立答案。
第一的,
$$ .. $$您只需對具有相似安全屬性的密鑰執行操作一千次,並記錄每次操作的時間。請注意,速度相當依賴於實現,因此您正在測量算法的實現,而不僅僅是算法。
當然,生活和程式碼開發太簡單了,所以
$$ Y $$你還需要考慮$$ .. $$實施的質量。如果您自己編寫程式碼,您是否知道質量實現將使用的兩種算法的實現技巧?比較幼稚的實現可能不會告訴你太多。
當然,安全開發也有其自身的特殊問題,在比較速度之前需要考慮這些問題:
除了上述之外,重要的不僅是實現的優化級別,還包括對側通道攻擊的抵抗力,因此在某些情況下,一個實現甚至可能比一個好的實現更快。
所以合乎邏輯的結論是……
如果你想比較 RSA 和 Paillier 加密算法,那麼你不應該比較這些算法的兩種實現,你應該比較算法的計算複雜度。
關於如何做到這一點的有用評論:
在這種情況下,要考慮的一件事是所涉及的模數和數字的不同長度(在 Paillier 中,計算是用兩倍長的數字完成的,如果相同 $ n $ 被使用,由於 $ \bmod n^2 $ ).
如果是我,我會在python中使用time.time(),比較開始和結束的結果,然後是結束時間和開始時間的差。這是一個使用 md5 的範例:
root@kali:~/projects/crypto# cat hashtest.py import time, hashlib #Tests MD5 hash algorithm 'iterations' times. def testHashes(iterations): for i in range(iterations): x = hashlib.md5("The quick brown fox jumps over the lazy dog") if __name__ == '__main__': begTime = time.time() testHashes(1000) endTime = time.time() print "1000 iterations of MD5 computed in %s seconds" % (endTime - begTime) root@kali:~/projects/crypto# python hashtest.py 1000 iterations of MD5 computed in 0.000519037246704 seconds
非常簡單的範例,但該概念可以應用於您建議的兩種算法。但是,如果您要使用類似 OpenSSL 的實現並在 C 中使用相同的方法,它將更準確地表示算法的實際速度。因為 python 的大量類型/解釋/一切都是對象實現,它將比 C 等較低級別的語言慢得多,並且可能同樣容易實現。