(57)【特許請求の範囲】
【請求項１】
サーバ装置と、
クライアント装置と、
所定の位置に配置されると前記クライアント装置によるデータ読み書きが可能になる携帯型記憶装置とを備え、
前記サーバ装置および前記クライアント装置は、それぞれシードを生成し、前記シードを暗号化して相互に送信し、前記シードからワンタイム認証子を生成して送信し、前記サーバ装置により生成された前記シードと前記クライアント装置により生成された前記シードとに基づいて互いにワンタイム認証子についての認証を行い、前記認証に成功するたびに次回認証用シードで前記シードを更新していき、
前記携帯型記憶装置は、前記サーバ装置および前記クライアント装置の前記シードを保持し、
前記クライアント装置は、フェーズ１において、前記携帯型記憶装置から前記フェーズ１の前記シードを読み出し、読み出したシードに基づいてワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記ワンタイム認証子および前記サーバ装置から受信した前記ワンタイム認証子についての認証に成功すると、前記フェーズ１の前記次回認証用シードを前記携帯型記憶装置に書き込み、前記フェーズ１の後のフェーズ２において、前記フェーズ１の前記次回認証用シードから当該フェーズ２の初回認証用シードを導出し、前記フェーズ２の初回認証用シードから前記フェーズ２のワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記フェーズ２のワンタイム認証子および前記サーバ装置から受信した前記フェーズ２のワンタイム認証子についての認証に成功すると、前記フェーズ２での次回認証用シードを生成して前記フェーズ２の前記シードを更新し、
前記サーバ装置は、前記フェーズ１の前記次回認証用シードを次回のフェーズ１での認証時まで保持するとともに、その次回認証用シードから前記フェーズ２の初回認証用シードを導出し、フェーズ２において前記ワンタイム認証子について認証に成功すると、前記フェーズ２での次回認証用シードを生成して前記シードを更新すること、
を特徴とするワンタイム認証システム。
【請求項２】
前記携帯型記憶装置および前記サーバ装置は、前記シードとして、フェーズ１クライアント側シードおよびフェーズ１サーバ側シードを保持し、
前記クライアント装置は、
（ａ１）前記携帯型記憶装置から前記フェーズ１クライアント側シードおよび前記フェーズ１サーバ側シードを読み出し、
（ａ２）前記フェーズ１クライアント側シードおよび前記フェーズ１サーバ側シードからフェーズ１クライアント側ワンタイム認証子を生成し、
（ａ３）次回認証用フェーズ１クライアント側シードを生成し、
（ａ４）前記フェーズ１クライアント側ワンタイム認証子および暗号化後の前記次回認証用フェーズ１クライアント側シードを前記サーバ装置へ送信し、
（ａ５）前記サーバ装置からフェーズ１サーバ側ワンタイム認証子および暗号化後の次回認証用フェーズ１サーバ側シードを受信し、
（ａ６）前記フェーズ１サーバ側ワンタイム認証子について認証に成功すると、前記次回認証用フェーズ１クライアント側シードおよび前記次回認証用フェーズ１サーバ側シードを前記携帯型記憶装置に書き込み、
（ａ７）前記フェーズ１サーバ側ワンタイム認証子について認証に成功すると、前記次回認証用フェーズ１クライアント側シードおよび前記次回認証用フェーズ１サーバ側シードから初回認証用フェーズ２クライアント側シードおよび初回認証用フェーズ２サーバ側シードを導出し、
（ａ８）前記初回認証用フェーズ２クライアント側シードおよび前記初回認証用フェーズ２サーバ側シードから初回認証用フェーズ２クライアント側ワンタイム認証子を生成し、
（ａ９）次回認証用フェーズ２クライアント側シードを生成し、
（ａ１０）前記初回認証用フェーズ２クライアント側ワンタイム認証子および暗号化後の前記次回認証用フェーズ２クライアント側シードを前記サーバ装置へ送信し、
（ａ１１）前記サーバ装置からフェーズ２サーバ側ワンタイム認証子および暗号化後の次回認証用フェーズ２サーバ側シードを受信し、
（ａ１２）前記フェーズ２サーバ側ワンタイム認証子について認証に成功すると、前記次回認証用フェーズ２クライアント側シードおよび前記次回認証用フェーズ２サーバ側シードから次回認証用フェーズ２クライアント側ワンタイム認証子を生成し、
前記サーバ装置は、
（ｂ１）前記クライアント装置から前記フェーズ１クライアント側ワンタイム認証子および暗号化後の前記次回認証用フェーズ１クライアント側シードを受信し、
（ｂ２）前記フェーズ１クライアント側ワンタイム認証子について認証に成功すると、次回認証用フェーズ１サーバ側シードを生成し、
（ｂ３）前記次回認証用フェーズ１クライアント側シードおよびフェーズ１サーバ側シードからフェーズ１サーバ側ワンタイム認証子を生成し、
（ｂ４）前記クライアント装置へ前記フェーズ１サーバ側ワンタイム認証子および暗号化後の前記次回認証用フェーズ１サーバ側シードを送信し、
（ｂ５）前記次回認証用フェーズ１クライアント側シードおよび前記次回認証用フェーズ１サーバ側シードから初回認証用フェーズ２クライアント側シードおよび初回認証用フェーズ２サーバ側シードを導出し、
（ｂ６）前記クライアント装置から前記初回認証用フェーズ２クライアント側ワンタイム認証子および暗号化後の前記次回認証用フェーズ２クライアント側シードを受信し、
（ｂ７）前記初回認証用フェーズ２クライアント側シードおよび前記初回認証用フェーズ２サーバ側シードに基づき、前記初回認証用フェーズ２クライアント側ワンタイム認証子について認証に成功すると、次回認証用フェーズ２サーバ側シードを生成し、
（ｂ８）前記次回認証用フェーズ２クライアント側シードおよび前記初回認証用フェーズ２サーバ側シードから初回認証用フェーズ２サーバ側ワンタイム認証子を生成し、
（ｂ９）前記クライアント装置へ前記初回認証用フェーズ２サーバ側ワンタイム認証子および暗号化後の前記次回認証用フェーズ２サーバ側シードを送信すること、
を特徴とする請求項１記載のワンタイム認証システム。
【請求項３】
前記フェーズ１クライアント側ワンタイム認証子および前記フェーズ２クライアント側ワンタイム認証子は、同一の一方向性関数で計算され、
前記一方向性関数は、２つの引数をとり、引数の順序によって関数値の異なる関数であって、
前記フェーズ１クライアント側ワンタイム認証子についての引数の順序が、前記フェーズ１クライアント側シード、前記フェーズ１サーバ側シードの順序である場合、前記フェーズ２クライアント側ワンタイム認証子についての引数の順序が、前記フェーズ２サーバ側シード、前記フェーズ２クライアント側シードの順序であり、
前記フェーズ１クライアント側ワンタイム認証子についての引数の順序が、前記フェーズ１サーバ側シード、前記フェーズ１クライアント側シードの順序である場合、前記フェーズ２クライアント側ワンタイム認証子についての引数の順序が、前記フェーズ２クライアント側シード、前記フェーズ２サーバ側シードの順序であること、
を特徴とする請求項２記載のワンタイム認証システム。
【請求項４】
前記フェーズ１サーバ側ワンタイム認証子および前記フェーズ２サーバ側ワンタイム認証子は、同一の一方向性関数で計算され、
前記一方向性関数は、２つの引数をとり、引数の順序によって関数値の異なる関数であって、
前記フェーズ１サーバ側ワンタイム認証子についての引数の順序が、前記次回認証用フェーズ１クライアント側シード、前記フェーズ１サーバ側シードの順序である場合、前記フェーズ２サーバ側ワンタイム認証子についての引数の順序が、前記フェーズ２サーバ側シード、前記次回認証用フェーズ２クライアント側シードの順序であり、
前記フェーズ１サーバ側ワンタイム認証子についての引数の順序が、前記フェーズ１サーバ側シード、前記次回認証用フェーズ１クライアント側シードの順序である場合、前記フェーズ２サーバ側ワンタイム認証子についての引数の順序が、前記次回認証用フェーズ２クライアント側シード、前記フェーズ２サーバ側シードの順序であること、
を特徴とする請求項２または請求項３記載のワンタイム認証システム。
【請求項５】
前記クライアント装置は、前記次回認証用フェーズ１クライアント側シードおよび前記次回認証用フェーズ１サーバ側シードを前記携帯型記憶装置に書き込むまでメモリで保持し、前記次回認証用フェーズ１クライアント側シードおよび前記次回認証用フェーズ１サーバ側シードを、前記携帯型記憶装置に書き込んだ後、前記メモリから消去することを特徴とする請求項２記載のワンタイム認証システム。
【請求項６】
前記携帯型記憶装置および前記サーバ装置は、フェーズ１共通暗号鍵を保持し、
前記クライアント装置は、前記携帯型記憶装置から前記フェーズ１共通暗号鍵を読み出し、前記フェーズ１共通暗号鍵で、前記次回認証用フェーズ１クライアント側シードを暗号化し、前記フェーズ１サーバ側ワンタイム認証子について認証に成功すると、前記フェーズ１共通暗号鍵を更新し、更新後の前記フェーズ１共通暗号鍵を前記携帯型記憶装置に書き込み、更新後の前記フェーズ１共通暗号鍵からフェーズ２共通暗号鍵の初期値を導出し、前記フェーズ２共通暗号鍵で、前記次回認証用フェーズ２クライアント側シードを暗号化し、前記フェーズ２サーバ側ワンタイム認証子について認証に成功すると、前記フェーズ２共通暗号鍵を更新し、
前記サーバ装置は、前記フェーズ１共通暗号鍵で、前記次回認証用フェーズ１サーバ側シードを暗号化し、前記フェーズ１クライアント側ワンタイム認証子について認証に成功すると、前記フェーズ１共通暗号鍵を更新し、更新後の前記フェーズ１共通暗号鍵を次回のフェーズ１での認証時まで保持するとともに、更新後の前記フェーズ１共通暗号鍵からフェーズ２共通暗号鍵の初期値を導出し、前記フェーズ２共通暗号鍵で、前記次回認証用フェーズ２サーバ側シードを暗号化し、前記フェーズ２クライアント側ワンタイム認証子について認証に成功すると、前記フェーズ２共通暗号鍵を更新すること、
を特徴とする請求項２記載のワンタイム認証システム。
【請求項７】
前記クライアント装置は、前記更新後のフェーズ１共通暗号鍵を前記携帯型記憶装置に書き込むまでメモリで保持し、前記更新後のフェーズ１共通暗号鍵を、前記携帯型記憶装置に書き込んだ後、前記メモリから消去することを特徴とする請求項６記載のワンタイム認証システム。
【請求項８】
端末装置において、
ネットワークを介してサーバ装置と通信する通信処理部と、
シードを生成するとともに前記通信処理部を使用して前記サーバ装置から前記サーバ装置のシードを受信し、生成したシードと受信したシードからワンタイム認証子を生成して前記通信処理部を使用して送信し、生成した前記シードと前記サーバ装置のシードとに基づいて、前記サーバ装置から受信されたワンタイム認証子についての認証を行い、前記認証に成功するたびに次回認証用シードで前記シードを更新していく認証処理部とを備え、
前記認証処理部は、フェーズ１において、所定の位置に配置されると当該端末装置によるデータ読み書きが可能になる携帯型記憶装置から前記サーバ装置側および当該端末装置側の前記フェーズ１の前記シードを読み出し、読み出したシードに基づいてワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記ワンタイム認証子および前記サーバ装置から受信した前記ワンタイム認証子についての認証に成功すると、前記サーバ装置側および当該端末装置側についての前記フェーズ１の前記次回認証用シードを前記携帯型記憶装置に書き込み、前記フェーズ１の後のフェーズ２において、前記フェーズ１の前記次回認証用シードから当該フェーズ２の初回認証用シードを導出し、前記フェーズ２の初回認証用シードから前記フェーズ２のワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記フェーズ２のワンタイム認証子および前記サーバ装置のフェーズ２のワンタイム認証子についての認証に成功すると、前記フェーズ２での次回認証用シードを生成して前記フェーズ２の前記シードを更新すること、
を特徴とする端末装置。
【請求項９】
端末装置内のコンピュータを、
シードを生成するとともにサーバ装置から前記サーバ装置のシードを受信し、生成したシードと受信したシードからワンタイム認証子を生成して送信し、生成した前記シードと前記サーバ装置のシードとに基づいて、前記サーバ装置から受信されたワンタイム認証子についての認証を行い、前記認証に成功するたびに次回認証用シードで前記シードを更新していく認証処理部として機能させるためのクライアントコンピュータプログラムであって、
前記認証処理部は、フェーズ１において、所定の位置に配置されると前記端末装置によるデータ読み書きが可能になる携帯型記憶装置から前記サーバ装置側および前記端末装置側の前記フェーズ１の前記シードを読み出し、読み出したシードに基づいてワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記ワンタイム認証子および前記サーバ装置から受信した前記ワンタイム認証子についての認証に成功すると、前記サーバ装置側および当該端末装置側についての前記フェーズ１の前記次回認証用シードを前記携帯型記憶装置に書き込み、前記フェーズ１の後のフェーズ２において、前記フェーズ１の前記次回認証用シードから当該フェーズ２の初回認証用シードを導出し、前記フェーズ２の初回認証用シードから前記フェーズ２のワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記フェーズ２のワンタイム認証子および前記サーバ装置のフェーズ２のワンタイム認証子についての認証に成功すると、前記フェーズ２での次回認証用シードを生成して前記フェーズ２の前記シードを更新すること、
を特徴とするクライアントコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ワンタイム認証システムに関するものである。
【背景技術】
【０００２】
クライアントおよびサーバのそれぞれにおいて乱数などのシードを認証に成功するたびに更新し、次回認証時に、それらのシードからワンタイムＩＤを生成し、クライアントとサーバとの間で相互に認証を行うシステムがある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−２８２２９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述のようなシステムにおいて、次回認証用のクライアント側のシードは、クライアント側の装置に記憶される。このため、通常、ワンタイムＩＤによる認証を受けるために使用可能なクライアント側の装置は、シードが記憶されている装置に限定される。
【０００５】
しかし、ワンタイムＩＤによる認証を受けるために使用可能なクライアント側の装置が限定されないようにするために、ＩＣカードなどの書換可能な携帯型記憶装置にクライアント側のシードを記憶させてユーザがその携帯型記憶装置を携帯することが考えられる。そのようにすることで、ユーザが選択した装置に内蔵または接続されているリーダライタにより携帯型記憶装置からシードを読み取らせ、その装置にてワンタイムＩＤによる認証を受けることができる。
【０００６】
このような認証は、セッション内で複数回、繰り返し実行され、認証に成功するたびにシード、ひいてはワンタイムＩＤが更新される。
【０００７】
しかし、ＩＣカードなどに内蔵される不揮発性メモリには書込可能回数に上限（つまり寿命）があり、書込回数を減らしたいことから、携帯型記憶装置に次セッション用のシードを記憶させる場合、クライアント側の装置は、セッション内においてシードが更新されても携帯型記憶装置に記憶させずにＲＡＭに保持しておき、セッション終了時（またはセッション終了後）に次回認証用のシードを携帯型記憶装置に書き込むことになる。
【０００８】
したがって、少なくともセッション終了時まで、携帯型記憶装置をリーダライタによる書込可能な位置に配置させておく必要があり、利便性がよくない。また、セッション途中で携帯型記憶装置をリーダライタから離脱させてしまうと、次セッション時に、シードが携帯型記憶装置にないため、正規ユーザであっても、次セッションの初回認証時に、ワンタイムＩＤによる認証を受けることができなくなってしまう。
【０００９】
本発明は、上記の問題に鑑みてなされたものであり、セッション開始後短時間で、シードを保持する携帯型記憶装置を離脱可能とし、携帯型記憶装置が離脱しても、その後、継続的に認証を繰り返し行うことができるワンタイム認証システム、並びにそのシステムで使用可能な端末装置およびクライアントコンピュータプログラムを得ることを目的とする。
【課題を解決するための手段】
【００１０】
上記の課題を解決するために、本発明では以下のようにした。
【００１１】
本発明に係るワンタイム認証システムは、サーバ装置と、クライアント装置と、所定の位置に配置されるとクライアント装置によるデータ読み書きが可能になる携帯型記憶装置とを備える。サーバ装置およびクライアント装置は、それぞれシードを生成し、シードを暗号化して相互に送信し、シードからワンタイム認証子を生成して送信し、シードに基づいて互いにワンタイム認証子についての認証を行い、認証に成功するたびに次回認証用シードを生成してシードを更新していく。携帯型記憶装置は、サーバ装置およびクライアント装置のシードを保持する。クライアント装置は、フェーズ１において、携帯型記憶装置からシードを読み出し、読み出したシードに基づいてワンタイム認証子を生成して送信し、ワンタイム認証子について認証に成功すると、フェーズ１の次回認証用シードを携帯型記憶装置に書き込み、フェーズ１の後のフェーズ２において、フェーズ１の次回認証用シードから当該フェーズ２の初回認証用シードを導出し、初回認証用シードからワンタイム認証子を生成し、ワンタイム認証子について認証に成功すると、フェーズ２での次回認証用シードを生成してシードを更新する。サーバ装置は、フェーズ１の次回認証用シードを次回のフェーズ１での認証時まで保持するとともに、その次回認証用シードからフェーズ２の初回認証用シードを導出し、フェーズ２においてワンタイム認証子について認証に成功すると、フェーズ２での次回認証用シードを生成してシードを更新する。
【００１２】
これにより、フェーズ１での認証用のシードとフェーズ２での認証用のシードとを別々に設け、携帯型記憶装置に格納されているシードを使用してフェーズ１での認証を実行し、携帯型記憶装置に格納されているシードを更新し、その後は、フェーズ２での認証を繰り返し行っていく。このため、フェーズ１での認証が完了すれば、ユーザは、携帯型記憶装置を、端末装置やリーダから離脱することができる。したがって、セッション開始後短時間で、シードを保持する携帯型記憶装置を離脱可能とし、携帯型記憶装置が離脱しても、その後、継続的に認証を繰り返し行うことができる。
【００１３】
また、本発明に係るワンタイム認証システムは、上記のワンタイム認証システムに加え、次のようにしてもよい。この場合、携帯型記憶装置およびサーバ装置は、シードとして、フェーズ１クライアント側シードおよびフェーズ１サーバ側シードを保持する。クライアント装置は、
（ａ１）携帯型記憶装置からフェーズ１クライアント側シードおよびフェーズ１サーバ側シードを読み出し、
（ａ２）フェーズ１クライアント側シードおよびフェーズ１サーバ側シードからフェーズ１クライアント側ワンタイム認証子を生成し、
（ａ３）次回認証用フェーズ１クライアント側シードを生成し、
（ａ４）フェーズ１クライアント側ワンタイム認証子および暗号化後の次回認証用フェーズ１クライアント側シードをサーバ装置へ送信し、
（ａ５）サーバ装置からフェーズ１サーバ側ワンタイム認証子および暗号化後の次回認証用フェーズ１サーバ側シードを受信し、
（ａ６）フェーズ１サーバ側ワンタイム認証子について認証に成功すると、次回認証用フェーズ１クライアント側シードおよび次回認証用フェーズ１サーバ側シードを携帯型記憶装置に書き込み、
（ａ７）フェーズ１サーバ側ワンタイム認証子について認証に成功すると、次回認証用フェーズ１クライアント側シードおよび次回認証用フェーズ１サーバ側シードから初回認証用フェーズ２クライアント側シードおよび初回認証用フェーズ２サーバ側シードを導出し、
（ａ８）初回認証用フェーズ２クライアント側シードおよび初回認証用フェーズ２サーバ側シードから初回認証用フェーズ２クライアント側ワンタイム認証子を生成し、
（ａ９）次回認証用フェーズ２クライアント側シードを生成し、
（ａ１０）初回認証用フェーズ２クライアント側ワンタイム認証子および暗号化後の次回認証用フェーズ２クライアント側シードをサーバ装置へ送信し、
（ａ１１）サーバ装置からフェーズ２サーバ側ワンタイム認証子および暗号化後の次回認証用フェーズ２サーバ側シードを受信し、
（ａ１２）フェーズ２サーバ側ワンタイム認証子について認証に成功すると、次回認証用フェーズ２クライアント側シードおよび次回認証用フェーズ２サーバ側シードから次回認証用フェーズ２クライアント側ワンタイム認証子を生成する。
また、サーバ装置は、
（ｂ１）クライアント装置からフェーズ１クライアント側ワンタイム認証子および暗号化後の次回認証用フェーズ１クライアント側シードを受信し、
（ｂ２）フェーズ１クライアント側ワンタイム認証子について認証に成功すると、次回認証用フェーズ１サーバ側シードを生成し、
（ｂ３）次回認証用フェーズ１クライアント側シードおよびフェーズ１サーバ側シードからフェーズ１サーバ側ワンタイム認証子を生成し、
（ｂ４）クライアント装置へフェーズ１サーバ側ワンタイム認証子および暗号化後の次回認証用フェーズ１サーバ側シードを送信し、
（ｂ５）次回認証用フェーズ１クライアント側シードおよび次回認証用フェーズ１サーバ側シードから初回認証用フェーズ２クライアント側シードおよび初回認証用フェーズ２サーバ側シードを導出し、
（ｂ６）クライアント装置からフェーズ２クライアント側ワンタイム認証子および暗号化後の次回認証用フェーズ２クライアント側シードを受信し、
（ｂ７）初回認証用フェーズ２クライアント側シードおよび初回認証用フェーズ２サーバ側シードに基づき、初回認証用フェーズ２クライアント側ワンタイム認証子について認証に成功すると、次回認証用フェーズ２サーバ側シードを生成し、
（ｂ８）次回認証用フェーズ２クライアント側シードおよび初回認証用フェーズ２サーバ側シードから初回認証用フェーズ２サーバ側ワンタイム認証子を生成し、
（ｂ９）クライアント装置へ初回認証用フェーズ２サーバ側ワンタイム認証子および暗号化後の次回認証用フェーズ２サーバ側シードを送信する。
【００１４】
また、本発明に係るワンタイム認証システムは、上記のワンタイム認証システムのいずれかに加え、次のようにしてもよい。この場合、フェーズ１クライアント側ワンタイム認証子およびフェーズ２クライアント側ワンタイム認証子は、同一の一方向性関数で計算され、その一方向性関数は、２つの引数をとり、引数の順序によって関数値の異なる関数である。そして、フェーズ１クライアント側ワンタイム認証子についての引数の順序が、フェーズ１クライアント側シード、フェーズ１サーバ側シードの順序である場合、フェーズ２クライアント側ワンタイム認証子についての引数の順序が、フェーズ２サーバ側シード、フェーズ２クライアント側シードの順序である。一方、フェーズ１クライアント側ワンタイム認証子についての引数の順序が、フェーズ１サーバ側シード、フェーズ１クライアント側シードの順序である場合、フェーズ２クライアント側ワンタイム認証子についての引数の順序が、フェーズ２クライアント側シード、フェーズ２サーバ側シードの順序である。
【００１５】
これにより、フェーズ１クライアント側ワンタイム認証子およびフェーズ２クライアント側ワンタイム認証子に使用する関数値のデータフォーマットが同一になる。このため、盗聴してもフェーズ１のワンタイム認証子かフェーズ２のワンタイム認証子かがデータフォーマットから判別できない。また、引数の順序を変えているため、フェーズ１のワンタイム認証子とフェーズ２の初回のワンタイム認証子とが一致しにくい。したがって、耐タンパ性が向上する。
【００１６】
また、本発明に係るワンタイム認証システムは、上記のワンタイム認証システムのいずれかに加え、次のようにしてもよい。フェーズ１サーバ側ワンタイム認証子およびフェーズ２サーバ側ワンタイム認証子は、同一の一方向性関数で計算され、その一方向性関数は、２つの引数をとり、引数の順序によって関数値の異なる関数である。そして、フェーズ１サーバ側ワンタイム認証子についての引数の順序が、次回認証用フェーズ１クライアント側シード、フェーズ１サーバ側シードの順序である場合、フェーズ２サーバ側ワンタイム認証子についての引数の順序が、フェーズ２サーバ側シード、次回認証用フェーズ２クライアント側シードの順序である。一方、フェーズ１サーバ側ワンタイム認証子についての引数の順序が、フェーズ１サーバ側シード、次回認証用フェーズ１クライアント側シードの順序である場合、フェーズ２サーバ側ワンタイム認証子についての引数の順序が、次回認証用フェーズ２クライアント側シード、フェーズ２サーバ側シードの順序である。
【００１７】
これにより、フェーズ１サーバ側ワンタイム認証子およびフェーズ２サーバ側ワンタイム認証子に使用する関数値のデータフォーマットが同一になる。このため、盗聴してもフェーズ１のワンタイム認証子かフェーズ２のワンタイム認証子かがデータフォーマットから判別できない。また、引数の順序を変えているため、フェーズ１のワンタイム認証子とフェーズ２の初回のワンタイム認証子とが一致しにくい。したがって、耐タンパ性が向上する。
【００１８】
また、本発明に係るワンタイム認証システムは、上記のワンタイム認証システムのいずれかに加え、次のようにしてもよい。この場合、クライアント装置は、次回認証用フェーズ１クライアント側シードおよび次回認証用フェーズ１サーバ側シードを携帯型記憶装置に書き込むまでメモリで保持し、次回認証用フェーズ１クライアント側シードおよび次回認証用フェーズ１サーバ側シードを、携帯型記憶装置に書き込んだ後、メモリから消去する。
【００１９】
これにより、フェーズ１のシードがクライアント装置に残らないため、フェーズ１の認証が完了した後に、次回、フェーズ１で使用するシードをクライアント装置から不正に入手することが困難になる。
【００２０】
また、本発明に係るワンタイム認証システムは、上記のワンタイム認証システムのいずれかに加え、次のようにしてもよい。この場合、携帯型記憶装置およびサーバ装置は、フェーズ１共通暗号鍵を保持する。クライアント装置は、携帯型記憶装置からフェーズ１共通暗号鍵を読み出し、フェーズ１共通暗号鍵で、次回認証用フェーズ１クライアント側シードを暗号化し、フェーズ１サーバ側ワンタイム認証子について認証に成功すると、フェーズ１共通暗号鍵を更新し、更新後のフェーズ１共通暗号鍵を携帯型記憶装置に書き込み、更新後のフェーズ１共通暗号鍵からフェーズ２共通暗号鍵の初期値を導出し、フェーズ２共通暗号鍵で、次回認証用フェーズ２クライアント側シードを暗号化し、フェーズ２サーバ側ワンタイム認証子について認証に成功すると、フェーズ２共通暗号鍵を更新する。一方、サーバ装置は、フェーズ１共通暗号鍵で、次回認証用フェーズ１サーバ側シードを暗号化し、フェーズ１クライアント側ワンタイム認証子について認証に成功すると、フェーズ１共通暗号鍵を更新し、更新後のフェーズ１共通暗号鍵を次回のフェーズ１での認証時まで保持するとともに、更新後のフェーズ１共通暗号鍵からフェーズ２共通暗号鍵の初期値を導出し、フェーズ２共通暗号鍵で、次回認証用フェーズ２サーバ側シードを暗号化し、フェーズ２クライアント側ワンタイム認証子について認証に成功すると、フェーズ２共通暗号鍵を更新する。
【００２１】
これにより、フェーズ１で使用される共通暗号鍵とフェーズ２で使用される共通暗号鍵とを別々に設け、携帯型記憶装置に格納されているフェーズ１共通暗号鍵を使用して暗号化されたシードの送受を行い、フェーズ１での認証が成功すると、携帯型記憶装置に格納されているフェーズ１共通暗号鍵を更新し、また、フェーズ２での認証が成功するたびに、フェーズ２共通暗号鍵を更新していく。このため、フェーズ１とフェーズ２と別々に共通暗号鍵が更新されていき、耐タンパ性が向上する。
【００２２】
また、本発明に係るワンタイム認証システムは、上記のワンタイム認証システムのいずれかに加え、次のようにしてもよい。この場合、クライアント装置は、更新後のフェーズ１共通暗号鍵を携帯型記憶装置に書き込むまでメモリで保持し、更新後のフェーズ１共通暗号鍵を、携帯型記憶装置に書き込んだ後、メモリから消去する。
【００２３】
これにより、フェーズ１で使用する共通暗号鍵がクライアント装置に残らないため、フェーズ１の認証が完了した後に、次回、フェーズ１で使用する共通暗号鍵をクライアント装置から不正に入手することが困難になる。
【００２４】
本発明に係る端末装置は、ネットワークを介してサーバ装置と通信する通信処理部と、シードを生成するとともに通信処理部を使用してサーバ装置からサーバ装置のシードを受信し、生成したシードと受信したシードからワンタイム認証子を生成して通信処理部を使用して送信し、シードに基づいて、サーバ装置から受信されたワンタイム認証子についての認証を行い、認証に成功するたびに次回認証用シードを生成してシードを更新していく認証処理部とを備える。そして、認証処理部は、フェーズ１において、所定の位置に配置されると当該端末装置によるデータ読み書きが可能になる携帯型記憶装置からサーバ装置側および当該端末装置側のシードを読み出し、読み出したシードに基づいてワンタイム認証子を生成して送信し、ワンタイム認証子について認証に成功すると、サーバ装置側および当該端末装置側についてのフェーズ１の次回認証用シードを携帯型記憶装置に書き込み、フェーズ１の後のフェーズ２において、フェーズ１の次回認証用シードから当該フェーズ２の初回認証用シードを導出し、初回認証用シードからワンタイム認証子を生成し、ワンタイム認証子について認証に成功すると、フェーズ２での次回認証用シードを生成してシードを更新する。
【００２５】
本発明に係るクライアントコンピュータプログラムは、端末装置内のコンピュータを、シードを生成するとともにサーバ装置からサーバ装置のシードを受信し、生成したシードと受信したシードからワンタイム認証子を生成して送信し、シードに基づいて、サーバ装置から受信されたワンタイム認証子についての認証を行い、認証に成功するたびに次回認証用シードを生成してシードを更新していく認証処理部として機能させるためのクライアントコンピュータプログラムである。そして、その認証処理部は、フェーズ１において、所定の位置に配置されると端末装置によるデータ読み書きが可能になる携帯型記憶装置からサーバ装置側および端末装置側のシードを読み出し、読み出したシードに基づいてワンタイム認証子を生成して送信し、ワンタイム認証子について認証に成功すると、サーバ装置側および当該端末装置側についてのフェーズ１の次回認証用シードを携帯型記憶装置に書き込み、フェーズ１の後のフェーズ２において、フェーズ１の次回認証用シードから当該フェーズ２の初回認証用シードを導出し、初回認証用シードからワンタイム認証子を生成し、ワンタイム認証子について認証に成功すると、フェーズ２での次回認証用シードを生成してシードを更新する。
【発明の効果】
【００２６】
本発明によれば、セッション開始後短時間で、シードを保持する携帯型記憶装置を離脱可能とし、携帯型記憶装置が離脱しても、その後、継続的に認証を繰り返し行うことができるワンタイム認証システムが得られる。
【図面の簡単な説明】
【００２７】
【図１】図１は、本発明の実施の形態に係るワンタイム認証システムの構成を示すブロック図である。
【図２】図２は、図１における端末装置の構成を示すブロック図である。
【図３】図３は、図２に示す端末装置において実現される処理部を示すブロック図である。
【図４】図４は、図１におけるサーバ装置の構成を示すブロック図である。
【図５】図５は、図２に示すサーバ装置において実現される処理部を示すブロック図である。
【図６】図６は、図１におけるＩＣカードの構成を示すブロック図である。
【図７】図７は、図１に示すシステムにおいて実行されるワンタイム認証子を使用して繰り返し行われる認証について説明するシーケンス図である。
【図８】図８は、図７におけるフェーズ１でのワンタイム認証（ステップＳ４）の詳細について説明するシーケンス図である。
【図９】図９は、図７におけるフェーズ２での初回のワンタイム認証（ステップＳ７ａ）の詳細について説明するシーケンス図である。
【図１０】図１０は、図７におけるフェーズ２での２回目以降のワンタイム認証（ステップＳ７）の詳細について説明するシーケンス図である。
【図１１】図１１は、実施の形態２におけるシードテーブルの構造の一例を示す図である。
【図１２】図１２は、実施の形態２における認証子テーブルの一例を示す図である。
【図１３】図１３は、実施の形態２におけるサーバ装置によるデータ処理について説明するフローチャートである。
【図１４】図１４は、実施の形態２におけるサーバ装置によるデータ処理について説明するフローチャートである。
【発明を実施するための形態】
【００２８】
以下、図に基づいて本発明の実施の形態を説明する。
【００２９】
実施の形態１．
【００３０】
図１は、本発明の実施の形態に係るワンタイム認証システムの構成を示すブロック図である。
【００３１】
図１に示すシステムでは、クライアント装置としての端末装置１にＩＣカード用リーダライタ２が接続されており、また、端末装置１は、ネットワーク３に接続されており、そのネットワーク３にはサーバ装置４が接続されている。端末装置１は、ＩＣカード５が所定の位置（例えばリーダライタ２の上）に配置されている時に、リーダライタ２を使用して、ＩＣカード５に対してデータの読み書きを行うことができるとともに、サーバ装置４との間でデータ通信を行うことができる。
【００３２】
端末装置１は、パーソナルコンピュータなどの装置である。ネットワーク３は、有線および／または無線のＬＡＮ（Local Area Network）、および／またはインターネットなどのＷＡＮ（Wide Area Network）を含んでいる。ＩＣカード５は、Ｆｅｒｉｃａ（登録商標）などといった、データ読み書き可能な不揮発性メモリ領域を有するカードである。この実施の形態１では、ＩＣカード５は、携帯型記憶装置として使用される。
【００３３】
ＩＣカード５は、シードを保持する。シードは、ワンタイム認証子を生成するために使用されるデータであって、この実施の形態では、乱数が使用される。ワンタイム認証子は、認証時に１度だけ使用可能なＩＤ（ワンタイムＩＤ）またはパスワード（ワンタイムパスワード）である。この実施の形態では、ワンタイム認証子は、ワンタイムＩＤとされる。
【００３４】
サーバ装置４および端末装置１は、それぞれシードを生成し、認証に成功するたびにシードを更新していき、そのシードを暗号化して相互に送受し、両者のシードからワンタイム認証子を生成し、シードに基づいて、互いにワンタイム認証子についての認証を行う。なお、以下では、ワンタイム認証子についての認証のことを、ワンタイム認証という。
【００３５】
サーバ装置４および端末装置１は、フェーズ１およびフェーズ２のワンタイム認証を行う。フェーズ１は、セッション開始後の初回のワンタイム認証を行うフェーズであり、フェーズ２は、フェーズ１に続くフェーズである。
【００３６】
フェーズ１において、端末装置１は、ＩＣカード５から両者のシードを読み出し、そのシードに基づいてワンタイム認証子を生成してサーバ装置４へ送信し、ワンタイム認証子について認証に成功すると、次回認証用シードをＩＣカード５に書き込む。
【００３７】
フェーズ１の後のフェーズ２において、端末装置１は、フェーズ１の次回認証用シードから当該フェーズ２の初回認証用シードを導出し、初回認証用シードからワンタイム認証子を生成し、ワンタイム認証子について認証に成功すると、フェーズ２での次回認証用シードを生成し次回認証用シードに基づいてワンタイム認証子を生成する。
【００３８】
一方、サーバ装置４は、フェーズ１の次回認証用シードを次回のフェーズ１での認証時まで保持するとともに、その次回認証用シードからフェーズ２の初回認証用シードを導出し、ワンタイム認証子について認証に成功すると、フェーズ２での次回認証用シードを生成し次回認証用シードに基づいてワンタイム認証子を生成する。
【００３９】
なお、図１では、ＩＣカード５は、１枚だけであるが、２枚以上のＩＣカード５のそれぞれに異なるシードを保持させて、それぞれ異なるワンタイム認証子で認証を行うことも可能である。また、図１では、端末装置１およびリーダライタ２も１組のみであるが、同様のものが複数組、ネットワーク３に接続されていてもよい。
【００４０】
以下、上記システムにおける各装置の構成および動作について説明する。
【００４１】
（１）各装置の構成
【００４２】
図２は、図１における端末装置１の構成を示すブロック図である。
【００４３】
図２に示すように、端末装置１は、ＣＰＵ（Central Processing Unit）１１、ＲＯＭ（Read Only Memory）１２、ＲＡＭ（Random Access Memory）１３などを有するコンピュータを内蔵する。
【００４４】
ＣＰＵ１１は、プログラムを実行し、プログラムに記述された処理を実行する演算処理装置である。また、ＲＯＭ１２は、プログラムおよびデータを予め記憶した不揮発性のメモリである。また、ＲＡＭ１３は、プログラムを実行する際にそのプログラムおよびデータを一時的に記憶する揮発性のメモリである。
【００４５】
また、インタフェース１４は、記憶装置１５を接続可能なインタフェース回路であり、ＳＣＳＩ（Small Computer System Interface ）、ＩＤＥ（Integrated Device Electronics ）互換のものなどである。
【００４６】
また、記憶装置１５は、インタフェース１４に接続され、図示せぬオペレーティングシステム、ワンタイム認証プログラム３１、アプリケーションプログラムなどを格納する記録媒体を有する装置である。記憶装置１５としては、ハードディスクドライブ、ＳＳＤ（Solid State Disk）などが使用される。
【００４７】
また、インタフェース１６は、通信装置１７を接続可能なインタフェース回路である。通信装置１７は、ネットワークインタフェースカード、モデムなどといったネットワーク３に接続可能な装置である。
【００４８】
また、インタフェース１８は、ＩＥＥＥ１３９４、ＵＳＢ（Universal Serial Bus）などといった周辺機器インタフェースであって、リーダライタ２を接続可能なインタフェース回路である。
【００４９】
また、インタフェース２０は、入力装置２１を接続可能なインタフェース回路である。入力装置２１は、キーボード、マウスなどといったユーザ操作を受け付けてそのユーザ操作に応じた信号を出力する装置である。
【００５０】
また、画像処理回路２２は、画像データを書き込まれると、そのデータに対応する画像信号を出力する回路である。この画像処理回路２２には、その画像信号に基づいて画像を表示する表示装置２３が接続可能である。
【００５１】
ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、インタフェース１４，１６，１８，２０および画像処理回路２２は、バスやコントローラチップによって相互にデータ通信可能に接続されている。
【００５２】
図３は、図２に示す端末装置１において実現される処理部を示すブロック図である。図３に示すように、この端末装置１において、リーダライタ制御部４１、通信処理部４２、および認証処理部４３が実現される。
【００５３】
リーダライタ制御部４１は、リーダライタ２を制御するドライバであって、ＩＣカード５に対するデータの読み書きを実行する。
【００５４】
通信処理部４２は、通信装置１７を使用して、所定の通信プロトコルでサーバ装置４とネットワーク３を介してデータ通信を行う。
【００５５】
認証処理部４３は、ＣＰＵ１１でワンタイム認証プログラム３１が実行されることにより実現され、リーダライタ制御部４１および通信処理部４２を使用して、サーバ装置４との相互認証におけるクライアント側の処理を実行する。
【００５６】
図４は、図１におけるサーバ装置４の構成を示すブロック図である。
【００５７】
図４において、ＣＰＵ５１は、プログラムを実行し、プログラムに記述された処理を実行する演算処理装置である。また、ＲＯＭ５２は、プログラムおよびデータを予め記憶した不揮発性のメモリである。また、ＲＡＭ５３は、プログラムを実行する際にそのプログラムおよびデータを一時的に記憶するメモリである。
【００５８】
また、インタフェース５４は、記憶装置５５を接続可能なインタフェース回路であり、ＳＣＳＩ、ＩＤＥ互換のものなどである。記憶装置５５は、インタフェース５４に接続され、図示せぬオペレーティングシステム、ワンタイム認証プログラム６１、認証に使用されるデータなどを格納する記録媒体を有する装置である。記憶装置５５としては、ハードディスクドライブ、ＳＳＤなどが使用される。記憶装置５５には、認証に使用されるデータとして、シードテーブル７１、認証子テーブル７２、およびカード属性テーブル７３が保持されている。
【００５９】
シードテーブル７１は、最後の認証時に更新された、フェーズ１およびフェーズ２のそれぞれについての次回認証用シードおよび次回認証用共通暗号鍵を有する。次回認証用シードおよび次回認証用共通暗号鍵は、１または複数のＩＣカードのそれぞれについて別々に保持される。
【００６０】
認証子テーブル７２は、最後の認証時に更新された、フェーズ１およびフェーズ２のそれぞれについての次回認証用のクライアント側ワンタイム認証子を有する。認証子テーブル７２は、フェーズ１テーブル７２ａとフェーズ２テーブル７２ｂとを含む。フェーズ１テーブル７２ａは、フェーズ１についての次回認証用のクライアント側ワンタイム認証子を有し、とフェーズ２テーブル７２ｂは、フェーズ２についての次回認証用のクライアント側ワンタイム認証子を有する。次回認証用のクライアント側ワンタイム認証子は、１または複数のＩＣカードのそれぞれについて別々に保持される。
【００６１】
カード属性テーブル７３は、ＩＣカード５のカードＩＤ、およびそのカードＩＤに関連付けられている属性情報（カード所有者情報など）を有するテーブルである。カード属性テーブル７３は、ワンタイム認証子がワンタイムパスワードであるときに、端末装置１からワンタイム認証子とともに受信されるカードＩＤの正当性を判定する際に参照される。
【００６２】
また、インタフェース５６は、通信装置５７を接続可能なインタフェース回路である。通信装置５７は、ネットワークインタフェースカード、モデムなどといったネットワーク３に接続可能な装置である。
【００６３】
ＣＰＵ５１、ＲＯＭ５２、ＲＡＭ５３、およびインタフェース５４，５６は、バスやコントローラチップによって相互にデータ通信可能に接続されている。
【００６４】
図５は、図２に示すサーバ装置４において実現される処理部を示すブロック図である。図５に示すように、このサーバ装置４において、通信処理部８１、およびサーバ側認証処理部８２が実現される。
【００６５】
通信処理部８１は、通信装置５７を使用して、所定の通信プロトコルで端末装置１とネットワーク３を介してデータ通信を行う。
【００６６】
サーバ側認証処理部８２は、ＣＰＵ５１でワンタイム認証プログラム６１が実行されることにより実現され、通信処理部８１を使用して、１または複数のクライアント装置（端末装置１など）との相互認証におけるサーバ側の処理を実行する。
【００６７】
図６は、図１におけるＩＣカード５の構成を示すブロック図である。
【００６８】
ＩＣカード５は、通信部９１、不揮発性メモリ９２、および制御部９３を有する。通信部９１は、リーダライタ２との通信のためのアンテナや通信回路を有する。不揮発性メモリ９２は、フラッシュメモリなどであって、ユーザが書換可能なユーザ領域と、ユーザが書換可能ではない非ユーザ領域とを有する。ＩＣカードに固有なカードＩＤ１０１は、予め非ユーザ領域に保持されており、シード１０２は、ユーザ領域に保持される。制御部９３は、リーダライタ２から受信されるコマンドに従って、不揮発性メモリ９２に対するデータの読み書きを行う回路である。
【００６９】
（２）各装置の動作
【００７０】
図７は、図１に示すシステムにおいて実行されるワンタイム認証子を使用して繰り返し行われる認証について説明するシーケンス図である。
【００７１】
まず、セッション開始時（ステップＳ１）に、ユーザは、ＩＣカード５をリーダライタ２に載置しておく。
【００７２】
端末装置１では、認証処理部４３は、リーダライタ制御部４１を使用してリーダライタ２を制御し、ＩＣカード５からシード１０２などを読み込む（ステップＳ２）。
【００７３】
そして、認証処理部４３は、フェーズフラグＰに、フェーズ１を示す値（ここでは１）をセットする（ステップＳ３）。フェーズフラグＰは、認証のフェーズを示すデータである。フェーズフラグＰの値から、現時点のフェーズが識別され、ひいては、フェーズ１からフェーズ２へ移行したことも判定される。
【００７４】
次に、端末装置１の認証処理部４３とサーバ装置４のサーバ側認証処理部８２との間で、フェーズ１でのワンタイム認証が実行される（ステップＳ４）。このとき、認証処理部４３は、読み込んだシードからワンタイム認証子を生成し、また、次回認証用シードを生成して暗号化し、ワンタイム認証子および暗号化された次回認証用シードをサーバ装置４へ送信する。サーバ側認証処理部８２は、そのワンタイム認証子および暗号化された次回認証用シードを受信し、そのワンタイム認証子が正当なものであるか否かを判定する。サーバ側認証処理部８２は、そのワンタイム認証子が正当なものであれば、クライアントの次回認証用シードを復号して保持する。
【００７５】
なお、フェーズ１のクライアント側シードの初期値、サーバ側シードの初期値、および共通暗号鍵の初期値は、ＩＣカード５とサーバ装置４に予めセットされる。サーバ装置４には、ＩＣカード５に関連付けて、それらの初期値がセットされる。
【００７６】
サーバ装置４では、シードテーブル７１にＩＣカード５のシード１０２と同一のシードが保持されており、また、フェーズ１の次回認証用クライアント側ワンタイム認証子が、認証子テーブル７２に保持されている。次回認証用クライアント側ワンタイム認証子は、前回の認証時に生成され、認証子テーブル７２に書き込まれたものである。この次回認証用クライアント側ワンタイム認証子は、端末装置１から送信されてくるワンタイム認証子の正当性判定に使用される。つまり、端末装置１から送信されてきたワンタイム認証子が、認証子テーブル７２に保持されているワンタイム認証子と一致すると、そのワンタイム認証子は正当なものであると判定される。
【００７７】
なお、フェーズ１のシードの初期値は、予めＩＣカード５およびサーバ装置４にセットされ、フェーズ１の認証が成功するたびに、フェーズ１のシードの値は更新されていく。
【００７８】
フェーズ１でのワンタイム認証が成功すると、サーバ装置４では、サーバ側認証処理部８２は、次回認証用シードからクライアント側ワンタイム認証子を生成し、認証子テーブル７２において、ＩＣカード５についてのフェーズ１の次回認証用クライアント側ワンタイム認証子を更新する。一方、端末装置１の認証処理部４３は、次回認証用シードに基づいて、ＩＣカード５内のシード１０２を更新する（ステップＳ５）。
【００７９】
この時点で、ＩＣカード５をリーダライタ２から離脱させることが可能となる。このため、認証処理部４３は、オーディオ出力やビデオ出力を使用して、ＩＣカード５をリーダライタ２から離脱させることが可能となったことを、ユーザに報知するようにしてもよい。
【００８０】
そして、認証処理部４３は、フェーズフラグＰに、フェーズ２を示す値（ここでは２）をセットする（ステップＳ６）。
【００８１】
次に、認証が必要なタイミングでフェーズ２における初回の認証が実行される（ステップＳ７ａ）。
【００８２】
フェーズ２における初回の認証では、フェーズ１での認証で更新されたシード（つまり、フェーズ１の次回認証用シード）からフェーズ２用のシードの初期値が導出される。この実施の形態１では、フェーズ１での認証で更新されたシードの値が、フェーズ２用のシードの初期値とされる。
【００８３】
その後、端末装置１の認証処理部４３とサーバ装置４のサーバ側認証処理部８２との間で、フェーズ２でのワンタイム認証が実行される。
【００８４】
フェーズ２の初回のワンタイム認証（ステップＳ７ａ）では、認証処理部４３は、その初期値を有するシードからワンタイム認証子を生成し、また、フェーズ２の次回認証用シードを生成して暗号化し、ワンタイム認証子と暗号化された次回認証用シードをサーバ装置４へ送信する。
【００８５】
一方、サーバ側認証処理部８２は、フェーズ１の次回認証用シードからフェーズ２のシードの初期値を計算し、その初期値からＩＣカード５についてのフェーズ２の初回のワンタイム認証子を計算する。そして、フェーズ２の初回のワンタイム認証（ステップＳ７ａ）において、サーバ側認証処理部８２は、端末装置１からワンタイム認証子および暗号化された次回認証用シードを受信すると、受信したワンタイム認証子が正当なものであるか否かを、計算したワンタイム認証子に基づいて判定する。サーバ側認証処理部８２は、そのワンタイム認証子が正当なものであれば、次回認証用シードを復号し保持する。
【００８６】
フェーズ２の初回のワンタイム認証に成功すると、フェーズ２の２回目以降のワンタイム認証（ステップＳ７）において、端末装置１の認証処理部４３は、シードを生成し、同様にシードから生成したワンタイム認証子と、暗号化された次回認証用シードとをサーバ装置４へ送信する。
【００８７】
一方、フェーズ２の２回目以降のワンタイム認証（ステップＳ７）において、サーバ側認証処理部８２は、前回の認証時に送信されてきた次回認証用シードからワンタイム認証子を計算し、その後、端末装置１からワンタイム認証子および暗号化された次回認証用シードを受信すると、受信したワンタイム認証子が正当なものであるか否かを、計算したワンタイム認証子に基づいて判定する。サーバ側認証処理部８２は、そのワンタイム認証子が正当なものであれば、次回認証用シードを復号し保持する（つまり、フェーズ２の次回認証用シードを更新する）。
【００８８】
以後、セッション終了（ステップＳ８）まで、認証が必要なタイミングでフェーズ２における認証が実行される（ステップＳ７）。
【００８９】
ここで、フェーズ１でのワンタイム認証（ステップＳ４）の詳細について説明する。図８は、図７におけるフェーズ１でのワンタイム認証（ステップＳ４）の詳細について説明するシーケンス図である。なお、以下において、フェーズ１の説明中のｎとフェーズ２の説明中のｎとは無関係である。
【００９０】
ＩＣカード５には、シード１０２の他に、フェーズ１用の共通暗号鍵も保持されている。また、サーバ装置４にも、シードの他に、同一の共通暗号鍵がフェーズ１用の共通暗号鍵として保持されている。つまり、フェーズ１の共通暗号鍵の初期値は、予めＩＣカード５およびサーバ装置４にセットされている。そして、後述のように、フェーズ１の認証が成功するたびに、フェーズ１の共通暗号鍵の値は更新されていく。
【００９１】
端末装置１では、認証処理部４３が、ＩＣカード５から、シードＲ１（ｎ−１）、シードＱ１（ｎ−１）、共通暗号鍵Ｋ１（ｎ−１）を読み込み、ＲＡＭ１３上に保持する（ステップＳ２）。
【００９２】
シードＲ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証についてのフェーズ１クライアント側シードである。シードＱ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証についてのフェーズ１サーバ側シードである。共通暗号鍵Ｋ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証時に、次回認証用のフェーズ１クライアント側シードＲ１（ｎ）をサーバ装置４へ送信する際に、そのＲ１（ｎ）を暗号化するためのフェーズ１共通暗号鍵である。
【００９３】
そして、まず、認証処理部４３は、乱数Ｒを生成し、その乱数Ｒを、次回認証用のフェーズ１クライアント側シードＲ１（ｎ）にセットする（ステップＳ２１）。
【００９４】
そして、認証処理部４３は、今回のワンタイム認証についての、フェーズ１クライアント側ワンタイム認証子Ｃ１（ｎ−１）を生成する（ステップＳ２２）。
【００９５】
ワンタイム認証子Ｃ１（ｎ−１）は、一方向性関数で計算される。この一方向性関数は、２つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数ｈｃである。
【００９６】
ワンタイム認証子Ｃ１（ｎ−１）は、次式に従って計算される。
【００９７】
Ｃ１（ｎ−１）＝ｈｃ（Ｒ１（ｎ−１），Ｑ１（ｎ−１））
【００９８】
ここで、ハッシュ関数ｈｃの第１引数には、Ｒ１（ｎ−１）が使用され、第２引数には、Ｑ１（ｎ−１）が使用される。
【００９９】
また、認証処理部４３は、所定の暗号化方式に従って、共通暗号鍵Ｋ１（ｎ−１）で、Ｒ１（ｎ）を暗号化する。なお、共通暗号鍵Ｋ１（ｎ−１）での暗号化後のＲ１（ｎ）を、Ｋ１（ｎ−１）＊Ｒ１（ｎ）と表現する。
【０１００】
そして、認証処理部４３は、通信処理部４２を使用して、ワンタイム認証子Ｃ１（ｎ−１）およびＫ１（ｎ−１）＊Ｒ１（ｎ）をサーバ装置４へ送信する（ステップＳ２３）。このとき、通信処理部４２は、ワンタイム認証子Ｃ１（ｎ−１）およびＫ１（ｎ−１）＊Ｒ１（ｎ）を１つのメッセージとして送信する。
【０１０１】
サーバ装置４では、サーバ側認証処理部８２は、通信処理部８１を使用して、そのメッセージを受信し、そのメッセージからワンタイム認証子Ｃ１（ｎ−１）およびＫ１（ｎ−１）＊Ｒ１（ｎ）を抽出し、受信したワンタイム認証子Ｃ１（ｎ−１）が、保持しているフェーズ１用のクライアント側ワンタイム認証子に一致するか否かを判定する（ステップＳ２４）。
【０１０２】
なお、端末装置１からサーバ装置４へのメッセージのデータフォーマット（ワンタイム認証子のサイズと位置、および暗号化されたシードのサイズと位置）は、フェーズ１とフェーズ２で同一である。
【０１０３】
また、フェーズ１クライアント側ワンタイム認証子とフェーズ２クライアント側ワンタイム認証子は同一のデータフォーマット（つまり、同一データ長）を有し、暗号化後のフェーズ１クライアント側シードと、暗号化後のフェーズ２クライアント側シードとは同一のデータフォーマット（つまり、同一データ長）を有するため、受信データのみからでは、フェーズ１のワンタイム認証子かフェーズ２のワンタイム認証子かの区別がつかない。このため、サーバ側認証処理部８２は、受信したワンタイム認証子が、フェーズ１テーブル７２ａに保持されているワンタイム認証子に一致するか否か、および受信したワンタイム認証子が、フェーズ２テーブル７２ｂに保持されているワンタイム認証子に一致するか否かを判定し、受信したワンタイム認証子が、フェーズ１の正当なワンタイム認証子、フェーズ２の正当なワンタイム認証子、および不正なワンタイム認証子のいずれかであるかを判定する。
【０１０４】
したがって、受信したワンタイム認証子Ｃ１（ｎ−１）が、不正なワンタイム認証子であると判定した場合、サーバ側認証処理部８２は、認証失敗と判定し、処理を終了する。
【０１０５】
受信したワンタイム認証子Ｃ１（ｎ−１）が、フェーズ１テーブル７２ａに保持しているフェーズ１用のクライアント側ワンタイム認証子に一致した場合、サーバ側認証処理部８２は、認証成功と判定し、まず、乱数Ｑを生成し、その乱数Ｑを、次回認証用フェーズ１サーバ側シードＱ１（ｎ）にセットする（ステップＳ２５）。
【０１０６】
また、サーバ側認証処理部８２は、Ｋ１（ｎ−１）＊Ｒ１（ｎ）を、シードテーブル７１に保持している共通暗号鍵Ｋ１（ｎ−１）で、Ｒ１（ｎ）へ復号する。そして、サーバ側認証処理部８２は、今回（ｎ−１）のワンタイム認証用のフェーズ１サーバ側ワンタイム認証子Ｓ１（ｎ−１）を生成する（ステップＳ２６）。
【０１０７】
ワンタイム認証子Ｓ１（ｎ−１）は、一方向性関数で計算される。この一方向性関数は、２つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数ｈｓである。
【０１０８】
ワンタイム認証子Ｓ１（ｎ−１）は、次式に従って計算される。
【０１０９】
Ｓ１（ｎ−１）＝ｈｓ（Ｒ１（ｎ），Ｑ１（ｎ−１））
【０１１０】
ここで、ハッシュ関数ｈｓの第１引数には、Ｒ１（ｎ）が使用され、第２引数には、Ｑ１（ｎ−１）が使用される。なお、ハッシュ関数ｈｓは、ハッシュ関数ｈｃと同一の関数でもよいし、異なる関数でもよい。
【０１１１】
また、サーバ側認証処理部８２は、所定の暗号化方式に従って、共通暗号鍵Ｋ１（ｎ−１）で、Ｑ１（ｎ）を暗号化する。なお、共通暗号鍵Ｋ１（ｎ−１）での暗号化後のＱ１（ｎ）を、Ｋ１（ｎ−１）＊Ｑ１（ｎ）と表現する。
【０１１２】
そして、サーバ側認証処理部８２は、通信処理部８１を使用して、ワンタイム認証子Ｓ１（ｎ−１）およびＫ１（ｎ−１）＊Ｑ１（ｎ）を端末装置１へ送信する（ステップＳ２７）。このとき、通信処理部８１は、ワンタイム認証子Ｓ１（ｎ−１）およびＫ１（ｎ−１）＊Ｑ１（ｎ）を１つのメッセージとして送信する。
【０１１３】
なお、サーバ装置４から端末装置１へのメッセージのデータフォーマット（ワンタイム認証子のサイズと位置、および暗号化されたシードのサイズと位置）は、フェーズ１とフェーズ２とで同一である。
【０１１４】
また、フェーズ１サーバ側ワンタイム認証子とフェーズ２サーバ側ワンタイム認証子は、同一のデータフォーマット（つまり、同一データ長）を有し、暗号化後のフェーズ１サーバ側シードと暗号化後のフェーズ２サーバ側シードは、同一のデータフォー待つ（つまり、同一データ長）を有するため、受信データのみからでは、フェーズ１のワンタイム認証子か、フェーズ２のワンタイム認証子がの区別がつかない。このため、端末装置１の認証処理部４３は、フェーズフラグＰの値でフェーズを特定し、受信したワンタイム認証子を、特定したフェーズのワンタイム認証子として取り扱う。
【０１１５】
端末装置１では、認証処理部４３は、通信処理部４２を使用して、そのメッセージを受信し、ワンタイム認証子Ｓ１（ｎ−１）およびＫ１（ｎ−１）＊Ｑ１（ｎ）を抽出する。そして、認証処理部４３は、フェーズフラグＰの値に基づいて、受信したワンタイム認証子がフェーズ１のワンタイム認証子であることを特定する（ステップＳ２８）。
【０１１６】
そして、認証処理部４３は、Ｒ１（ｎ）およびＱ１（ｎ−１）に基づいて、上述の式に従って正当なワンタイム認証子Ｓ１（ｎ−１）の値を計算し、受信したワンタイム認証子Ｓ１（ｎ−１）が、計算した値に一致するか否かを判定する（ステップＳ２９）。
【０１１７】
このとき、受信したワンタイム認証子Ｓ１（ｎ−１）が、計算した値に一致しない場合、認証処理部４３は、認証失敗と判定し、処理を終了する。この場合、ＩＣカード５用のシード１０２と共通暗号鍵は更新されず、次回のセッションで使用される。
【０１１８】
受信したワンタイム認証子Ｓ１（ｎ−１）が、計算した値に一致した場合、認証処理部４３は、認証成功と判定し、まず、Ｋ１（ｎ−１）＊Ｑ１（ｎ）を、保持している共通暗号鍵Ｋ１（ｎ−１）で、Ｑ１（ｎ）へ復号し、この値を、次回認証用フェーズ１サーバ側シードにセットする。
【０１１９】
そして、認証処理部４３は、次回認証用フェーズ１共通暗号鍵Ｋ１（ｎ）を次式に従って計算し、フェーズ１共通暗号鍵を更新する（ステップＳ３０）。
【０１２０】
Ｋ１（ｎ）＝ｈｋ（Ｋ１（ｎ−１），Ｒ１（ｎ），Ｑ１（ｎ））
【０１２１】
ここで、ｈｋは、一方向性関数であって、かつハッシュ関数である。
【０１２２】
このようにして、フェーズ１のワンタイム認証に成功した後、認証処理部４３は、ＩＣカード５内のシード１０２および共通暗号鍵を、Ｒ１（ｎ）およびＱ１（ｎ）、並びにＫ１（ｎ）で更新する（ステップＳ５）。
【０１２３】
一方、サーバ装置４においても、ワンタイム認証子Ｓ１（ｎ−１）の送信後、サーバ側認証処理部８２は、次回認証用フェーズ１共通暗号鍵Ｋ１（ｎ）を上述の式に従って計算し、フェーズ１共通暗号鍵を更新する（ステップＳ３１）。
【０１２４】
そして、サーバ側認証処理部８２は、フェーズ１のシードＲ１（ｎ），Ｑ１（ｎ）の値を、初期値として、フェーズ２のクライアント側シードＲ２（０）およびサーバ側シードＱ２（０）にセットし（ステップＳ３２）、フェーズ１の共通暗号鍵Ｋ１（ｎ）の値を、初期値として、フェーズ２の共通暗号鍵Ｋ２（０）にセットする（ステップＳ３３）。また、このとき、サーバ側認証処理部８２は、Ｒ２（０）およびＱ２（０）から後述の式に従って、フェーズ２の初回のクライアント側ワンタイム認証子Ｃ２（０）を計算し、フェーズ２テーブル７２ｂに書き込んで保持する。
【０１２５】
さらに、サーバ側認証処理部８２は、フェーズ１の次回のワンタイム認証時に使用するクライアント側ワンタイム認証子Ｃ１（ｎ）を、Ｒ１（ｎ）およびＱ１（ｎ）から、上述の式に従って計算する。そして、サーバ側認証処理部８２は、Ｒ１（ｎ）、Ｑ１（ｎ）およびＫ１（ｎ）で、シードテーブル７１における、ＩＣカード５についてのフェーズ１のデータを更新し、Ｃ１（ｎ）で、フェーズ１テーブル７２ａにおける、ＩＣカード５についてのワンタイム認証子を更新する。これにより、これらの値が、次回のセッション（つまり、次回のフェーズ１認証）まで保持される。
【０１２６】
このようにして、フェーズ１でのワンタイム認証が実行される。
【０１２７】
次に、ここで、フェーズ２でのワンタイム認証（ステップＳ７ａ）の詳細について説明する。図９は、図７におけるフェーズ２での初回のワンタイム認証（ステップＳ７ａ）の詳細について説明するシーケンス図である。図１０は、図７におけるフェーズ２での２回目以降のワンタイム認証（ステップＳ７）の詳細について説明するシーケンス図である。
【０１２８】
フェーズ２でのワンタイム認証では、初回のみ、シードおよび共通暗号鍵の初期値がフェーズ１でのシードおよび共通暗号鍵から導出される（図９におけるステップＳ４１，Ｓ４２）。
【０１２９】
初回のみ、端末装置１の認証処理部４３は、まず、フェーズ１のシードＲ１（ｎ），Ｑ１（ｎ）の値を、初期値として、フェーズ２のクライアント側シードＲ２（０）およびサーバ側シードＱ２（０）にセットし（ステップＳ４１）、フェーズ１の共通暗号鍵Ｋ１（ｎ）の値を、初期値として、フェーズ２の共通暗号鍵Ｋ２（０）にセットする（ステップＳ４２）。なお、フェーズ２のクライアント側シードＲ１、サーバ側シードＱ２、および共通暗号鍵Ｋ２は、ＲＡＭ１３に保持され、ＩＣカード５や記憶装置１５には保持されない。この時点で、認証処理部４３は、フェーズ１のシードＲ１（ｎ），Ｑ１（ｎ）および共通暗号鍵Ｋ１（ｎ）をＲＡＭ１３から消去する。以後、フェーズ２のシードＲ２（０），Ｑ２（０）および共通暗号鍵Ｋ２（０）が更新されると、次回使用されるフェーズ１のシードおよび共通暗号鍵の値は、端末装置１から完全に消える。
【０１３０】
そして、認証処理部４３は、乱数Ｒを生成し、次回認証用フェーズ２クライアント側シードＲ２（ｎ）（初回の場合、ｎ＝１）にセットする（ステップＳ４３）。
【０１３１】
次に、認証処理部４３は、今回のワンタイム認証についての、フェーズ２クライアント側ワンタイム認証子Ｃ２（ｎ−１）を生成する（ステップＳ４４）。
【０１３２】
ワンタイム認証子Ｃ２（ｎ−１）は、一方向性関数で計算される。この一方向性関数は、２つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、上述のハッシュ関数ｈｃである。
【０１３３】
ワンタイム認証子Ｃ２（ｎ−１）は、次式に従って計算される。
【０１３４】
Ｃ２（ｎ−１）＝ｈｃ（Ｑ２（ｎ−１），Ｒ２（ｎ−１））
【０１３５】
ここで、ハッシュ関数ｈｃの第１引数には、Ｑ２（ｎ−１）が使用され、第２引数には、Ｒ２（ｎ−１）が使用される。
【０１３６】
また、認証処理部４３は、所定の暗号化方式に従って、共通暗号鍵Ｋ２（ｎ−１）で、Ｒ２（ｎ）を暗号化する。なお、共通暗号鍵Ｋ２（ｎ−１）での暗号化後のＲ２（ｎ）を、Ｋ２（ｎ−１）＊Ｒ２（ｎ）と表現する。
【０１３７】
そして、認証処理部４３は、通信処理部４２を使用して、ワンタイム認証子Ｃ２（ｎ−１）およびＫ２（ｎ−１）＊Ｒ２（ｎ）をサーバ装置４へ送信する（ステップＳ４５）。このとき、通信処理部４２は、ワンタイム認証子Ｃ２（ｎ−１）およびＫ２（ｎ−１）＊Ｒ２（ｎ）を１つのメッセージとして送信する。
【０１３８】
サーバ装置４では、サーバ側認証処理部８２は、通信処理部８１を使用して、そのメッセージを受信し、ワンタイム認証子Ｃ２（ｎ−１）およびＫ２（ｎ−１）＊Ｒ２（ｎ）を抽出し、受信したワンタイム認証子Ｃ２（ｎ−１）が、フェーズ２テーブル７２ｂに保持しているフェーズ２用のクライアント側ワンタイム認証子に一致するか否かを判定する（ステップＳ４６）。
【０１３９】
このとき、受信したワンタイム認証子Ｃ２（ｎ−１）が、保持しているフェーズ２用のクライアント側ワンタイム認証子に一致しない場合、サーバ側認証処理部８２は、上述のように、受信したワンタイム認証子Ｃ２（ｎ−１）がフェーズ１のワンタイム認証子でもなければ、認証失敗と判定し、処理を終了する。
【０１４０】
受信したワンタイム認証子Ｃ２（ｎ−１）が、保持しているフェーズ２用のクライアント側ワンタイム認証子に一致した場合、サーバ側認証処理部８２は、認証成功と判定し、まず、乱数Ｑを生成し、その乱数Ｑを、次回認証用フェーズ２サーバ側シードＱ２（ｎ）にセットする（ステップＳ４７）。
【０１４１】
また、サーバ側認証処理部８２は、Ｋ２（ｎ−１）＊Ｒ２（ｎ）を、保持している共通暗号鍵Ｋ２（ｎ−１）で、Ｒ２（ｎ）へ復号する。そして、サーバ側認証処理部８２は、今回（ｎ−１）のワンタイム認証用のフェーズ２サーバ側ワンタイム認証子Ｓ２（ｎ−１）を生成する（ステップＳ４８）。
【０１４２】
ワンタイム認証子Ｓ２（ｎ−１）は、一方向性関数で計算される。この一方向性関数は、２つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、上述のハッシュ関数ｈｓである。
【０１４３】
ワンタイム認証子Ｓ２（ｎ−１）は、次式に従って計算される。
【０１４４】
Ｓ２（ｎ−１）＝ｈｓ（Ｑ２（ｎ−１），Ｒ２（ｎ））
【０１４５】
ここで、ハッシュ関数ｈｓの第１引数には、Ｑ２（ｎ−１）が使用され、第２引数には、Ｒ２（ｎ）が使用される。
【０１４６】
また、サーバ側認証処理部８２は、所定の暗号化方式に従って、共通暗号鍵Ｋ２（ｎ−１）で、Ｑ２（ｎ）を暗号化する。なお、共通暗号鍵Ｋ２（ｎ−１）での暗号化後のＱ２（ｎ）を、Ｋ２（ｎ−１）＊Ｑ２（ｎ）と表現する。
【０１４７】
そして、サーバ側認証処理部８２は、通信処理部８１を使用して、ワンタイム認証子Ｓ２（ｎ−１）およびＫ２（ｎ−１）＊Ｑ２（ｎ）を端末装置１へ送信する（ステップＳ４９）。このとき、通信処理部８１は、ワンタイム認証子Ｓ２（ｎ−１）およびＫ２（ｎ−１）＊Ｑ２（ｎ）を１つのメッセージとして送信する。
【０１４８】
端末装置１では、認証処理部４３は、通信処理部４２を使用して、そのメッセージを受信し、ワンタイム認証子Ｓ２（ｎ−１）およびＫ２（ｎ−１）＊Ｑ２（ｎ）を抽出する。そして、認証処理部４３は、フェーズフラグＰの値に基づいて、受信したワンタイム認証子がフェーズ２のワンタイム認証子であることを特定する（ステップＳ５０）。
【０１４９】
認証処理部４３は、Ｒ２（ｎ）およびＱ２（ｎ−１）に基づいて、上述の式に従って正当なワンタイム認証子Ｓ２（ｎ−１）の値を計算し、受信したワンタイム認証子Ｓ２（ｎ−１）が、計算した値に一致するか否かを判定する（ステップＳ５１）。
【０１５０】
このとき、受信したワンタイム認証子Ｓ２（ｎ−１）が、計算した値に一致しない場合、認証処理部４３は、認証失敗と判定し、処理を終了する。
【０１５１】
受信したワンタイム認証子Ｓ２（ｎ−１）が、計算した値に一致した場合、認証処理部４３は、認証成功と判定し、まず、Ｋ２（ｎ−１）＊Ｑ２（ｎ）を、保持している共通暗号鍵Ｋ２（ｎ−１）で、Ｑ２（ｎ）へ復号し、この値を、次回認証用フェーズ２サーバ側シードにセットする。
【０１５２】
そして、認証処理部４３は、次回認証用フェーズ２共通暗号鍵Ｋ２（ｎ）を次式に従って計算し、フェーズ２共通暗号鍵を更新する（ステップＳ５２）。
【０１５３】
Ｋ２（ｎ）＝ｈｋ（Ｋ２（ｎ−１），Ｒ２（ｎ），Ｑ２（ｎ））
【０１５４】
ここで、ｈｋは、一方向性関数であって、かつハッシュ関数である。
【０１５５】
このようにして、フェーズ２のワンタイム認証に成功した後、認証処理部４３は、ＲＡＭ１３上に、次のフェーズ２のワンタイム認証まで、Ｒ２（ｎ）、Ｑ２（ｎ）、およびＫ２（ｎ）を保持する。
【０１５６】
一方、サーバ装置４においても、ワンタイム認証子Ｓ２（ｎ−１）の送信後、サーバ側認証処理部８２は、次回認証用フェーズ２共通暗号鍵Ｋ２（ｎ）を上述の式に従って計算し、フェーズ２共通暗号鍵を更新する（ステップＳ５３）。
【０１５７】
さらに、サーバ側認証処理部８２は、Ｒ２（ｎ）およびＱ２（ｎ）から後述の式に従って、フェーズ２の次回認証用クライアント側ワンタイム認証子Ｃ２（ｎ）を計算する。そして、サーバ側認証処理部８２は、Ｒ２（ｎ）、Ｑ２（ｎ）およびＫ２（ｎ）で、シードテーブル７１における、ＩＣカード５についてのフェーズ２のデータを更新し、Ｃ２（ｎ）で、フェーズ２テーブル７２ｂにおける、ＩＣカード５についてのワンタイム認証子を更新する。これにより、今回のシードＲ２（ｎ−１），Ｑ２（ｎ−１）および共通暗号鍵Ｋ２（ｎ−１）は消去され、次回のシードＲ２（ｎ），Ｑ２（ｎ）および共通暗号鍵Ｋ２（ｎ）が、次回のフェーズ２認証まで保持される。次回のフェーズ２のワンタイム認証では、上述の初期値の代わりに次回のシードＲ２（ｎ），Ｑ２（ｎ）および共通暗号鍵Ｋ２（ｎ）が使用される。
【０１５８】
このようにして、フェーズ２でのワンタイム認証が実行される。
【０１５９】
以上のように、上記実施の形態１によれば、フェーズ１での認証用のシードとフェーズ２での認証用のシードとを別々に設け、ＩＣカード５に格納されているシード１０２を使用してフェーズ１での認証を実行し、ＩＣカード５に格納されているシード１０２を更新し、その後は、フェーズ２での認証を繰り返し行っていく。このため、フェーズ１での認証が完了すれば、ユーザは、ＩＣカード５を、端末装置１やリーダライタ２から離脱することができる。したがって、セッション開始後短時間で、シード１０２を保持するＩＣカード５を離脱可能とし、ＩＣカード５が離脱しても、その後、継続的にワンタイム認証を繰り返し行うことができる。
【０１６０】
また、上記実施の形態１によれば、フェーズ１とフェーズ２において同一のハッシュ関数ｈｃを使用し、ハッシュ関数ｈｃの引数におけるクライアント側シードとサーバ側シードの順序を、フェーズ１とフェーズ２とで逆にしている。
【０１６１】
これにより、フェーズ１クライアント側ワンタイム認証子およびフェーズ２クライアント側ワンタイム認証子に使用する関数値のデータフォーマットが同一になる。このため、盗聴してもフェーズ１のワンタイム認証子かフェーズ２のワンタイム認証子かがデータフォーマットから判別できない。また、引数の順序を変えているため、フェーズ１のワンタイム認証子とフェーズ２の初回のワンタイム認証子とが一致しない。したがって、耐タンパ性が向上する。
【０１６２】
また、上記実施の形態１によれば、フェーズ１とフェーズ２において同一のハッシュ関数ｈｓを使用し、ハッシュ関数ｈｓの引数におけるクライアント側シードとサーバ側シードの順序を、フェーズ１とフェーズ２とで逆にしている。
【０１６３】
これにより、フェーズ１サーバ側ワンタイム認証子およびフェーズ２サーバ側ワンタイム認証子に使用する関数値のデータフォーマットが同一になる。このため、盗聴してもフェーズ１のワンタイム認証子かフェーズ２のワンタイム認証子かがデータフォーマットから判別できない。また、引数の順序を変えているため、フェーズ１のワンタイム認証子とフェーズ２の初回のワンタイム認証子とが一致しない。したがって、耐タンパ性が向上する。
【０１６４】
また、上記実施の形態１によれば、フェーズ１で使用される共通暗号鍵とフェーズ２で使用される共通暗号鍵とを別々に設け、ＩＣカード５に格納されているフェーズ１共通暗号鍵を使用して暗号化されたシードの送受を行い、フェーズ１での認証が成功すると、ＩＣカード５に格納されているフェーズ１共通暗号鍵を更新し、また、フェーズ２での認証が成功するたびに、フェーズ２共通暗号鍵を更新していく。このため、フェーズ１とフェーズ２と別々に共通暗号鍵が更新されていき、耐タンパ性が向上する。
【０１６５】
実施の形態２．
【０１６６】
本発明の実施の形態２では、実施の形態１におけるサーバ装置４内のデータ構造およびそのデータ構造に沿ったデータ処理の一例について説明する。なお、システムの基本的な構成および動作は、実施の形態１と同様であるので、その説明は省略する。なお、この実施の形態２において、ワンタイム認証子はワンタイムＩＤである。
【０１６７】
まず、データ構造について説明する。
【０１６８】
実施の形態２では、サーバ装置４において、ＩＣカード５と同様の、１または複数のＩＣカードのそれぞれに対して固有の管理番号が割り当てられ、その管理番号に関連付けて、（ａ）次回認証用のフェーズ１クライアント側ワンタイム認証子Ｃ１（ｎ）、（ｂ）次回認証用のフェーズ２クライアント側ワンタイム認証子Ｃ２（ｎ）、（ｃ）フェーズ１についての現時点（ｎ−１）でのシードＲ１（ｎ−１），Ｑ１（ｎ−１）および共通暗号鍵Ｋ１（ｎ−１）並びに次回認証用のシードＲ１（ｎ），Ｑ１（ｎ）および共通暗号鍵Ｋ１（ｎ）、並びに（ｄ）フェーズ２についての現時点（ｎ−１）でのシードＲ２（ｎ−１），Ｑ２（ｎ−１）および共通暗号鍵Ｋ２（ｎ−１）並びに次回認証用のシードＲ２（ｎ），Ｑ２（ｎ）および共通暗号鍵Ｋ２（ｎ）が保持される。
【０１６９】
つまり、フェーズ１テーブル７２ａにおいて、管理番号に関連付けて、（ａ）次回認証用のフェーズ１クライアント側ワンタイム認証子Ｃ１（ｎ）が保持される。また、フェーズ２テーブル７２ｂにおいて、管理番号に関連付けて、（ｂ）次回認証用のフェーズ２クライアント側ワンタイム認証子Ｃ２（ｎ）が保持される。また、シードテーブル７１において、管理番号に関連付けて、（ｃ）フェーズ１についての現時点（ｎ−１）でのシードＲ１（ｎ−１），Ｑ１（ｎ−１）および共通暗号鍵Ｋ１（ｎ−１）並びに次回認証用のシードＲ１（ｎ），Ｑ１（ｎ）および共通暗号鍵Ｋ１（ｎ）、並びに（ｄ）フェーズ２についての現時点（ｎ−１）でのシードＲ２（ｎ−１），Ｑ２（ｎ−１）および共通暗号鍵Ｋ２（ｎ−１）並びに次回認証用のシードＲ２（ｎ），Ｑ２（ｎ）および共通暗号鍵Ｋ２（ｎ）が保持される。
【０１７０】
図１１は、実施の形態２におけるシードテーブル７１の構造の一例を示す図である。図１２は、実施の形態２における認証子テーブル７２の一例を示す図である。図１２（Ａ）は、フェーズ１テーブル７２ａの一例を示し、図１２（Ｂ）は、フェーズ２テーブル７２ｂの一例を示す。
【０１７１】
図１１におけるフェーズ１アドレスは、フェーズ１テーブル７２ａ内で、当該フェーズ１アドレスに関連付けられている管理番号と同一の管理番号を有するレコードの位置を示すデータである。同様に、図１１におけるフェーズ２アドレスは、フェーズ２テーブル７２ｂ内で、当該フェーズ２アドレスに関連付けられている管理番号と同一の管理番号を有するレコードの位置を示すデータである。
【０１７２】
また、図１２において、サーバ側認証処理部８２により、フェーズ１テーブル７２ａ内のレコード（ワンタイム認証子と管理番号の組）は、ワンタイム認証子の値について昇順にソートされる。同様に、フェーズ２テーブル７２ｂ内のレコード（ワンタイム認証子と管理番号の組）は、ワンタイム認証子の値について昇順にソートされる。これにより、ワンタイム認証時に迅速に、クライアントから受信したワンタイム認証子がテーブル７２ａ，７２ｂに登録されているか否かを判定することができる。
【０１７３】
なお、シードテーブル７１、フェーズ１テーブル７２ａ、およびフェーズ２テーブル７２ｂは、予め、所定のユーザ数（ＩＣカード数）のレコードを有しており、レコード内の管理番号以外のフィールドには初期値がセットされる。
【０１７４】
次に、データ処理について説明する。
【０１７５】
図１３および図１４は、実施の形態２におけるサーバ装置４によるデータ処理について説明するフローチャートである。
【０１７６】
サーバ装置４では、サーバ側認証処理部８２は、端末装置１から、ワンタイム認証子Ｃ（フェーズ１またはフェーズ２のワンタイム認証子）を含むメッセージを受信すると、そのワンタイム認証子Ｃがフェーズ１テーブル７２ａに登録されているフェーズ１クライアント側ワンタイム認証子Ｃ１（ｎ−１）のいずれかであるか否かを判定する（ステップＳ１０１）。
【０１７７】
受信したワンタイム認証子Ｃがフェーズ１テーブル７２ａに登録されているフェーズ１クライアント側ワンタイム認証子Ｃ１（ｎ−１）のいずれかである場合、サーバ側認証処理部８２は、フェーズ１テーブル７２ａにおいて、受信したワンタイム認証子Ｃに関連付けられている管理番号を特定する（ステップＳ１０２）。この場合、フェーズ１のワンタイム認証が実行される。
【０１７８】
サーバ側認証処理部８２は、特定した管理番号に関連付けられているＱ１（ｎ−１）およびＫ１（ｎ−１）をシードテーブル７１から読み出す（ステップＳ１０３）。
【０１７９】
そして、サーバ側認証処理部８２は、受信したＫ１（ｎ−１）＊Ｒ１（ｎ）からＲ１（ｎ）を、読み出したＫ１（ｎ−１）で復号し、そのＲ１（ｎ）を、その管理番号に関連付けてシードテーブル７１に書き込む（ステップＳ１０４）。
【０１８０】
次に、サーバ側認証処理部８２は、次回認証用サーバ側シードの生成を行う。まず、サーバ側認証処理部８２は、乱数Ｑを生成し、この乱数Ｑを次回認証用サーバ側シードに使用した場合に、次回認証用のフェーズ１クライアント側ワンタイム認証子が、別のフェーズ１クライアント側ワンタイム認証子およびフェーズ２クライアント側ワンタイム認証子のいずれかに一致するか否かを判定するとともに（ステップＳ１０６）、初回のフェーズ２クライアント側ワンタイム認証子が、別のフェーズ２クライアント側ワンタイム認証子およびフェーズ１クライアント側ワンタイム認証子のいずれかに一致するか否かを判定する（ステップＳ１０７）。つまり、生成した乱数Ｑを使用した場合のクライアント側ワンタイム認証子の一意性（つまり、同値の別のワンタイム認証子が存在しないこと）が確保されるか否かが判定される。
【０１８１】
このとき、サーバ側認証処理部８２は、次式に従って、この乱数Ｑを次回認証用サーバ側シードに使用した場合の次回認証用のフェーズ１クライアント側ワンタイム認証子Ｘ１および初回のフェーズ２クライアント側ワンタイム認証子Ｘ２を計算し、これらのワンタイム認証子Ｘ１，Ｘ２がフェーズ１テーブル７２ａおよびフェーズ２テーブル７２ｂに登録されているか否かを判定する。
【０１８２】
Ｘ１＝ｈｃ（Ｒ１（ｎ），Ｑ）
【０１８３】
Ｘ２＝ｈｃ（Ｑ，Ｒ２（０）），Ｒ２（０）＝Ｒ１（ｎ）
【０１８４】
そして、生成した乱数Ｑで一意性が確保されないと判定した場合、サーバ側認証処理部８２は、一意性が確保されるまで、乱数Ｑを再生成する。
【０１８５】
一方、生成した乱数Ｑでは一意性が確保されると判定した場合、サーバ側認証処理部８２は、乱数Ｑを、次回認証用フェーズ１サーバ側シードＱ１（ｎ）にセットし、そのシードＱ１（ｎ）を、その管理番号に関連付けてシードテーブル７１に書き込む（ステップＳ１０８）。
【０１８６】
そして、サーバ側認証処理部８２は、フェーズ１サーバ側ワンタイム認証子Ｓ１（ｎ−１）および暗号化後の次回認証用フェーズ１サーバ側シードＫ１（ｎ−１）＊Ｑ１（ｎ）を生成し、端末装置１へ送信する（ステップＳ１０９）。
【０１８７】
また、サーバ側認証処理部８２は、ステップＳ１０６での判定時に計算したＸ１を、次回認証用フェーズ１クライアント側ワンタイム識別子Ｃ１（ｎ）とし、そのＣ１（ｎ）で、フェーズ１テーブル７２ａにおいてその管理番号に関連付けられているワンタイム識別子を更新する（ステップＳ１１０）。このとき、サーバ側認証処理部８２は、その管理番号に関連付けられているフェーズ１アドレスをシードテーブル７１から読み出し、そのフェーズ１アドレスで、フェーズ１テーブル７２ａにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム識別子を更新する。
【０１８８】
その後、サーバ側認証処理部８２は、フェーズ１テーブル７２ａ内のレコードを、ワンタイム識別子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル７１においてそのレコードの管理番号に関連付けられているフェーズ１アドレスを更新する（ステップＳ１１１）。
【０１８９】
また、サーバ側認証処理部８２は、ステップＳ１０７での判定時に計算したＸ２を、初回認証用フェーズ２クライアント側ワンタイム識別子Ｃ２（０）とし、そのＣ２（０）で、フェーズ２テーブル７２ｂにおいてその管理番号に関連付けられているワンタイム識別子を更新する（ステップＳ１１２）。このとき、サーバ側認証処理部８２は、その管理番号に関連付けられているフェーズ２アドレスをシードテーブル７１から読み出し、そのフェーズ２アドレスで、フェーズ２テーブル７２ｂにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム識別子を更新する。
【０１９０】
その後、サーバ側認証処理部８２は、フェーズ２テーブル７２ｂ内のレコードを、ワンタイム識別子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル７１においてそのレコードの管理番号に関連付けられているフェーズ２アドレスを更新する（ステップＳ１１３）。
【０１９１】
そして、サーバ側認証処理部８２は、次回認証用のフェーズ１共通暗号鍵Ｋ１（ｎ）を生成し、その管理番号に関連付けてシードテーブル７１に書き込む（ステップＳ１１４）。
【０１９２】
さらに、サーバ側認証処理部８２は、シードテーブル７１において、その管理番号の次回認証用のシードおよび共通暗号鍵Ｒ１（ｎ），Ｑ１（ｎ），Ｋ１（ｎ）で、今回認証用のシードおよび共通暗号鍵Ｒ１（ｎ−１），Ｑ１（ｎ−１），Ｋ１（ｎ−１）を更新する（ステップＳ１１５）。
【０１９３】
このようにして、フェーズ１のワンタイム認証についてのデータ処理が実行される。
【０１９４】
一方、ステップＳ１０１において、受信したワンタイム認証子Ｃがフェーズ１テーブル７２ａに登録されていないと判定した場合、サーバ側認証処理部８２は、受信したワンタイム認証子Ｃが、フェーズ２テーブル７２ｂに登録されているフェーズ２クライアント側ワンタイム認証子Ｃ２（ｎ−１）のいずれかであるか否かを判定する（ステップＳ１２１）。
【０１９５】
受信したワンタイム認証子Ｃがフェーズ２テーブル７２ｂに登録されているフェーズ２クライアント側ワンタイム認証子Ｃ２（ｎ−１）のいずれかである場合、サーバ側認証処理部８２は、フェーズ２テーブル７２ｂにおいて、受信したワンタイム認証子Ｃに関連付けられている管理番号を特定する（ステップＳ１２２）。この場合、フェーズ２のワンタイム認証が実行される。
【０１９６】
サーバ側認証処理部８２は、特定した管理番号に関連付けられているＱ２（ｎ−１）およびＫ２（ｎ−１）をシードテーブル７１から読み出す（ステップＳ１２３）。
【０１９７】
そして、サーバ側認証処理部８２は、受信したＫ２（ｎ−１）＊Ｒ２（ｎ）からＲ２（ｎ）を、読み出したＫ２（ｎ−１）で復号し、そのＲ２（ｎ）を、その管理番号に関連付けてシードテーブル７１に書き込む（ステップＳ１２４）。
【０１９８】
次に、サーバ側認証処理部８２は、次回認証用サーバ側シードの生成を行う。まず、サーバ側認証処理部８２は、乱数Ｑを生成し、この乱数Ｑを次回認証用サーバ側シードに使用した場合に、次回認証用のフェーズ２クライアント側ワンタイム認証子が、別のフェーズ２クライアント側ワンタイム認証子およびフェーズ１クライアント側ワンタイム認証子のいずれかに一致するか否かを判定する（ステップＳ１２６）。つまり、生成した乱数Ｑを使用した場合のクライアント側ワンタイム認証子の一意性（つまり、同値の別のワンタイム認証子が存在しないこと）が確保されるか否かが判定される。
【０１９９】
このとき、サーバ側認証処理部８２は、次式に従って、この乱数Ｑを次回認証用サーバ側シードに使用した場合の次回認証用のフェーズ２クライアント側ワンタイム認証子Ｘ２を計算し、このワンタイム認証子Ｘ２がフェーズ２テーブル７２ｂに登録されているか否かを判定する。
【０２００】
Ｘ２＝ｈｃ（Ｑ，Ｒ２（ｎ））
【０２０１】
そして、生成した乱数Ｑでは一意性が確保されないと判定した場合、サーバ側認証処理部８２は、一意性が確保されるまで、乱数Ｑを再生成する。
【０２０２】
一方、生成した乱数Ｑでは一意性が確保されると判定した場合、サーバ側認証処理部８２は、乱数Ｑを、次回認証用フェーズ２サーバ側シードＱ２（ｎ）にセットし、そのシードＱ２（ｎ）を、その管理番号に関連付けてシードテーブル７１に書き込む（ステップＳ１２７）。
【０２０３】
そして、サーバ側認証処理部８２は、フェーズ２サーバ側ワンタイム認証子Ｓ２（ｎ−１）および暗号化後の次回認証用フェーズ２サーバ側シードＫ２（ｎ−１）＊Ｑ２（ｎ）を生成し、端末装置１へ送信する（ステップＳ１２８）。
【０２０４】
また、サーバ側認証処理部８２は、ステップＳ１２６での判定時に計算したＸ２を、次回認証用フェーズ２クライアント側ワンタイム識別子Ｃ２（ｎ）とし、そのＣ２（ｎ）で、フェーズ２テーブル７２ｂにおいてその管理番号に関連付けられているワンタイム識別子を更新する（ステップＳ１２９）。このとき、サーバ側認証処理部８２は、その管理番号に関連付けられているフェーズ２アドレスをシードテーブル７１から読み出し、そのフェーズ２アドレスで、フェーズ２テーブル７２ｂにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム識別子を更新する。
【０２０５】
その後、サーバ側認証処理部８２は、フェーズ２テーブル７２ｂ内のレコードを、ワンタイム識別子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル７１においてそのレコードの管理番号に関連付けられているフェーズ２アドレスを更新する（ステップＳ１３０）。
【０２０６】
そして、サーバ側認証処理部８２は、次回認証用のフェーズ２共通暗号鍵Ｋ２（ｎ）を生成し、その管理番号に関連付けてシードテーブル７１に書き込む（ステップＳ１３１）。
【０２０７】
さらに、サーバ側認証処理部８２は、シードテーブル７１において、その管理番号の次回認証用のシードおよび共通暗号鍵Ｒ２（ｎ），Ｑ２（ｎ），Ｋ２（ｎ）で、今回認証用のシードおよび共通暗号鍵Ｒ２（ｎ−１），Ｑ２（ｎ−１），Ｋ２（ｎ−１）を更新する（ステップＳ１３２）。
【０２０８】
このようにして、フェーズ２のワンタイム認証についてのデータ処理が実行される。
【０２０９】
以上のように、上記実施の形態２によれば、管理番号で複数のＩＣカードを管理し、ＩＣカードについてそれぞれ独立してワンタイム認証を行うことができる。
【０２１０】
なお、上述の各実施の形態は、本発明の好適な例であるが、本発明は、これらに限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々の変形、変更が可能である。
【０２１１】
例えば、上記実施の形態１，２において、携帯型記憶装置として、ＩＣカード５の代わりに、ＩＣカード機能を有する携帯電話機などといった電子機器を使用してもよい。
【０２１２】
また、上記実施の形態１，２において、リーダライタ２は、端末装置１に内蔵されていてもよい。
【０２１３】
また、上記実施の形態１，２において、携帯型記憶装置は、ＵＳＢメモリのように、リーダライタ２を使用せずに、端末装置１に直接接続できるようなものであってもよい。
【０２１４】
また、上記実施の形態１，２において、フェーズ１のシードおよび共通暗号鍵をそのままフェーズ２のシードおよび共通暗号鍵の初期値としているが、その代わりに、所定の関数（例えば、ハッシュ関数や一方向性関数）で、端末装置１およびサーバ装置４のそれぞれにおいて、フェーズ１のシードおよび共通暗号鍵から、フェーズ２のシードおよび共通暗号鍵の初期値を導出するようにしてもよい。
【０２１５】
また、上記実施の形態１，２において、ワンタイム認証子をワンタイムパスワードとしてもよい。ワンタイム認証子がワンタイムパスワードである場合、クライアント側ワンタイム認証子の一意性についての判定（ステップＳ１０６、Ｓ１０７，Ｓ１２６）は不要であり、また、その場合、端末装置１は、ＩＣカード５からカードＩＤ１０１を読み出し、ワンタイム認証子とともにそのカードＩＤ１０１をサーバ装置４へを送信し、サーバ装置４は、カード属性テーブル７３を参照し、そのカードＩＤ１０１に基づいてＩＣカード５を特定する。
【０２１６】
また、上記実施の形態１，２において、フェーズフラグＰに２をセットするタイミングは、フェーズ１のワンタイム認証終了後であって、フェーズ２の初回のサーバ側ワンタイム認証子Ｓ２（０）を受信する前であれば、どのタイミングでもよい。
【産業上の利用可能性】
【０２１７】
本発明は、例えば、ネットワークサービスにおけるユーザ認証に適用可能である。
【符号の説明】
【０２１８】
１  端末装置（クライアント装置の一例）
３  ネットワーク
４  サーバ装置
５  ＩＣカード（携帯型記憶装置の一例）
１３  ＲＡＭ（メモリの一例）
３１  ワンタイム認証プログラム（クライアントコンピュータプログラムの一例）
４２  通信処理部
４３  認証処理部
１０２  シード
【図１】
0005616156.tif 000002
【図２】
0005616156.tif 000003
【図３】
0005616156.tif 000004
【図４】
0005616156.tif 000005
【図５】
0005616156.tif 000006
【図６】
0005616156.tif 000007
【図７】
0005616156.tif 000008
【図８】
0005616156.tif 000009
【図９】
0005616156.tif 000010
【図１０】
0005616156.tif 000011
【図１１】
0005616156.tif 000012
【図１２】
0005616156.tif 000013
【図１３】
0005616156.tif 000014
【図１４】
0005616156.tif 000015