以下、図に基づいて本発明の実施の形態を説明する。
実施の形態1.
図1は、本発明の実施の形態に係るなりすまし検知システムの構成を示すブロック図である。図1に示すシステムでは、クライアントとしての端末装置1は、インターネットなどのネットワーク2に接続されており、そのネットワーク2には認証サーバ3およびサービスサーバ4が接続されている。
端末装置1は、ネットワーク2を介して、サービスサーバ4により提供される所定のネットワークサービスを享受するためのユーザ端末装置である。端末装置1は、パーソナルコンピュータなどのコンピュータを内蔵した装置である。
ネットワーク2は、有線および/または無線のLAN(Local Area Network)、および/またはインターネットなどのWAN(Wide Area Network)を含んでいる。
認証サーバ3は、サービスサーバ4により提供される所定のネットワークサービスにログインする前に端末装置1の認証を行う認証サーバである。
サービスサーバ4は、認証サーバ3による認証が成功した端末装置1に対して所定のネットワークサービス(例えばネットバンキング、イーコマースなど)を提供するサーバである。
認証サーバ3および端末装置1は、各相互認証セッションにおいて相互認証を行う。認証サーバ3および端末装置1は、それぞれシードを生成し、相手側装置の認証に成功するたびに自己のシードおよび暗号鍵を更新していき、その自己のシードを暗号化して相互に送受し、両者のシードからワンタイム認証子を生成し、両者のシードに基づいて、相手側装置のワンタイム認証子についての認証をそれぞれ行う。なお、以下では、ワンタイム認証子に基づく認証のことを、ワンタイム認証という。
なお、ここでは、ワンタイム認証子は、ワンタイムIDであるが、ワンタイムパスワードとしてもよい。その場合、ワンタイムパスワードとともに固定的な端末IDが使用される。
認証サーバ3および端末装置1は、フェーズ1の相互認証とフェーズ2の相互認証とを互いに独立にそれぞれ繰り返し実行する。つまり、フェーズ1の相互認証用のシードとフェーズ2の相互認証用のシードが、互いに異なる別々の系列として、生成され更新されていき、フェーズ1の相互認証用のワンタイム認証子とフェーズ2の相互認証用のワンタイム認証子とが別々に生成される。
そして、フェーズ1の相互認証は、所定サービスのログイン可否決定のために実行される。フェーズ2の相互認証は、ログインしていない期間におけるなりすましの検知のために実行される。つまり、フェーズ1の相互認証は、ユーザーが所定サービスにログインしたいときに実行され、フェーズ2の相互認証は、ログアウトが検出されたときに開始され、次回のログインまで継続して繰り返し実行される。すなわち、フェーズ2の相互認証は、フェーズ1の相互認証が実行されると終了する。
フェーズ2の初回の相互認証では、端末装置1は、フェーズ1の次回認証用シードから当該フェーズ2の初回認証用シードを導出し、初回認証用シードからワンタイム認証子を生成し、ワンタイム認証子について認証に成功すると、フェーズ2での次回認証用シードを生成し次回認証用シードに基づいてワンタイム認証子を生成する。
一方、認証サーバ3は、フェーズ1の次回認証用シードを次回のフェーズ1での認証時まで保持するとともに、その次回認証用シードからフェーズ2の初回認証用シードを導出し、ワンタイム認証子について認証に成功すると、フェーズ2での次回認証用シードを生成し次回認証用シードに基づいてワンタイム認証子を生成する。
端末装置1は、所定サービスからのログアウトが検出されると、フェーズ2の相互認証をただちに開始し、フェーズ2の相互認証を所定の時間間隔で繰り返し実行していき、フェーズ2の相互認証の失敗を検出したときにただちに(つまり、サービスログインとは関係なく)フェーズ1の相互認証を実行し、当該フェーズ1の相互認証に失敗したときには、なりすましが発生したと判定する。
また、認証サーバ3は、フェーズ1の相互認証に成功した場合、フェーズ1の相互認証の認証結果をサービスサーバ4へ通知するが、フェーズ2の相互認証の認証結果をサービスサーバ4へ通知しない。このようにすることで、フェーズ2の相互認証に起因する負荷が、サービスサーバ4に掛からない。
なお、図1では、端末装置1は、1台だけであるが、複数の端末装置1のそれぞれに異なるシードを保持させて、それぞれ異なるワンタイム認証子で認証を行うことも可能である。その場合、認証サーバ3は、複数の端末装置1のそれぞれとの間で独立してワンタイム認証に基づく相互認証を行う。
以下、上記システムにおける各装置の構成および動作について説明する。
(1)各装置の構成
図2は、図1における端末装置1の構成を示すブロック図である。
図2に示すように、端末装置1は、CPU(Central Processing Unit)11、ROM(Read Only Memory)12、RAM(Random Access Memory)13などを有するコンピュータを内蔵する。
CPU11は、プログラムを実行し、プログラムに記述された処理を実行する演算処理装置である。また、ROM12は、プログラムおよびデータを予め記憶した不揮発性のメモリである。また、RAM13は、プログラムを実行する際にそのプログラムおよびデータを一時的に記憶する揮発性のメモリである。
また、インターフェイス14は、記憶装置15を接続可能なインターフェイス回路である。また、記憶装置15は、インターフェイス14に接続され、図示せぬオペレーティングシステム、ワンタイム認証プログラム31、所定サービスを享受するためのアプリケーションプログラムなどを格納する記録媒体を有する装置である。記憶装置15としては、ハードディスクドライブ、SSD(Solid State Disk)などが使用される。
また、インターフェイス16は、通信装置17を接続可能なインターフェイス回路である。通信装置17は、ネットワークインターフェイス、モデムなどといったネットワーク2に接続可能な装置である。
また、インターフェイス18は、IEEE1394、USB(Universal Serial Bus)などといった周辺機器インターフェイスである。また、インターフェイス20は、入力装置21を接続可能なインターフェイス回路である。入力装置21は、キーボード、マウスなどといったユーザ操作を受け付けてそのユーザ操作に応じた信号を出力する装置である。また、画像処理回路22は、画像データを書き込まれると、そのデータに対応する画像信号を出力する回路である。この画像処理回路22には、その画像信号に基づいて画像を表示する表示装置23が接続可能である。
CPU11、ROM12、RAM13、インターフェイス14,16,18,20および画像処理回路22は、バスやコントローラチップによって相互にデータ通信可能に接続されている。
図3は、図2に示す端末装置1において実現される処理部を示すブロック図である。図3に示すように、端末装置1では、上述のプログラムが実行されることで、通信処理部41、認証処理部42、およびアプリケーション43が実現される。
通信処理部41は、通信装置17を使用して、所定の通信プロトコルで認証サーバ3、サービスサーバ4などとネットワーク2を介してデータ通信を行う。
認証処理部42は、CPU11でワンタイム認証プログラム31が実行されることにより実現され、通信処理部41を使用して、認証サーバ3との間で、ワンタイム認証に基づくフェーズ1およびフェーズ2の相互認証を行う。そのとき、認証処理部42は、相互認証におけるクライアント側の処理を実行する。
アプリケーション43は、通信処理部41を使用して、サービスサーバ4との間でデータ通信を実行し、サービスサーバ4により提供される所定のサービスを享受する。なお、フェーズ1の相互認証が成功した後に、アプリケーション43に対する所定サービスの提供が開始される。
図4は、図1における認証サーバ3の構成を示すブロック図である。
図4において、CPU51は、プログラムを実行し、プログラムに記述された処理を実行する演算処理装置である。また、ROM52は、プログラムおよびデータを予め記憶した不揮発性のメモリである。また、RAM53は、プログラムを実行する際にそのプログラムおよびデータを一時的に記憶するメモリである。
また、インターフェイス54は、記憶装置55を接続可能なインターフェイス回路である。記憶装置55は、インターフェイス54に接続され、図示せぬオペレーティングシステム、ワンタイム認証プログラム61、認証に使用されるデータなどを格納する記録媒体を有する装置である。記憶装置55としては、ハードディスクドライブ、SSDなどが使用される。記憶装置55には、認証に使用されるデータとして、シードテーブル71、認証子テーブル72、および端末属性テーブル73が保持されている。
シードテーブル71は、最後の認証時に更新された、フェーズ1およびフェーズ2のそれぞれについての次回認証用シードおよび次回認証用共通暗号鍵を有する。次回認証用シードおよび次回認証用共通暗号鍵は、1または複数の端末装置1(つまり、クライアント側装置)のそれぞれについて別々に保持される。
認証子テーブル72は、最後の認証時に更新された、フェーズ1およびフェーズ2のそれぞれについての次回認証用のクライアント側ワンタイム認証子を有する。認証子テーブル72は、フェーズ1テーブル72aとフェーズ2テーブル72bとを含む。フェーズ1テーブル72aは、フェーズ1についての次回認証用のクライアント側ワンタイム認証子を有し、フェーズ2テーブル72bは、フェーズ2についての次回認証用のクライアント側ワンタイム認証子を有する。次回認証用のクライアント側ワンタイム認証子は、1または複数の端末装置1のそれぞれについて別々に保持される。
端末属性テーブル73は、端末装置1の端末ID、およびその端末IDに関連付けられている属性情報(所有者情報など)を有するテーブルである。端末属性テーブル73は、ワンタイム認証子がワンタイムパスワードであるときに、端末装置1からワンタイム認証子とともに受信される端末IDの正当性を判定する際に参照される。
また、インターフェイス56は、通信装置57を接続可能なインターフェイス回路である。通信装置57は、ネットワークインターフェイス、モデムなどといったネットワーク2に接続可能な装置である。
CPU51、ROM52、RAM53、およびインターフェイス54,56は、バスやコントローラチップによって相互にデータ通信可能に接続されている。
図5は、図2に示す認証サーバ3において実現される処理部を示すブロック図である。図5に示すように、この認証サーバ3において、通信処理部81、およびサーバ側認証処理部82が実現される。
通信処理部81は、通信装置57を使用して、所定の通信プロトコルで端末装置1、サービスサーバ4などとネットワーク2を介してデータ通信を行う。
サーバ側認証処理部82は、CPU51でワンタイム認証プログラム61が実行されることにより実現され、通信処理部81を使用して、1または複数の端末装置1との間でワンタイム認証に基づくフェーズ1およびフェーズ2の相互認証におけるサーバ側の処理を実行する。
(2)各装置の動作
図6は、図1に示すシステムにおいて実行されるフェーズ1およびフェーズ2の相互認証について説明するシーケンス図である。
端末装置1では、アプリケーション43の起動、所定のユーザ操作などといった所定のイベントが発生すると、認証処理部42は、そのイベントをサービスログイン要求として検出する(ステップS1)。
そして、認証処理部42は、フェーズフラグPに、フェーズ1を示す値(ここでは1)をセットする(ステップS2)。フェーズフラグPは、認証のフェーズを示すデータである。フェーズフラグPの値から現時点のフェーズが識別される。
次に、端末装置1の認証処理部42と認証サーバ3のサーバ側認証処理部82との間で、フェーズ1でのワンタイム認証が実行される(ステップS3)。このとき、認証処理部42は、保持しているクライアント側およびサーバ側のシードからクライアント側のワンタイム認証子を生成し、また、次回認証用シードを生成して暗号化し、生成したワンタイム認証子および暗号化された次回認証用シードを認証サーバ3へ送信する。サーバ側認証処理部82は、そのワンタイム認証子および暗号化された次回認証用シードを受信し、そのワンタイム認証子が正当なものであるか否かを判定する。サーバ側認証処理部82は、そのワンタイム認証子が正当なものであれば、クライアント側の次回認証用シードを復号して保持する。
なお、フェーズ1のクライアント側シードの初期値、サーバ側シードの初期値、および共通暗号鍵の初期値は、端末装置1と認証サーバ3に予めセットされる。認証サーバ3には、端末装置1に関連付けて、それらの初期値がセットされる。
認証サーバ3では、シードテーブル71に端末装置1のシードと同一のシード(つまり、クライアント側およびサーバ側のシード)が保持されており、また、フェーズ1の次回認証用クライアント側ワンタイム認証子が、認証子テーブル72に保持されている。次回認証用クライアント側ワンタイム認証子は、前回の認証時に生成され、認証子テーブル72に書き込まれたものである。この次回認証用クライアント側ワンタイム認証子は、端末装置1から送信されてくるワンタイム認証子の正当性判定に使用される。つまり、端末装置1から送信されてきたワンタイム認証子が、認証子テーブル72に保持されているワンタイム認証子と一致すると、そのワンタイム認証子は正当なものであると判定される。
サーバ側認証処理部82は、クライアント側およびサーバ側のシードから、端末装置1に対するサーバ側のワンタイム認証子を生成し、また、次回認証用シードを生成して暗号化し、生成したワンタイム認証子および暗号化された次回認証用シードを端末装置1へ送信する。認証処理部42は、そのワンタイム認証子および暗号化された次回認証用シードを受信し、そのワンタイム認証子が正当なものであるか否かを判定する。認証処理部42は、そのワンタイム認証子が正当なものであれば、サーバ側の次回認証用シードを復号して保持する。
このようにして、フェーズ1の相互認証が成功するたびに、端末装置1および認証サーバ3において、それぞれ、フェーズ1のシードの値が更新されていく。
フェーズ1でのワンタイム認証が成功すると、認証サーバ3は、端末装置1の認証に成功した旨を示す認証結果をサービスサーバ4へ送信する。サービスサーバ4は、その認証結果を受信すると、端末装置1からのサービスログインを許可する。
そして、端末装置1のアプリケーション43は、サービスログイン要求をサービスサーバ4へ送信しサービスログインして(ステップ5)、サービスサーバ4から所定のサービスを享受する。
例えば、認証サーバ3は、この認証結果に端末装置1のワンタイム認証子を含めておき、端末装置1は、サービスログイン時に、サービスサーバ4へワンタイム認証子を送信する。サービスサーバ4は、認証サーバ3から受信したワンタイム認証子に一致するワンタイム認証子を送信してきた端末装置1からのサービスログインを許可すればよい。
また、フェーズ1でのワンタイム認証が成功すると、認証サーバ3では、サーバ側認証処理部82は、次回認証用シードからクライアント側ワンタイム認証子を生成し、認証子テーブル72において、端末装置1についてのフェーズ1の次回認証用クライアント側ワンタイム認証子を更新する。
サービスログイン後、所定サービスが提供され、認証処理部42は、アプリケーション43のサービスログアウトを検出する(ステップS6)。例えば、アプリケーション43からサービスサーバ4へ明示的にログアウト要求が送信された場合、アプリケーション43が終了した場合、およびアプリケーション43に対するユーザ操作が所定期間検出されなかった場合、アプリケーション43は、サービスログアウトが発生したと判定する。
そして、サービスログアウトを検出すると、認証処理部42は、フェーズフラグPに、フェーズ2を示す値(ここでは2)をセットする(ステップS7)。
次に、認証が必要なタイミングでフェーズ2における初回の認証が実行される(ステップS8a)。
フェーズ2における初回の認証では、フェーズ1での認証で更新されたシード(つまり、フェーズ1の次回認証用シード)からフェーズ2用のシードの初期値が導出される。この実施の形態1では、フェーズ1での認証で更新されたシードの値が、フェーズ2用のシードの初期値とされる。
その後、端末装置1の認証処理部42と認証サーバ3のサーバ側認証処理部82との間で、フェーズ2でのワンタイム認証(ステップS8)が繰り返し実行される。
フェーズ2の初回のワンタイム認証(ステップS8a)では、認証処理部42は、その初期値を有するシードからワンタイム認証子を生成し、また、フェーズ2の次回認証用シードを生成して暗号化し、ワンタイム認証子と暗号化された次回認証用シードを認証サーバ3へ送信する。
一方、サーバ側認証処理部82は、フェーズ1の次回認証用シードからフェーズ2のシードの初期値を計算し、その初期値からフェーズ2の初回のワンタイム認証子を計算する。そして、フェーズ2の初回のワンタイム認証(ステップS8a)において、サーバ側認証処理部82は、端末装置1からワンタイム認証子および暗号化された次回認証用シードを受信すると、受信したワンタイム認証子が正当なものであるか否かを、計算したワンタイム認証子に基づいて判定する。サーバ側認証処理部82は、そのワンタイム認証子が正当なものであれば、次回認証用シードを復号し保持する。
フェーズ2の初回のワンタイム認証に成功すると、フェーズ2の2回目以降のワンタイム認証(ステップS8)において、端末装置1の認証処理部42は、クライアント側の次回認証用シードを生成し、クライアント側およびサーバ側のシードから生成したワンタイム認証子と、暗号化された次回認証用シードとを認証サーバ3へ送信する。
一方、フェーズ2の2回目以降のワンタイム認証(ステップS8)において、サーバ側認証処理部82は、前回の認証時に送信されてきた次回認証用シードに基づいて今回のクライアント側のワンタイム認証子を計算し、その後、端末装置1からワンタイム認証子および暗号化された次回認証用シードを受信すると、受信したワンタイム認証子が正当なものであるか否かを、計算したワンタイム認証子に基づいて判定する。サーバ側認証処理部82は、そのワンタイム認証子が正当なものであれば、次回認証用シードを復号し保持する(つまり、フェーズ2の次回認証用シードを更新する)。
以後、次回のフェーズ1の相互認証が実行されるまで、フェーズ2の相互認証が所定の時間間隔で繰り返し実行される(ステップS8)。なりすましが発生しない場合、図6に示すように処理が進行していく。
図7は、図1に示すシステムにおけるなりすまし検知の処理について説明するシーケンス図である。
端末装置1について、サービスログインからサービスログアウトまでの期間におけるなりすましは、二重ログインとなるため、通常の方法で検知される。
他方、サービスログアウトから次回のサービスログインまでの期間におけるなりすましは、次のように検知される。
サービスログアウトから次回のサービスログインまでの期間においては、フェーズ2の相互認証が繰り返し実行されている(ステップS8a,S8)。
認証サーバ3に直接的にアクセスしてフェーズ1のシード、暗号鍵などが不正に取得され、不正に入手されたシード、暗号鍵などに基づいて、なりすましによっ不正な端末装置との間でフェーズ1の相互認証に不正に成功し、サービスログインが実行された場合(ステップS201)、認証サーバ3のサーバ側認証処理部82は、フェーズ2の相互認証を終了するとともに(ステップS202)、フェーズ1の更新処理(シードなどの更新)を実行する(ステップS203)。
そのため、正規の端末装置1の認証処理部42が、次回のフェーズ2の相互認証を実行したとき、その相互認証に失敗する(ステップS204)。具体的には、認証サーバ3では既にフェーズ2の相互認証が終了しているため、認証サーバ3では、フェーズ2での端末装置1のワンタイム認証に失敗し、その結果、端末装置1でも、フェーズ2での認証サーバ3のワンタイム認証に失敗する。
端末装置1の認証処理部42は、フェーズ2の相互認証の失敗を検出すると、フェーズフラグPの値を1にセットし(ステップS205)、フェーズ1の相互認証を実行する(ステップS206)。この時点で、認証サーバ3における、端末装置1についてのシードなどは、なりすましによる更新処理で変更されているため、端末装置1の認証処理部42は、フェーズ1の相互認証に失敗する。具体的には、認証サーバ3では、フェーズ1での端末装置1のワンタイム認証に失敗し、その結果、端末装置1でも、フェーズ1での認証サーバ3のワンタイム認証に失敗する。
このように、フェーズ2の相互認証の失敗後のフェーズ1の相互認証に失敗した場合、端末装置1の認証処理部42は、なりすましが発生したものと判定する(ステップS207)。
このようにしてなりすましを検知することで、なりすましが発生してから、フェーズ2の相互認証の時間間隔以下の時間で、なりすましを検知することができる。なお、一時的な通信障害などでフェーズ2の相互認証に失敗した場合には、その後のフェーズ1の相互認証には成功するので、なりすましの誤検出は発生しない。
ここで、フェーズ1の相互認証(ステップS3)の詳細について説明する。図8は、図6におけるフェーズ1の相互認証(ステップS3)の詳細について説明するシーケンス図である。なお、以下において、フェーズ1の説明中のnとフェーズ2の説明中のnとは無関係である。
端末装置1には、シードの他に、フェーズ1用の共通暗号鍵も保持されている。また、認証サーバ3にも、シードの他に、同一の共通暗号鍵がフェーズ1用の共通暗号鍵として保持されている。つまり、フェーズ1の共通暗号鍵の初期値は、予め端末装置1および認証サーバ3にセットされている。そして、後述のように、フェーズ1の認証が成功するたびに、フェーズ1の共通暗号鍵の値は更新されていく。
ここで、シードR1(n−1)は、今回(n−1)のワンタイム認証についてのフェーズ1クライアント側シードである。シードQ1(n−1)は、今回(n−1)のワンタイム認証についてのフェーズ1サーバ側シードである。共通暗号鍵K1(n−1)は、今回(n−1)のワンタイム認証時に、次回認証用のフェーズ1クライアント側シードR1(n)を認証サーバ3へ送信する際に、そのR1(n)を暗号化するためのフェーズ1共通暗号鍵である。
そして、まず、認証処理部42は、乱数Rを生成し、その乱数Rを、次回認証用のフェーズ1クライアント側シードR1(n)にセットする(ステップS21)。
そして、認証処理部42は、今回のワンタイム認証についての、フェーズ1クライアント側ワンタイム認証子C1(n−1)を生成する(ステップS22)。
ワンタイム認証子C1(n−1)は、一方向性関数で計算される。この一方向性関数は、2つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数hcである。
ワンタイム認証子C1(n−1)は、次式に従って計算される。
C1(n−1)=hc(R1(n−1),Q1(n−1))
ここで、ハッシュ関数hcの第1引数には、R1(n−1)が使用され、第2引数には、Q1(n−1)が使用される。
また、認証処理部42は、所定の暗号化方式に従って、共通暗号鍵K1(n−1)で、R1(n)を暗号化する。なお、共通暗号鍵K1(n−1)での暗号化後のR1(n)を、K1(n−1)*R1(n)と表現する。
そして、認証処理部42は、通信処理部41を使用して、ワンタイム認証子C1(n−1)およびK1(n−1)*R1(n)を認証サーバ3へ送信する(ステップS23)。このとき、通信処理部41は、ワンタイム認証子C1(n−1)およびK1(n−1)*R1(n)を1つのメッセージとして送信する。
認証サーバ3では、サーバ側認証処理部82は、通信処理部81を使用して、そのメッセージを受信し、そのメッセージからワンタイム認証子C1(n−1)およびK1(n−1)*R1(n)を抽出し、受信したワンタイム認証子C1(n−1)が、保持しているフェーズ1用のクライアント側ワンタイム認証子に一致するか否かを判定する(ステップS24)。
なお、端末装置1から認証サーバ3へのメッセージのデータフォーマット(ワンタイム認証子のサイズと位置、および暗号化されたシードのサイズと位置)は、フェーズ1とフェーズ2で同一である。
また、フェーズ1クライアント側ワンタイム認証子とフェーズ2クライアント側ワンタイム認証子は同一のデータフォーマット(つまり、同一データ長)を有し、暗号化後のフェーズ1クライアント側シードと、暗号化後のフェーズ2クライアント側シードとは同一のデータフォーマット(つまり、同一データ長)を有するため、受信データのみからでは、フェーズ1のワンタイム認証子かフェーズ2のワンタイム認証子かの区別がつかない。このため、サーバ側認証処理部82は、受信したワンタイム認証子が、フェーズ1テーブル72aに保持されているワンタイム認証子に一致するか否か、および受信したワンタイム認証子が、フェーズ2テーブル72bに保持されているワンタイム認証子に一致するか否かを判定し、受信したワンタイム認証子が、フェーズ1の正当なワンタイム認証子、フェーズ2の正当なワンタイム認証子、および不正なワンタイム認証子のいずれかであるかを判定する。
したがって、受信したワンタイム認証子C1(n−1)が、不正なワンタイム認証子であると判定した場合、サーバ側認証処理部82は、認証失敗と判定し、処理を終了する。
受信したワンタイム認証子C1(n−1)が、フェーズ1テーブル72aに保持しているフェーズ1用のクライアント側ワンタイム認証子に一致した場合、サーバ側認証処理部82は、認証成功と判定し、まず、乱数Qを生成し、その乱数Qを、次回認証用フェーズ1サーバ側シードQ1(n)にセットする(ステップS25)。
また、サーバ側認証処理部82は、K1(n−1)*R1(n)を、シードテーブル71に保持している共通暗号鍵K1(n−1)で、R1(n)へ復号する。そして、サーバ側認証処理部82は、今回(n−1)のワンタイム認証用のフェーズ1サーバ側ワンタイム認証子S1(n−1)を生成する(ステップS26)。
ワンタイム認証子S1(n−1)は、一方向性関数で計算される。この一方向性関数は、2つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数hsである。
ワンタイム認証子S1(n−1)は、次式に従って計算される。
S1(n−1)=hs(R1(n),Q1(n−1))
ここで、ハッシュ関数hsの第1引数には、R1(n)が使用され、第2引数には、Q1(n−1)が使用される。なお、ハッシュ関数hsは、ハッシュ関数hcと同一の関数でもよいし、異なる関数でもよい。
また、サーバ側認証処理部82は、所定の暗号化方式に従って、共通暗号鍵K1(n−1)で、Q1(n)を暗号化する。なお、共通暗号鍵K1(n−1)での暗号化後のQ1(n)を、K1(n−1)*Q1(n)と表現する。
そして、サーバ側認証処理部82は、通信処理部81を使用して、ワンタイム認証子S1(n−1)およびK1(n−1)*Q1(n)を端末装置1へ送信する(ステップS27)。このとき、通信処理部81は、ワンタイム認証子S1(n−1)およびK1(n−1)*Q1(n)を1つのメッセージとして送信する。したがって、認証サーバ3において、端末装置1のワンタイム認証に失敗した場合には、このメッセージは送信されない。そのため、端末装置1は、このメッセージを受信しない場合には、認証サーバ3における端末装置1のワンタイム認証に失敗したと判定する。
なお、認証サーバ3から端末装置1へのメッセージのデータフォーマット(ワンタイム認証子のサイズと位置、および暗号化されたシードのサイズと位置)は、フェーズ1とフェーズ2とで同一である。
また、フェーズ1サーバ側ワンタイム認証子とフェーズ2サーバ側ワンタイム認証子は、同一のデータフォーマット(つまり、同一データ長)を有し、暗号化後のフェーズ1サーバ側シードと暗号化後のフェーズ2サーバ側シードは、同一のデータフォー待つ(つまり、同一データ長)を有するため、受信データのみからでは、フェーズ1のワンタイム認証子か、フェーズ2のワンタイム認証子かの区別がつかない。このため、端末装置1の認証処理部42は、フェーズフラグPの値でフェーズを特定し、受信したワンタイム認証子を、特定したフェーズのワンタイム認証子として取り扱う。
端末装置1では、認証処理部42は、通信処理部41を使用して、そのメッセージを受信し、ワンタイム認証子S1(n−1)およびK1(n−1)*Q1(n)を抽出する。そして、認証処理部42は、フェーズフラグPの値に基づいて、受信したワンタイム認証子がフェーズ1のワンタイム認証子であることを特定する(ステップS28)。
そして、認証処理部42は、R1(n)およびQ1(n−1)に基づいて、上述の式に従って正当なワンタイム認証子S1(n−1)の値を計算し、受信したワンタイム認証子S1(n−1)が、計算した値に一致するか否かを判定する(ステップS29)。
このとき、受信したワンタイム認証子S1(n−1)が、計算した値に一致しない場合、認証処理部42は、認証失敗と判定し、処理を終了する。
受信したワンタイム認証子S1(n−1)が、計算した値に一致した場合、認証処理部42は、認証成功と判定し、まず、K1(n−1)*Q1(n)を、保持している共通暗号鍵K1(n−1)で、Q1(n)へ復号し、この値を、次回認証用フェーズ1サーバ側シードにセットする。
そして、認証処理部42は、次回認証用フェーズ1共通暗号鍵K1(n)を次式に従って計算し、フェーズ1共通暗号鍵を更新する(ステップS30)。
K1(n)=hk(K1(n−1),R1(n),Q1(n))
ここで、hkは、一方向性関数であって、かつハッシュ関数である。
このようにして、フェーズ1のワンタイム認証に成功した後、認証処理部42は、端末装置1において保持しているシードおよび共通暗号鍵を、R1(n)およびQ1(n)、並びにK1(n)で更新する。
一方、認証サーバ3においても、ワンタイム認証子S1(n−1)の送信後、サーバ側認証処理部82は、次回認証用フェーズ1共通暗号鍵K1(n)を上述の式に従って計算し、フェーズ1共通暗号鍵を同様に更新する(ステップS31)。
そして、サーバ側認証処理部82は、フェーズ1のシードR1(n),Q1(n)の値を、初期値として、フェーズ2のクライアント側シードR2(0)およびサーバ側シードQ2(0)にセットし(ステップS32)、フェーズ1の共通暗号鍵K1(n)の値を、初期値として、フェーズ2の共通暗号鍵K2(0)にセットする(ステップS33)。また、このとき、サーバ側認証処理部82は、R2(0)およびQ2(0)から後述の式に従って、フェーズ2の初回のクライアント側ワンタイム認証子C2(0)を計算し、フェーズ2テーブル72bに書き込んで保持する。
さらに、サーバ側認証処理部82は、フェーズ1の次回のワンタイム認証時に使用するクライアント側ワンタイム認証子C1(n)を、R1(n)およびQ1(n)から、上述の式に従って計算する。そして、サーバ側認証処理部82は、R1(n)、Q1(n)およびK1(n)で、シードテーブル71における、端末装置1についてのフェーズ1のデータを更新し、C1(n)で、フェーズ1テーブル72aにおける、端末装置1についてのワンタイム認証子を更新する。これにより、これらの値が、次回のセッション(つまり、次回のフェーズ1認証)まで保持される。
このようにして、フェーズ1での相互認証が実行される。
次に、ここで、フェーズ2の相互認証(ステップS8a,S8)の詳細について説明する。図9は、図6におけるフェーズ2の初回の相互認証(ステップS8a)の詳細について説明するシーケンス図である。図10は、図6におけるフェーズ2の2回目以降の相互認証(ステップS8)の詳細について説明するシーケンス図である。
フェーズ2の相互認証では、初回のみ、シードおよび共通暗号鍵の初期値がフェーズ1でのシードおよび共通暗号鍵から導出される(図9におけるステップS41,S42)。
つまり、前回のサービスログアウト時に開始されたフェーズ2の相互認証において使用されたシードおよび共通暗号鍵は、今回のサービスログイン時に破棄されており、今回のサービスログアウト時に、改めて、初期値が設定される。
初回のみ、端末装置1の認証処理部42は、まず、フェーズ1のシードR1(n),Q1(n)の値を、初期値として、フェーズ2のクライアント側シードR2(0)およびサーバ側シードQ2(0)にセットし(ステップS41)、フェーズ1の共通暗号鍵K1(n)の値を、初期値として、フェーズ2の共通暗号鍵K2(0)にセットする(ステップS42)。なお、フェーズ2のクライアント側シードR1、サーバ側シードQ2、および共通暗号鍵K2は、RAM13に保持され、記憶装置15には保持されない。この時点で、認証処理部42は、フェーズ1のシードR1(n),Q1(n)および共通暗号鍵K1(n)をRAM13から消去する。なお、フェーズ1のシードR1(n),Q1(n)および共通暗号鍵K1(n)は、記憶装置15に保持されている。
そして、認証処理部42は、乱数Rを生成し、次回認証用フェーズ2クライアント側シードR2(n)(初回の場合、n=1)にセットする(ステップS43)。
次に、認証処理部42は、今回のワンタイム認証についての、フェーズ2クライアント側ワンタイム認証子C2(n−1)を生成する(ステップS44)。
ワンタイム認証子C2(n−1)は、一方向性関数で計算される。この一方向性関数は、2つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、上述のハッシュ関数hcである。
ワンタイム認証子C2(n−1)は、次式に従って計算される。
C2(n−1)=hc(Q2(n−1),R2(n−1))
ここで、ハッシュ関数hcの第1引数には、Q2(n−1)が使用され、第2引数には、R2(n−1)が使用される。
また、認証処理部42は、所定の暗号化方式に従って、共通暗号鍵K2(n−1)で、R2(n)を暗号化する。なお、共通暗号鍵K2(n−1)での暗号化後のR2(n)を、K2(n−1)*R2(n)と表現する。
そして、認証処理部42は、通信処理部41を使用して、ワンタイム認証子C2(n−1)およびK2(n−1)*R2(n)を認証サーバ3へ送信する(ステップS45)。このとき、通信処理部41は、ワンタイム認証子C2(n−1)およびK2(n−1)*R2(n)を1つのメッセージとして送信する。
認証サーバ3では、サーバ側認証処理部82は、通信処理部81を使用して、そのメッセージを受信し、ワンタイム認証子C2(n−1)およびK2(n−1)*R2(n)を抽出し、受信したワンタイム認証子C2(n−1)が、フェーズ2テーブル72bに保持しているフェーズ2用のクライアント側ワンタイム認証子に一致するか否かを判定する(ステップS46)。
このとき、受信したワンタイム認証子C2(n−1)が、保持しているフェーズ2用のクライアント側ワンタイム認証子に一致しない場合、サーバ側認証処理部82は、上述のように、受信したワンタイム認証子C2(n−1)がフェーズ1のワンタイム認証子でもなければ、認証失敗と判定し、処理を終了する。
受信したワンタイム認証子C2(n−1)が、保持しているフェーズ2用のクライアント側ワンタイム認証子に一致した場合、サーバ側認証処理部82は、認証成功と判定し、まず、乱数Qを生成し、その乱数Qを、次回認証用フェーズ2サーバ側シードQ2(n)にセットする(ステップS47)。
また、サーバ側認証処理部82は、K2(n−1)*R2(n)を、保持している共通暗号鍵K2(n−1)で、R2(n)へ復号する。そして、サーバ側認証処理部82は、今回(n−1)のワンタイム認証用のフェーズ2サーバ側ワンタイム認証子S2(n−1)を生成する(ステップS48)。
ワンタイム認証子S2(n−1)は、一方向性関数で計算される。この一方向性関数は、2つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、上述のハッシュ関数hsである。
ワンタイム認証子S2(n−1)は、次式に従って計算される。
S2(n−1)=hs(Q2(n−1),R2(n))
ここで、ハッシュ関数hsの第1引数には、Q2(n−1)が使用され、第2引数には、R2(n)が使用される。
また、サーバ側認証処理部82は、所定の暗号化方式に従って、共通暗号鍵K2(n−1)で、Q2(n)を暗号化する。なお、共通暗号鍵K2(n−1)での暗号化後のQ2(n)を、K2(n−1)*Q2(n)と表現する。
そして、サーバ側認証処理部82は、通信処理部81を使用して、ワンタイム認証子S2(n−1)およびK2(n−1)*Q2(n)を端末装置1へ送信する(ステップS49)。このとき、通信処理部81は、ワンタイム認証子S2(n−1)およびK2(n−1)*Q2(n)を1つのメッセージとして送信する。したがって、認証サーバ3において、端末装置1のワンタイム認証に失敗した場合には、このメッセージは送信されない。そのため、端末装置1は、このメッセージを受信しない場合には、認証サーバ3における端末装置1のワンタイム認証に失敗したと判定する。
端末装置1では、認証処理部42は、通信処理部41を使用して、そのメッセージを受信し、ワンタイム認証子S2(n−1)およびK2(n−1)*Q2(n)を抽出する。そして、認証処理部42は、フェーズフラグPの値に基づいて、受信したワンタイム認証子がフェーズ2のワンタイム認証子であることを特定する(ステップS50)。
認証処理部42は、R2(n)およびQ2(n−1)に基づいて、上述の式に従って正当なワンタイム認証子S2(n−1)の値を計算し、受信したワンタイム認証子S2(n−1)が、計算した値に一致するか否かを判定する(ステップS51)。
このとき、受信したワンタイム認証子S2(n−1)が、計算した値に一致しない場合、認証処理部42は、認証失敗と判定し、処理を終了する。
受信したワンタイム認証子S2(n−1)が、計算した値に一致した場合、認証処理部42は、認証成功と判定し、まず、K2(n−1)*Q2(n)を、保持している共通暗号鍵K2(n−1)で、Q2(n)へ復号し、この値を、次回認証用フェーズ2サーバ側シードにセットする。
そして、認証処理部42は、次回認証用フェーズ2共通暗号鍵K2(n)を次式に従って計算し、フェーズ2共通暗号鍵を更新する(ステップS52)。
K2(n)=hk(K2(n−1),R2(n),Q2(n))
ここで、hkは、一方向性関数であって、かつハッシュ関数である。
このようにして、フェーズ2のワンタイム認証に成功した後、認証処理部42は、RAM13上に、次のフェーズ2のワンタイム認証まで、R2(n)、Q2(n)、およびK2(n)を保持する。
一方、認証サーバ3においても、ワンタイム認証子S2(n−1)の送信後、サーバ側認証処理部82は、次回認証用フェーズ2共通暗号鍵K2(n)を上述の式に従って計算し、フェーズ2共通暗号鍵を更新する(ステップS53)。
さらに、サーバ側認証処理部82は、R2(n)およびQ2(n)から後述の式に従って、フェーズ2の次回認証用クライアント側ワンタイム認証子C2(n)を計算する。そして、サーバ側認証処理部82は、R2(n)、Q2(n)およびK2(n)で、シードテーブル71における、端末装置1についてのフェーズ2のデータを更新し、C2(n)で、フェーズ2テーブル72bにおける、端末装置1についてのワンタイム認証子を更新する。これにより、今回のシードR2(n−1),Q2(n−1)および共通暗号鍵K2(n−1)は消去され、次回のシードR2(n),Q2(n)および共通暗号鍵K2(n)が、次回のフェーズ2認証まで保持される。次回のフェーズ2のワンタイム認証では、上述の初期値の代わりに次回のシードR2(n),Q2(n)および共通暗号鍵K2(n)が使用される。
このようにして、フェーズ2の相互認証(1回の相互認証セッション)が実行される。そして、フェーズ2では、端末装置1は、1回の相互認証セッションが完了してから所定の時間間隔(例えば15分)で次回の相互認証セッションを開始する。
なお、この時間間隔は、短いほど好ましいが、端末装置1の数、認証サーバ3の処理能力などに基づいて決定される。
以上のように、上記実施の形態1によれば、認証サーバ3は、所定サービスへのログイン時に端末装置1との間でフェーズ1の相互認証を実行し、所定サービスからのログアウトから所定サービスへの次のログインまでの期間において、端末装置1との間で、フェーズ2の相互認証を繰り返し行う。端末装置1は、フェーズ2の相互認証の失敗を検出したときにただちにフェーズ1の相互認証を実行し、当該フェーズ1の相互認証に失敗したときには、なりすましが発生したと判定する。
これにより、サービスサーバ4に負荷をかけずに、比較的短時間でなりすましが検知される。
実施の形態2.
本発明の実施の形態2では、実施の形態1における認証サーバ3内のデータ構造およびそのデータ構造に沿ったデータ処理の一例について説明する。なお、システムの基本的な構成および動作は、実施の形態1と同様であるので、その説明は省略する。なお、この実施の形態2において、ワンタイム認証子はワンタイムIDである。
まず、データ構造について説明する。
実施の形態2では、認証サーバ3において、端末装置1と同様の、1または複数の端末装置のそれぞれに対して固有の管理番号が割り当てられ、その管理番号に関連付けて、(a)次回認証用のフェーズ1クライアント側ワンタイム認証子C1(n)、(b)次回認証用のフェーズ2クライアント側ワンタイム認証子C2(n)、(c)フェーズ1についての現時点(n−1)でのシードR1(n−1),Q1(n−1)および共通暗号鍵K1(n−1)並びに次回認証用のシードR1(n),Q1(n)および共通暗号鍵K1(n)、並びに(d)フェーズ2についての現時点(n−1)でのシードR2(n−1),Q2(n−1)および共通暗号鍵K2(n−1)並びに次回認証用のシードR2(n),Q2(n)および共通暗号鍵K2(n)が保持される。
つまり、フェーズ1テーブル72aにおいて、管理番号に関連付けて、(a)次回認証用のフェーズ1クライアント側ワンタイム認証子C1(n)が保持される。また、フェーズ2テーブル72bにおいて、管理番号に関連付けて、(b)次回認証用のフェーズ2クライアント側ワンタイム認証子C2(n)が保持される。また、シードテーブル71において、管理番号に関連付けて、(c)フェーズ1についての現時点(n−1)でのシードR1(n−1),Q1(n−1)および共通暗号鍵K1(n−1)並びに次回認証用のシードR1(n),Q1(n)および共通暗号鍵K1(n)、並びに(d)フェーズ2についての現時点(n−1)でのシードR2(n−1),Q2(n−1)および共通暗号鍵K2(n−1)並びに次回認証用のシードR2(n),Q2(n)および共通暗号鍵K2(n)が保持される。
図11は、実施の形態2におけるシードテーブル71の構造の一例を示す図である。図12は、実施の形態2における認証子テーブル72(フェーズ1テーブル72a,フェーズ2テーブル72b)の一例を示す図である。
図11におけるフェーズ1アドレスは、フェーズ1テーブル72a内で、当該フェーズ1アドレスに関連付けられている管理番号と同一の管理番号を有するレコードの位置を示すデータである。同様に、図11におけるフェーズ2アドレスは、フェーズ2テーブル72b内で、当該フェーズ2アドレスに関連付けられている管理番号と同一の管理番号を有するレコードの位置を示すデータである。
また、図12において、サーバ側認証処理部82により、フェーズ1テーブル72a内のレコード(ワンタイム認証子と管理番号の組)は、ワンタイム認証子の値について昇順にソートされる。同様に、フェーズ2テーブル72b内のレコード(ワンタイム認証子と管理番号の組)は、ワンタイム認証子の値について昇順にソートされる。これにより、ワンタイム認証時に迅速に、クライアントから受信したワンタイム認証子がテーブル72a,72bに登録されているか否かを判定することができる。
なお、シードテーブル71、フェーズ1テーブル72a、およびフェーズ2テーブル72bは、予め、所定数(つまり、端末装置の数)のレコードを有しており、レコード内の管理番号以外のフィールドには初期値がセットされる。
次に、データ処理について説明する。
図13および図14は、実施の形態2における認証サーバ3によるデータ処理について説明するフローチャートである。
認証サーバ3では、サーバ側認証処理部82は、端末装置1から、ワンタイム認証子C(フェーズ1またはフェーズ2のワンタイム認証子)を含むメッセージを受信すると、そのワンタイム認証子Cがフェーズ1テーブル72aに登録されているフェーズ1クライアント側ワンタイム認証子C1(n−1)のいずれかであるか否かを判定する(ステップS101)。
受信したワンタイム認証子Cがフェーズ1テーブル72aに登録されているフェーズ1クライアント側ワンタイム認証子C1(n−1)のいずれかである場合、サーバ側認証処理部82は、フェーズ1テーブル72aにおいて、受信したワンタイム認証子Cに関連付けられている管理番号を特定する(ステップS102)。この場合、フェーズ1のワンタイム認証が実行される。
サーバ側認証処理部82は、特定した管理番号に関連付けられているQ1(n−1)およびK1(n−1)をシードテーブル71から読み出す(ステップS103)。
そして、サーバ側認証処理部82は、受信したK1(n−1)*R1(n)からR1(n)を、読み出したK1(n−1)で復号し、そのR1(n)を、その管理番号に関連付けてシードテーブル71に書き込む(ステップS104)。
次に、サーバ側認証処理部82は、次回認証用サーバ側シードの生成を行う。まず、サーバ側認証処理部82は、乱数Qを生成し、この乱数Qを次回認証用サーバ側シードに使用した場合に、次回認証用のフェーズ1クライアント側ワンタイム認証子が、別のフェーズ1クライアント側ワンタイム認証子およびフェーズ2クライアント側ワンタイム認証子のいずれかに一致するか否かを判定するとともに(ステップS106)、初回のフェーズ2クライアント側ワンタイム認証子が、別のフェーズ2クライアント側ワンタイム認証子およびフェーズ1クライアント側ワンタイム認証子のいずれかに一致するか否かを判定する(ステップS107)。つまり、生成した乱数Qを使用した場合のクライアント側ワンタイム認証子の一意性(つまり、同値の別のワンタイム認証子が存在しないこと)が確保されるか否かが判定される。
このとき、サーバ側認証処理部82は、次式に従って、この乱数Qを次回認証用サーバ側シードに使用した場合の次回認証用のフェーズ1クライアント側ワンタイム認証子X1および初回のフェーズ2クライアント側ワンタイム認証子X2を計算し、これらのワンタイム認証子X1,X2がフェーズ1テーブル72aおよびフェーズ2テーブル72bに登録されているか否かを判定する。
X1=hc(R1(n),Q)
X2=hc(Q,R2(0)),R2(0)=R1(n)
そして、生成した乱数Qで一意性が確保されないと判定した場合、サーバ側認証処理部82は、一意性が確保されるまで、乱数Qを再生成する。
一方、生成した乱数Qでは一意性が確保されると判定した場合、サーバ側認証処理部82は、乱数Qを、次回認証用フェーズ1サーバ側シードQ1(n)にセットし、そのシードQ1(n)を、その管理番号に関連付けてシードテーブル71に書き込む(ステップS108)。
そして、サーバ側認証処理部82は、フェーズ1サーバ側ワンタイム認証子S1(n−1)および暗号化後の次回認証用フェーズ1サーバ側シードK1(n−1)*Q1(n)を生成し、端末装置1へ送信する(ステップS109)。
また、サーバ側認証処理部82は、ステップS106での判定時に計算したX1を、次回認証用フェーズ1クライアント側ワンタイム識別子C1(n)とし、そのC1(n)で、フェーズ1テーブル72aにおいてその管理番号に関連付けられているワンタイム識別子を更新する(ステップS110)。このとき、サーバ側認証処理部82は、その管理番号に関連付けられているフェーズ1アドレスをシードテーブル71から読み出し、そのフェーズ1アドレスで、フェーズ1テーブル72aにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム識別子を更新する。
その後、サーバ側認証処理部82は、フェーズ1テーブル72a内のレコードを、ワンタイム識別子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル71においてそのレコードの管理番号に関連付けられているフェーズ1アドレスを更新する(ステップS111)。
また、サーバ側認証処理部82は、ステップS107での判定時に計算したX2を、初回認証用フェーズ2クライアント側ワンタイム識別子C2(0)とし、そのC2(0)で、フェーズ2テーブル72bにおいてその管理番号に関連付けられているワンタイム識別子を更新する(ステップS112)。このとき、サーバ側認証処理部82は、その管理番号に関連付けられているフェーズ2アドレスをシードテーブル71から読み出し、そのフェーズ2アドレスで、フェーズ2テーブル72bにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム識別子を更新する。
その後、サーバ側認証処理部82は、フェーズ2テーブル72b内のレコードを、ワンタイム識別子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル71においてそのレコードの管理番号に関連付けられているフェーズ2アドレスを更新する(ステップS113)。
そして、サーバ側認証処理部82は、次回認証用のフェーズ1共通暗号鍵K1(n)を生成し、その管理番号に関連付けてシードテーブル71に書き込む(ステップS114)。
さらに、サーバ側認証処理部82は、シードテーブル71において、その管理番号の次回認証用のシードおよび共通暗号鍵R1(n),Q1(n),K1(n)で、今回認証用のシードおよび共通暗号鍵R1(n−1),Q1(n−1),K1(n−1)を更新する(ステップS115)。
このようにして、フェーズ1のワンタイム認証についてのデータ処理が実行される。
一方、ステップS101において、受信したワンタイム認証子Cがフェーズ1テーブル72aに登録されていないと判定した場合、サーバ側認証処理部82は、受信したワンタイム認証子Cが、フェーズ2テーブル72bに登録されているフェーズ2クライアント側ワンタイム認証子C2(n−1)のいずれかであるか否かを判定する(ステップS121)。
受信したワンタイム認証子Cがフェーズ2テーブル72bに登録されているフェーズ2クライアント側ワンタイム認証子C2(n−1)のいずれかである場合、サーバ側認証処理部82は、フェーズ2テーブル72bにおいて、受信したワンタイム認証子Cに関連付けられている管理番号を特定する(ステップS122)。この場合、フェーズ2のワンタイム認証が実行される。
サーバ側認証処理部82は、特定した管理番号に関連付けられているQ2(n−1)およびK2(n−1)をシードテーブル71から読み出す(ステップS123)。
そして、サーバ側認証処理部82は、受信したK2(n−1)*R2(n)からR2(n)を、読み出したK2(n−1)で復号し、そのR2(n)を、その管理番号に関連付けてシードテーブル71に書き込む(ステップS124)。
次に、サーバ側認証処理部82は、次回認証用サーバ側シードの生成を行う。まず、サーバ側認証処理部82は、乱数Qを生成し、この乱数Qを次回認証用サーバ側シードに使用した場合に、次回認証用のフェーズ2クライアント側ワンタイム認証子が、別のフェーズ2クライアント側ワンタイム認証子およびフェーズ1クライアント側ワンタイム認証子のいずれかに一致するか否かを判定する(ステップS126)。つまり、生成した乱数Qを使用した場合のクライアント側ワンタイム認証子の一意性(つまり、同値の別のワンタイム認証子が存在しないこと)が確保されるか否かが判定される。
このとき、サーバ側認証処理部82は、次式に従って、この乱数Qを次回認証用サーバ側シードに使用した場合の次回認証用のフェーズ2クライアント側ワンタイム認証子X2を計算し、このワンタイム認証子X2がフェーズ2テーブル72bに登録されているか否かを判定する。
X2=hc(Q,R2(n))
そして、生成した乱数Qでは一意性が確保されないと判定した場合、サーバ側認証処理部82は、一意性が確保されるまで、乱数Qを再生成する。
一方、生成した乱数Qでは一意性が確保されると判定した場合、サーバ側認証処理部82は、乱数Qを、次回認証用フェーズ2サーバ側シードQ2(n)にセットし、そのシードQ2(n)を、その管理番号に関連付けてシードテーブル71に書き込む(ステップS127)。
そして、サーバ側認証処理部82は、フェーズ2サーバ側ワンタイム認証子S2(n−1)および暗号化後の次回認証用フェーズ2サーバ側シードK2(n−1)*Q2(n)を生成し、端末装置1へ送信する(ステップS128)。
また、サーバ側認証処理部82は、ステップS126での判定時に計算したX2を、次回認証用フェーズ2クライアント側ワンタイム識別子C2(n)とし、そのC2(n)で、フェーズ2テーブル72bにおいてその管理番号に関連付けられているワンタイム識別子を更新する(ステップS129)。このとき、サーバ側認証処理部82は、その管理番号に関連付けられているフェーズ2アドレスをシードテーブル71から読み出し、そのフェーズ2アドレスで、フェーズ2テーブル72bにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム識別子を更新する。
その後、サーバ側認証処理部82は、フェーズ2テーブル72b内のレコードを、ワンタイム識別子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル71においてそのレコードの管理番号に関連付けられているフェーズ2アドレスを更新する(ステップS130)。
そして、サーバ側認証処理部82は、次回認証用のフェーズ2共通暗号鍵K2(n)を生成し、その管理番号に関連付けてシードテーブル71に書き込む(ステップS131)。
さらに、サーバ側認証処理部82は、シードテーブル71において、その管理番号の次回認証用のシードおよび共通暗号鍵R2(n),Q2(n),K2(n)で、今回認証用のシードおよび共通暗号鍵R2(n−1),Q2(n−1),K2(n−1)を更新する(ステップS132)。
このようにして、フェーズ2のワンタイム認証についてのデータ処理が実行される。
以上のように、上記実施の形態2によれば、管理番号で複数の端末装置1を管理し、端末装置1についてそれぞれ独立してワンタイム認証を行うことができる。
なお、上述の実施の形態に対する様々な変更および修正については、当業者には明らかである。そのような変更および修正は、その主題の趣旨および範囲から離れることなく、かつ、意図された利点を弱めることなく行われてもよい。つまり、そのような変更および修正が請求の範囲に含まれることを意図している。
例えば、上記実施の形態1,2において、フェーズ1のシードおよび共通暗号鍵をそのままフェーズ2のシードおよび共通暗号鍵の初期値としているが、その代わりに、所定の関数(例えば、ハッシュ関数や一方向性関数)で、端末装置1および認証サーバ3のそれぞれにおいて、フェーズ1のシードおよび共通暗号鍵から、フェーズ2のシードおよび共通暗号鍵の初期値を導出するようにしてもよい。
また、上記実施の形態1,2において、フェーズフラグPに2をセットするタイミングは、フェーズ1のワンタイム認証終了後であって、フェーズ2の初回のサーバ側ワンタイム認証子S2(0)を受信する前であれば、どのタイミングでもよい。
また、上記実施の形態1,2においては、サービスログアウト後、ただちにフェーズ2の相互認証を開始しているが、その代わりに、サービスログイン後、ただちにフェーズ2の相互認証を開始するようにしてもよい。その場合においても、次回のサービスrログイン時にフェーズ2の相互認証は一旦終了し、新たに初期値がセットされて、フェーズ2の相互認証が開始される。
また、上記実施の形態1,2において、相互認証に、ワンタイム認証以外の認証方法を使用してもよい。
また、上記実施の形態1,2において、認証サーバ3をフロントエンドサーバとし、サービスサーバ4をバックエンドサーバとしてもよい。その場合、サービスログイン要求、サービスログアウト要求、およびサービスに関するデータ通信は、認証サーバ3を介して、端末装置1とサービスサーバ4との間で実行される。