(57)【要約】【課題】１枚のＩＣカードを、１以上のサービスの認証のために使用することができるようにする。【解決手段】ＩＣカード１のＦｅＲＡＭ１４の認証シード１４１には、１以上のサービスに共通の１組の認証シードと共通暗号鍵が記憶されている。１以上のサービスに共通の１組の認証シードと共通暗号鍵を、認証シード１４１から演算スタック１３１にコピーして、サーバ装置との間のワンタイム相互認証に使用する。認証シード１４１には、ＩＣカード１からサーバ装置に送信されることのない隠蔽固定情報も含まれており、この隠蔽固定情報に基づいてワンタイム認証子を作成するので、クライアントまたはサーバに成りすましをされる恐れがない。【選択図】図４
2018037877.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリとＲＡＭを内蔵したＩＣカードであって、
１以上のサービスに共通の１組の認証シードおよび共通暗号鍵を前記不揮発性メモリに記憶し、
前記１以上のサービスに共通の１組の認証シードおよび共通暗号鍵を、前記不揮発性メモリから前記ＲＡＭ上の演算スタックにコピーして、前記ＲＡＭ上の演算スタックにコピーされた１組の認証シードに基づいてワンタイム認証子を生成し、前記ＩＣカードとサーバ装置との間の相互認証に使用し、前記ＲＡＭ上の演算スタックにコピーされた１組の認証シードに基づいて、前記サーバ装置から受信したワンタイム認証子の正当性を判定することを特徴とするＩＣカード。
【請求項２】
前記認証シードは、前記ＩＣカードから前記サーバ装置へ送信されず、また相互認証後に更新されない隠蔽固定情報を含むことを特徴とする請求項１記載のＩＣカード。
【請求項３】
前記ＩＣカードで送信データを暗号化する際に使用する共通暗号鍵が、前記サーバ装置で送信データを暗号化する際に使用する共通暗号鍵とは別の共通暗号鍵であることを特徴とする請求項１または請求項２記載のＩＣカード。
【請求項４】
ＩＣカード側認証子生成に使用されるＩＣカード側認証シードは、サーバ装置側ワンタイム認証子生成に使用されるＩＣカード側認証シードとは別のシードであることを特徴とする請求項１乃至請求項３記載のＩＣカード。
【請求項５】
前記サーバ装置において生成し、暗号化して送信されたＩＣカード側認証シードを、ＩＣカードが受信して復号してワンタイム認証子の作成に使用することを特徴とする請求項１乃至請求項４記載のＩＣカード。
【請求項６】
前回の認証の終了時に、今回の認証のためのクライアント側ワンタイム認証子を、前記不揮発性メモリに記憶させることを特徴とする請求項１乃至請求項５記載のＩＣカード。
【請求項７】
不揮発性メモリとＲＡＭを内蔵したＩＣカードであって、
１以上のサービス要求識別に対応した１以上の組の認証シードおよび共通暗号鍵を前記不揮発性メモリに記憶し、
特定のサービス要求識別に対応した１組の認証シードおよび共通暗号鍵を、前記不揮発性メモリから前記ＲＡＭ上の演算スタックにコピーして、前記ＲＡＭ上の演算スタックにコピーされた１組の認証シードに基づいてワンタイム認証子を生成し、前記ＩＣカードとサーバ装置との間の相互認証に使用し、前記ＲＡＭ上の演算スタックにコピーされた１組の認証シードに基づいて、前記サーバ装置から受信したワンタイム認証子の正当性を判定することを特徴とするＩＣカード。
【請求項８】
サーバ装置とＩＣカードを備え、
前記サーバ装置およびＩＣカードは、１以上のサービスに共通の１組の認証シードを記憶し、
前記サーバ装置およびＩＣカードは、それぞれ認証シードを生成し、前記認証シードを暗号化して相互に送信し、前記認証シードからワンタイム認証子を生成して送信し、前記サーバ装置により生成された前記認証シードと前記ＩＣカードにより生成された前記認証シードとに基づいて互いにワンタイム認証子についての認証を行い、前記認証に成功するたびに次回認証用シードで前記認証シードを更新して行き保持し、
前記ＩＣカードは、認証シードに基づいてクライアント側ワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記クライアント側ワンタイム認証子および前記サーバ装置から受信したサーバ側ワンタイム認証子についての認証に成功すると、前記次回認証用シードを更新し、
前記サーバ装置は、前記ＩＣカードより受信した前記クライアント側ワンタイム認証子についての認証に成功すると、前記次回認証用シードを更新し、次回の認証時まで保持すること、
を特徴とするワンタイム認証システム。
【請求項９】
ＩＣカードとのワンタイム相互認証に使用されるサーバ装置であって、
前記サーバ装置およびＩＣカードは、１以上のサービスに共通の１組の認証シードを記憶し、
前記サーバ装置およびＩＣカードは、それぞれ認証シードを生成し、前記認証シードを暗号化して相互に送信し、
前記認証シードに基づいてサーバ側ワンタイム認証子を生成して前記ＩＣカードへ送信し、
前記ＩＣカードより受信したクライアント側ワンタイム認証子についての認証に成功すると、次回認証用シードを更新し、次回の認証時まで保持すること、
を特徴とするサーバ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ワンタイム認証子を用いて、サーバ装置の間で認証を行うワンタイム認証用ＩＣカードに関する。
【背景技術】
【０００２】
従来より、クライアントとサーバの間で認証を行うに際し、認証に成功するたびに、乱数などのシードを更新し、次回認証時に、それらのシードからワンタイム認証子を生成し、認証に使用するワンタイム相互認証システムが知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−３４２９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
（１）特許文献１におけるクライアント装置は、端末装置であった。特許文献１でもＩＣカードが使用されているが、それは、携帯型記憶装置として使用されており、クライアント装置として使用されているわけではない。したがって、特許文献１におけるワンタイム相互認証システムでは、クライアント装置として、ＩＣカードとは別に、端末装置が必要であった。
（２）クライアント側認証子とサーバ側認証子の生成に使用されるサーバ側シードが共通である場合には、クライアント側認証子とサーバ側認証子により、クライアント側今回認証用乱数とクライアント側次回認証用乱数を求められる可能性がある。クライアント側次回認証用乱数が求められたならば、共通暗号鍵を導出することが可能となり、次回認証においてクライアントまたはサーバに成りすましをされる恐れがある。
【０００５】
（３）従来は、ＩＣカードの不揮発性メモリに１組の認証シードしか記憶してなかったので、基本的に１つのサービスのための認証しかできなかった。
（４）カードに記憶されている情報を盗み取られ（スキミング）、カードを偽造して使用されることを防止する必要がある。
【０００６】
本発明は、上記の問題に鑑みてなされたものであり、端末装置が不要であり、次回認証時においてクライアントまたはサーバに成りすましをされる恐れが少なく、且つ１枚のカードで１以上のサービスのための認証が可能なＩＣカードを提供することを目的とする。
【課題を解決するための手段】
【０００７】
（１）本発明に係るＩＣカードは、不揮発性メモリとＲＡＭを内蔵したＩＣカードであって、
１以上のサービスに共通の１組の認証シードおよび共通暗号鍵を前記不揮発性メモリに記憶し、
前記１以上のサービスに共通の１組の認証シードおよび共通暗号鍵を、前記不揮発性メモリから前記ＲＡＭ上の演算スタックにコピーして、前記ＲＡＭ上の演算スタックにコピーされた１組の認証シードに基づいてワンタイム認証子を生成し、前記ＩＣカードとサーバ装置との間の相互認証に使用し、前記ＲＡＭ上の演算スタックにコピーされた１組の認証シードに基づいて、前記サーバ装置から受信したワンタイム認証子の正当性を判定することを特徴とする。
【０００８】
（１）の構成によれば、端末装置は不要であり、１枚のＩＣカードを１以上のサービスの認証のために使うことができる。また、認証シードおよび共通暗号鍵は、不揮発性メモリに記憶しているので、スキミングにより盗み取られることがない。
【０００９】
（２）本発明に係るＩＣカードは、前記認証シードが、前記ＩＣカードから前記サーバ装置へ送信されず、また相互認証後に更新されない隠蔽固定情報を含むことを特徴とする。
【００１０】
（２）の構成によれば、ＩＣカードからサーバ装置へ送信されない隠蔽固定情報に基づいてワンタイム認証子が生成されるので、たとえ共通暗号鍵が求められても、クライアントまたはサーバに成りすましをされる恐れがない。
【００１１】
（３）本発明に係るＩＣカードは、前記ＩＣカードで送信データを暗号化する際に使用する共通暗号鍵が、前記サーバ装置で送信データを暗号化する際に使用する共通暗号鍵とは別の共通暗号鍵であることを特徴とする。
【００１２】
（３）の構成によれば、ＩＣカードとサーバ装置とで、別々の暗号鍵により送信データを暗号化するので、セキュリティを強化することができる。
【００１３】
（４）本発明に係るＩＣカードは、ＩＣカード側認証子生成に使用されるＩＣカード側認証シードは、サーバ装置側ワンタイム認証子生成に使用されるＩＣカード側認証シードとは別のシードであることを特徴とする。
【００１４】
（４）の構成によれば、ＩＣカード側認証子生成に使用されるＩＣカード側認証シードとサーバ装置側ワンタイム認証子生成に使用されるＩＣカード側認証シードとの間に重複がないので、第三者にＩＣカード側認証シードを求められ難い。
【００１５】
（５）本発明に係るＩＣカードは、前記サーバ装置において生成し、暗号化して送信されたＩＣカード側認証シードを、ＩＣカードが受信して復号してワンタイム認証子の作成に使用することを特徴とする。
【００１６】
（５）の構成によれば、ＩＣカードのＩＣチップとして、乱数発生の機能を有しないチップを使用することが可能となる。また、悪意のある第三者がＩＣカードをいくら調べても、発生する乱数を予測することが不可能なので、安全性が高まる。  
【００１７】
（６）本発明に係るＩＣカードは、前回の認証の終了時に、今回の認証のためのクライアント側ワンタイム認証子を、前記不揮発性メモリに記憶させることを特徴とする。
【００１８】
（６）の構成によれば、今回の認証処理に要する時間を短くすることができる。
【００１９】
（７）本発明に係るＩＣカードは、不揮発性メモリとＲＡＭを内蔵したＩＣカードであって、
１以上のサービス要求識別に対応した１以上の組の認証シードおよび共通暗号鍵を前記不揮発性メモリに記憶し、
特定のサービス要求識別に対応した１組の認証シードおよび共通暗号鍵を、前記不揮発性メモリから前記ＲＡＭ上の演算スタックにコピーして、前記ＲＡＭ上の演算スタックにコピーされた１組の認証シードに基づいてワンタイム認証子を生成し、前記ＩＣカードとサーバ装置との間の相互認証に使用し、前記ＲＡＭ上の演算スタックにコピーされた１組の認証シードに基づいて、前記サーバ装置から受信したワンタイム認証子の正当性を判定することを特徴とする。  
【００２０】
（７）の構成によれば、端末装置は不要であり、１枚のＩＣカードを、１以上のサービスにおける認証のために使用することができる。
【発明の効果】
【００２１】
本発明によれば、１枚のＩＣカードを１以上のサービスの認証のために使うことができ、クライアントまたはサーバに成りすましをされる恐れがないＩＣカードを提供することが可能となる。また、認証シードおよび共通暗号鍵は、不揮発性メモリに記憶しているので、スキミングにより盗み取られることがない。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施の形態１に係るワンタイム認証システムの構成を示す図である。
【図２】１枚のカードにより１以上のサービスを提供する第１の方法を示す図である。
【図３】１枚のカードにより１以上のサービスを提供する第２の方法を示す図である。
【図４】本発明の実施の形態１に係るＩＣカードの構成を示す図である。
【図５】本発明の実施の形態１に係る認証シードの構成を示す図である。
【図６】本発明の実施の形態１に係る演算スタックの構成を示す図である。
【図７】本発明の実施の形態１に係る論理回路の構成を示す図である。
【図８】本発明の実施の形態１に係る出力メモリの構成を示す図である。
【図９】本発明の実施の形態１に係る入力メモリの構成を示す図である。
【図１０】本発明の実施の形態１に係るサーバ装置の構成を示す図である。
【図１１】本発明の実施の形態１に係るサーバ装置において実現される処理部を示す図である。
【図１２】本発明の実施の形態１において実現されるワンタイム認証における処理について説明するシーケンス図である。
【図１３】本発明の実施の形態１において実現されるワンタイム認証における処理について説明するシーケンス図である。
【図１４】本発明の実施の形態１において実現されるワンタイム認証における処理について説明するシーケンス図である。
【図１５】本発明の実施の形態１におけるシードテーブルの構造の一例を示す図である。
【図１６】本発明の実施の形態１における認証子テーブルの一例を示す図である。
【図１７】本発明の実施の形態１におけるサーバ装置によるデータ処理について説明するフローチャートである。
【図１８】本発明の実施の形態１におけるサーバ装置によるデータ処理について説明するフローチャートである。
【図１９】本発明の実施の形態２における出力メモリの構成を示す図である。
【図２０】本発明の実施の形態２における入力メモリの構成を示す図である。
【図２１】本発明の実施の形態２において実現されるワンタイム認証における処理について説明するシーケンス図である。
【図２２】本発明の実施の形態２において実現されるワンタイム認証における処理について説明するシーケンス図である。
【図２３】本発明の実施の形態２において実現されるワンタイム認証における処理について説明するシーケンス図である。
【図２４】本発明の実施の形態２におけるサーバ装置によるデータ処理について説明するフローチャートである。
【図２５】本発明の実施の形態２におけるサーバ装置によるデータ処理について説明するフローチャートである。
【発明を実施するための形態】
【００２３】
実施の形態１．
図１は、本発明の実施の形態に係るワンタイム認証システムの構成を示す図である。
図１に示すシステムでは、ＩＣカード用リーダライタ２がネットワーク３に接続されている。ネットワーク３には、サーバ装置４も接続されている。ＩＣカード用リーダライタ２は、ディスプレイを備えていてもよい。ＩＣカード１は、リーダライタ２に接近させて、またはリーダライタ２に電気的に接続して使用される。ＩＣカード１は、リーダライタ２を使用して、サーバ装置４との間でデータ通信を行うことができる。
【００２４】
本発明のＩＣカードは、１以上のサービスにおける認証に使用することができる。
１枚のＩＣカードにより１以上のサービスを提供する方法として、次の２通りの方法が考えられる。
第１の方法は、ＩＣカードには1組の認証シードを記憶しておき、どのサービスを利用するかの指定をユーザが行う方法である。
【００２５】
図２に第１の方法の概要を示す。
図２のＩＣカード１は、非接触型を想定している。ＩＣカード１がディスプレイ付きリーダライタ２に接近すると、その接近を検出したリーダライタ２は、パラメータを含まない読出要求の信号をＩＣカード１へ送信する。
【００２６】
リーダライタ２が対応付けられている認証サーバ４が存在し、起動されたＩＣカード１と、認証サーバ４との間でワンタイム認証が開始し実行される。認証サーバ４は、ＩＣカード１の所有者が利用できるサービスを記憶しており、そのサービスの一覧をリーダライタ２のディスプレイに表示する。ユーザは、ディスプレイを見て、利用するサービスを選択する。リーダライタ２は、選択されたサービスのサービスサーバと接続する。
このようにして、ＩＣカードには1組の認証シードを記憶しておき、１以上のサービスを利用することができる。
【００２７】
第２の方法は、ＩＣカード１には１以上の組の認証シードを記憶しておき、どのリーダライタを利用したかに応じて、利用するサービスが決まる方法である。
【００２８】
図３に第２の方法の概要を示す。
図３のＩＣカード１も、非接触型を想定している。図３のリーダライタ２は、サービス毎に存在している。したがって、リーダライタ２は、自分がどのサービスのリーダライタであるのかをサービス要求識別として記憶している。
【００２９】
ＩＣカード１が、ディスプレイ付きリーダライタ２に接近すると、その接近を検出したリーダライタ２は、ＩＣカード１に対して、サービスを特定するサービス要求識別をパラメータとして含む読出要求の信号を送信する。また、リーダライタ２は、認証サーバへもサービス要求識別のデータを送信する。
ＩＣカード１は、自分が記憶している１以上の組の認証シードから、受信したサービス要求識別によって特定される１組の認証シードを読み出し、ワンタイム認証処理に使用する。
【００３０】
ＩＣカードの構成、動作としては、１以上の組の認証シードを記憶する第２の方法の方が複雑であるので、以後の実施例は、第２の方法の１以上の組の認証シードを記憶する構成で説明する。
【００３１】
（１）各装置の構成
図４は、ＩＣカード１の機能ブロック図である。
ＩＣカード１は、半導体装置であるＩＣチップ１０を含んでいる。
ＩＣチップ１０は、制御部１１と、ＲＯＭ１２と、ＲＡＭ１３と、不揮発性メモリの一種であるＦｅＲＡＭ（Ferroelectric Random Access Memory）１４と、外部からの信号を送受するためのアンテナ１７と、受信部である受信回路１５と送信部である送信回路１６と、内部バス１８と、から構成されている。ＦｅＲＡＭ１４は、強誘電体を利用した不揮発性メモリであり、高速アクセスが可能で、高い信頼性を有している。
【００３２】
制御部１１は、乱数を発生させる処理を行ったり、ワンタイム認証子を作成したり、共通暗号鍵を更新したり、データの暗号化、復号を行ったり、各種の判断を行う部分である。制御部１１は、ＣＰＵがプログラムを実行して構成することもできるが、ＣＰＵなしの電子回路で構成することもできる。ここでは、ＣＰＵなしの電子回路で構成することとする。
ＲＯＭ１２には、ＩＣカードに固有のカードＩＤ１２１のように、変更する必要のないデータを格納している。
ＦｅＲＡＭ１４には、ワンタイム認証子を作成するためのシードや共通暗号鍵を保持しておくための認証シード１４１が格納されている。
ＲＡＭ１３には、データを一時的に記憶しておくための演算スタック１３１と、ＩＣカード１への入力データが格納される入力メモリ１３２と、ＩＣカード１からの出力データが格納される出力メモリ１３３が設けられている。
【００３３】
図５は、認証シード１４１の領域に保持されるデータを示している。
【００３４】
認証シード１４１には、１組または複数組の認証シードが格納されているが、図５には、任意のサービス要求識別ｉで特定される認証シードの組の例を示す。  
ＣＲｉ（ｎ−１）は、クライアント側で生成され、クライアント側のワンタイム認証子を作成する時に引数として使用されるクライアント側の第１シードである。
ＣＱｉ（ｎ−１）は、クライアント側で生成され、サーバ側のワンタイム認証子を作成する時に引数として使用される、クライアント側の第２シードである。
ＣＫｉ（ｎ−１）は、クライアント側でデータを暗号化するときの共通暗号鍵である。
ＣＺｉは、クライアント側のワンタイム認証子を作成する時に引数として使用される隠蔽固定情報である。ＣＺｉは、ＩＣカード１とサーバ装置４との間の通信で送受信されることがない。
【００３５】
ＳＲｉ（ｎ−１）は、サーバ側で生成され、サーバ側のワンタイム認証子を作成する時に引数として使用される、サーバ側の第１シードである。
ＳＱｉ（ｎ−１）は、サーバ側で生成され、クライアント側のワンタイム認証子を作成する時に引数として使用される、サーバ側の第２シードである。
ＳＫｉ（ｎ−１）は、サーバ側でデータを暗号化するときの共通暗号鍵である。
ＳＺｉは、サーバ側のワンタイム認証子を作成する時に引数として使用される隠蔽固定情報である。ＳＺｉは、ＩＣカード１とサーバ装置４との間の通信で送受信されることがない。
【００３６】
図６は、演算スタック１３１の領域に設けられる複数のデータスタックを示している。
ＣＲ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証についてのクライアント側の第１シードである。
ＣＱ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証についてのクライアント側の第２シードである。
ＣＫ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証時に、次回認証用のクライアント側のシードＣＲ１（ｎ）およびＣＱ１（ｎ）を暗号化してサーバ装置４へ送信する際のクライアント側暗号鍵である。
ＣＺ１は、クライアント側のワンタイム認証子を作成する時に引数として使用される隠蔽固定情報である。
【００３７】
ＳＲ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証についてのサーバ側の第１シードである。
ＳＱ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証についてのサーバ側の第２シードである。
ＳＫ１（ｎ−１）は、今回（ｎ−１）のワンタイム認証時に、次回認証用のサーバ側シードＳＲ１（ｎ）およびＳＱ１（ｎ）を暗号化してＩＣカード１へ送信する際のサーバ側暗号鍵である。
ＳＺ１は、サーバ側のワンタイム認証子を作成する時に引数として使用される隠蔽固定情報である。
【００３８】
ＣＲ１（ｎ）は、次回（ｎ）のワンタイム認証についてのクライアント側の第１シードである。
ＣＱ１（ｎ）は、次回（ｎ）のワンタイム認証についてのクライアント側の第２シードである。
【００３９】
ｅｘＳは、受信予定サーバＩＤを格納する領域であり、サーバ側から送信されるワンタイム認証子と照合される。
チェックコードＣＨＥＣＫ−Ｓは、サーバから送信される改竄チェックコードＣｈｅｃｋＩＮと照合されるデータが格納される領域である。
【００４０】
図７は、制御部１１内の論理回路を示している。
【００４１】
ＲＡＮＤは、乱数を発生する乱数発生回路である。
ＥＮＣは、暗号化回路である。
ＤＥＣは、復号回路である。
ＣＭＰは、比較回路である。
【００４２】
ハッシュ回路Ｈａｓｈ１は、今回のクライアント側のワンタイム認証子Ｃ１（ｎ−１）を計算するハッシュ回路である。
【００４３】
ハッシュ回路Ｈａｓｈ２は、受信予定サーバＩＤであるｅｘＳを計算するハッシュ回路である。
【００４４】
ハッシュ回路Ｈａｓｈ３は、改竄チェックコードＣｈｅｃｋＯＵＴを計算するハッシュ回路である。
【００４５】
ハッシュ回路Ｈａｓｈ４は、サーバから送信される改竄チェックコードＣｈｅｃｋＩＮと照合されるチェックコードＣＨＥＣＫ−Ｓを計算するハッシュ回路である。
【００４６】
ハッシュ回路Ｈａｓｈ５は、クライアント側の共通暗号鍵ＣＫ１を更新するハッシュ回路である。
【００４７】
ハッシュ回路Ｈａｓｈ６は、サーバ側の共通暗号鍵ＳＫ１を更新するハッシュ回路である。
【００４８】
図８は、ＩＣカード１から出力されるデータを格納する出力メモリ１３３の領域を示している。
【００４９】
領域Ｃ１（ｎ−１）は、今回のクライアント側ワンタイム認証子Ｃ１（ｎ−１）を格納する領域である。
領域ＣＫ１（ｎ−１）＊ＣＲ１（ｎ）は、今回のクライアント側共通暗号鍵ＣＫ１（ｎ−１）で、次回認証用クライアント側第１シードＣＲ１（ｎ）を暗号化したものを格納する領域である。
領域ＣＫ１（ｎ−１）＊ＣＱ１（ｎ）は、今回のクライアント側共通暗号鍵ＣＫ１（ｎ−１）で、次回認証用クライアント側第２シードＣＱ１（ｎ）を暗号化したものを格納する領域である。  
領域ＣｈｅｃｋＯＵＴは、改竄チェックコードＣｈｅｃｋＯＵＴを格納する領域である。
【００５０】
図９は、ＩＣカード１に入力するデータを格納する入力メモリ１３２の領域を示している。
【００５１】
領域Ｓｉ（ｎ−１）は、今回のサーバ側のワンタイム認証子Ｓｉ（ｎ−１）を格納する領域である。
領域ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ）は、今回のサーバ側共通暗号鍵ＳＫｉ（ｎ−１）で、次回認証用サーバ側第１シードＳＲｉ（ｎ）を暗号化したものを格納する領域である。
領域ＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）は、今回のサーバ側共通暗号鍵ＳＫｉ（ｎ−１）で、次回認証用サーバ側第２シードＳＱｉ（ｎ）を暗号化したものを格納する領域である。
領域ＣｈｅｃｋＩＮは、改竄チェックコードＣｈｅｃｋＩＮを格納する領域である。
【００５２】
図１０は、図１におけるサーバ装置４の構成を示す図である。
図１０において、ＣＰＵ５１は、プログラムを実行し、プログラムに記述された処理を実行する演算処理装置である。また、ＲＯＭ５２は、プログラムおよびデータを予め記憶した不揮発性のメモリである。また、ＲＡＭ５３は、プログラムを実行する際にそのプログラムおよびデータを一時的に記憶するメモリである。
【００５３】
また、インタフェース５４は、記憶装置５５を接続可能なインタフェース回路である。記憶装置５５は、インタフェース５４に接続され、図示せぬオペレーティングシステム、ワンタイム認証プログラム６１，認証に使用されるデータなど格納する記憶媒体を有する装置である。記憶装置５５としては、ハードディスクドライブ、ＳＳＤなどが使用される。記憶装置５５には認証に使用されるデータとして、シードテーブル群７１，認証子テーブル群７２，およびＩＣカード属性テーブル７３が保持されている。
【００５４】
シードテーブル群７１には、サービス要求識別毎のシードテーブルが１枚以上格納されている。任意のサービス要求識別ｉに対応するシードテーブルを、シードテーブル７１ｉで表すことにする。シードテーブル７１ｉは、最後の相互認証時に更新された、次回認証用シードおよび次回認証用共通暗号鍵を有する。次回認証用シードおよび次回認証用共通暗号鍵は、１または複数のＩＣカード１のそれぞれについて別々に保持される。
【００５５】
認証子テーブル群７２は、サービス要求識別毎の認証子テーブルが１枚以上格納されている。任意のサービス要求識別ｉに対応する認証子テーブルを、認証子テーブル７２ｉで表すことにする。認証子テーブル７２ｉは、最後の認証時に更新された次回認証用のクライアント側ワンタイム認証子を有する。次回認証用のクライアント側ワンタイム認証子は、１または複数のＩＣカード１のそれぞれについて別々に保持される。  
【００５６】
ＩＣカード属性テーブル７３は、ＩＣカード１のカードＩＤ、およびそのカードＩＤに関連付けられている属性情報（カード所有者情報など）を有するテーブルである。ＩＣカード属性テーブル７３は、ワンタイム認証子がワンタイムパスワードであるときに、ワンタイム認証子とともに受信されるカードＩＤの正当性を判定する際に参照される。
【００５７】
また、インタフェース５６は、通信装置５７を接続可能なインタフェース回路である。通信装置５７は、ネットワークインタフェースカード、モデムなどといったネットワーク３に接続可能な装置である。
【００５８】
ＣＰＵ５１、ＲＯＭ５２、ＲＡＭ５３、およびインタフェース５４，５６は、バスやコントロールチップによって相互にデータ通信可能に接続されている。
【００５９】
図１１は、サーバ装置４によって実現される処理部を示すブロック図である。図１１に示すように、サーバ装置４において、通信処理部８１、およびサーバ側認証処理部８２が実現される。
【００６０】
通信処理部８１は、通信装置５７を使用して、所定の通信プロトコルでＩＣカードとネットワークを介してデータ通信を行う。
【００６１】
サーバ側認証処理部８２は、ＣＰＵ５１でワンタイム認証プログラム６１が実行されることにより実現され、通信処理部８１を使用して、１または複数のＩＣカード１との間でワンタイム認証子に基づく相互認証におけるサーバ側の処理を実行する。
【００６２】
（２）各装置の動作
ＩＣカード１は、認証シード領域１４１に、サービス要求識別毎に、隠蔽固定情報ＣＺｉ，ＳＺｉ、シードＣＲｉ（ｎ−１），ＣＱｉ（ｎ−１），ＳＲｉ（ｎ−１），ＳＱｉ（ｎ−１）、共通暗号鍵ＣＫｉ（ｎ−１），ＳＫｉ（ｎ−１）を保持している。
また、サーバ装置も、サービス要求識別毎に、同一の、隠蔽固定情報ＣＺｉ，ＳＺｉ、シードＣＲｉ（ｎ−１），ＣＱｉ（ｎ−１），ＳＲｉ（ｎ−１），ＳＱｉ（ｎ−１）、共通暗号鍵ＣＫｉ（ｎ−１），ＳＫｉ（ｎ−１）を保持している。
【００６３】
ここで、シードＣＲｉ（ｎ−１），ＣＱｉ（ｎ−１）は、サービス要求識別ｉに対応した今回の相互認証セッションにおけるクライアント側シードであり、シードＣＲｉ（ｎ−１）は、クライアント側のワンタイム認証子作成時に、引数として使用され、シードＣＱｉは、サーバ側のワンタイム認証子作成時に、引数として使用される。
【００６４】
また、シードＳＲｉ（ｎ−１），ＳＱｉ（ｎ−１）は、サービス要求識別ｉに対応した今回の相互認証セッションにおけるサーバ側シードであり、シードＳＲｉ（ｎ−１）は、サーバ側のワンタイム認証子作成時に、引数として使用され、シードＳＱｉ（ｎ−１）は、クライアント側のワンタイム認証子作成時に、引数として使用される。
【００６５】
共通暗号鍵ＣＫｉ（ｎ−１）は、サービス要求識別ｉに対応した今回の相互認証セッションにおいて、次回認証用のクライアント側シードＣＲｉ（ｎ）、ＣＱｉ（ｎ）をＩＣカード１からサーバ装置４へ送信する際に、そのＣＲｉ（ｎ）、ＣＱｉ（ｎ）を暗号化するための共通暗号鍵である。
【００６６】
共通暗号鍵ＳＫｉ（ｎ−１）は、サービス要求識別ｉに対応した今回の相互認証セッションにおいて、次回認証用のサーバ側シードＳＲｉ（ｎ）、ＳＱｉ（ｎ）を、サーバ装置４からＩＣカード１へ送信する際に、そのＳＲｉ（ｎ）、ＳＱｉ（ｎ）を暗号化するための共通暗号鍵である。
【００６７】
シードＣＲｉ（ｎ−１），ＣＱｉ（ｎ−１），ＳＲｉ（ｎ−１），ＳＱｉ（ｎ−１）、および共通暗号鍵ＣＫｉ（ｎ−１），ＳＫｉ（ｎ−１）は、サービス要求識別ｉに対応した相互認証セッションが実行され、相互認証に成功するたびに更新される。
【００６８】
（３）ワンタイム認証子に基づく相互認証
図１２乃至図１４は、図１のシステムにおいて実行される、ワンタイム認証子に基づく相互認証について説明するシーケンス図である。
【００６９】
ステップＳ１おいて、リーダライタ２は、ＩＣカード１の接近を検出する。
【００７０】
ステップＳ２において、リーダライタ２よりの読み出し要求時に、パラメータとして、サービス要求識別がＩＣカード１に与えられる。また、サーバ装置４へもサービス要求識別のデータが送信される。ここでは、サービス要求識別“ｉ”が、ＩＣカード１およびサーバ装置４に与えられたとする。
【００７１】
ステップＳ３において、ＩＣカード１の制御部１１は、与えられたサービス要求識別に対応した隠蔽固定情報、シードおよび共通暗号鍵を、認証シード１４１から演算スタック１３１にコピーする。
与えられたサービス要求識別が“ｉ”なので、認証シード１４１のＣＲｉ（ｎ−１）、ＣＱｉ（ｎ−１）、ＣＫｉ（ｎ−１）、ＣＺｉ、ＳＲｉ（ｎ−１）、ＳＱｉ（ｎ−１）、ＳＫｉ（ｎ−１）、およびＳＺｉを、演算スタック１３１のＣＲ１（ｎ−１）、ＣＱ１（ｎ−１）、ＣＫ１（ｎ−１）、ＣＺ１，ＳＲ１（ｎ−１）、ＳＱ１（ｎ−１）、ＳＫ１（ｎ−１）、ＳＺ１にそれぞれコピーする。
【００７２】
ステップＳ４において、乱数生成回路ＲＡＮＤは、第１乱数ＣＲを生成し、その生成された第１乱数ＣＲを、演算スタック１３１上の次回認証用のクライアント側第１シードＣＲ１（ｎ）にセットする。
また、乱数生成回路ＲＡＮＤは、第２乱数ＣＱを生成し、その生成された第２乱数ＣＱを、演算スタック１３１上の次回認証用のクライアント側第２シードＣＱ１（ｎ）にセットする。
【００７３】
ステップＳ５において、ハッシュ回路Ｈａｓｈ２は、演算スタック１３１に保持しているＳＺ１，ＣＱ１（ｎ−１），ＳＲ１（ｎ−１）を用いて、次式によりｅｘＳを計算して、演算スタック１３１の対応領域に格納する。ｅｘＳは、一方向関数で計算される。この一方向関数ｈａｓｈ２は、３つの引数をとり、引数の順序によって関数値が異なる関数である。
ｅｘＳ＝ｈａｓｈ２｛ＳＺ１，ＳＲ１（ｎ−１），ＣＱ１（ｎ−１）｝
【００７４】
ステップＳ６において、ハッシュ回路Ｈａｓｈ１は、今回のワンタイム認証についてのクライアント側ワンタイム認証子Ｃ１（ｎ−１）を次式に従って計算し、出力メモリ１３３の対応領域へ格納する。Ｃ１（ｎ−１）は、一方向関数で計算される。この一方向関数ｈａｓｈ１は、３つの引数をとり、引数の順序によって関数値が異なる関数である。
Ｃ１（ｎ−１）＝ｈａｓｈ１｛ＣＺ１，ＣＲ１（ｎ−１），ＳＱ１（ｎ−１）｝
【００７５】
ステップＳ７において、暗号化回路ＥＮＣは、次回認証用のクライアント側第１シードＣＲ１（ｎ）を共通暗号鍵ＣＫ１（ｎ−１）で暗号化して、出力メモリ１３３の対応領域へ格納する。なお、共通暗号鍵ＣＫ１（ｎ−１）で暗号化後のＣＲ１（ｎ）を、ＣＫ１（ｎ−１）＊ＣＲ１（ｎ）と表現する。
【００７６】
また、ステップＳ７において、暗号化回路ＥＮＣは、次回認証用のクライアント側第２シードＣＱ１（ｎ）を通暗号鍵ＣＫ１（ｎ−１）で暗号化して、出力メモリの対応領域へ格納する。なお、共通暗号鍵ＣＫ１（ｎ−１）で暗号化後のＣＱ１（ｎ）を、ＣＫ１（ｎ−１）＊ＣＱ１（ｎ）と表現する。
【００７７】
ステップＳ８において、ハッシュ回路Ｈａｓｈ３は、改竄チェックコードＣｈｅｃｋＯＵＴを次式に従って計算し、出力メモリ１３３の対応領域へ格納する。改竄チェックコードＣｈｅｃｋＯＵＴは、一方向関数で計算される。この一方向関数ｈａｓｈ３は、４つの引数をとり、引数の順序によって関数値が異なる関数である。
ＣｈｅｃｋＯＵＴ＝ｈａｓｈ３｛ＣＫ１（ｎ−１），Ｃ１（ｎ−１）、ＣＫ１（ｎ−１）＊ＣＲ１（ｎ），ＣＫ１（ｎ−１）＊ＣＱ１（ｎ）｝
【００７８】
ステップＳ９において、ＩＣカード１からサーバ装置４へ、Ｃ１（ｎ−１），ＣＫ１（ｎ−１）＊ＣＲ１（ｎ），ＣＫ１（ｎ−１）＊ＣＱ１（ｎ），およびＣｈｅｃｋＯＵＴを送信する。
【００７９】
ステップＳ１０以降においては、サーバ側のサーバ側認証処理部８２は、ステップＳ２で受信したサービ要求識別に対応したシードテーブルおよび認証子テーブルを使用する
【００８０】
ステップＳ１０において、サーバ側のサーバ側認証処理部８２は、受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）が、保持しているサービ要求識別ｉに対応したクライアント側ワンタイム認証子Ｃｉ（ｎ−１）に一致するか判定する。
【００８１】
受信したワンタイム認証子Ｃ１（ｎ−１）が、不正なワンタイム認証子であると判定した場合、サーバ側認証処理部８２は、認証失敗と判定し、認証に失敗した旨をＩＣカード１およびリーダライタ２に通知し、処理を終了する。受信したワンタイム認証子Ｃ１（ｎ−１）が、認証子テーブル７２ｉに保持されているワンタイム認証子に一致した場合、サーバ側の認証処理部は、ステップＳ１１に移る。
【００８２】
ステップＳ１１において、サーバ側のサーバ側認証処理部８２は、保持しているクライアント側共通暗号鍵ＣＫｉ（ｎ−１）、並びに受信したＣ１（ｎ−１），ＣＫ１（ｎ−１）＊ＣＲ１（ｎ），およびＣＫ１（ｎ−１）＊ＣＱ１（ｎ）を用いて、次式によりチェックコードＣＨＥＣＫ−Ｃを計算する。チェックコードＣＨＥＣＫ−Ｃは、一方向関数で計算される。この一方向関数は、４つの引数をとり、引数の順序によって関数値が異なる関数である。
ＣＨＥＣＫ−Ｃ＝ｈａｓｈ３｛ＣＫｉ（ｎ−１），Ｃ１（ｎ−１），ＣＫ１（ｎ−１）＊ＣＲ１（ｎ），ＣＫ１（ｎ−１）＊ＣＱ１（ｎ）｝
【００８３】
ステップＳ１２において、サーバ側のサーバ側認証処理部８２は、受信したＣｈｅｃｋＯＵＴとステップＳ１１で作成したチェックコードＣＨＥＣＫ−Ｃとを比較する。
受信したＣｈｅｃｋＯＵＴが、チェックコードＣＨＥＣＫ−Ｃに一致しない場合、サーバ側認証処理部８２は、認証失敗と判定し、認証に失敗した旨をＩＣカード１およびリーダライタ２に通知し、処理を終了する。受信したＣｈｅｃｋＯＵＴが、チェックコードＣＨＥＣＫ−Ｃに一致した場合、ステップＳ１３に移る。
【００８４】
ステップＳ１３において、サーバ側のサーバ側認証処理部８２は、ＣＫ１（ｎ−１）＊ＣＲ１（ｎ）を復号して、次回認証クライアント側第１シードＣＲｉ（ｎ）を得る。
また、ステップＳ１３において、サーバ側のサーバ側認証処理部８２は、ＣＫ１（ｎ−１）＊ＣＱ１（ｎ）を復号して、次回認証クライアント側第２シードＣＱｉ（ｎ）を得る。
【００８５】
ステップＳ１４において、サーバ側のサーバ側認証処理部８２は、第１乱数ＳＲを生成し、その乱数ＳＲを、次回認証サーバ側第１シードＳＲｉ（ｎ）とする。
また、サーバ側のサーバ側認証処理部８２は、第２乱数ＳＱを生成し、その乱数ＳＱを、次回認証サーバ側第２シードＳＱｉ（ｎ）とする。
【００８６】
サーバ側認証処理部８２における乱数生成方法としては、関数により作成される疑似乱数列を用いる方法、原子核の崩壊や抵抗体の熱雑音といったランダムな自然現象を利用して作成される自然乱数を利用する方法の他に、別途作成された自然乱数を格納した乱数ファイルから、乱数を読み出す方法であっても良い。
【００８７】
ステップＳ１５において、サーバ側のサーバ側認証処理部８２は、次式に従って、今回のワンタイム認証についての、サーバ側ワンタイム認証子Ｓｉ（ｎ−１）を作成する。
Ｓｉ（ｎ−１）＝ｈａｓｈ２｛ＳＺｉ，ＳＲｉ（ｎ−１），ＣＱｉ（ｎ−１）｝
【００８８】
ステップＳ１６において、サーバ側のサーバ側認証処理部８２は、共通暗号鍵ＳＫｉ（ｎ−１）で次回認証サーバ側第１シードＳＲｉ（ｎ）を暗号化する。なお、共通暗号鍵ＳＫｉ（ｎ−１）で暗号化後のＳＲｉ（ｎ）を、ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ）と表現する。  
また、ステップＳ１６において、サーバ側のサーバ側認証処理部８２は、共通暗号鍵ＳＫｉ（ｎ−１）で次回認証サーバ側第２シードＳＱｉ（ｎ）を暗号化する。なお、共通暗号鍵ＳＫｉ（ｎ−１）で暗号化後のＳＱｉ（ｎ）を、ＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）と表現する。  
【００８９】
ステップＳ１７において、サーバ側のサーバ側認証処理部８２は、次式に従って、改竄チェックコードＣｈｅｃｋＩＮを作成する。
ＣｈｅｃｋＩＮ＝ｈａｓｈ４｛ＳＫｉ（ｎ−１），Ｓｉ（ｎ−１），ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）｝
【００９０】
ステップＳ１８において、サーバ装置４からＩＣカード１へ、Ｓｉ（ｎ−１）、ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）、およびＣｈｅｃｋＩＮを送信する。
【００９１】
ステップＳ１９において、比較回路ＣＭＰは、ｅｘＳとサーバ側から受信したＳｉ（ｎ−１）とを比較する。一致しない場合は、認証失敗と判定し、サーバエラーとしてリーダライタ２へ通知した後、処理を終了する。一致した場合は、ステップＳ２０に移る。
【００９２】
ステップＳ２０において、ハッシュ回路Ｈａｓｈ４は、演算スタック１３１に格納されているＳＫ１（ｎ−１）と、サーバ側から受信したＳｉ（ｎ−１），ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），およびＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）を用いて、次式によりチェックコードＣＨＥＣＫ−Ｓを計算する。
ＣＨＥＣＫ−Ｓ＝ｈａｓｈ４｛ＳＫ１（ｎ−１），Ｓｉ（ｎ−１），ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）｝
【００９３】
ステップＳ２１において、比較回路ＣＭＰは、受信したＣｈｅｃｋＩＮとステップ２２で作成したチェックコードＣＨＥＣＫ−Ｓとを比較する。一致しない場合は、認証失敗と判定し、サーバエラーとしてリーダライタ２へ通知した後、処理を終了する。一致した場合は、ステップＳ２２に移る。
【００９４】
ステップＳ２２において、制御部１１は、次回認証用のクライアント側第１シードＣＲ１（ｎ）を認証シード１４１のＣＲｉ（ｎ−１）へ格納する。
また、ステップＳ２２において、制御部１１は、次回認証用のクライアント側第２シードＣＱ１（ｎ）を認証シード１４１のＣＱｉ（ｎ−１）へ格納する。  
【００９５】
ステップＳ２３において、復号回路ＤＥＣは、受信したＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ）を、演算スタック１３１上に保持しているサーバ側共通暗号鍵ＳＫ１（ｎ−１）で、ＳＲｉ（ｎ）へ復号する。復号したＳＲｉ（ｎ）を、認証シード１４１のＳＲｉ（ｎ−１）へ格納する。
また、ステップＳ２３において、復号回路ＤＥＣは、受信したＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）を、演算スタック１３１上に保持しているサーバ側共通暗号鍵ＳＫ１（ｎ−１）で、ＳＱｉ（ｎ）へ復号する。復号したＳＱｉ（ｎ）を、認証シード１４１のＳＱｉ（ｎ−１）へ格納する。  
【００９６】
ステップＳ２４において、ハッシュ回路Ｈａｓｈ５は、クラインアント側の共通暗号鍵ＣＫ１を、次の式で更新する。
ＣＫ１（ｎ）＝ｈａｓｈ５（ＣＲ１（ｎ），ＣＱ１（ｎ），ＣＫ１（ｎ−１））
ステップＳ２４において、ハッシュ回路Ｈａｓｈ６は、サーバ側の共通暗号鍵ＳＫ１を、次の式で更新する。
ＳＫ１（ｎ）＝ｈａｓｈ６（ＳＲ１（ｎ），ＳＱ１（ｎ），ＳＫ１（ｎ−１））
制御部１１は、更新されたＣＫ１（ｎ）、ＳＫ１（ｎ）を、それぞれ、認証シード１４１のＣＫｉ（ｎ−１）、ＳＫｉ（ｎ−１）へ書き込む。
【００９７】
ステップＳ２５において、制御部１１は、リーダライタ２へ完了を通知する。
【００９８】
ステップＳ２６において、サーバ側のサーバ側認証処理部８２は、次回のワンタイム認証時に使用するクライアント側ワンタイム認証子Ｃｉ（ｎ）を次式に従って計算し、次回の相互認証まで認証子テーブル７２ｉに保持する。
Ｃｉ（ｎ）＝ｈａｓｈ１｛ＣＺｉ，ＣＲｉ（ｎ），ＳＱｉ（ｎ）｝
【００９９】
ステップＳ２７において、サーバ側認証処理部８２は、ＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ）、ＳＱｉ（ｎ）でシードテーブル７１ｉにおけるデータを更新し、Ｃｉ（ｎ）で認証子テーブル７２ｉにおけるクライアント側ワンタイム認証子を更新する。
【０１００】
ステップＳ２８において、サーバ側のサーバ側認証処理部８２は、クライアント側の共通暗号鍵ＣＫｉを、次のハッシュ関数を用いて更新する。
ＣＫｉ（ｎ）＝ｈａｓｈ５｛ＣＲｉ（ｎ），ＣＱｉ（ｎ），ＣＫｉ（ｎ−１）｝
また、ステップＳ２８において、サーバ側のサーバ側認証処理部８２は、サーバ側の共通暗号鍵ＳＫｉを、次のハッシュ関数を用いて更新する。
ＳＫｉ（ｎ）＝ｈａｓｈ６｛ＳＲｉ（ｎ），ＳＱｉ（ｎ），ＳＫｉ（ｎ−１）｝
【０１０１】
ステップＳ２９において、サーバ側のサーバ側認証処理部８２は、シードテーブル７１において、その管理番号の次回認証用のシードおよび共通暗号鍵ＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＣＫｉ（ｎ）、ＳＲｉ（ｎ）、ＳＱｉ（ｎ）、ＳＫｉ（ｎ）で、今回認証用のシードおよび共通暗号鍵ＣＲｉ（ｎ−１）、ＣＱｉ（ｎ−１）、ＣＫｉ（ｎ−１）、ＳＲｉ（ｎ−１）、ＳＱｉ（ｎ−１）、ＳＫｉ（ｎ−１）を更新する。
【０１０２】
このように構成することにより、１枚のＩＣカードで１以上のサービスの認証に対応でき、ワンタイム認証子Ｃ１（ｎ）やＳｉ（ｎ）を作成するハッシュ関数の引数に、ＩＣカード１とサーバ装置４間で通信されない隠蔽固定情報ＣＺ１やＳＺｉが入っているので、たとえ共通暗号鍵やシードが解読されても成りすましをされることがない。
【０１０３】
次に、シードテーブル７１ｉと認証子テーブル７２ｉの構造の詳細について説明し、その後、ステップＳ１０とステップＳ１４とステップＳ２７の詳細について説明する。
【０１０４】
まず、データ構造について説明する。
サーバ装置４において、サービス要求識別毎に、シードテーブル７１ｉおよび認証子テーブル７２ｉが管理されている。
【０１０５】
サービス要求識別ｉに対応した認証子テーブル７２ｉでは、ＩＣカード１と同様の、１または複数のＩＣカードのそれぞれに対して、固有の管理番号（ＩＣカードＩＤ）が割り当てられ、その管理番号に関連付けて、次回認証用クライアント側ワンタイム認証子Ｃｉ（ｎ−１）が保持される。
【０１０６】
サービス要求識別ｉに対応したシードテーブル７１ｉでは、管理番号に関連付けて、隠蔽固定情報ＣＺｉ、ＳＺｉ、現時点（ｎ−１）のシードＣＲｉ（ｎ−１）、ＣＱｉ（ｎ−１）、ＳＲｉ（ｎ−１）、ＳＱｉ（ｎ−１）および共通暗号鍵ＣＫｉ（ｎ−１）、ＳＫｉ（ｎ−１）並びに次回認証用のシードＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ）、ＳＱｉ（ｎ）および共通暗号鍵ＣＫｉ（ｎ）、ＳＫｉ（ｎ）が保持される。
【０１０７】
図１５は、シードテーブル７１ｉの構造の一例を示す図である。図１６は、認証子テーブル７２ｉの構造の一例を示す図である。
【０１０８】
図１５における認証アドレスは、認証子テーブル７２ｉ内で、当該認証アドレスに関連付けられている管理番号と同一の管理番号を有するレコードの位置を示すデータである。
【０１０９】
また、図１６において、サーバ側認証処理部８２により、認証子テーブル７２ｉ内のレコード（ワンタイム認証子と管理番号の組）は、ワンタイム認証子の値について昇順にソートされる。これにより、ワンタイム認証時に迅速に、クライアントから受信したワンタイム認証子が認証子テーブル７２ｉに登録されているか否かを判定することができる。
【０１１０】
なお、シードテーブル７１ｉ、認証子テーブル７２ｉは、予め、所定数（つまり、ＩＣカードの数）のレコードを有しており、レコード内の管理番号以外のフィールドには初期値がセットされる。
【０１１１】
次に、ステップＳ１０の詳細について説明する。
ステップＳ１０では、サーバ側認証処理部８２は、ＩＣカード１から受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）が、認証子テーブル７２ｉに登録されているクライアント側ワンタイム認証子のいずれかであるか否かを判定する。
受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）が、認証子テーブル７２ｉに登録されているクライアント側ワンタイム認証子のいずれかである場合、認証成功であり、サーバ側認証処理部８２は、認証子テーブル７２ｉにおいて、受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）に関連付けられている管理番号を特定する。
そして、サーバ側認証処理部８２は、特定された管理番号に対応するシードテーブル７１ｉ中のレコードを用いて以後の処理を進める。
【０１１２】
また、受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）が、認証子テーブル７２ｉに登録されているクライアント側ワンタイム認証子のいずれかでない場合、認証失敗となる。
【０１１３】
次に、ステップＳ１４の詳細について説明する。
図１７は、ステップＳ１４の詳細を説明するフローチャートである。
【０１１４】
ステップＳ１０１において、サーバ装置４では、サーバ側認証処理部８２は、乱数ＳＲを生成し、次回認証用サーバ側シードＳＲｉ（ｎ）にセットする。
【０１１５】
ステップＳ１０２において、サーバ側認証処理部８２は、乱数ＳＱを作成する。
【０１１６】
ステップＳ１０３において、この乱数ＳＱを次回認証用サーバ側シードに使用した場合に、次回認証用クライアント側ワンタイム認証子が、別のＩＣカードのクライアント側ワンタイム認証子に一致するか否かを判定する。つまり、生成した乱数ＳＱを使用した場合のクライアント側ワンタイム認証子の一意性（つまり、同じ値のクライアント側ワンタイム認証子が存在しないこと）が確保されるか否かが判定される。
この時、サーバ側認証処理部８２は、次式に従って、この乱数ＳＱを次回認証用サーバ側シードに使用した場合の、次回認証用クライアント側認証子Ｘ１を計算し、このワンタイム認証子が、認証子テーブル７２ｉに登録されているか否かを判定する。
Ｘ１＝ｈａｓｈ１｛ＣＺｉ，ＣＲｉ（ｎ），ＳＱ｝
【０１１７】
そして、生成した乱数ＳＱで一意性が確保されないと判定した場合、サーバ側認証処理部８２は、一意性が確保されるまで、乱数ＳＱを再生成する。一方、生成した乱数ＳＱで一意性が確保されると判定した場合、ステップＳ１０４へ移る。
【０１１８】
ステップＳ１０４において、サーバ側認証処理部８２は、乱数ＳＱを、次回認証用サーバ側シードＳＱｉ（ｎ）にセットする。
【０１１９】
次に、ステップＳ２７の詳細について説明する。
図１８は、ステップＳ２７の詳細を説明するフローチャートである。
【０１２０】
ステップＳ１０５において、サーバ側認証処理部８２は、シードテーブル７１ｉに、その管理番号の次回認証用のシードＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ）、ＳＱｉ（ｎ）を書き込む。
【０１２１】
ステップＳ１０６において、ステップＳ１０３での判定時に計算したＸ１を、次回認証用クライアント側ワンタイム認証子Ｃｉ（ｎ）とし、そのＣｉ（ｎ）で、認証子テーブル７２ｉにおいて、その管理番号に関連付けられているワンタイム認証子を更新する。
すなわち、サーバ側認証処理部８２は、その管理番号に関連付けられている認証アドレスをシードテーブル７１ｉから読み出し、その通常認証アドレスで、認証子テーブル７２ｉにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム認証子を更新する。
【０１２２】
ステップＳ１０７において、サーバ側認証処理部８２は、認証子テーブル７２ｉ内のレコードをワンタイム認証子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル７１ｉにおいてそのレコードの管理番号に関連付けられている認証アドレスを更新する。
【０１２３】
［実施の形態1の変形例］
サービス要求識別ｉについての今回のクライアント側ワンタイム認証子は、次式で得られる。
Ｃｉ（ｎ−１）＝ｈａｓｈ１｛ＣＺｉ，ＣＲｉ（ｎ−１）、ＳＱｉ（ｎ−１）｝
【０１２４】
３つの引数の内、ＣＺｉは、隠蔽固定情報であり、ＣＲｉ（ｎ−１）とＳＱｉ（ｎ−１
）は、前回のワンタイム認証の終了時に認証シード１４１に書き込まれた値であるから、Ｃｉ（ｎ−１）は、前回のワンタイム認証の終了時に決まっている値である。したがって、前回のワンタイム認証の終了時に、今回のクライアント側ワンタイム認証子Ｃｉ（ｎ−１）の値を求めて認証シード１４１に書き込んでおくように、実施の形態1を変形することが可能である。この変形例によれば、今回の認証処理の冒頭のステップＳ５において、ハッシュ回路を使ってクライアント側ワンタイム認証子を計算するステップを省くことができるから、今回の認証に要する時間を短縮することができる。
【０１２５】
なお、１枚のＩＣカードにより１以上のサービスを提供する第１の方法の場合は、ＩＣカード１には１組の認証シードしか記憶されていないので、ＩＣカード１は、その認証シードを使用してワンタイム認証を行うだけである。
【０１２６】
実施の形態２．
実施の形態１においては、ＩＣチップ１０において、電子回路によってＲＡＮＤ回路が形成されているという前提で説明した。しかし、ＩＣチップ１０によっては、ＲＡＮＤ回路が形成されていない場合もある。
実施の形態２では、ＩＣチップ１０において、電子回路によってＲＡＮＤ回路が形成されていない場合について、説明する。
【０１２７】
実施の形態２では、本来、クライアント側で生成する乱数ＣＲ、ＣＱについても、サーバ装置４で生成するように構成する。
【０１２８】
図１９に出力メモリ１３３の構成の一例を示す。実施の形態２では、次回の認証シードＣＲｉ（ｎ）、ＣＱｉ（ｎ）についても、サーバ装置４側で生成し、サーバ装置側の共通暗号鍵で暗号化してＩＣカード１へ送信するので、出力メモリ１３３は、ＣＫ１（ｎ−１）＊ＣＲ１（ｎ）およびＣＫ１（ｎ−１）＊ＣＱ１（ｎ）の領域を有していない。
【０１２９】
図２０に入力メモリ１３２の構成の一例を示す。実施の形態２では、実施の形態１と比較して、入力メモリ１３２は、ＳＫｉ（ｎ−１）＊ＣＲｉ（ｎ）およびＳＫｉ（ｎ−１）＊ＣＱｉ（ｎ）の領域が増えている。
【０１３０】
図２１乃至図２３は、図１のシステムにおいて実行される、実施の形態２のワンタイム認証子に基づく相互認証について説明するシーケンス図である。
【０１３１】
ステップＳ２０１おいて、リーダライタ２は、ＩＣカード１の接近を検出する。
【０１３２】
ステップＳ２０２において、リーダライタ２よりの読み出し要求時に、パラメータとして、サービス要求識別がＩＣカード１に与えられる。また、サーバ装置４へもサービス要求識別のデータが送信される。ここでは、サービス要求識別“ｉ”が、ＩＣカード１およびサーバ装置４に与えられたとする。
【０１３３】
ステップＳ２０３において、ＩＣカード１の制御部１１は、与えられたサービス要求識別に対応した隠蔽固定情報、シードおよび共通暗号鍵を、認証シード１４１から演算スタック１３１にコピーする。
与えられたサービス要求識別が“ｉ”であるので、認証シード１４１のＣＲｉ（ｎ−１）、ＣＱｉ（ｎ−１）、ＣＫｉ（ｎ−１）、ＣＺｉ、ＳＲｉ（ｎ−１）、ＳＱｉ（ｎ−１）、ＳＫｉ（ｎ−１）、およびＳＺｉを、演算スタック１３１のＣＲ１（ｎ−１）、ＣＱ１（ｎ−１）、ＣＫ１（ｎ−１）、ＣＺ１，ＳＲ１（ｎ−１）、ＳＱ１（ｎ−１）、ＳＫ１（ｎ−１）、ＳＺ１にそれぞれコピーする。
【０１３４】
ステップＳ２０４において、ハッシュ回路Ｈａｓｈ２は、演算スタック１３１に保持しているＳＺ１，ＣＱ１（ｎ−１），ＳＲ１（ｎ−１）を用いて、次式によりｅｘＳを計算して、演算スタック１３１の対応領域に格納する。ｅｘＳは、一方向関数で計算される。この一方向関数ｈａｓｈ２は、３つの引数をとり、引数の順序によって関数値が異なる関数である。
ｅｘＳ＝ｈａｓｈ２｛ＳＺ１，ＳＲ１（ｎ−１），ＣＱ１（ｎ−１）｝
【０１３５】
ステップＳ２０５において、ハッシュ回路Ｈａｓｈ１は、今回のワンタイム認証についてのクライアント側ワンタイム認証子Ｃ１（ｎ−１）を次式に従って計算し、出力メモリ１３３の対応領域へ格納する。Ｃ１（ｎ−１）は、一方向関数で計算される。この一方向関数ｈａｓｈ１は、３つの引数をとり、引数の順序によって関数値が異なる関数である。
Ｃ１（ｎ−１）＝ｈａｓｈ１｛ＣＺ１，ＣＲ１（ｎ−１），ＳＱ１（ｎ−１）｝
【０１３６】
ステップＳ２０６において、ハッシュ回路Ｈａｓｈ３は、改竄チェックコードＣｈｅｃｋＯＵＴを次式に従って計算し、出力メモリ１３３の対応領域へ格納する。改竄チェックコードＣｈｅｃｋＯＵＴは、一方向関数で計算される。この一方向関数ｈａｓｈ３は、２つの引数をとり、引数の順序によって関数値が異なる関数である。
ＣｈｅｃｋＯＵＴ＝ｈａｓｈ３｛ＣＫ１（ｎ−１），Ｃ１（ｎ−１）｝
【０１３７】
ステップＳ２０７において、クライアントからサーバへ、Ｃ１（ｎ−１），およびＣｈｅｃｋＯＵＴを送信する。
【０１３８】
ステップＳ２０８以降においては、サーバ側のサーバ側認証処理部８２は、ステップＳ２０２で受信したサービ要求識別に対応した認証シードを使用する
【０１３９】
ステップＳ２０８において、サーバ側のサーバ側認証処理部８２は、受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）が、保持しているサービ要求識別ｉに対応したクライアント側ワンタイム認証子Ｃｉ（ｎ−１）に一致するか判定する。
【０１４０】
受信したワンタイム認証子Ｃ１（ｎ−１）が、不正なワンタイム認証子であると判定した場合、サーバ側認証処理部８２は、認証失敗と判定し、認証に失敗した旨をＩＣカード１およびリーダライタ２に通知し、処理を終および了する。受信したワンタイム認証子Ｃ１（ｎ−１）が、認証子テーブル７２ｉに保持されているワンタイム認証子に一致した場合、サーバ側の認証処理部は、ステップＳ２０９に移る。
【０１４１】
ステップＳ２０９において、サーバ側のサーバ側認証処理部８２は、保持しているクライアント側共通暗号鍵ＣＫｉ（ｎ−１）、並びに受信したＣ１（ｎ−１）を用いて、次式によりチェックコードＣＨＥＣＫ−Ｃを計算する。チェックコードＣＨＥＣＫ−Ｃは、一方向関数で計算される。この一方向関数は、２つの引数をとり、引数の順序によって関数値が異なる関数である。
ＣＨＥＣＫ−Ｃ＝ｈａｓｈ３｛ＣＫｉ（ｎ−１），Ｃ１（ｎ−１）｝
【０１４２】
ステップＳ２１０において、サーバ側のサーバ側認証処理部８２は、受信したＣｈｅｃｋＯＵＴとステップＳ２０９で作成したチェックコードＣＨＥＣＫ−Ｃとを比較する。
受信したＣｈｅｃｋＯＵＴが、チェックコードＣＨＥＣＫ−Ｃに一致しない場合、サーバ側認証処理部８２は、認証失敗と判定し、認証に失敗した旨をＩＣカード１およびリーダライタ２に通知し、処理を終了する。受信したＣｈｅｃｋＯＵＴが、チェックコードＣＨＥＣＫ−Ｃに一致した場合、ステップＳ２１１に移る。
【０１４３】
ステップＳ２１１において、サーバ側のサーバ側認証処理部８２は、第１乱数ＣＲを生成し、その乱数ＣＲを、次回認証クライアント側第１シードＣＲｉ（ｎ）とする。
また、サーバ側のサーバ側認証処理部８２は、第２乱数ＣＱを生成し、その乱数ＣＱを、次回認証クライアント側第２シードＣＱｉ（ｎ）とする。
また、サーバ側のサーバ側認証処理部８２は、第３乱数ＳＲを生成し、その乱数ＳＲを、次回認証サーバ側第１シードＳＲｉ（ｎ）とする。
また、サーバ側のサーバ側認証処理部８２は、第４乱数ＳＱを生成し、その乱数ＳＱを、次回認証サーバ側第２シードＳＱｉ（ｎ）とする。
【０１４４】
サーバ側認証処理部８２における乱数生成方法としては、関数により作成される疑似乱数列を用いる方法、原子核の崩壊や抵抗体の熱雑音といったランダムな自然現象を利用して作成される自然乱数を利用する方法の他に、別途作成された自然乱数を格納した乱数ファイルから、乱数を読み出す方法であっても良い。
【０１４５】
ステップＳ２１２において、サーバ側のサーバ側認証処理部８２は、次式に従って、今回のワンタイム認証についての、サーバ側ワンタイム認証子Ｓｉ（ｎ−１）を作成する。
Ｓｉ（ｎ−１）＝ｈａｓｈ２（ＳＺｉ，ＳＲｉ（ｎ−１），ＣＱｉ（ｎ−１））
【０１４６】
ステップＳ２１３において、サーバ側のサーバ側認証処理部８２は、共通暗号鍵ＳＫｉ（ｎ−１）で、次回認証用シードＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ）、およびＳＱｉ（ｎ）を暗号化する。ＳＫｉ（ｎ−１）で暗号化された後のＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ）、およびＳＱｉ（ｎ）を、ＳＫｉ（ｎ−１）＊ＣＲｉ（ｎ）、ＳＫｉ（ｎ−１）＊ＣＱｉ（ｎ）、ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ）、およびＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）で表す。
【０１４７】
ステップＳ２１４において、サーバ側のサーバ側認証処理部８２は、次式に従って、改竄チェックコードＣｈｅｃｋＩＮを作成する。
ＣｈｅｃｋＩＮ＝ｈａｓｈ４｛ＳＫｉ（ｎ−１），Ｓｉ（ｎ−１），ＳＫｉ（ｎ−１）＊ＣＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＣＱｉ（ｎ）、ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）｝
【０１４８】
ステップＳ２１５において、サーバ装置４からＩＣカード１へ、Ｓｉ（ｎ−１）、ＳＫｉ（ｎ−１）＊ＣＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＣＱｉ（ｎ）、ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）、およびＣｈｅｃｋＩＮを送信する。
【０１４９】
ステップＳ２１６において、比較回路ＣＭＰは、ｅｘＳとサーバ側から受信したＳｉ（ｎ−１）とを比較する。一致しない場合は、認証失敗と判定し、サーバエラーとしてリーダライタ２へ通知した後、処理を終了する。一致した場合は、ステップＳ２１７に移る。
【０１５０】
ステップＳ２１７において、ハッシュ回路Ｈａｓｈ４は、演算スタック１３１に格納されているＳＫ１（ｎ−１）と、サーバ側から受信したＳｉ（ｎ−１），ＳＫｉ（ｎ−１）＊ＣＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＣＱｉ（ｎ）、ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），およびＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）を用いて、次式によりチェックコードＣＨＥＣＫ−Ｓを計算する。
ＣＨＥＣＫ−Ｓ＝ｈａｓｈ４｛ＳＫ１（ｎ−１），Ｓｉ（ｎ−１），ＳＫｉ（ｎ−１）＊ＣＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＣＱｉ（ｎ）、ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）｝
【０１５１】
ステップＳ２１８において、比較回路ＣＭＰは、受信したＣｈｅｃｋＩＮとステップ２１７で作成したチェックコードＣＨＥＣＫ−Ｓとを比較する。一致しない場合は、認証失敗と判定し、サーバエラーとしてリーダライタ２へ通知した後、処理を終了する。一致した場合は、ステップＳ２１９に移る。
【０１５２】
ステップＳ２１９において、復号回路ＤＥＣは、受信したＳＫｉ（ｎ−１）＊ＣＲｉ（ｎ），ＳＫｉ（ｎ−１）＊ＣＱｉ（ｎ）、ＳＫｉ（ｎ−１）＊ＳＲｉ（ｎ），およびＳＫｉ（ｎ−１）＊ＳＱｉ（ｎ）を、演算スタック１３１上に保持しているサーバ側共通暗号鍵ＳＫ１（ｎ−１）で、復号する。復号したＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ），およびＳＱｉ（ｎ）を、認証シード１４１へ格納する。
【０１５３】
ステップＳ２２０において、ハッシュ回路Ｈａｓｈ５は、クラインアント側の共通暗号鍵ＣＫ１を、次の式で更新する。
ＣＫ１（ｎ）＝ｈａｓｈ５｛ＣＲｉ（ｎ），ＣＱｉ（ｎ），ＣＫ１（ｎ−１）｝
また、ステップＳ２２０において、ハッシュ回路Ｈａｓｈ６は、サーバ側の共通暗号鍵ＳＫ１を、次の式で更新する。
ＳＫ１（ｎ）＝ｈａｓｈ６｛ＳＲｉ（ｎ），ＳＱｉ（ｎ），ＳＫ１（ｎ−１）｝
制御部１１は、更新されたＣＫ１（ｎ）、ＳＫ１（ｎ）を、それぞれ、認証シード１４１のＣＫｉ（ｎ−１）、ＳＫｉ（ｎ−１）へ書き込む。
【０１５４】
ステップＳ２２１において、制御部１１は、リーダライタ２へ完了を通知する。
【０１５５】
ステップＳ２２２において、サーバ側のサーバ側認証処理部８２は、次回のワンタイム認証時に使用するクライアント側ワンタイム認証子Ｃｉ（ｎ）を次式に従って計算し、次回の相互認証まで認証子テーブル７２ｉに保持する。
Ｃｉ（ｎ）＝ｈａｓｈ１｛ＣＺｉ，ＣＲｉ（ｎ），ＳＱｉ（ｎ）｝
【０１５６】
ステップＳ２２３において、サーバ側認証処理部８２は、ＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ）、ＳＱｉ（ｎ）でシードテーブル７１ｉにおけるデータを更新し、Ｃｉ（ｎ）で認証子テーブル７２ｉにおけるクライアント側ワンタイム認証子を更新する。
【０１５７】
ステップＳ２２４において、サーバ側のサーバ側認証処理部８２は、クライアント側の共通暗号鍵ＣＫｉを、次のハッシュ関数を用いて更新する。
ＣＫｉ（ｎ）＝ｈａｓｈ５｛ＣＲｉ（ｎ），ＣＱｉ（ｎ），ＣＫｉ（ｎ−１）｝
また、ステップＳ２２４において、サーバ側のサーバ側認証処理部８２は、サーバ側の共通暗号鍵ＳＫｉを、次のハッシュ関数を用いて更新する。
ＳＫｉ（ｎ）＝ｈａｓｈ６｛ＳＲｉ（ｎ），ＳＱｉ（ｎ），ＳＫｉ（ｎ−１）｝
【０１５８】
ステップＳ２２５において、サーバ側のサーバ側認証処理部８２は、シードテーブル７１において、その管理番号の次回認証用のシードおよび共通暗号鍵ＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＣＫｉ（ｎ）、ＳＲｉ（ｎ）、ＳＱｉ（ｎ）、ＳＫｉ（ｎ）で、今回認証用のシードおよび共通暗号鍵ＣＲｉ（ｎ−１）、ＣＱｉ（ｎ−１）、ＣＫｉ（ｎ−１）、ＳＲｉ（ｎ−１）、ＳＱｉ（ｎ−１）、ＳＫｉ（ｎ−１）を更新する。
【０１５９】
次に、ステップＳ２０８の詳細について説明する。
ステップＳ２０８では、サーバ側認証処理部８２は、ＩＣカード１から受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）が、認証子テーブル７２ｉに登録されているクライアント側ワンタイム認証子のいずれかであるか否かを判定する。
受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）が、認証子テーブル７２ｉに登録されているクライアント側ワンタイム認証子のいずれかである場合、認証成功であり、サーバ側認証処理部８２は、認証子テーブル７２ｉにおいて、受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）に関連付けられている管理番号を特定する。
そして、サーバ側認証処理部８２は、特定された管理番号に対応するシードテーブル７１ｉ中のレコードを用いて以後の処理を進める。
【０１６０】
また、受信したクライアント側ワンタイム認証子Ｃ１（ｎ−１）が、認証子テーブル７２ｉに登録されているクライアント側ワンタイム認証子のいずれかでない場合、認証失敗となる。
【０１６１】
次に、ステップＳ２１１の詳細について説明する。
図２４は、ステップＳ２１１の詳細を説明するフローチャートである。
【０１６２】
ステップＳ３０１において、サーバ側認証処理部８２は、乱数ＣＲ，ＣＱ，ＳＲを作成し、それらを次回認証用シードＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ）にセットする。
【０１６３】
ステップＳ３０２において、サーバ側認証処理部８２は、乱数ＳＱを作成する。
【０１６４】
ステップＳ３０３において、この乱数ＳＱを次回認証用サーバ側シードに使用した場合に、次回認証用クライアント側ワンタイム認証子が、別のＩＣカードのクライアント側ワンタイム認証子に一致するか否かを判定する。つまり、生成した乱数ＳＱを使用した場合のクライアント側ワンタイム認証子の一意性（つまり、同じ値のクライアント側ワンタイム認証子が存在しないこと）が確保されるか否かが判定される。
この時、サーバ側認証処理部８２は、次式に従って、この乱数ＳＱを次回認証用サーバ側シードに使用した場合の、次回認証用クライアント側認証子Ｘ１を計算し、このワンタイム認証子が、認証子テーブル７２ｉに登録されているか否かを判定する。
Ｘ１＝ｈａｓｈ１｛ＣＺｉ，ＣＲｉ（ｎ），ＳＱ｝
【０１６５】
そして、生成した乱数ＳＱで一意性が確保されないと判定した場合、サーバ側認証処理部８２は、一意性が確保されるまで、乱数ＳＱを再生成する。一方、生成した乱数ＳＱで一意性が確保されると判定した場合、ステップＳ３０４へ移る。
【０１６６】
ステップＳ３０４において、サーバ側認証処理部８２は、乱数ＳＱを、次回認証用サーバ側シードＳＱｉ（ｎ）にセットする。
【０１６７】
次に、ステップＳ２２３の詳細について説明する。
図２５は、ステップＳ２２３の詳細を説明するフローチャートである。
【０１６８】
ステップＳ３０５において、サーバ側認証処理部８２は、その管理番号の次回認証用のシードＣＲｉ（ｎ）、ＣＱｉ（ｎ）、ＳＲｉ（ｎ）、ＳＱｉ（ｎ）をシードテーブル７１ｉに書き込む。
【０１６９】
ステップＳ３０６において、ステップＳ３０３での判定時に計算したＸ１を、次回認証用クライアント側ワンタイム認証子Ｃｉ（ｎ）とし、そのＣｉ（ｎ）で、認証子テーブル７２ｉにおいて、その管理番号に関連付けられているワンタイム認証子を更新する。
すなわち、サーバ側認証処理部８２は、その管理番号に関連付けられている認証アドレスをシードテーブル７１ｉから読み出し、その認証アドレスで、認証子テーブル７２ｉにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム認証子を更新する。
【０１７０】
ステップＳ３０７において、サーバ側認証処理部８２は、認証子テーブル７２ｉ内のレコードをワンタイム認証子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル７１ｉにおいてそのレコードの管理番号に関連付けられている認証アドレスを更新する。
【０１７１】
［実施の形態２の変形例］
実施の形態２についても、実施の形態１の変形例と同様に、前回のワンタイム認証の終了時に、今回のクライアント側ワンタイム認証子Ｃｉ（ｎ−１）の値を求めて認証シード１４１に書き込んでおくように、変形することができる。この変形例によれば、今回の認証処理の冒頭のステップＳ２０４において、ハッシュ回路を使ってクライアント側ワンタイム認証子を計算するステップを省くことができるから、今回の認証に要する時間を短縮することができる。
【０１７２】
なお、１枚のＩＣカードにより１以上のサービスを提供する第１の方法の場合は、ＩＣカード１には１組の認証シードしか記憶されていないので、ＩＣカード１は、その認証シードを使用してワンタイム認証を行うだけである。
【０１７３】
なお、上記の各実施の形態は、本発明の好適な例であるが、本発明は，これらに限定されるものでなく、本発明の要旨を逸脱しない範囲において、種々の変形、変更が可能である。
【０１７４】
ＩＣカード１は、非接触でリーダライタ２と通信するものとして説明したが、カード側に設置された接点（端子）を経由してリーダライタ２が通信する接触式であっても構わない。
【０１７５】
また、ＩＣカード内の不揮発性メモリは、ＦｅＲＡＭ以外のフラッシュメモリやＥＥＰＲＯＭであっても良い。
【０１７６】
ＩＣカード１の制御部１１は、ＣＰＵなしの電子回路で構成する例を示したが、ＣＰＵがＲＯＭに記録されたプログラムを実行して実現するように構成してもよい。
【０１７７】
また、上記実施の形態１乃至２において、ワンタイム認証子をワンタイムパスワードとしてもよい。ワンタイム認証子がワンタイムパスワードである場合、クライアント側ワンタイム認証子の一意性についての判定（ステップＳ１０８、Ｓ３０８）は不要であり、また、その場合、ＩＣカード１からカードＩＤ１２１を読み出し、ワンタイム認証子とともにそのカードＩＤ１２１をサーバ装置４へ送信し、サーバ装置４は、カード属性テーブル７３を参照し、そのカードＩＤ１２１に基づいてＩＣカード１を特定する。
【０１７８】
また、上記実施の形態１乃至２において、サーバ装置４において、サーバ側認証処理部８２は、サーバ装置４の起動時にシードテーブル７１および認証子テーブル７２を記憶装置５５からＲＡＭ５３へ読み出し、ワンタイム認証子に基づく相互認証を、ＲＡＭ５３上のシードテーブル７１および認証子テーブル７２に基づいて実行し、サーバ装置４のシャットダウン時に、ＲＡＭ５３上のシードテーブル７１および認証子テーブル７２で、記憶装置５５上のシードテーブル７１および認証子テーブル７２を更新するようにしてもよい。
【符号の説明】
【０１７９】
１      ＩＣカード
２      ＩＣカード用リーダライタ
３      ネットワーク
４      サーバ装置
１０    ＩＣチップ
１１    制御部
１２    ＲＯＭ
１３    ＲＡＭ
１４    ＦｅＲＡＭ
１５    受信回路
１６    送信回路
１７    アンテナ
１８    内部バス
１２１  カードＩＤ
１３１  演算スタック
１３２  入力メモリ
１３３  出力メモリ
１４１  認証シード
１４２  カードＩＤ
５１    ＣＰＵ
５２    ＲＯＭ
５３    ＲＡＭ
５４    インタフェース
５５    記憶装置
５６    インタフェース
５７    通信装置
６１    ワンタイム認証プログラム
７１    シードテーブル群
７１ｉ  シードテーブル
７２    認証子テーブル群
７２ｉ  認証子テーブル
７３    ＩＣカード属性テーブル
８１    通信処理部
８２    サーバ側認証処理部
【図１】
2018037877.tif 000003
【図２】
2018037877.tif 000004
【図３】
2018037877.tif 000005
【図４】
2018037877.tif 000006
【図５】
2018037877.tif 000007
【図６】
2018037877.tif 000008
【図７】
2018037877.tif 000009
【図８】
2018037877.tif 000010
【図９】
2018037877.tif 000011
【図１０】
2018037877.tif 000012
【図１１】
2018037877.tif 000013
【図１２】
2018037877.tif 000014
【図１３】
2018037877.tif 000015
【図１４】
2018037877.tif 000016
【図１５】
2018037877.tif 000017
【図１６】
2018037877.tif 000018
【図１７】
2018037877.tif 000019
【図１８】
2018037877.tif 000020
【図１９】
2018037877.tif 000021
【図２０】
2018037877.tif 000022
【図２１】
2018037877.tif 000023
【図２２】
2018037877.tif 000024
【図２３】
2018037877.tif 000025
【図２４】
2018037877.tif 000026
【図２５】
2018037877.tif 000027