最近「Google 認証システム」を使い始めました。WordPressにもこの2段階認証システムを使ったワンタイムパスワードが利用できるようですが、このワンタイムパスワードだけでも本当に安全なのか?そもそもどんな仕組みなのか?
気になる所を色々とまとめてみましたのでご覧ください。
ワンタイムパスワードとは?
ワンタイムパスワード (OTP / One Time Password) はログイン時に入力するユーザーIDとパスワードに加えて入力する「使い捨てパスワード」のことです。
ワンタイムパスワードは2段階認証 (2要素認証 / マルチファクター認証とも言う) のためのシステムではないようですが、2段階認証との組み合わせでよく使われています。
数十秒~数分という一定時間で切り替わりその場限り有効となります。ちなみに、一度使ったら同じパスワードを使用することは出来ません。
このように、万が一ワンタイムパスワードが漏えいしてもその都度変わる「使い捨てパスワード」なので従来のパスワードに比べセキュリティが大幅にアップしています。
ネットバンキングで主に使われている印象のシステムですが、ネットバンキング以外でもGoogle認証システム (Google Authenticator) やYahoo!JAPAN ID、オンラインゲームというように幅広く使われています。
多くのWEBサービス・アプリでなりすまし・アカウントの乗っ取りに有効ということで推奨されています。
ワンタイムパスワードの受け取り方

一言にワンタイムパスワードといっても暗証番号の受け取り方はトークン、アプリ、メール、音声と様々です。1つずつ紹介しましょう。
photo by Tatsuo Yamashita
トークン
受け取り方には色々ありますがネットバンキングで主に用いられているのがトークンと呼ばれる小型の端末です。この端末にだいたい30秒~1分という一定時間で基本6ケタの暗証番号が表示され、切り替わります。
ワンタイムパスワードの切り替わる時間は短ければ短いほど安全性が高いそうです。ただあまりにもこの時間が短すぎするとトークンで暗証番号を確認してパソコン、スマホなどに入力するという作業なので使いにくいと思われます。
トークンで検索するとネットバンクで主に使われている事がわかります。私が使用しているネットバンクでもこのトークンを使い本人認証をします。オンラインゲームでも専用のトークンが使われているようです。
アプリ
ワンタイムパスワードをスマホアプリに送るという方法になります。アプリを使ったワンタイムパスワードはネットバンキングでも使われています。
ネットバンクやオンラインゲームでは、見た感じ暗証番号の送り先をトークン・アプリどちらにするのか選べる所が多いよな印象です。以前紹介した「Google 認証システム (Google Authenticator) 」やYahoo!JAPAN IDもワンタイムパスワードのシステムをアプリで提供しています。
メール
ワンタイムパスワードの送り先はトークン、アプリの他にEメールがあります。こちらは以前フリーメールでメール内容を読み取られた被害が確認されているようで、携帯のキャリアメールで登録する事がだいたいのネットバンクで推奨されています。詳しくは後述の「ワンタイムパスワードは本当に安全?!」で紹介しています。
格安SIMなど使っていてキャリアメールが使用できない環境の方はアプリやトークンなど他の方法がいいかもしれません。
音声
上記の方法以外にもあらかじめ登録しておいた電話番号に音声で通知するという方法もあるようです。
ワンタイムパスワードの種類・仕組み

ワンタイムパスワードの種類は大きく2つあります。「時刻同期方式 (タイムスタンプ方式)」と「チャレンジ・レスポンス方式」です。
時刻同期方式 (タイムスタンプ方式)
ワンタイムパスワードを生成しているトークン、アプリを見るとだいたい30秒~1分位で基本6桁の暗証番号が切り替わっているのが確認できます。それがタイムスタンプ方式 (timestamp)です。
タイムスタンプ方式の仕組み
6桁の暗証番号は時刻の経過に伴って別の暗証番号に切り替わり、それを繰り返します。認証を受ける側の利用者が自分の識別番号とトークン、またはアプリに時刻により表示された暗証番号を認証をする側のサーバーへと送信します。
サーバー側は利用者がどの時刻にどういった識別番号、暗証番号を送っているのかすでに把握しているのでそれらと照らし合わせて一致すれば認証されログインする事が出来ます。
チャレンジ&レスポンス方式
まず認証を受けたい利用者側が認証するサーバー宛てに認証リクエストを送ります。それを受けたサーバーはチャレンジと呼ばれるランダムな値を返します。チャレンジを受けた利用者側はチャレンジに基づいて計算された値をサーバー側へ送り返します。
予めサーバー側でも計算された値と送られてきた値が一致していれば認証されログインする事が出来ます。
ワンタイムパスワードは本当に安全?!
ワンタイムパスワードは通常のパスワードに比べ高度な安全技術だという事はわかりました。現状かなり効果の高い対策方法とも言われているそうです。ただワンタイムパスワードを使用していても100%安心・安全なのかというと、そうとも言い切れないのが現状です。
というのも過去にフリーメールに送ったワンタイムパスワードが漏えいして不正振り込みの被害にあってしまったり、ワンタイムパスワードが無効化されてしまったというケースも実際に発生しているからです。また、メールを使った認証の場合はパソコンメールにするのではなくキャリアメール (携帯メール) に暗証番号を送るようにする方の方が安全なのだとか。
まとめ
アプリ受け取りにしても脆弱性に対してアプリのアップデートを常に重ねていくだろうし、ワンタイムパスワードの仕組みも今後進化していく可能性はあるでしょう。
今回の記事でワンタイムパスワードは高い安全性を誇る事がわかりました。ただワンタイムパスワードを使ってるから確実に安全だとは言い切れない事もわかりました。より安全さを保つためには2重、3重の対策方法をしていく必要があるようです。