ワンタイムパスワードの技術: HOTP

ワンタイムパスワードのシステムでは、例えば通常のID/パスワードの組での認証に追加して一度しか使用できないパスワードをユーザに入力させることで、よりハックされにくい強力な認証システムを構成する。

昔からRSA SecurIDみたいなプロプライエタリなシステムはそこそこ使われていたけれど、アルゴリズムをオープンにしていろいろなデバイスに実装可能にしたシステムがRFCとして公開されているHOTP(HMAC-based One-Time Password)。

頭にHMACとついていることからわかるように、このシステムではまずシステム側があらかじめ両者で共有している共通鍵(変化しない)と使い捨てのカウンタ値(変化する)をHMAC-SHA-1アルゴリズムでハッシュ化し、結果を数値にエンコードしたバイト列の先頭数バイト(6バイト以上)をユーザに返す。

重要なのは、一度使ったカウンタ値は二度と使わないということ、そしてカウンタ値はシステムとユーザで共有されているということ。共有するためには、例えば何らかの乱数アルゴリズムを用いてシードと生成回数を同期しておくとか、あるいはもっと単純に、生成時間をカウンタ値として扱うこともできる。実際、生成時間をカウンタ値として使う手法が前回の記事で取り上げたTOTPとして別のRFCになっている。

SHA-1既に破られているけれど、HMACの一部として使う分には問題ないらしい。SHA-1NSA製なので、去年のNSA騒ぎから振り返ってみるとこの脆弱性は実はバックドアだったのでは…というのはうがった見方すぎるか。