本日のお題。ワンタイムパスワードのドングル

さて、いきなり意味がわからないタイトルだったりするのだけど、実は・・・

 

ワンタイムパスワードを表示するドングルってサーバとどうやってデータをやり取りしてるの?」

 

なんて聞かれたので考えてみた。

単純になんとかしてネットに繋いでサーバと同期でも取ってるのかと思ってたんだけど、考えれば考えるほど無理があるw

スマホやPCのアプリだったらネットに繋がってる事を前提に出来るだろうけど・・・

USBに繋ぐとかだろうか??とも思ったけど、それも無理がある。そもそもパソコンなんて持ってないって人がスマホで使うって事もありえるよね(--;)

 

で・・・最終的に思いついたのは、ドングルとサーバで同じアルゴリズムのプログラムを実行してやれば良いんじゃないかと。

ただ、闇雲に実行しても一緒の値にならないと意味が無いのでキーになるIDやドングルの個体番号(シリアルとか?)を元に計算させれば良いのだけど、それだと毎回同じになるので、可変する数値やデータが必要となる。

一番簡単で絶対に同じにならない数字と言えば・・・日時。

時間だけだと24時間で1周しちゃうけど、日付を付け加えれば同じ数字は絶対に無い。

でも、これだと同じ時間に実行されてないと認証に失敗するやん。。。(--;)

う~ん・・・

という訳でGoogle先生で答え合わせ(笑)

 方法としてはいくつかあると思うけど、とりあえず簡単な方法

1.ドングルを発行する際に時間合わせをする方法

例えば30秒や1分間隔でワンタイムパスワードを発行する仕組みとする。

ドングルを発行する際にサーバに一度接続させてよーいどんでワンタイムパスワードを定期的に更新するようにしておく。

これだと実時間ではなくて、スタートしてから何分経過したかでパスワードを発行するので時間を合わせる必要がない。

後は、発行したワンタイムパスワードの有効期間内に認証すればOK

 

2.ボタンを押したらワンタイムパスワードが更新される方法

これは実時間を使ってパスワードを生成する。

ユーザが認証にパスワードを入力したら、その時間から閾値を決めた有効範囲内のパスワードを1秒単位で計算して、同じ文字列があれば認証OKとする

閾値の有効範囲が広ければ広いほど計算回数が増えるのでサーバ側のスペックはある程度高くないとダメ

 

こんな感じみたい。

自作でVB.netLinuxサーバ+ApachePHPで簡易なワンタイムパスワードの仕組みを作ってみたけど、サーバ側にワンタイムパスワードを保存しないといけないのでセキュリティ的に微妙だった。

なるほど、こういう仕組みであればネットに繋いでなくてもワンタイムパスワード認証が出来るのか。大変参考になりました(^^)

 

 こういうドングルを買った場合はサーバサイドのプログラムは自作が必要なのか、サンプルプログラムが存在してて自分のプログラムに組込めって事なのかな??

 

 こういうの読んで勉強しなきゃダメかなぁ^^;

APT対策入門 新型サイバー攻撃の検知と対応 (Next Publishing)

APT対策入門 新型サイバー攻撃の検知と対応 (Next Publishing)