(57)【特許請求の範囲】
【請求項１】
RSA及びパスワードに基づく相互認証のための方法であって、
クライアントが、サーバが生成したRSA公開鍵(e, N)に基づいて生成した暗号文を、ユーザが入力したパスワードに基づいて生成した第１のマスクWでスクランブルした第１の認証情報Zを計算するステップと、
前記クライアントから、前記第１の認証情報Z及び前記クライアントの身元情報であるクライアントIDを、前記サーバへ送信するステップと、
前記サーバが、クライアントIDに対応付けられて前記サーバのデータベースに格納されている認証データ、及び、前記RSA公開鍵に対応するRSA秘密鍵(d, N)に基づいて、サーバ側マスター鍵kを計算するステップと、
前記サーバが、受信した前記第１の認証情報Zに基づく値に前記RSA秘密鍵を適用して情報Uを計算し、該情報Uを前記クライアントへ送信するステップと、
前記クライアントが、受信した前記情報U及び該クライアントが生成する乱数に基づき、クライアント側マスター鍵k'を計算するステップと、
を含む、方法。
【請求項２】
請求項１に記載の方法であって、さらに、
前記サーバが、前記サーバ側マスター鍵kに基づいて第２の認証情報Vsを計算し、該第２の認証情報Vsを前記クライアントへ送信するステップと、
前記クライアントが、受信した前記第２の認証情報Vsと、前記クライアント側マスター鍵k'に基づいて生成した第１の比較情報とを比較することによって、前記サーバを認証するステップと、
前記クライアントが、前記クライアント側マスター鍵k'に基づいて第３の認証情報Vcを計算し、該第３の認証情報Vcを前記サーバへ送信するステップと、
前記サーバが、受信した前記第３の認証情報Vcと、前記サーバ側マスター鍵kに基づいて生成した第２の比較情報とを比較することによって、前記クライアントを認証するステップと、
を含む、方法。
【請求項３】
請求項１または２に記載の方法であって、さらに、
前記クライアントが第１の乱数x1および第２の乱数x2を生成すると共に、前記第１の乱数x1を前記RSA公開鍵を用いて暗号化した第１の暗号文y1と、前記第２の乱数x2を前記RSA公開鍵を用いて暗号化した第２の暗号文y2とを計算するステップと、
前記クライアントが、前記第１の認証情報Zを、Z＝y1・x2・W mod Nによって計算するステップと、
を含み、
・  前記第１の認証情報Z及び前記クライアントの身元情報であるクライアントIDを前記サーバへ送信するステップにおいて、前記第２の暗号文y2も共に送信され、
・  前記情報Uが、前記第２の暗号文y2を前記RSA秘密鍵で復号した第２の復号文x2'を用いて、U＝(Z/x2')d mod Nによって計算される、
方法。
【請求項４】
請求項３に記載の方法のうち請求項２に従属する方法であって、さらに、
・  前記第２の認証情報Vsが、前記第２の復号文x2'を利用して計算され、
・  前記第１の比較情報が、前記第２の乱数x2を利用して計算され、
・  前記第３の認証情報Vcが、前記第２の乱数x2を利用して計算され、
・  前記第２の比較情報が、前記第２の復号文x2'を利用して計算される、
方法。
【請求項５】
前記RSA公開鍵(e, N)の指数eは80ビット以上の素数である、請求項１から４のいずれかに記載の方法。
【請求項６】
前記サーバは、前記クライアントから受信したクライアントIDに基づいて、前記データベースから前記受信したクライアントIDに対応する認証データを読み出す、請求項１から５のいずれかに記載の方法。
【請求項７】
前記サーバは、前記クライアントと通信を行う前に、前記データベースに格納されているクライアントIDと認証データの組に対して予め前記サーバ側マスター鍵kを計算しておく、請求項１から５のいずれかに記載の方法。
【請求項８】
前記データベースには、クライアントIDと認証データの組が複数個格納されており、前記サーバは、クライアントと通信を行う前に、前記複数個の組の少なくとも２個以上について、それぞれマスター鍵を計算しておく、請求項７に記載の方法。
【請求項９】
請求項８に記載の方法を用いた匿名認証のための方法であって、
前記サーバが、前記データベースに格納される複数のクライアントIDの各々について、暗号用OTPを計算するステップと、
前記サーバが、認証要求を送ったクライアントに対して、マスター鍵及び前記計算した暗号用OTPの集合から計算した暗号文を送信するステップと、
を含む、方法。
【請求項１０】
前記サーバのデータベースに格納されている認証データはパスワードである、請求項１から９に記載の方法。
【請求項１１】
前記第１のマスクWが、前記ユーザが入力したパスワード及び前記クライアントのメモリに格納されている秘密情報の二要素を用いて生成され、
前記サーバのデータベースに格納されている認証データは、前記秘密情報に対応して前記データベースに格納される認証データである、
請求項１から９に記載の方法。
【請求項１２】
請求項１１に記載の方法のうち、請求項２に記載の事項を含む方法であって、さらに、
前記クライアントが前記サーバを認証するステップにおいて、該認証が成功した場合、前記秘密情報を更新して前記メモリに格納するステップと、
前記サーバが前記クライアントを認証するステップにおいて、該認証が成功した場合、前記認証データを前記更新した秘密情報と対応がつくように更新し、該更新した認証データを前記データベースに格納するステップと、
をさらに含む、方法。
【請求項１３】
請求項２から１２に記載の方法であって、請求項２に記載の事項を含む方法において、
前記クライアントが、前記第３の認証情報Vcを、署名鍵SigKによって署名化した上で送信し、
前記サーバは、署名化された前記第３の認証情報Vcを、前記署名鍵SigKに対応して予め該サーバのデータベースに格納された検証鍵VrfKを用いて検証する、
方法。
【請求項１４】
RSA及びパスワードに基づく相互認証方法であって、
クライアントが第１の乱数x1および第２の乱数x2を生成すると共に、前記第１の乱数x1をRSA公開鍵(e, N)を用いて暗号化した第１の暗号文y1と、前記第２の乱数x2を前記RSA公開鍵(e, N)を用いて暗号化した第２の暗号文y2とを計算するステップと、
前記クライアントが、ユーザが入力したパスワードに基づいて、マスクWを生成するステップと、
前記クライアントが、第１の認証情報Zを、Z＝y1・x2・W mod Nによって計算するステップと、
前記クライアントが、前記第１の認証情報Zと、前記第２の暗号文y2と、前記クライアントの識別子であるクライアントIDとを、サーバへ送信するステップと、
を含む、方法。
【請求項１５】
請求項１４に記載の方法であって、さらに、
前記サーバが、前記第２の暗号文y2を前記RSA公開鍵に対応するRSA秘密鍵で復号した第２の復号文x2'と、該第２の復号文x2'及び前記第１の認証情報Zから前記RSA秘密鍵を用いて計算した値とを用いて、第２の認証情報Vsを形成するステップと、
前記クライアントが、前記第２の乱数x2を利用して前記第２の認証情報Vsを認証するステップと、
前記クライアントが、前記第２の乱数x2を用いて第３の認証情報Vcを形成するステップと、
前記サーバが、前記x2'を利用して前記第３の認証情報Vcを認証するステップと、
を含む、方法。
【請求項１６】
RSA及びパスワードに基づく相互認証のための方法であって、
クライアントが、RSA公開鍵(e, N)に基づいて生成した暗号文と、ユーザが入力したパスワードと、前記クライアントのメモリに格納された秘密情報とに基づいて生成した第１の認証情報をサーバに送信するステップと、
前記サーバが、前記秘密情報に対応して前記サーバのデータベースに格納された認証データ及び前記第１の認証情報に基づいて第２の認証情報を生成し、該第２の認証情報を前記クライアントへ送信するステップと、
前記クライアントが、前記第２の認証情報を用いて前記サーバを認証するステップと、
前記クライアントが、前記サーバの認証が成功した場合に、第３の認証情報を前記サーバへ送信すると共に、前記秘密情報を更新して前記メモリに格納するステップと、
前記サーバが、前記第３の認証情報を用いて前記クライアントを認証すると共に、該認証が成功した場合、前記認証データを前記更新した秘密情報と対応がつくように更新し、該更新した認証データを前記データベースに格納するステップと、
を含む、方法。
【請求項１７】
前記第３の認証情報Vc又は前記第３の認証情報は、クライアントに予め格納された署名鍵SigKによって署名化された上で前記サーバへ送信され、
前記サーバは、前記署名化された前記第３の認証情報Vc又は前記第３の認証情報を、前記署名鍵SigKに対応して予め前記サーバに格納されている検証鍵VrfKを用いて検証する、請求項１５又は請求項１６に記載の方法。
【請求項１８】
クライアント及びサーバを少なくとも含む、RSA及びパスワードに基づく相互認証システムあって、
前記クライアントは、
・  前記サーバが生成したRSA公開鍵(e, N)に基づいて生成した暗号文を、ユーザが入力したパスワードに基づいて生成した第１のマスクWでスクランブルした第１の認証情報Zを計算し、
・  前記第１の認証情報Z及び前記クライアントの身元情報であるクライアントIDを、前記サーバへ送信する、
ように構成され、
前記サーバは、
・  クライアントIDに対応付けられて前記サーバのデータベースに格納されている認証データ、及び、前記RSA公開鍵に対応するRSA秘密鍵(d, N)に基づいて、サーバ側マスター鍵kを計算し、
・  受信した前記第１の認証情報Zに基づく値に前記RSA秘密鍵を適用して情報Uを計算し、
・  該情報Uを前記クライアントへ送信する、
ように構成され、
さらに前記クライアントは、受信した前記情報U及び該クライアントが生成する乱数に基づき、クライアント側マスター鍵k'を計算するように構成される、
システム。
【請求項１９】
請求項１８に記載のシステムであって、さらに、
前記サーバが、前記サーバ側マスター鍵kに基づいて第２の認証情報Vsを計算し、該第２の認証情報Vsを前記クライアントへ送信するように構成され、
前記クライアントが、受信した前記第２の認証情報Vsと、前記クライアント側マスター鍵k'に基づいて生成した第１の比較情報とを比較することによって、前記サーバを認証するように構成され、
前記クライアントが、前記クライアント側マスター鍵k'に基づいて第３の認証情報Vcを計算し、該第３の認証情報Vcを前記サーバへ送信するように構成され、
前記サーバが、受信した前記第３の認証情報Vcと、前記サーバ側マスター鍵kに基づいて生成した第２の比較情報とを比較することによって、前記クライアントを認証するように構成される、
システム。
【請求項２０】
請求項１８または１９に記載のシステムであって、さらに、
前記クライアントが、
・  第１の乱数x1および第２の乱数x2を生成すると共に、前記第１の乱数x1を前記RSA公開鍵を用いて暗号化した第１の暗号文y1と、前記第２の乱数x2を前記RSA公開鍵を用いて暗号化した第２の暗号文y2とを計算し、
・  前記第１の認証情報Zを、Z＝y1・x2・W mod Nによって計算し、
・  前記第１の認証情報Z及び前記クライアントの身元情報であるクライアントIDを前記サーバへ送信する際に、前記第２の暗号文y2も共に送信する、
ように構成され、ここで、前記情報Uが、前記第２の暗号文y2を前記RSA秘密鍵で復号した第２の復号文x2'を用いて、U＝(Z/x2')d mod Nによって計算される、システム。
【請求項２１】
請求項２０に記載のシステムのうち請求項１９に従属するシステムであって、さらに、
・  前記第２の認証情報Vsが、前記第２の復号文x2'を利用して計算され、
・  前記第１の比較情報が、前記第２の乱数x2を利用して計算され、
・  前記第３の認証情報Vcが、前記第２の乱数x2を利用して計算され、
・  前記第２の比較情報が、前記第２の復号文x2'を利用して計算される、
システム。
【請求項２２】
前記RSA公開鍵(e, N)の指数eは80ビット以上の素数である、請求項１８から２１のいずれかに記載のシステム。
【請求項２３】
前記サーバは、前記クライアントから受信したクライアントIDに基づいて、前記データベースから前記受信したクライアントIDに対応する認証データを読み出す、請求項１８から２２のいずれかに記載のシステム。
【請求項２４】
前記サーバは、前記クライアントと通信を行う前に、前記データベースに格納されているクライアントIDと認証データの組に対して予め前記サーバ側マスター鍵kを計算しておく、請求項１８から２２のいずれかに記載のシステム。
【請求項２５】
前記データベースには、クライアントIDと認証データの組が複数個格納されており、前記サーバは、クライアントと通信を行う前に、前記複数個の組の少なくとも２個以上について、それぞれマスター鍵を計算しておく、請求項２４に記載のシステム。
【請求項２６】
請求項２５に記載のシステムを用いた匿名認証システムであって、前記サーバが、前記データベースに格納される複数のクライアントIDの各々について、暗号用OTPを計算し、認証要求を送ったクライアントに対して、マスター鍵及び前記計算した暗号用OTPの集合から計算した暗号文を送信するように構成される、
システム。
【請求項２７】
前記サーバのデータベースに格納されている認証データはパスワードである、請求項１８から２６に記載のシステム。
【請求項２８】
前記第１のマスクWが、前記ユーザが入力したパスワード及び前記クライアントのメモリに格納されている秘密情報の二要素を用いて生成され、
前記サーバのデータベースに格納されている認証データは、前記秘密情報に対応して前記データベースに格納される認証データである、
請求項１８から２６に記載のシステム。
【請求項２９】
請求項１８に記載のシステムのうち、請求項１９に記載の事項を含むシステムであって、さらに、
前記クライアントが、前記サーバの認証が成功した場合に前記秘密情報を更新して前記メモリに格納するように構成され、
前記サーバが、前記クライアントの認証が成功した場合に前記認証データを前記更新した秘密情報と対応がつくように更新し、該更新した認証データを前記データベースに格納するように構成される、
システム。
【請求項３０】
請求項１９から２９に記載のシステムであって、請求項１９に記載の事項を含むシステムにおいて、
前記クライアントが、前記第３の認証情報Vcを、署名鍵SigKによって署名化した上で送信し、
前記サーバは、署名化された前記第３の認証情報Vcを、前記署名鍵SigKに対応して予め該サーバのデータベースに格納された検証鍵VrfKを用いて検証する、
システム。
【請求項３１】
RSA及びパスワードに基づく相互認証処理をサーバとの間で遂行するクライアントであって、
第１の乱数x1および第２の乱数x2を生成する手段と、
前記第１の乱数x1をRSA公開鍵(e, N)を用いて暗号化した第１の暗号文y1と、前記第２の乱数x2を前記RSA公開鍵(e, N)を用いて暗号化した第２の暗号文y2とを計算する手段と、
ユーザが入力したパスワードに基づいて、マスクWを生成する手段と、
第１の認証情報Zを、Z＝y1・x2・W mod Nによって計算する手段と、
前記第１の認証情報Zと、前記第２の暗号文y2と、前記クライアントの識別子であるクライアントIDとを、サーバへ送信する手段と、
を備える、クライアント。
【請求項３２】
クライアント及びサーバを少なくとも含む、RSA及びパスワードに基づく相互認証システムであって、請求項３１に記載のクライアントを含み、さらに、
サーバが、前記第２の暗号文y2を前記RSA公開鍵に対応するRSA秘密鍵で復号した第２の復号文x2'と、該第２の復号文x2'及び前記第１の認証情報Zから前記RSA秘密鍵を用いて計算した値とを用いて、第２の認証情報Vsを形成するように構成され、
前記クライアントが、前記第２の乱数x2を利用して前記第２の認証情報Vsを認証し、さらに、前記第２の乱数x2を用いて第３の認証情報Vcを形成するように構成され、
さらに前記サーバが、前記x2'を利用して前記第３の認証情報Vcを認証するように構成される、
システム。
【請求項３３】
クライアント及びサーバを少なくとも含む、RSA及びパスワードに基づく相互認証システムあって、
クライアントが、RSA公開鍵(e, N)に基づいて生成した暗号文と、ユーザが入力したパスワードと、前記クライアントのメモリに格納された秘密情報とに基づいて生成した第１の認証情報をサーバに送信するように構成され、
前記サーバが、前記秘密情報に対応して前記サーバのデータベースに格納された認証データ及び前記第１の認証情報に基づいて第２の認証情報を生成し、該第２の認証情報を前記クライアントへ送信するように構成され、
前記クライアントが、さらに、前記第２の認証情報を用いて前記サーバを認証し、前記サーバの認証が成功した場合に、第３の認証情報を前記サーバへ送信すると共に、前記秘密情報を更新して前記メモリに格納するように構成され、
前記サーバが、さらに、前記第３の認証情報を用いて前記クライアントを認証すると共に、該認証が成功した場合、前記認証データを前記更新した秘密情報と対応がつくように更新し、該更新した認証データを前記データベースに格納するように構成される、
システム。
【請求項３４】
前記クライアントは、前記第３の認証情報Vc又は前記第３の認証情報を、前記クライアントに予め格納された署名鍵SigKによって署名化した上で前記サーバへ送信し、
前記サーバが、前記署名化された前記第３の認証情報Vc又は前記第３の認証情報を、前記署名鍵SigKに対応して予め前記サーバに格納されている検証鍵VrfKを用いて検証する、請求項３２又は請求項３３に記載のシステム。
【請求項３５】
RSA及びパスワードに基づく相互認証処理をクライアントとの間で遂行するサーバにおいて実行される方法であって、
クライアントIDに対応付けられて前記サーバのデータベースに格納されている認証データ、及び、RSA秘密鍵(d, N)に基づいて、サーバ側マスター鍵kを計算するステップと、
クライアントから受信した第１の認証情報Zに基づく値に前記RSA秘密鍵を適用して情報Uを計算し、該情報Uを前記クライアントへ送信するステップと、
を含み、ここで前記第１の認証情報Zは、前記クライアントにおいて、前記RSA秘密鍵に対応するRSA公開鍵(e, N)に基づいて生成した暗号文を、ユーザが入力したパスワードに基づいて生成された第１のマスクWでスクランブルすることによって計算された情報であり、
さらに前記情報Uは、前記クライアントにおいてにおいて、該クライアントが生成する乱数と共にクライアント側マスター鍵k'を計算するために用いられる情報である、
方法。
【請求項３６】
前記サーバ側マスター鍵kに基づいて第２の認証情報Vsを計算し、該第２の認証情報Vsを前記クライアントへ送信するステップと、
前記クライアントが、前記クライアント側マスター鍵k'に基づいて計算した第３の認証情報Vcと、前記サーバが前記サーバ側マスター鍵kに基づいて生成した第２の比較情報とを比較することによって、前記クライアントを認証するステップと、
をさらに含む、請求項３５に記載の方法。
【請求項３７】
前記第１の認証情報Zと共に暗号文y2を受信するステップと、
前記情報Uを、前記暗号文y2を前記RSA秘密鍵(d, N)で復号した復号文x2'を用いて、U＝(Z/x2')d mod Nによって計算するステップと、
を含み、ここで、
・  前記第１の認証情報Zが、前記クライアントにおいて、Z＝y1・x2・W mod Nによって計算されたものであり、
・  y1は、前記クライアントにおいて生成された乱数x1を前記RSA公開鍵(e, N)を用いて暗号化した暗号文であり、
・  x2は、前記クライアントにおいて生成された、前記乱数x1とは別の乱数であり、
・  Wは前記第１のマスクWであり、
・  前記y2は、前記乱数x2を前記RSA公開鍵(e, N)を用いて暗号化した暗号文である、
請求項３５または３６に記載の方法。
【請求項３８】
前記RSA公開鍵(e, N)の指数eは80ビット以上の素数である請求項３５から３７のいずれかに記載の方法。
【請求項３９】
前記サーバは、前記クライアントと通信を行う前に、前記データベースに格納されているクライアントIDと認証データの組に対して予め前記サーバ側マスター鍵kを計算しておく、請求項３５から３８のいずれかに記載の方法。
【請求項４０】
前記データベースには、クライアントIDと認証データの組が複数個格納されており、前記サーバは、クライアントと通信を行う前に、前記複数個の組の少なくとも２個以上について、それぞれマスター鍵を計算しておく、請求項３９に記載の方法。
【請求項４１】
請求項４０に記載の方法を用いた匿名認証処理のために、前記サーバで実行される方法であって、
前記データベースに格納される複数のクライアントIDの各々について、暗号用OTPを計算するステップと、
認証要求を送ったクライアントに対して、マスター鍵及び前記計算した暗号用OTPの集合から計算した暗号文を送信するステップと、
を含む、方法。
【請求項４２】
前記データベースに格納されている認証データはパスワードである、請求項３５から４１に記載の方法。
【請求項４３】
前記第１のマスクWが、前記ユーザが入力したパスワード及び前記クライアントのメモリに格納されている秘密情報の二要素を用いて生成されるものであり、
前記データベースに格納されている認証データは、前記秘密情報に対応して前記データベースに格納される認証データである、
請求項３５から４１に記載の方法。
【請求項４４】
請求項４３に記載の方法のうち、請求項３６に記載の事項を含む方法であって、前記クライアントを認証するステップにおいて、該認証が成功した場合、前記認証データを前記クライアントにおいて更新された秘密情報と対応がつくように更新し、該更新した認証データを前記データベースに格納するステップをさらに含む、方法。
【請求項４５】
請求項３６から４４に記載の方法であって、請求項３６に記載の事項を含む方法において、
前記第３の認証情報Vcが、前記クライアントにおいて署名鍵SigKによって署名化されており、前記サーバは、署名化された前記第３の認証情報Vcを、前記署名鍵SigKに対応して予め該サーバのデータベースに格納された検証鍵VrfKを用いて検証する、方法。
【請求項４６】
クライアント・サーバ間で遂行される、RSA及びパスワードに基づく相互認証処理のために、サーバで実行される方法であって、
クライアントから第１の認証情報Z及び暗号文y2を受信するステップと、
情報Uを、前記暗号文y2をRSA秘密鍵(d, N)で復号した復号文x2'を用いて、U＝(Z/x2')d mod Nによって計算するステップと、
前記計算した情報Uを前記クライアントへ送信するステップと、
を含み、ここで、
・  前記第１の認証情報Zが、前記クライアントにおいて、Z＝y1・x2・W mod Nによって計算されたものであり、
・  y1は、前記クライアントにおいて生成された乱数x1を、前記RSA秘密鍵に対応するRSA公開鍵(e, N)を用いて暗号化した暗号文であり、
・  x2は、前記クライアントにおいて生成された、前記乱数x1とは別の乱数であり、
・  前記Wは第１のマスクであり、
・  前記y2は、前記乱数x2を前記RSA公開鍵(e, N)を用いて暗号化した暗号文である、
方法。
【請求項４７】
RSA及びパスワードに基づく相互認証処理をクライアントとの間で遂行するサーバにおいて実行される方法であって、
RSA公開鍵(e, N)に基づいて生成した暗号文と、ユーザが入力したパスワードと、前記クライアントのメモリに格納された秘密情報とに基づいてクライアントが生成した第１の認証情報を、該クライアントから受信するステップと、
前記サーバが、前記秘密情報に対応して前記サーバのデータベースに格納された認証データ及び前記第１の認証情報に基づいて第２の認証情報を生成し、該第２の認証情報を前記クライアントへ送信するステップと、
前記クライアントにおける、前記第２の認証情報を用いた前記サーバの認証の成功に応じて、該クライアントで生成される第３の認証情報を、前記クライアントから受信するステップと、
前記第３の認証情報を用いて前記クライアントを認証すると共に、該認証が成功した場合、前記認証データを前記クライアントにおいて更新された秘密情報と対応がつくように更新し、該更新した認証データを前記データベースに格納するステップと、
を含む、方法。
【請求項４８】
前記第３の認証情報は、前記クライアントにおいて署名鍵SigKによって署名化されており、前記サーバは、署名化された前記第３の認証情報を、前記署名鍵SigKに対応して予め該サーバのデータベースに格納された検証鍵VrfKを用いて検証する、請求項４７に記載の方法。
【請求項４９】
CPUに、請求項３５から４８に記載の方法を実行されるようにプログラムされる、コンピュータ・プログラム。
【請求項５０】
請求項４９に記載のコンピュータ・プログラムを記憶手段に格納し、内蔵CPUを用いて該コンピュータ・プログラムを実行するように構成される、コンピュータ。
【請求項５１】
RSA及びパスワードに基づく相互認証処理をサーバとの間で遂行するクライアントであって、
前記サーバが生成したRSA公開鍵(e, N)に基づいて生成した暗号文を、ユーザが入力したパスワードに基づいて生成した第１のマスクWでスクランブルした第１の認証情報Zを計算する手段と、
前記第１の認証情報Z及び前記クライアントの身元情報であるクライアントIDを、前記サーバへ送信する手段と、
前記第１の認証情報Zの送信に応じて前記サーバから受信した情報Uと、該クライアントが生成する乱数とに基づき、クライアント側マスター鍵k'を計算する手段と、
を備え、ここで前記情報Uは、前記サーバにおいて、前記第１の認証情報Zに基づく値に前記RSA秘密鍵を適用して計算されたものである、
クライアント。
【請求項５２】
第１の乱数x1および第２の乱数x2を生成する手段と、
前記第１の乱数x1を前記RSA公開鍵を用いて暗号化した第１の暗号文y1と、前記第２の乱数x2を前記RSA公開鍵を用いて暗号化した第２の暗号文y2とを計算する手段と、
前記第１の認証情報Zを、Z＝y1・x2・W mod Nによって計算する手段と、
を備え、
前記第１の認証情報Z及び前記クライアントIDを前記サーバへ送信する手段は、これらの情報と共に前記第２の暗号文y2を送信するように構成され、
前記情報Uは、前記第２の暗号文y2を前記RSA秘密鍵で復号した第２の復号文x2'を用いて、U＝(Z/x2')d mod Nによって計算されるものである、
クライアント。
【請求項５３】
前記RSA公開鍵(e, N)の指数eは80ビット以上の素数である、請求項５１または５２に記載のクライアント。
【請求項５４】
前記第１のマスクWを、前記ユーザが入力したパスワード及び前記クライアントのメモリに格納されている秘密情報の二要素を用いて生成するように構成される、請求項５１から５３のいずれかに記載のクライアント。
【請求項５５】
RSA及びパスワードに基づく相互認証処理をサーバとの間で遂行するクライアントであって、
・  RSA公開鍵(e, N)に基づいて生成した暗号文と、ユーザが入力したパスワードと、メモリから読み出した秘密情報とに基づいて、第１の認証情報を生成する手段と、
・  前記第１の認証情報をサーバへ送信する手段と、
・  前記第１の認証情報の送信に応じて前記サーバから受信した第２の認証情報を用いて前記サーバを認証する手段と、
・  前記サーバの認証が成功した場合に、前記秘密情報を更新して前記メモリに格納する手段と、
を備える、クライアント。
【請求項５６】
前記サーバの認証が成功した場合には、前記クライアントに予め格納された署名鍵SigKによって署名化した第３の認証情報を前記サーバへ送信することにより、前記サーバに対して前記クライアントを認証させる手段、をさらに備えた請求項５５に記載のクライアント。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、RSAをベースとしたパスワード認証方式及びその応用に関する。
【背景技術】
【０００２】
現在までに、RSAをベースにしてパスワード認証を行う方式はいくつか提案されている。例えば、特開平７−２４５６５７号公報には、構内電子交換機が提供するサービス（Remote System Access）を公衆網から利用する際、電子交換機の内部にあるセキュリティ管理装置は利用者（発信者）から受信したパスワードコードと設定しておいたパスワードコードを比較することで認証を行う方式が開示されている。しかしながら、この方式は、攻撃者が利用者に成りすませるため安全ではない。
【０００３】
また、特開平６２−１９０９４３号公報には、各ノードが相手のRSA公開鍵で配送鍵を暗号化した暗号文とその暗号文に自分の署名鍵で署名した署名文を付け、相手側に送るとともに、配送鍵を使って共通鍵暗号で共通鍵暗号方式に使うデータ通信用の鍵をパスワードとともに暗号化して送ることで認証を行う方式が開示されている。この方式では、さらに、RSA暗号用の秘密鍵はマスター鍵で暗号化され保存される。しかしながら、この方式は、自分のRSA公開鍵をほかのノートに配送する際認証を行わない。つまり、攻撃者があるノードに成りすまして自分が作ったRSA公開鍵をほかのノードに送ることで、そのノードからの配送鍵、データ通信用の鍵、パスワードを得ることができるため安全ではない。
【０００４】
このほか、特開平９−１０７３５２号公報には、データ署名に必要とする秘密鍵を携帯可能なハウジング内に格納して、利用者から入力されたパスワードが正しい時のみ、署名生成用の演算処理を行う方式が開示されている。ただし、この方式を安全に利用するには、秘密鍵を保存している携帯可能なハウジングが外部からアクセスや読み取りが不可能である必要があり、デバイスの耐タンパー性が必要となる。
【０００５】
このように、RSAをベースにしてパスワード認証を行う方式はいくつかのものが提案されている。その中で、ＰＫＩに依存せずにパスワード認証をする方式では、RSA公開鍵に対する特殊な攻撃（すなわち、e-residue攻撃）が存在する。その攻撃を防ぐには、（１）RSA公開鍵の一部である暗号用の指数eに制約を掛ける方法と（２）質問・応答型のサーブプロトコル（subprotocol）を用いることがある。（１）を使う場合の問題点は、eを選択する自由度がなくなるため、RSA暗号に必要とする演算回数を最低に抑えることが出来ないことである。（２）を使う場合の問題点は、サーブプロトコルを実行するために余分な計算量と通信量が必要になることである。そして、これまでのRSAをベースにしたパスワード認証方式におけるもっとも大きな問題点は、既存の方式を使って容易にかつ効率的に、プライバシー保護に必要不可欠な匿名認証や安全性をもっと高める二要素認証へ応用が出来ないことである。
【特許文献１】特開平７−２４５６５７号公報
【特許文献２】特開平６２−１９０９４３号公報
【特許文献３】特開平９−１０７３５２号公報
【発明の開示】
【０００６】
本発明者は、前述の課題を解決しうる、RSA及びパスワードに基づく相互認証のための新たな方式を提案する。さらに本発明者は、この新たな認証方式を応用した、新たな匿名認証方式や二要素認証方式を提案する。
【０００７】
本発明者が提案する新たな方式の一つによれば、サーバにおけるマスター鍵の計算は、サーバ自身が生成するRSA秘密鍵(d, N)と、サーバ自身に属する記憶装置に格納される認証データに基づいて行われる。一方、クライアントにおけるマスター鍵の計算は、サーバから送信される情報Uとクライアント自身が生成する乱数に基づいて行われる。
【０００８】
この方式によれば、サーバはクライアントから送られてくる情報に関係なく、マスター鍵の計算を行うことができる。したがって、サーバは、クライアントとの通信を行なう前に（たとえばクライアントからの認証要求を受ける前に）、事前にマスター鍵の計算を済ませておくことができる。
【０００９】
事前にマスター鍵の計算を済ませておくことができることの利点は、クライアントと通信して認証処理を行う時点における、サーバの処理が少なくて済むことである。また、この方式によれば、クライアントとサーバの間の通信量を少なくすることができる。これらの利点は、特に、この方式を匿名認証方式に応用したときに顕著に現れる。
【００１０】
RSA及びパスワードに基づく既存の相互認証方式においては、サーバのマスター鍵をクライアントが決める構成になっていた。既存の匿名認証方式において、クライアントからの認証要求があった場合、クライアントから認証情報を受信した後に、サーバのデータベースに格納されている多数のクライアント情報の全てについて、マスター鍵の計算を行わなければならなかった。マスター鍵の計算には、一般に処理量が極めて大きいRSA復号処理を伴うため、多数のクライアント情報の全てについてマスター鍵の計算を行うことは、非常に長い処理時間を必要とした。したがって、クライアントとサーバが通信して認証処理を行う時点における、計算時間は非常に長いものとならざるを得なかった。
【００１１】
しかし本発明者が提案するところによれば、サーバは、クライアントと通信を行なう前に、そのデータベースに格納されているクライアントのためのマスター鍵の計算を済ませておくことができるため、クライアントが認証を要求してきた時には、すでに計算しておいたマスター鍵（又はそれに基づく情報）を利用して、直ちに応答を返すことができる。したがって、認証に要する通信時間を劇的に短縮することが可能となる。
【００１２】
匿名認証方式の場合、クライアントの認証要求に対してはじめに送信されるメッセージは、実際には、サーバの情報とマスター鍵に基づいて計算されるOTPで暗号化したものである。上記のアイディアによれば、クライアントとの接続を行なう前に、サーバに格納されたクライアント情報の全てについてのOTP暗号文を、予め計算しておくことができる。
【００１３】
同様の利点が、上記のアイディアを二要素認証方式などへ応用した場合にも得ることができる。すなわち、クライアントではなくサーバがマスター鍵を決める構成としたことで、サーバにおける計算を事前に行なうことができ、クライアントが認証を要求してきた時には、少ない処理で素早く認証を完了することが可能になる。
【００１４】
本発明者が提案するところによれば、前述のように、クライアントにおけるマスター鍵の計算は、サーバから送信される情報Uに基づいて行われる。しかしてこの情報Uは、クライアントから送信される認証情報に基づいて生成される。この認証情報が、サーバに格納されている認証データに正しく対応するデータに基づいて生成されたものでなければ、認証は失敗する。このデータはパスワードそのものであることができる。また実施形態によっては、クライアントに属する記憶装置に格納された情報とパスワードから生成されたものでもよい。二要素認証方式への応用の場合、パスワードとその他の情報から生成されたものであることができる。
【００１５】
本発明者が提案する別の新たな方式の一つによれば、クライアント側で乱数を２つ（x1, x2）生成し、これらの乱数や、これらの乱数をRSA公開鍵(e, N)で暗号化した（y1, y2）を認証に用いる。具体的には、ユーザが入力したパスワードに少なくとも基づいてマスクWを生成すると共に、認証情報Zを、Z＝y1・x2・W mod Nによって計算し、認証情報Z及び暗号文y2を、クライアントの識別子と共にサーバへ送信する。
【００１６】
この方式において、攻撃者が認証情報Zからパスワードに関する情報を不正に得ようと考えても、それにはU＝(Z/x2) mod Nを計算しなければならない。そのためには、攻撃者は、自分が生成したRSA 公開鍵(e, N)でy2からx2を求める必要がある。（ただし、その時、Nは2 つのランダムに選択された大きな素数p とq の積であり)、e は、e と(p-1)・(q-1)の最大公約数が1 でないような素数である。）しかしながら、その公開鍵を使ってy2からx2を求めようとしても、その候補の数は少なくとも2のe乗個存在する。したがってeを適切に設定することにより、その探索を事実上不可能とすることができる。たとえば本願の出願時点における計算機の能力を鑑みれば、eを80ビット以上の素数と設定すれば、その探索を不可能にするに十分であると考えられる。したがってこの方式によれば、パスワードに対するe-residue攻撃を防止することができる。また、このアイディアを二要素認証システムに応用すると、上の性質により、攻撃者の書き換え攻撃（replacement攻撃）を防止することも可能となる。
【００１７】
本発明者が提案する第３の新たな方式によれば、クライアントは、パスワードのみならず、そのメモリに保持された秘密情報にも基づいて、サーバへ送信する認証情報を形成する。またサーバは、当該秘密情報に対応してサーバに格納されている認証データに基づいて、クライアントへ送信する認証情報を形成する。そして、その相互認証が成功したとき、クライアントおよびサーバは、それぞれ、次のセッションのために、その秘密情報及び認証データを更新しておく。
【００１８】
この方式によれば、サーバはクライアントのパスワードを全数探索することができなくなり、クライアントから記録情報が漏洩したとしても安全性が保たれる。
【００１９】
本発明者が提案する第４の新たな方式の一つによれば、クライアントがサーバへ送信する認証情報を、クライアントに予め格納された署名鍵SigKによって署名化し、サーバは、その署名化された認証情報を、署名鍵SigKに対応して予めサーバに格納された検証鍵VrfKを用いて検証することによって行なう。
【００２０】
この方式によれば、認証情報が署名化されているため、server compromise impersonation攻撃を防止することができる。
【００２１】
本発明者の提案は、基本的にユーザやサーバ認証を必要とするサービスやアプリケーションで利用できる。例えば、ユーザ認証やサーバ認証は、電子商取引、サーバやネットワークへのログインなどで必要とされており、その応用先は広い。また、本発明者の提案に基づく匿名認証は、匿名を要するサービスやアプリケーション（例えば、匿名掲示板や内部告発システムなど）で利用できる。そして、本発明者の提案に基づく二要素認証は、クライアントが耐タンパモジュールなどを備えてない場合はユビキタス環境での認証方式として適しているし、クライアントが耐タンパモジュールを用いる場合はもっと高い安全性を要求するインタネットバンキングなどに使うことができる。
【００２２】
クライアントは、例えばパソコンや携帯電話、ＰＤＡなどであることができ、計算能力やメモリを具備してユーザによって操作されるコンピュータであることができる。サーバも一般的なコンピュータであることができるが、多数のユーザを管理可能な能力を備えるコンピュータであることが好ましい。サーバは、ネットワークの構成要素の１つであったり、電子商取引システムの構成要素の１つであったりすることができる。
【００２３】
本明細書に開示される、RSA及びパスワードに基づく相互認証のための新たな方式は、クライアント側及びサーバ側の両方において、新規且つ有用な特徴を含んでいる。従って、本発明者の提案の具現化形態には、クライアント及びサーバを含む相互認証システム及び方法のみならず、相互認証のためのクライアントにおける新規な構成や方法や、サーバにおける新規な構成や方法を含む。また既存の多くの相互認証処理と同様に、本明細書に開示される相互認証処理においても、ソフトウェア処理によってその主要部を実現することが可能であるため、本発明者の提案の具現化形態には、クライアントやサーバで実行されるプログラムであって、ここに提案される処理をCPUに遂行させるプログラムが含まれる。
【００２４】
本発明者の提案に基づく好適な具現化形態のいくつかは、添付の特許請求の範囲に特定されている。しかしながら、その具現化形態は、特許請求の範囲や明細書及び図面に明示的に記載されるものに限定されず、本願に開示される発明の範囲を逸脱することなく、様々な態様を呈することが可能である。本願に開示される発明の具現化形態は、特許請求の範囲や明細書及び図面に明示的に開示されるか否かにかかわらず、これらの書類から教示されうるあらゆる新規かつ有益な構成やそれらの組み合わせを、その範囲に含むものである。
【発明を実施するための最良の形態】
【００２５】
以下、添付図面を参照しつつ、本発明者の提案の好適な具現化形態の例（実施例）について説明する。まず、RSAをベースにしたパスワード認証システム及びその応用システムの実施例を説明する前に、いくつかの背景知識及び以下の説明において用いる記号について説明しておく。
【００２６】
公開鍵暗号方式には、公開鍵（PubK）および秘密鍵（PriK）の対（PubK, PriK）と、暗号化関数Encと、復号化関数Decとが用いられる。公開鍵は秘密ではなく、誰でも入手できるように公開しておく。それに対して秘密鍵は所有者のみの秘密である。暗号化は、公開鍵を用いてメッセージmをC＝EncPubK(m)となるような暗号文Cを生成することによって行われうる。暗号文は、秘密鍵を用いてのみ、m＝DecPriK(C)と復号されることが可能である。つまり、暗号文は、公開鍵を用いては復号できない。
【００２７】
そして公開鍵署名方式では、検証鍵（VrfK）および署名鍵（SigK）の対（VrfK, SigK）が存在する。公開鍵暗号方式の公開鍵と同じように、検証鍵は秘密ではなく、誰でも入手できるように公開しておく。それに対して、署名鍵は所有者(署名者)のみの秘密である。署名化は、署名鍵を用いてメッセージmをs＝SignSigK(m)となるような署名文(m, s)を生成することで行われる。署名文の検証は、検証鍵を用いて、VerVrfK(m, s)を求めることで検証可能である。つまり、検証できた場合はその署名文(m, s)が正当な署名者により生成されたことを意味し、そうではない場合は、(m, s)が正しい署名文ではないことになる。
【００２８】
ここで、RSA公開鍵方式についてその具体的な一例を説明する。しかし、RSA公開鍵方式の詳細な構成方法が以下の例に限定されるものではないことに留意されたい。周知のRSA公開鍵方式では、公開鍵は(e, N)であり、秘密鍵は(d, N)である。ただし、Nは、2つのランダムに選択された大きな素数pとqの積であり(すなわち、N＝p・q)、eは、eと(p-1)・(q-1)の最大公約数が1であるような任意の数(例えば、e＝3あるいはe＝216＋1)であり、dは、e-1 mod ((p-1)・(q-1))である。安全性を最大化するには、pとqを同じ長さにする。一般に、暗号システムでは、その安全性のレベルを記述するセキュリティパラメータを有する。RSA公開鍵方式でセキュリティパラメータをlにすると2l-1＜N＜2lである。メッセージm(m∈ZN* )に対して、暗号化関数はEncPubK(m)＝me mod Nであり、復号化関数はDecPriK(C)＝Cd mod Nである。ここで、暗号文Cと公開鍵(e, N)が与えられた時、メッセージmを求めるのは計算量的に困難である。RSAは、大きな数Nの素因数分解が難しいことから安全性を得ている。
【００２９】
以下の説明において、ハッシュ関数Hのセキュリティパラメータをk（ただし、1/2kは無視できるほど小さいと仮定する）にする。また、{0, 1}*は有限の2進数のストリングの集合を、{0, 1}kは長さkの2進数のストリングの集合を示す。ハッシュ関数FとHは{0, 1}*の入力から{0, 1}kの出力を出す安全な一方向関数であり、FDH(Full-Domain Hash)関数Gは{0, 1}*の入力から、
0005392741.tif 000002
の出力を作る安全な一方向関数である。また、乱数発生器から発生される乱数はt(t∈ZN*)を無作為に生成する。また、‖は値を連結（concatenation）するという意味である。また、CとSはそれぞれユーザとサーバを表すIDである。また、
0005392741.tif 000003
は、値を排他的論理和（exclusive OR）するという意味である。
【００３０】
これから説明するRSAをベースにしたパスワード認証システム及びその応用システムにおいて、RSA公開鍵(e, N)の指数であるeは80ビット以上の素数であり、RSA公開鍵(e, N)を用いて暗号化する際には必ずeが80ビット以上の素数であることとNが奇数であることをチックする。る。その時、eは80ビット以上の素数の中でHamming weightが最小になるのが好ましい。
〔実施例１：RSAをベースにしたパスワード認証システム〕
【００３１】
図１は、実施例１として以下に説明する、RSAをベースにしたパスワード認証システム100の構成を示すブロック図である。パスワード認証システム100は、ユーザ端末装置102とサーバの認証装置104とで構成される。このパスワード認証システムでは、ユーザの端末装置は入力されたパスワードに基づいてある演算を行い、ユーザのパスワード認証データ（すなわち、パスワードそのもの）を保持しているサーバの認証装置と、インターネットのようなオープンネットワーク106を通してお互いに相互認証して、その相互認証が成功した時、お互いに共有する同じセッション鍵を確保する。
【００３２】
なお、図１を含めた以下の全ての図において、そこに描かれる機能要素のそれぞれは、専用のハードウェアによって実現されることもできるが、CPUとコンピュータ・プログラムを用いたソフトウェア処理によって実現されることができる場合がある。従って、以下の全ての図において、例えば「乱数発生器206」のように「器」「装置」のような用語が用いられているとしても、その実現手段はハードウェアに限定されるものではなく、ソフトウェア処理による手段によっても実装可能であることに注意されたい。また、２つ以上の機能要素を１つのハードウェア回路にまとめたり、あるいは２つ以上の機能要素をそれぞれサブプログラムとして含んだ１つのプログラムにまとめたりすることも可能である。例えば、以下の実施例で紹介されるユーザ端末装置やサーバの認証装置の機能の全てを、プロセッサとメモリとプログラムコードを用いて実現することも可能である。さらに、各機能要素をFPGAのようなプログラマブルな回路を用いて実現することも可能である。当業者であれば、当然ながら、実施形態の具体的要求に応じて、適切な実装手段を選択することができるだろう。
＜ユーザ端末装置の動作＞
【００３３】
初めに、図２を参照して、RSAをベースにしたパスワード認証システム100におけるユーザ端末装置102の動作について説明する。図２は、パスワード認証システム100における、ユーザ端末装置102の機能構成及び動作を説明するための図である。
【００３４】
まず、マスク生成器202は、ユーザから入力されたパスワードpwとクライアントIDであるCとサーバIDであるSとを入力として、マスク W＝G(C, S, pw)を計算して出力する。
【００３５】
そして、RSA暗号演算器204は、乱数発生器206によりランダムに発生させた乱数x1, x2 (x1, x2∈ZN*)とサーバの認証装置104から受信したRSA公開鍵(e, N)とを入力として、暗号文y1＝x1e mod Nと暗号文y2＝x2e mod Nとを計算して出力する。
【００３６】
結合器208は、マスク生成器202から生成されたマスクWと、乱数発生器206により発生させた乱数x2と、RSA暗号演算器204から出力された暗号文y1と、サーバの認証装置から受信したRSA公開鍵(e, N)とを入力として、マスクによってスクランブルされた暗号文Z＝y1・x2・W mod Nを計算して出力する。
【００３７】
端末装置102は、クライアントIDであるCと結合器208により出力されたZとRSA暗号演算器204により出力された暗号文y2とをサーバの認証装置104へ送信する。
【００３８】
続いて、マスター鍵生成器210は、サーバの認証装置104から受信した値Uと、乱数発生器により発生させた乱数x1と、サーバの認証装置104から受信したRSA公開鍵(e, N)とを入力として、マスター鍵k'＝U/x1 mod Nを計算して出力する。
【００３９】
そして、認証結果判断部212は、サーバの認証装置104から受信したVSが正しく生成された認証子であるかどうかを判断する。認証結果判断部212は、クライアントIDであるCと、サーバIDであるSと、サーバの認証装置104から受信したRSA公開鍵(e, N)と、結合器208により出力されたマスクによってスクランブルされた暗号文Zと、RSA暗号演算器204により出力された暗号文y2と、サーバの認証装置104から受信した値Uと、ユーザから入力されたパスワードpwと、乱数発生器206により発生させた乱数x2と、マスター鍵生成器210により出力されたマスター鍵k'とを入力として、H(1‖Msg‖pw‖x2‖k')を計算し、それとサーバの認証装置104から受信したVSとを比較する。ここで、Msg＝C‖S‖e‖N‖Z‖y2‖Uである。ここで、Hの代わりにMAC(Message Authentication Code)を使ってもよい。
【００４０】
認証結果判断部212において、VSとH(1‖Msg‖pw‖x2‖k')が一致しない場合、認証結果判断部212は、エラーメッセージ発生器214に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器214はエラーを発生して処理を中断する。
【００４１】
一方、認証結果判断部212においてVSとH(1‖Msg‖pw‖x2‖k')が一致した場合はサーバの認証装置104が正当な装置として認証して、Msg‖pw‖x2‖k'を出力する。
【００４２】
そして、認証子生成器216は、認証結果判断部212から入力されたMsg‖pw‖x2‖k'から認証子VCを、VC＝H(2‖Msg‖pw‖x2‖k')により計算して出力する。
【００４３】
ユーザの端末装置102は、認証子生成器216により出力された認証子VCをサーバの認証装置へ送信する。
【００４４】
セッション鍵生成器218は、認証結果判断部212から入力されたMsg‖pw‖x2‖k'を入力として、セッション鍵SKをSK＝H(3‖Msg‖pw‖x2‖k')により生成して出力する。
＜サーバの認証装置の動作＞
【００４５】
次に、図３を参照して、パスワード認証システム100におけるサーバの認証装置104の動作について説明する。サーバの認証装置104は、クライアントのIDであるCとそのユーザのパスワードであるpwの対を装置内部にあるデータベース302に保持している。
【００４６】
まず、RSA鍵生成器304は、セキュリティパラメータlを入力として、RSA鍵生成アルゴリズムに従ってRSA公開鍵(e, N)とRSA秘密鍵(d, N)を生成して出力する。認証装置104はRSA鍵生成器304により生成されたRSA公開鍵(e, N)をユーザの端末装置102へ送信する。
【００４７】
そして、RSA復号演算器306は、ユーザの端末装置102から受信した暗号文y2とRSA鍵生成器304により生成されたRSA秘密鍵(d, N)とを入力として、乱数x2'を、x2'＝y2d mod Nにより計算して出力する。
【００４８】
また、RSA復号演算器306は、ユーザの端末装置102から受信したマスクによってスクランブルされた暗号文Zと、乱数x2'と、RSA鍵生成器304により生成されたRSA秘密鍵(d, N)とを入力として、値Uを、U＝(Z/x2')d mod Nにより計算して出力する。
【００４９】
一方、マスク生成器308は、クライアントIDであるCとサーバのIDであるSとデータベースから読み出したユーザのパスワードpwとを入力として、マスクW＝G(C, S, pw)を計算して出力する。
【００５０】
そして、マスター鍵生成器310は、マスク生成器308により生成されたマスクWとRSA鍵生成器304により生成されたRSA秘密鍵(d, N)とを入力として、マスター鍵kを、k＝Wd mod Nにより計算して出力する。
【００５１】
集合器312は、クライアントIDであるCと、サーバIDであるSと、RSA公開鍵により生成されたRSA公開鍵(e, N)と、ユーザの端末装置から受信したマスクによってスクランブルされた暗号文Zと、もう一つの暗号文y2と、RSA復号演算器により出力された値Uと乱数x2'と、データベースから読み出したユーザのパスワードpwと、マスター鍵生成器から生成されたマスター鍵kとを入力として、Msg‖pw‖x2'‖kを出力する。ここで、Msg＝C‖S‖e‖N‖Z‖y2‖Uである。
【００５２】
そして、認証子生成器314は、集合器312から出力されたMsg‖pw‖x2'‖kを入力として、認証子VSを、VS＝H(1‖Msg‖pw‖x2'‖k)により計算してMsg‖pw‖x2'‖kとともに出力する。
【００５３】
サーバの認証装置104は、認証子生成器314により計算して得られたVSとサーバのIDであるSとRSA復号演算器306により出力された値Uとをユーザの端末装置102へ送信する。
【００５４】
続いて、認証結果判断部316は、認証子生成器314から出力されたMsg‖pw‖x2'‖kを入力として、H(2‖Msg‖pw‖x2'‖k)を計算してユーザの端末装置102から受信したVCと比較する。ここで、Hの代わりにMAC(Message Authentication Code)を使ってもよい。
【００５５】
認証結果判断部316においてVCとH(2‖Msg‖pw‖x2'‖k)が一致しない場合、認証結果判断部は、エラーメッセージ発生器318に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器318はエラーを発生して処理を中断する。
【００５６】
一方、認証結果判断部316において、VCとH(2‖Msg‖pw‖x2'‖k)が一致した場合は、ユーザの端末装置が正当な装置として認証する。
【００５７】
セッション鍵生成器320は、認証子生成器314から出力されたMsg‖pw‖x2'‖kを入力として、セッション鍵SKをSK＝H(3‖Msg‖pw‖x2'‖k)により生成して出力する。
〔実施例２：RSAをベースにした匿名認証システム〕
【００５８】
図4は、前述のパスワード認証システム100の応用である、RSAをベースにした匿名認証システム400の構成を示すブロック図である。匿名認証システム400は、ユーザの端末装置402とサーバの認証装置404とを備えている。サーバの認証装置404は、n個のクライアントのIDであるCjとそのユーザのパスワードであるpwjの対((Cj, pwj),1≦j≦n)を装置内部にあるデータベースに保持している。匿名認証システム400では、ユーザの端末装置402は入力されたパスワードに基づいてある演算を行い、ユーザのパスワード認証データ（すなわち、パスワードそのもの）を保持しているサーバの認証装置404と、インターネットのようなオープンネットワーク106を通してお互いに相互認証して、その相互認証が成功した時、お互いに共有する同じセッション鍵を確保する。つまり、サーバの認証装置404は、通信する相手が登録されたパスワードの一つを知っているユーザであることは確認できるものの、そのユーザを特定することは出来ない。
【００５９】
本発明の第２実施例としてここに紹介する匿名認証システム400の特徴は、サーバの認証装置404に必要になる暗号演算自体の量は装置内部にあるデータベースに保持しているクライアントの数（つまり、ｎ）に比例して増加するものの、その暗号演算はユーザの端末装置402と通信を行う前に事前に済ませておくことができることである。そのため、ユーザの端末装置402と実際に通信を行う間にサーバの認証装置404で行うことが必要な暗号演算は、ただ２回のRSA復号演算で済む。
＜ユーザの端末装置の動作＞
【００６０】
まず、図５を参照して、匿名認証システム400におけるユーザの端末装置402の機能構成と動作について説明する。なお、前述のユーザ端末装置102と全く同じ構成要素については同じ符号を付してそれを示している。
【００６１】
まず、マスク生成器202は、ユーザから入力されたパスワードpwiとクライアントIDであるCiとサーバIDであるSとを入力として、マスクWi＝G(Ci, S, pwi)を計算して出力する。
【００６２】
そして、RSA暗号演算器204は、乱数発生器206によりランダムに発生させた乱数x1, x2 (x1, x2∈ZN*)とサーバの認証装置から受信したRSA公開鍵(e, N)とを入力として、暗号文y1＝x1e mod Nと暗号文y2＝x2e mod Nを計算して出力する。
【００６３】
結合器208は、マスク生成器202から生成されたマスクWiと乱数発生器206により発生させた乱数x2とRSA暗号演算器204から出力された暗号文y1とサーバの認証装置404から受信したRSA公開鍵(e, N)とを入力として、マスクによってスクランブルされた暗号文Z＝y1・x2・Wi mod Nを計算して出力する。
【００６４】
ユーザの端末装置402は、クライアントIDの集合であるC＝{C1, C2, …, Cn-1, Cn}と、結合器208により出力されたZと、RSA暗号演算器204により出力された暗号文y2とをサーバの認証装置404へ送信する。
【００６５】
続いて、マスター鍵生成器210は、サーバの認証装置404から受信した値Uと乱数発生器206により発生させた乱数x1とサーバの認証装置404から受信したRSA公開鍵(e, N)とを入力として、マスター鍵Ki＝U/x1 mod Nを計算して出力する。
【００６６】
そして、復号用OTP生成器520は、クライアントIDであるCiと、マスク生成器502から生成されたマスクWiと、マスター鍵生成器から生成されたマスター鍵Kiとを入力として、復号用OTPであるF(Ci, Wi, Ki)を計算して出力する。
【００６７】
そして、マスター秘密値生成器522は、復号用OTP生成器520から生成された復号用OTPであるF(Ci, Wi, Ki)と、サーバの認証装置404から受信したi番目のOTP暗号文Ti＝iとを入力として、マスター秘密値：
0005392741.tif 000004
を計算して出力する。
【００６８】
認証結果判断部512は、サーバの認証装置404から受信したVSが正しく生成された認証子であるかどうかを判断する。認証結果判断部512は、クライアントIDの集合であるCと、サーバIDであるSと、サーバの認証装置404から受信したRSA公開鍵(e, N)と、結合器により出力されたマスクによってスクランブルされた暗号文Zと、RSA暗号演算器204により出力された暗号文y2と、サーバの認証装置404から受信した値Uと、OTP暗号文の集合である{Ti}1≦i≦nと乱数発生器により発生させた乱数x2と、マスター秘密値生成器522により出力されたマスター秘密値MS'とを入力としてH(1‖Msg‖x2‖MS')を計算し、サーバの認証装置404から受信したVSと比較する。ここで、Msg＝C‖S‖e‖N‖Z‖y2‖U‖{Ti}1≦i≦nである。ここで、Hの代わりにMAC(Message Authentication Code)を使ってもよい。
【００６９】
認証結果判断部512において、VSとH(1‖Msg‖x2‖MS')が一致しない場合、認証結果判断部は、エラーメッセージ発生器に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器はエラーを発生して処理を中断する。
【００７０】
一方、認証結果判断部512においてVSとH(1‖Msg‖x2‖MS')が一致した場合はサーバの認証装置404が正当な装置として認証して、Msg‖x2‖MS'を出力する。
【００７１】
そして、認証子生成器516は、認証結果判断部512から入力されたMsg‖x2‖MS'から、認証子VCを、VCi＝H(2‖Msg‖x2‖MS')により計算して出力する。
【００７２】
ユーザの端末装置402は、認証子生成器516により出力された認証子VCiをサーバの認証装置404へ送信する。
【００７３】
セッション鍵生成器518は、認証結果判断部512から入力されたMsg‖x2‖MS'を入力として、セッション鍵SKを、SK＝H(3‖Msg‖x2‖MS')により生成して出力する。
＜サーバの認証装置404の動作＞
【００７４】
次に、図６を参照して、RSAをベースにした匿名認証システム400におけるサーバの認証装置404の機能要素及び動作について説明する。サーバの認証装置404はn個のクライアントのIDであるCjとそのユーザのパスワードであるpwjの対((Cj，pwj)，1≦j≦n)を装置内部にあるデータベース602に保持している。
【００７５】
まず、RSA鍵生成器304は、セキュリティパラメータlを入力として、RSA鍵生成アルゴリズムに従ってRSA公開鍵(e，N)とRSA秘密鍵(d，N)を生成して出力する。
【００７６】
マスク生成器608は、各クライアントIDであるCjとサーバのIDであるSとデータベースから読み出した各ユーザのパスワードpwjを入力として、マスクWj＝G(Cj，S，pwj)を計算して、その集合である{Wj}1≦j≦nを{Cj}1≦j≦nとともに出力する。
【００７７】
そして、マスター鍵生成器610は、マスク生成器608により生成されたマスクの集合{Wj}1≦j≦nとRSA鍵生成器304により生成されたRSA秘密鍵(d，N)を入力として、マスター鍵Kjを、Kj＝Wjd mod Nにより計算して、その集合である{Kj}1≦j≦nを出力する。
【００７８】
そして、暗号用OTP生成器622は、マスク生成器608から出力された各クライアントIDであるCjと各マスクWjとマスター鍵生成器610から生成されたマスター鍵Kjを入力として、暗号用OTPであるF(Cj，Wj，Kj)を計算して、その集合である{F(Cj，Wj，Kj)}1≦j≦nを出力する。
【００７９】
そして、OTP暗号演算器624は、暗号用OTP生成器622から生成された暗号用OTPの集合である{F(Cj，Wj，Kj)}1≦j≦nとマスター秘密値発生器626によりランダムに発生させたマスター秘密値MS(MS∈{0，1}k)を入力として、OTP暗号文：
0005392741.tif 000005
を計算して、その集合である{Tj}1≦j≦nを出力する。
【００８０】
サーバの認証装置404において、これまでの計算はユーザの端末装置402と通信をする前に、予め済ませておくことができる。
【００８１】
続いてサーバの認証装置404は、RSA鍵生成器304により生成されたRSA公開鍵(e，N)をユーザの端末装置402へ送信する。
【００８２】
そして、RSA復号演算器306は、ユーザの端末装置402から受信した暗号文y2とRSA鍵生成器304により生成されたRSA秘密鍵(d，N)を入力として、乱数x2'を、x2'＝y2d mod Nにより計算して出力する。
【００８３】
また、RSA復号演算器306は、ユーザの端末装置402から受信したマスクによってスクランブルされた暗号文Zと乱数x2'とRSA鍵生成器304により生成されたRSA秘密鍵(d，N)とを入力として、値Uを、U＝(Z/x2')d mod Nにより計算して出力する。
【００８４】
一方、集合器612は、クライアントIDの集合であるC＝{C1，C2，…，Cn-1，Cn}と、サーバIDであるSと、RSA公開鍵により生成されたRSA公開鍵(e，N)と、ユーザの端末装置402から受信したマスクによってスクランブルされた暗号文Zと、もう一つの暗号文y2と、RSA復号演算器306により出力された値Uと、乱数x2'と、OTP暗号演算器624により出力されたOTP暗号文の集合である{Tj}1≦j≦nとを入力として、Msg‖x2'を出力する。ここで、Msg＝C‖S‖e‖N‖Z‖y2‖U‖{Tj}1≦j≦nである。
【００８５】
そして、認証子生成器614は、集合器612から出力されたMsg‖x2'とマスター秘密値発生器626にランダムに発生させたマスター秘密値MSを入力として、認証子VSを、VS＝H(1‖Msg‖x2'‖MS)により計算してMsg‖x2'‖MSとともに出力する。
【００８６】
サーバの認証装置404は、認証子生成器614により計算して得られたVSとサーバのIDであるSとRSA復号演算器306により出力された値UとOTP暗号演算器624により出力されたOTP暗号文の集合である{Tj}1≦j≦nをユーザの端末装置402へ送信する。
【００８７】
続いて、認証結果判断部616は、認証子生成器614から出力されたMsg‖x2'‖MSを入力として、H(2‖Msg‖x2'‖MS)を計算してユーザの端末装置402から受信したVCiと比較する。ここで、Hの代わりにMAC(Message Authentication Code)を使ってもよい。
【００８８】
認証結果判断部616においてVCiとH(2‖Msg‖x2'‖MS)が一致しない場合、認証結果判断部616は、エラーメッセージ発生器318に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器318はエラーを発生して処理を中断する。
【００８９】
一方、認証結果判断部616において、VCiとH(2‖Msg‖x2'‖MS)が一致した場合は、ユーザの端末装置402が正当な装置として認証する。
【００９０】
セッション鍵生成器620は、認証子生成器614から出力されたMsg‖x2'‖MSを入力として、セッション鍵SKをSK＝H(3‖Msg‖x2'‖MS)により生成して出力する。
〔実施例３：RSAをベースにした二要素認証システム〕
【００９１】
図7は、前述のパスワード認証システム100の応用である、RSAをベースにした二要素認証システム700の構成を示すブロック図である。二要素認証システム700は、図7はユーザの端末装置702とサーバの認証装置704を備える。図7は、RSAをベースにした二要素認証システム700のj番目プロトコル実行を表している。ユーザの端末装置702はi番目サーバのIDであるSiとj番目記録情報CSjとを装置内部にあるメモリに保存していて、サーバの認証装置704はクライアントのIDであるCとj番目認証データSSjを装置内部にあるデータベースに保持している。ここで、iとjはi，j≧1になるような整数である。
【００９２】
この二要素認証システム700のj番目プロトコル実行では、ユーザの端末装置702はユーザから入力されたパスワードとメモリに保持された記録情報CSjに基づいてある演算を行い、ユーザの認証データである記録情報SSjを保持しているサーバの認証装置704と、インターネットのようなオープンネットワーク106を通してお互いに相互認証して、その相互認証が成功した時、お互いに共有する同じセッション鍵を確保しながら各自の記録情報を次のセッションのために更新しておく。それにより、サーバの端末装置はユーザの認証データに対してパスワードを全数探索することができなくなり、ユーザの端末装置702は記録情報が漏洩したとしても安全性が落ちることがない。
［１．二要素認証システム７００の初期化］
【００９３】
二要素認証システム700の初期化では、ユーザの端末装置702はユーザから入力されたパスワードに基づいて、サーバの認証装置704と安全な通信路（例えば、直接に渡したり、郵便で送付したり、あるいは電話で知らせるなど）を用いて初期化処理を行い、ユーザの端末装置702は内蔵するメモリへ記録情報としてCS1を保存し、サーバの認証装置704は内蔵するデータベースへ記録情報としてSS1を保存する。
【００９４】
以下、図8および9を参照して、ユーザの端末装置702およびサーバの認証装置704において二要素認証システム700のための初期化を行う作業を説明する。
＜ユーザの端末装置702における作業＞
【００９５】
図８を参照する。認証データ生成器1032は、乱数発生器206によりランダムに発生させた乱数si1(si1∈{0，1}k)と、クライアントIDであるCと、i番目サーバIDであるSiと、ユーザから入力されたパスワードpwとを入力として、認証データ：
0005392741.tif 000006
を計算して出力する。
【００９６】
ユーザの端末装置702は、認証データ生成器1032から生成されたサーバ用の認証データvi1をサーバの認証装置704へ送信する。ユーザの端末装置702は、i番目サーバIDであるSiと、カウンタ1 と、乱数発生器206により発生させた乱数si1と、サーバの認証装置704から受信したRSA公開鍵(e，N)をユーザの端末装置702が内蔵するメモリ1034へ記録情報としてSi，1，si1，(e，N)を保存する。
＜サーバの認証装置704における作業＞
【００９７】
次に、図9を参照して、サーバの認証装置704の初期化の作業について説明する。
【００９８】
RSA鍵生成器304は、セキュリティパラメータlを入力として、RSA鍵生成アルゴリズムに従ってRSA公開鍵(e，N)とRSA秘密鍵(d，N)を生成して出力する。
【００９９】
サーバの認証装置704は、RSA鍵生成器304から生成されたRSA公開鍵(e，N)をユーザの端末装置702へ送信する。サーバの認証装置704は、クライアントIDであるCとカウンタ1とユーザの端末装置702から受信した認証データvi1とRSA鍵生成器304により生成されたRSA秘密鍵(d，N)をサーバの認証装置704の内部にあるデータベース1102へ記録情報としてC，1，vi1，(d，N)を保存する。
［２．二要素認証システム700のj(j≧1)番目プロトコル実行］
【０１００】
次に、図10および11を参照して、前述した初期化を行った後（j＝1の時）の、あるいは二要素認証システム700のj−1番目プロトコル実行を行った後（すなわち、CSj＝(Si，j，sij，(e，N)，［SigK］)とSSj＝(C，j，vij，(d，N)，［VrfK］)の時）の、RSAをベースにした二要素認証システム700のj番目プロトコル実行を行う動作をユーザの端末装置702とサーバの認証装置704とに分けて説明する。
＜ユーザの端末装置702の動作＞
【０１０１】
まず図10を参照し、二要素認証システム700におけるユーザの端末装置702のj番目プロトコル実行の動作について説明する。この時、ユーザの端末装置702は記録情報としてSi，j，sij，(e，N)を装置内部にあるメモリ1034に保持している。
【０１０２】
まず、認証データ生成器1032は、ユーザから入力されたパスワードpwと、クライアントIDであるCと、i番目サーバIDであるSiと、メモリ1034から読み出した乱数sijとを入力として、認証データ：
0005392741.tif 000007
を計算して出力する。
【０１０３】
そして、マスク生成器1002は、認証データ生成器1032から生成された認証データvijとメモリ1034から読み出したカウンタjを入力として、マスクW＝G(j，vij)を計算して出力する。
【０１０４】
そして、RSA暗号演算器204は、乱数発生器206によりランダムに発生させた乱数x1，x2 (x1，x2∈ZN*)とメモリ1034から読み出したRSA公開鍵(e，N)を入力として、暗号文y1＝x1e mod Nと暗号文y2＝x2e mod Nを計算して出力する。
【０１０５】
結合器208は、マスク生成器1002から生成されたマスクWと乱数発生器206により発生させた乱数x2とRSA暗号演算器204から出力された暗号文y1とメモリ1034から読み出したRSA公開鍵(e，N)を入力として、マスクによってスクランブルされた暗号文Z＝y1・x2・W mod Nを計算して出力する。
【０１０６】
ユーザの端末装置702は、クライアントIDであるCと、メモリ1034から読み出したカウンタjと、結合器208により出力されたZと、RSA暗号演算器204により出力された暗号文y2とを、サーバの認証装置704へ送信する。
【０１０７】
続いて、マスター鍵生成器210は、サーバの認証装置704から受信した値Uと、乱数発生器206により発生させた乱数x1と、メモリ1034から読み出したRSA公開鍵(e，N)を入力として、マスター鍵k'＝U/x1 mod Nとを計算して出力する。
【０１０８】
そして、認証結果判断部1012は、サーバの認証装置704から受信したVSiが正しく生成された認証子であるかどうかを判断する。認証結果判断部1012は、クライアントIDであるCと、i番目サーバIDであるSiと、メモリ1034から読み出したカウンタjと、結合器208により出力されたマスクによってスクランブルされた暗号文Zと、RSA暗号演算器204により出力された暗号文y2と、サーバの認証装置704から受信した値Uと、認証データ生成器1032から生成された認証データvijと、乱数発生器206により発生させた乱数x2と、マスター鍵生成器210により出力されたマスター鍵k'とを入力として、H(1‖Msg‖vij‖x2‖k')を計算してサーバの認証装置704から受信したVSiと比較する。ここで、Msg＝C‖Si‖j‖Z‖y2‖Uである。ここで、Hの代わりにMAC(Message Authentication Code)を使ってもよい。
【０１０９】
認証結果判断部1012において、VSiとH(1‖Msg‖vij‖x2‖k')とが一致しない場合、認証結果判断部1012は、エラーメッセージ発生器214に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器214はエラーを発生して処理を中断する。一方、認証結果判断部1012においてVSiとH(1‖Msg‖vij‖x2‖k')が一致した場合は、サーバの認証装置704が正当な装置であるとして認証して、Msg‖vij‖x2‖k'を出力する。
【０１１０】
そして、認証子生成器1016は、認証結果判断部1012から入力されたMsg‖vij‖x2‖k'から認証子VCを、VC＝H(2‖Msg‖vij‖x2‖k')により計算して出力する。
【０１１１】
ユーザの端末装置702は、認証子生成器1016により出力された認証子VCをサーバの認証装置704へ送信する。
【０１１２】
セッション鍵生成器1018は、認証結果判断部1012から入力されたMsg‖vij‖x2‖k'を入力として、セッション鍵SKをSK＝H(3‖Msg‖vij‖x2‖k')により生成して出力する。
【０１１３】
そして、秘密値更新器1036は、メモリ1034から読み出した乱数sijと、認証結果判断部1012から入力されたMsg‖vij‖x2‖k'とを入力として、j＋1番目の乱数si(j+1)を、
0005392741.tif 000008
により計算してカウンタj＋1とともに出力する。
【０１１４】
ユーザの端末装置702は、メモリ1034に保持している現在のカウンタと乱数であるj，sijとを、秘密値更新器1036により出力された次のカウンタと乱数であるj＋1，si(j+1) とに書き換える。
＜サーバの認証装置704の動作＞
【０１１５】
次に、図11を参照して、RSAをベースにした二要素認証システム700におけるサーバの認証装置704のj番目プロトコル実行の動作について説明する。この時サーバの認証装置704は、記録情報として、C，j，vij，(d，N)を装置内部にあるデータベース1102に保持している。
【０１１６】
まず、カウンタ判断部1132は、ユーザの端末装置702から受信したカウンタjが正しいかどうかを確認する。カウンタ判断部1132は、データベース1102から読み出したカウンタjをユーザの端末装置702から受信したカウンタjと比較して、一致しない場合、エラーメッセージ発生器1134に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器1134はエラーを発生して処理を中断する。
【０１１７】
一方、カウンタ判断部1132においてデータベース1102から読み出したカウンタjをユーザの端末装置702から受信したカウンタjと比較して、一致した場合は、続けて次の処理を行う。
【０１１８】
RSA復号演算器306は、ユーザの端末装置702から受信した暗号文y2と、データベース1102から読み出したRSA秘密鍵(d，N)とを入力として、乱数x2'を、x2'＝y2d mod Nにより計算して出力する。
【０１１９】
また、RSA復号演算器306は、ユーザの端末装置702から受信したマスクによってスクランブルされた暗号文Zと、乱数x2'と、データベース1102から読み出したRSA秘密鍵(d，N)とを入力として、値Uを、U＝(Z/x2')d mod Nにより計算して出力する。
【０１２０】
一方、マスク生成器1108は、データベース1102から読み出したカウンタjと、認証データvijとを入力として、マスクW＝G(j，vij)を計算して出力する。
【０１２１】
そして、マスター鍵生成器310は、マスク生成器1108により生成されたマスクWと、データベース1102から読み出したRSA秘密鍵(d，N)とを入力として、マスター鍵kを、k＝Wd mod Nにより計算して出力する。
【０１２２】
集合器1112は、クライアントIDであるCと、i番目サーバIDであるSiと、ユーザの端末装置702から受信したカウンタjと、マスクによってスクランブルされた暗号文Zと、もう一つの暗号文y2と、RSA復号演算器306により出力された値Uと、乱数x2'と、データベース1102から読み出した認証データvijと、マスター鍵生成器310から生成されたマスター鍵kとを入力として、Msg‖vij‖x2'‖kを出力する。ここで、Msg＝C‖Si‖j‖Z‖y2‖Uである。
【０１２３】
そして、認証子生成器1114は、集合器1112から出力されたMsg‖vij‖x2'‖kを入力として、認証子VSiを、VSi＝H(1‖Msg‖vij‖x2'‖k)により計算してMsg‖vij‖x2'‖kとともに出力する。
【０１２４】
サーバの認証装置704は、認証子生成器1114により計算して得られたVSiと、i番目サーバのIDであるSiと、RSA復号演算器306により出力された値Uをユーザの端末装置702へ送信する。
【０１２５】
続いて、認証結果判断部1116は、認証子生成器1114から出力されたMsg‖vij‖x2'‖kを入力として、H(2‖Msg‖vij‖x2'‖k)を計算してユーザの端末装置702から受信したVCと比較する。ここで、Hの代わりにMAC(Message Authentication Code)を使ってもよい。
【０１２６】
認証結果判断部1116においてVCとH(2‖Msg‖vij‖x2'‖k)が一致しない場合、認証結果判断部1116は、エラーメッセージ発生器318に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器318はエラーを発生して処理を中断する。
【０１２７】
一方、認証結果判断部1116において、VCとH(2‖Msg‖vij‖x2'‖k)が一致した場合は、ユーザの端末装置702が正当な装置として認証する。
【０１２８】
セッション鍵生成器1120は、認証子生成器1114から出力されたMsg‖vij‖x2'‖kを入力として、セッション鍵SKをSK＝H(3‖Msg‖vij‖x2'‖k)により生成して出力する。
【０１２９】
そして、秘密値更新器1036は、データベース1102から読み出した認証データvijと、認証子生成器1114から入力されたMsg‖vij‖x2'‖kとを入力として、j＋1番目の認証データvi(j+1)を、
0005392741.tif 000009
により計算してカウンタj＋1とともに出力する。
【０１３０】
サーバの認証装置704は、データベース1102に保持している現在のカウンタと認証データであるj，vijを、秘密値更新器1036により出力された次のカウンタと認証データであるj＋1，vi(j+1)に書き換える。
〔実施例４：RSAをベースにした二要素認証システムの別の例〕
【０１３１】
図12は、パスワード認証システム100の応用である、RSAをベースにした二要素認証システム1200の構成を示すブロック図である。二要素認証システム1200は、第３実施例として説明したRSAをベースにした二要素認証システム700の変形例でもある。
【０１３２】
二要素認証システム1200は、二要素認証システム700と同様に、ユーザの端末装置1202とサーバの認証装置1204を備える。図12は、RSAをベースにした二要素認証システム1200のj番目プロトコル実行を表している。ユーザの端末装置1202はi番目サーバのIDであるSiとj番目記録情報CSjとを装置内部にあるメモリに保存していて、サーバの認証装置1204はクライアントのIDであるCとj番目認証データSSjを装置内部にあるデータベースに保持している。ここで、iとjはi，j≧1になるような整数である。
【０１３３】
この二要素認証システム1200のj番目プロトコル実行では、ユーザの端末装置1202はユーザから入力されたパスワードとメモリに保持された記録情報CSjに基づいてある演算を行い、ユーザの認証データである記録情報SSjを保持しているサーバの認証装置1204と、インターネットのようなオープンネットワーク106を通してお互いに相互認証して、その相互認証が成功した時、お互いに共有する同じセッション鍵を確保しながら各自の記録情報を次のセッションのために更新しておく。それにより、サーバの端末装置はユーザの認証データに対してパスワードを全数探索することができなくなり、ユーザの端末装置1202は記録情報が漏洩したとしても安全性が落ちることがない。
［１．二要素認証システム1200の初期化］
【０１３４】
二要素認証システム1200の初期化では、ユーザの端末装置1202はユーザから入力されたパスワードに基づいて、サーバの認証装置1204と安全な通信路（例えば、直接に渡したり、郵便で送付したり、あるいは電話で知らせるなど）を用いて初期化処理を行い、ユーザの端末装置1202は内蔵するメモリへ記録情報としてCS1を保存し、サーバの認証装置1204は内蔵するデータベースへ記録情報としてSS1を保存する。
【０１３５】
以下、図13および14を参照して、ユーザの端末装置1202およびサーバの認証装置1204において二要素認証システム1200のための初期化を行う作業を説明する。
＜ユーザの端末装置1202における作業＞
【０１３６】
図13を参照する。認証データ生成器1032は、乱数発生器206によりランダムに発生させた乱数si1(si1∈{0，1}k)と、クライアントIDであるCと、i番目サーバIDであるSiと、ユーザから入力されたパスワードpwとを入力として、認証データ：
0005392741.tif 000010
を計算して出力する。
【０１３７】
そして、署名鍵生成器1542は、セキュリティパラメータl2を入力として、署名鍵生成アルゴリズムに従って署名鍵SigKと検証鍵VrfKの対(SigK，VrfK)を生成して出力する。
【０１３８】
ユーザの端末装置1202は、認証データ生成器1032から生成されたサーバ用の認証データvi1と、署名鍵生成器1542から生成された検証鍵VrfKとをサーバの認証装置1204へ送信する。
【０１３９】
ユーザの端末装置1202は、i番目サーバIDであるSiと、カウンタ1と、乱数発生器206により発生させた乱数si1と、サーバの認証装置1204から受信したRSA公開鍵(e，N)と、署名鍵生成器1542から生成された署名鍵SigKとを、ユーザの端末装置1202の内部にあるメモリ1534へ記録情報としてSi，1，si1，(e，N)，SigKを保存する。
＜サーバの認証装置1204における作業＞
【０１４０】
次に、図14を参照してサーバの認証装置1204の初期化の動作について説明する。
【０１４１】
RSA鍵生成器304は、セキュリティパラメータl1を入力として、RSA鍵生成アルゴリズムに従ってRSA公開鍵(e，N)とRSA秘密鍵(d，N)を生成して出力する。
【０１４２】
サーバの認証装置1204は、RSA鍵生成器304から生成されたRSA公開鍵(e，N)をユーザの端末装置1202へ送信する。
【０１４３】
サーバの認証装置1204は、クライアントIDであるCと、カウンタ1と、ユーザの端末装置1202から受信した認証データvi1と、検証鍵VrfKと、RSA鍵生成器304により生成されたRSA秘密鍵(d，N)とを、サーバの認証装置1204の内部にあるデータベース1602へ記録情報としてC，1，vi1，(d，N)，VrfKを保存する。
［２．二要素認証システム1200のj(j≧1)番目プロトコル実行］
【０１４４】
次に、図15および16を参照して、前述した初期化を行った後（ｊ＝１の時）の、あるいは二要素認証システム1200のj−1番目プロトコル実行を行った後（すなわち、CSj＝(Si，j，sij，(e，N)，［SigK］)とSSj＝(C，j，vij，(d，N)，［VrfK］)の時）の、RSAをベースにした二要素認証システム1200のj番目プロトコル実行を行う動作を、ユーザの端末装置1202とサーバの認証装置1204とに分けて説明する。
＜ユーザの端末装置1202の動作＞
【０１４５】
まず図15を参照し、二要素認証システム1200におけるユーザの端末装置1202のj番目プロトコル実行の動作について説明する。この時、ユーザの端末装置1202は記録情報としてSi，j，sij，(e，N)，SigKを装置内部にあるメモリ1534に保持している。
【０１４６】
まず、認証データ生成器1032は、ユーザから入力されたパスワードpwと、クライアントIDであるCと、i番目サーバIDであるSiと、メモリ1534から読み出した乱数sijとを入力として、認証データ：
0005392741.tif 000011
を計算して出力する。
【０１４７】
そして、マスク生成器1002は、認証データ生成器1032から生成された認証データvijと、メモリ1534から読み出したカウンタjとを入力として、マスクW＝G(j，vij)を計算して出力する。
【０１４８】
そして、RSA暗号演算器204は、乱数発生器206によりランダムに発生させた乱数x1，x2(x1，x2∈ZN*)と、メモリ1534から読み出したRSA公開鍵(e，N)とを入力として、暗号文y1＝x1e mod Nと、暗号文y2＝x2e mod Nとを計算して出力する。
【０１４９】
結合器208は、マスク生成器1002から生成されたマスクWと、乱数発生器206により発生させた乱数x2と、RSA暗号演算器204から出力された暗号文y1と、メモリ1534から読み出したRSA公開鍵(e，N)とを入力として、マスクによってスクランブルされた暗号文Z＝y1・x2・W mod Nを計算して出力する。
【０１５０】
ユーザの端末装置1202は、クライアントIDであるCと、メモリ1534から読み出したカウンタjと、結合器208により出力されたZと、RSA暗号演算器204により出力された暗号文y2とをサーバの認証装置1204へ送信する。
【０１５１】
続いて、マスター鍵生成器210は、サーバの認証装置1204から受信した値Uと、乱数発生器206により発生させた乱数x1と、メモリ1534から読み出したRSA公開鍵(e，N)とを入力として、マスター鍵k'＝U/x1 mod Nを計算して出力する。
【０１５２】
そして、認証結果判断部1012は、サーバの認証装置1204から受信したVSiが正しく生成された認証子であるかどうかを判断する。認証結果判断部1012は、クライアントIDであるCと、i番目サーバIDであるSiと、メモリ1534から読み出したカウンタjと、結合器208により出力されたマスクによってスクランブルされた暗号文Zと、RSA暗号演算器204により出力された暗号文y2と、サーバの認証装置1204から受信した値Uと、認証データ生成器1032から生成された認証データvijと、乱数発生器206により発生させた乱数x2と、マスター鍵生成器210により出力されたマスター鍵k'とを入力として、H(1‖Msg‖vij‖x2‖k')を計算してサーバの認証装置1204から受信したVSiと比較する。ここで、Msg＝C‖Si‖j‖Z‖y2‖Uである。ここで、Hの代わりにMAC(Message Authentication Code)を使ってもよい。
【０１５３】
認証結果判断部1012において、VSiとH(1‖Msg‖vij‖x2‖k')が一致しない場合、認証結果判断部1012は、エラーメッセージ発生器214に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器214はエラーを発生して処理を中断する。
【０１５４】
一方、認証結果判断部1012においてVSiとH(1‖Msg‖vij‖x2‖k')が一致した場合は、サーバの認証装置1204が正当な装置として認証して、Msg‖vij‖x2‖k'を出力する。
【０１５５】
そして、署名生成器1536は、メモリ1534から読み出した署名鍵SigKと、認証結果判断部1012から入力されたMsg‖vij‖x2‖k'とを入力として、署名SigCを、SigC＝SignSigK(VC)により計算して出力する。ここで、VC＝H(2‖Msg‖vij‖x2‖k')である。
【０１５６】
ユーザの端末装置1202は、署名生成器1536により出力された署名SigCをサーバの認証装置1204へ送信する。
【０１５７】
セッション鍵生成器1018は、認証結果判断部1012から入力されたMsg‖vij‖x2‖k'を入力として、セッション鍵SKをSK＝H(3‖Msg‖vij‖x2‖k')により生成して出力する。そして、秘密値更新器1036は、メモリ1534から読み出した乱数sijと、認証結果判断部1012から入力されたMsg‖vij‖x2‖k'とを入力として、j＋1番目の乱数si(j+1)を
0005392741.tif 000012
により計算してカウンタj＋1とともに出力する。
【０１５８】
ユーザの端末装置1202は、メモリ1534に保持している現在のカウンタと乱数であるj，sijを、秘密値更新器1036により出力された次のカウンタと乱数であるj＋1，si(j+1)に書き換える。
＜サーバの認証装置1204の動作＞
【０１５９】
次に、図16を参照して、RSAをベースにした二要素認証システム1200におけるサーバの認証装置1204のj番目プロトコル実行の動作について説明する。この時、サーバの認証装置1204は記録情報としてC，j，vij，(d，N)，VrfKを装置内部にあるデータベース1602に保持している。
【０１６０】
まず、カウンタ判断部1132は、ユーザの端末装置1202から受信したカウンタjが正しいかどうかを確認する。カウンタ判断部1132は、データベース1602から読み出したカウンタjをユーザの端末装置1202から受信したカウンタjと比較して一致しない場合、エラーメッセージ発生器1134に対して、一致しないことを通知する。これを受けて、エラーメッセージ発生器1134はエラーを発生して処理を中断する。
【０１６１】
一方、カウンタ判断部1132においてデータベース1602から読み出したカウンタjをユーザの端末装置1202から受信したカウンタjと比較して一致した場合は、続けて次の処理を行う。
【０１６２】
RSA復号演算器306は、ユーザの端末装置1202から受信した暗号文y2と、データベース1602から読み出したRSA秘密鍵(d，N)とを入力として、乱数x2'を、x2'＝y2d mod Nにより計算して出力する。
【０１６３】
また、RSA復号演算器306は、ユーザの端末装置1202から受信したマスクによってスクランブルされた暗号文Zと、乱数x2'と、データベース1602から読み出したRSA秘密鍵(d，N)とを入力として、値Uを、U＝(Z/x2')d mod Nにより計算して出力する。
【０１６４】
一方、マスク生成器1108は、データベース1602から読み出したカウンタjと、認証データvijとを入力として、マスクW＝G(j，vij)を計算して出力する。
【０１６５】
そして、マスター鍵生成器310は、マスク生成器1108により生成されたマスクWと、データベース1602から読み出したRSA秘密鍵(d，N)とを入力として、マスター鍵kを、k＝Wd mod Nにより計算して出力する。
【０１６６】
集合器1112は、クライアントIDであるCと、i番目サーバIDであるSiと、ユーザの端末装置1202から受信したカウンタjと、マスクによってスクランブルされた暗号文Zと、もう一つの暗号文y2と、RSA復号演算器306により出力された値Uと、乱数x2'と、データベース1602から読み出した認証データvijと、マスター鍵生成器310から生成されたマスター鍵kとを入力として、Msg‖vij‖x2'‖kを出力する。ここで、Msg＝C‖Si‖j‖Z‖y2‖Uである。
【０１６７】
そして、認証子生成器1114は、集合器1112から出力されたMsg‖vij‖x2'‖kを入力として、認証子VSiを、VSi＝H(1‖Msg‖vij‖x2'‖k)により計算してMsg‖vij‖x2'‖kとともに出力する。
【０１６８】
サーバの認証装置1204は、認証子生成器1114により計算して得られたVSiと、i番目サーバのIDであるSiと、RSA復号演算器306により出力された値Uとをユーザの端末装置1202へ送信する。
【０１６９】
続いて、署名検証判断部1616は、データベース1602から読み出した検証鍵VrfKと、認証子生成器1114から出力されたMsg‖vij‖x2'‖kとを入力として、署名SigCの検証を、VerVrfK(VC，SigC)により行う。ここで、VC＝H(2‖Msg‖vij‖x2'‖k)である。
【０１７０】
署名検証判断部1616において署名SigCの検証が出来なかった場合、署名検証判断部1616は、エラーメッセージ発生器318に対して、検証できないことを通知する。これを受けて、エラーメッセージ発生器318はエラーを発生して処理を中断する。
【０１７１】
一方、署名検証判断部1616において、署名SigCの検証ができた場合は、ユーザの端末装置1202が正当な装置として認証する。
【０１７２】
セッション鍵生成器1120は、認証子生成器1114から出力されたMsg‖vij‖x2'‖kとを入力として、セッション鍵SKをSK＝H(3‖Msg‖vij‖x2'‖k)により生成して出力する。
【０１７３】
そして、秘密値更新器1136は、データベース1602から読み出した認証データvijと、認証子生成器1114から入力されたMsg‖vij‖x2'‖kとを入力として、j＋1番目の認証データvi(j+1)を、
0005392741.tif 000013
により計算してカウンタj＋1とともに出力する。
【０１７４】
サーバの認証装置1204は、データベース1602に保持している現在のカウンタと、認証データであるj，vijを、秘密値更新器1136により出力された次のカウンタと、認証データであるj＋1，vi(j+1)に書き換える。
【０１７５】
以上、本発明者の提案の具現化形態のいくつかの例を説明したが、これらの例は本発明者のアイディアの具現化形態を限定する目的で挙げられたのではなく、あくまで本発明者が本願によって開示する新たな技術思想のより深い理解に資するために挙げられたものである。開示される技術思想の実施形態は上記の例に限定されるものではなく、その思想を逸脱することなく、様々な形態をとり得ることは言うまでもない。
【図面の簡単な説明】
【０１７６】
【図１】実施例１として説明される、RSAをベースにしたパスワード認証システム100の構成の概要を示すブロック図
【図２】パスワード認証システム100における、ユーザ端末装置102の構成及び動作を説明するための図
【図３】パスワード認証システム100における、サーバの認証装置104の構成及び動作を説明するための図
【図４】実施例２として説明される、RSAをベースにした匿名認証システム400の構成の概要を示すブロック図
【図５】匿名認証システム400における、ユーザ端末装置402の構成及び動作を説明するための図
【図６】匿名認証システム400における、サーバの認証装置404の構成及び動作を説明するための図
【図７】実施例３として説明される、RSAをベースにした二要素認証システム700の構成の概要を示すブロック図
【図８】二要素認証システム700における、ユーザ端末装置702の初期化の様子を説明するための図
【図９】二要素認証システム700における、サーバの認証装置704の初期化の様子を説明するための図
【図１０】二要素認証システム700における、ユーザ端末装置702の構成及び動作を説明するための図
【図１１】二要素認証システム700における、サーバの認証装置704の構成及び動作を説明するための図
【図１２】実施例４として説明される、RSAをベースにした二要素認証システム1200の構成の概要を示すブロック図
【図１３】二要素認証システム1200における、ユーザ端末装置1202の初期化の様子を説明するための図
【図１４】二要素認証システム1200における、サーバの認証装置1204の初期化の様子を説明するための図
【図１５】二要素認証システム1200における、ユーザ端末装置1202の構成及び動作を説明するための図
【図１６】二要素認証システム1200における、サーバの認証装置1204の構成及び動作を説明するための図
【符号の説明】
【０１７７】
100        パスワード認証システム
102        ユーザ端末装置
104        サーバの認証装置
106        オープンネットワーク
202        マスク生成器
204        暗号演算器
206        乱数発生器
208        結合器
210        マスター鍵生成器
212        認証結果判断部
214        エラーメッセージ発生器
216        認証子生成器
218        セッション鍵生成器
302        データベース
304        鍵生成器
306        復号演算器
308        マスク生成器
310        マスター鍵生成器
312        集合器
314        認証子生成器
316        認証結果判断部
318        エラーメッセージ発生器
320        セッション鍵生成器
400        匿名認証システム
402        ユーザ端末装置
404        サーバの認証装置
502        マスク生成器
512        認証結果判断部
516        認証子生成器
518        セッション鍵生成器
520        復号用OTP生成器
522        マスター秘密値生成器
602        データベース
608        マスク生成器
610        マスター鍵生成器
612        集合器
614        認証子生成器
616        認証結果判断部
620        セッション鍵生成器
622        暗号用OTP生成器
624        暗号演算器
626        マスター秘密値発生器
700        二要素認証システム
702        ユーザ端末装置
704        サーバの認証装置
1002      マスク生成器
1012      認証結果判断部
1016      認証子生成器
1018      セッション鍵生成器
1032      認証データ生成器
1034      メモリ
1036      秘密値更新器
1102      データベース
1108      マスク生成器
1112       集合器
1114       認証子生成器
1116       認証結果判断部
1120      セッション鍵生成器
1132      カウンタ判断部
1134      エラーメッセージ発生器
1136      秘密値更新器
1200      二要素認証システム
1202      ユーザ端末装置
1204      サーバの認証装置
1534      メモリ
1536      署名生成器
1542      署名鍵生成器
1602      データベース
1616      署名検証判断部
【図１】
0005392741.tif 000014
【図２】
0005392741.tif 000015
【図３】
0005392741.tif 000016
【図４】
0005392741.tif 000017
【図５】
0005392741.tif 000018
【図６】
0005392741.tif 000019
【図７】
0005392741.tif 000020
【図８】
0005392741.tif 000021
【図９】
0005392741.tif 000022
【図１０】
0005392741.tif 000023
【図１１】
0005392741.tif 000024
【図１２】
0005392741.tif 000025
【図１３】
0005392741.tif 000026
【図１４】
0005392741.tif 000027
【図１５】
0005392741.tif 000028
【図１６】
0005392741.tif 000029