パスワードはなぜ破られる? 長さと使い回しが大事な理由
パスワードが破られる主な原因は3つです。よく使われるものを推測されること、漏れたものを使い回していること、偽のサイトで自分で入力してしまうことです。記号を混ぜることや定期的な変更より、長くすることと、サービスごとに別にすることが効きます。さらに多要素認証やパスキーを使えば、パスワードが漏れても守りやすくなります。
この記事でわかること
- サービスはパスワードをどう保存しているか(ハッシュとソルト)
- パスワードを破る主な手口と、それぞれに効く対策
- 記号を混ぜるより、長くするほうが効く理由
- 多要素認証とパスキーのしくみと、方式による強さの違い
前提知識: 特にありません。
身近なところでは
「8文字以上で、大文字・数字・記号を含めてください」という画面を見たことがあるでしょう。会社では「90日ごとに変更」と決められていることもあります。ある日、「情報が流出しました。パスワードを変更してください」というメールが届くこともあります。
ところが今の公式の指針は、この習慣のいくつかを勧めていません。何が効いて、何が効かないのでしょうか。まずは、パスワードがどう保存され、どう破られるのかから見ていきます。
サービスはパスワードをそのまま保存しない
ログインのとき、サービスが確かめたいのは「登録したものと同じか」だけです。そのため、きちんと作られたサービスは、パスワードそのものを保存しません。代わりに、パスワードから計算した値を保存します。
この計算に使うのがハッシュ関数です。どんな長さの入力からも、決まった長さの値を作ります。同じ入力からは必ず同じ値が出て、1文字違えばまったく別の値になります。値から元の入力を逆算することは、現実的にできないように作られています。できた値をハッシュ値と呼びます。
ログインのときは、入力されたパスワードを同じ計算にかけ、保存したハッシュ値と比べます。一致すれば本人とみなします。暗号化は、鍵があれば元に戻せるしくみです。ハッシュは、そもそも元に戻す手順を持ちません。ここが大きな違いです。
そこで保存する側は、2つの工夫を重ねます。1つ目はソルトです。利用者ごとに違うランダムな値を、パスワードに足してから計算します。ソルトがないと、同じパスワードの人は同じハッシュ値になります。攻撃者はよくあるパスワードのハッシュ値を一度計算するだけで、大勢をまとめて見破れます。ソルトがあれば、1人ずつ計算し直す必要があります。ソルトは秘密にしなくてかまいません。
2つ目は、わざと遅いハッシュ関数を使うことです。ふつうのハッシュ関数は、速く計算できるように作られています。パスワード用には、計算に時間やメモリがかかる方式を使います。代表は1999年に発表されたbcryptや、2015年のコンテストで選ばれたArgon2です。1回のログインで0.1秒かかっても、利用者は困りません。一方、何十億回も試したい攻撃者には大きな足かせになります。
破る手口1: よくあるパスワードを推測する
いちばん簡単な手口は、よく使われるパスワードを試すことです。英国の政府機関NCSCは2019年、漏えいしたパスワードを分析しました。「123456」を使っていたアカウントは、世界で2,320万ありました。「qwerty」や「password」も上位に入っています。
単語や名前、よくあるパスワードを集めた一覧から順に試す方法を、辞書攻撃と呼びます。一覧には、末尾に「1」や「!」を足したものや、「a」を「@」に替えたものも自動で加えられます。人が思いつく工夫は、たいてい攻撃者も試しています。
試し方には2種類あります。ログイン画面で1つずつ試す方法は、回数制限やロックがあるので遅くなります。そこで、少数のよくあるパスワードを、大勢のアカウントに1回ずつ試す手口もあります。1つのアカウントへの失敗が少ないので、ロックがかかりにくいのです。これをパスワードスプレー攻撃と呼び、会社のアカウントがよく狙われます。
もう1つは、サービスから盗み出したハッシュ値を、攻撃者の手元で試す方法です。こちらには回数制限がありません。速いハッシュ関数なら、GPU(画像処理用の計算装置)1台で1秒に何十億回も試せます。保存のしかたが大事なのは、このためです。
破る手口2: 総当たり。記号より長さが効く理由
すべての組み合わせを順に試す方法を、総当たり攻撃(ブルートフォース攻撃)と呼びます。文字をでたらめに選んだ場合、この攻撃に強いかどうかは組み合わせの数で決まります。組み合わせの数は「使う文字の種類」を「文字数」の回数だけ掛けた数です。
英大文字・小文字と数字では62種類です。8文字なら、62を8回掛けて約218兆通りです。ここに記号を足して94種類にしても、約28倍にしかなりません。一方、英小文字だけでも12文字にすれば、62種類の8文字の約440倍になります。文字の種類を増やすより、1文字ずつ長くするほうが、数は大きく増えるのです。
長くても覚えやすいのが、単語を並べたパスフレーズです。ただし、単語はさいころなどでランダムに選ぶ必要があります。有名な言葉や歌詞は、辞書攻撃の一覧に入っています。7,776語の一覧から5語を選べば、約2,800京通りになります。京は兆の1万倍です(下の「数字で見る」)。
破る手口3: 使い回しを狙う「パスワードリスト攻撃」
今とくに大きな危険の1つが、使い回しです。どこかのサービスから、メールアドレスとパスワードの組が漏れたとします。攻撃者はその一覧を、ほかのサービスのログイン画面に自動で入力していきます。これをパスワードリスト攻撃と呼びます。
使い回していれば、どれほど長いパスワードでも役に立ちません。漏れた文字列そのものを入力されるからです。防ぐ方法は、サービスごとに別のパスワードにすることと、次に説明する多要素認証です。総務省の「国民のためのサイバーセキュリティサイト」も、使い回さないことを強く勧めています。
破る手口4: 偽のサイトで入力させる
本物そっくりの偽のサイトに誘い、パスワードを入力させる詐欺をフィッシングと呼びます。本人が自分で入力するので、パスワードの強さは関係ありません。偽のサイトにも、鍵マークがついていることがよくあります。くわしくは「HTTPSとは? 鍵マークが守っているもの・守れないもの」で説明しています。
対策1: 長く、別々に。覚えるのは道具に任せる
サービスごとに別の長いパスワードを、何十個も覚えるのは無理です。そこで、パスワードマネージャーを使います。パスワードを作って暗号化して保管し、ログインの画面で自動で入力してくれる道具です。ブラウザやスマホに組み込まれたものもあります。
多くのパスワードマネージャーは、登録したサイトのアドレスと合うときだけ自動入力します。偽のサイトで入力が出てこなければ、気づくきっかけになります。ただし、まとめて保管する場所なので、それ自体が狙われます。開くためのパスワードは長く、ほかで使わないものにし、多要素認証もかけておきます。
対策2: 多要素認証とパスキー
本人を確かめる手がかりは、大きく3種類あります。本人が知っているもの(パスワードなど)、持っているもの(スマホなど)、体の特徴(指紋や顔)です。種類の違う2つ以上を組み合わせる方法を、多要素認証と呼びます。パスワードが漏れても、スマホがなければログインできません。
確認コードの届け方には差があります。SMS(電話番号あてのショートメッセージ)で届くコードは、パスワードだけよりずっと安全です。ただし、電話番号を乗っ取られると、コードも奪われます。米国の公的機関NISTの指針(後述)も、SMSなどの電話網を使う方法を「制限つき」に分類しています。スマホの認証アプリが表示するコードは電話番号に頼りません。それでも、偽のサイトに入力すれば同じように使われます。
この弱点をなくしたのがパスキーです。パスキーでは、スマホやパソコンが、サイトごとの秘密の鍵を持ちます。サイトには、対になる公開用の鍵だけを預けます。ログインのとき、端末は秘密の鍵で「署名」を作って送ります。署名は、その鍵を持つ端末にしか作れないしるしです。鍵は登録したサイトのアドレスに結びつくので、偽のサイトでは使えません。
指紋や顔は、端末の中で鍵を使えるようにするための確認に使います。サイトに送られるわけではありません。パスキーは、業界団体のFIDOアライアンスとW3Cが作った規格(FIDO2やWebAuthn)にもとづきます。2022年5月には、Apple・Google・Microsoftが対応を広げると共同で発表しました。ただし、まだ使えないサービスもあります。端末をなくしたときの復旧手段も確かめておきましょう。
公式の指針はどう変わったか
NIST(米国の国立標準技術研究所)は、本人確認の指針SP 800-63Bを出しています。米国の政府機関向けですが、世界中で参考にされています。2025年7月に最終版になった第4版(SP 800-63B-4)の主な決まりは、次のとおりです。
- パスワードだけでログインさせる場合は15文字以上、多要素認証の一部なら8文字以上を求める
- 64文字以上まで使えるようにすることが望ましい
- 「記号を必ず含める」などの文字の種類のルールを課してはならない
- 定期的な変更を求めてはならない。ただし漏れた証拠があれば変更させる
- よく使われるものや漏えいしたものの一覧と照らし、当てはまれば使わせない
- パスワードマネージャーを使えるようにする(貼り付けも認めることが望ましい)
日本では、総務省の「国民のためのサイバーセキュリティサイト」(2024年5月に改訂)が案内しています。流出などがなければ、定期的に変える必要はないとしています。そのうえで、使い回さないことと、パスワード管理の道具を使うことを勧めています。長さは最低でも10文字で、ランダムな並びにするよう勧めています。
総務省は、数字や記号、大文字・小文字がまざっていることも「好ましい」としています。NISTが禁じているのは、まぜることを決まりとして強制することです。どちらも、長くて予想しにくいことを重視している点は同じです。
よくある誤解
誤解: 90日ごとに変えれば、パスワードは強くなる
実際は、変更を強制されると、人は「Haru2026!」を「Haru2027!」にするような小さな変え方をしがちです。攻撃者はこの変え方も試します。漏れていないパスワードを変えても、強さは増えません。NISTも総務省も、漏れたときにすぐ変えることを勧めています。
誤解: 「P@ssw0rd」のように文字を置き換えれば強くなる
実際は、「a→@」「o→0」のような置き換えは、辞書攻撃の道具が自動で試す定番です。見た目は複雑でも、元が辞書の単語なら、すぐに見つかります。強さを決めるのは、予想しにくさと長さです。
誤解: サイトがHTTPSで暗号化しているから、自分のパスワードは安全だ
実際は、HTTPSが守るのは、送っている途中だけです。サービスから保存データが盗まれれば、ハッシュ値は手元で試されます。弱いパスワードはそこで見破られます。偽のサイトに入力すれば、HTTPSでも相手にそのまま届きます。
数字で見る
総当たりで、すべての組み合わせを試すのにかかる時間を計算しました。文字や単語はランダムに選んだとします。平均すると、この半分の時間で当たります。試す速さは、次の2つの場合を仮定しました。
- 速いハッシュ: 1秒に100億回(GPU1台で速い方式を試す場合の目安。2025年には、速い方式の1つのMD5を、GPU1台で1秒に1,600億回以上試せたという計測も公開されています)
- 遅いハッシュ: 1秒に1万回(GPU1台で、bcryptなどを実用的な設定で使った場合のおおよその目安)
| パスワード | 組み合わせ | 速いハッシュ | 遅いハッシュ |
|---|---|---|---|
| 英小文字8文字 | 約2,100億 | 約21秒 | 約240日 |
| 英大小・数字8文字 | 約218兆 | 約6時間 | 約690年 |
| 記号も入れて8文字 | 約6,100兆 | 約7日 | 約1.9万年 |
| 英小文字12文字 | 約9.5京 | 約110日 | 約30万年 |
| ランダムな4語 | 約3,700兆 | 約4日 | 約1.2万年 |
| ランダムな5語 | 約2,800京 | 約90年 | 約9,000万年 |
単語は7,776語の一覧から選ぶとしました。記号を足すより、長くするほうが効くことがわかります。また、この仮定では、同じパスワードでも保存のしかたで時間が100万倍変わります。実際の速さは、ハッシュの方式と攻撃者の機材しだいです。この表は目安として見てください。そして、「123456」のようなよくあるものや使い回しは、この計算とは関係なく一瞬で破られます。
もっと詳しく学ぶ
- 文字の種類・長さ・試す速さを変えて計算する: パスワードの総当たり時間の計算ツール
- 組み合わせの数を「ビット」で表す考え方: エントロピー(予想しにくさを表す量)
- パスキーの土台の技術: 公開鍵暗号とデジタル署名
- 人をだまして聞き出す手口: ソーシャルエンジニアリング
- 会社で多要素認証が当たり前になった背景: 境界型防御とゼロトラストの違い