パスワードはどのように解読されるのですか?

映画で描かれるような派手なハッキングによってアカウントが乗っ取られることは稀です。現実においてパスワードが侵害される経路は、主に三つのいずれかに分類されます。第一は「解読(クラッキング)」であり、サービスから流出したパスワードハッシュのデータベースなどを手元に置き、推測候補を次々と照合して割り出されます。第二は「盗難」であり、偽のログイン画面に入力させられたり、端末内のマルウェアによって抜き取られたりします。そして第三は「使い回し」であり、過去のデータ侵害で漏洩した認証情報を入手した攻撃者が、ユーザーが他のサービスでも同じ文字列を使っていることを見越して手当たり次第に試行します。この違いを理解することは重要です。侵入経路によって有効な防衛策が全く異なるからです。本記事では主要な攻撃手法を解説し、それぞれに対する有効な防御策を示します。

流出データに基づくパスワードの使い回し攻撃

毎年多くのオンラインサービスで不正アクセスによるデータ侵害が発生しており、流出したユーザーデータベースが闇市場で売買されたり、ネット上に無償で公開されたりしています。攻撃者はあるサイトから流出したメールアドレスとパスワードの組み合わせを入手すると、それを銀行、Webメール、通販サイト、SNSなどの主要サービスに向けて自動プログラムで一斉に入力・試行します。この手法はクレデンシャルスタッフィング(リスト型攻撃)と呼ばれます。ここには複雑な推測処理は一切含まれておらず、多くの人々が同じパスワードを使い回しているという単純な事実だけで高い成功率を誇っています。どれほど強固なパスワードであっても、あらゆる場所で使い回していれば何の役にも立ちません。

効果的な対策: すべてのアカウントに個別の異なるパスワードを設定すること。そうすれば、一つのサービスで情報漏洩が起きても、他のアカウントまで侵害されることはありません。

フィッシング詐欺

フィッシングサイトとは、本物のログインページを精巧に模倣し、わずかに異なるURLに設置された偽のWebサイトです。アカウントの停止予告、荷物の配送状況、未払い請求など、利用者に心理的な緊急性を感じさせるメールやメッセージのリンクから誘導されます。そこでユーザーが入力したログイン情報は、そのまま攻撃者のサーバーへと送信されます。パスワードの長さやランダム性がどれほど高くても、ユーザー自身が自ら入力してしまうため、強度による防御は通用しません。

効果的な対策: メッセージ内のリンクを安易に開かず、ブラウザに保存したブックマークから正規のWebサイトにアクセスすること。パスワードマネージャーを活用すること。パスワードマネージャーはあらかじめ登録された正規のドメイン上でのみ自動入力を提案するため、もし何も表示されない場合は警告の合図です。手動で入力する前にブラウザのアドレスバーのURLを必ず確認してください。さらに、万一パスワードが盗まれても単体での不正ログインを阻止できるよう、2要素認証を有効にしておくことが重要です。ただし、一般的なワンタイム確認コード(ワンタイムパスワード)は、通常のパスワードと同様にフィッシング画面で騙し取られるリスクがあります。これに対して、パスキーやFIDO2ハードウェアセキュリティキーは本物の正規サイトにしか応答しない仕組みになっているため、この方法で奪われることはありません。この特性を NIST は「フィッシング耐性(phishing resistance)」と定義しています。

マルウェア(悪意のあるソフトウェア)

インフォスティーラー(情報窃取マルウェア)と呼ばれる不正プログラムは、ブラウザ内に保存されたパスワードやセッションクッキー(認証済み状態を維持するデータ)を読み取り、実行されてからわずか数秒のうちに攻撃者のサーバーへ送信します。また、キーロガーはキーボードで入力されたすべての打鍵内容を記録します。認証済みのセッションクッキーが盗まれると、攻撃者はパスワードの入力はおろか、2要素認証の要求すら受けることなく、すでにログインしているユーザーのアカウントへ直接侵入できてしまいます。これらの悪質なプログラムは、主に海賊版ソフトウェア、偽のアップデート通知、不審なメールの添付ファイルなどを通じて端末に侵入します。

効果的な対策: 公式の信頼できる配信元からのみソフトウェアを導入すること、OSやブラウザを常に最新の状態にアップデートしておくこと、心当たりのない不審な添付ファイルはすべて危険なものとして扱うこと。ただし、これらを実施してもリスクをゼロにはできません。もし端末がマルウェアに感染した疑いがある場合は、確実に安全と分かっている別の端末から速やかに対処してください。パスワードを変更し、各サービスの管理画面から「すべてのセッションからログアウト」を実行し、登録されているリカバリー用メールアドレス、電話番号、2要素認証の設定が改ざんされていないかを確認します。そして、感染した端末を完全に初期化・駆除するまでは、その端末で再びログインしてはなりません。

ログインフォームへの直接的な推測攻撃

Webサイトのログインフォームに対して外部から直接パスワードを総当たりで試行する作業は非常に時間がかかります。適切に構築されたWebサービスであれば、連続して誤った試行が行われると応答を意図的に遅延させたり、一時的にアカウントをロックしたり、画像認証(CAPTCHA)を要求したりするからです。そのため、単一のアカウントを集中的に攻撃し続けるのは効率が悪く、攻撃者はむしろ逆の手法を選択します。123456、password、qwerty123 といった極めてありふれたごく少数のパスワード候補を、何百万もの膨大なアカウントに対して幅広く試行していく手法であり、これはパスワードスプレー攻撃と呼ばれます。また、特定の個人を標的とした推測攻撃では、子供やペットの名前、誕生日、応援しているスポーツチームなど、SNS上で容易に見つかる個人情報が悪用されます。

効果的な対策: ありふれた文字列を避け、自分に関する個人的な事実に基づいていないパスワードを使用すること。詳細は 強力なパスワードの作り方 を参照してください。

流出したハッシュ値からオフラインでパスワードを推測する

適切なセキュリティ設計を持つサービスであれば、ユーザーのパスワードをそのまま読める平文の形式では保管しません。通常はハッシュ値 — 元のパスワードを逆算することが数学的に不可能な一方向性関数(暗号学的ハッシュ関数)の計算結果 — としてデータベースに記録しています。このようなデータベースが外部に流出した場合、攻撃者は考えられるパスワードの候補から自前のハードウェア上でハッシュ値を計算して流出データと比較する作業を行います。このオフライン環境での解析作業にはWebサイトのログインフォームのような試行回数の制限が存在しないため、解析速度はサービス側が採用していたハッシュ関数の種類とその計算コストの設定に左右されます。MD5のような古く高速すぎるハッシュ関数の場合、現代の単一のグラフィックボード(GPU)だけで毎秒数百億回もの候補を検証できてしまいます。パスワード保管のために特別に設計された関数(Argon2idや、旧来のシステムにおけるbcryptなど)は、意図的に計算に時間がかかるように作られており、その検証速度を何桁も低下させることができます。最新のセキュリティ推奨規格 がこれらの関数の利用を推奨しているのはそのためです。

辞書攻撃

攻撃者が検証するパスワード候補は無作為な文字列ではありません。クラッキングツールは、過去の流出データから集めた本物のパスワードリストや、一般的な単語・人名の辞書を起点として、人間がとりがちな加工ルール(語頭を大文字にする、末尾に年号や感嘆符を付加する、文字を似た記号で置き換えるなど)を網羅的に適用します。一見すると複雑に見える Summer2024! のような文字列であっても、解読ツールにとっては真っ先に試行される典型的な候補の一つにすぎません。ソルト(パスワードをハッシュ化する前に付加される一意のランダムな文字列)を導入していれば、レインボーテーブルと呼ばれる事前計算表の利用を防ぎ、同一のパスワードを持つ全ユーザーが一斉に解読される事態を阻止できますが、人間にとって予測しやすい安易なパスワード自体の脆弱性を補うことはできません。

ブルートフォース攻撃(総当たり攻撃)

辞書に登録された候補をすべて試し終えたあとに残される唯一の手段は、あらゆる文字の組み合わせを順に試す総当たり攻撃であり、ランダムに生成されたパスワードにおいてはその「長さ」が結果を決定づけます。具体例として、高速なハッシュ関数を用い、スペースを除く印字可能な 94 個のASCII文字の中から等確率で完全にランダムに各文字が選ばれたパスワードを考えてみましょう。8 文字のパスワードには約 6 × 1015 通りの組み合わせが存在します。毎秒百億回の計算を行える設備を使った場合、すべての組み合わせを試すには約一週間を要し、平均すればその半分の期間で正解に到達します。これが 12 文字になると、同じ機材で全通りを試すのに約 150 万年が必要となり、16 文字に達すればもはや現実的な比較が成立しない領域に入ります。これこそが、意味を持たない長大なランダムパスワードを推奨する最大の理由です。辞書はほとんど役に立たず、この前提条件下では総当たり攻撃による解読はもはや実質的に不可能です。当サイトの 強力なパスワード生成 は、お使いのブラウザ上でこうした安全な文字列を瞬時に作成し、それぞれの推定エントロピーをビット単位で表示します。

効果的な対策: 人間の心理的パターンを一切含まない長いパスワードを使用すること。これは実質的に、専用ツールで自動生成したパスワードを意味します。各サービスがどのような方式でパスワードを保存しているかをユーザー側で制御することはできないため、常に最悪の事態(高速なハッシュ関数で粗雑に保管されていた場合)を想定し、高速な関数であっても推測を寄せ付けない強固なパスワードを選定しておく必要があります。

のぞき見とソーシャルエンジニアリング

最も古くから存在する手口には、いかなる先進技術も必要ありません。背後から肩越しにキーボードをのぞき見られたり(ショルダーサーフィン)、モニターに貼られた付箋を読まれたり、オンライン会議の画面共有に映り込んだ画面から盗み見られたりするケースです。あるいは、サポート担当者や社内の同僚を装った攻撃者から言葉巧みに聞き出されることもあります。こうした人間の心理的な隙を突く手口はソーシャルエンジニアリングと呼ばれます。正当な公式サポートやサービス提供者が、電話やメール、チャットを通じてユーザーにパスワードを尋ねることは絶対にありません。

効果的な対策: いかなる相手であってもパスワードを口頭で伝えたりメッセージで送信したりしないこと。また、他人の目に触れる場所にパスワードを書き残さないこと。

まとめ:総合的な防衛アプローチ

多様な攻撃手法に対抗するためには、それぞれに応じた防御習慣を身につける必要がありますが、中でも三つの習慣が大部分の役割を果たします。すべてのアカウントに固有の異なるパスワードを適用すること、自分で考えずに自動生成機能を利用すること、そしてパスワードの上にさらに2要素認証を重ねること(あるいは対応サービスでは従来のパスワードの代わりにパスキーを採用すること)です。これらをもってしても、ログイン中のセッション奪取などすべての脅威を完璧に防げるわけではないため、前述したマルウェア対策なども同時に重要となります。より詳しいセキュリティ情報は、パスワード生成の資料 に掲載されています。