安全かつ覚えやすいパスワードは存在するのか?な話

少し前までパスワードは定期的に変更することが推奨されていました。
今でも数ヶ月パスワードを変更していないと、サービス側から変更を促されてたりする場合があります。
が、最近では定期的にパスワードを変更する事に意味はないというが定説になりつつあります。
なぜでしょうか。





パスワードの問題点

人間は無意味な文字や数字の羅列は覚えられない

効果的なパスワードとは推測しにくいものです。ところが、ユーザはこのパスワードを覚えなければいけません。
人間は無意味な文字や数字の羅列を覚えることが得意ではありません。
そこで今までのパスワードをちょっとだけ変えて使ったりしてズルをします。
定期的にパスワードを変更する必要があると、例えば「hoge2018」というパスワードから「hoge2019」というパスワードに変える、などで対応しようとします。
システム上は別のパスワードと見なされますが…どうですか?人の感覚的には実質同じパスワードではないですか?

つまりパスワードを定期的に変えてもほとんど意味はなく、最初から強固なパスワードを作ってそれをずっと使う(ただし、他とは使い回さない)方が効果的な可能性が高いということです。

強力なパスワードとは

必ずしも無意味な文字の羅列である必要はありませんが、推測しづらいことは大事な要素ですので、特定の単語や文章は避けたほうが無難です。
更に使う文字種…大文字、小文字、数字、記号を織り交ぜて使うことです。
その上で12文字以上のものが推奨されます。

なぜ文字種が多く長いパスワードが有効なのか

パスワード情報そのものが流出した、という場合は除きます。(この場合はどれだけセキュアなパスワードを設定していても無意味です)

パスワード情報が無い場合、攻撃者「よく使われる」「安易な」パスワードを試します。「1234567890」「abcdefg」「hogehoge」「admin」...などです。

次にプログラムを用いてパスワード解析を行います。よく使われるのが「総当り」方式です。
指定の文字数、指定の文字種から総当りでパスワードを生成して片っ端から試す、という方法です。
これには文字種・文字数により掛かる時間が変わります。
当然、文字種・文字数が多いほど時間は長く掛かります。時間が掛かれば掛かるほど、サーバ側に異常なログイン施行を感知されやすくなるため、成功率が落ちます。


強力なパスワードを簡単に覚えることは可能か

セキュリティサービス会社のKaspersky LabのメンバーであるDavid Jacoby氏が面白い方法を提唱していたのでご紹介します。
名付けてストーリー型アルゴリズムです。

1. 慣用句、歌詞、映画のセリフ、童謡や子守唄などを思い浮かべます。
2. 思い浮かべたフレーズの最初の5つの単語の1文字目を取り出します。
3. それぞれの文字の間に特殊記号を挿入します。
4. 出来たベースパスワードの後ろに固定文字列をつける。

例えば「桃太郎」の童謡を使うとします。

 ももたろさん ももたろさん おこしにつけた きびだんご ひとつ
 m      m      o        k      h

間に特殊文字(#)をはさみます。

 m#m#o#k#h 

これをTwitterのパスワードにしようと思います。Twitterのアイコンは青い鳥ですね。
そこから固定文字列をBirdにします。

 m#m#o#k#hBird 

パスワードチェッカーで確認すると、一般的な家庭用のPCでこのパスワードを破るのに67年掛かることが分かります。
更に1文字だけ大文字に変えるなどすると11世紀になります。

ベースに何を選ぶのか、何を連想するのかはユーザ次第です。
法則を知らない人がこのパスワードを見たとしても、恐らく意味はわからないでしょう。


まとめ

主にWebサービスに設定する場合、強固なパスワードというのは推測しづらく破るのに時間の掛かるパスワードと同義です。(データ自体が流出してしまった場合とのリスクは区別して考えるべきです)
必ずしも今回ご紹介したような方法を取らなくても良いですが、何か一つ自分だけのパスワードルールを作ることで使い回しせずに楽にパスワード管理が行えるよ、というヒントになれば幸いです。