安全なパスワードの要件について考える
新規サービスのログイン機能を作るにあたってパスワードの要件を検討したため、自分用の整理を兼ねてまとめようと思います。
どのようにすべきか悩んでいる担当者の方、マネージャーや情シス部門を説得するための根拠を探している方の参考になれば幸いです。
ただしあくまで私個人が調査してまとめた結果に過ぎないため、また内容は記事執筆時(2024年4月)のものに過ぎないため、なんらかを保証するものではないことをご理解ください。
また1口にパスワードといっても、①クレジットカードの利用時やスマートフォンのロック解除時に使うような4桁や6桁の数字で構成されるもの(=暗証番号またはPINコード)②デジタル機器やWebサービスの利用時にIDとセットで入力するもの(=ログインパスワード)③ファイルや通信の内容を暗号する際、また復号する際に鍵として単体で用いられるもの(=暗号キー)など様々なものがあります。
当然ながらそれぞれによって求められる要件は変わってきますが、ここでは②のログインパスワードについて考えます。
各種ガイドラインの調査
まずは各権威元が発行しているガイドラインを確認していきます。
団体・企業名の後に参考文献を示すので、いつどのような目的で公開されたものなのかに注意してください。
CIS [1] | NISC [2] | NIST [4] | Google [5] | Microsoft [6] | |
---|---|---|---|---|---|
最小文字数 | 14文字、MFAを有効にしていた場合8文字 | 8文字 | 10文字 | 12文字 | 8文字 |
最大文字数 | 制限なし | 64文字以上 | - | - | - |
必要文字種 | 英字・英字以外、MFAを有効にしていた場合条件なし | 条件なし | 大文字英字・小文字英字・数字・記号 | 大文字英字・小文字英字・数字・記号 | 条件なし |
利用可能文字種 | すべての文字 | すべての文字 | 大文字英字・小文字英字・数字・記号・スペース・Unicode文字 | 大文字英字・小文字英字・数字・記号 | 大文字英字・小文字英字・数字・記号 |
有効期限・定期更新 | 1年ごとに定期更新を行う | 定期更新は不要 | 定期更新は不要 | 定期更新を行う | 定期更新は不要 |
意外にもガイドラインごとに結構な差異があります。
パスワードにスペースやUnicode文字も使えるというのは少し驚きですが、これはパスフレーズ(=パスワードの一種で、ランダムな複数の単語を組み合わせた文字列で構成されており、文字数が長く、強固なセキュリティを持つもの)も含めているのかもしれません。
必要文字種に条件を設定せずに、数字のみのパスワードや英字のみのパスワードのものを許可していることがありますが、これはサービス側で「12345678」や「aaaaaa」のような簡単なものをバリデーションしていることが前提となっていて、決して脆弱なパスワードが許可されているわけではありません。
定期更新を行うべきかどうかについても意見が割れていますが、2023年以降に発表されたものについては定期更新は不要とされているようです。
この理由としては、パスワードの定期更新を求めても、元のパスワードを少し変えただけのものを設定する人が多くセキュリティの向上が見込めないというもので、ノースカロライナ大学の研究などで明らかになっています。
上記を整理すると、だいたい以下のような感じになるでしょうか。
- 最低文字数:安全に考えるのであれば14文字以上、どうしても小さくしたい場合や多要素認証を有効にする場合でも8文字以上とする
- 最大文字数:制限なし、システム設計上上限を設けたい場合は64文字以上とする
- 必要文字種:大文字英字・小文字英字・数字・記号等のうち少なくとも3種以上を含む
- 利用可能文字種:制限なし、システム設計上全角文字やスペースを含めたくない場合には大文字英字・小文字英字・数字・記号とする
- 定期更新:不要 (ただし怪しいログインの試行があったり、情報漏洩が起こったりした際には必ずパスワードの変更を求める)
その他パスワードの要件
最低文字数などの要件はガイドラインごとに微妙に異なっていますが、その他にも求められるパスワードの要件としては以下のようなものがあります。
基本的にはユーザー側が気をつけるべきことではありますが、サービス側でも制限できるものについては制限したいところです。
- 辞書に載っている単語や簡単な英数字(123、abc、aaaなど)を使わない(辞書攻撃を防ぐため)
- よく使われるパスワードは使わない [7]
- 誕生日や電話番号、好きなものなど個人情報などから推測できる文字を使わない
- IDやメールアドレスの一部を使わない
- 過去に使用したパスワードを使わない
- パスワードは使い回さない(パスワードリスト攻撃、クレデンシャルスタッフィング攻撃を防ぐため)
パスワード以外に考えること
ここまでパスワードの要件について整理してきましたが、パスワードを強力にするよりももっと重要なことは「パスワードが漏洩しても大丈夫なようにする」ということです。
サービス提供者側がどれだけ工夫したところで、ユーザー側が推測しやすいパスワードを設定したり、使いまわしているパスワードが他サービスから流出したりといったことは避けられません。
「パスワードは漏洩するもの」と捉え、予め以下のような対策をしておくことが大切です。
- 2要素認証・多要素認証(MFA)を用いる
- 2段階認証ではない
- 「秘密の質問」のような知識ベースの認証はパスワードと変わらないどころかセキュリティホールとなる可能性がある
- 要素とは①知識(ユーザーだけが知っていること)②所持(ユーザーが物理的に持っているもの、デバイスやパスキー、IDカードなど)③生得(ユーザーが生まれ持ったもの、指紋や虹彩、顔など)④場所(IPアドレスや地理情報、有線ケーブルなど)の4つである
- 近年SIMスワップ詐欺によるスマートフォンの乗っ取りが増えてきているため、できればSMS認証は避ける
- ログイン試行回数に上限を設ける
- 連続でログインに失敗した場合にアカウントを一定期間ロックする
- ログイン失敗時に敢えて少し待たせるなども有効
- ログインページにreCAPTCHAなどのbot対策を行う
- パスワードの入力フォームで貼り付け(ペースト)機能を許可する
- パスワード管理ツールを使えるようにするため
- ログインを通知する
- 特に普段使っているデバイスや地理情報と違うときには通知を行うようにする
- 復旧方法を用意する
- 分かりやすい場所にお問い合わせやサポートの導線を用意する
- アカウント復旧用の予備のメールアドレスを設定させる
- アカウント復旧用のリカバリーコードを用意する
- ログインセッションを適切に管理する
- パスワードをリセット・変更した際は全てのデバイスから強制的にログアウトさせる
参考文献
CIS | Password Policy Guide (2021年12月発行)
1.NIST | 800-63B: Digital Identity Guidelines (2023年10月16日発行)
2.
Discussion