先日、有名なWEBサービスで、別サイトから漏洩したIDとパスワードを利用した不正アクセスがあったという報道がありました。
そこで、ここでは、WEBサービスやSNSに用いるための安全なパスワードの作成方法について考察してみたいと思います。
名付けて「パスワード接頭・接尾語法」です。
なお、以下の記述は、私の私見であり参考は自己責任でお願いします。
■ パスワードに必要な要件
まず、自分に必要なパスワードの要件を考えてみます。
1.十分に複雑であること(ブルートフォース・アタック対策)
2.使いまわしても安全であること(リスト型アカウントハッキング対策)
3.同一サービスで複数使えること(複数アカウントでの使い分け)
4.定期的なパスワードの変更に対応できること
一応、この4要件を満たせれば良しとします。
■ 1.十分に複雑であること(ブルートフォース・アタック対策)
まずは、なんといってもパスワードが複雑であることが求められます。
ですから、複雑な文字列をパスワードに使うようにします。
ここでは、例として、次の文字列をパスワードの基本に使います。
pass
パスワードにpassなどと入れるのは、最もしてはいけないことですが、ここでは例なので、passとしておきます。
次に、上記のpassに数字も加えます。これも複雑であって、かつ、自分にとり覚えやすいものを使います。ここでは、次の数字をパスワードに付け足します。
pass1234
pass1234などというパスワードも最悪ですが、ここでは、あくまでも例です。この記事では、これを基本パスワードと呼びます。
このように、文字と数字を組み合わせると基本パスワードの強度につながります。できれば、pa12ss34のように混じりあってると良いでしょう。
ここまでで、できるだけ複雑で、かつ自分にとって覚えやすい基本パスワードを作成します。yh7d5s8l2のような複雑なものが良いでしょう。これが複雑で長ければ、ブルートフォース・アタック(総当り攻撃)対策になります。
■ 2.使いまわしても安全であること(リスト型アカウントハッキング対策)
さまざまなWEBサービスを使う場合には、それぞれにユニークなパスワードを使うことが望ましいです。なぜなら、万一、あるサービスでIDとパスワードが漏洩しても、他のサービスへの不正アクセスを防ぐことが出来るからです。
そこで、ここでは、パスワードがユニークになる方法を考えます。
結論からいうと、基本パスワードに接頭語を付け加えるようにします。
接頭語とは、読んで字の如く、ある文字の先頭につくものです。なにを接頭語とするかは、色々考えられますが、ここでは、WEBサービスのドメインを接頭語とします。
たとえば、google.co.jpならば、先頭4文字をとり、googを接頭語とします。あるいは、yahoo.co.jpならば、yahoを接頭語とします。
googpass1234 yahopass1234
このようにWEBサービスのドメインの先頭の何文字かをパスワードの接頭語として使います。こうすると基本パスワードを使いまわしながらも、ユニークなパスワードとして使うことができます。
パスワードを入力する場合には、ブラウザのアドレスバーを見てドメインの何文字かをパスワードのフォームに入力し、その後に基本パスワードを入力すればよいのです。
■ 3.同一サービスで複数使えること(複数アカウントでの使い分け)
ただし、ヤフーやグーグルのような大手サイトのサービスでは、複数アカウントを使い分ける場合も考えられます。
複数アカウントでも、ユニークなパスワードの方がよりセキュアとなります。
そこで、今度は、アカウントごとに、接尾語を基本パスワードのお尻につけるようにします。例えば、アカウントやIDにsomethingとanythingを使っていたとします。
その場合には、次のように接尾語をつけてやります。
googpass1234some googpass1234anyt
パスワードを入力する場合には、ユーザーIDやアカウントも利用するのが通常です。そのIDやアカウントを基本パスワードの後ろに付加するわけです。
こうすると、同一サービスの複数アカウントでも、別々のユニークなパスワードを使うことができます。
■ 4.定期的なパスワードの変更に対応(オプションを付加する)
ここまでの作業で、パスワードは、16文字になり、最初に比べて、セキュリティの強度も増したといえます。
ただし、WEBサービスによっては、一定期間ごとにパスワードの変更を強制的に求めてくるものもあります。
その場合には、「接頭語+基本パスワード+接尾語」のセットにオプションとして、何らかのフラグを立てるようにします。
たとえば、強制的にパスワードの変更を求められたら、フラグとして、1を付加するようにします。
googpass1234some1
そして、また変更を求められたら、1を消すわけです。
一定期間ごとに、1の付加と消去を続けると、漏洩の被害にあった場合、50%の確率で、リスト型攻撃を防止することができます。オブションフラグが、付いている場合と付いていない場合があるからです。
これを更に進めて、月ごとに、あるいは、四半期ごとにオプションを付加するのも良いでしょう。こうすることで、定期的にパスワードの変更をすることができます。
例えば、四半期ごとにパスワードを変更するならば、第1四半期は、1を、第2四半期は、2をオブションに付けるようにします。
googpass1234some1 //第1四半期 googpass1234some2 //第2四半期 googpass1234some3 //第3四半期 googpass1234some4 //第4四半期
毎月変更するのは大変なので、四半期ごとにオプション部分を変更するのは良い方法ともいえます。なお、西暦の下2桁を足すとより良いでしょう。
ここまでで17文字のパスワードとなりました。基本パスワードが複雑であるならば、これで、そこそこの強度があると思います。
最後に、パスワードに記号を求められる場合もあるので、それについて述べます。
ここまでパスワードを作ったならば、一番最後尾に、記号をつけるようにします。
googpass1234some1!
記号まで入れたら18文字となります。
■ まとめ
上記の方法により、最初の4要件は満たせるようになったと思います
ポイントは、1.基本パスワードを複雑にすること、2.接頭語を付加してユニークさを創出すること、3.接尾語を付加して、複数アカウントに対応すること。4.最後に、オプションをつけて柔軟に対応すること。
このように、自分なりのルールでパスワードを作成・管理すると、色々と捗ると思います。
なお、以上の記述はある意味で理想論であり、実際には、難しいこともあると思います。本来、パスワードは長ければ長いほど良いのですが、サイトによっては、逆に、文字数が少なめに制限されている場合もあります。
そうした現実を踏まえると、上記方法により、8文字前後に収まるようにすると、だいたいのサービスで使えるようになると思います。
(注意)当記事の記述は、本当にセキュアかどうかは不明なので、参考は自己責任でお願いします。
もっと良い方法があるという場合には、コメントいただけるとありがたいです。
以上です。