Password-Based-Encryption

充氣城堡和莎莎 20

  • November 20, 2016

我想在 Java 中使用 Salsa 20,所以我下載了 Bouncy Castle,然後……這對我來說毫無意義。我已經讓它工作了,但我的大多數選擇基本上都是隨機的。但我看不出有什麼東西可以引導我走上正確的道路。該界面CipherParameters幾乎可以接受任何廢話,並且 257 位的密鑰大小可以完美執行。

private static StreamCipher newCipher(byte[] password, byte[] salt) {
   int iterations = 50000; // really?
   PBEParametersGenerator generator =
       new PKCS5S2ParametersGenerator(); // really this one?
   generator.init(password, salt, iterations);
   Arrays.fill(password, (byte) 0);
   final CipherParameters cipherParameters =
       generator.generateDerivedParameters(256, 64); // would 257 be better? :D
   final StreamCipher result = new Salsa20Engine();
   result.init(true, cipherParameters);
}

正如我所寫,它有效,但這是正確的方法嗎?尤其,

  • 50000次迭代的PKCS5S2是個不錯的選擇嗎?
  • 密碼無處儲存,所以我假設,唯一的執行緒是攻擊者可以同時訪問明文和密文,將它們異或在一起,並使用它來驗證他們的密碼猜測。我對嗎?
  • 關於實際的 POV,有沒有辦法驗證我沒有做任何嚴重的錯誤(例如切換密碼和鹽或使用不適當的方法)?

我上面的程式碼是一個迷人的巨大阻尼堆……你知道的。

generator.init(password, salt, iterations);
Arrays.fill(password, (byte) 0);

BC 無法複製password數組的內容,因此我在使用後清除密碼的安全性“改進”,在使用**前清除它並導緻密碼全為零。

順便說一句,郵件列表並不比這個網站好。沒有答案。

引用自:https://crypto.stackexchange.com/questions/19614