強固で安全なパスワードの設定方法

様々なシステム、サービスでパスワードによる認証が使用されています。ここではパスワードを設定する際に覚えておきたい、安全で強固なパスワードの設定方法について解説します。パスワードによる認証システムを開発する際のパスワード要件としても当てはまります。

様々なシステム、サービスでパスワードによる認証が使用されています。ここではパスワードを設定する際に覚えておきたい、安全で強固なパスワードの設定方法について解説します。

また、ここで解説する安全なパスワードの設定方法は、パスワードによる認証システムを開発する際に受け入れ可能なパスワード要件としても使用することができるでしょう。

パスワード設定時に必ず守らなければならないポイント

  • 十分な長さである(最低でも12文字以上が望ましい)
  • 「特定の単語のみ」「誕生日の数字のみ」「電話番号のみ」など、容易に推測できる可能性がある文字列のみを使用しない
  • 他のサービスやシステムですでに使用されているものを使い回さない

この 3 点を守った上で、本人が覚えやすく、入力しやすいパスワードが、優れたパスワードと言えるでしょう。

パスフレーズの利用

古くから、パスワードはランダムな文字の羅列(例えば「wz-7HK9y3o@M」のような)を使用するようにとよくいわれますが、いくつかの単語を組み合わせ、フレーズを作る「パスフレーズ」形式でも非常に強固なパスワードを作ることができます。

パスフレーズを考える場合、下記の手順で行います。

  • 好きな単語 (英語単語でもよいですし、日本語のローマ字読みでもよいです) を 3 ~ 4 つ挙げます。
  • 各単語の先頭文字だけ大文字にしてそれらをつなげます。

例えば、「サッカー(Football)」 と 「ロックミュージック(Rockmusic)」 と 「ラーメン(Ramen)」 と 「ゼリー(Jelly)」 という 4つの単語にしようと決めた上で、これらをつなげると下記のようなパスフレーズになります。

FootballRockmusicRamenJelly

ひとつひとつの単語だけではパスワードとして不適切ですが、ランダムに選択した英単語を 4 つ合わせたことで、27 文字の長さを持ち、十分な強度のパスワードを設定することができました。

もし、利用するシステム側で「パスワードには記号や数字を含んでください」というような文字種の指定がある場合は、下記のように 4 つ目の英単語を覚えやすい数字に変えたり、単語間に「-(ハイフン)」を入れるなどすれば、文字種の指定をクリアすることができます。

Football-Rockmusic-Ramen-2021

なお、もし利用するシステムがパスワードの文字数上限として、8 文字程度を指定してくる場合、このパスフレーズ方式は避け、従来のラインダムな文字の羅列でパスワードを設定する方がよいでしょう。

文字数がすくないと使える単語が少なく、十分な強度が保てないからです。概ね、16 文字以上のパスワードが設定可能なシステムであれば、このパスフレーズ方式は役に立つと考えます。

システムの開発時に注意すべきパスワードの要件

ここまでを踏まえて、もしパスワードによる認証を伴うシステムを開発する場合、そのパスワードの要件をどうするか、別の言い方をすれば、「何をすべきでないか」について考えてみましょう。

パスワードに設定可能な文字数の制限をしない

パスワードの文字数上限を 8 文字や 12 文字などに制限するシステムを目にする機会も多いですが、パスワードに設定可能な文字数の制限は原則として行うべきではありません。どうしても制限をしないといけない場合は、64 文字以下、128 文字以下など十分な文字数を確保した上で上限を定めるべきです。

逆に最低文字数を定める場合は、12 文字程度にするとよいでしょう。最低文字数が 8 文字の場合、生年月日だけで設定できてしまう文字数になります(例:20210401)。しかし最低文字数を 12 文字程度にしておけば、名前の一部と生年月日を組み合わせるなど、そこまで情報リテラシが高くない利用者であっても、自然とある程度強固なパスワードを設定するようになるでしょう。

パスワードに使用可能な文字種の指定は必要か

パスワードに設定可能な文字種として、ASCII(制御文字を除く印字可能文字)に含まれる文字のみに制限するのは問題ありませんし一般的です。

ここでいう文字種の指定とは、「パスワードには英数字、記号を必ず含め、さらにアルファベットは大文字と小文字を含んでください」というような指定を指します。開発者、サービス提供側の意図としては、この制限によって利用者が強固なパスワードを設定可能と考えるのかもしれませんが、パスワード自体に十分な長さがあれば、アルファベットのみでも十分強固なパスワードになりますし、前述したパスフレーズの例のように、大文字と小文字を混合させれば十分です。

一方で、利用者がパスワードに記号や数字を使いたい場合は自由に使えるようにするべきです。例えば使える記号をいくつかのみに制限するといったことはするべきではありません。

結論

よって、利用者に向けてパスワードの要件を示す場合は、下記の要件を満たすようにするとよいでしょう。

  • パスワードに設定可能な文字数の上限は原則として指定しない。やむを得ず指定する場合でも十分な長さを確保する。
  • パスワードに設定可能な文字数の下限については 12 文字程度を基本とする。
  • パスワードに設定可能な文字種については原則指定する必要はないが、「アルファベットの大文字と小文字を混在させる」という指定は妥当と考える。
    • 一方で数字や記号も自由に使用できるようにし、例えば記号の中の一部だけ使用可能、といった制限は避けるべき。
  • 他のサービスやシステムですでに使用しているパスワードの使い回しは避けるよう、その危険性などを含めて利用者にわかりやすく案内する。

上記を言い換えれば下記のようにも考えることができるでしょう。

  • Google Chrome などのブラウザや、パスワード管理ソフトなど、パスワードの自動生成機能をもったソフトウェアが生成するパスワードが、そのまま利用できるようにしておく。

多くのパスワード自動生成機能は、前述したような安全な条件を満たすパスワードを生成します。折角、利用者がパスワード生成機能を使用して安全なパスワードを生成したにもかかわらず、一部の記号が使えないなど、システム側がそれを受け入れられないようであれば、利便性が低下するだけでなく、パスワードの強度も低下する危険性があります。

パスワード入力欄へのペーストを禁止しない

新規アカウント作成画面やログインフォームにおいて、パスワード入力欄に対するコピー・アンド・ペースト(クリップボードを経由したペースト)を JavaScript を用いて禁止しているケースが散見されますが、これは全く無意味かつ利用者の利便性を大きく損なう行為であり、避けるべきです。

そのような実装を行う開発者が何を意図しているのかは不明ですが、長く複雑なパスワードほど、手入力で正確に入力するのは困難ですし、パスワード管理ソフトで別途管理されたパスワードを使用したり、パスワードの自動生成機能を利用して生成したパスワードを使用する場合など、パスワード入力欄に対してコピー・アンド・ペーストができなければユーザビリティが著しく低下します。

パスワードの要件とは少し話がずれますが、このような実装を行わないように注意しましょう。

この記事の内容は、あくまでパスワード文字列の要件に関して述べたもので、パスワードデータの保存方法、例えば利用するパスワードハッシュ化関数などに関しては触れていません。

bcrypt など、安全なパスワード保存方法を適切に採用することで、仮にパスワードの桁数が 8 桁など、少ない場合でも、それがただちに脆弱なパスワードとなるとは限りません。

セキュリティ

ご相談・お問い合わせ

We’re here to support your business

まじめにウェブサイトのユーザー体験(UX)を向上させたい、ウェブアクセシビリティへの取り組みを継続的に行いたい、本気でウェブサイト活用について相談できるパートナーが欲しい…… そんな企業の皆様の想いにバーンワークスは真剣に向き合い、最適解を提供いたします。