パスワード生成関連のメモ
結論はExtended Password Generatorを使えばよさそう、ということです。
いろいろなサービスで必要となるパスワードを考えるのが面倒で、ジェネレータ(生成)を使っている場合が多いと思います。
しかし、「生成」は数式を用いた計算結果であるため、何もない所から生成することが出来ず、生成法によっては、パスワードの強度に問題が出る場合があるようです。
- C言語のrand()関数で作られている場合
- Javascriptで作られている場合(2012年1月現在)
と言われても、私は専門知識が無く、詳しい話は分からない部分がほとんどです。じゃあどうすればいいの?というお話になります。
下記の参考サイトより、opensslを使って、OS由来の乱数生成機(CryptAPI)を使用すれば、安全な乱数で作った文字列(パスワード)が取得できることがわかりました。
Windows上で動作するアプリケーションを探したところ、Extended Password Generatorというソフトが見つかりました。
Values of seed and key are getting from OS CryptoAPI.
との事なので、乱数の種も鍵もWindowsのCryptoAPIからということが明記されています。
参考サイトさんに感謝
- 無線LANのWPA/WPA2-PSKを総当たりで突破する「Pyrit」の実際の解析速度と自衛手段について – GIGAZINE
- [crypto] Pyritによる攻撃から無線LANネットワークを守る方法
- OpenSSL付属のopensslコマンドをrandオプションを付けて実行すれば、OSの乱数生成機由来の暗号学的に安全な乱数で作った文字列を取得できます。
- C言語ののrand()関数などで作れる疑似乱数には、乱数種(長くて64bit)以上の乱雑さがないので、これに由来する鍵は使ってはいけません。参照: 擬似乱数
- アルファベット小文字で8文字の鍵を全部調べるのにかかる時間を計算してみると: 26^8 / 1e+6 / (3600*24) = 2.4日となり、全部調べる必要がある場合は最悪の場合で、半分調べれば鍵を見つける可能性が50%になるので、平均1.2日で破ることができます。
- PHP 5.3で共通鍵暗号(openssl)を使用する | へびにっき
- (実際に試していないが、OpenSSLはWindowsのCryptAPIから乱数を得ている)。
- JavascriptのMath.random()でユーザートラッキングができるという話 – kogelab.memo
- Math.random()のシードによる初期化はブラウジングセッションごとに1度しか行われないと。
- 色々調べたところ、各ブラウザは(多分IEも)線形合同法による擬似乱数を使っていると。
- Password Creator TypeBの詳細情報
- マウスの移動パターンを使用した完全にランダムなパスワード生成。(ログ機能によりどのように生成されているか確認できる)







