【今さら聞けない?】なぜパスワードの桁数や文字種をバラしてはダメなのか【尼崎からの教訓】
尼崎市での住民情報入りUSBメモリ紛失事件。問題は”パスワード”
参考URL:全市民46万人余の個人情報入ったUSBを紛失 兵庫 尼崎市が発表(NHK)
上記で紹介した記事は、尼崎市で起こった情報漏洩事件について、市が行った記者会見の内容です(映像アリ)。
事件そのものは、46万人の全市民の氏名、住所、連絡先、住民税の納付状況、生活保護の受給に関する情報などを記録されたUSBメモリーを紛失した、というものですが、その記者会見での市の担当者による、USBメモリ内の情報を守るために掛けられたパスワードについての説明が、さらに話題を呼んでいます。
パスワードの”ヒント”になる情報を公開してはダメ
紛失自体も大問題ですが、さらにインターネット関連の専門家から問題視されている点は、記者会見で市の担当者が「パスワードの桁数」や「使われている文字の種類」を記者への質問への”回答”として、バラしてしまったことです。これはセキュリティ上、非常にまずい行動でした。
これだけの”ヒント”があれば、悪意を持った人間がパスワードを突き止めようとした際に、”正解”を絞り込むまでの時間を大幅に縮めることができてしまいます。担当者の方は「これだけの対策をしているから安心して下さい」といった趣旨で発言したのだと思われますが、実際には敵に塩を送り、墓穴を掘っているのと同じです。
今回の記事では、それが何故「ダメ」なことなのかを、具体的に解説していきます。
そもそもパスワードの役割は”時間稼ぎ”、相手に迷わせるほど良い
パスワードとは「その言葉や文字の組み合わせを知っている人だけが許可を得る合言葉」です。ではなぜそれで機密や財産を守れるのでしょうか。パスワードというセキュリティシステムが効力を発揮する”キモ”は、”正解を突き止めるまでに時間を掛けさせる”という点です。つまり、基本的に「守りたい側と破りたい側での、時間の勝負」なんですね。
例えば、上の画像のような4桁のダイヤル式ロック(自転車用)であれば、番号を知らない人間がカギを開けようと思った場合「最大10,000回の試行が必要(0000~9999)」「しかも人間の手で回すという前提」から、番号を総当りで調べたとしたら正解にたどり着くまでに最低でも数時間は掛かります。
すると、泥棒がカギを開けようと試行している途中に、自転車の持ち主や駐輪場の管理人や通行人などに発見される可能性が高くなり、結果として防犯になるわけですね。
逆に言えば、誰にも見られる恐れが無い場所で、いくらでも試行が出来る状況であれば、この程度(4ケタの数字の組み合わせ)は、人間の手でもいつか突破されてしまうものです。
そしてインターネット上でのパスワードを巡る攻防は、基本的に「誰にも見られる恐れが無い場所」で行われますので、「どこまで時間を稼ぐことが出来るか」という事について、よりシビアに、慎重に考えなければなりません。
先ほどの自転車でのダイヤルロックと違って、誰かが泥棒を発見するまで、という程度の時間稼ぎでは足りないので、相手が諦めるほどの時間を稼がなければならないんです。
コンピューターなら総当り攻撃はより短時間で出来る。
以下は、アメリカのサイバーセキュリティ会社が2020年に公開した、コンピューターを使用した際に、パスワード特定までに掛かる所要時間の”目安”です。
例えば「4桁の数字の組み合わせ」は、下表の「4」-「Numbers Only」の欄なので「一瞬(Instantly)」で正解が判明するという事です。「8桁のアルファベット小文字のみ」であれば、「8」-「Lowercase Letters」の欄なので「5秒」で正解が出てしまうわけですね。え?そんなに早いの?と思われるかもしれません。そうです、早いんです。
みなさんが使用している各種のパスワードは、どのレベルですか?
欲を言えば上の表で「1 month(1ヶ月)」以上、最低でも「3days(3日)」ぐらいは時間を稼げるパスワードにしたいところです。攻撃者が諦めたり、他に標的を移す可能性が高くなります。
桁数が不明なら、さらに時間を稼ぐことが出来る
さてここで、仮に「最大〇〇ケタのパスワード」を破る側の、ハッカーの気持ちになって考えてみましょう。
上記の表での所要時間は、「パスワードの桁数と、使われている文字種が分かっている」場合のものです。桁数と文字種が分かっていれば、その組み合わせだけを試せばいいので、所要時間はそれ”だけ”で済みます。
しかし、桁数も文字種も分かっていない場合は、表の左上の「4ケタの数字の場合」から「〇〇桁の小文字・大文字・数字・記号」のパターンまで、全てを試す必要があります。つまり、上記の表の所要時間を全て足しただけの時間が掛かります。(※厳密には重複などもありますが、大きな考え方としてはそのようになります)
先に述べたように、パスワードの防御機能は「時間稼ぎ」ですので、桁数や使用している文字種をバラしてしまうということは、防御力を自分から削っているのと同じなんですね。
意味を持っている単語を使っている場合は、超危険!
なお、ここまでは、パスワードが意味の無い言葉の羅列である、という前提での話になります。例えば「hiof2w$678#」など、全く予想もつかない文字列であること。これが、上記の表においても、大前提になっています。
そうすると、攻撃者にとっては全くの手がかりがありませんので、0000から9999まで、aaaaからzzzzまで、といったような「総当り攻撃(ブルートフォースアタック)」しか出来ることがありません。これはこれで脅威ではあるのですが、守る側としても、時間を稼ぎやすいやり方なんですね。この土俵で攻撃者と戦うのがセオリーです。
ですが世の中の多くの方は、パスワードを決める際に「自分の名前、地名、年月日、キーボードのキーの並び」などの意味のある言葉の組み合わせを使ってしまいがちです。そうすると、たとえ桁数が10ケタ以上であっても、複数の組み合わせであっても、一瞬から数分で解読が出来てしまいます。
例えば「Miyagi2022」「12345qwety」「hirayama0805」などのパスワードは、10ケタを超えていても、数字とアルファベットを混ぜていても、防御力としてはほぼゼロに近いわけです。「こんなパスワード分かるわけない!」と思っているのは、自分だけかもしれませんよ。
総当り攻撃(ブルートフォースアタック)に対して、そういったアプローチでの方法を「辞書攻撃(ディクショナリアタック)」と呼び、こちらでの解読や攻撃も、世界では日常的に行われています。
【まとめ】パスワードを決める際に守りたいルール
ここまでの内容から、「正しいパスワード」「セキュリティ上強固なパスワード」をまとめますと…
- 10 ケタ以上
- 意味のある単語は使わない。キーボードの並びも使わない。完全ランダム推奨
- 大文字、小文字、数字、記号を、複数混ぜる
- 上記を全て満たすもの
…といった事になります。セキュリティ意識の高いウェブサービスなどでは、パスワード設定時に始めからこれらのルールを求めている所も増えてきました。
が、特に日本の企業などでは多いですが、未だにパスワードの条件を「6文字以上」のみ、としているサイトなども、珍しくありません。そういった場合でも、「わあい、簡単でラクな所で良かった」などと考えず、自分で考えて堅牢なパスワードを登録するようにしましょう。
関連記事:こんなパスワード管理をしていませんか?やってはいけないパスワード管理方法TOP3【実録】