Aes

用於 DRM 目的的密碼比 AES256-CBC 更快

  • June 19, 2022

我必須為學校項目使用“秘密”本地儲存的編碼程序開發程序。為此,我必須即時破譯程式碼才能使用它。該項目建議在CBC 模式下使用****AES 256,但為了獲得更好的性能,歡迎提出任何建議。

所以我有兩個問題:

  1. 我自己實現了 AES(我知道不建議這樣做,但它在項目中是強制性的),我希望將其與最快的軟體實現進行比較,知道在哪裡可以找到它嗎?
  2. 我一直在尋找更快的密碼,但或多或​​少比 AES 更“安全”來建議和實施。到目前為止,我發現了很多:CLEFIA、Threefish、Salsa20 和 LWC:PRESENT、LEA、ASCON(AEAD?)。我知道 LWC 的安全性遠低於標準密碼學(儘管 SC 和 LWC 之間的區別並不明顯),但它們似乎並沒有被破壞。它們應該用於我的目的嗎?如果沒有其他建議?

謝謝

如果您正在編寫自己的 AES 實現,並且可以使用 AES-NI 指令集,那麼您最終將得到一個數學上安全且快速的密碼。非常快…硬體中的 AES 通常會比儲存設備快。

您還可能陷入將具有大密鑰大小的數學安全密碼等同於該密碼的安全實現的陷阱。如果不使用 CPU 指令或像遮罩這樣的特殊編碼會使您的實現變得緩慢和復雜,那麼實現安全的 AES 實現並不容易。如果評分的一部分是您的 DRM 方案的安全程度,並且儘管您使用了安全分組密碼,但它顯然是可以破解的,那麼這對您的評分來說可能不是一個好兆頭。

一個既快速又安全的密碼,即使沒有硬體加速指令,也將是 ChaCha8。它是一種計數器模式流密碼,可以比未加速的 AES 快得多,同時實現起來也更加安全。如果您可以使用矢量指令,它甚至可能與帶有硬體加速的 AES 一樣快。

如果您正在尋找完整性保護,它通常與 Poly1305 MAC 配對,儘管您也可以使用 HMAC,這可能實現起來不太複雜,但通常速度較慢,只要您可以選擇生成更多的密鑰材料。

最後,考慮一下如果您使用帶有密鑰的分組密碼,這些密鑰是如何儲存、管理和創建的。許多 DRM 方案僅僅由於糟糕的密鑰創建或管理而被挫敗。如果只有 1000 個唯一輸入密鑰,則使用 128 位密碼將無法提供安全性。

試試 OpenSSL。它具有彙編語言常式,這些常式利用旨在加速 AES 的 CPU 特定指令。建構 OpenSSL 時必須啟用彙程式序。

當 Oracle 向 Java 添加類似的支持時,它們的性能提高了幾個數量級。現在是 Java,而不是 C,因此增長非常大也就不足為奇了,而且使用 OpenSSL 您不會看到這種增長。有關一些詳細資訊,請參閱

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