目次|次

ハードウェアを使わないワンタイムパスワードの例とその脆弱性について

ハードウェアを使わないワンタイムパスワードとして、次のような例を考える。

利用者は、次の48個の位置のなかから4箇所を順序つきで記憶し、かつサーバーに登録しておく。

********0***
****0*******
0***********
****0*******

サーバーは次のようなランダムな数字列を送信する。

889791709035
464056147292
437371314237
916534771417

利用者は記憶しておいた4箇所をみて、次のように入力を行う。
 9543

この方式では、次に認証を行うときには別のランダム数字列

741723187895
602694176214
300972650648
169069585679

が利用者に提示されるので、対応する入力は
 7936
となる。

この方式では、入力するパスワードが毎回異なるので安全性が高く見える。 しかし、実際には表とパスワードの組が2回ほど漏洩すると、秘密にしていた はずの4箇所が次のように容易に推定されてしまう。

1回目(9543)
889791709035
464056147292
437371314237
916534771417
2回目(7936)
741723187895
602694176214
300972650648
1690 6958 5679

赤字が第一番目の位置の候補、緑が二番目の位置の候補、青が三番目の位置の候補、紫が四番目の位置の候補である。そこで、左右の表を見比べて、同じ色の位置を探す。

したがって、利用者の記憶している位置情報が判明したことになる。

これは、この例で偶然2回という少ない回数で分かったのではない。数字は10種類あるので、 各位置の候補が1回の漏洩につき1/10に減っていくのである。 位置の組合せの数をnkey、1回の入力の数字の桁数をn、位置を推定されるまでの 平均回数をmとすると

 nkey × 10-n×m= 1

つまり m = 1/n × log10nkey

この例ではnkey = 192C4 = 54,870,480であるから、 m は約1.93になり、平均2回程度で秘密の位置情報が推定されることになる。