安全で管理しやすいパスワードを作るためのアイデア
本記事は長らく初出時の認識に基づいて記述されていましたが、2021年2月19日に更新しました。
パソコンやスマートフォンなどで、色々なネットサービスを利用しているとそれぞれでIDとパスワードの設定をさせられるますね、これが結構面倒。
パスワードは、サービスによって文字数だとか利用可能な文字の種類が異なるためどんなパスワードにするか悩むことも多いかと思います。中にはセキュリティ上の理由から「定期的にパスワードの変更すること、過去何回かと同じパスワードは×」というように定期的なパスワードの更新を求めるサービスもあります。
ただでさえ悩むパスワードを「3か月毎に変更しろ、過去2回つかったものと同じものはダメ」と言われると設定するネタが尽きてしまって、無理矢理ひねり出して設定したものの、次にアクセスした時にはパワスードを忘れてしまっていた、という経験をされた方もいらっしゃるかと思います。 今回は、安全で且つ管理しやすいパスワードの作り方をご紹介したいと思います。
結論は「パスワードを作るための自分だけのルールを作る」ということです。といってもそれだけでは何の事だか?ということになると思いますので、具体例を挙げて説明しますね。
どんなパスワードを作ればいい?
以前は8文字以上、アルファベットと数字、記号を混ぜるなどするのが良いとされていましたが、最近は文字列の複雑さよりも長さの方が重要と言われています。
これは「総当たり攻撃」言われる、文字の組み合わせを片っ端から試す攻撃方法に対して、短いパスワードよりも長いパスワードの方が解読に時間がかかり解読されにくいためです。 ただし総当たりとはいっても、パスワードでよく使われるような文字列や言葉(12345678など)は優先的に試されるので、単純な数字や言葉は解読されやすくなります。
以下のサイトで、パスワードの長さや文字種の混ざり具合によって解読にどれぐらいの時間がかかるかの予測を見られます。
注意:このサイトで実際に使っているパスワードは入力しないでおいてください、このサイトから自分の使っているパスワードが漏洩し、そこから攻撃時のパターンとして利用される可能性もあります。
試してみたところ、パスワードの長さによる予測解読時間の長さは次の通りになりました。
パスワードの長さ | 予測解読時間 |
---|---|
6文字 | 1秒 |
8文字 | 1時間 |
10文字 | 7か月 |
12文字 | 2,000年 |
14文字 | 900万年 |
16文字 | 370億年 |
ちなみに、これらの時間はランダムな文字の組み合わせを使った場合であって、12345678のように単純な数字や電話番号や誕生日と推測される数字の場合は「一瞬」と判断されるなど、パスワードで使われる文字の組み合わせによっても異なります。
このように、ちょっとした長さの違いで解読にかかる時間は飛躍的に延びることがわかっています。 上記の数字でいうと7か月もあれば、サーバーからパスワードが盗まれても再設定するための猶予としては十分に見えますが、そもそもパスワードが盗まれたかどうかがわからないケースもありますので、12文字以上に設定しておく方が安全です。
さすがに解読に2,000年かかれば自分が生きている間に解読されることはなさそうです。
もちろん、稀にうまくいってそれよりも短い時間で解読される可能性はあります。
今回考えるパスワードの条件
これらのことから、設定するパスワードには以下の条件を課すことにします。
- パスワードの長さは、12文字以上
- アルファベットとの大文字と小文字、数字を混ぜたものにする
- アルファベットで始まるものにする(数字で始まるものを禁止しているシステムがほとんどなので)
- サイトごとに異なるものを作成する
文字種をまぜる理由
先に述べた通り現在では「文字列の複雑さ」よりも「文字列の長さ」の方がより重要であるとされているので、さまざまな文字種をまぜる必要はありません。 しかしながら、実際に運用されているシステムには従来の古いルールで設計・構築されているものも多くあり、中には文字種をまぜることを必須としているものがあります。
こういったシステムを考慮して、ここではアルファベットの大文字と小文字、数字をまぜることとしました。 記号については必須となっているシステムがそう多くはありませんし、逆に記号を含めることができないシステムもありので、必要とされるサービスにだけ使うこととしました。
サイトごとに異なるものとする理由
仮にどこかのサイトでIDとパスワードの漏洩があったとします。 他のサイトでも同じパスワードを使っていたとすると、他のサービスに対しても同じID、パスワードでの認証が試されると不正にアクセスされる可能性がありますので、サービスごとにパスワードを違えておくべきなのです。
以上の観点を基に具体的にパスワードを考えて行きましょう。
1.アルファベットの部分を決める
全部で12文字以上にしますので、まず8文字以上を目安にアルファベットの部分を作成します。
繰り返しになりますが、現在は、複雑さよりも長さの方が重要と言われています。それでも「password」のようなよく使われる単語を用いると解読されやすくなります。
また「文字種をまぜる理由」でも書いたように、従来の考え方で設計されたシステムの場合一般的な単語が含まれるパスワードの設定を拒否するものもあります。 このことから、一般的な辞書には載っていない単語、文字の組み合わせを使うことを考えます。
ここで私たちが日本人であることが有利に働きます。英単語ではなくローマ字を使うのです。
たとえば、”Wagahaihanekodearu”みたいな文字列です。これだけですでに18文字ありますので、かなり強力です。
ここで注意しなければならないのは、あなたが夏目漱石ファンではないこと、もしくは夏目漱石ファンであることが周囲に知られてないが重要です。 もし、あなたが夏目漱石ファンでそれが周囲に知られている場合、暗号の解読以前にあなたの心を読んでパスワードを当てる人が出てくるかもしれません。 夏目漱石ファンだったとしたら、”Furuikeyakawazutobikomumizunooto”の方がいいかもしれません。
2.数字の部分を決める
次に数字の部分を決めましょう、ここでは2文字の数字を作ります。 ただ数字を入れることが目的なので、数字はなんでも構いません。強いていうなら誕生日などから類推される数字は避けた方が良い、ぐらいですがそれもあまり大きな意味ななさそうです。
キーボードの数字を適当に押してみる、思いついた九九の組み合わせにする、なんでも結構です。
とりあえず、ここでは”72”を使うこととします。
3.サイトごとに違う部分を決める
サイトごとに異なるパスワードといっても、すべての文字を違うものにすると管理が大変です。 そこで、パスワードの一部だけを変えてサイトごとに異なるものとします。
ただし、サイトごとに違う部分がランダムな文字ではやはり覚えるのが大変なので、ルールを決めてサイトと関連づけられるようにします。 たとえば、サイトのアドレスの先頭1文字と最後の1文字を使うというのもひとつのアイデアです。
Twitterなら、”t”itte”r”.com で”tr”
Facebookなら、”f”ceboo”k”.com で”fk”
Amazonなら、”a”mazo”n”.co.jp で”an”
というような感じです。
4.つなぐ
ここまでの3stepで作ったものをつなぐと22文字のパスワードができあがります。目標が12文字以上だったので十分な強度ではないでしょうか。
trWagahaihanekodearu72:Twitter用のパスワード
fkWagahaihanekodearu72:Facebook用のパスワード
anWagahaihanekodearu72:Amazon用のパスワード
それぞれ違うのは最初の2文字だけですが、仮にTwitterのパスワードが漏洩したとしても、Facebookにアクセスされることはありません。
ただし注意しなければいけない点があります。 このルールは、不特定多数を対象にした攻撃による流出にはとても有効なのですが、あなたを狙って攻撃された場合はこの限りではありません。 あなたが狙われている場合、狙っている人はあなたがどんなルールでパスワードを考えているかを探ろうとするからです。
5.定期的に更新する場合
以前はパスワードを定期的に更新した方が、安全性が高いと考えられていました。 今は逆で定期的に更新する必要はないと考えられています。
むしろ定期的な更新を求めると類推しやすいものを使いがちになるので、定期的名更新を求めない方が良いでしょう。
とはいえ、定期的な更新を求めてくるシステムが存在するのも事実。 このような場合は、数字の部分を変えるなどして対応すると良いでしょう。
中には、もっと厳密で含まれるワードが同じだと更新を認めないシステムもあります。 その場合は上記と同じ方法で、そのシステム専用のパスワードを用意するしかありません。こんなシステムに当たらないことを願うばかりです。
最後に
ここまでで作ったパスワードは一定のルールで作ったものですので、覚えやすいと感じていただけたのではないでしょうか? これらのルールはあくまでも1つの例ですので、順序を入れ替えたり、文字数の配分を変えるなど自分が扱いやすいルールを決めていただければいいかなと思います。