「パスワード」とは
パスワードは、コンピュータやWebサービスなどで、利用しようとしている人が本人であることを確認するために使われる秘密の文字列です。
Webサービスでは、一般に、
- 利用者IDやメールアドレスによって「誰としてログインするのか」を示す
- パスワードによって「本人しか知らない情報を知っているか」を確かめる
という形で本人確認を行います。
このうち、利用者IDやメールアドレスは利用者を識別するための情報であり、通常は秘密情報ではありません。本人確認に使われる認証要素はパスワードの方です。
認証の3要素
本人確認に使われる認証要素は、大きく次の3種類に分けられます。
| 認証要素 | 内容 | 例 |
| 知識要素 | 本人が知っているもの | パスワード、暗証番号 |
| 所有物要素 | 本人が持っているもの | ICカード、スマートフォン、セキュリティキー |
| 生体要素 | 本人の身体的特徴 | 指紋、顔、指静脈 |
登録したスマートフォンへ認証コードを送り、そのコードを入力させる方式では、「コードを受け取ることができる」ことに注目して所有物要素となります。「コードを知っている」という知識要素ではありません。
多要素認証
パスワードだけによる認証では、パスワードを盗まれたり推測されたりすると、第三者にログインされる可能性があります。
そこで、異なる認証要素を組み合わせる方法が使われます。
例えば、
パスワード + スマートフォンに届く認証コード
では、
- パスワード → 知識要素
- 登録済みスマートフォン → 所有物要素
を組み合わせています。
このように、異なる種類の認証要素を複数組み合わせて本人確認を行うことを多要素認証(MFA:Multi-Factor Authentication)といいます。
2種類の要素を使用する場合は、二要素認証ともいいます。
例えば、
- パスワード + ICカード
- パスワード + 指紋
- ICカード + 指紋
はいずれも異なる2種類の要素を使うため、二要素認証です。
一方、
パスワード + 暗証番号
は、二つの秘密情報を入力していても、どちらも知識要素です。したがって、二要素認証ではありません。
同じパスワードを2回入力しても、知識要素を繰り返しているだけなので、やはり二要素認証にはなりません。
二段階認証と二要素認証
二段階認証は二要素認証と似た言葉ですが、同じ意味ではありません。
二段階認証とは、本人確認を二つの段階に分けて行う方式を指します。
例えば、
- パスワードを入力する
- 秘密の質問に答える
という方式であれば、二つの段階で確認しているため、二段階認証と呼ぶことができます。
しかし、パスワードと秘密の質問への答えはいずれも「本人が知っている情報」です。
したがって、二段階であっても、認証要素は知識要素一種類しか使っておらず、二要素認証ではありません。
つまり、
- 二段階認証:何段階に分けて確認するか
- 二要素認証:何種類の認証要素を使うか
という違いがあります。
なお、秘密の質問は、答えを推測されたり公開情報から知られたりする可能性があるため、現在では強い認証方法とは考えられていません。
パスワードの組合せ数
使える文字がM種類あり、同じ文字を何度使ってもよいものとします。
ちょうど1文字の文字列なら、M通りです。
ちょうど2文字なら、それぞれの位置についてM通りから選べるため、
M×M=M2
通りになります。
したがって、ちょうどn文字の文字列なら、
Mn
通りとなります。
例えば、
- 英大文字:26種類
- 英小文字:26種類
- 数字:10種類
を使用できる場合、文字は全部で、
26+26+10=62種類
です。
10文字のパスワードなら、
6210通り
になります。
8文字の場合は628通りなので、10文字では8文字の場合の、
6210÷628=622倍
になります。
このように、使える文字の種類が同じなら、文字数を増やしたときの候補数は比例ではなく指数的に増加します。
例えば英小文字26種類だけを使用する場合でも、8文字から12文字へ増やすと、
2612÷268=264倍
となります。
候補数が多ければ必ず安全なのか
ただし、Mnという計算は、あくまで「作ることのできる文字列の総数」です。
実際の利用者は、すべての文字列から均等にパスワードを選ぶわけではありません。
例えば、
- 123456
- password
- 自分の名前
- 生年月日
- 電話番号
など、人が選びやすい文字列には大きな偏りがあります。
攻撃者もこのことを知っているため、すべての候補を無作為に試す前に、人が使いそうな文字列を優先して試すことができます。
したがって、単に理論上の候補数が多いだけでなく、他人に予測されにくいパスワードを使うことが重要です。
「複雑なパスワード」にすればよいのか
以前は、
- 英大文字を含める
- 英小文字を含める
- 数字を含める
- 記号を含める
といった条件を強制する方法が広く用いられていました。
このような条件を設定する目的は、単純で推測されやすいパスワードを減らすことです。
ただし、現在のセキュリティ指針では、文字種を機械的に組み合わせることを強制する方法は必ずしも推奨されていません。
現在は、
十分な長さを確保し、推測されやすい文字列を避け、サービスごとに異なるものを使う
ことが特に重要です。
なお、理由なく定期的にパスワードを変更させることも現在は推奨されていません。漏えいなど、パスワードが侵害された可能性がある場合に変更するのが基本です。
パスワードに対する主な攻撃
総当たり攻撃
総当たり攻撃(ブルートフォース攻撃)は、考えられる文字列を大量に試してパスワードを見つけようとする攻撃です。
一般にパスワードを長くすると、総当たり攻撃に対して強くなります。
また、Webサイトへ実際にログインを繰り返すオンライン攻撃では、試行回数制限なども重要な防御となります。
辞書攻撃
辞書攻撃は、一般的な単語や、よく使われるパスワードなどを候補として優先的に試す攻撃です。
すべての文字列を順番に試す総当たり攻撃に対して、人が選びやすい候補に絞って試す点が特徴です。
個人情報を利用した推測
氏名、誕生日、学校名、電話番号など、公開されている情報や本人について知られている情報から候補を作って試す方法もあります。
自分の生年月日だけをパスワードにするような方法は危険です。
リスト型攻撃
あるサービスから漏えいした、
利用者ID + パスワード
の組合せを、別のサービスでも試す攻撃をリスト型攻撃といいます。クレデンシャルスタッフィングとも呼ばれます。
例えばサービスA、B、Cで同じパスワードを使っていると、Aから認証情報が漏れただけで、BやCにも不正ログインされる可能性があります。
そのため、パスワードをサービス間で使い回さないことが推奨されています。
パスワードを盗む手口
キーロガー
キーロガーは、キーボードから入力された内容を記録する仕組みです。
悪意のあるキーロガーが端末へ仕込まれると、利用者が入力したIDやパスワードなどを盗み取られる可能性があります。
ソーシャルエンジニアリング
ソーシャルエンジニアリングは、コンピュータの技術的な弱点ではなく、主として人の心理や行動上の隙を利用して情報を入手する手口です。
例えば、
- システム管理者を装って電話し、パスワードを聞き出す
- 「緊急です」「今すぐ必要です」などと言って相手を焦らせる
- パスワード入力を背後からのぞき見る(ショルダーハッキング)
- 廃棄された書類から秘密情報を探す
などがあります。
一方、プログラムを使ってパスワード候補を大量に試す行為は、人をだまして情報を聞き出す方法ではないため、通常はパスワード攻撃として区別します。
パスワードなどの秘密情報を電話やメッセージで要求された場合は、その場では伝えず、あらかじめ分かっている公式の連絡先など別の経路から要求が本物か確認することが有効です。
フィッシング
フィッシングは、実在する組織などを装ったメールやSMS、偽のWebサイトなどを使い、利用者をだましてパスワードなどの認証情報を入力させる手口です。
対策としては、
- メールやSMSのリンクを不用意に開かない
- 公式アプリや自分で登録したブックマークからアクセスする
- 不審な要求を別の経路から確認する
- 多要素認証を利用する
などがあります。
OS、ブラウザ、アプリを最新の状態に保つことも情報セキュリティ上重要ですが、それだけで偽サイトへのパスワード入力を防げるわけではありません。フィッシング対策としては、アクセス先や要求内容を確認することが重要です。
SMSによる認証コードにも限界がある
パスワードと、登録した電話番号へSMSで届く一時コードを組み合わせれば、
を組み合わせた二要素認証になります。
そのため、パスワードだけの場合より不正ログインを防ぎやすくなります。
しかし、SMSによる認証にも限界があります。
例えば、
- 攻撃者にSMSを受信される
- 電話番号を不正に移行される
- 偽サイトへ一時コードを入力してしまう
といった方法で突破される可能性があります。
特に、SMSや認証アプリに表示されたコードを利用者自身が入力する方式は、偽サイトへコードを入力してしまう危険があり、フィッシング耐性を持つ認証方式ではありません。
パスワード管理ツール
サービスごとに異なる長いパスワードをすべて暗記するのは難しいものです。
そこで利用できるのがパスワード管理ツール(パスワードマネージャー)です。
パスワード管理ツールを使うと、
- サービスごとに異なる長いパスワードを生成する
- それらを保存する
- 必要なときに呼び出す
といった管理がしやすくなります。
一方、多数のパスワードをまとめて管理するため、管理ツール自体を適切に保護する必要があります。
例えば、
- 十分に長いマスターパスワードを設定する
- 利用できる場合は多要素認証を設定する
- 端末から離れたときは自動的にロックされるようにする
といった対策が考えられます。
パスワードはどのように保存されているのか
Webサービス側が利用者のパスワードを平文、つまりそのまま読める形で保存するのは適切ではありません。
また、後から元のパスワードへ戻せる単純な暗号化よりも、パスワード保存専用の一方向の処理を利用します。
一般には、利用者ごとに異なるソルトと呼ばれる値を加え、パスワード保存向けに設計されたハッシュ方式によって処理した結果を保存します。
そのため、適切に設計されたシステムでは、運営者が利用者の現在のパスワードをそのまま読み出せる形で保存していません。
パスワードが漏えいした場合
あるサービスAから認証情報が漏えいしたとします。
Aで使用していたパスワードをBやCでも使い回していた場合、攻撃者がその認証情報をBやCへ試す可能性があります。
そのため、
- Aのパスワードを変更する
- 同じパスワードを使っていたB・Cも変更する
- それぞれ異なるパスワードにする
- ログイン履歴や利用履歴を確認する
- 不審なログイン中の端末やセッションがあれば解除する
- 利用できる場合は多要素認証を設定する
といった対応を行います。