記憶からパスワード生成
「画像認証」で紹介した認証手法は将来的には可能性があるものの、現存する大手サービスが画像認証を導入することは考えにくく、ほとんどのシステムやサービスでは今後もパスワードが使い続けられることが確実なので、パスワードを管理するための工夫はどうしても必要でしょう。 安全な長いパスワード文字列を記憶しておくことは困難です。複数のサービスを利用する場合はサービスごとに異なるパスワードを利用することが望ましいと考えられていますし、パスワードは定期的に更新することが望ましいとも考えられていますが、沢山の長いパスワード文字列を頭の中に覚えておくことはほとんど不可能だといえるでしょう。
そもそも人間は、どんな情報であれ、新しく覚えた情報は忘れてしまう可能性が高いので、新しく考えたパスワード文字列を記憶して認証に利用するやり方には本質的に無理があります。異なるパスワードをすべて記憶することが不可能なのであればパスワードをどこかに記録しておく必要がありますが、パスワード文字列をそのまま印刷したりファイルに書いておいたりするのは危険なので、複数のパスワードを秘密情報として扱うための「パスワード管理システム」が最近よく利用されています。 パスワード管理システムは、ひとつの「マスターパスワード」を利用して複数のパスワードを管理するもので、暗号化されたデータベースにパスワードを格納する OnePassword、Dashlane、LastPassのようなシステムや、サービス名をもとにマスターパスワードを変換することによって複数のパスワードを生成するSuperGenPassのようなシステムがあります。多数の強力なパスワードを簡単に運用することができるので便利ですが、マスターパスワードを盗まれたり忘れたりする危険がありますし、これらのシステムを使える環境でないとパスワードを利用できないという制約もあります。Web上のパスワード管理サービスであればどこでもブラウザ経由で利用することができますが、他人のサイトにパスワード管理をまかせてしまうのは心配かもしれません。 パスワードを覚えるかわりに生成する
人間が新しく覚えた情報を必ず忘れるものであるならば、新しいパスワードを考えたり覚えたりする努力は不毛でしょう。一方、忘れることがないエピソード記憶を誰もが持っているのであれば、そのようなものを利用してパスワードを生成する方が妥当に思われます。そういうアイデアにもとづいて、忘れることがないエピソード記憶をもとにしてパスワードを自動生成するシステム「EpisoPass」を作って運用しています。 EpisoPassは、ユーザが忘れることがない個人的なエピソード記憶をなぞなぞ問題の形で表現し、それに対する答の選択を文字列に変換することによって安全なパスワード文字列を生成するシステムです。EpisoPassでは以下のような手順でパスワード文字列を生成して利用します。
1. パスワード生成の「種」となる文字列(シード文字列)を用意する。たとえば英数字パスワードを要求するABCというサービスがある場合、「ABC123」のような文字列をシード文字列として使う。 2. 忘れることがない個人的なエピソード記憶にもとづくなぞなぞ問題を複数作成し、それぞれについてひとつの正答と複数の偽答を用意する。自分だけが答を知っている問題を使う。
3. 質問と回答の組にもとづいてシード文字列中の文字を別の文字に変換し、すべての問題に正しく回答したとき生成される文字列をパスワードとして利用する。たとえば正しく回答した場合だけ「ABC123」が「XYZ987」に変換され、誤答した場合は別の文字列に変換されるとすると、「XYZ987」をパスワードとして登録する。
4. パスワードを記憶する必要はない。なぞなぞ問題は紛失しない場所に記録しておく。
EpisoPass利用例
次頁の図は、私がtwitterのパスワードを生成するためにブラウザでEpisoPassを利用しているところです。シード文字列としてここでは「Twitter123456」という文字列を指定しており、4個の秘密の質問に対する回答選択に応じて「Mfveabn574923」のようなパスワード候補が生成されます。異なる答を選択したり異なるシードを指定すると全く異なる文字列が生成されます。シード文字列の8文字目が数字である場合はパスワードの8文字目も数字になるなど、シード文字列の文字種に対応したパスワード候補が生成されます。
http://gyazo.com/785ff09b4233804d2ec89c3af71ee5d0.png
EpisoPass利用例
最初の秘密の質問は私の小学校の同級生に関するもので、最後の質問は数年前の体験に関するものです。これらの質問は私の古いエピソード記憶にもとづいており、私が答を忘れることはほとんど考えられませんが、私以外がこのような質問に答えることは難しいので正しいパスワードを得ることはできないと思われます。
秘密の質問と答はブラウザで編集でき、右上の「サーバにセーブ」ボタンを押すことによりシード文字列、秘密の問題、答のリストがEpisoPassサーバにセーブされます。「ファイルにセーブ」ボタンを押すとなぞなぞ問題のデータをパソコンにダウンロードでき、パソコン上の問題データをブラウザにドラッグ\&ドロップするとサーバにアップロードできます。ユーザはどれが正答かを指定するわけではないので、問題データを見てもユーザのパスワードはわかりません。
シード文字列を「Facebook123456」に変更すると、生成されるパスワードは次の図のように変化します。このように、サービスごとに異なるシード文字列を利用することによって様々なパスワードを簡単に生成できることになります。
http://gyazo.com/36c371a13a8250c60fb9c03174382443.png
FaceBookのパスワードを計算
定期的にパスワード変更を求められるシステムでは、「利用時期は?」という質問に対して「1月」「2月」のような答を用意しておけば、 時期を選択することによってパスワードを変更することができます。
EpisoPassアプリ
EpisoPass.comを利用する場合、ブラウザとサーバとの間の通信を記録されたり盗み見されたりされる心配を完全に払拭することはできません。パスワードはブラウザ内部でJavaScriptにより生成されるので、一度ページを表示した後はネットワークを遮断してもパスワード計算を行なえるようになっていますが、最初から全く通信を行なわずにパスワードを作成できる方がより安心でしょう。このため、通信を全く行なわずにマシン単体でパスワード計算を行なうためのAndroidアプリを用意してあります。ページの右上の「Androidアプリ」ボタンを押すと、現在表示している秘密の問題と答を内蔵したAndroidアプリがサーバ上でビルドされてダウンロードされます。
http://gyazo.com/ed05fe4e56bf0aa6283a4c32631cf830.png
Anddroidアプリ
回答入力とパスワード計算はAndroid端末で実行されるため、端末を「機内モード」に設定したりしてネットワーク接続を完全に遮断した状態でもパスワードを計算することができます。EpisoPassをインストールしたAndroid端末を持っていれば常に各種のパスワードを計算できるので、パスワードを覚えていなくてもネットカフェなどからTwitterやFacebookにログインできます。
EpisoPassの安全性
パスワードは長年利用されているため強度や実際の運用に関して多くの研究が存在しますが(*,*)、秘密の質問の強度に関しては充分な研究が行なわれていません。EpisoPassで選択枝が10個の秘密の質問を8個使用する場合、総当たりでパスワードを生成するには$ 10^8= 1億通りの試行が必要です。英字からランダムに8文字を並べてパスワードを作ればもっと強力にはなりますが、実際には完全にランダムな文字列が利用されることは少ないので、秘密の質問と選択枝の数を10個程度用意すれば通常のパスワードと同程度の強度が期待できることになります。 一方、秘密でない問題を設定してしまうと簡単に解かれてしまう可能性はあります。「母親の旧姓は?」や「最初に飼ったペットの名前は?」のようなありがちな問題を使うと、他人が簡単に調べたり推測したりできてしまうのでパスワードよりも脆弱になってしまうでしょう。他人に解かれにくい問題をユーザが作成するのは面倒ですが、次のような方針で適切な質問を選ぶことによりこの問題を解決できるでしょう。
まず、以下のような性質をもつ記憶は秘密の質問として利用すべきではありません。
自慢になるもの
(何かの機会にうっかり他人に話してしまう可能性がある)
ネット上に記録が残っているもの
(検索すればわかる)
他人と情報を共有しているもの
(人に聞けばわかる)
趣味や嗜好に関連するもの
(他人に推測されやすいうえに嗜好が変化する可能性がある)
一方、「わざわざ人に話すことはないが自分の記憶に強く残っているような無難なエピソード記憶」を秘密の質問として利用すれば安全でしょう。具体例としては以下のようなものが考えられます。
昔のちょっとした怪我の場所や種類
昔のちょっと悔しい思い出
昔何かを見つけた場所
昔よく行っていた場所
たとえばEpisoPass利用例の3問目のような経験は他人に話したことがありませんが、痛い思いをしたことは忘れませんし、偽答の地名を並べるのも簡単なので、認証のための秘密の質問として適切であると思われます。
認証システムの展望
サービス提供者がパスワードより有望な認証システムを思いついたとしても、それを採用したことが原因となってクラッキングが発生する危険を考えると、新しい認証システムを迂闊に採用する気にはならないと思われます。パスワードを利用するシステムは沢山存在するので、それを利用している限りサービス提供者やシステム開発者に責任問題が発生することはありません。パスワードの不便さに誰もが憤死しようとも、別の方式に取って代わられる日は遠そうです。こういう意味では、全く新しい画像認証のような手法が主流になる時代がすぐに来るとは考えられません。
一方、EpisoPassのようなパスワード管理システムを利用することによってパスワードの欠点を軽減することは可能でしょう。パスワード認証というインフラの上に、自己流の認証手法をパスワードに変換して使う手法がこれから有望だろうと思います。