您可以使用帶有 XOR 的 SHAKE256_XOF 來製作流密碼嗎?
SHAKE256_XOF是基於 SHA3-512 的可擴展輸出函式。SHAKE256_XOF 可用於創建具有 256 位安全性的無限長位字元串。例如:
from Crypto.Hash.SHAKE256 import SHAKE256_XOF shake = SHAKE256_XOF() shake.update(b'key' + b'nonce') for _ in range(10): print(shake.read(16).hex())
18068a140f4c0f1f85f17da13b049155 1fc6d25b11833480dae5fba50b8b73db bf4284c0d9a32b9b374ae82d5c0514c6 ...
SHAKE256_XOF 是一個偽隨機函式,因此它的輸出與明文進行異或應該會產生密文。我的理解是,這將是一個不對稱的流密碼。除了可能之外,我很難找到這方面的研究,Bruce Schneier說: “我知道沒有對特定單向雜湊函式作為分組密碼的密碼分析分析;在你信任其中任何一個之前等待這樣的分析。” 最後,這個密碼可以通過 SHA3-512 作為種子的一部分進行身份驗證。這導致了最終的算法:
from Crypto.Hash.SHAKE256 import SHAKE256_XOF from Crypto.Hash import SHA3_512 xor = lambda lhs, rhs: bytes(a ^ b for a, b in zip(lhs, rhs)) plaintext = b'plaintext' key = b'key' nonce = b'nonce' digest = SHA3_512.new().update(plaintext).digest() e_shake = SHAKE256_XOF().update(key + nonce + digest) cipher_text = xor(e_shake.read(len(plaintext)), plaintext) d_shake = SHAKE256_XOF().update(key + nonce + digest) d_plaintext = xor(d_shake.read(len(cipher_text)), cipher_text) print(d_plaintext)
在Cryptographic Sponge Functions (本答案簡稱 CSF)的第 3.2 節“海綿函式的使用模式”中,作者列出了用於不同目的的幾種“操作模式”,流密碼應用程序就是其中之一。這是表格:
有沒有關於使用 SHAKE256_XOF 作為密碼的文獻?
好吧,這篇論文已經涵蓋了你。
這種方法在安全性方面與 AES256 相比如何?
這種方法在野蠻力量方面具有同等強度。無論是計數器模式 (CTR) 還是密碼回饋模式 (CFB),SHAKE 流密碼的周期都比 AES-256 更長。
這種密碼有什麼弱點或缺點?顯然,使用 SHA3-512 對其進行身份驗證意味著它不能一次有效地加密,並且解密需要計算 SHA3-512 摘要來進行身份驗證(我正在學習經過身份驗證的加密是如何工作的,因此歡迎提出建議和回饋)。
實際上,如果您查看“雙工”模式(CSF 論文也涵蓋了該模式),AEAD 實際上更容易一次性實現。
它是否比 AES256 提供任何可能的優勢?
我提到了 2(週期長度,1-pass)。它還具有比固定寬度分組密碼更好的參數可擴展性,因此我將其視為第 3 個。
AES256 具有 128 位抵抗理論量子攻擊的能力。這個密碼是否會保持對
min(key_length/2, 256)
SHAKE256_XOF 所具有的理論量子攻擊的抵抗力。可能吧,但我數學不太好。