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