【課題を解決するための手段】
【0008】
本発明は、認証目的のために使用されているクライアント及びサーバー装置は、ハッキングされる場合があり、その結果、これらの装置上において保存されている情報が詐欺師の手に渡る場合がある、という本発明者らの洞察に基づいている。この盗まれた情報が、コンピュータに基づいたアプリケーションを認証する際にユーザーが使用しうるパスコードに関係している場合には、例えば、パスコード自体の取得などのように、これらのパスコードに関する知識を抽出するべく、この盗まれた情報が、なんらかの不正な者によって使用されうるリスクが存在している。いくつかのケースにおいては、ユーザーが、同一の又は類似のパスコードを複数のプラットフォーム及びアプリケーションに跨って使用している場合があることから、悪意を有する者がこのようなパスコードを発見することに由来しうる損害が、単一のコンピュータに基づいたアプリケーションをはるかに超えて拡大する場合がある。例えば、実際に、インターネットバンキングアプリケーションのユーザーが、自身のインターネットバンキングアプリケーションに対する認証のために、自身のバンクカードのうちの1つのバンクカードのPINと同一の、又はこれに非常に類似している、パスコードを選択することを排除することは、困難でありうる。
【0009】
クライアント装置又はサーバー装置のいずれもが、攻撃者が、パスコードの値を取得できるようにしうる、又はパスコードの可能な値の範囲を制約できるようにしうる、なんらの情報をも永久的に保存していない場合には、パスコードの使用に基づいた認証解決策の全体的なセキュリティを向上させることができる、というのが、本発明者らの洞察である。例えば、本発明のいくつかの実施形態においては、クライアント装置又はサーバー装置のいずれもが、パスコード値又はパスコード値から可逆的な方式によって算出されるデータ要素を永久的に保存していなくてもよい。又、本説明においては、クライアント装置は、クライアント、認証クライアント、認証トークン、又は強力認証トークンと呼称される場合がある。
【0010】
本発明による強力認証トーンの機能
いくつかの実施形態においては、強力認証トークンは、パスワードベリファイアデータ要素の値を動的変数の値及び秘密暗号キーの値と暗号方式によって組み合わせ、且つ、秘密暗号キーによってパラメータ化された暗号アルゴリズムを使用することにより、ワンタイムパスワード(OTP:One−Time Password)又は電子署名などの動的クレデンシャルを生成するように適合されてもよい。
【0011】
いくつかの実施形態においては、強力認証トークンは、パスコードを提供するようにユーザーに要求し、且つ、ユーザーによって提供されたパスコード値をパスコードブラインディングデータ要素の値と組み合わせることにより、パスコードベリファイアデータ要素の値を算出するように適合されてもよい。いくつかの実施形態においては、パスコードブラインディングデータ要素は、認証トークンにより、例えば、認証トークンによってアクセス可能であるなんらかの形態の永久的又は不揮発性メモリ内において保存されてもよい。いくつかの実施形態においては、ユーザーによって提供されるパスコード値は、例えば、暗号ハッシュ関数を有しうる、暗号一方向関数などの関数を使用することにより、保存されているパスコードブラインディングデータ要素の値と組み合わせられてもよい。いくつかの実施形態においては、パスコードブラインディングデータ要素は、強力認証トークンにより、一度だけ、生成されてもよく、且つ、次いで、将来の使用のために、強力認証トークンによって保存されてもよい。いくつかの実施形態においては、強力認証トークンは、予測不能な方式により、パスコードブラインディングデータ要素を生成してもよい。いくつかの実施形態においては、強力認証トークンは、パスコードの値とは独立した方式により、パスコードブラインディングデータ要素を生成してもよい。例えば、いくつかの実施形態においては、強力認証トークンは、ランダム数生成器又は疑似ランダム数生成器を使用することにより、パスコードブラインディングデータ要素を生成してもよい。いくつかの実施形態においては、パスコードブラインディングデータ要素は、ランダム数生成器又は疑似ランダム数生成器によって生成されたランダム数を有することができる。いくつかの実施形態においては、強力認証トークンは、強力認証トークンがパスコードベリファイアデータ要素の値を算出するべくパスコード値を使用したら、ユーザーが提供したパスコード値のすべての(一時的な)複写をそのメモリから消去するように適合されてもよい。又、いくつかの実施形態においては、強力認証トークンは、強力認証トークンが動的認証クレデンシャルを生成するべく算出済みのパスコードベリファイアデータ要素を使用したら、算出済みのパスコードベリファイアデータ要素のすべての(一時的な)複写をそのメモリから消去するように適合されてもよい。
【0012】
いくつかの実施形態においては、動的変数は、(例えば、ソフトウェアトークンがその上部において稼働中でありうるパーソナル演算装置などの強力認証トークンのクロックによって提供されうる)時間値の関数であってもよい。いくつかの実施形態においては、動的変数は、イベントに関係する変数の値の関数であってもよい。本説明においては、イベントに関係する変数という用語は、その値が、特定のイベントの発生の際に、更新アルゴリズムを使用して自動的に更新されうる変数を意味しうる。いくつかの実施形態においては、強力認証トークンは、特定のイベントの発生の際に、そのイベントに関係する変数の現時点の値の関数として、イベントに関係する変数の新しい値を算出してもよく、且つ、算出された新しい値によって現時点の値を置換してもよい。いくつかの実施形態においては、特定のイベントは、例えば、OTP又は電子署名を生成するための強力認証トークンによるイベントに関係する変数の使用を有することができる。いくつかの実施形態においては、イベントに関係した変数は、カウンタを有していてもよく、且つ、更新アルゴリズムは、カウンタの単調な増分(又は、減分)を有することができる。いくつかの実施形態においては、更新アルゴリズムは、例えば、一方向ハッシュアルゴリズムを有していてもよく、且つ、イベントに関係する変数は、一方向ハッシュアルゴリズムをイベントに関係する変数の古い値に対して適用した結果として得られる新しい値により、更新されてもよい。いくつかの実施形態においては、イベントに関係する変数は、秘密暗号キーを有していてもよく、或いは、動的クレデンシャルの生成において使用される秘密暗号キーは、イベントに関係する変数から導出されてもよい。例えば、いくつかの実施形態においては、秘密暗号キーの値は、秘密暗号キーがOTP又は電子署名を生成するべく使用されるたびに、秘密暗号キーの以前の値の関数でありうる新しい値により、更新されてもよい。いくつかの実施形態においては、イベントに関係する変数は、状態変数を有していてもよく、且つ、秘密暗号キーの値は、その状態変数の関数として算出されてもよく、状態変数は、特定のイベントの発生の際に、その状態変数の現時点の値の関数でありうる新しい値により、更新されてもよい。いくつかの実施形態においては、動的変数は、チャレンジに基づいたものであってもよく、チャレンジは、例えば、サーバーによって生成されてもよく、且つ、例えば、(例えば、ユーザーが、強力認証トークンを有する電子装置のユーザー入力インターフェイスを使用してチャレンジを入力することにより)強力認証トークンに対して提供されてもよい。いくつかの実施形態においては、動的変数は、(例えば、ユーザーが、強力認証トークンのユーザー入力インターフェイスを使用してトランザクションデータを入力することにより)強力認証トークンに対して提供されうるトランザクションデータに基づいたものであってもよい。いくつかの実施形態においては、動的変数は、上述のタイプの動的変数の任意の組合せを有していてもよい。
【0013】
パスコードベリファイアデータ要素の値を動的変数及び秘密暗号キーの値との間において暗号方式によって組み合わせた結果は、一般に、動的クレデンシャル又は動的認証クレデンシャルと呼称することができる。動的変数がトランザクションデータに基づいているケースにおいては、動的変数の値をパスコードベリファイアデータ要素の値及び秘密暗号キーの値との間において暗号方式によって組み合わせた結果は、電子署名と呼称することができる。動的変数がチャレンジに基づいているケースにおいては、動的変数の値をパスコードベリファイアデータ要素の値及び秘密暗号キーの値との間において暗号方式によって組み合わせた結果は、応答と呼称することができる。時間値又はイベントに関係する変数の値を伴うケースなどのように、動的変数が、強力認証トークによって内部的に生成及び/又は維持されるデータに基づいているケースにおいては、動的変数の値をパスコードベリファイアデータ要素の値及び秘密暗号キーの値との間において暗号方式によって組み合わせた結果は、ワンタイムパスワード(OTP)と呼称することができる。
【0014】
いくつかの実施形態においては、パスコードベリファイアデータ要素の値を動的変数の値及び秘密暗号キーの値との間において暗号方式によって組み合わせる暗号アルゴリズムは、秘密暗号キーによってパラメータ化されうる対称型暗号アルゴリズムを有していてもよく、且つ、強力認証トークンは、例えば、認証サーバーとの間において秘密暗号化キーを共有していてもよい。例えば、いくつかの実施形態においては、対称型暗号アルゴリズムは、動的変数の値に基づいて動作しうると共に秘密暗号キーによってパラメータ化されうる、AES(Adbanced Encryption Standard)などの、対称型暗号化又は暗号解読アルゴリズムを有していてもよい。いくつかの実施形態においては、対称型暗号アルゴリズムは、動的変数の値に基づいて動作しうると共に秘密暗号キーによってパラメータ化されうる、HMAC(Hash−based Message Authentication Code)などの、鍵付きハッシュアルゴリズムを有していてもよい。
【0015】
ソフトウェア及びハードウェアトークン
いくつかの実施形態においては、強力認証トークンは、パーソナルコンピュータ(PC:Personal Computer)、タブレットコンピュータ、又はスマートフォンなどの、ユーザーに属するパーソナル汎用電子演算装置上においてインストールされると共に稼働しているソフトウェアアプリケーションの形態を有していてもよく、これにより、ソフトウェアアプリケーションは、認証ソフトウェアアプリケーションの正当なユーザー用の認証サービスを提供するように適合されていてもよい。
【0016】
いくつかの実施形態においては、強力認証トークンは、その主な又は唯一の機能が、装置の正当なユーザー用の認証サービスを提供する、というものである、専用の電子ハードウェア装置を有していてもよい。
【0017】
これらの認証サービスは、本説明のどこか別のところにおいて更に詳細に説明されているように、ユーザーをリモートコンピュータに基づいたアプリケーションに対して認証すると共に/又は、ユーザーによってリモートコンピュータに基づいたアプリケーションに対してサブミットされたトランザクションを保護するなどの、ユーザーとコンピュータに基づいたアプリケーションの間におけるやり取りを保護するための動的クレデンシャルを生成するステップを有していてもよい。
【0018】
いくつかの実施形態の一般的な原理
いくつかの実施形態においては、本発明による認証プロトコルは、動的状態から生成される暗号キーのシーケンスを使用してもよく、この場合に、状態は、新しい状態が古い状態から見出されうるように、但し、この逆にはならないように、更新されている。状態の現時点の値は、認証クライアント(強力認証トークンなど)及び認証サーバーの両方により、同期した方式によって維持することができる。例えば、いくつかの実施形態においては、フォワードセキュア型のキー更新アルゴリズムを使用することにより、キー及び/又は状態のシーケンスを構築することができる。いくつかの実施形態においては、認証トークンは、認証クレデンシャルを生成するべく、認証トークンのユーザーによって認証トークンに提供されたものでありうるパスコードをこのような暗号キーと暗号方式によって組み合わせることができる。いくつかの実施形態においては、認証クレデンシャルの生成において使用される暗号キーは、例えば、強力認証トークンが認証クレデンシャルを生成した後に、毎回、強力認証トークンによって更新されうる、このような状態の現時点の値から、強力認証トークンにより、導出されてもよい。
【0019】
いくつかの実施形態においては、パスコードは、直接的には使用されておらず、「パスコードベリファイア」を生成するためにのみ、使用されており、パスコードベリファイアは、パスコード及びパスコードブラインディングデータ要素から形成されている。パスコードブラインディングデータ要素は、初期化ステージにおいて、認証トークンにより、例えば、生成されるなどのように、取得されてもよく、且つ、例えば、パスコード値からパスコードベリファイア値を生成するなどの、将来の使用のために、認証トークン上において、且つ、認証トークン上においてのみ、永久的に保存されてもよい。パスコードベリファイアは、結果的に得られたパスコードベリファイアに対して逆関数を適用することにより、パスコード値を算出することができないように、一方向関数を使用して生成することができる。パスコードブラインディングデータ要素は、高エントロピーを有していてもよく、且つ、パスコードベリファイアは、パスコードブラインディングデータ要素が既知でない場合に、ブルートフォース攻撃により、実際のパスコード値をパスコードベリファイアから取得することが実際に実現不能となりうるように、高エントロピーを有するように、生成することができる。例えば、パスコードベリファイアは、ハッシュ関数を、好ましくは、SHA−256などの暗号方式によって保護されたハッシュ関数を、パスコード値とパスコードブラインディングデータ要素の、連結などの、組合せに対して適用することにより、認証トークンによって算出することができる。パスコードブラインディングデータ要素は、真の又は疑似的なランダム数生成器によって生成されたものであってもよい。いくつかの実施形態においては、パスコードブラインディング数は、認証トークンによって生成された真の又は疑似的なランダムデータに基づいて生成することができる。いくつかの実施形態においては、パスコードブラインディング数は、認証サーバーによって生成された真の又は疑似的なランダムデータに基づいて生成することができる。いくつかの実施形態においては、パスコードブラインディング数は、認証トークンによって生成された真の又は疑似的なランダムデータと認証サーバーによって生成された真の又は疑似的なランダムデータの組合せに基づいて生成することができる。実際のパスコードは、使用が完了するたびに、且つ、使用された後に即座に、認証トークンから消去されてもよい。初期化ステージにおいては、パスコードベリファイアは、保護された方式により、検証又は認証サーバーに転送されていてもよく、且つ、例えば、認証トークンによって生成された動的認証クレデンシャルの検証などの、将来の使用のために、検証又は認証サーバー上において、且つ、検証又は認証トークン上においてのみ、永久的に保存されてもよい。
【0020】
いくつかの実施形態においては、それぞれの生成された動的認証クレデンシャルは、それぞれの生成されたクレデンシャルごとに更新される鍵付きHMAC(HMAC under a key)であってもよい。HMACに対する入力の1つは、パスコードベリファイアであってもよい。クレデンシャルの検証が完了した後に、古いキーが破棄されてもよく、且つ、状態が更新されてもよい。この結果、検証サーバーは、パスコードについて知ることができない(検証サーバーは、パスコードデータ要素ではなく、パスコードベリファイアの複写を有するのみであり、この結果、サーバーにおいて保持されているパスコードベリファイアの複写に対してブルートフォース攻撃を適用することにより、実際のパスコード値を取得することができない)。
【0021】
認証トークンは、パスコードを決して保存することがなく、従って、認証トークンからの情報の抽出により、パスコートを発見することはできない(パスコードブラインディング要素は、認証トークン上において保存されているが、これは、パスコードベリファイアの知識を伴うことなしにブルートフォース攻撃によってパスコードの値を取得するべく、使用することができない)。
【0022】
又、古いクレデンシャル及び認証トークンの現時点の状態が付与された状態において、パスコードを発見することは不可能であり、その理由は、候補パスコードを試験するために必要とされるキーのサーバー及びクライアントの両方による破壊が完了した状態にあるからである。
【0023】
本発明のプロトコル、システム、及び方法のその他の態様は、サーバー及びクライアントを同期状態において維持する方法に関係しうるが、これは、状態を更新する時期に関する特定の規則を順守することによるものであってもよい。これらの態様の更なる詳細については、本説明のどこか別のところにおいて記述されている。
【0024】
又、いくつかの実施形態においては、本説明において記述されている技法は、例えば、低エントロピーを有しうることから、秘密状態において留まることを要する、且つ、ブルートフォース攻撃に対して脆弱でありうる、あらゆる機密を含むユーザー認証に関係するデータに対して適用することができる。又、例えば、これら技法は、そのいずれもがパスコードの例でありうる、PIN、パスワード、及び生体計測テンプレートに対して適用されてもよい。
【0025】
特定の実施形態
以下の節においては、本発明の実施形態の特定の組について説明することとする。
【0026】
用語及び定義
−PRNG(長さ):暗号方式によって保護されたランダム数生成器からの「長さ」ビットのビットストリングであり、ランダム数生成器は、真のランダム数生成器又は疑似的なランダム数生成器を有しうる。
【0027】
−IENCODE(i,長さ):左側の桁がゼロによって充填されたビッグエンディアン整数としての数「I」を「長さ」ビットにエンコーディングした結果であるビットストリングを表記している。
【0028】
−<>:ゼロの長さのバイトストリングを表記している。
【0029】
−{a,b,c...}:所与の順序においてビットストリング「a」,「b」,「c」,...を連結した結果を表記している。
【0030】
−S:そうではない旨が規定されていない限り、認証サーバーを意味しており、且つ、認証サーバーによって実行された動作又はステップをも示しうる。
【0031】
−C:そうではない旨が規定されていない限り、認証トークン又は認証クライアントアプリケーションなどの認証クライアントを意味しており、且つ、認証クライアントによって実行された動作又はステップをも示しうる。
【0032】
−「Sender→Receiver:Message」という表現:ビットストリング「Message」がエンティティ「Sender」からエンティティ「Receiver」に送信されることを意味している。これは、「Sender」から「Receiver」への「Message」の転送の前のビットストリーム「Message」のエンティティ「Sender」による生成を更に意味しうる。
【0033】
暗号プリミティブ
暗号化プリミティブ
「ciphertext=ENC(K,IV,Data)」という表現は、(選択された暗号化アルゴリズムにおいて適用可能である場合に)初期化ベクトル「IV」を使用して暗号暗号化キー「K」によってパラメータ化された暗号暗号化アルゴリズムを使用することにより、結果「ciphertext」を取得するべく、ビットストリング「Data」を暗号化するステップを表記している。いくつかの実施形態においては、暗号化アルゴリズムは、対称型暗号化アルゴリズムを有することができる。いくつかの実施形態においては、対称型アルゴリズムは、なんらかの暗号化モードにおいて、AES(Advanced Encryption Standard)又は3DES(Triple Data Encryption Standard)などの、ブロック暗号を有することができる。例えば、いくつかの実施形態においては、AESアルゴリズムは、CTRモードにおいて使用されてもよく(カウンタモードであり、ウェブアドレス「en.wikipedia.org/wiki/Block_cipher_mode_of_operation#CTR」に位置しているウェブサイトをも参照されたい。この内容は、引用により、本明細書に包含される)、且つ、キーKは、128ビットのサイズを有していてもよく、且つ、CTRモード用のカウンタの開始値は、初期化ベクトルから算出されてもよい。いくつかの実施形態においては、CTRモード用のカウンタの開始値は、例えば、IV<<64などのように、いくつかの位置にわたって左シフトされた初期化ベクトルとして算出されてもよい。いくつかの実施形態においては、初期化ベクトルは、カウンタ「CTR」及びランダム数から算出されてもよい。例えば、初期化ベクトルは、IV(CTR)={IENCODE(CTR,6×8),PRNG(2×8)}として、カウンタ「CTR」の関数として算出されてもよい。
【0034】
クレデンシャル生成プリミティブ
いくつかの実施形態においては、クレデンシャルは、入力としてキー「K」及びビットストリング「Data」を使用する暗号関数を使用することにより、キー「K」及び入力ビットストリング「Data」を使用して算出することができる。例えば、いくつかの実施形態においては、クレデンシャルは、入力としてキー「K」及びビットストリング「Data」を使用することにより、メッセー認証コード(MAC)として算出されてもよい。いくつかの実施形態においては、クレデンシャルを算出するための暗号関数は、キー「K」下におけるビットストリング「Data」の暗号化(又は、暗号解読)を有することができる。いくつかの実施形態においては、クレデンシャルを算出するための暗号関数は、一方向関数を有することができる。いくつかの実施形態においては、一方向関数は、暗号ハッシュ関数を有することができる。いくつかの実施形態においては、一方向関数は、鍵付きハッシュ関数を有することができる。例えば、いくつかの実施形態においては、クレデンシャルは、MAC=HMAC(K,Data)として算出されてもよく、これにより、HMACは、RFC2104によって規定されているHMAC、或いは、RFC4231によって規定されているSHA−256のHMACなどの、キーKの下におけるデータのハッシュに基づいたメッセージ認証コードを表記している。いくつかの実施形態においては、キーKは、128ビットのサイズを有することができる。いくつかの実施形態においては、結果的に得られる暗号文、ハッシュ、又はMACは、切り捨てられてもよい。いくつかの実施形態においては、Dataは、8ビットの倍数でない場合には、次のバイト境界まで左側の桁にゼロが充填されている。
【0035】
キー更新プリミティブ
表現「state
i+1,key
i+1=UPDATE(state
i)」は、状態の古い値「state
i」から始まって、そのキーの「key
i+1」及びその状態の「state
i+1」という新しい値を算出するべく、なんらかの暗号キー及び状態更新アルゴリズムを使用すると共に(適用可能である場合に)キー及び状態の古い値を新たに算出された値によって置換することにより、キー及び状態の値を更新するステップを表記している。いくつかの実施形態においては、状態の新しい値は、状態の現時点の値を入力として取得する第1不可逆関数を使用することにより、状態の現時点の値から算出することができる。いくつかの実施形態においては、暗号キーの新しい値は、状態の現時点の値を入力として取得する第2不可逆関数を使用することにより、状態の現時点の値から算出することができる。いくつかの実施形態においては、状態の現時点の値から状態及び暗号キーの新しい値を算出する不可逆関数は、例えば、セキュア暗号ハッシュ関数を有することができる。いくつかの実施形態においては、暗号キー及び状態更新アルゴリズムは、「“Forward−Security in Private−Key Cryptography” by Mihir Bellare and Bennet Yee, Springer LNCS 2612」において開示されているキー更新アルゴリズムなどの、キー更新アルゴリズムを有することができる。いくつかの実施形態においては、暗号キー及び状態更新アルゴリズムは、次式のように定義することができる。
【0036】
−key
i+1=ENC(state
i,IV_1,Data_1)
【0037】
この場合に、特定の一実施形態においては、Data_1は、0x00...0x00という16バイトから構成されていてもよく、且つ、IV_1は、値0を有することができる。
【0038】
−state
i+1=ENC(state
i,IV_2,Data_2)
【0039】
この場合に、特定の一実施形態においては、Data_2は、0x00...0x00という16バイトから構成されていてもよく、且つ、IV_2は、値263を有することができる。
【0040】
定数
いくつかの実施形態においては、いくつかの定数を使用することができる。例えば、いくつかの実施形態においては、VERSION、MSG_CHALLENGE、MSG_RESPONSE、MSG_ACTIVATION_CHALLENGE、MSG_ACTIVATION_RESPONSEという定数が使用されてもよく、この場合に、後者の4つの定数は、いずれも、互いに異なっている値を有しうる。特定の一実施形態においては、これらの定数は、以下の値を有することができる。
VERSION:=IENCODE(0,8)
MSG_CHALLENGE:=IENCODE(1,4)
MSG_RESPONSE:=IENCODE(2,4)
MSG_ACTIVATION_CHALLENGE:=IENCODE(3,4)
MSG_ACTIVATION_RESPONSE:=IENCODE(4,4)
【0041】
パラメータ及び初期構成
すべてのパラメータは、特定の認証トークン−サーバーの組合せにおけるものである。特定の認証トークン用にサーバーによって取得されたデータは、ログインしようとしている又はログインが完了している、特定のユーザーアカウントに対応しうる。サーバーによって取得されたデータは、特定の認証トークンに、或いは、起動された認証アプリケーションの特定のインスタンスに、対応しうる。
【0042】
【表1】
【0043】
仮定及び注記
いくつかの実施形態においては、攻撃者は、認証トークンとサーバーの間のメッセージを伝達しているネットワークを制御することができると共に、完全なMitM(Man−in−the−Middle)攻撃を開始する能力を有しうるものと仮定することができる。又、いくつかの実施形態においては、認証トークン又はアプリケーションが保護されているものと仮定することもできる。又、いくつかの実施形態においては、サーバーが保護されているものと仮定することもできる。
【0044】
いくつかの実施形態においては、認証トークンは、セキュアハードウェアを使用して実装されてもよく、且つ、認証トークンは、任意のメッセージをMAC及び/又は暗号解読することが可能であってもよいが、キーをリリースすることはできない。このような実施形態においては、メッセージ内にノンスを含むことが有利でありうる。認証トークンに対する一時的なアクセスしか有していない攻撃者は、任意の将来のトランザクションのノンスを予測することができない。
【0045】
クライアントの事前起動
いくつかの実施形態においては、Challenge MAC key、KCMAC:=KSMAC、Encryption key KCENC:=KSENC、Response state SCRES:=SSRES、Activation MAC key KCACT:= KSACTというデータ要素が、上述のように、サーバーによって生成されてもよく、且つ、クライアントの事前起動の際に、サーバーからクライアントに転送されてもよい。
【0046】
起動サブプロトコル
概要
いくつかの実施形態においては、認証トークン又はアプリケーションの初期状態は、先程示したものなどであってもよい。トランザクション署名又は動的クレデンシャル生成を実行しうる前に、認証トークン又はアプリケーションを起動することが必要でありうる。いくつかの実施形態においては、起動は、一度だけ、実行することができるが、これは、パスコードの変更に緊密に関係付けられうる。起動の最終結果は、一方においては、サーバーが、パスコードベリファイア(PV:Passcode Verifier)の複写を有することができる、というものであってよく、他方においては、クライアントが、パスコードブラインディングデータ要素(PR)の対応する値の保存を完了した状態でありうる、というものであってもよい。このステップは、サーバーが、ユーザーのパスコートについて知ることがないが、そのパスコードが、サーバーによって受領済みでありうるクレデンシャルの生成のために正しく入力されたかどうかを検証しうるように、実行されてもよい。パスコードベリファイアの値を有しうる、クライアントからの応答メッセージは、だれかが、例えば、スマートフォンを有しうる、認証トークンを盗み、且つ、認証トークンによって生成されたクレデンシャルを観察した場合に、その人物がユーザーのパスコードを想像することができないように、フォワードセキュアキーの下において暗号化されてもよい。
【0047】
詳細
いくつかの実施形態においては、ユーザーは、サーバーにコンタクトしてもよく、且つ、起動手順を開始することができる。起動手順又は起動プロトコルは、以下のステップを有することができる。
【0048】
ステップ1:いくつかの実施形態においては、起動メッセージが、サーバーによって生成されてもよく、且つ、以下のように、サーバーからクライアントに転送されてもよい。
S→C: {Version,Service ID,User ID,IV,ENC(KSENC,IV,{Transaction,Type,Nonce,Activation_MAC})}
ここでは、以下のとおりである。
Version= VERSION
Service ID= IDSS
User ID= IDSU
IV= IV(CS)
Transaction= IENCODE(0, 212)
Type= MSG_ACTIVATION_CHALLENGE
Nonce= PRNG(128)
Activation_MAC= HMAC(KSMAC,{Version,Type,Transaction,Nonce,IV});いくつかの実施形態においては、Activation_MACは、64ビットに切り捨てられてもよい。
【0049】
ステップ2:キーKTACT及び状態SSRESが、サーバー上において更新されてもよい。
S:SSRES,KTACT:=UPDATE(SSRES)
【0050】
ステップ3:クライアントは、起動メッセージを受け取ってもよく、且つ、これを暗号解読することができる。
【0051】
ステップ4:クライアントは、IDCUがIDSUと等しいかどうかを検証することができる。IDCU!=IDSUである場合に、クライアントは、エラーメッセージを表示してもよく、且つ、終了してもよい。
【0052】
ステップ5:クライアントは、起動メッセージの暗号化された部分を暗号解読してもよく、且つ、Activation_MACを検証してもよく、クライアントは、これに失敗した場合に、終了することができる。
【0053】
ステップ6:クライアントは、初期ベクトルIVからカウンタを抽出してもよく、且つ、(IVから抽出された)そのカウンタ<=カウンタの最後の既知の値であるか、或いは、>カウンタの最後の既知の値+100である、場合に、クライアントは、異常終了してもよい。
【0054】
ステップ7:クライアントは、パスコードブラインディングデータ要素を取得することができる。例えば、クライアントは、パスコードブラインディングデータ要素の値をまだ有していない場合には、パスコードブラインディングデータ要素をランダム数として生成することができる。例えば、特定の一実施形態においては、C:PR==<> then PR:=PRNG(128)である。
【0055】
ステップ8:クライアントは、パスコードの値を提供するようにユーザーに要求してもよく、且つ、ユーザーによって提供されたパスコードをキャプチャしてもよい。いくつかの実施形態においては、ユーザーは、確認のためにパスコードを二度にわたって提供するように要求されてもよく、且つ、クライアントは、ユーザーによって提供されたパスコードの2つの値が一貫性を有することを検証するように適合されていてもよい。
【0056】
ステップ9:状態及びキーがクライアント上において更新されてもよい(これは、IVから抽出されたカウンタの値とカウンタの最後の既知の値の間の差に応じて反復されてもよい)。
C:SCRES,K:=UPDATE(SCRES)
【0057】
ステップ10:応答が生成されている。
C→S: ENC(K,0,{V,HMAC(KCACT,{Version,Type,Transaction,V})
ここでは、以下のとおりである。
Version= VERSION
Type= MSG_ACTIVATION_RESPONSE
Transaction= IENCODE(0,212)
V= HMAC(PR,passcode)(30ビットに切り捨てられる)
HMAC(KCACT,msg)は、15ビットに切り捨てられる。
【0058】
ステップ11:S:サーバーは、応答をKTACTによって暗号解読してもよく、且つ、これをKCACTによって検証してもよく、且つ、PV:=Vと設定してもよい。
【0059】
認証サブプロトコル
概要
この認証サブプロトコルは、ユーザーが、自身を認証することを許容するべく、或いは、特定のトランザクションを認可することを許容するべく、実行されてもよい。結果は、例えば、ユーザーによって提供された認証クレデンシャルの検証に成功した際に、ユーザーが正しいトランザクション詳細を観察していると共に正しいパスコードを入力したとサーバーが結論付けるというものであってもよい。サーバーは、パスコード自体について知ってはいない。すべての通信を記録している盗聴者も、電話機を盗んだ後においてさえ、(MACキーが、使用の後に破棄されていることから)パスコードを取得可能ではない。
【0060】
詳細
ステップ1:いくつかの実施形態においては、ユーザーは、サーバーにコンタクトしてもよく、且つ、認証又はトランザクションを開始することができる。
【0061】
ステップ2:クライアントは、動的変数の値を取得することができる。いくつかの実施形態においては、動的変数の値は、クライアントによって維持されているカウンタに基づいたものであってもよい。いくつかの実施形態においては、クライアントは、そのこのようなカウンタの値をサーバーによって維持されている対応するカウンタ値と同期化させることができる。いくつかの実施形態においては、動的変数の値は、例えば、クライアントがサーバーからメッセージ内において受け取りうる外部データ要素に基づいたものであってもよい。外部データ要素は、例えば、サーバーによって生成されうるチャレンジ及び/又はノンスを有することができる。又、外部データ要素は、例えば、ユーザーによって認可されるべきトランザクションを表すトランザクションデータを有することもできる。いくつかの実施形態においては、サーバーは、例えば、メッセージ認証コード(MAC)を追加することにより、メッセージを認証することができる。又、いくつかの実施形態においては、サーバーは、サーバーメッセージを暗号化することもできる。例えば、特定の一実施形態においては、サーバーは、チャレンジメッセージを生成してもよく、且つ、クライアントに以下のように送信してもよい。
S−> C: {Version, Service ID,User ID,IV,
ENC(KSENC,IV,{Transaction,Type,Nonce,Challenge_MAC})}
ここでは、以下のとおりである。
Version= VERSION
Service ID= IDSS
User ID= IDSU
IV= IV(CS)
トランザクション=認可されるべきトランザクションのエンコーディングされた詳細を有していてもよく、いくつかのケースにおいては、「Transaction」は、ユーザーにとっては無意味でありうる(ランダムな)チャレンジによってエンコーディングされてもよく、或いは、これは、例えば、認証サブプロトコルが、特定のトランザクションの認可のためにではなく、ユーザーの認証のために使用されている場合には、既定の値によってエンコーディングされてもよい。
Type=MSG_CHALLENGE
Nonce= PRNG(128)
Challenge_MAC= HMAC(KSMAC,{Version,Type,Transaction,Nonce,IV}), 64ビットに切り捨てられる
【0062】
ステップ3:キーK及び状態SSRESをサーバー上において更新することができる。
S:SSRES,K:=UPDATE(SSRES)
【0063】
ステップ4:サーバーは、予想応答を生成してもよく(これは、いくつかの実施形態においては、30ビットに切り捨てられてもよい)、予想応答は、サーバーが後からクライアントから受け取りうる認証クレデンシャルと比較されるべきクレデンシャル基準値として機能することができる。
S:E=HMAC(K,{Version,Type,Transaction,Nonce,IV,PV})
ここでは、以下のとおりである。
Version= VERSION
Type=MSG_RESPONSE
トランザクション、ノンス、IVは、チャレンジメッセージから取得される。
【0064】
ステップ5:クライアントは、受け取られたチャレンジメッセージを暗号解読することができる。
【0065】
ステップ6:C:IDCU!=IDSUである場合に、エラーメッセージを表示し、且つ、終了する。
【0066】
ステップ7:クライアントは、受け取られたチャレンジメッセージを暗号解読してもよく、且つ、メッセージの発信元を認証するべく、Challenge_MACを検証してもよい。この検証に失敗した場合には、クライアントは、異常終了することができる。
【0067】
ステップ8:(IVから抽出された)カウンタ<=最後のカウンタであるか、或いは、>最後のカウンタ+100である場合に、クライアントは、異常終了することができる。
【0068】
ステップ9a:クライアントは、トランザクションにおいてエンコーディングされたトランザクションデータをユーザーに提示してもよく、且つ、提示されたトランザクションデータを認可するようにユーザーに要求することができる。トランザクションが(ハードコーディングされた値又はハッシュ値などの)有意なデータを含んでいない場合には、このステップは、スキップされてもよい。ユーザーが、提示されたトランザクションデータを認可しない場合には、クライアントは、異常終了することができる。
【0069】
ステップ9b:クライアントは、パスコードを提供するようにユーザーに要求することができる。ユーザーがパスコードを提供しない場合には、クライアントは、異常終了することができる。いくつかの実施形態においては、ユーザーは、パスコードを提供することにより、(例えば、提示されたトランザクションデータの)認可を黙示的に通知することができる。
【0070】
ステップ10:キーK及び状態SCRESをクライアント上において更新することができる(これは、クライアントの状態をサーバーの状態と同期させるべく、カウンタに基づいて、いくつかの回数にわたって、反復されてもよい)。
C:SCRES,K:=UPDATE(SCRES);
【0071】
ステップ11:クライアントは、サーバーからチャレンジメッセージを受け取るのに応答して、認証クレデンシャルを生成してもよく、且つ、クライアントは、以下のように、生成された認証クレデンシャルをサーバーに返すことができる。
C−>S:HMAC(K,{Version,Type,Transaction,Nonce,IV,V})
ここでは、以下のとおりである。
Version= VERSION(8ビットになるように、左側の桁にゼロを充填することができる)
Type=MSG_RESPONSE
トランザクション、ノンス、IVは、チャレンジメッセージから取得される。
V=HMAC(PR,passcode)
いくつかの実施形態においては、生成されたクレデンシャルは、30ビットに切り捨てられてもよい。
【0072】
ステップ12:サーバーは、認証クレデンシャルが予想応答Eとマッチングしているかどうかを検証することができる。いくつかの実施形態においては、サーバーは、認証クレデンシャルの検証に成功したかどうかを通知する信号を生成することができる。
【0073】
可能な変形
いくつかの実施形態においては、完全を期すべく、ユーザーID及び/又はサービスIDがMAC内に包含されていてもよい。
【0074】
いくつかの実施形態においては、メッセージタイプは、メッセージの残りの部分が暗号解読される方式を決定するべく使用されうるように、メッセージの先頭に移動されてもよい。
【0075】
本発明のいくつかの実施形態においては、パスコードは、例えば、PIN又はパスワードなどの、ユーザーによって提供される秘密情報を有することができる。その他の実施形態においては、パスコードは、その他の情報を有していてもよく、その他の情報は、ユーザーに関係付けられていてもよく、或いは、ユーザーに固有のものであってもよく、且つ、例えば、いくつかの種類の生体計測情報などのように、機密的特性を有しうると共に秘匿状態において留まることを要する。
【0076】
本発明の以上の且つその他の特徴及び利点については、以下の添付図面において示されている本発明の実施形態に関する以下の更に具体的な説明から、明らかとなろう。