web-dev-qa-db-ja.com

keepassランダムパスワードジェネレーターは完全に安全で信頼できますか?

パスワードの生成にkeepassを使用しても安全ですか?たとえば、私のアカウントでは、keepassで生成されたパスワードを使用しても安全ですか?将来のkeepassマスターキーをkeepassで安全に生成できますか?どの方法を使用していますか? WindowsおよびLinux用のKeepass 2.30。

不条理に妄想的なKeepassユーザーに感謝します。

12
keepass_fan

tl; dr:はい、それはかなり安全です。

攻撃者は、KeePassを使用していることを知っている場合、パスワードジェネレーターの標準設定を使用していると想定することもあります。これにより、長さと文字セット[a-zA-Z0-9]がわかります。これにより、長さが分からない場合や、特殊文字も使用することが予想される場合よりも、クラックが少し簡単になります。しかし、その知識があっても、生成されたパスワードはまだ遠く、far強すぎてブルートフォースになりません。

しかし、パスワードはどの程度正確に生成されますか?それが予測可能な疑似乱数ジェネレータである場合、それは攻撃ポイントである可能性があります。

KeePass 2.30のソースコード を見ると、パスワードジェネレータはKeePassLib\Cryptography\PasswordGenerator\PwGenerator.csに実装されているようです。 KeePassLib\Cryptography\CryptoRandomStream.csからのクラスCryptoRandomStreamを使用し、ストリーム暗号 Salsa2 を乱数ジェネレータとして使用します。

パスワードジェネレーターは次のように機能します。

  1. 乱数が生成されます(PwGenerator.cs 65行目)。標準 。NETフレームワークのRNGCryptoServiceProviderCryptoRandom.cs)を使用します。
  2. 生成された乱数は、可能な場合は追加のエントロピーと組み合わされます。私はこのエントロピーがどこから来るのかわからなかった(通常、マウスの動きやキープレスなどの予測不可能なユーザー動作がこれに使用されます)が、エントロピーが常に利用可能であるとは想定されていません。
  3. SHA256ハッシュは、エントロピー付きのランダムな値から生成されます(CryptoRandomStream.cs 114〜118行目)。
  4. そのハッシュは、Salsa20ストリーム暗号の暗号化キーとして使用されます(CryptoRandomStream.cs行119)。
  5. ストリーム暗号は、その出力を入力として繰り返し供給することにより、乱数ジェネレータとして使用されます(Salsa20Cipher.cs行176-196)。

パスワードを予測するには、Microsoftの暗号化乱数ジェネレータを解読し、エントロピー(使用されている場合)を予測する必要があります。

あるいは、誰かがSalsa20暗号を解読した場合、以前のパスワードからパスワードを予測できます。 Wikipediaによると、「2015年現在、Salsa20に対する攻撃は発表されていません」

よろしく、非合理的に勤勉なソフトウェア開発者。

19
Philipp