時刻がポイントでしょう。 時間で同期が取れると(もちろん、大事な要素は他にあるけど)。
個々のトークンが生成するワンタイムパスワード(と、トークン生成したワンタイムパスワードを受け入れるサーバー側)で、逐次にワンタイムパスワードは変化をしつつ、値がユニークになる仕組み(計算をして)、ワンタイムパスワードを生成してます。
トークンとサーバー側では、互いにオフラインであっても、同じ仕組みでワンタイムパスワードを計算すれば同じ結果が得られますね。
双方で同じとなる、つまり同期ができるポイントは、変化をする時間(時刻)です。
(もちろん、ワンタイムパスワードの仕組みは、他に色々多彩です)
同じ計算をするするのは、乱数表による暗号が、送信者と受信者で同じ乱数表を使うのと似てるとも言えます。 同じ仕組みを使うから、双方で同じ結果が得られたりで把握ができると。
また、個々のユニークとなる材料としては、個々の識別をするシリアル番号もあるでしょう(直接シリアル番号を使わずに、もっとユニークで長い値を使っている、ある種の鍵を使っているかも?!)。
とにかく同じ計算式で同じ時刻で、個々のトークンでユニークになれば良いのです(それと、ワンタイムパスワードは、6桁と短いから、偶発的に同じ値は、他でも確率としてはあるかもしれませんけどね、致命的問題にはなりませんね)。
時刻がポイントですから内蔵されている時計を用いてますが、高級腕時計で見られるような、年差クォーツの様な高精度な時計は内蔵してないはずなので、月差レベルで時刻の誤差はでるでしょう、時刻補正をする仕組みがトークンには無いから、月差による誤差は蓄積するので、誤差も加味しつつでしょうね。
時計の月差は、時計のスペックとしてありますから、誤差がどれくらい生じるかは予め予測と把握もできます。
ここから、誤差の算出もすれば、ワンタイムパスワードの生成される時刻のタイミングのズレも調整はできるでしょう。
また、バッテリーの寿命もありますが、トークンの機器自体に、有効期限があるモノもありますね(有効期限前に新しいトークンを取得です)。 時刻の誤差がどんどん広がる前に、有効期限で利用が終了となります。
もちろん、有効期限が無いモノもあります(バッテリーの寿命がトークンの寿命ということかな?!、時刻の誤差への許容度が高いのか?!、細かいところは表に出てきませんけどね)
こういうのは、バッテリーの低下警告が出たら、新しいモノを申請ですね。
トークンは、個々にシリアル番号が割当されますが、このシリアル番号とユーザーは紐付けもされます。 これで、ユーザーの識別ができますね。
予めユーザーとシリアル番号を紐付けされる(登録済み)で配布をするか、配布されたものをユーザー側でシリアル番号の登録をオンラインで申請するか、運用の手順は色々でしょうけど、このシリアル番号のトークンは、ユーザーの誰が使っているかということは、紐付けをされてます。