パスワードって何文字必要なのか
パスワードって何文字必要なのか、8文字以上で数字や記号も混ぜましょう!って話もあるけど、アルファベット小文字だけでもいいじゃんと考えています。
単語や誕生日など推測できる文字列を使わないとして、何度でも試行できる環境だとすると、結論からいうとこんな感じです。
アカウントロック機能があるなど、何度も試行できない場合は、8文字くらいでもいいんじゃないかな~。根拠はない。
はい、OK!って人はここから先は読み飛ばして問題ないです。そうしましょう。
これから下は小難しい話が続きます。
なんで~?な人や、気になる人はどうぞ!
解析にかかる時間が何年~という話はよくありますが、別の観点です。
まだまだ使われているだろうSHA1の出力でさえ128bit、そしてAES128bitなんかだと鍵長は128bitです。
SHA1の出力、AES128bitの鍵としての入力は128bitあるんです。
アルファベット小大文字と数字と記号を全部使うとして1文字はlog2(93)=約6.5bit分くらいの情報量になります。
そして8文字のパスワードを設定するとすると、
log2(93)x8=約52ビット
SHA1だと理想的には128bit分の出力が期待されますが、52bit分しか出力の種類がありません。
1bit減ると半分になりますから、半分の半分の半分の・・・。
AES128bitの鍵も同様ですね。はい。無念。
zipや7zなどの暗号鍵は、ハッシュしたりでそのままパスワードの文字列が使われるんじゃないけど、8文字程度だと元の入力の種類が52bit分しかないので、まぁ同じようなものです
そんなわけで一番最初に書いたパスワードの必要文字数はざっくりこんな感じで計算できます。
まあ、記号なんてシフト押さないと使えないのは面倒でなかなか使おうと思わないので、ブルートフォースアタックする人はあえて使わないかもしれないし、「`」や「;」なんかは、何か別のバグを踏んじゃうんじゃないかとドキドキしてしまいます。
AES128bitよりAES256bitのほうが安全!と思っていても、アルファベット小大文字と数字と記号で20文字以下だと安全性は変わらないでね。後者に設定してもパスワードが短いと意味ないです。
最後に、暗号化されたzipファイルなんかは、入手さえしてしまえばいくらでもパスワードを試せます。これは仕方ないのですが、上記の必要文字数を設定しておくしかないです。AES256bitできちんと安全なパスワードを設定すれば、今のところこれ以上の良い方法はない気がする。
WEBサービスのパスワードは、自動化しても1度試すのにある程度時間がかかるので、そんなに試せないかもしれませんが、上記ぶんの文字数は設定しておきたいところ。
一定回数でアカウントロックされる機能がある場合は、ん~、よく分からないけど8文字くらいでもいいんですかね。何度も試せないんで。
アカウントロックのあるサービス、たとえば銀行のオンライン口座なんかは別の心配しちゃいますね。〇生銀行なんかは店番号と口座番号に加えてパスワード相当を2つ入れる仕組みです。よって誰かの支店と口座番号が分かれば、勝手に何度か間違えてロックできるので、月の最後の平日の午後とかにやられると泣けます。
支店と口座番号じゃなくてログインIDなんかだと大丈夫ですが、パスワードと同じくらい、秘密にしておきたいところです。