(57)【特許請求の範囲】
【請求項１】
ユーザから入力されたパスワードとユーザの端末装置およびサーバの認証装置にそれぞれ保存されている記録情報を用いて、ユーザの端末装置とサーバの認証装置との間で相互認証しながらセッション鍵を確立する二要素認証システムであって、
ユーザの端末装置とサーバの認証装置においてそれぞれに前記パスワードに基づいて作成された乱数を含む記録情報を記録する格納装置と、
ユーザの端末装置とサーバの認証装置においてそれぞれに前記格納装置に記録された記録情報を用い、(i)サーバの認証装置は、前記記録情報とユーザの端末装置から受信した二つの暗号文より計算して得られた二つの乱数、暗号文を含むデータのハッシュ値である第一の認証子（Vsi）を生成してユーザの端末装置へ送信し、ユーザの端末装置は、受信した認証子が正しく生成された値であるかを確認し、正しい値である場合には、前記記録情報と前記二つの乱数、前記暗号文を含む新たなハッシュ値である第二の認証子（Vc）を生成してサーバの認証装置へ送信し、サーバの認証装置で新たなハッシュ値を認証するか、(ii) サーバの認証装置は、前記記録情報とユーザの端末装置から受信した一つ又は二つの暗号文より計算して得られた一つ又は二つの乱数を含むデータのハッシュ値である認証子を生成してユーザの端末装置へ送信し、ユーザの端末装置は、受信した認証子が正しく生成された値であるかを確認し、正しい値である場合には、前記記録情報と前記一つ又は二つの乱数を有するデータを署名鍵で計算した署名文をサーバの認証装置へ送信し、サーバの認証装置で署名文を認証するか、（iii）サーバの認証装置は、前記記録情報とユーザの端末装置から受信した第一のＤＨ値と乱数とその乱数に基づいて生成した第二のＤＨ値から、ＤＨ鍵を生成し、ＤＨ鍵を含むデータのハッシュ値である第一の認証子を生成してユーザの端末装置へ送信し、ユーザの端末装置は、受信した第一の認証子が正しく生成された値であるかを確認し、正しい値である場合には、前記記録情報とサーバの認証装置から受信した第二のＤＨ値と乱数とその乱数に基づいて生成した第一のＤＨ値からＤＨ鍵を生成し、前記ＤＨ鍵を含むデータから新たなハッシュ値である第二の認証子を生成してサーバの認証装置へ送信し、サーバの認証装置で新たなハッシュ値を認証することで認証プロトコルの実行を行い、ユーザの端末装置とサーバの認証装置との間で相互認証しながらセッション鍵を確立する処理を行う認証処理部と、
前記セッション鍵を生成するたびに格納装置に記録されている記録情報を変更する秘密値更新器と
を備えることを特徴とする二要素認証システム。
【請求項２】
前記請求項１に記載された二要素認証システムにおいて、更に、
ユーザの端末装置とサーバの認証装置においてそれぞれに前記パスワードに基づいて記録情報を作成する初期化処理部を備え、
前記格納装置は前記初期化処理部により作成された記録情報を初期値として記録する
ことを特徴とする二要素認証システム。
【請求項３】
前記請求項１に記載された二要素認証システムにおいて、
秘密値更新器は、前記カウント値に基づいて格納装置に記録する記録情報の更新を管理する
ことを特徴とする二要素認証システム。
【請求項４】
前記請求項１に記載された二要素認証システムにおいて、
認証処理部は、ユーザの端末装置とサーバの認証装置との間で相互認証し、セッション鍵を確立する処理は、ＲＳＡ公開鍵に基づく認証プロトコルの処理により行う
ことを特徴とする二要素認証システム。
【請求項５】
前記請求項１に記載された二要素認証システムにおいて、
認証処理部は、ユーザの端末装置が前記記録情報とＤＨ鍵を含む認証子を送信する認証プロトコルの実行を行った場合は、ユーザの端末装置とサーバの認証装置との間で相互認証し、セッション鍵を確立する処理は、ＤＨ鍵共有プロトコルに基づく認証処理により行う
ことを特徴とする二要素認証システム。
【請求項６】
ユーザの端末装置にパスワードを入力し、
ユーザの端末装置とサーバの認証装置においてそれぞれに前記パスワードに基づいて作成された乱数を含む記録情報を記録し、
(i)ユーザの端末装置とサーバの認証装置においてそれぞれに前記格納装置に記録された記録情報を用い、サーバの認証装置は、前記記録情報とユーザの端末装置から受信した二つの暗号文より計算して得られた二つの乱数、暗号文を含むデータのハッシュ値である第一の認証子（Vsi）を生成してユーザの端末装置へ送信し、ユーザの端末装置は、受信した認証子が正しく生成された値であるかを確認し、正しい値である場合には、前記記録情報と二つの乱数、暗号文を含む新たなハッシュ値である第二の認証子（Vc）を生成してサーバの認証装置へ送信し、サーバの認証装置で新たなハッシュ値を認証すること、
または、(ii)ユーザの端末装置とサーバの認証装置においてそれぞれに前記格納装置に記録された記録情報を用い、サーバの認証装置は、前記記録情報とユーザの端末装置から受信した一つ又は二つの暗号文より計算して得られた一つ又は二つの乱数を含むデータのハッシュ値である認証子を生成してユーザの端末装置へ送信し、ユーザの端末装置は、受信した認証子が正しく生成された値であるかを確認し、正しい値である場合には、前記記録情報と前記一つ又は二つの乱数を有するデータを署名鍵で計算した署名文をサーバの認証装置へ送信し、サーバの認証装置で署名文を認証すること、
または、(iii)ユーザの端末装置とサーバの認証装置においてそれぞれに前記格納装置に記録された記録情報を用い、サーバの認証装置は、前記記録情報とユーザの端末装置から受信した第一のＤＨ値と乱数とその乱数に基づいて生成した第二のＤＨ値から、ＤＨ鍵を生成し、ＤＨ鍵を含むデータのハッシュ値である第一の認証子を生成してユーザの端末装置へ送信し、ユーザの端末装置は、受信した第一の認証子が正しく生成された値であるかを確認し、正しい値である場合には、前記記録情報とサーバの認証装置から受信した第二のＤＨ値と乱数とその乱数に基づいて生成した第一のＤＨ値からＤＨ鍵を生成し、前記ＤＨ鍵を含むデータから新たなハッシュ値である第二の認証子を生成してサーバの認証装置へ送信し、サーバの認証装置で新たなハッシュ値を認証することで認証プロトコルの実行を行い、
ユーザの端末装置とサーバの認証装置との間で相互認証しながらセッション鍵の確立を行い、セッション鍵が生成されるごとに秘密値更新器により、前記記録情報を更新することを特徴とする二要素認証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パスワードなどの短い系列とユーザの端末装置およびサーバの認証装置に記録された記録情報を使って安全に認証を行う二要素認証システムに関するものである。
【背景技術】
【０００２】
従来から、ネットワークを介して様々なサービスを利用するシステムにおいては、正当な利用者を認証するための認証システムが組み込まれる。多くはパスワードを用いる認証システムであるが、パスワード認証だけでは、十分なセキュリティの確保が困難である場合には、別の認証システムの仕組みを併用または追加するようなシステムとされる。
【０００３】
例えば、特許文献１に記載の認証システムでは、パスワードによる認証と、生態情報による認証システムを併用する。認証者はまずパスワードを入力し、入力されたパスワードが照合用パスワードと一致すれば、認証者は生体情報である指紋が入力できる。入力された指紋が照合用指紋データと一致すれば認証処理用の長い暗号パスワードが生成され、その暗号パスワードを用いて認証を行う。しかしながら、照合用パスワードと指紋データが漏洩すると、それを得た攻撃者は、暗号パスワードが生成でき、認証に成功する。
【０００４】
また、特許文献２に記載されている「二重要素認証されたキー交換方法」による認証システムにおいては、ユーザはパスワードを覚え、クライアントにトークンが保存され、認証サーバはユーザのパスワードとトークンと公開鍵のペアーになっている秘密鍵を保存している。ここでは、クライアントは認証サーバの公開鍵に安全にアクセスできると仮定しており、クライアントと認証サーバは、パスワードとトークンとサーバの公開鍵（サーバは秘密鍵）を使って相互認証し、セッション鍵を生成する。
【０００５】
しかし、サーバの情報が漏洩すると、攻撃者は以前クライアントと認証サーバの間に共有されたすべてのセッション鍵を求めることができ、後述するように、クライアントに保存されているＲＳＡ公開鍵を書き換える“Ｒｅｐｌａｃｅｍｅｎｔ”攻撃とサーバの記録情報を用いる“ＫＣＩ（Ｋｅｙ  Ｃｏｍｐｒｏｍｉｓｅ  Ｉｍｐｅｒｓｏｎａｔｉｏｎ）”攻撃に対して、脆弱性がある。
【０００６】
また、特許文献３に記載されているワールド・ワイド・ウェッブ用のコンピュータ・セキュリティの技術では、その認証システムは、ユーザがウェップサイトにウェップページを要求すると、ユーザに識別可能なｃｕｓｔｏｍｉｚａｔｉｏｎ情報が提供されて、ユーザはこのウェップサイトを認証し、クライアントに記録されたクッキーにより、ウェップサイトはユーザを認証するシステムとなっている。
【特許文献１】特開２００６−１３９４７１号公報
【特許文献２】特表２００７−５２０９０９号公報
【特許文献３】特表２００６−５２５５６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来から、パスワードなどの短い系列と記録情報を使って認証を行う二要素認証システムの一つとして、「情報漏洩に強い認証付き鍵共有方式」による認証システムの提案がある。この方式の認証システムでは、ネットワーク上のあらゆる攻撃だけではなく、情報漏洩があったとしても安全性を保障することができる。
【０００８】
しかし、ＲＳＡ公開鍵暗号方式を使った認証システムは、次に説明するように、“Ｒｅｐｌａｃｅｍｅｎｔ”攻撃と“ＫＣＩ（Ｋｅｙ  Ｃｏｍｐｒｏｍｉｓｅ  Ｉｍｐｅｒｓｏｎａｔｉｏｎ）”攻撃に対して脆弱性があり、ＤＨ（Ｄｉｆｆｉｅ  Ｈｅｌｌｍａｎ）鍵共有方式を使った認証システムは、“ＫＣＩ（Ｋｅｙ  Ｃｏｍｐｒｏｍｉｓｅ  Ｉｍｐｅｒｓｏｎａｔｉｏｎ）”攻撃に対して脆弱性があるという問題がある。
【０００９】
“Ｒｅｐｌａｃｅｍｅｎｔ”攻撃は、攻撃者がクライアントに記録されているユーザの秘密情報を得て、かつ、それを任意の情報に書き換える形態の攻撃である。ユーザがその書き換えられた情報を使って通信を行うと、攻撃者はその通信を含むすべての通信を盗聴したり、サーバの成りすましをすることができ、そのユーザのパスワードやそのユーザのいずれかのセッション鍵を得ようとする攻撃が可能である。これに対して、従来の技術では、十分な安全性が保証されない。
【００１０】
ＫＣＩ（Ｋｅｙ  Ｃｏｍｐｒｏｍｉｓｅ  Ｉｍｐｅｒｓｏｎａｔｉｏｎ）攻撃は、攻撃者がサーバに記録されているユーザの秘密情報を得て、かつ、それを使って攻撃者がクライアントの成りすましをすることにより、そのユーザのパスワードやそのユーザのいずれかのセッション鍵も得ようとする攻撃である。もちろん、攻撃者がサーバに記録されている秘密情報を得た後には、攻撃者はそのサーバになりすますことが可能ではあるが、その場合においても、ユーザが正しいサーバと最初に通信すれば（ＲＳＡ公開鍵暗号方式を使った方式で、かつ、その通信が盗聴されなければ）、攻撃者は、それ以降サーバに成りすましてクライアントと相互認証を行うことはできなくなる。
【００１１】
このような認証システムでは、通常は、秘密情報が見られたり、書き換えられたりしないように、耐タンパモジュールなどが用いられるが、そのような特殊なデバイスを利用せずに、ネットワーク上のあらゆる攻撃と“Ｒｅｐｌａｃｅｍｅｎｔ”攻撃や“ＫＣＩ”攻撃を含む情報漏洩を用いる攻撃まで防ぐことができる認証システムが所望される。
【００１２】
本発明は、このような従来における問題点を解決するためになされたものであり、本発明の目的は、パスワードの短い系列とユーザの端末装置およびサーバの認証装置に記録された記録情報を使って認証を行う二要素認証システムにおいて、“Ｒｅｐｌａｃｅｍｅｎｔ”攻撃と“ＫＣＩ”攻撃に対して、安全性を十分に保証できる二要素認証システムを提供することにある。
【課題を解決するための手段】
【００１３】
上記のような目的を達成するため、本発明による二要素認証システムは、基本的な構成として、ユーザから入力された短い系列（パスワードなど）とユーザの端末装置およびサーバの認証装置の格納装置に記録されている記録情報の秘密情報を用いて、ユーザの端末装置とサーバの認証装置との間に相互認証しながらセッション鍵を確立する二要素認証システムにおいて、初期化処理により短い系列に基づいて記録情報を作成してユーザの端末装置およびサーバの認証装置の格納装置に記録し、ユーザの端末装置は短い系列と格納装置に記録した記録情報を用いて、サーバの認証装置は格納装置に記録した記録情報を用いて認証プロトコルを実行する。更に、セッション鍵を生成するたびに秘密値更新器により記録情報を変更する。
【００１４】
具体的には、本発明の二要素認証システムは、入力された短い系列とユーザの端末装置およびサーバの認証装置にそれぞれ保存されている記録情報を用いて、ユーザの端末装置とサーバの認証装置との間で相互認証しながらセッション鍵を確立する二要素認証システムであって、ユーザの端末装置とサーバの認証装置においてそれぞれに前記短い系列に基づいて作成された記録情報を記録する格納装置と、ユーザの端末装置とサーバの認証装置においてそれぞれに前記格納装置に記録された記録情報を用いて認証プロトコルの実行を行い、ユーザの端末装置とサーバの認証装置との間で相互認証しながらセッション鍵を確立する処理を行う認証処理部と、前記セッション鍵を生成するたびに格納装置に記録されている記録情報を変更する秘密値更新器とを備えることを特徴とするシステムである。
【００１５】
本発明の二要素認証システムにおいては、前記格納装置に記録された記録情報には、乱数が含まれており、認証処理部は、乱数の値に基づいて認証プロトコルの実行を行うように構成される。
【００１６】
本発明の二要素認証システムにおいては、更に、ユーザの端末装置とサーバの認証装置においてそれぞれに前記短い系列に基づいて記録情報を作成する初期化処理部を備えており、前記格納装置は前記初期化処理部により作成された記録情報を初期値として記録するように構成される。
【００１７】
本発明の二要素認証システムにおいては、前記格納装置に記録された記録情報には、カウント値が含まれており、秘密値更新器は、前記カウント値に基づいて格納装置に記録する記録情報の更新を管理するように構成される。
【００１８】
本発明の二要素認証システムのひとつの態様として、認証処理部は、ユーザの端末装置とサーバの認証装置との間で相互認証し、セッション鍵を確立する処理を、ＲＳＡ公開鍵に基づく認証プロトコルの処理により行うようにし、または、認証処理部は、ユーザの端末装置とサーバの認証装置との間で相互認証し、セッション鍵を確立する処理は、ＤＨ鍵共有プロトコルに基づく認証処理により行うように構成される。
【００１９】
また、本発明の二要素認証システムは、別の態様として、入力された短い系列とユーザの端末装置およびサーバの認証装置にそれぞれ保存されている記録情報を用いて、ユーザの端末装置とサーバの認証装置との間で相互認証しながらセッション鍵を確立する二要素認証システムであって、ユーザの端末装置において記録情報を記録する第１格納装置と、サーバの認証装置において記録情報を記録する第２格納装置と、ユーザの端末装置において第１格納装置に記録された記録情報を用いて認証プロトコルの実行を行い、サーバの認証装置との間で相互認証しながらセッション鍵を確立する処理を行う第１認証処理部と、サーバの認証装置において前記第２格納装置に記録された記録情報を用いて認証プロトコルの実行を行い、ユーザの端末装置との間で相互認証しながらセッション鍵を確立する処理を行う第２認証処理部と、ユーザの端末装置において前記セッション鍵を生成するたびに第１格納装置に記録されている記録情報を変更する第１秘密値更新器と、サーバの認証装置において前記セッション鍵を生成するたびに第２格納装置に記録されている記録情報を変更する第２秘密値更新器とを備えるように構成されても良い。この場合に、ユーザの端末装置の第１格納装置に格納する記録情報は、乱数、カウント値、及び公開鍵であり、サーバの認証装置の第２格納装置に格納する記録情報は、カウント値、認証データ、及び秘密鍵である。
【００２０】
また、本発明は、更に別の態様として、ユーザの端末装置に短い系列を入力して、ユーザの端末装置とサーバの認証装置の間において相互に認証子を生成して送信し、相互の認証子に基づく相互認証を行い、認証結果によりユーザの端末装置とサーバの認証装置の間でセッション鍵の確立を行い、セッション鍵が生成されるごとに秘密値更新器により、前記記録情報を更新する二要素認証方法として利用されても良い。
【発明の効果】
【００２１】
このような特徴を有する本発明の二要素認証システムによれば、耐タンパモジュールのような特殊なデバイスを利用しなくても、ネットワーク上のあらゆる攻撃と“Ｒｅｐｌａｃｅｍｅｎｔ”攻撃や“ＫＣＩ”攻撃を含む情報漏洩を用いる攻撃に対して安全性を保障することができる。
【発明を実施するための最良の形態】
【００２２】
以下、図面を参照しつつ、本発明の好適な実施例について説明する。ただし、本発明は以下の各実施例に限定されるものではなく、例えばこれら実施例の構成要素同士を適宜組み合わせてもよい。
【００２３】
図１は、本発明の二要素認証システムの全体の構成を説明する図である。図２は、短い系列と記録情報を用いた二要素認証システムにおける初期化処理を説明する図であり、図３は、短い系列と記録情報を用いた二要素認証システムにおけるｊ番目プロトコル実行の構成を示す図である。
【００２４】
図１において、１００は二要素認証システム、１０１はインターネットなどの通信路、２００はユーザの端末装置、２０１は記録情報の格納装置、２０２は認証処理部、２０３は秘密更新器、３００はサーバの認証装置、３０１は記録情報の格納装置、３０２は認証処理部、３０３は秘密更新器である。
【００２５】
二要素認証システム１００は、ユーザの端末装置２００とサーバの認証装置３００との間をインターネットなどの通信路１０１により結合してデータ通信を行う場合に、その間で相互に認証処理を行う認証システムである。システム要素として、ユーザの端末装置２００には、入力されたパスワードに基づいて初期化処理により作成された記録情報を記録する格納装置２０１と、サーバの認証装置３００との間で認証処理を行う認証処理部２０２と、格納装置２０１に格納された記録情報ＣＳｊを所定の演算式により更新する秘密値更新器２０３が設けられる。また、サーバの認証装置３００は、初期化処理により作成された記録情報を記録する格納装置３０１と、ユーザの端末装置２００との間で認証処理を行う認証処理部３０２と、格納装置３０１に格納された記録情報ＳＳｊを所定の演算式により更新する秘密値更新器３０３が設けられる。
【００２６】
図２に示すように、ユーザの端末装置２００に入力されたパスワードに基づいて、安全な通信路１１０により初期化処理を行い、ユーザの端末装置２００とサーバの認証装置３００とにおいて、それぞれに記録情報ＣＳ１および記録情報ＳＳ１を生成する。次に、図３に示すように、初期化処理の後に、ｊをカウント値とすると、ｊ番目の認証プロトコルを実行する。ユーザの端末装置２００とサーバの認証装置３００において、認証処理部２０２，３０２がそれぞれの格納装置２０１，３０１に記録されている記録情報（ＣＳｊ，ＳＳｊ）を用いて、認証プロトコルの実行を行い、ユーザの端末装置２００とサーバの認証装置３００との間で相互認証しながらセッション鍵１２０，１３０を確立する処理を行う。セッション鍵１２０、１３０が確立されると、秘密値更新器２０３，３０３は、次回の認証処理のために、格納装置２０１，３０１に記録されている記録情報（ＣＳｊ，ＳＳｊ）を変更する。
【００２７】
二要素認証システムにおいて、カウンタ値ｊはｊ≧１になるような整数である。二要素認証システム１００におけるｊ番目プロトコル実行では、ユーザの端末装置２００は入力された短い系列（例えば、パスワードなど）と、ユーザの端末装置２００の格納装置２０１で保持された記録情報ＣＳｊに基づいて認証処理を実行し、また、サーバの認証装置３００が、格納装置３０１に保持されている記録情報ＳＳｊにより認証処理を実行し、ユーザの端末装置２００の認証処理部２０２と、サーバの認証装置３００の認証処理部３０２との間で相互認証して、その相互認証が成功した時、同じセッション鍵１２０，１３０を確保する。セッション鍵を生成するたびに、ユーザの端末装置２００およびサーバの認証装置３００においては、それぞれの秘密値更新器２０２，３０２により格納装置２０１，３０１に保持された記録情報が変更される。
【００２８】
＜第１実施例＞
次に、第１実施例として、ＲＳＡ公開鍵暗号方式を使った二要素認証システムの実施例を説明するが、その前に、いくつかの背景知識、及び以下の説明において用いる記号について説明しておく。
【００２９】
公開鍵暗号方式では、公開鍵（ＰｕｂＫ）および秘密鍵（ＰｒｉＫ）の対（ＰｕｂＫ，ＰｒｉＫ）が設定されている。公開鍵は秘密ではなく、誰でも入手できるように公開される。それに対して、秘密鍵は所有者のみが有している秘密の状態とされる。暗号化は、公開鍵（ＰｕｂＫ）を用いて、暗号化関数Ｅｎｃによりメッセージｍを、Ｃ＝ＥｎｃＰｕｂＫ（ｍ）となるような暗号文Ｃを生成することである。暗号文Ｃは、秘密鍵（ＰｒｉＫ）を用いてのみ、復号化関数Ｄｅｃによって、ｍ＝ＤｅｃＰｒｉＫ（Ｃ）の演算により、メッセージｍが復号できる。暗号文Ｃは、公開鍵（ＰｕｂＫ）を用いては復号できない。
【００３０】
公開鍵署名方式では、検証鍵（ＶＫ）および署名鍵（ＳＫ）の対（ＶＫ，ＳＫ）が設定されている。公開鍵暗号方式の公開鍵と同じように、検証鍵は秘密ではなく、誰でも入手できるように公開される。それに対して、署名鍵は所有者（署名者）のみが有している秘密の状態とされる。署名化は、署名鍵（ＳＫ）を用いて署名化関数Ｓｉｇｎにより、メッセージｍを、ｓ＝ＳｉｇｎＳＫ（ｍ）となるようにして、署名文（ｍ，ｓ）を生成することである。署名文の検証は、検証鍵（ＶＫ）を用いて、検証化関数Ｖｅｒによって、ＶｅｒＶＫ（ｍ，ｓ）を求めることで検証できる。検証できた場合は、その署名文（ｍ，ｓ）が、正当な署名者により生成されたことを意味し、そうではない場合は、（ｍ，ｓ）が正しい署名文ではないことになる。
【００３１】
周知のＲＳＡ公開鍵方式においては、公開鍵および秘密鍵の生成には素数が用いられる。例えば、公開鍵は（ｅ，Ｎ）であり、秘密鍵は（ｄ，Ｎ）である。この場合のＮは、２つのランダムに選択された大きな素数ｐと素数ｑの積であり（すなわち、Ｎ＝ｐ・ｑ）、ｅは、ｅと（ｐ−１）・（ｑ−１）の最大公約数が１であるような任意の数（例えば、ｅ＝３あるいはｅ＝２１６＋１）である。また、ｄは、「ｅ−１  ｍｏｄ  （（ｐ−１）・（ｑ−１））」である。安全性を最大化するには、素数ｐと素数ｑを同じ長さにする。
【００３２】
一般に、暗号システムでは、その安全性のレベルを記述するセキュリティパラメータｋが用いられる。セキュリティパラメータｋに基づいて公開鍵などの数値が定められて、システムが設計される。ＲＳＡ公開鍵暗号化方式において、例えば、セキュリティパラメータｋをＬにすると、２Ｌ−１＜Ｎ＜２Ｌの整数Ｎを用いる。メッセージｍ（ｍ∈ＺＮ＊）に対して、暗号化関数Ｅｎｃは、「ＥｎｃＰｕｂＫ（ｍ）＝ｍｅ  ｍｏｄ  Ｎ」であり、復号化関数Ｄｅｃは、「ＤｅｃＰｒｉＫ（Ｃ）＝Ｃｄ  ｍｏｄ  Ｎ」である。この場合、暗号文Ｃと公開鍵（ｅ，Ｎ）が与えられた時、メッセージｍを求めることが計算量的に困難であることから安全性を確保している。つまり、ＲＳＡ公開鍵暗号方式は、大きな数Ｎの素因数分解が難しいことから安全性を得ている。
【００３３】
次に説明する実施例の二要素認証システムでは、ハッシュ関数Ｈのセキュリティパラメータをｋとする。１／２ｋは無視できるほど小さいと仮定する。また、集合｛０，１｝＊は、有限の２進数のストリングの集合を示し、集合｛０，１｝ｋは長さｋの２進数のストリングの集合を示す。ハッシュ関数Ｈは集合｛０，１｝＊の入力から集合｛０，１｝ｋの出力を得る安全な一方向関数であり、ハッシュ関数のＦＤＨ（Ｆｕｌｌ−Ｄｏｍａｉｎ  Ｈａｓｈ）関数Ｇは集合｛０，１｝＊の入力から、ＺＮ＊＼｛１｝の出力を出す安全な一方向関数である。また、乱数発生器から発生される乱数は、乱数ｔ（ｔ∈ＺＮ＊）を無作為に生成する。‖は値を連結（ｃｏｎｃａｔｅｎａｔｉｏｎ）するという意味である。また、ＣとＳｉはそれぞれユーザとサーバを表すＩＤである。
【００３４】
二要素認証システムの初期化の処理では、図２に示したように、ユーザの端末装置２００はユーザから入力されたパスワードｐｗに基づいて、サーバの認証装置３００と安全な通信路１１０を用いて（例えば、直接に登録したり、郵便で送付したり、あるいは電話で知らせるなどして）初期化処理を行い、ユーザの端末装置２００は、内部にあるメモリまたは格納装置に第１番目の認証プロトコル実行のための記録情報「ＣＳ１」１４０を保存し、また、サーバの認証装置３００は、内部にあるメモリあるいはデータベースの格納装置に第１番目の認証プロトコル実行のための記録情報「ＳＳ１」１５０を保存する。
【００３５】
二要素認証システムの認証処理では、図３に示すように、ｊをｊ≧１になるような整数として、パスワードなどの入力された短い系列とユーザの端末装置およびサーバの認証装置にそれぞれ保存されている記録情報「ＣＳｊ」、記録情報「ＳＳｊ」を用いて、第ｊ番目の認証プロトコルの実行を行い、ユーザの端末装置とサーバの認証装置との間で相互認証しながらセッション鍵（１２０，１３０）を確立する。そして、セッション鍵が確立した場合において、更に、次の認証プロトコル実行のために、図１に示すように、秘密値更新器（２０３，３０３）により格納装置（２０１，３０１）に記録されている記録情報（ＣＳｊ，ＳＳｊ）を変更する。秘密値更新器（２０３，３０３）による記録情報（ＣＳｊ，ＳＳｊ）の更新は、セッション鍵（１２０，１３０）を生成するたびに格納装置（２０１，３０１）に記録されている記録情報（ＣＳｊ，ＳＳｊ）が変更される。これにより、十分な安全性が保証される。
【００３６】
具体的に第１実施例のＲＳＡ公開鍵暗号方式を使った二要素認証システムのシステム構成の一例について、（１）二要素認証システム１、（２）二要素認証システム２、および（３）二要素認証システム３の３つのシステム構成の例について説明する。
【００３７】
（１）二要素認証システム１：
図４は、二要素認証システム１の初期化処理を説明する図である。図４には、二要素認証システム１において、初期化処理で用いられるユーザの端末装置２００及びサーバの認証装置３００におけるシステム要素が示されている。図４を参照して、ユーザの端末装置２００とサーバの認証装置３００との間の二要素認証システムの初期化動作を説明する。
【００３８】
ユーザの端末装置２００における初期化処理では、認証データ生成器２１１が、乱数発生器２１０によって、ランダムに発生させた乱数ｓｉ１（ｓｉ１∈｛０，１｝ｋ）と、ユーザから入力されたパスワードｐｗとを入力して、これに基づいて認証データｖｉ１を計算して生成する。認証データの計算はハッシュ関数Ｈを用いて「ｖｉ１＝ｓｉ１＋Ｈ（４‖Ｃ‖Ｓｉ‖ｐｗ）」により計算する。計算により生成された認証データｖｉ１は、サーバの認証装置３００に送信する。このとき、ユーザの端末装置２００では、カウンタ（カウント値）１と、乱数発生器２１０により発生させた乱数ｓｉ１と、サーバの認証装置３００から受信したＲＳＡ公開鍵（ｅ，Ｎ）を出力し、格納装置２０１に記録情報「ＣＳ１」１４１として保存する。この場合に、ユーザの端末装置２００の内部にあるメモリまたは格納装置２０１には、記録情報「ＣＳ１」１４１とするデータ「１，ｓｉ１，（ｅ，Ｎ）」が保存される。
【００３９】
サーバの認証装置３００においては、初期化の処理として、図４の右側に示されるように、ＲＳＡ鍵生成器３１０が、セキュリティパラメータＬに基づき、所定の演算式によって公開鍵（ｅ，Ｎ）と秘密鍵（ｄ，Ｎ）を生成して出力する。ここで生成された公開鍵（ｅ，Ｎ）は、ユーザの端末装置２００に送信される。公開鍵（ｅ，Ｎ）のｅは８０ビット以上の素数である。サーバの認証装置３００は、カウンタ（カウント値）１と、ユーザの端末装置２００から受信した認証データｖｉ１と、ＲＳＡ鍵生成器３１０により生成された秘密鍵（ｄ，Ｎ）とを共に、記録情報「ＳＳ１」１５１として保存する。すなわち、この場合には、サーバの認証装置３００の内部にあるメモリあるいはデータベースの格納装置３０１に、記録情報「ＳＳ１」１５１として、データ「１，ｖｉ１，（ｄ，Ｎ）」が保存される。
【００４０】
図５および図６は、二要素認証システム１の認証プロトコルの実行処理を説明する図である。図５には、二要素認証システム１のユーザの端末装置におけるｊ番目プロトコル実行のシステム要素が示されており、図６には、二要素認証システム１のサーバの認証装置におけるｊ番目プロトコル実行のシステム要素が示されている。図５および図６において、ｊはｊ≧１になるような整数である。二要素認証システム１のｊ番目プロトコル実行では、ユーザの端末装置２００はユーザから入力されたパスワードｐｗと保持された記録情報ＣＳｊに基づいて、記録情報ＳＳｊを保持しているサーバの認証装置と安全ではない通信路（例えば、インタネットなど）を用いてお互いに相互認証し、その相互認証が成功した時、同じセッション鍵ＳＫｊを確保する。
【００４１】
まず、図５を参照する。前述した初期化を行った後（ｊ＝１の時）あるいは二要素認証システムのｊ−１番目プロトコル実行を行った後（すなわち、ＣＳｊ＝（ｊ，ｓｉｊ，（ｅ，Ｎ），［ＳＫ］）と、ＳＳｊ＝（ｊ，ｖｉｊ，（ｄ，Ｎ），［ＶＫ］）の時）、ユーザの端末装置２００とサーバの認証装置３００との間で二要素認証システム１のｊ番目プロトコル実行を行う動作を説明する。
【００４２】
図５は、二要素認証システム１のシステム例のユーザの端末装置２００のシステム要素を示している。二要素認証システム１のｊ番目プロトコル実行の動作について説明する。初期化処理の後は、ユーザの端末装置２００は記録情報「ＣＳｊ」１４１として、データ「ｊ，ｓｉｊ，（ｅ，Ｎ）」を内部にあるメモリに保持している。
【００４３】
認証データ生成器２１１は、ユーザから入力されたパスワードｐｗと、メモリ２１２から読み出した乱数ｓｉｊを入力として、認証データｖｉｊを計算して出力する。認証データｖｉｊの計算では、ハッシュ関数Ｈを用いて、計算式「ｖｉｊ＝ｓｉｊ＋Ｈ（４‖Ｃ‖Ｓｉ‖ｐｗ）」を計算して出力する。マスク生成器２１３は、認証データ生成器２１１から生成された認証データｖｉｊとメモリ２１２から読み出したカウンタ（カウント値）ｊを入力として、マスクＷ＝Ｇ（ｊ，ｖｉｊ）を計算して出力する。ＲＳＡ暗号演算器２１５は、乱数発生器２１０によりランダムに発生させた乱数ｘ１，ｘ２（ｘ１，ｘ２∈ＺＮ＊）と、メモリ２１２から読み出した公開鍵（ｅ，Ｎ）を入力として、暗号文「ｙ１＝ｘ１ｅ  ｍｏｄ  Ｎ」と、暗号文「ｙ２＝ｘ２ｅ  ｍｏｄ  Ｎ」を計算して出力する。結合器２１４は、マスク生成器２１３から生成されたマスクＷと、乱数発生器２１０により発生させた乱数ｘ２と、ＲＳＡ暗号演算器２１５から出力された暗号文「ｙ１」を入力として、マスクされた暗号文「ｚ＝ｙ１・ｘ２・Ｗ  ｍｏｄ  Ｎ」を計算して出力する。ユーザの端末装置２００は、クライアントＩＤの情報であるＣと、メモリから読み出したカウンタ（カウント値）ｊと、結合器２１４により出力されたマスク暗号文ｚと、ＲＳＡ暗号演算器２１５により出力された暗号文「ｙ２」の各データ「Ｃ，ｊ，ｚ、ｙ２」をサーバの認証装置３００へ送信する。
【００４４】
続いて、認証結果判断部２１６の判断のデータ処理により、サーバの認証装置３００から受信したデータ「ＶＳｉ」が正しく生成された値であるかどうかを確認する。認証結果判断部２１６は、メモリ２１２から読み出したカウンタ（カウント値）ｊと、結合器２１４により出力されたマスクされた暗号文ｚと、ＲＳＡ暗号演算器２１５により出力された暗号文「ｙ２」と、認証データ生成器２１１から生成された認証データｖｉｊと、乱数発生器２１０により発生させた乱数ｘ１，ｘ２とを入力として、ハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２）を計算して、サーバの認証装置３００から受信したデータ「ＶＳｉ」と比較する。ここで、ハッシュ関数Ｈの代わりにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使ってもよい。認証結果判断部２１６の判断処理において、データ「ＶＳｉ」と計算したハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２）が一致しないことを判断した場合には、認証結果判断部２１６は、エラーメッセージ発生器２１９に対して、一致しないことを通知する。
【００４５】
これを受けて、エラーメッセージ発生器２１９はエラーメッセージを生成して処理を中断する。一方、認証結果判断部２１６において。データ「ＶＳｉ」とハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２）が一致した場合は、サーバの認証装置３００を正当な装置として認証して、認証結果判断部２１６から「ＩｎｐｕｔＭｓｇ」を出力する。ここでの「ＩｎｐｕｔＭｓｇ」のデータは、計算式「Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２」の出力データである。認証子生成器２１７は、認証結果判断部２１６から出力されて入力された「ＩｎｐｕｔＭｓｇ」から、認証子ＶＣを計算式「ＶＣ＝Ｈ（２‖ＩｎｐｕｔＭｓｇ）」により計算して出力する。ユーザの端末装置２００は、認証子生成器２１６により出力された認証子ＶＣを、サーバの認証装置３００へ送信する。セッション鍵生成器２１８は、認証結果判断部２１６から出力された「ＩｎｐｕｔＭｓｇ」を入力として、セッション鍵ＳＫｉｊを計算式「ＳＫｉｊ＝Ｈ（３‖ＩｎｐｕｔＭｓｇ）」の演算により計算して生成し、生成されたセッション鍵ＳＫｉｊを出力する。秘密値更新器２０３は、メモリ２１２から読み出した乱数ｓｉｊと、認証結果判断部２１６から出力された「ＩｎｐｕｔＭｓｇ」を入力として、ｊ＋１番目の乱数ｓｉ（ｊ＋１）を、演算式「ｓｉ（ｊ＋１）＝ｓｉｊ＋Ｈ（４‖ＩｎｐｕｔＭｓｇ）」の計算により生成し、カウンタ（カウント値）ｊ＋１とともに出力する。ユーザの端末装置２００においては、メモリ２１２に保持している記録情報の一部のデータの現在のカウンタ（カウント値）と乱数の組である「ｊ，ｓｉｊ」を、秘密値更新器２０３により出力された次のカウンタ（カウント値）と乱数の組である「ｊ＋１，ｓｉ（ｊ＋１）」に書き換えて、機密値である記録情報を更新する。
【００４６】
図６は、二要素認証システム１のシステム例のサーバの認証装置３００のシステム要素を示している。二要素認証システム１のｊ番目プロトコル実行の動作について説明する。この時、サーバの認証装置３００は、認証プロトコル実行のための記録情報ＳＳｊのデータ「ｊ，ｖｉｊ，（ｄ，Ｎ）」を格納装置３０１の内部にあるメモリあるいはデータベース３１３に保持している。
【００４７】
サーバの認証装置３００において、カウンタ正確性判断部３１１は、ユーザの端末装置２００から受信したカウンタ（カウント値）ｊの正確性を確認する。カウンタ正確性判断部３１１は、データベース３１３から読み出したカウンタ（カウント値）ｊを、ユーザの端末装置２００から受信したカウンタ（カウント値）ｊと比較して一致しない場合、エラーメッセージ発生器３１２に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器３１２はエラーメッセージを生成して処理を中断する。一方、カウンタ正確性判断部３１１の判断処理において、データベース３１３から読み出したカウンタ（カウント値）ｊをユーザの端末装置２００から受信したカウンタ（カウント値）ｊと比較して一致した場合は、続けて次の処理を行う。
【００４８】
マスク生成器３１５は、データベース３１３から読み出したカウンタ（カウント値）ｊと認証データｖｉｊを入力として、マスクＷ＝Ｇ（ｊ，ｖｉｊ）を計算して出力する。ＲＳＡ復号演算器３１４は、ユーザの端末装置２００から受信した暗号文ｙ２とデータベース３１３から読み出したＲＳＡ秘密鍵（ｄ，Ｎ）を入力として、乱数ｘ２を、計算式「ｘ２＝ｙ２ｄ  ｍｏｄ  Ｎ」により計算して出力する。分離器３１６は、ユーザの端末装置２００から受信したマスクした暗号文ｚと、ＲＳＡ復号演算器３１４により出力された乱数ｘ２と、マスク生成器３１５により生成されたマスクＷを入力として、暗号文ｙ１を、計算式「ｙ１＝ｚ／（ｘ２・Ｗ）  ｍｏｄ  Ｎ」により計算して出力する。再び、ＲＳＡ復号演算器３１４は、分離器３１６により出力された暗号文ｙ１と、データベース３１３から読み出したＲＳＡ秘密鍵（ｄ，Ｎ）を入力として、乱数ｘ１を、計算式「ｘ１＝ｙ１ｄ  ｍｏｄ  Ｎ」により計算して、乱数ｘ２と共に出力する。認証子生成器３１７は、ユーザの端末装置２００から受信したデータ「ｊ，ｚ，ｙ２」とデータベース３１３から読み出した認証データｖｉｊと、ＲＳＡ復号演算器３１４により出力された乱数ｘ１，ｘ２を入力として、認証子ＶＳｉを、計算式「ＶＳｉ＝Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２）」により計算して、「ＩｎｐｕｔＭｓｇ」と共に出力する。ここでの「ＩｎｐｕｔＭｓｇ」は、計算式「Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２」により計算されたデータである。サーバの認証装置３００は、認証子生成器３１７により計算して得られた認証データＶＳｉとサーバのＩＤの情報である「Ｓｉ」をユーザの端末装置２００へ送信する。
【００４９】
認証結果判断部３１８は、認証子生成器３１７から出力された「ＩｎｐｕｔＭｓｇ」を入力として、ハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）を計算して、ユーザの端末装置２００から受信した認証子ＶＣと比較する。ここで、ハッシュ関数Ｈの代わりにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使ってもよい。認証結果判断部３１８において認証子ＶＣと、計算したハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）とが一致しない場合、認証結果判断部３１８は、エラーメッセージ発生器３２０に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器３２０はエラーメッセージを生成して処理を中断する。
【００５０】
一方、認証結果判断部３１８において、認証子ＶＣと計算したハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）が一致した場合は、ユーザの端末装置２００を正当な装置として認証する。セッション鍵生成器３１９は、認証子生成器３１７から出力された「ＩｎｐｕｔＭｓｇ」を入力として、セッション鍵ＳＫｉｊを、計算式「ＳＫｉｊ＝Ｈ（３‖ＩｎｐｕｔＭｓｇ）」の計算により生成して出力する。秘密値更新器３０３は、データベース３１３から読み出した認証データｖｉｊと、認証子生成器３１７から入力された「ＩｎｐｕｔＭｓｇ」を入力として、ｊ＋１番目の認証データｖｉ（ｊ＋１）を、計算式「ｖｉ（ｊ＋１）＝ｖｉｊ＋Ｈ（４‖ＩｎｐｕｔＭｓｇ）」により計算して、カウンタ（カウント値）ｊ＋１と共に出力する。サーバの認証装置３００は、データベース３１３に保持している現在のカウンタ（カウント値）と認証データの組である「ｊ，ｖｉｊ」を、秘密値更新器３０３により出力された次のカウンタ（カウント値）と認証データの組である「ｊ＋１，ｖｉ（ｊ＋１）」に書き換える。
【００５１】
（２）二要素認証システム２：
次に、二要素認証システム２のシステム例について説明する。図７および図８は、二要素認証システム２の初期化処理を説明する図である。図７に初期化処理で用いられるユーザの端末装置２００のシステム要素が示されており、図８に初期化処理で用いられるサーバの認証装置３００システム要素が示されている。図７および図８を参照して、ユーザの端末装置２００とサーバの認証装置３００との間の二要素認証システムの初期化動作を説明する。
【００５２】
二要素認証システム２におけるユーザの端末装置２００の初期化の動作について説明する。図７に示すように、ユーザの端末装置２００の認証データ生成器２２１は、乱数発生器２２０によりランダムに発生させた乱数ｓｉ１（ｓｉ１∈｛０，１｝ｋ）と、ユーザから入力されたパスワードｐｗとを入力して、認証データｖｉ１を計算して出力する。認証データｖｉ１の計算は、ハッシュ関数を用いて計算式「ｖｉ１＝ｓｉ１＋Ｈ（４‖Ｃ‖Ｓｉ‖ｐｗ）」により計算する。署名鍵生成器２２２は、セキュリティパラメータに基づいて、検証鍵ＶＫと署名鍵ＳＫの対（ＶＫ，ＳＫ）を生成して出力する。ユーザの端末装置２００からサーバの認証装置３００へは、認証データ生成器２２１から生成された認証データｖｉ１と署名鍵生成器２２２から生成された検証鍵ＶＫを、サーバの認証装置３００における記録情報生成のために送信する。ユーザの端末装置２００においては、カウンタ（カウント値）１と、乱数発生器２２０により発生させた乱数ｓｉ１と、サーバの認証装置３００から受信したＲＳＡ公開鍵（ｅ，Ｎ）と、署名鍵生成器２２２から生成された署名鍵ＳＫとを、記録情報「ＣＳ１」１４２として保存する。この場合に、ユーザの端末装置２００の内部メモリの格納装置２０１には、記録情報「ＣＳ１」１４２としてデータ「１，ｓｉ１，（ｅ，Ｎ），ＳＫ」が保存される。
【００５３】
次に、二要素認証システム２におけるサーバの認証装置３００の初期化の動作について説明する。図８に示すように、サーバの認証装置３００においては、ＲＳＡ鍵生成器３２１が、セキュリティパラメータＬに基づいて、公開鍵（ｅ，Ｎ）と秘密鍵（ｄ，Ｎ）を生成して出力する。公開鍵（ｅ，Ｎ）はユーザの端末装置２００へ送信する。サーバの認証装置３００は、カウンタ（カウント値）１と、ユーザの端末装置２００から受信した認証データｖｉ１および検証鍵ＶＫと、ＲＳＡ鍵生成器３２１により生成された秘密鍵（ｄ，Ｎ）とを、記録情報「ＳＳ１」１５２として保存する。この場合に、サーバの認証装置３００の内部メモリあるいはデータベースの格納装置３０１には、記録情報「ＳＳ１」１５２として、データ「１，ｖｉ１，（ｄ，Ｎ），ＶＫ」が保存される。
【００５４】
図９および図１０は、二要素認証システム２の認証プロトコルの実行処理を説明する図である。図９には、二要素認証システム２のユーザの端末装置におけるｊ番目プロトコル実行のシステム要素が示されており、図１０には、二要素認証システム２のサーバの認証装置におけるｊ番目プロトコル実行のシステム要素が示されている。図９および図１０において、ｊはｊ≧１になるような整数である。二要素認証システムのｊ番目プロトコル実行では、ユーザの端末装置２００はユーザから入力されたパスワードｐｗと保持された記録情報ＣＳｊに基づいて、記録情報ＳＳｊを保持しているサーバの認証装置と安全ではない通信路を用いてお互いに相互認証し、その相互認証が成功した時、同じセッション鍵ＳＫを確保する。
【００５５】
図９を参照して、二要素認証システム２のユーザの端末装置２００のｊ番目プロトコル実行の動作について説明する。初期化処理の後は、ユーザの端末装置２００は記録情報ＣＳｊとして、データ「ｊ，ｓｉｊ，（ｅ，Ｎ），ＳＫ」を内部にあるメモリに保持している。
【００５６】
認証データ生成器２２１は、ユーザから入力されたパスワードｐｗと、メモリ２０４から読み出した乱数ｓｉｊを入力として、認証データｖｉｊを計算式「ｖｉｊ＝ｓｉｊ＋Ｈ（４‖Ｃ‖Ｓｉ‖ｐｗ）」により計算して出力する。マスク生成器２２３は、認証データ生成器２２１から生成された認証データｖｉｊと、メモリ２０４から読み出したカウンタ（カウント値）ｊを入力として、マスクＷ＝Ｇ（ｊ，ｖｉｊ）を計算して出力する。そして、ＲＳＡ暗号演算器２２５は、乱数発生器２２０によって、ランダムに発生させた乱数ｘ（ｘ∈ＺＮ＊）と、メモリ２０４から読み出した公開鍵（ｅ，Ｎ）を入力として、暗号文ｙを計算式「ｙ＝ｘｅ  ｍｏｄ  Ｎ」により計算して出力する。結合器２２４は、マスク生成器２２３から生成されたマスクＷと、ＲＳＡ暗号演算器２２５から出力された暗号文ｙを入力として、マスクされた暗号文ｚを計算式「Ｚ＝ｙ・Ｗ  ｍｏｄ  Ｎ」により計算して出力する。ユーザの端末装置２００は、クライアントＩＤの情報であるＣと、メモリ２０４から読み出したカウンタ（カウント値）ｊと、結合器２２４により出力されたマスクされた暗号文ｚをサーバの認証装置３００へ送信する。
【００５７】
続いて、認証結果判断部２２６は、サーバの認証装置３００から受信した認証子ＶＳｉが正しく生成された値であるかどうかを確認する。認証結果判断部２２６は、メモリ２０４から読み出したカウンタ（カウント値）ｊと、結合器２２４により出力されたマスクされた暗号文ｚと、認証データ生成器２２１から生成された認証データｖｉｊと、乱数発生器２２０により発生させた乱数ｘを入力して、ハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｖｉｊ‖ｘ）を計算して、サーバの認証装置３００から受信した認証子ＶＳｉと比較する。ここで、ハッシュ関数Ｈの代わりにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使ってもよい。認証結果判断部２２６において、認証子ＶＳｉとハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｖｉｊ‖ｘ）が一致しない場合、認証結果判断部２２６は、エラーメッセージ発生器２２９に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器２２９はエラーメッセージを生成して、処理を中断する。
【００５８】
一方、認証結果判断部２２６の判断処理において、認証子ＶＳｉとハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｖｉｊ‖ｘ）が一致した場合は、サーバの認証装置３００を正当な装置として認証して、「ＩｎｐｕｔＭｓｇ」を出力する。ここでの「ＩｎｐｕｔＭｓｇ」のデータは、計算式「１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｖｉｊ‖ｘ」の出力データである。署名生成器２２７は、メモリ２０４から読み出した署名鍵ＳＫと、認証結果判断部２２６から入力された「ＩｎｐｕｔＭｓｇ」から署名文ＶＣを、計算式「ＶＣ＝ＳｉｇｎＳＫ（ｍ）」により計算して出力する。ここで、メッセージｍはハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）である。ユーザの端末装置２００は、署名生成器２２７により出力された署名文ＶＣをサーバの認証装置３００へ送信する。セッション鍵生成器２２８は、認証結果判断部２２６から入力された「ＩｎｐｕｔＭｓｇ」を入力として、セッション鍵ＳＫｉｊを計算式「ＳＫｉｊ＝Ｈ（３‖ＩｎｐｕｔＭｓｇ）」の計算により生成して出力する。秘密値更新器２０３は、メモリ２０４から読み出した乱数ｓｉｊと、認証結果判断部２２６から入力された「ＩｎｐｕｔＭｓｇ」を入力として、ｊ＋１番目の乱数ｓｉ（ｊ＋１）を、計算式「ｓｉ（ｊ＋１）＝ｓｉｊ＋Ｈ（４‖ＩｎｐｕｔＭｓｇ）」により計算し、カウンタ（カウント値）ｊ＋１とともに出力する。ユーザの端末装置２００は、メモリ２０４に保持している現在のカウンタ（カウント値）と乱数の組である「ｊ，ｓｉｊ」を、秘密値更新器２０３により出力された次のカウンタ（カウント値）と乱数の組である「ｊ＋１，ｓｉ（ｊ＋１）」に書き換える。
【００５９】
図１０は、二要素認証システム２のサーバの認証装置３００のｊ番目プロトコル実行のシステム要素を示している。図１０を参照して、二要素認証システム２のｊ番目プロトコル実行の動作について説明する。この時、サーバの認証装置３００は、認証プロトコル実行のための記録情報ＳＳｊのデータ「ｊ，ｖｉｊ，（ｄ，Ｎ），ＶＫ」を格納装置３０１の内部にあるメモリあるいはデータベース３２３に保持している。
【００６０】
サーバの認証装置３００において、カウンタ正確性判断部３２２は、ユーザの端末装置２００から受信したカウンタ（カウント値）ｊの正確性を確認する。カウンタ正確性判断部３２２は、データベース３２３から読み出したカウンタ（カウント値）ｊを、ユーザの端末装置２００から受信したカウンタ（カウント値）ｊと比較して一致しない場合、エラーメッセージ発生器３３０に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器３３０はエラーメッセージを生成して処理を中断する。
【００６１】
一方、カウンタ正確性判断部３２２の判断処理において、データベース３２３から読み出したカウンタ（カウント値）ｊをユーザの端末装置から受信したカウンタ（カウント値）ｊと比較して、一致した場合は、続けて次の処理を行う。
【００６２】
マスク生成器３２５は、データベース３２３から読み出したカウンタ（カウント値）ｊと認証データｖｉｊを入力として、マスクＷ＝Ｇ（ｊ，ｖｉｊ）を計算して出力する。分離器３２６は、ユーザの端末装置２００から受信したマスクした暗号文ｚと、マスク生成器３２５により生成されたマスクＷを入力として、暗号文ｙを、計算式「ｙ＝ｚ／Ｗ  ｍｏｄ  Ｎ」により計算して出力する。ＲＳＡ復号演算器３２４は、分離器３２６により出力された暗号文ｙと、データベース３２３から読み出したＲＳＡ秘密鍵（ｄ，Ｎ）を入力として、乱数ｘを、計算式「ｘ＝ｙｄ  ｍｏｄ  Ｎ」により計算して出力する。認証子生成器３２７は、ユーザの端末装置２００から受信した認証用のデータ「ｊ，ｚ」と、データベース３２３から読み出した認証データｖｉｊと、ＲＳＡ復号演算器３２４により出力された乱数ｘを入力として、認証子ＶＳｉを、ハッシュ関数による計算式「ＶＳｉ＝Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｖｉｊ‖ｘ）」により計算して「ＩｎｐｕｔＭｓｇ」と共に出力する。ここで、「ＩｎｐｕｔＭｓｇ」は、計算式「Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｖｉｊ‖ｘ」により計算されたデータである。サーバの認証装置３００は、認証子生成器３２７により計算して得られた認証子ＶＳｉとサーバのＩＤの情報であるＳｉを、ユーザの端末装置２００へ送信する。
【００６３】
続いて、署名検証結果判断部３２８は、ユーザの端末装置２００から受信した署名文ＶＣと、認証子生成器３２７から出力された「ＩｎｐｕｔＭｓｇ」と、データベース３２３から読み出した検証鍵ＶＫを入力として、関数ＶｅｒＶＫ（ｍ，ＶＣ）を計算して、署名文ＶＣの検証を行う。ここで、メッセージｍはハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）であり、ハッシュ関数Ｈの代わりにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使ってもよい。署名検証結果判断部３２８において、署名文（ｍ，ＶＣ）が検証できない場合、署名検証結果判断部３２８は、エラーメッセージ発生器３３１に対して、検証できないことを通知する。これを受けて、エラーメッセージ発生器３３１はエラーメッセージを生成して処理を中断する。
【００６４】
一方、署名検証結果判断部３２８の判断処理において、署名文（ｍ，ＶＣ）が検証できた場合には、ユーザの端末装置を正当な装置として認証する。セッション鍵生成器３２９は、認証子生成器３２７から出力された「ＩｎｐｕｔＭｓｇ」を入力として、セッション鍵ＳＫｉｊを、計算式「ＳＫｉｊ＝Ｈ（３‖ＩｎｐｕｔＭｓｇ）」の計算により、生成して出力する。秘密値更新器３０３は、データベース３２３から読み出した認証データｖｉｊと、認証子生成器３２７から入力された「ＩｎｐｕｔＭｓｇ」を入力として、ｊ＋１番目の認証データｖｉ（ｊ＋１）を、計算式「ｖｉ（ｊ＋１）＝ｖｉｊ＋Ｈ（４‖ＩｎｐｕｔＭｓｇ）」により計算して、カウンタ（カウント値）ｊ＋１と共に出力する。サーバの認証装置３００は、データベース３２３に保持している現在のカウンタ（カウント値）と認証データの組である「ｊ，ｖｉｊ」を、秘密値更新器３０３により出力された次のカウンタ（カウント値）と認証データの組である「ｊ＋１，ｖｉ（ｊ＋１）」に書き換える。
【００６５】
（３）二要素認証システム３：
次に、二要素認証システム３のシステム例について説明する。図１１および図１２は、二要素認証システム３の初期化処理を説明する図である。図１１に初期化処理で用いられるユーザの端末装置２００のシステム要素が示されており、図１２には、初期化処理で用いられるサーバの認証装置３００システム要素が示されている。図１１および図１２を参照して、ユーザの端末装置２００とサーバの認証装置３００との間の二要素認証システムの初期化処理を説明する。
【００６６】
二要素認証システム３におけるユーザの端末装置２００の初期化の動作について説明する。図１１に示すように、ユーザの端末装置２００の認証データ生成器２３１は、乱数発生器２３０によりランダムに発生させた乱数ｓｉ１（ｓｉ１∈｛０，１｝ｋ）と、ユーザから入力されたパスワードｐｗとを入力して、認証データｖｉ１を計算して出力する。認証データｖｉ１の計算は、ハッシュ関数を用いて計算式「ｖｉ１＝ｓｉ１＋Ｈ（４‖Ｃ‖Ｓｉ‖ｐｗ）」により計算する。署名鍵生成器２５４は、セキュリティパラメータに基づいて、検証鍵ＶＫと署名鍵ＳＫの対（ＶＫ，ＳＫ）を生成して出力する。ユーザの端末装置２００からサーバの認証装置３００へは、認証データ生成器２３１から生成された認証データｖｉ１と署名鍵生成器２５４から生成された検証鍵ＶＫを、サーバの認証装置３００における記録情報生成のために送信する。ユーザの端末装置２００においては、カウンタ（カウント値）１と、乱数発生器２３０により発生させた乱数ｓｉ１と、サーバの認証装置３００から受信したＲＳＡ公開鍵（ｅ，Ｎ）と、署名鍵生成器２５４から生成された署名鍵ＳＫとを、記録情報「ＣＳ１」１４３として保存する。この場合に、ユーザの端末装置２００の内部メモリの格納装置２０１には、記録情報「ＣＳ１」１４３としてデータ「１，ｓｉ１，（ｅ，Ｎ），ＳＫ」が保存される。
【００６７】
サーバの認証装置３００の初期化の動作については、図１２に示すように、サーバの認証装置３００のＲＳＡ鍵生成器３３３が、セキュリティパラメータに基づき、公開鍵（ｅ，Ｎ）と秘密鍵（ｄ，Ｎ）を生成して出力する。公開鍵（ｅ，Ｎ）は、ユーザの端末装置２００へ送信される。公開鍵（ｅ，Ｎ）のｅは８０ビット以上の素数である。サーバの認証装置３００は、カウンタ（カウント値）１と、ユーザの端末装置２００から受信した認証データｖｉ１および検証鍵ＶＫと、ＲＳＡ鍵生成器３３３により生成された秘密鍵（ｄ，Ｎ）とを、記録情報「ＳＳ１」１５３として保存する。この場合、サーバの認証装置３００の内部にあるメモリあるいはデータベースの格納装置３０１には、記録情報「ＳＳ１」１５３として、データ「１，ｖｉ１，（ｄ，Ｎ），ＶＫ」が保存される。
【００６８】
図１３および図１４は、二要素認証システム３の認証プロトコルの実行処理を説明する図である。図１３には、二要素認証システム３のユーザの端末装置におけるｊ番目プロトコル実行のシステム要素が示されており、図１４には、二要素認証システム３のサーバの認証装置におけるｊ番目プロトコル実行のシステム要素が示されている。図１３および図１４において、ｊはｊ≧１になるような整数である。二要素認証システム３のｊ番目プロトコル実行では、ユーザの端末装置２００はユーザから入力されたパスワードｐｗと保持された記録情報ＣＳｊに基づいて、記録情報ＳＳｊを保持しているサーバの認証装置と安全ではない通信路を用いてお互いに相互認証し、その相互認証が成功した時、同じセッション鍵ＳＫを確保する。
【００６９】
図１３を参照して、二要素認証システム３のユーザの端末装置２００のｊ番目プロトコル実行の動作について説明する。初期化処理の後は、ユーザの端末装置２００は記録情報ＣＳｊとして、データ「ｊ，ｓｉｊ，（ｅ，Ｎ），ＳＫ」を内部にあるメモリに保持している。
【００７０】
認証データ生成器２３１は、ユーザから入力されたパスワードｐｗと、メモリ２３２から読み出した乱数ｓｉｊを入力として、認証データｖｉｊを計算式「ｖｉｊ＝ｓｉｊ＋Ｈ（４‖Ｃ‖Ｓｉ‖ｐｗ）」により計算して出力する。マスク生成器２３３は、認証データ生成器２３１から生成された認証データｖｉｊと、メモリ２３２から読み出したカウンタ（カウント値）ｊを入力として、マスクＷ＝Ｇ（ｊ，ｖｉｊ）を計算して出力する。ＲＳＡ暗号演算器２３５は、乱数発生器２３０によって、ランダムに発生させた乱数ｘ１，ｘ２（ｘ１，ｘ２∈ＺＮ＊）と、メモリ２３２から読み出した公開鍵（ｅ，Ｎ）を入力として、暗号文「ｙ１＝ｘ１ｅ  ｍｏｄ  Ｎ」と、暗号文「ｙ２＝ｘ２ｅ  ｍｏｄ  Ｎ」を計算して出力する。結合器２３４は、マスク生成器２３３から生成されたマスクＷと、乱数発生器２３０により発生させた乱数ｘ２と、ＲＳＡ暗号演算器２３５から出力された暗号文ｙ１を入力として、マスクされた暗号文ｚを計算式「ｚ＝ｙ１・ｘ２・Ｗ  ｍｏｄ  Ｎ」によりを計算して出力する。ユーザの端末装置２００は、クライアントＩＤの情報であるＣと、メモリ２３２から読み出したカウンタ（カウント値）ｊと、結合器２３４により出力されたマスクされた暗号文ｚと、ＲＳＡ暗号演算器２３５により出力された暗号文ｙ２をサーバの認証装置３００へ送信する。
【００７１】
続いて、認証結果判断部２３６は、サーバの認証装置３００から受信した認証子ＶＳｉが正しく生成された値であるかどうかを確認する。認証結果判断部２３６は、メモリ２３２から読み出したカウンタ（カウント値）ｊと、結合器２３４により出力されたマスクされた暗号文ｚと、ＲＳＡ暗号演算器２３５により出力された暗号文ｙ２と、認証データ生成器２３１から生成された認証データｖｉｊと、乱数発生器２３０により発生させた乱数ｘ１，ｘ２を入力として、ハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２）を計算して、サーバの認証装置３００から受信した認証子ＶＳｉと比較する。ここで、ハッシュ関数Ｈの代わりにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使ってもよい。認証結果判断部２３６において、認証子ＶＳｉとハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２）が一致しない場合には、認証結果判断部２３６は、エラーメッセージ発生器２３９に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器２３９はエラーメッセージを生成して処理を中断する。一方、認証結果判断部２３６の判断処理において、認証子ＶＳｉとハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２）が一致した場合は、サーバの認証装置３００を正当な装置として認証して、「ＩｎｐｕｔＭｓｇ」のデータを出力する。ここで、「ＩｎｐｕｔＭｓｇ」のデータは、計算式「Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２」の出力データである。署名生成器２３７は、メモリ２３２から読み出した署名鍵ＳＫと、認証結果判断部２３６から入力された「ＩｎｐｕｔＭｓｇ」から署名文ＶＣを、署名関数「ＶＣ＝ＳｉｇｎＳＫ（ｍ）」により計算して出力する。ここで、メッセージｍは、ハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）である。ユーザの端末装置２００は、署名生成器２３７により出力された署名文ＶＣをサーバの認証装置３００へ送信する。セッション鍵生成器２３８は、認証結果判断部２３６から入力された「ＩｎｐｕｔＭｓｇ」のデータを入力として、セッション鍵ＳＫｉｊを、計算式「ＳＫｉｊ＝Ｈ（３‖ＩｎｐｕｔＭｓｇ）」の計算により生成して出力する。秘密値更新器２０３は、メモリ２３２から読み出した乱数ｓｉｊと、認証結果判断部２３６から入力された「ＩｎｐｕｔＭｓｇ」を入力として、ｊ＋１番目の乱数ｓｉ（ｊ＋１）を、計算式「ｓｉ（ｊ＋１）＝ｓｉｊ＋Ｈ（４‖ＩｎｐｕｔＭｓｇ）」により計算し、カウンタ（カウント値）ｊ＋１と共に出力する。ユーザの端末装置２００は、メモリ２３２に保持している現在のカウンタ（カウント値）と乱数の組である「ｊ，ｓｉｊ」を、秘密値更新器２０３により出力された次のカウンタ（カウント値）と乱数の組である「ｊ＋１，ｓｉ（ｊ＋１）」に書き換える。
【００７２】
図１４は、二要素認証システム３のサーバの認証装置３００のｊ番目プロトコル実行を行うシステム要素を示している。図１４を参照して、二要素認証システム３のｊ番目プロトコル実行の動作について説明する。この時、サーバの認証装置３００は、認証プロトコル実行のための記録情報ＳＳｊのデータ「ｊ，ｖｉｊ，（ｄ，Ｎ），ＶＫ」を格納装置３０１の内部にあるメモリあるいはデータベース３３９に保持している。
【００７３】
サーバの認証装置３００において、カウンタ正確性判断部３３４は、ユーザの端末装置２００から受信したカウンタ（カウント値）ｊの正確性を確認する。カウンタ正確性判断部３３４は、データベース３３９から読み出したカウンタ（カウント値）ｊを、ユーザの端末装置２００から受信したカウンタ（カウント値）ｊと比較して一致しない場合、エラーメッセージ発生器３４２に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器３４２はエラーメッセージを生成して処理を中断する。
【００７４】
一方、カウンタ正確性判断部３３４の判断処理において、データベース３３９から読み出したカウンタ（カウント値）ｊをユーザの端末装置から受信したカウンタ（カウント値）ｊと比較して、一致した場合は続けて次の処理を行う。
【００７５】
マスク生成器３４０は、データベース３３９から読み出したカウンタ（カウント値）ｊと認証データｖｉｊを入力として、マスクＷ＝Ｇ（ｊ，ｖｉｊ）を計算して出力する。ＲＳＡ復号演算器３３５は、ユーザの端末装置２００から受信した暗号文ｙ２と、データベース３３９から読み出したＲＳＡ秘密鍵（ｄ，Ｎ）を入力として、乱数ｘ２を計算式「ｘ２＝ｙ２ｄ  ｍｏｄ  Ｎ」により計算して出力する。分離器３３６は、ユーザの端末装置２００から受信したマスクされた暗号文ｚと、ＲＳＡ復号演算器３３５により出力された乱数ｘ２と、マスク生成器３４０により生成されたマスクＷを入力として、暗号文ｙ１を計算式「ｙ１＝ｚ／（ｘ２・Ｗ）  ｍｏｄ  Ｎ」により計算して出力する。再び、ＲＳＡ復号演算器３３５は、分離器３３６により出力された暗号文ｙ１と、データベース３３９から読み出したＲＳＡ秘密鍵（ｄ，Ｎ）を入力として、乱数ｘ１を計算式「ｘ１＝ｙ１ｄ  ｍｏｄ  Ｎ」により計算して、先に計算した乱数ｘ２と共に出力する。認証子生成器３３７は、ユーザの端末装置２００から受信した認証用のデータ「ｊ，ｚ，ｙ２」と、データベース３３９から読み出した認証データｖｉｊと、ＲＳＡ復号演算器３３５により出力された乱数ｘ１および乱数ｘ２を入力として、認証子ＶＳｉを、計算式「ＶＳｉ＝Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２）」により計算して、「ＩｎｐｕｔＭｓｇ」のデータと共に出力する。ここで、「ＩｎｐｕｔＭｓｇ」のデータは、計算式「Ｃ‖Ｓｉ‖ｊ‖ｚ‖ｙ２‖ｖｉｊ‖ｘ１‖ｘ２」の出力データである。サーバの認証装置３００は、認証子生成器３３７により計算して得られた認証子ＶＳｉと、サーバのＩＤ情報であるＳｉをユーザの端末装置２００へ送信する。
【００７６】
続いて、署名検証結果判断部３３８は、ユーザの端末装置２００から受信した署名文ＶＣと認証子生成器３３７から出力された「ＩｎｐｕｔＭｓｇ」と、データベース３３９から読み出した検証鍵ＶＫを入力として、関数ＶｅｒＶＫ（ｍ，ＶＣ）を計算して、署名文ＶＣの検証を行う。ここで、メッセージｍはハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）であり、ハッシュ関数Ｈの代わりにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使ってもよい。署名検証結果判断部３３８において、署名文（ｍ，ＶＣ）が検証できない場合、署名検証結果判断部３３８は、エラーメッセージ発生器３４３に対して、検証できないことを通知する。これを受けて、エラーメッセージ発生器３４３はエラーメッセージを生成して処理を中断する。
【００７７】
署名検証結果判断部３３８の判断処理において、署名文（ｍ，ＶＣ）が検証できた場合には、ユーザの端末装置を正当な装置として認証する。セッション鍵生成器３４１は、認証子生成器３３７から出力された「ＩｎｐｕｔＭｓｇ」のデータを入力として、セッション鍵ＳＫｉｊを、計算式「ＳＫｉｊ＝Ｈ（３‖ＩｎｐｕｔＭｓｇ）」により、生成して出力する。秘密値更新器３０３は、データベース３３９から読み出した認証データｖｉｊと、認証子生成器３３７から入力された「ＩｎｐｕｔＭｓｇ」を入力として、ｊ＋１番目の認証データｖｉ（ｊ＋１）を、計算式「ｖｉ（ｊ＋１）＝ｖｉｊ＋Ｈ（４‖ＩｎｐｕｔＭｓｇ）」により計算して、カウンタ（カウント値）ｊ＋１と共に出力する。サーバの認証装置３００は、データベース３３９に保持している現在のカウンタ（カウント値）と認証データの組である「ｊ，ｖｉｊ」を、秘密値更新器３０３により出力された次のカウンタ（カウント値）と認証データの組である「ｊ＋１，ｖｉ（ｊ＋１）」に書き換える。
【００７８】
＜第２実施例＞
次に、第２実施例として、ＤＨ鍵共有プロトコルを使った二要素認証システムの実施例を、二要素認証システム４のシステム例として説明する。ここで、ＤＨ鍵共有プロトコルを使った実施例を説明する前に、以下の説明において用いる整数論と記号について説明しておく。
【００７９】
ｐ，ｑは素数であり、ｑ｜ｐ−１という関係がある。ｑ｜ｐ−１の表記は、ｑはｐ−１を割りきることのできる値であることを意味する。また、ｇは「ｍｏｄ  ｐ」上の位数ｑの有限体（群）Ｇ＝｛ｇｊ  ｍｏｄ  ｐ：  ０≦ｊ＜ｑ｝の生成元である（楕円曲線上の群でも同じように構成できる）。ここで、“ｇｊ  ｍｏｄ  ｐ”は、法指数演算であり、ｇをｊ乗した値をｐで割った残り（Ｒｅｍａｉｎｄｅｒ）という意味である。また、ｇは（１＜ｇ＜ｐ−１，ｇｑ＝１  ｍｏｄ  ｐ，ｇｊ≠１  ｍｏｄ  ｐ（０＜ｊ＜ｑ））である。つまり、ｐ，ｑは演算体系（素体の標数）を示す。例えば、Ｘ＝ｇｘ  ｍｏｄ  ｐ（０＜ｘ＜ｑ）で、ｘは秘密情報であり、Ｘが与えられた時、ｘ＝ｌｏｇｇＸを求めるのは数学的に難しい問題（Ｘの生成元ｇに対する離散対数問題という）である。
【００８０】
ハッシュ関数Ｈのセキュリティパラメータをｋとする。ただし、１／２ｋは無視できるほど小さいと仮定する。また、｛０，１｝＊は有限の２進数のストリングの集合を、｛０，１｝ｋは長さｋの２進数のストリングの集合を示す。ハッシュ関数Ｈは｛０，１｝＊の入力から｛０，１｝ｋの出力を出す安全な一方向関数であり、ＦＤＨ（Ｆｕｌｌ−Ｄｏｍａｉｎ  Ｈａｓｈ）関数Ｇは｛０，１｝＊の入力から（Ｚ／ｑＺ）＊の出力を出す安全な一方向関数である。ここで、（Ｚ／ｑＺ）＊は｛１，２，…，ｑ｝の集合を示す。また、乱数発生器から発生される乱数はＲ∈（Ｚ／ｑＺ）＊を無作為に生成する。また、‖は値を連結（ｃｏｎｃａｔｅｎａｔｉｏｎ）するという意味である。また、ＣとＳｉはそれぞれユーザとサーバを表すＩＤである。
【００８１】
（４）二要素認証システム４：
図１５および図１６は、二要素認証システム４の初期化処理を説明する図である。図１５に、二要素認証システムの初期化処理のシステム要素が示されている。二要素認証システム４の初期化処理では、ユーザの端末装置２００は、ユーザから入力されたパスワードに基づいて、サーバの認証装置３００と安全な通信路（例えば、直接に登録したり、郵便で送付したり、あるいは電話で知らせるなど）を用いて初期化処理を行い、ユーザの端末装置は２００の内部にあるメモリへ記録情報としてＣＳ１を保存し、サーバの認証装置３００は内部にあるメモリあるいはデータベースへ記録情報としてＳＳ１を保存する。
【００８２】
図１５および図１６を参照して、ユーザの端末装置とサーバの認証装置との間で二要素認証システム４の初期化を行う動作を説明する。
【００８３】
図１５に示すように、二要素認証システム４のユーザの端末装置２００における初期化処理では、認証データ結合器２４２は、乱数発生器２４１によりランダムに発生させた乱数ｓｉ１（ｓｉ１∈（Ｚ／ｑＺ）＊）と、ユーザから入力されたパスワードｐｗを入力として、結合値ｖｉ１を「ｖｉ１＝ｓｉ１＋Ｇ（１‖Ｃ‖Ｓｉ‖ｐｗ）  ｍｏｄ  ｑ」の計算式により計算して出力する。認証データ生成器２４３は、認証データ結合器２４２により出力された結合値ｖｉ１を入力として、認証データＷｉ１を計算式「Ｗｉ１＝ｈｖｉ１  ｍｏｄ  ｐ」と「Ｚｉ１＝ｇｖｉ１  ｍｏｄ  ｐ」により計算して出力し、認証データ「Ｗｉ１，Ｚｉ１」をサーバの認証装置３００へ送信する。ユーザの端末装置２００は、カウンタ（カウント値）１と乱数発生器２４１により発生させた乱数ｓｉ１を、ユーザの端末装置の内部にあるメモリへ記録情報「ＣＳ１」１５４として「１，ｓｉ１」を保存する。
【００８４】
二要素認証システム４のサーバの認証装置３００における初期化処理では、図１６に示すように、サーバの認証装置３００は、カウンタ（カウント値）１と、ユーザの端末装置２００から受信した認証データ「Ｗｉ１，Ｚｉ１」とを、サーバの認証装置３００の内部にあるメモリあるいはデータベースへ記録情報「ＳＳ１」１５５として「１，Ｗｉ１，Ｚｉ１」を保存する。
【００８５】
図１７および図１８は、二要素認証システム４の認証プロトコルの実行処理を説明する図である。図１７には、二要素認証システム４のユーザの端末装置２００におけるｊ番目プロトコル実行のシステム要素が示されており、図１８には、二要素認証システム４のサーバの認証装置３００におけるｊ番目プロトコル実行のシステム要素が示されている。図１７および図１８において、ｊはｊ≧１になるような整数である。二要素認証システム４のｊ番目プロトコル実行では、ユーザの端末装置２００はユーザから入力されたパスワードｐｗと保持された記録情報ＣＳｊに基づいて、記録情報ＳＳｊを保持しているサーバの認証装置３００と安全ではない通信路（例えば、インターネットなど）を用いてお互いに相互認証し、その相互認証が成功した時、同じセッション鍵を確保する。
【００８６】
前述した初期化を行った後（ｊ＝１の時）、あるいは二要素認証システム４のｊ−１番目プロトコル実行を行った後（すなわち、ＣＳｊ＝（ｊ，ｓｉｊ）とＳＳｊ＝（ｊ，Ｗｉｊ，Ｚｉｊ）の時）、ユーザの端末装置２００とサーバの認証装置３００との間で二要素認証システム４においてのｊ番目プロトコル実行を行う。
【００８７】
まず、図１７を参照して、ユーザの端末装置２００におけるｊ番目プロトコル実行の処理について説明する。初期化処理の後、ｊ番目のプロトコル実行の前には、ユーザの端末装置２００は、記録情報「ＣＳｊ」として「ｊ，ｓｉｊ」を内部にあるメモリ２４４に保持している。
【００８８】
まず、認証データ結合器２４２は、ユーザから入力されたパスワードｐｗとメモリから読み出した乱数ｓｉｊを入力として、結合値ｖｉｊを計算式「ｖｉｊ＝ｓｉｊ＋Ｇ（１‖Ｃ‖Ｓｉ‖ｐｗ）  ｍｏｄ  ｑ」により計算して出力する。認証データ生成器２４３は、認証データ結合器２４２により出力された結合値ｖｉｊを入力として、認証データＷｉｊとＺｉｊを計算式「Ｗｉｊ＝ｈｖｉｊ  ｍｏｄ  ｐ」と「Ｚｉｊ＝ｇｖｉｊ  ｍｏｄ  ｐ」により計算して出力する。ＤＨ値演算器２４５は、乱数発生器２４１によりランダムに発生させた乱数ｘ（ｘ∈（Ｚ／ｑＺ）＊）を入力として、ＤＨ値を計算式「ｇｘ  ｍｏｄ  ｐ」によりを計算して出力する。結合器２４６は、認証データ生成器２４３から生成された認証データＷｉｊとＺｉｊと、ＤＨ値演算器２４５により出力されたＤＨ値ｇｘを入力として、マスクされたＤＨ値Ｘを「Ｘ＝ｇｘ・Ｗｉｊ  ｍｏｄ  ｐ」により計算して出力する。
【００８９】
ユーザの端末装置２００は、図示しない通信処理部を介して、サーバの認証装置３００に対して、クライアントＩＤであるＣと、メモリ２４４から読み出したカウンタ（カウント値）ｊと、結合器２４６により出力されたＸを送信する。サーバの認証装置３００からは、認証データ「Ｓｉ，Ｙ，Ｖｓｉ」が送られてくるので、ＤＨ鍵演算器２４７は、サーバの認証装置３００から受信したＤＨ値Ｙと、乱数発生器２４１によりランダムに発生させた乱数ｘと、ＤＨ値演算器２４５により出力されたＤＨ値ｇｘと、認証データ結合器２４２により出力された結合値ｖｉｊを入力として、ＤＨ鍵Ｋを、計算式「Ｋ＝Ｙ（ｘ＋ｒ・ｖｉｊ）  ｍｏｄ  ｐ」により計算して出力する。ここで、ｒはＧ（２‖ｇｘ‖Ｙ）である。
【００９０】
続いて、認証結果判断部２４８は、サーバの認証装置３００から受信した認証データのＶＳｉが正しく生成された値であるかどうかを確認する。認証結果判断部２４８は、メモリ２４４から読み出したカウンタ（カウント値）ｊと、結合器２４６により出力されたマスクされたＤＨ値Ｘと、サーバの認証装置３００から受信したＤＨ値Ｙと、認証データ生成器２４３から生成された認証データ「Ｗｉｊ，Ｚｉｊ」と、ＤＨ鍵演算器２４７により出力さらたＤＨ鍵Ｋを入力として、ハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖Ｘ‖Ｙ‖Ｗｉｊ‖Ｚｉｊ‖Ｋ）を計算して、サーバの認証装置３００から受信した認証データ「ＶＳｉ」と比較する。ここで、ハッシュ関数Ｈの代わりにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使ってもよい。認証結果判断部２４８の判断処理において、認証データ「ＶＳｉ」とハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖Ｘ‖Ｙ‖Ｗｉｊ‖Ｚｉｊ‖Ｋ）が一致しない場合、認証結果判断部２４８は、エラーメッセージ発生器２４９に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器２４９はエラーメッセージを生成して処理を中断する。
【００９１】
一方、認証結果判断部２４８の判断処理において、認証データ「ＶＳｉ」とハッシュ関数Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖Ｘ‖Ｙ‖Ｗｉｊ‖Ｚｉｊ‖Ｋ）が一致したことを判断した場合は、サーバの認証装置３００が正当な装置として認証して、データ「ＩｎｐｕｔＭｓｇ」を出力する。ここで、データ「ＩｎｐｕｔＭｓｇ」は、「Ｃ‖Ｓｉ‖ｊ‖Ｘ‖Ｙ‖Ｗｉｊ‖Ｚｉｊ‖Ｋ」である。認証子生成器２５０は、認証結果判断部２４８から入力されたデータ「ＩｎｐｕｔＭｓｇ」に基づいて、認証子ＶＣを、計算式「ＶＣ＝Ｈ（２‖ＩｎｐｕｔＭｓｇ）」により計算して出力する。ユーザの端末装置２００は、認証子生成器２５０により出力された認証子ＶＣをサーバの認証装置３００へ送信する。セッション鍵生成器２５１は、認証結果判断部２４８から入力されたデータ「ＩｎｐｕｔＭｓｇ」を入力として、セッション鍵ＳＫｉｊを、計算式「ＳＫｉｊ＝Ｈ（３‖ＩｎｐｕｔＭｓｇ）」により計算して、計算結果からセッション鍵ＳＫｉｊを生成して出力する。秘密値更新器２５２は、メモリ２４４から読み出した乱数ｓｉｊと、認証結果判断部２４８から出力されて入力された「ＩｎｐｕｔＭｓｇ」とを入力として、ｊ＋１番目の乱数ｓｉ（ｊ＋１）を、計算式「ｓｉ（ｊ＋１）＝ｓｉｊ＋Ｇ（１‖ＩｎｐｕｔＭｓｇ）」により計算して、カウンタ（カウント値）ｊ＋１とともに出力する。ユーザの端末装置２００は、メモリ２４４に保持している現在のカウンタ（カウント値）と乱数との組である「ｊ，ｓｉｊ」を、秘密値更新器２５２により出力された次のカウンタ（カウント値）と乱数の組である「ｊ＋１，ｓｉ（ｊ＋１）」に書き換える。
【００９２】
図１８は、二要素認証システム４のサーバの認証装置３００のｊ番目プロトコル実行を行うシステム要素を示している。図１８を参照して、二要素認証システム４のｊ番目プロトコル実行の動作について説明する。この時、サーバの認証装置３００は、認証プロトコル実行のための記録情報ＳＳｊのデータ「ｊ，Ｗｉｊ，Ｚｉｊ」を格納装置の内部にあるメモリあるいはデータベース３５３に保持している。
【００９３】
まず、カウンタ正確性判断部３５１は、ユーザの端末装置２００から受信したカウンタ（カウント値）ｊの正確性を確認する。カウンタ正確性判断部３５１は、データベース３５３から読み出したカウンタ（カウント値）ｊを、ユーザの端末装置２００から受信したカウンタ（カウント値）ｊと比較して一致しない場合、エラーメッセージ発生器３５２に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器３５２はエラーメッセージを生成して処理を中断する。
【００９４】
一方、カウンタ正確性判断部３５１の判断処理において、データベースから読み出したカウンタ（カウント値）ｊをユーザの端末装置から受信したカウンタ（カウント値）ｊと比較して、一致した場合には、続けて次の処理を行う。ＤＨ値演算器３５７は、乱数発生器３５６によりランダムに発生させた乱数ｙ（ｙ∈（Ｚ／ｑＺ）＊）を入力として、ＤＨ値Ｙを計算式「Ｙ＝ｇｙ  ｍｏｄ  ｐ」により計算して出力する。分離器３５４は、ユーザの端末装置２００から受信したデータ「Ｘ」と、データベース３５３から読み出した認証データＷｉｊを入力として、ＤＨ値ｇｘを計算式「ｇｘ＝Ｘ／Ｗｉｊ  ｍｏｄ  ｐ」により計算して出力する。ＤＨ鍵演算器３５８は、分離器３５４により出力されたＤＨ値ｇｘと、データベース３５３から読み出した認証データＺｉｊと、ＤＨ値演算器３５７により出力されたＤＨ値Ｙと、乱数発生器３５６によりランダムに発生させた乱数ｙを入力として、ＤＨ鍵Ｋを、計算式「Ｋ＝（ｇｘ・Ｚｉｊｒ）ｙ  ｍｏｄ  ｐ」により計算して出力する。ここで、ｒはＧ（２‖ｇｘ‖Ｙ）である。認証子生成器３６０は、ユーザの端末装置２００から受信したデータ「ｊ，Ｘ」と、ＤＨ値演算器３５７により出力されたＤＨ値Ｙと、データベース３５３から読み出した認証データ「Ｗｉｊ，Ｚｉｊ」と、ＤＨ鍵演算器３５８により出力されたＤＨ鍵Ｋを入力として、認証子ＶＳｉを、計算式「ＶＳｉ＝Ｈ（１‖Ｃ‖Ｓｉ‖ｊ‖Ｘ‖Ｙ‖Ｗｉｊ‖Ｚｉｊ‖Ｋ）」により計算して、データ「ＩｎｐｕｔＭｓｇ」とともに出力する。ここでデータ「ＩｎｐｕｔＭｓｇ」は、「Ｃ‖Ｓｉ‖ｊ‖Ｘ‖Ｙ‖Ｗｉｊ‖Ｚｉｊ‖Ｋ」である。サーバの認証装置３００は、認証子生成器３６０により計算して得られたＶＳｉと、ＤＨ値演算器により出力されたＤＨ値Ｙと、サーバのＩＤである「Ｓｉ」をユーザの端末装置へ送信する。
【００９５】
続いて、認証結果判断部３６１は、認証子生成器３６０から出力されたデータ「ＩｎｐｕｔＭｓｇ」を入力として、ハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）を計算して、ユーザの端末装置２００から受信した認証子ＶＣと比較する。ここで、ハッシュ関数Ｈの代わりにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）を使ってもよい。認証結果判断部３６１の判断処理において、認証子ＶＣとハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）が一致しない場合、認証結果判断部３６１は、エラーメッセージ発生器３６３に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器３６３はエラーメッセージを生成して処理を中断する。
【００９６】
一方、認証結果判断部３６１の判断処理において、認証子ＶＣとハッシュ関数Ｈ（２‖ＩｎｐｕｔＭｓｇ）が一致した場合は、ユーザの端末装置２００が正当な装置として認証する。セッション鍵生成器３６２は、認証子生成器３６０から出力されたデータ「ＩｎｐｕｔＭｓｇ」を入力として、セッション鍵ＳＫｉｊの生成のために、計算式「ＳＫｉｊ＝Ｈ（３‖ＩｎｐｕｔＭｓｇ）」を計算して、セッション鍵ＳＫｉｊを生成して出力する。秘密値更新器３５９は、データベース３５３から読み出した認証データの「Ｗｉｊ，Ｚｉｊ」と、認証子生成器３６０から入力されたデータ「ＩｎｐｕｔＭｓｇ」を入力として、ｊ＋１番目の認証データ「Ｗｉ（ｊ＋１），Ｚｉ（ｊ＋１）」を、計算式「Ｗｉ（ｊ＋１）＝Ｗｉｊ・ｈＧ（１‖ＩｎｐｕｔＭｓｇ）  ｍｏｄ  ｐ」と「Ｚｉ（ｊ＋１）＝Ｚｉｊ・ｇＧ（１‖ＩｎｐｕｔＭｓｇ）  ｍｏｄ  ｐ」により計算して、カウンタ（カウント値）ｊ＋１とともに出力する。サーバの認証装置３００は、データベース３５３に保持している現在のカウンタ（カウント値）と認証データの組である「ｊ，Ｗｉｊ，Ｚｉｊ」を、秘密値更新器３５９により出力された次のカウンタ（カウント値）と認証データの組である「ｊ＋１，Ｗｉ（ｊ＋１），Ｚｉ（ｊ＋１）」に書き換える。
【産業上の利用可能性】
【００９７】
本発明の二要素認証システムは、基本的にユーザやサーバ認証を必要とするサービスやアプリケーションで利用できる。現在、ユーザ認証やサーバ認証は、電子商取引、サーバやネットワークへのログイン、入退室管理、公的交通機関への搭乗など、リアル、サイバーを問わず至るところで必要とされており、その応用先は広い。また、本発明はユーザの端末に特殊なモジュールを必要としないため、ユビキタス環境での認証方式としても適している。もちろん、ユーザの端末に耐タンパモジュールを用いることで、本発明の安全性をますます高めることが可能になる。
【図面の簡単な説明】
【００９８】
【図１】本発明の二要素認証システムの全体の構成を説明する図である。
【図２】短い系列と記録情報を用いた二要素認証システムにおける初期化処理を説明する図である。
【図３】短い系列と記録情報を用いた二要素認証システムにおけるｊ番目プロトコル実行の構成を示す図である。
【図４】二要素認証システム１の初期化処理を説明する図である。
【図５】二要素認証システム１のユーザの端末装置におけるｊ番目プロトコル実行のシステム要素を示す図である。
【図６】二要素認証システム１のサーバの認証装置におけるｊ番目プロトコル実行のシステム要素を示す図である。
【図７】二要素認証システム２の初期化処理で用いられるユーザの端末装置２００のシステム要素を示す図である。
【図８】二要素認証システム２の初期化処理で用いられるサーバの認証装置３００システム要素を示す図である。
【図９】二要素認証システム２のユーザの端末装置におけるｊ番目プロトコル実行のシステム要素を示す図である。
【図１０】二要素認証システム２のサーバの認証装置におけるｊ番目プロトコル実行のシステム要素を示す図である。
【図１１】二要素認証システム３の初期化処理で用いられるユーザの端末装置２００のシステム要素を示す図である。
【図１２】二要素認証システム３の初期化処理で用いられるサーバの認証装置３００システム要素を示す図である。
【図１３】二要素認証システム３のユーザの端末装置におけるｊ番目プロトコル実行のシステム要素を示す図である。
【図１４】二要素認証システム３のサーバの認証装置におけるｊ番目プロトコル実行のシステム要素を示す図である。
【図１５】二要素認証システム４の初期化処理で用いられるユーザの端末装置２００のシステム要素を示す図である。
【図１６】二要素認証システム４の初期化処理で用いられるサーバの認証装置３００システム要素を示す図である。
【図１７】二要素認証システム４のユーザの端末装置におけるｊ番目プロトコル実行のシステム要素を示す図である。
【図１８】二要素認証システム４のサーバの認証装置におけるｊ番目プロトコル実行のシステム要素を示す図である。
【符号の説明】
【００９９】
１００  二要素認証システム
１０１  通信路
２００  ユーザの端末装置
２０１  記録情報の格納装置
２０２  認証処理部
２０３  秘密更新器
３００  サーバの認証装置
３０１  記録情報の格納装置
３０２  認証処理部
３０３  秘密更新器
【図１】
0005099771.tif 000002
【図２】
0005099771.tif 000003
【図３】
0005099771.tif 000004
【図４】
0005099771.tif 000005
【図５】
0005099771.tif 000006
【図６】
0005099771.tif 000007
【図７】
0005099771.tif 000008
【図８】
0005099771.tif 000009
【図９】
0005099771.tif 000010
【図１０】
0005099771.tif 000011
【図１１】
0005099771.tif 000012
【図１２】
0005099771.tif 000013
【図１３】
0005099771.tif 000014
【図１４】
0005099771.tif 000015
【図１５】
0005099771.tif 000016
【図１６】
0005099771.tif 000017
【図１７】
0005099771.tif 000018
【図１８】
0005099771.tif 000019