ハードウェアトークンって

以前(1年位前?)にここでも紹介した三井住友銀行とかのワンタイムパスワードの話。
RSAセキュリティのハードウェアトークンを使って認証する方式だって最初に聞いたときから疑問に思っていたことがあって、調べればすぐ分かるのに放置したままで、そのことをついさっき思い出したので調べてみた。
何が疑問だったかと言うと、サーバとトークンが物理的に途絶された状態で1分おきに異なるパスワードを生成する方法は(無線通信で無い限り)時刻同期以外に現実的にありえない*1わけだけど、じゃあその時刻そのものの同期はどうやってるの?という。要するにサーバ側はNTPで済む話だけど、あんなトークンの内蔵時計が将来に渡って誤差を生じない精緻なものであるなんて到底信じられないわけで。
で、まぁ本家のFAQでも見てみようかと。

ここの4番にそのものずばりな回答が。
ふむふむ。つまりサーバは当然シードが分かってるんだから、今の時間から前後4分くらいのパスワード全部生成してみて総当りで比較できるって訳だ。で、その誤差によって「このユーザのトークンの時計は何分遅れてる(進んでる)」ってのを割り出して、次からサーバの方でその「ずれ」を前提にチェック*2してくれると。
 意外と単純*3だけど、面白いな。
じゃあ、わざと2分前のパスワードを入れて、次の認証で4分前のパスワードを…とやっていくとある程度意図的にサーバ側のオフセットをずらすことが出来るわけだ。そして地道にやっていくと「昨日のこの時間」のパスワードが通る瞬間を作れる、と。まるで何の利益も無いけど。

*1:本当にありえないかどうかは分からない。僕が思いつかないだけ。他に現実的に可能な同期方法ありますかね?

*2:実際にはずれの大きさによって次のパスワードを入力させたりと、段階があるみたいね。

*3:こういうものの仕組みは単純であればある程いい。暗号そのものが単純じゃ困るが。