簡體   English   中英

恆鹽加密AES的安全性

[英]Security of AES encryption with constant salt

我有一個用C#編寫的編碼應用程序,用戶可以在其中選擇加密消息。 使用類我一直這個答案 ,而且事實證明我在好公司是因為我發現了幾個 地方 在線 使用 精確的 相同的代碼 (其中之一是Netflix的開源平台 )。

但是,對該答案的評論(以及對該答案的后續編輯)使我相信此方法是不安全的。 我選擇在這個問題的答案中使用班級。

如果使用恆鹽,AES加密的安全性如何? 打破這種方法有多容易? 我承認我在這方面的經驗很少。

AES是一種分組密碼。 分組密碼的輸入密鑰和明文 分組密碼通常用於分組密碼操作模式 所有安全操作模式均使用初始化向量或IV。 否則,相同的純文本將被加密為相同的密文(用於相同的密鑰),這將泄漏信息。

AES或操作模式不使用鹽。 它通常用作密鑰派生功能(KDF)的輸入,尤其是基於密碼的密鑰派生功能(PBKDF)。 NET的Rfc2898DeriveBytes實現了PBKDF2功能,如RFC 2898:“ PKCS#5:基於密碼的密碼規范2.0版”中所定義

如果在PBKDF2中使用靜態鹽,則將獲得與輸出相同的密鑰(對於相同的迭代次數)。 現在,如果您泄漏了生成的密鑰,那么您所有的密文都將受到攻擊。 而且,如果您使用多個密碼,那么攻擊者將可以建立彩虹表; PBKDF2的工作因素將變得不那么重要; 攻擊者只需建立一張表,然后對所有可能的密文嘗試所有生成的密鑰。

因此,由於鹽實際上並未用於AES,因此在安全性上沒有多大差別。 但是,這仍然是一個可怕的錯誤,甚至比使用PBKDF2 / Rfc2898DeriveBytes的默認迭代計數還要糟糕。


請注意,每天都有許多人犯下可怕的安全罪。 有很多很多錯誤的人並不能告訴你你在“好公司”中。 有289個投票只是告訴您,基於投票計數,不應信任有關加密的SO答案。

有鹽是有原因的。 這樣就可以對同一輸入進行不同的加密。 如果攻擊者真的堅持,他可以找到一些模式,這些模式可以在加密過程中不斷重復,而不會加鹽,最終可以更輕松地獲取您的密鑰。 攻擊者仍然必須非常努力。 使用恆鹽等於根本不使用鹽。 強烈建議使用它,因為它對解密過程沒有影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM