我想在我的一個C#.NET應用程序中加入和解密文件。該方案很簡單:用戶A向用戶B發送AES256加密文件。明文密碼在不同的頻道(例如電話或其他)上交換。使用Rfc2898DeriveBytes從明文密碼創建安全密碼時鹽的重要性
根據我的理解,我應該使用Rfc2898DeriveBytes將用戶的明文密碼轉換爲使用大概10,000輪的更安全的密碼。 (見this article)。
我不明白鹽在我的場景中的作用。通常使用哈希密碼來防止字典攻擊。但在我的情況下,PBKDF2算法通過增加PBKDF2輪次所需的額外計算來彌補短或簡單猜測明文密碼的弱點。
如果我選擇一個隨機鹽,那麼接收者也需要知道鹽也是爲了正確解密。如果我使用恆定的鹽,那麼黑客可以輕鬆地對我的代碼進行逆向工程,並使用恆定的鹽來運行暴力攻擊(儘管由於PBKDF2迭代,它們會非常緩慢)。
從我的理解,我別無選擇,只能在我的場景中使用恆定的鹽,並執行一個很好的明文密碼規則來彌補恆鹽的弱點。我的假設是否正確?
AES應該有隨機IV(我假設他正在使用除ECB之外的其他一些不安全的模式)。 Salt正在阻止使用彩虹表從哈希中獲取密碼,但攻擊者無法在此方案中獲取此哈希,因爲它僅用作加密密鑰。 –
@MaciejS攻擊者可以預先計算來自普通密碼的大量密鑰,並且可以針對任意數量的消息使用該表,而無需進行進一步的工作。 – ntoskrnl
你是對的,應該用鹽來防止這種攻擊。 –