説明

ワンタイムパスワード

トークンは、キーKおよびカウンタ値Cに基づいて、HMAC−SHA−1値を発生させ、10^Digitを法として、発生されたHMAC−SHA−1値を打ち切ることによって、ワンタイムパスワードを計算する。ここで、Digitはワンタイムパスワードの数字の数である。Kおよびバリデーションサーバ自体のカウンタ値C’を使用して、それ自体のバージョンのパスワードを計算するバリデーションサーバによって、ワンタイムパスワードを確認することができる。最初の不整合があった場合に、バリデーションサーバは、ルックアヘッドウィンドウ内でカウンタCとC’との間の同期化の欠如を補償する。ルックアヘッドウィンドウのサイズは、パラメータsによって設定可能である。

【発明の詳細な説明】
【発明の分野】
【0001】
本発明の分野は、コンピュータの安全性である。さらに詳細に述べると、ワンタイムパスワードによる認証である。
【発明の背景】
【0002】
現在、2要素認証の展開は、範囲およびスケールが非常に限定されたままである。脅威および攻撃のレベルが一層より高くなってきているにもかかわらず、大部分のインターネットアプリケーションは、ユーザアクセスを取り締まるための軟弱な認証スキームに依然として依存している。ハードウェアおよびソフトウェア技術ベンダ間の相互運用性の欠如が、2要素認証技術の採用における制約要因である。特に、ハードウェアおよびソフトウェアのコンポーネントは、知的所有権下にある技術を通して緻密に結合されていることが多く、結果的に、解決に高コストとなり、採用が少なく、および革新が限定的となる。
【0003】
過去2年間における、ネットワーク脅威の急速な増加は、インターネット上の認証の主要手段としての静的パスワードの不完全さを明らかにした。同時に、ネットワークに対する認証のみに使用される高価な単機能型のデバイスをエンドユーザが所持することを要求する現在のアプローチは、明らかに適切な対応策でない。2要素認証をインターネット上で普及するために、広範囲なアプリケーションにわたって機能可能な、より柔軟性あるデバイスに2要素認証を埋め込まなければならない。
【0004】
ワンタイムパスワードは、確かに、ネットワークアクセスを安全にするための最も簡単で最も普及している2要素認証の形態のうちの1つである。例えば、大企業では、仮想私設ネットワークアクセスは、リモートユーザの認証のために、ワンタイムパスワードのトークンの使用を要求することが多い。エアギャップデバイスは、任意のクライアントのデスクトップソフトウェアのユーザマシーンへのインストールを必要としないので、ワンタイムパスワードは、PKIまたは生体測定のような、より強力な認証の形態を好むことが多い。したがって、これにより、ホームコンピュータ、キオスクおよびパーソナルデジタルアシスタントを含む複数のマシーンにわたってローミングすることができるようになる。
【発明の概要】
【0005】
本発明の実施形態にしたがうと、何らかのハードウェア製造業者またはソフトウェアデベロッパによって、ワンタイムパスワードアルゴリズムを実現して、相互運用性のある認証デバイスおよびソフトウェアエージェントを生成することができる。Java(登録商標)スマートカード、USBドングルおよびGSMのSIMカードのような高容量デバイスにアルゴリズムを埋め込むことができるように、アルゴリズムはイベントベースであってもよい。インターネット技術標準化委員会(IETF)の取引条件のもとで、アルゴリズムは、デベロッパコミュニティにとって自由に利用可能になる。
【詳細な説明】
【0006】
本発明の実施形態にしたがうと、アルゴリズムは、シーケンスまたはカウンタベースとすることが可能であり、そして、バッテリ、ボタン数、計算馬力およびディスプレイのサイズに関する必要条件を最小限にすることによって、ハードウェアで効率的に実現することができる。アルゴリズムは、何らかの数入力をサポートしないトークンを使用して動作させることができるが、安全なPINパッドのような、より高性能化したデバイスで使用することも可能である。
【0007】
トークン上で表示される値は、ユーザによって容易に読み取られ、パーソナルコンピュータ、携帯電話機、現金自動預払機または他の何らかの適切なデバイスのような別のデバイスに入力される。このことにより、ワンタイムパスワード(OTP)値が、適度な長さのものであるように要求される。多くのケースにおいて、OTP値は、安全性の理由から少なくとも6数字の値であるべきである。電話機のような単純なキーパッドを備えたデバイス上にOTP値を容易に入力できるように、OTP値は数字のみであると便利である。
【0008】
カウンタを再同期化するのに利用可能なユーザフレンドリなメカニズムがある。アルゴリズムには、強力な共有シークレットが使用されるべきである。このために、共有シークレットの長さは、128ビット、または、より長いビットである。
【0009】
以下の表記法およびシンボルを使用して、本発明にしたがったアルゴリズムの実施形態を説明する。
【0010】
ストリングはバイナリストリングを意味しており、バイナリストリングは、0および1のシーケンスを意味している。
【0011】
sがストリングである場合、|s|はストリングの長さを示す。
【0012】
nが数字である場合、|n|は絶対値を示す。
【0013】
sがストリングである場合、s[i]はストリングのi番目のビットを示す。ビットは、0からビットの番号が振られているので、s=s[0]s[1]...s[n−1]となる。ここで、n=|s|はsの長さである。
【0014】
(ストリングを数にする)StToNumは、バイナリの入力ストリングsの10進法の表示を返す関数を示す。例えば、StToNum(110)=6である。
【0015】
以下の表記法をシンボルに使用する。
Cは、8バイトのカウンタ値、ムービング係数である。このカウンタは、OTP発生器(例えば、クライアント)とOTPバリデイター(例えば、サーバ)との間を同期化させることができる。
Kは、クライアントとサーバとの間の共有シークレットである。各OTP発生器は、異なった一意的なシークレットKを有することができる。
Tは、スロットルパラメータである。サーバは、T回の認証試行の不成功の後にユーザからの接続を拒否できる、でなければ、所定の源からの過剰な数の妥当性確認試行を示すスロットル信号を受け取り人に送ることができる。
sは、再同期化パラメータである。サーバは、s個の連続的なカウンタ値にわたって、受け取った認証符号の確認を試みることができる。
Digitは、OTP値の数字の数であり、この数字数はシステムパラメータであってもよい。
本発明にしたがったOTPアルゴリズムは、トークンおよびバリデーションサービスのみに知られている、増加するカウンタ値および静的対称キーに基づくことができる。OTP値を生成するために、1997年2月にM. Bellare氏, R.Canetti氏、およびH. Krawczyk氏によって出されたIETF Network Working GroupのRFC 2104の“HMAC: Keyed−Hashing for Message Authentication”において規定されているように、HMMAC−SHA−1アルゴリズムを使用できる。
【0016】
HMAC−SHA1の計算の出力は160ビットであり、これは、ユーザによって容易に入力できるサイズに打ち切ることができる値である。したがって、
HOTP(K,C)=Truncate(HMAC−SHA−1(K,C))となる。
ここで、Truncateは、HMAC−SHA−1値をHMAC−SHA−1 OTP(HOTP)値に変換する関数を示している。キー(K)、カウンタ(C)およびデータ値は、最初に上位バイトをハッシュすることができる。HOTP発生器によって発生されたHOTP値をビッグエンディアンとして取り扱うことができる。
【0017】
3つの異なるステップでHOTP値を発生させることができる。
ステップ1:HMAC−SHA−1値を発生させる。
HS=HMAC−SHA−1(K,C)とする。ここで、HSは、20バイトストリングとすることができる。
ステップ2:4バイトストリング(Dynamic Truncation)を発生させる。
Sbits=DT(HS)とし、これは31ビットストリングを返すことができる。
Dynamic TruncationDT(String)は、String=String[0]... String[19]で、以下のように動作することができる。
OffsetBitをString[19]の下位4ビットとする。
Offset=StToNum(OffSetBits)であり、ここで、0<=OffSet<=15である。
P=String[OffSet]... String[OffSet+3]とする。
Pの最後の31ビットを返す。
【0018】
Pの最上位のビットをマスキングすることによって、有符号および無符号モジュロ計算間の混乱を回避することができる。異なるプロセッサがこれらの演算を別々に行い、有符号ビットをマスキングアウトすることによって、あいまい性を解消できる。
【0019】
ステップ3:HOTP値を計算する。
Snum=StToNum(s)とする。すなわち、Sを0...2^{31}−1の数に変換する。
D=Snum mod10^Digitを返す。ここで、Dは、0...10^{Digit}−1の範囲の数である。
【0020】
Truncate関数は、ステップ2およびステップ3、すなわち、動的な打ち切りをし、そして10^Digitを法とした還元を行なう。動的オフセット打ち切り技術の目的は、160ビット(20バイト)HMAC−SHA1の結果から、4バイトの動的なバイナリコードを取り出すことである。
【0021】
インプリメンテーションは、少なくとも6数字のコードを取り出すべきである。安全性の要求次第で、より長いHOTP値を取り出すためにDigit=7またはより多くのものを考えなければならない。
【0022】
下記は、Digit=6に対してこの技術を使用している例である。すなわち、6数字のHOTP値が、HMAC値から計算される。このコードの例は、hmac_resultがHMAC−SHA1の結果によるバイトアレイであることを仮定して、動的バイナリコードの取り出しを説明している。
【数1】

【0023】
* 最後のバイト(バイト19)は、16進値0x5aを持つ。
* 下位の4つのビットの値は、0xa(オフセット値)である。
* オフセット値は、バイト10(0xa)である。
* バイト10で始まる4バイトの値は0x50ef7f19であり、これは、動的バイナリコードDBC1である。
* DBC1のMSBは0x50であるので、DBC2=DBC1=0x50ef7f19である。
* HOTP=10^6を法としたDBC2=872921である。
31ビット、無符号のビッグエンディアン整数として動的バイナリコードを取り扱う。つまり、最初のバイトは0x7fでマスキングされる。1,000,000(10^6)を法としたこの数を用いて、6数字のHOTP値である十進法の872921を発生させる。
【0024】
あらゆるワンタイムパスワードアルゴリズムは、ワンタイムパスワードアルゴリズムを実現するアプリケーションおよび認証プロトコルと同じ程度の安全性であるにすぎない。パラメータTおよびsは、安全性に対して重大な影響を与えることがある。HMAC−SHA−1値をより短い値に打ち切ることは、総当り攻撃を可能にする。それゆえ、認証サーバは、総当り攻撃を検出して阻止すべきである。ワンタイムパスワードの妥当性確認の実行可能な試行の最大数を規定するスロットルパラメータTは、適切な小さい数に設定すべきである。バリデーションサーバは、何らかの失敗した試行に気付くために、HOTPデバイス毎に個々のカウンタを管理できる。特に、サーバ上で使用される再同期化の方法がウィンドウベースである場合に、そして、ウィンドウサイズが大きい場合に、Tを大きすぎるものとすべきではない。Tは、ユーザビリティにあまり悪影響を及ばさない限り、できるだけ低く設定すべきである。
【0025】
別のオプションは、総攻撃を回避するために遅延スキームを実現することである。それぞれ失敗したA回の試行の後に、認証サーバは、増加したT*A秒数待つ。例えば、T=5とすると、1回の試行の後、サーバは5秒間待つ。2回目の失敗した試行では、サーバは5*2=10秒待つ等である。
【0026】
遅延またはロックアウトスキームは、ログインセッションにわたって行なわれ、複数の並列推測技術に基づく、攻撃を回避すべきである。
【0027】
証明者と検証者との間の認証方法としてHOTPを実現するためのプロトコルPは、安全性のためにある性質がなければならない。Pは、2要素、すなわち、ユーザが知っているもの(パスワード、パスフレーズ、PINコード等のようなシークレットコード)、およびユーザが持つもの(トークン)である。シークレットコードは、ユーザのみに知られており、認証(2要素認証)する目的で、ワンタイムパスワード値で入力できるものとすべきである。
【0028】
Pは、総当り攻撃に対して弱いものであってはならない。このことは、スロットル/ロックアウトスキームが、例えば、バリデーションサーバ側で実現されることを意味する。
【0029】
公衆ネットワークに対して機密扱いのデータを送信することに関係する通常の攻撃およびリスク(プライバシー、リプレイ攻撃、等)を回避するために、Pは、安全性の面で最新の技術に対して実現されるべきである。
【0030】
HOTPクライアント(ハードウェアまたはソフトウェアトークン)は、そのカウンタを増加させて、次のHOTP値、“HOTPクライアント”を計算する。認証サーバによって受け取られた値が、クライアントによって計算された値と整合した場合に、HOTP値が有効化される。このケースでは、サーバが、カウンタ値を1だけ増加させる。
【0031】
サーバにより受け取られた値がクライアントによって計算された値と整合しない場合に、サーバが別のパスを要求する前に、サーバが、(例えば、ルックアヘッドウィンドウを使用して)再同期化(“resynch”)プロトコルを開始する。
【0032】
“resynch”が失敗した場合に、認証された試行が最大数に達するまで、サーバは、プロトコルの別の認証パスを生じさせるように要求することができる。
【0033】
認証された試行が最大数に達した場合に、サーバは、アカウントをロックアウトして、失敗した試行の数がアカウントへのアクセスを生じさせたことをユーザに知らせる手順を開始することができる。
【0034】
HOTPクライアントは、共有シークレットを知っている本物のエンティティであることを主張しているバリデーションサーバを認証するためにも使用できる。HOTPクライアントおよびサーバは同期化され、同じシークレット(またはそれを再計算する方法)を共有するので、簡単な3パスのプロトコルが適したものとすることができる。例えば、
1−エンドユーザが、TokenIDおよび第1のOTP値、OTP1を入力できる。
2−サーバが、OTP1をチェックでき、OTP1が正しい場合に、OTP2を返信できる。
3−エンドユーザが、ユーザのHOTPデバイスを使用して、OTP2をチェックすることができ、OTP2が正しい場合に、サーバが認証され、エンドユーザがウェブサイトを使用する。
以前に示したように、明らかに、すべてのOTP通信は、安全な(例えば、SSL)接続を通して行われるべきである。
【0035】
サーバのカウンタ値はHOTP認証の成功の後のみに増加されるが、トークン上のカウンタは、新しいHOTPがユーザによって要求されるごとに増加される。このために、サーバ上およびトークン上のカウンタ値は、同期が外れているかもしれない。
【0036】
ルックアヘッドパラメータsは、サーバ上で設定することができ、ルックアヘッドウィンドウのサイズを規定する。サーバは、次のs個のHOTPサーバ値を再計算し、受け取ったHOTPクライアントに対して、再計算されたHOTP値をチェックすることができる。このシナリオにおけるカウンタの同期化は、単に、次のHOTP値をサーバが計算して、整合があるか否かを決定することを要求する。連続的なHOTP値のシーケンスを偽造することは、単一のHOTP値を推測することより、はるかに困難であるので、システムは、再同期化の目的で、HOTP値のシーケンス(例えば、2、3)を送ることをユーザに要求できる。
【0037】
パラメータsによって設定された上限は、HOTP値のチェックをサーバが永遠に続けないことを確実にし(サービス攻撃の拒絶を生じさせる)、HOTP値を生成しようとする攻撃者に対して、可能性ある解法の余地も制限する。ユーザビリティが悪すぎる影響を確実に受けないようにしながら、sを可能な限り低く設定すべきである。 OTP値を発生させて確認するために使用される共有シークレットを扱う動作は、機密扱いの情報の何らかのリークのリスクを減らすために、安全に行なわれなければならない。バリデーションシステムにおいて、共有シークレットを安全に発生させて、記憶させる2つの異なった方法を考える。
【0038】
1)決定論的発生:シークレットは、プロビジョニングおよび確認の双方の段階でマスターシードから取り出され、要求されたときいつでも実行中に発生される。
2)ランダム発生:シークレットは、プロビジョニング段階でランダムに発生されると、すぐに記憶され、そのライフサイクル中、安全が保たれなければならない。
【0039】
決定論的発生
可能性ある方策は、マスターシークレットから共有シークレットを取り出すことである。マスターシークレットは、サーバのみで記憶することが可能である。耐不正変更デバイスを使用して、マスターキーを記憶し、マスターキーおよび何らかの公開情報から共有シークレットを取り出すべきである。共有シークレットは、プロビジョニングおよび妥当性確認時間において必要なときに要求に応じて発生させることが可能であるので、主な利益は、共有シークレットの露呈をいつも回避でき、さらに、記憶に関する特別な要求も避けられることである。
【0040】
2つの異なるケースを考える。
【0041】
1)単一のマスターキーMKを使用して、共有シークレットを取り出す。各HOTPデバイスは、異なるシークレット、すなわち、K_i=SHA−1(MK,i)を持つ。ここで、iは、シリアル番号、トークンID等のような、HOTPデバイスを一意的に識別する情報の公開部分を表す。このことは、アプリケーションまたはサービスの状況下でありうる。異なるアプリケーションまたはサービスプロバイダは、異なるシークレットおよび設定を持つことがある。
2)いくつかのマスターキーMK_iが使用され、各HOTPデバイスは、1組の取り出された異なるシークレット、{K_i,j=SHA−1(MK_i,j)}を記憶する。ここで、jは、デバイスを識別する情報の公開部分を表す。1979年11月にAdi Shamir氏によって出されたシークレットの共有の仕方、第22巻、第11号の612〜613ページ中のCommunication of the ACMで開示されているような、シークレット共有方法を使用すると、アクティブマスターキーは、HSMの際に、バリデーションサーバでのみ記憶され、安全な場所で保持することが可能である。このケースでは、マスターシークレットMK_iが損なわれた場合に、すべてのデバイスを取り替えなくても別のシークレットに切り替えることが可能である。
【0042】
決定論的ケースにおける欠点は、マスターシークレットの露呈によって、明らかに、攻撃者が正しい公開情報に基づいて何らかの共有シークレットを再生できる事実を含む。複数のマスターキーのケースでは、すべてのシークレットの破棄、すなわち、新しい組のシークレットへの切り替えが必要である。
【0043】
一方、マスターキーを記憶して、共有シークレットを発生させるために使用されるデバイスは、耐不正変更なものであるべきである。さらに、HSMは、バリデーションシステムの安全な境界線の外にさらされないので、リークのリスクを減少させることができる。
【0044】
ランダム発生
共有シークレットはランダムに発生させることが可能である。良好で安全なランダム発生源が、これらのシークレットを発生させるために選択されるべきである。(真の)ランダム発生器は、ランダム性を自然に生じさせる発生源を必要とする。実際には、共有シークレットの発生に対して2つの可能性ある方法がある。
【0045】
1)ハードウェアベース発生器は、物理現象で生じるランダム性を活用することができる。インプリメンテーションは、発振器に基づき、そしてアクティブ攻撃を行なうことがより困難であるような方法で組み込むことが可能である。
2)良好なソフトウェアランダム発生器を設計することは容易なタスクではないが、ソフトウェアベース発生器がある。効率的だが、簡単なインプリメンテーションは、さまざまな源に基づくことができ、サンプル化されたシーケンスにSHA−1のような一方向関数を適用すべきである。
【0046】
例えば、記憶の際に、耐不正変更ハードウェア暗号化を使用して共有シークレットを暗号化し、要求されたときのみに共有シークレットを明かすことによって、共有シークレットは、安全に記憶すべきである。例えば、共有シークレットは、HOTP値を確認する必要があるとき解読され、RAMにおける露呈を短期間に制限するためにすぐに再暗号化される。共有シークレットを保持しているデータ記憶装置は、バリデーションシステムおよびシークレットデータベースに対する直接的な攻撃を回避するために、安全な領域内にあるべきである。
【0047】
特に、共有シークレットへのアクセスは、バリデーションシステムのみによって要求されるプログラムおよびプロセスに限定されるべきである。共有シークレットの保護は、最重要である。
【0048】
HOTPアルゴリズムの安全性は、以下の数式、
Sec=sv/10^Digit
によって、概算できる。
【0049】
ここで、
−Secは、敵対者の成功の確率である。
−sは、ルックアヘッド同期化ウィンドウのサイズを表す。
−vは、妥当性確認試行の数を表す。
−Digitは、HOTP値の数字の数を表す。
【0050】
これは、システムユーザビリティを依然として維持しながら望みのレベルの安全性が実現されるまで、s、T(攻撃者による試行の数を制限するスロットルパラメータ)およびDigitを調整することができる。
【0051】
共有シークレットKに付加的な認証要素を含めることが望ましいことがある。これらの付加的な要素は、他のものによって容易に獲得されないがトークンに知られている何らかのデータで構成することが可能である。このようなデータの例は、
* ユーザ入力としてトークンで獲得されたPINまたはパスワード
* 電話番号
* トークンでプログラム的に利用可能な何らかの一意的な識別子
を含む。
【0052】
このシナリオでは、複合共有シークレットKが、1つ以上の付加的な認証要素と組み合わされているランダムシード値から、プロビジョニングプロセス中に作られる。サーバは、複合シークレットを要求に応じて作ること、または記憶することのいずれも可能である。いずれにせよ、インプリメンテーションの選択に基づいて、トークンは、シード値のみを記憶することができる。トークンがHOTP計算を行なうとき、トークンは、ローカル的に取り出されたまたは入力された他の認証要素の値、およびシード値からKを計算することができる。
【0053】
複合共有シークレットの使用は、トークンに付加的な認証要素を含めることによってHOTPベースの認証システムを強化することができる。トークンが信頼あるデバイスである限り、このアプローチは、他のデバイスに対する(ユーザ入力のPINのような)認証要素の露呈を必要としない、さらなる利点を持つ。
【0054】
以下は、HOTP アルゴリズムの例示的なインプリメンテーションである。
/*
* OneTimePasswordAlgorithm.java
* OATH Initiative,
* HOTPワンタイムパスワードアルゴリズム
*
*/
/* Copyright(C)2004,OATH. すべての権利が留保されている。
*
* このソフトウェアまたはこの関数に言及または参照している全マテリアルにおいて
* “OATH HOTP Algorithm”としてこのソフトウェアが識別されていることを
* 条件として、このソフトウェアを複製して使用するライセンスを許可する。
【0055】
*
* 派生作品に言及または参照する全マテリアルにおいて、
* “OATH HOTPアルゴリズムから派生した”として、
* このような作品が識別されていることを条件として、
* 派生作品を作成して使用するライセンスも許可する。
*
* OATH(Open AuTHentication)およびそのメンバは、
* 何らかの特定の目的のためにこのソフトウェアの販売適性、
* またはこのソフトウェアの適合性のいずれに関しても
* 代表するものではない。
*
* いかなる種類の明示的または黙示的な保証をすることなく、“そのまま”で
* 提供されているものであり、OATHおよびそのメンバは、このソフトウェアに * 関するいかなる種類のいかなる保証または責任も明示的に否認する。
*
* これらの注意書きは、この文書および/またはソフトウェアの
* いかなる部分のいかなる複製においても保持されなければならない。
*/
【数2】

【0056】
/**
* このクラスは、HMAC−SHA1を提供するJCEを使用して、
* ワンタイムパスワード(OTP)を計算するために使用される。
* 静的方法を含む。
*
* @製作者 Loren Hart
* @1.0バージョン
*/
【数3】

【0057】
/**
* クレジットカードアルゴリズムを使用して、チェックサムを計算。
* このアルゴリズムは、何らかの単一のミスタイプされた数字、
* および隣接する数字の何らかの単一の入れ換えを
* 検出する効果を持つ。
*
* @param num チェックサムを計算する数
* @param degit 数の有効桁の数
*
* @return numのチェックサム
*/
【数4】

【0058】
/**
* この方法は、JCEを使用して、
* HMAC−SHA1アルゴリズムを提供する。
* HMACは、ハッシュされたメッセージ認証コードを計算し、
* このケースでは、SHA1が、使用されるハッシュアルゴリズムである。
*
* @param keyBytes HMAC−SHA1キーに使用するバイト
* @param text 認証されるべきメッセージまたはテキスト
*
* @throws NoSuchAlgorithmException プロバイダが
* HmacSHA1またはHMAC−SHA1
* ダイジェストアルゴリズムのいずれも利用可能にしない場合
* @throws InvalidKeyException
* 提供されたシークレットが、有効なHMAC−SHA1キーでなかった。
*
*/
【数5】

【0059】
/**
* この方法は、所定の組のパラメータに対して
* OTP値を発生させる。
*
* @param secret 共有シークレット
* @param movingFactor 使用ベースで変化する
* カウンタ、時間、または他の値
* @param codeDigit もしあれば、
* チェックサムを含まないOTPの数字の数
* @param addCheksum チェックサムの数字をOTPに
* 追加すべきか否かを示すフラグ
* @param truncationOffset 打ち切りを開始するために
* MAC結果に入れるオフセット
* この値が0...15の範囲外である場合、
* 動的打ち切りが使用される。
* MACの最後のバイトの最後の4ビットが
* 開始オフセットを決定するために
* 使用されるときに動的打ち切りである。
* @throws NoSuchAlgorithmException プロバイダが、HmacSHA1または
* HMAC−SH1ダイジェストアルゴリズム
* のいずれも利用可能にしない場合

* @throws InvalidKeyException
* 提供されたシークレットが、
* 有効なHMAC−SHA1キーでなかった。
【0060】
*
* @return {@link codeDigits}数字プラス、
* 要求された場合にはオプション的なチェックサム数字を含む
* ベース10のA数値ストリング
*/
【数6】

【0061】
カスタマイズされたインプレメンテーションに使用できるバリエーションとして、HOTPアルゴリズムに対していくつかの拡張を行なうことができる。
【0062】
安全性に関する簡単な拡張は、HMAC−SHA1値から、より多い数字を取り出すことである。例えば、10^8を法としたHOTP値を計算して、8数字のHOTP値を作ることは、敵対者の成功の確率をsv/10^6からsv/10^8に減少させる。このことは、例えば、Tおよび/またはsを増加させることによって、ユーザビリティを向上する好機を与え、一方では依然として全体的により良い安全性を実現することができる。例えば、s=10で10v/10^8=v/10^7<v/10^6である。このv/10^6は、s=1のときに6数字コードに対して理論上最適である。
【0063】
別のオプションは、A−Zおよび0−9値を使用することである。もっと正確に言えば0、OおよびQとともに、l,1およびIは非常に類似しており、小型ディスプレイでは同一に見える可能性があるので、文字間の何らかの混乱を回避するために、英数字のアルファベットから抽出した32個のシンボルのサブセットを使用する。直接的な結果は、安全性が、6数字のHOTP値に対するsv/32^6、および8数字のHOTP値に対するsv/32^8のオーダーになることである。32^6>10^9であるので、6つの英数字のHOTPコードの安全性は、9数字のHOTP値よりわずかに良く、9数字のHOTP値は提案されているアルゴリズムによってサポートされているHOTPコードの最大の長さである。32^8>10^12であるので、8個の英数字のHOTPコードの安全性は、9数字のHOTP値よりかなり良い。HOTP値を表示して入力するのに使用されるトークン/インターフェイスおよびアプリケーションに依存して、英数字の値を選択することは、低コストで安全性を向上させ、ユーザにインパクトを与える簡単かつ効率的な方法となり得る。
【0064】
HOTP値のショートシーケンス(例えば、2または3)を入力する再同期化について述べると、これは、プロトコルに対する概念として一般化することが可能である。入力するHOTPシーケンスの長さを規定するパラメータLを追加することができる。デフォルトによって、値Lは1に設定すべきであるが、安全性を増強させる必要がある場合、ユーザは、(おそらくは、短期間に、または特定の動作で)L個のHOTP値を入力するように要求されるかもしれない。これは、HOTPの長さを増加せずに、または英数字値を使用せずに安全性を強化する別の方法となり得る。
【0065】
システムは、(例えば、毎晩、または週に2回等)定期的に同期化を要求する、また、この目的を実現するために、L個のHOTP値のシーケンスを要求するようにプログラム化することもできる。
【0066】
クライアントが、アクセスして、HOTP値のみではなく、カウンタ値のような他の情報も送ることができると仮定すると、より効率的で安全な再同期化の方法が可能である。クライントアプリケーションは、HOTP−クライント値、および関連するC−クライントカウンタ値を送ることができる。HOTP値は、カウンタのメッセージ認証コードとして機能するものである。
【0067】
以下がすべて真である場合に、サーバが受け入れる。ここで、C−サーバは、C−サーバ自体の現在のカウンタ値である。
【0068】
1)C−クラインアト>=C−サーバ
2)C−クライント−C−サーバ<=s
3)HOTP−クライントが有効なHOTP(K,C−Client)であることをチェック。
4)真である場合に、サーバがC−クライアント+1にCを設定し、クライアントが認証される。
このケースでは、これ以上、ルックアヘッドウィンドウを管理する必要がない。敵対者の成功の確率は、たったv/10^6、すなわち、およそ100万分のvである。副次的な利益は、明らかに、“際限なく”sを増加させることができるので、安全性に影響を及ぼさないで、システムのユーザビリティを向上させることができる。この再同期化プロトコルは、クライアントおよびサーバアプリケーションに対する関連する影響が受け入れ可能であると考えられるときにはいつでも使用することができる。
【0069】
ワンタイムパスワード値、すなわち、HOTP(K,C,[Data])を発生させるために使用されるデータフィールドの導入を別のオプションとすることができる。ここで、Dataは、例えば、Data=Address|PINのような、識別関連情報のさまざまな部分の連結とすることができるオプション的なフィールドである。
【0070】
1つは、ムービング係数のみとして、またはCounterとの組み合わせのいずれでTimerも使用できる。このケースでは、例えば、Data=Timerであり、ここで、Timerは、例えば、特定の時間ステップを与えるために、いくつかの係数(8、16、32等)で除算されたUNIX(登録商標)−時間(1970年1月1日以来のGMTの秒)であってもよい。ワンタイムパスワードに対する時間ウィンドウは、以前に規定されたような再同期化パラメータで乗算された時間ステップと等しい。例えば、時間ステップとして64秒をとって、再同期化パラメータに対して7を用いた場合に、+/−3分の受け入れウィンドウを得る。Dataフィールドが明確に指定されることを仮定すると、Dataフィールドを使用することによって、アルゴリズムのインプレメンテーションをより柔軟にできる。
【0071】
メモリに結合されているプロセッサによって、本発明の実施形態を実現できる。プロセッサは、汎用マイクロプロセッサ、またはハードウェアおよび/またはファームウェアで本発明の実施形態にしたがった方法の少なくとも一部を実現する特定用途向け集積回路とすることも可能である。メモリは、ランダムアクセスメモリ、ハードディスク、フラッシュメモリ、およびこれらに類するもののような、デジタル情報を記憶できる任意のデバイスとすることができる。メモリは、プロセッサによって実行され、本発明の実施形態にしたがった方法の少なくとも一部を行なうように適合されている命令を記憶できる。プロセッサは、ネットワークに結合され、(OTPおよび他のデータのような)認証データを妥当性確認のためにこのネットワークを通して送ることができる。
【0072】
本発明にしたがった認証システムは、トークンプロセッサおよびトークンメモリを備えたトークンと、サーバプロセッサおよびサーバメモリを備えたバリデーションサーバとを具備していてもよい。トークンプロセッサは、トークンメモリ中に記憶されている命令に基づいてOTP発生アルゴリズムを実現する。トークンメモリは、共有シークレットKおよびトークンカウンタ値Cを記憶することも可能である。バリデーションサーバプロセッサは、バリデーションサーバメモリに記憶されている命令、ならびにバリデーションサーバメモリに記憶されているバリデーションサーバカウンタ値C’および共有シークレットKに基づいて、OTPバリデーションアルゴリズムを実現できる。バリデーションサーバメモリはスロットルパラメータT、ルックアヘッドウィンドウサイズs等のような、他のパラメータも記憶することができる。
【0073】
トークンは、KおよびCに基づいて計算されたそのワンタイムパスワードをバリデーションサーバに送ることができる。バリデーションサーバは、KおよびC’に基づいて、ワンタイムパスワードを計算することができる。整合しない場合、バリデーションサーバは、KおよびC’+nに基づいて、次のいくつかのワンタイムパスワードを計算することができる。ここで、nは1からsの整数である。これらの計算されたワンタイムパスワードのいずれもトークンから受け取ったワンタイムパスワードと整合しない場合、バリデーションサーバは妥当性確認試行の失敗を示す信号を送ることができる。計算されたワンタイムパスワードのうちの1つがトークンから受け取ったワンタイムパスワードと整合する場合、バリデーションサーバは妥当性確認の成功を示す信号を送ることができる。バリデーションサーバは、T回の妥当性確認試行の不成功後にさらなる妥当性確認試行を中止することができ、所定のトークンはいくつかのこのような失敗した試行の源であるという趣旨で、システムアドミニストレータにアラートすることができる。
【0074】
前述の記述は、例示を意味しており、本発明の範囲を限定することを意味していない。先に記述した実施形態を除いた他の実施形態は、当業者によって発明の範囲内に入ることが見い出される。

【特許請求の範囲】
【請求項1】
認証システムにおいて、
トークンメモリに結合され、前記トークンメモリは、共有シークレットキーKとトークンカウンタ値Cとを記憶し、前記トークンメモリは、トークンプロセッサによって実行され、ワンタイムパスワードを発生させるように適合されている命令をさらに記憶するトークンプロセッサと、
バリデーションサーバメモリに結合され、前記バリデーションサーバメモリは、共有シークレットキーKとバリデーションサーバカウンタ値C’とを記憶するバリデーションサーバとを具備し、
前記トークンプロセッサは、
キーKおよびカウンタ値Cに基づいてHMAC−SHA−1値を発生させ、Digitがワンタイムパスワードの数字の数である、10^Digitを法として、発生されたHMAC−SHA−1値を打ち切ることによって、ワンタイムパスワードを計算し、
妥当性確認のために、ワンタイムパスワードをバリデーションサーバに送る認証システム。
【請求項2】
前記バリデーションサーバメモリは、ルックアヘッドパラメータsをさらに記憶し、前記バリデーションサーバメモリの命令は、バリデーションサーバプロセッサによって実行され、前記バリデーションサーバによって計算されたワンタイムパスワードが、トークンから受け取ったワンタイムパスワードと整合するまで、すなわち、nが1からsの整数である、n=sとなるまで、KおよびC’+nに基づいて、ワンタイムパスワードを計算する請求項1記載のシステム。
【請求項3】
受け取ったワンタイムパスワードと計算されたワンタイムパスワードとの間に整合がない場合に、失敗した妥当性確認試行を示す信号を送る請求項2記載のシステム。
【請求項4】
受け取ったワンタイムパスワードと計算されたワンタイムパスワードとの間に整合がある場合に、前記バリデーションサーバプロセッサが妥当性確認の成功を示す信号を送る請求項2記載のシステム。
【請求項5】
前記バリデーションサーバメモリは、スロットルパラメータTをさらに記憶し、失敗した妥当性確認試行の数がTと等しい場合にスロットル信号が送られる請求項3記載のシステム。
【請求項6】
前記バリデーションサーバメモリは、スロットルパラメータTをさらに記憶し、失敗した妥当性確認試行の数がTと等しい場合にさらなる妥当性確認試行が中止される請求項1記載のシステム。
【請求項7】
バリデーションサーバにおいて、
プロセッサと、
前記プロセッサに結合されているメモリとを具備し、
前記メモリは、
共有シークレットキーKと、バリデーションサーバカウンタ値C’と、ルックアヘッドウィンドウパラメータsと、命令とを記憶し、
前記命令は、
前記プロセッサによって実行され、ワンタイムパスワードをトークンから受け取り、キーKおよびカウンタ値C’に基づいてHMAC−SHA−1値を発生させ、Digitがワンタイムパスワードの数字の数である、10^Digitを法として、発生されたHMAC−SHA−1値を打ち切ることによって、ワンタイムパスワードを計算して、計算されたワンタイムパスワードをトークンから受け取ったワンタイムパスワードと比較するように適合されているバリデーションサーバ。
【請求項8】
前記計算されたワンタイムパスワードが前記トークンから受け取ったワンタイムパスワードと整合しない場合に、前記バリデーションサーバは、nが1からsの整数である、カウンタ値C’+nおよびキーKに基づいてワンタイムパスワードを計算する請求項7記載のバリデーションサーバ。
【請求項9】
前記受け取ったワンタイムパスワードが前記計算されたワンタイムパスワードと整合しない場合に、失敗した妥当性確認試行を示す信号を送る請求項8記載のバリデーションサーバ。
【請求項10】
前記受け取ったワンタイムパスワードが前記計算されたワンタイムパスワードと整合しない場合に、妥当性確認の成功を示す信号を送る請求項8記載のバリデーションサーバ。
【請求項11】
前記メモリは、スロットルパラメータTを記憶し、T回失敗した妥当性確認試行の後にトークンからのさらなる妥当性確認試行が中止される請求項8記載のバリデーションサーバ。
【請求項12】
キーKおよびカウンタ値Cに基づいてHMAC−SHA−1値を発生させ、Digitがワンタイムパスワードの数字の数である、10^Digitを法として、発生されたHMAC−SHA−1値を打ち切ることによって、トークンによって生成されたワンタイムパスワードを確認する方法において、
キーKおよびカウンタ値C’に基づいてHMAC−SHA−1値を発生させることによって、受け取ったワンタイムパスワードと比較するワンタイムパスワードを計算することと、
Digitがワンタイムパスワードの数字の数である、10^Digitを法として、発生されたHMAC−SHA−1値を打ち切ることと、
前記計算されたワンタイムパスワードを前記受け取ったワンタイムパスワードと比較して整合しない場合に、C’を1だけ増加させ、ワンタイムパスワードを再計算し、それでもなお、整合しない場合に、C’=C’+sとなるまで、C’を増加させることを続行し、ワンタイムパスワードを再計算して、再計算されたワンタイムパスワードを前記受け取ったワンタイムパスワードと比較し、sはルックアヘッドウィンドウパラメータであることとを含む方法。
【請求項13】
前記計算された、または再計算されたワンタイムパスワードが、前記受け取ったパスワードと整合する場合に、妥当性確認の成功を示す信号を送る請求項12記載の方法。
【請求項14】
前記計算された、または再計算されたワンタイムパスワードが、前記受け取ったパスワードと整合する場合に、失敗した妥当性確認試行を示す信号を送る請求項12記載の方法。
【請求項15】
失敗した妥当性確認試行がスロットルパラメータTを超えた場合に、妥当性確認試行を中止することをさらに含む請求項14記載の方法。

【公表番号】特表2008−517384(P2008−517384A)
【公表日】平成20年5月22日(2008.5.22)
【国際特許分類】
【出願番号】特願2007−536963(P2007−536963)
【出願日】平成17年10月17日(2005.10.17)
【国際出願番号】PCT/US2005/037113
【国際公開番号】WO2006/044717
【国際公開日】平成18年4月27日(2006.4.27)
【出願人】(502377350)ベリサイン・インコーポレイテッド (28)
【Fターム(参考)】