二段階認証
パスワードとか暗証番号って、よく考えたら、実に偶然に頼っているんですよね。
例えば、銀行のキャッシュカードを使うには4桁の暗証番号を入力します。
あれって、1万分の1の確率で突破されてしまいます。
0000から9999のいずれかの数字がアタリですから。
だから、キャッシュカードを拾った人が1万人いれば、そのうち1人は預金を引き出せてしまう可能性があるわけです。確率的には。
キャッシュカードと暗証番号の組み合わせは、あくまでもアタリの確率を下げるためのモノであって、確率をゼロにするモノでは無いんですよね。
まあ1万分の1なら、普通は大丈夫だとは思いますが、その確率をさらに小さくするには暗証番号の桁数を増やせば良いんですね。
6桁にすれば、100万分の1になり、より安全です。
でも、6桁の番号を覚えておくのは、ちょっと大変なので、実用性と安全性のバランスをとって、キャッシュカードの暗証番号は4桁になったわけです。
最近は、インターネットショッピング、インターネットバンキングの利用が一般化しました。
ATMでキャッシュカードを使う以上にセキュリティのリスクが高いので、二段階認証ととか二要素認証が使われます。
二要素認証
単純に二段階認証と言えば、例えば、暗証番号を2回入力するようなパターンですね。
もちろん1回目と2回目は異なる番号です。
最も単純なのは、あらかじめ2通りの暗証番号を決めておいて、それぞれ入力するタイプ。
1つ目が4桁。
2つ目も4桁。
実質的に8桁です。
そうすると、1万分の1のさらに1万分の1なので1億分の1です。
かなり安全ですね。
でも、4桁であろうと8桁であろうと、誰かに知られてしまえば終わりです。
知っていれば誰でも解除できるのが暗証番号の弱点。
1つ目も2つ目も知識情報であるがゆえの弱点ですね。
知識情報は知っているかどうかがポイントになります。
そこで、多くの銀行で使われているのが、トークン方式。
ボクの手元にも、ジャパンネット銀行やゆうちょ銀行のトークンがあります。
トークンは6桁の暗証番号が表示されますが、これは刻々と変化します。
なので、この数字を覚えても意味はありません。
IDとパスワードを入力し、さらにトークンに表示されている数字を入力する。
これだと、トークンを盗まれない限り安全です。
1つ目の暗証番号を誰かに知られても、2つめのトークンの数字は変化するので、トークンを持っている人しか知るコトはできません。
さっき書いたのは知識情報によるセキュリティでしたが、こちらは所有によるセキュリティですね。
1つ目に入力するのは知識情報。2つ目は所有。
こうやって異なる複数の要素を組み合わせるのが多要素認証です。
さっきのは、2つの暗証番号を使うので二段階(多段階)認証ですが、どちらも知識情報なので要素としては同じです。つまり多要素認証ではありません。
セキュリティ面でより安全なのは、多段階認証認容よりも多要素認証です。
と言うわけで、多要素認証はかなり安全ですね。
以上が、一般的な多要素認証の話ですが、ボクはさらに疑問を持ちます。
だって、トークンに表示されるのは単なる6桁の数値です。
と言うコトは、トークンを持っていない誰かが6桁の数値を入力すれば、たまたま当たってしまう可能性があります。
トークンに表示される数字は刻々と変化すると書きましたが、例えば、トークンに表示される数値が、
135246
のときに、どこかの誰かがたまたま、
135246
と入力してしまえばアタリなのです。トークンを持っていなくても突破できてしまうんです。
もちろん恐ろしく小さな確率ではありますが、ゼロではありません。
トークンを持っているコトが鍵であるかのように錯覚しがちですが、よく考えれば、トークンに表示される数値が鍵であって、トークンそのモノを持っている必要は無いわけです。
トークンが無くても数値とタイミングが合えば突破です。
そう言う意味では、実はトークンも、所有によるセキュリティではありません。
結局は知識情報による認証ですから。
それと同じなのがSMSによる認証ですね。
同一の電話番号のスマートフォンは世界に1台しかありませんから、それ宛てに送られてくるSMSは世界に1通のみ。
だから安全だと思いがちですが、実際に必要なのは、SMSに記載されている6桁の数値です。
なので、SMSを受け取れない人でも、たまたま6桁の数値を当ててしまえば、突破できてしまうんですよね。
ここまで書いたどの方式も、要素は異なっても、結局は知識情報によるセキュリティであるコトには変わりありません。
だから、トークンであってもSMSであっても、多要素認証にはなっていないんですよね。
パソコンの高価なアプリでは、専用のUSBトークンをパソコンのUSB端子に差し込まないと起動しないタイプのモノがあります。
これは物理的にUSBトークンを所持していないと動かないので、さっきのようにトークンに数値が表示されるのとはまったく意味が違います。
ホントの意味で所有者しか使えないわけです。
銀行などのセキュリティを高めるには、こう言った物理的所有を使うのが安全ですが、一方で、そんなモノをスマホと一緒に持ち歩くわけには行きません。
紛失リスクがあるので。
ここまでのまとめですが、数値などの知識情報だと他人が当ててしまう可能性があり、USBトークンだと紛失リスクがある。
そう考えると、そのどちらでも無いのが、Googleの多要素認証。
Googleアカウントにログインする際に、IDとパスワードの他に、同じアカウントのGmailアプリに表示される承認ボタンを押す必要があります。
これなら、知識認証ではありませんし、物理的なトークンを持ち歩く必要もありません。もちろんスマホは持ち歩きますが。
世界に1台だけの端末内のアプリの承認ボタンを押すだけ。
でも、他人にはできません。スマホを紛失しても、スマホにロックがかかっていれば他人には操作できませんから。
と言うわけで、確率的に最も安全で、かつ実用的なのは、
スマホの顔認証(指紋認証)
↓
IDとパスワードでのログイン
↓
アプリでの認証
と言う流れですね。
ボクが言いたかったのは、銀行のトークンやSMSは、よく考えたら、それ自体が無くても、そこに表示されている数値が当たれば他人でも突破できるので、所有者要素のセキュリティでは無く、知識情報のセキュリティであると言うコトです。
つまり、銀行のトークンやSMSは多段階認証ですが、厳密には多要素認証とは言えない、と言う話です。