Cryptanalysis
儲存純數據長度是否會洩漏有關加密方案的基本資訊?
考慮下面的函式:
def dec args=password, iv, encrypted decipher = OpenSSL::Cipher.new('aes-128-cbc') decipher.decrypt decipher.padding = 0 decipher.key = Digest::SHA256.hexdigest(password) # just for simplicity; use PBKDF2 for real applications decipher.iv = Base64.decode64(iv) plain = decipher.update(Base64.decode64(encrypted)) + decipher.final return plain end
該函式將正確破譯文本,但可能會添加額外的不可見字元,具體取決於原始純文字的大小。然後,必須與和
length
一起儲存在文件中,解密函式變為:encrypted``iv
def dec args=password, iv, encrypted, length decipher = OpenSSL::Cipher.new('aes-128-cbc') decipher.decrypt decipher.padding = 0 decipher.key = Digest::SHA256.hexdigest(password) # just for simplicity; use PBKDF2 for real applications decipher.iv = Base64.decode64(iv) plain = decipher.update(Base64.decode64(encrypted)) + decipher.final return plain[0..(length-1)] end
我懷疑在加密文件中儲存長度是一個加密弱點。解決它的正確方法是什麼?
我懷疑在加密文件中儲存長度是一個加密弱點。
它不是。加密通常被認為是安全的,只要密文允許攻擊者推斷出除了其大小之外的任何其他內容。明文長度不被視為秘密。
雖然這不會保護使用一個符號塊大小加密的未填充的“是”/“否”消息,但這是整個通信方案的弱點(使用兩個字元串別名來傳達布爾值),而不是算法。對於實際的塊大小,長度也可用於辨識影片文件。但這完全超出了加密保護的範圍。
如果您必須保護明文長度,請使用任何安全加密方案的填充。