我可以用其他分組密碼模式模擬迭代的 AES-ECB 嗎?
我正在嘗試使用 Web Crypto API ( http://www.w3.org/TR/WebCryptoAPI/#algorithm-overview ) 編寫一些程式碼,該 API 僅提供 AES 的一些分組密碼模式,有意排除AES-ECB (大概是因為它通常不是任何事情的好選擇)。
我需要使用 AES-ECB-nopadding 作為密鑰加強步驟的一部分,即迭代 6000 多次以在解密中引入一些恆定的額外時間,從而得到一個加強的密鑰,我可以使用它來解密其餘數據。我的程式碼提供與執行此操作的現有密碼系統 (Keepass) 的兼容性,因此我無法選擇使用哪些步驟或算法。
鑑於缺乏本機支持,我是否可以使用其他分組密碼之一進行模擬,或者我是否必須載入包含 ECB 分組密碼的第三方庫?
到目前為止,我嘗試使用帶有零計數器的 CTR,並且從不增加計數器。由於一些技術限制(它不支持這些參數),這失敗了。
我認為使用具有零 IV 的 CBC 並且一次只做一個塊可能會起作用。這會起作用(理論上)嗎?
首先讓我們承認這是一個可怕的黑客 - 你真的應該找到一種方法來更直接地做你想做的事,否則將來會冒程式碼維護問題和可能出現的錯誤的風險。
其次,雖然問題不在於您的關鍵強化步驟,但您似乎應該詢問安全性。有很多好的密鑰派生方法,我不認為迭代加密是一個好的方法。
一個塊CBC
讓我們看一下 CBC 在一個塊上的代數結構:
$ \text{cbc}(v, p) = E(v \oplus p) $
因此,如果 $ v = 0 $ $ \text{cbc}(0,p) = E(0 \oplus p) = E(p) $ 這與歐洲央行相同。
點擊率
CTR 的想法失敗了,因為明文永遠不是由密碼加密的塊的一部分:
$ \text{ctr}(v, p) = E(v) \oplus p $
$ \text{let } v = 0 $
$ \text{ctr}(0,p) = E(0) \oplus p $