はじめに
TOTPは多要素認証(二段階認証)の一つで、ワンタイムパスワード(OTP)をスマートフォンなどにインストールされたソフトウェアで生成し、それをログインの際に用いる認証方法である。この記事では、攻撃者が総当たり攻撃を用いてTOTPを破るまでに必要な時間を計算することにする。
なお、筆者は数学の知識がそれほどあるわけではないので、もし微妙な部分があったら気軽にコメントなどで指摘してほしいと思う。
アイディア
この記事のアイディアは、「TOTPが30秒に一度パスワードが変更される認証」と考えることで、下記の記事の数式を用いることである。
パスワードが変更される際の、攻撃者がパスワードを知るために必要な平均時間
これは上記の記事で述べられていることを、僕が再度書き下したものなので、最後の結論以外はあまり読む必要がない。
攻撃者がパスワードを知るために必要な時間
まず、計算に必要なパラメータを次のように定義する。
記号 | 意味 |
---|---|
パスワードの空間 | |
一度の試行に必要な時間 |
まず、攻撃者が通りのパスワードの中から正解のパスワードを知るために必要な時間を計算する。通りのパスワードの中から正解のパスワードを知るためには、最大で回の試行をすればよいので、パスワードを知るために必要な平均時間は次のようになる。
m回の試行でパスワードが判明する時間の期待値
TOTPのパスワードが秒で変更されるとすると、攻撃者はパスワードが変更される前までに回の試行を行うことができる。
これは、さきほどと同じように、次のようになる。
m+1, m+2回の試行でパスワードが正解する確率
回の試行でパスワードが正解するということは、まず1回目の試行での確率で失敗し、さらに2回目の試行ではの確率で失敗し……と失敗をひたすら繰り返してゆき、回目の試行での確率で失敗した後、パスワードが変更されて回目の試行でで成功する、という確率となるので、次の式で求められる。
として、同様にの場合を考える。
最初のパスワード変更から2回目の変更までの間にパスワードが正解する時間の期待値
最初のパスワード変更があったということは、攻撃者はすでに回の試行をしていることになるので、時間はからスタートとなる。時間の期待値は“確率×時間”なので、次のようになる。
2回目のパスワード変更が行われた次の試行でパスワードが正解する確率
これは、最初のパスワード変更までにパスワードが正解する確率と、最初のパスワード変更から2回目のパスワード変更までにパスワードが正解する確率を用いて次のように表せる。
まず、最初のパスワード変更から回の試行でパスワードが正解する確率はを回試行したものなので、次のようになる。
同様に、
よって、
2回目のパスワード変更から3回目のパスワード変更までの間にパスワードが正解する時間の期待値
さきほどのと同様に次のようになる。
j回目のパスワード変更が行われた次の試行でパスワードが正解する確率
上記の結果から次のようになると推測される1。
j回目のパスワード変更からj+1回目のパスワード変更までの間にパスワードが正解する時間の期待値
これは次のようになる。
攻撃者が定期的に変更されるパスワードを知るためにかかる平均時間
これはを無限回足したものであるので、次のようになる。
TOTPへの応用
TOTPでは上で求めた変数のうち、いくつかを埋めることができる。
変数 | 値 |
---|---|
2 | |
(秒) |
すると、となるので、からを排除することができ、(一回の試行に必要な時間)とパスワードが正解する平均時間の関数を次のように作ることができる。
これをプロットすると次のようになる。なお、横軸が1回の試行に必要な時間であり、縦軸が攻撃者がパスワードを知るために必要な時間である。
もし0.2秒で1回の試行ができるとすると、約5万秒(半日)でTOTPの正解に辿りつくということになる。
まとめ
今回はTOTPをパスワードを変更するという操作とみなすことで、攻撃者がTOTPを総当たり攻撃で破るために必要な時間を計算することができたと思う。また計算が正しいとすれば、30秒に一度パスワードが変更されるとはいえ、総当たり攻撃に対しては別の対策を講じる必要があると思う。