異なるバックグラウンドを持つ者同士でお互いの専門分野の初歩的な内容を紹介し合う取り組みを行っている.例えば労務が労働法や社会保険について話したり,法務が知財や契約について話したりしている.本稿では私が IT の専門家としてパスワードの話をするための資料を公開する.

免責事項

本稿は IT に明るくない人に「なるほど」と思ってもらうことを目的として作成されている.有識者からすると首をかしげる内容が含まれていることを予め断っておく.

はじめに

パスワードを作成する際には例えば「X 文字以上」「英数字混合」といった要件を提示されることがある.これらの要件は複雑な (強固な) パスワードを作成するために設けられているが,ではなぜ「X 文字以上」なのか「英数字混合」なのか理由が説明されることは多くない.本稿はこれらの「なぜ」についての考え方を知ることを目的とする.

まとめ

  • どんなパスワードでも時間をかければ解読できる
  • 強固なパスワードとは解読までに時間がかかるパスワードのことである
  • パスワードの考え方は時代とともに変化する

パスワードの目的

そもそもパスワードを使う目的は「認証」である.

ショッピングサイトを考える.もしもパスワードがなければ,容易に他人になりすまして買い物をしたり登録情報を変更したりできてしまいよろしくない.なりすましを防ぎ,サイトの利用者が間違いなく本人であることを確認するためにパスワードによる認証を行っている.

認証という目的を考えると,パスワードは他者から推測されづらいものを設定することが求められる.世の中には他者のパスワードを解読して悪さをしようとする人が大勢いるためである.悪意のある第三者の攻撃から身を守るためにはどのようなパスワードが求められるかをこれから考えていく.

パスワードとその解読方法 (ダイヤル錠を例に)

身を守るためには攻撃方法 (解読方法) を知ることが有用である.ダイヤル錠を例にパスワードと解読方法を考える.ダイヤル錠は 4 桁の数で構成され,各桁の取り得る値は 0 から 9 の 10 通りとする.

パスワードの取り得る値

場合の数は 10^4 = 10,000 通りである. 0000 から 9999 の 10,000 通りのパスワードのうち,正しい 1 通りの値を入力すると解錠される.よって,でたらめにパスワードを入力して解錠できる確率は 1 / 10,000 となる.

総当たり攻撃

次に,パスワードを解読する方法を紹介する.総当たり攻撃はもっとも単純な方法である.その名の通り,パスワードの取り得る値を端から端まで順に試す方法である.今回のダイヤル錠の例では 0000, 0001, 0002, …, 9997, 9998, 9999 と順に試していく.

運がよければ 1 回目で解錠できるが,最悪の場合は 10,000 回目に解錠できる.パスワードの試行に 1 回あたり 5 秒かかるとすると,最短で 5 秒,最長で 50,000 秒 (約 14 時間) で解錠できる.平均すると約 25,000 秒 (約 7 時間) で解錠できる.

辞書攻撃

辞書攻撃はその名の通り辞書に載っている言葉を用いて解錠を試みる方法である.意味のある言葉を使う方法と言い換えることもできる.人間がパスワードを設定する場合,パスワードを忘れないように意味のある言葉 (名前や生年月日など) を使うことが少なくない.辞書攻撃は覚えやすいパスワードに対して有効に働く.

例のダイヤル錠は 4 桁の数を表現できるため,意味のあるパスワードの例として日付が考えられる. 1 月 1 日を 0101, 12 月 31 日を 1231 といった具合に設定できる.もしもパスワードに日付が設定されていたとすると,パスワードの取り得る値は 366 通りとなり,本来の 10,000 通りと比較して小さくなる.解錠にかかる時間は最短で 5 秒,最長で 1,830 秒 (約 30 分) となり,平均すると約 900 秒 (15 分) で解錠できるようになる.総当たり攻撃の平均所要時間 7 時間と比較して大きく短縮された.


この他にもパスワードの解読方法は色々あり,解読方法の特性とパスワードの設定方針が合致すると短時間で解読できることがある.

強固なパスワードを考える

現実的に無限に長いパスワードを設定することはできないためパスワードの組み合わせは有限個となる.有限である以上,パスワードは時間さえかければいつかは解読される可能性がある.ダイヤル錠の例では最長で 14 時間かければ解錠できた.

ダイヤル錠を解錠するための 14 時間は現実的な時間だったため「強固なパスワードでない」と言える.しかし,もしも解錠に 1 億年かかるとすればどうか.たとえ理論上は解錠できるとしても,解錠に現実的でない時間を要するならそれは解錠できないことと同義であり「強固なパスワードである」と考えられる.

では,具体的にどのようなパスワードが強固と言えるのか,本稿の冒頭で触れた「X 文字以上」「英数字混合」といった要件とともに考える.

パスワードの複雑さ

パスワードの要件ごとに,それぞれ具体的にどのくらい複雑なパスワードを作成できるのかを下表にまとめた.「場合の数」は,その桁数のパスワードが何通りの値を取り得るかを示している.

使用できる文字の種類使用できる文字の数場合の数(4 桁のパスワード)場合の数(6 桁のパスワード)場合の数(8 桁のパスワード)場合の数(10 桁のパスワード)
英字 (大文字小文字区別なし)264.57 × 10^53.09 × 10^82.09 × 10^111.41 × 10^14
英字 (大文字小文字区別あり)527.31 × 10^61.98 × 10^105.35 × 10^131.45 × 10^17
英字 (大文字小文字区別あり) + 数字621.48 × 10^75.68 × 10^102.18 × 10^148.39 × 10^17
英字 (大文字小文字区別あり) + 数字 + 記号937.48 × 10^76.47 × 10^115.60 × 10^154.84 × 10^19

例えば 4.84 × 10^19 は日常生活では目にすることのない大きな数である.とはいえ有限の値であるため時間をかければ解読できる.次に,この膨大な数のパスワードの中から当たりを引き当てるまでの所要時間を考える.

パスワードの解読時間

前掲の表で示したパスワードについて総当たり攻撃による解読時間を計算する.色々と考慮不足の計算のためあくまで参考値である.

  • 解読に使うコンピュータの CPU クロック周波数は 2.0 GHz とする
    • 1 秒間に 2.0 × 10^9 回の作業ができる
  • パスワードを 1 つ試行するために必要な作業数は 100 とする
    • 2.0 GHz の CPU を使うと 1 秒間に 2.0 × 10^7 回試行できる

以上の条件で考えると,パスワードの場合の数を 2.0 × 10^7 で割ると総当たり攻撃で全件試行した場合の秒数を算出できる.計算結果を下表に示す.時間の単位は適宜変更している.

使用できる文字の種類使用できる文字の数所要時間(4 桁のパスワード)所要時間(6 桁のパスワード)所要時間(8 桁のパスワード)所要時間(10 桁のパスワード)
英字 (大文字小文字区別なし)260.01 秒7.7 秒1.5 時間40.8 日
英字 (大文字小文字区別あり)520.2 秒8.2 分15.5 日114 年
英字 (大文字小文字区別あり) + 数字620.4 秒23.7 分63.2 日665 年
英字 (大文字小文字区別あり) + 数字 + 記号931.9 秒4.5 時間4.4 年38,300 年

上記の結果はあくまで机上の空論に過ぎないが,おおよそ「10 文字以上かつ英数字混合」で設定すれば解読に年単位の時間がかかるという傾向が見えてきた.

基本的な考え方を押さえたところで,実際にパスワード解読を試みた記事を紹介する.

これらはいずれも数年前の記事のため,当時よりも技術が進歩している現在では記事で示された時間よりも高速に解読できるようになっていると思われる.

後者の記事において暗号化方式の違いによって解読時間に大きな差が出ているように,実際のパスワード解読では色々と考慮すべきことがある.よって「この要件を満足したパスワードは強固である」と言えるような要件は明示できない.とはいえ,解読に年単位の時間がかかる要件を一つの指標とすることはできるかもしれない.

パスワードの考え方は時代とともに変化する

パスワードは解読できるため,コンピュータや解読方法の性能向上に伴い解読されづらいパスワードも変化する.以下に現在では廃れた考え方を紹介する.

  • パスワードを定期的に変更するとよい (現在は NG)
    • 解読されていないパスワードは変更する必要がないため
    • 悪意を持った人にパスワード変更パターンを見抜かれる可能性があるため
  • 英数字を互いに置き換えるとよい (1, l, I など) (現在は NG)
    • 置き換えられている前提で攻撃されると無意味のため

次に,近年推奨されているパスワードの作成方法を紹介する.文章や複数の単語をまとめて一単語として扱うと覚えやすさと強固さを兼ね備えたパスワードとなると言われている.例えば “crazylittlethingiscalledlove” といった具合である.ただし,この方法も将来的に非推奨となる可能性があることには注意が必要である.

以上は覚える必要のあるパスワードが求められた場合の話である.今時はパスワードマネージャがあるため,基本的にパスワードは英数字記号を含んだ長く複雑なものをパスワードマネージャで設定・管理することが望ましい.

パスワードだけでセキュリティを担保することは困難

解読に時間がかかるパスワードを設定しても,運が悪ければ一瞬で解読される可能性がある.セキュリティ担保のためにはパスワード以外の認証方法を併用したり,そもそもパスワードを解読させない (試行回数に制限を設ける) ようにする仕組みを用いるとよい.

前者の例として多要素認証がある.仮にパスワードが解読されたとしても,別の要素による本人確認が待ち構えているため攻撃者は容易にログインすることはできない.

後者の例として金融機関の ATM がある.一定回数パスワードを間違えるとロックされてパスワードを入力できなくなります.ロックを解除するためには窓口で本人確認をする必要があるため,攻撃者からすると厄介なシステムと思われる.

おわりに

本稿ではパスワードの考え方を紹介した.繰り返しになるが,時代の変化 (技術の進歩) によって求められるパスワードの要件は変化する.単に「X 文字以上」「英数字混合」といった要件を覚えただけでは変化に対応することは難しいと思われる.一方で,なぜその要件が求められるのか理由を知れば,例えば「10 年前と現在のコンピュータの性能比がこれくらいのため,現在求められるパスワード長はこれくらいだろう」と自分で考えることができるようになる.

数学で公式を覚えるよりも公式の導出方法を身に付ける方が理解が深まり応用が利くことと同様に,身近な IT について「なぜ」の部分に興味を持つと世界が広がると思われる.