(57)【特許請求の範囲】
【請求項１】
証明装置と検証装置との間で公開鍵暗号系に基づく対話証明によって利用資格を検証し、かつ、前記公開鍵暗号の秘密鍵を証明特徴情報として用い、前記証明特徴情報を用いてのみ求めることが可能な応答情報を、試験情報に対して所定の計算を施すことで生成して前記利用資格を有することの証明を行う利用資格検証装置において、
前記証明装置と前記検証装置とは別の第３装置が、
前記公開鍵暗号系の鍵を管理する鍵管理手段と、
対話証明に用いる秘密情報を管理する第１の秘密情報管理手段と、
前記第１の秘密情報管理手段で管理する秘密情報および前記鍵管理手段が管理する鍵の情報の少なくとも一方に対し、逆関数を求めることが少なくとも計算量的に困難な一方向性関数を適用する、第１の一方向性関数計算手段と、
前記鍵管理手段が管理する鍵と、前記第１の一方向性関数計算手段の計算結果をもとに証明補助情報を計算する証明補助情報計算手段とを有し、
前記検証装置が、
前記公開鍵暗号系の公開鍵を記憶する公開鍵記憶手段と、
対話証明の試験情報を生成し、生成した試験情報を記憶する試験情報生成手段と、
対話証明の過程で前記証明装置との間で情報を送受信する第１の通信手段とを有し、
前記証明装置が、
対話証明に用いる秘密情報を保持する第２の秘密情報保持手段と、
前記第２の秘密情報保持手段に保持されている秘密情報と前記公開鍵暗号系の鍵の情報の少なくとも一方に対し、第１の一方向性関数計算手段の一方向性関数と同一の計算を施す、第２の一方向性関数計算手段と、
対話証明に用いる、前記第３装置で生成された前記証明補助情報を保持管理する証明補助情報管理手段と、
前記試験情報と、前記証明補助情報管理手段で管理されている証明補助情報と、前記第２の一方向性関数計算手段で計算した値から、証明特徴情報を用いてのみ計算可能な応答情報を計算する応答情報計算手段と、
対話証明の過程で前記検証装置との間で情報を送受信する第２の通信手段とを有し、
前記証明特徴情報が前記公開鍵暗号系の復号鍵であり、
前記証明補助情報が、前記復号鍵に対して、前記秘密情報に前記一方向性関数を作用させて得られた値の乗法逆元を乗じて生成されていることを特徴とする利用資格検証装置。
【請求項２】
証明装置と検証装置との間で公開鍵暗号系に基づく対話証明によって利用資格を検証し、かつ、前記公開鍵暗号の秘密鍵を証明特徴情報として用い、前記証明特徴情報を用いてのみ求めることが可能な応答情報を、試験情報に対して所定の計算を施すことで生成して前記利用資格を有することの証明を行う利用資格検証装置において、
前記証明装置と前記検証装置とは別の第３装置が、
前記公開鍵暗号系の鍵を管理する鍵管理手段と、
対話証明に用いる秘密情報を管理する第１の秘密情報管理手段と、
前記第１の秘密情報管理手段で管理する秘密情報および前記鍵管理手段が管理する鍵の情報の少なくとも一方に対し、逆関数を求めることが少なくとも計算量的に困難な一方向性関数を適用する、第１の一方向性関数計算手段と、
前記鍵管理手段が管理する鍵と、前記一方向性関数計算手段の計算結果をもとに証明補助情報を計算する証明補助情報計算手段とを有し、
前記検証装置が、
前記公開鍵暗号系の公開鍵を記憶する公開鍵記憶手段と、
対話証明の試験情報を生成し、生成した試験情報を記憶する試験情報生成手段と、
対話証明の過程で前記証明装置との間で情報を送受信する第１の通信手段とを有し、
前記証明装置が第１証明装置部分と第２証明装置部分とからなり、
前記第１証明装置部分が、
対話証明に用いる、前記第３装置により生成された前記証明補助情報を保持管理する証明補助情報管理手段と、
前記証明補助情報管理手段で管理されている証明補助情報を用いた計算を行う第１の応答情報計算手段と、
対話証明の過程で前記第２証明装置部分との間で情報を送受信する第２の通信手段とを有し、
前記第２証明装置部分が、
対話証明に用いる秘密情報を保持する第２の秘密情報保持手段と、
前記第２の秘密情報保持手段に保持されている秘密情報と前記公開鍵暗号系の鍵の情報の少なくとも一方に対し、前記第１の一方向性関数計算手段の一方向性関数と同一の計算を施す、第２の一方向性関数計算手段と、
前記第２の一方向性関数計算手段で求めた値を用いて、計算を行う第２の応答情報計算手段と、
対話証明の過程で、前記検証装置および前記第１証明装置部分との間で情報を送受信する第３の通信手段とを有し、
前記証明特徴情報が前記公開鍵暗号系の復号鍵であり、
前記証明補助情報が、前記復号鍵に対して、前記秘密情報に前記一方向性関数を作用させて得られた値の乗法逆元を乗じて生成されていることを特徴とする利用資格検証装置。
【請求項３】
暗号化によって情報に対するアクセス制御を実現し、
前記試験情報が、前記アクセス制御対象の情報を暗号化した鍵を前記公開鍵暗号系の公開鍵で暗号化したものであり、
前記応答情報が前記試験情報を復号したものであることを特徴とする請求項１または２記載の利用資格検証装置。
【請求項４】
前記試験情報が、アクセス制御対象の情報を暗号化した鍵を公開鍵暗号系を用いて暗号化し、かつ乱数効果を付与したものであり、前記乱数効果の与え方が、前記公開鍵暗号系の暗号化関数が構成された算法による演算によっていることを特徴とする請求項１、２または３記載の利用資格検証装置。
【請求項５】
所定の算法上に構成された暗号関数を持つ公開鍵暗号系に基づく対話証明によって証明装置と検証装置との間で利用資格を検証し、かつ、前記公開鍵暗号の秘密鍵を証明特徴情報として用い、前記証明特徴情報を用いてのみ求めることが可能な応答情報を、試験情報に対して所定の計算を施すことで生成して前記利用資格を有することの証明を行う利用資格検証装置において、
前記証明装置と前記検証装置とは別の第３装置が、
前記公開鍵暗号系の鍵を管理する鍵管理手段と、
対話証明に用いる秘密情報を管理する第１の秘密情報管理手段と、
前記第１の秘密情報管理手段で管理する秘密情報および前記鍵管理手段が管理する鍵の情報の少なくとも一方に対し、逆関数を求めることが少なくとも計算量的に困難な一方向性関数を適用する、第１の一方向性関数計算手段と、
前記鍵管理手段が管理する鍵と、前記一方向性関数計算手段の計算結果をもとに証明補助情報を計算する証明補助情報計算手段とを有し、
前記検証装置が、
前記公開鍵暗号系の公開鍵を記憶する公開鍵記憶手段と、
対話証明の試験情報を生成し、生成した試験情報を記憶する試験情報生成手段と、
対話証明の過程で前記証明装置との間で情報を送受信する第１の通信手段とを有し、
前記証明装置が第１証明装置部分と第２証明装置部分とからなり、
前記第１証明装置部分が、
対話証明に用いる、前記第３装置で生成された前記証明補助情報を保持管理する証明補助情報管理手段と、
前記証明補助情報管理手段で管理されている証明補助情報を用いた計算を行う第１の応答情報計算手段と、
対話証明の過程で前記第２証明装置部分との間で情報を送受信する第２の通信手段とを有し、
前記第２証明装置部分が、
対話証明に用いる秘密情報を保持する第２の秘密情報保持手段と、
前記第２の秘密情報保持手段に保持されている秘密情報と前記公開鍵暗号系の鍵の情報の少なくとも一方に対し、第１の一方向性関数計算手段の一方向性関数と同一の計算を施す、第２の一方向性関数計算手段と、
前記第２の一方向性関数計算手段で求めた値を用いて、計算を行う第２の応答情報計算手段と、
対話証明の過程で、前記検証装置および前記第１証明装置部分との間で情報を送受信する第３の通信手段とを有し、
前記証明特徴情報が前記公開鍵暗号系の復号鍵であり、
前記証明補助情報が、前記復号鍵と、前記秘密情報に前記一方向性関数を作用させて得られた値に対し、前記暗号化関数が構成された算法による演算を施して生成されていることを特徴とする利用資格検証装置。
【請求項６】
暗号化によって情報に対するアクセス制御を実現し、
前記試験情報がアクセス制御対象の情報を暗号化した鍵を前記公開鍵暗号系の公開鍵で暗号化したものであり、
前記応答情報が試験情報を復号したものであることを特徴とする請求項５記載の利用資格検証装置。
【請求項７】
前記試験情報が、アクセス制御対象の情報を暗号化した鍵を公開鍵暗号系を用いて暗号化し、かつ乱数効果を付与したものであり、
前記乱数効果の与え方が、前記公開鍵暗号系の暗号化関数が構成された算法によっていることを特徴とする請求項５または６記載の利用資格検証装置。
【請求項８】
公開鍵暗号系に基づく対話証明によって利用資格を検証し、かつ、前記公開鍵暗号の秘密鍵を証明特徴情報として用い、前記証明特徴情報を用いてのみ求めることが可能な応答情報を、試験情報に対して所定の計算を施すことで生成して前記利用資格を有することの証明を行う利用資格検証装置において、
前記公開鍵暗号系の公開鍵を記憶する公開鍵記憶手段と、
対話証明の試験情報を生成し、生成した試験情報を記憶する試験情報生成手段と、
対話証明に用いる秘密情報を保持する秘密情報保持手段と、
前記秘密情報および前記公開鍵の情報の少なくとも一方に対し、逆関数を求めることが少なくとも計算量的に困難な一方向性関数を適用して得た計算結果と前記公開鍵とから生成された証明用補助情報を管理する証明用補助情報管理手段と、
前記秘密情報保持手段に保持されている秘密情報と前記公開鍵暗号系の鍵の情報の少なくとも一方に対し、前記一方向性関数を適用する一方向性関数計算手段と、
前記試験情報と、前記証明補助情報管理手段で管理されている証明補助情報と、前記一方向性関数計算手段で計算した値から、証明特徴情報を用いてのみ計算可能な応答情報を計算する応答情報計算手段とを有し、
前記証明特徴情報が前記公開鍵暗号系の復号鍵であり、
前記証明補助情報が、前記復号鍵に対して、前記秘密情報に前記一方向性関数を作用させて得られた値の乗法逆元を乗じて生成されていることを特徴とする利用資格検証装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、利用資格を検証する利用資格検証技術に関する。
【０００２】
【従来の技術】
ネットワークの進展につれ、ソフトウェアやマルチメディアデータなどのデジタル情報で表現された知的財産が飛躍的に増大している。デジタル情報は簡単に複製することができ、また不正にコピーしたとしても一切痕跡が残らない。このため、デジタル情報に関する著作権の保護が問題となっている。利用の権利を表すものとして日常的に用いているものにチケットがあり、チケットのデジタル化も試みられている。しかしながら、前述の著作権保護と同様に不正な複製の問題がある。
【０００３】
ソフトウェアの利用資格を検証する従来の技術として、米国特許第５，５８６，１８６号明細書で開示されている技術がある（以下、関連米国特許と呼ぶ）。この技術はソフトウェアのアクセス制御を実現するものであるが、暗号化されたソフトウェアを復号する代わりに、暗号化された所与の情報が正しく復号されることで利用資格を確認することにより、チケットのデジタル化にも用いることができる。
【０００４】
上述関連特許では、ソフトウェアを暗号化した状態で配布しておき、利用者がこのソフトウェアの利用を希望するときには、復号するための情報（利用者鍵）をソフトウェアベンダから購入する方法を採っている。暗号化にはＲＳＡ（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｅｌｍａｎ）公開鍵暗号を用いており、利用者鍵としてＲＳＡ公開鍵対の秘密鍵と利用者識別情報に所定の演算を行なって得られる値を使用する。
【０００５】
以下、上述関連米国特許の内容について詳細に説明する。上述関連米国特許では、２つの方式を開示している。
【０００６】
はじめに、第１の方式について説明する。
ソフトウェアの暗号化手順は、以下の通りである。
１．素数ｐ，ｑを選び、ＲＳＡ公開鍵暗号の法数ｎ＝ｐｑを求める。
２．公開鍵ｅを、法数ｎのオイラー数φ（ｎ）と互いに素になるよう選ぶ。
３．秘密鍵ｄをｅｄ≡１  ｍｏｄ  φ（ｎ）となるよう定める。
４．ソフトウエアを公開鍵ｅで暗号化する。
５．ソフトウエアを配布する。
【０００７】
利用者鍵の計算手順は、以下の通りである。
１．利用者の識別情報を数値化する。この値をｘとする。
２．秘密鍵と数値化された識別情報から、利用者鍵ｙ≡ｄｘ−１  ｍｏｄ  φ（ｎ）を求める。
【０００８】
ソフトウェアを利用する手順は以下の通りである。
１．利用者は識別情報と利用者鍵を復号器に入力する。
２．復号器は、識別情報を数値化して得られた値ｘと、利用者鍵ｙの積ｘｙを用いて、ソフトウェアを復号する。
３．復号されたソフトウェアを実行する。
【０００９】
次に、第２の方式について説明する。この方式では、２つの公開鍵を使ってソフトウェアを暗号化する。
【００１０】
ソフトウェアの暗号化手順は、以下の通りである。
１．素数ｐ，ｑを選び、ＲＳＡ公開鍵暗号の法数ｎ＝ｐｑを求める。
２．公開鍵ｅ，ｅ’を、法数ｎのオイラー数φ（ｎ）と互いに素になるよう選ぶ。
３．秘密鍵ｄ，ｄ’をｅｄ≡１  ｍｏｄ  φ（ｎ）およびｅ’ｄ’≡  １  ｍｏｄ  φ（ｎ）となるよう定める。
４．ソフトウエアを配布する。（ｅで暗号化した結果とｅ’で暗号化した結果と組にして配布する。）
利用者鍵の計算手順は、以下の通りである。
１．利用者の識別情報を数値化する。この値をｘとする。識別情報を加工し、数値化した値ｘ’を求める。
２．秘密鍵と上記ｘ，ｘ’から、２つの利用者鍵ｙ≡ｒｄｘ−１  ｍｏｄ  φ（ｎ），ｙ’≡（１−ｒ）ｄ’ｘ’−１  ｍｏｄ  φ（ｎ）を求める。ここで、ｒは０≦ｒ＜φ（ｎ）なる乱数。
【００１１】
ソフトウェアを利用する手順は以下の通りである。
１．利用者は識別情報と利用者鍵を復号器に入力する。
２．復号器は、識別情報を数値化して得られた値ｘと一方の利用者鍵ｙの積ｘｙ、識別情報を加工して数値化して得られた値ｘ’ともう一方の利用者鍵ｙ’の積ｘ’ｙ’を用いて暗号文をを復号する。これら２つの暗号文を復号して得られた結果の積を計算し、もとのソフトウェアを得る。
３．復号されたソフトウェアを実行する。
【００１２】
つぎに、上述の関連米国特許に関連する課題について説明する。上述の関連米国特許の手法では、識別情報を数値化した値を復号器から読み取ることができると、２人の利用者が結託することにより、秘密鍵そのものあるいは秘密鍵に相当する情報を求められるという問題がある。
【００１３】
まず、第１の方式の問題について説明する。
【００１４】
ある利用者の、数値化された識別情報と利用者鍵をｘ１，ｙ１とする。もう１人の利用者の、数値化された識別情報と利用者鍵をそれぞれｘ２，ｙ２とする。
【００１５】
【数１】
ｘ１ｙ１  ≡  ｄ  ｍｏｄ  φ（ｎ）
ｘ２ｙ２  ≡  ｄ  ｍｏｄ  φ（ｎ）
より、
【００１６】
【数２】
φ（ｎ）｜ｘ１ｙ１−ｘ２ｙ２
となる。（ｘ１ｙ１−ｘ２ｙ２がφ（ｎ）で割り切れる。）
任意の自然数ｋについて、
【００１７】
【数３】
Ｄ＝ｘ１ｙ１＋ｋ（ｘ１ｙ１−ｘ２ｙ２）
は復号鍵ｄの代わりに用いることができる。
【００１８】
Ｄが秘密鍵として機能する理由について説明する。あるｑが存在して
【００１９】
【数４】
ｘ１ｙ１−ｘ２ｙ２＝ｑφ（ｎ）
となる。次式で示すオイラーの定理と、
【００２０】
【数５】
0003617259.tif 000002
（ただし、ａとｎは互いに素）
ＲＳＡ公開鍵暗号系で
【００２１】
【数６】
ａｅｄ≡ａ  ｍｏｄ  ｎ
であることに注意すると、
【００２２】
【数７】
0003617259.tif 000003
0003617259.tif 000004
0003617259.tif 000005
0003617259.tif 000006
となる。なお、このことはａとｎが互いに素でない場合についても成立する。
【００２３】
上記ではφ（ｎ）そのものは求めなかったが、ｐ−１とｑ−１の倍数が与えられると、ｎの桁数に関する多項式時間でｎの素因数分解を求めることができる確率的アルゴリズムが知られているので、ｎを素因数分解して、φ（ｎ）を求めることも可能である。φ（ｎ）が分かれば、ｄを直接計算できる。
【００２４】
また、数値化された識別情報と利用者鍵の積を十分多く集め、それらの差を計算した値の最大公約数を求めれば、φ（ｎ）を求めることができる。
【００２５】
次に、従来技術の第２の方式の問題について説明する。ある利用者（利用者１）の、識別情報を数値化した値、識別情報を加工したものを数値化した値、および２つの利用者鍵を、それぞれｘ１，ｘ’１，ｙ１，ｙ’１とする。ここで利用者鍵の生成に用いた乱数をｒ１とする。もう１人の利用者（利用者２）の、識別情報を数値化した値、識別情報を加工したものを数値化した値、および２つの利用者鍵を、それぞれｘ２，ｘ’２，ｙ２，ｙ’２とする。ここで利用者鍵の生成に用いた乱数をｒ２とする。
【００２６】
利用者鍵の定義式から、
【００２７】
【数８】
ｘｉｙｉ≡ｒｉｄ  ｍｏｄ  φ（ｎ）
ｘ’ｉｙ’ｉ≡（１−ｒｉ）ｄ’  ｍｏｄ  φ（ｎ）
となる。ここで、ｉ＝１，２である。
利用者１および利用者２の利用者鍵について、上式を辺々引き
【００２８】
【数９】
ｘ１ｙ１−ｘ２ｙ２≡（ｒ１−ｒ２）ｄ  ｍｏｄ  φ（ｎ）
ｘ’１ｙ’１−ｘ’２ｙ’２≡（ｒ２−ｒ１）ｄ’  ｍｏｄ  φ（ｎ）
が得られる。ρ＝ｒ１−ｒ２とおけば、上の式は、
【００２９】
【数１０】
ｘ１ｙ１−ｘ２ｙ２≡ρｄ  ｍｏｄ  φ（ｎ）
ｘ’１ｙ’１−ｘ’２ｙ’２≡−ρｄ’  ｍｏｄ  φ（ｎ）
となる。
利用者１の利用者鍵の式に上式をｋ倍して辺々加えると、
【００３０】
【数１１】
（ｋ＋１）ｘ１ｙ１−ｋｘ２ｙ２≡（ｒ１＋ｋρ）ｄ  ｍｏｄ  φ（ｎ）
（ｋ＋１）ｘ’１ｙ’１−ｋｘ’２ｙ’２≡（１−（ｒ１＋ｋρ））ｄ’  ｍｏｄ  φ（ｎ）
が得られる。ここでｒ＝ｒ１＋ｋρとおくと、これらは利用者鍵の定義式と同じ形になっている。したがって、次式の値を利用者鍵（の積）として用いることができる。
【００３１】
【数１２】
0003617259.tif 000007
0003617259.tif 000008
【００３２】
【発明が解決しようとする課題】
本発明は、上記の問題に鑑みてなされたもので、利用者が結託しても権利を詐称することのできない、安全な利用資格検証装置を実現することを課題とする。
【００３３】
【課題を解決するための手段】
上記課題を解決するため、本発明の利用資格検証装置は、公開鍵暗号系の鍵を管理する鍵管理手段と、対話証明に用いる秘密情報を管理する第１の秘密情報管理手段と、前記第１の秘密情報管理手段で管理する秘密情報および前記鍵管理手段が管理する鍵の情報の少なくとも一方に対し、逆関数を求めることが少なくとも計算量的に困難な一方向性関数を適用する、第１の一方向性関数計算手段と、前記鍵管理手段が管理する鍵と、前記一方向性関数計算手段の計算結果をもとに証明補助情報を計算する証明補助情報計算手段と、証明補助情報の生成過程で情報を送受信する第１の通信手段と、前記公開鍵暗号系の公開鍵を記憶する公開鍵記憶手段と、対話証明の試験情報を生成し、生成した試験情報を記憶する試験情報生成手段と、対話証明の過程で情報を送受信する第２の通信手段と、対話証明に用いる秘密情報を保持する第２の秘密情報保持手段と、前記第２の秘密情報保持手段に保持されている秘密情報と前記公開鍵暗号系の鍵の情報の少なくとも一方に対し、前記一方向性関数と同一の計算を施す、第２の一方向性関数計算手段と、対話証明に用いる証明補助情報を管理する証明補助情報管理手段と、前記証明補助情報管理手段で管理されている証明補助情報と、前記一方向性関数計算手段で計算した値から、証明特徴情報を用いてのみ計算可能な応答情報を計算する応答情報計算手段と、対話証明の過程で情報を送受信する第３の通信手段とを有する。
【００３４】
この構成においては、まず、公開鍵発行時に、第１の通信手段を用いて公開鍵の生成を指示すると、鍵管理手段は公開鍵と秘密鍵を生成し、秘密鍵を記憶した後、前記通信手段により公開鍵を伝達する。
【００３５】
証明補助情報発行時には、第１の通信手段を用い、公開鍵と、秘密情報管理手段が秘密情報を検索するための情報を指定することで、証明補助情報の発行を指示する。鍵管理手段が前記公開鍵に対応する秘密鍵を検索し、秘密情報管理手段が秘密情報を検索し、第１の一方性関数計算手段は前記公開鍵と前記秘密情報の少なくとも一方を入力として値を計算する。証明補助情報計算手段は、前記秘密鍵と一方向性関数で計算した前記の値から証明補助情報を計算する。前記証明補助情報は、第１の通信手段により伝達される。
【００３６】
対話証明時には、試験情報生成手段は、対話証明で用いる試験情報を生成し、生成した試験情報を記憶する。第２の通信手段は、前記試験情報と公開鍵を第３の通信手段へ伝達する。第２の一方向性関数計算手段は、第３の通信手段で受信された公開鍵と秘密情報保持手段が保持する秘密情報の少なくとも一方を入力として一方向性関数の値を計算する。証明補助情報管理手段は、前記公開鍵に対応する証明補助情報を検索する。応答情報計算手段は、前記試験情報と一方向性関数計算手段で計算した前記の値から、応答情報を計算する。第３の通信手段は、前記応答情報を第２の通信手段に伝達する。
【００３７】
応答情報検証手段は、試験情報生成手段が保持する試験情報と、第２の通信手段で受信した前記応答情報と、公開鍵記憶手段が保持する公開鍵を入力とし、前記応答情報が所定の条件を満たしているかを検査する。所定の条件を満たしていれば、利用資格があるものと判定し、そうでなければ資格がないものと判定する。
【００３８】
情報に対するアクセス制御を行う場合には、公開鍵の発行後、情報を鍵Ｋで暗号化し、暗号化された情報と、暗号化に用いた鍵を公開鍵暗号の暗号鍵を用いて暗号化して得られたＥ（Ｋ）を組み合わせておき、利用資格を検証し、正当な資格を有すると判断した場合に情報を復号して利用する。
【００３９】
【発明の実施の態様】
以下、本発明の実施例について説明する。
【００４０】
図１は、本発明の利用資格検証装置の１実施例を示す。図１において、本実施例の利用資格検証装置は、検証装置１０、証明装置２０および証明補助情報発行装置３０からなる。検証装置１０は、公開鍵記憶部１０１、試験情報生成部１０２、応答検証部１０３および通信部１０４を含んで構成されている。証明装置２０は、秘密情報保持部２０１、一方向関数計算部２０２、応答情報計算部２０３、証明補助情報管理部２０４および通信部２０５を含んで構成されている。また、証明補助情報発行装置３０は、秘密情報管理部３０１、一方向性関数計算部３０２、証明補助情報計算部３０３、鍵管理部３０４および通信部３０５を含んで構成されている。
【００４１】
ここでは、公開鍵暗号系としてＲＳＡを用いる。ＲＳＡ公開鍵暗号の法数をｎ、公開鍵（暗号鍵）をｅ、秘密鍵（署名鍵）をｄとする。ここで、平文ｘ、暗号文ｙは、０≦ｅｘ＜ｎ，０≦ｙ＜ｎである。
【００４２】
証明補助情報発行装置３０および証明装置２０の一方向性計算部３０２および２０２の一方向性関数を、ｈ（・，・）とする。この一方向性関数の像は、ｎのオイラー数φ（ｎ）＝（ｐ−１）（ｑ−１）と互いに素である。通常の暗号ハッシュ関数の像はφ（ｎ）と互いに素であるとは限らないが、像がφ（ｎ）と互いに素でない場合には、入力にマジックナンバーをパッドするように決め、互いに素となるまでマジックナンバーをパッドするように決めることで、所望の一方向性関数を構成できる。
【００４３】
証明特徴情報は秘密鍵ｄで、証明装置２０の秘密鍵保持部２０１に保持されている秘密情報をｄＵとする。証明補助情報発行装置３０の発行する証明補助情報ｔをｔ＝ｄｈ（ｄＵ，ｎ）−１と定める。
【００４４】
図２は、図１の実施例におけるデータの処理および流れを模式的に示している。各処理を行うブロックを図１の符号を用いて表す。
【００４５】
図３は、図１の実施例の検証装置１０に証明素データ保持部１０５、乱数生成部１０６および乱数効果除去部１０７を付加したものである。図３の例では、検証装置１０から証明装置２０に送られる試験情報に乱数効果を付し、その結果、証明装置２０から検証装置１０へ返される証明情報にも乱数効果が付加される。したがって、認証プロセスの都度、試験情報および証明情報が変わり、リプレイアタックに対処することができる。なお、図３において、図１と対応する箇所には対応する符号を付した。
【００４６】
また、図４は、図１の実施例の証明装置２０を分離して構成したものである。すなわち、証明装置２０を証明装置２０Ａおよび２０Ｂに分離し、それぞれを異なるリソースで実現できる。例えば、証明装置２０Ａをパーソナルコンピュータ上のアプリケーションとして実現し、証明装置２０Ｂをパーソナルコンピュータと通信する耐タンパー装置としてのＩＣカードとして実現する。このようにすれば、保護が必要な情報をＩＣカードで保持管理したうえで、パーソナルコンピュータの計算リソースを有効利用できる。
【００４７】
以下、本実施例の各部の動作および公開鍵発行処理について説明する。各部の動作説明に際して適宜、図２を参照されたい。
【００４８】
まず、公開鍵の発行について説明する。発行された公開鍵は、検証装置１０で検証時に用いられるとともに、証明補助情報発行装置３０において証明補助情報生成に用いられる。ここでは、公開鍵の発行を証明情報発行装置３０が行うものとする。もちろん、他の独立した機関が公開鍵を発行管理してもよい。
【００４９】
図５は、公開鍵を発行するフローを示す。図５において、はじめに、法数ｎ＝ｐｑ（ｐ，ｑは素数）を生成する（Ｓ１１）。公開鍵ｅは法数のオイラー数φ（ｎ）と互いに素となるように定め、秘密鍵ｄはｅｄ≡１  ｍｏｄ  φ（ｎ）となるように決める（Ｓ１２、Ｓ１３）。暗号化関数ＥはＥ（ｘ）＝ｘｅ  ｍｏｄ  ｎ、復号化関数ＤはＤ（ｙ）＝ｙｄ  ｍｏｄ  ｎである。法数ｎと秘密鍵ｄを記憶し（Ｓ１４）、法数ｎと公開鍵ｅを発行する（Ｓ１５）。この実施例では、公開鍵の発行を証明情報発行装置３０が行い、鍵管理部３０４が法数ｎおよび秘密鍵ｄを所定のデータベースに記憶する。また、検証装置１０（それを含むプログラム）の提供者の要求に応じて法数ｎおよび公開鍵ｅを発行し、その提供者は検証装置１０の公開鍵記憶部１０１にその法数ｎおよび公開鍵ｅを保持する態様で検証装置１０を実装する。
【００５０】
つぎに証明補助情報の発行処理について説明する。図６は、証明補助情報を発行するフローを示す。図６において、はじめに、証明装置２０を識別するための情報を入力する（Ｓ２１）。識別のための情報は、たとえばカードに印刷した番号でもよいし、所有者の社員番号や保険証番号などを用いてもよい。そして入力された識別情報に対応する、証明装置２０に固有な情報ｄＵを検索する（Ｓ２２）。つぎに利用したい対象に応じて（すなわち個々の検証装置１０に応じて）公開鍵の法数ｎを入力する（Ｓ２３）。法数ｎに対応する秘密鍵ｄを検索し、証明補助情報ｔ＝ｄｈ（ｄＵ，ｎ）を生成し、要求もとの証明装置２０側へ発行する（Ｓ２４〜Ｓ２６）。
【００５１】
つぎに検証装置１０の動作について説明する。図７は、検証装置１０のフローを示す。なお、ここでは、図３の検証装置１０を用いて説明する。すなわち、試験情報に乱数効果を付している。図７において、はじめに０＜ｒ＜ｎなる乱数ｒを生成し、公開鍵でべき乗して試験情報Ｃ≡ｒｅ  ｍｏｄ  ｎを計算する（Ｓ３１）。Ｃと鍵の法数ｎを証明装置２０に送信する（Ｓ３２）。証明装置２０から受信した応答情報Ｒについて、Ｒ≡ｒ  ｍｏｄ  ｎが成立しているかどうか判定する（Ｓ３３、Ｓ３４）。前記検証式が成立していれば利用資格があるものとし、そうでなければ利用資格がないと判定する（Ｓ３５）。
【００５２】
つぎに証明装置２０の動作について説明する。まず、図８を参照して、計算を分離しない構成の証明装置２０（図１）の動作を説明する。図８において、はじめに、試験情報Ｃおよび公開鍵の法数ｎを入力する（Ｓ４１）。入力した公開鍵に対応する証明補助情報ｔを検索する（Ｓ４２）。公開鍵法数ｎと証明装置２０が保持する秘密情報ｄＵとに対して一方向性関数ｈ（・，・）を適用して、ｈ（ｄＵ，ｎ）を計算する（Ｓ４３）。この値に、前記証明補助情報ｔを乗じ、ｔｈ（ｄＵ，ｎ）を求める。試験情報Ｃをこの結果でべき乗し、応答情報Ｒ≡Ｃｔｈ（ｄＵ，ｎ）を求め（Ｓ４４）、この応答情報Ｒを検証装置１０に送信する（Ｓ４５）。
【００５３】
つぎに計算を２つの過程に分離する構成の証明装置（図４）の動作を図９および図１０を参照して説明する。図９および図１０において、証明装置１（２０Ａ）では、まず、検証装置１０から受信した試験情報を証明装置２（２０Ｂ）に送信する（Ｓ５１、Ｓ５２）。つぎに証明装置２（２０Ｂ）から応答情報１（Ｒ’）を受信する（Ｓ５３）。受信した法数ｎに対応する証明補助情報ｔを検索し（Ｓ５４）、これによって応答情報をべき乗した値Ｒ≡Ｒ’ｔ  ｍｏｄ  ｎを応答情報として、検証装置１０に送信する（Ｓ５５、Ｓ５６）。
【００５４】
証明装置２（２０Ｂ）では、まず試験情報Ｃと公開鍵法数ｎとを証明装置１（２０Ａ）から受信する（Ｓ６１）。公開鍵法数ｎと証明装置２（２０Ｂ）が保持する秘密情報ｄＵとに対して一方向性関数ｈ（・，・）を適用して、ｈ（ｄＵ，ｎ）を計算する（Ｓ６２）。この値で試験情報をべき乗し、Ｒ’≡Ｃｈ（ｄＵ，ｎ）  ｍｏｄ  ｎを応答情報１として証明装置１に送信する（Ｓ６３、Ｓ６４）。
【００５５】
次に、ソフトウエアのアクセス制御に用いる場合について説明する。
【００５６】
図１１は、ソフトウェアのアクセス制御をネットワーク上で行う例を示している。なお、図１１において図１と対応する箇所には対応する符号を付した。図１１において、利用者計算機１０００とチケット発行計算機２０００とがネットワーク３０００で接続されている。ネットワーク３０００はＷＡＮでもＬＡＮでもよい。利用者計算機１０００はハードウェア１００１に所定のオペレーティングシステム１００２がインストールされ、このオペレーティングシステム１００２上でアプリケーションプログラム１００３および証明プログラム２０が動作する。アプリケーションプログラム１００３には検証プログラム１０が埋め込まれている。アプリケーションプログラム１００３は記録媒体の形態で提供されてもよいし、オンラインで提供されていもよい。証明プログラム２０の一部は利用者計算機１０００に実装された耐タンパー装置上で実行されることが好ましい。
【００５７】
チケット発行計算機２０００もハードウェア２００１およびオペレーティングシステム２００２を有し、チケット発行サーバ３０が動作するようになっている。
【００５８】
ユーザは、アプリケーション１００３を利用したい場合には、証明用補助情報（チケット）の発行をチケット発行サーバに要求する。この要求は、ユーザの識別番号とアプリケーションの識別番号とを伴う。チケット発行サーバ３０は、ユーザの識別番号およびアプリケーションの識別番号に基づいてそれぞれユーザの秘密情報ｄＵおよび公開鍵の法数ｎおよび秘密鍵ｄを取り出す。そして証明補助情報ｔ＝ｄＦ（ｄＵ，ｎ）を計算して利用計算機１０００の証明プログラム２０に渡す。
【００５９】
以降、証明プログラム２０と検証プログラム１０とが試験情報Ｃ，ｎおよび応答情報Ｒをやり取りして認証を行い、認証が成功したならばアプリケーションプログラムが利用可能になる。
【００６０】
ソフトウェア（アプリケーション１００３）の保護の手法としてはソフトウェアの少なくとも一部を暗号鍵で暗号しておくことが考えられる。ソフトウェアの暗号鍵をＫとし、乱数をｒとする。安全のためには、鍵Ｋそのものがソフトウェアに含まれないことが望ましい。鍵Ｋそのものはソフトウェアに含まれない場合、暗号化されたソフトウェアの一部を復号し、所定の条件を満たすかどうか検査すればよい。ここではソフトウェアにＫをＲＳＡで暗号化した鍵Ｋ’≡Ｋｅ  ｍｏｄ  ｎを用いることとする。
【００６１】
はじめに、法数ｎと互いに素な乱数ｒ（０＜ｒ＜ｎ）を生成する。ＲＳＡでは、Ｅ（ｘｙ）＝Ｅ（ｘ）Ｅ（ｙ）となっていることと、Ｋ’＝Ｅ（Ｋ）から、ｒｅＫ’≡  Ｅ（ｒ）Ｅ（Ｋ）≡Ｅ（ｒＫ）  ｍｏｄ  ｎである。
【００６２】
ここではＣ＝ｒｅＫ’として、試験情報をＣ，ｎとする。この試験情報に基づいて応答情報Ｒ≡（Ｃｆ（ｎ，ｄＵ））ｔを計算する。証明装置１０と証明補助情報の組み合わせが正しい場合に限り、この計算は暗号文Ｃの復号となって、Ｒ≡Ｃｄ≡Ｄ（Ｃ）≡Ｄ（Ｅ（ｒｋ））≡ｒＫ  ｍｏｄ  ｎとなる。すなわち、証明特徴情報であるｄを復元したのと同じ計算を行うことになる。検証装置１０は、法ｎの下でのｒの乗法逆元ｒ−１を応答情報Ｒに乗じてｒ−１Ｒ≡Ｋ  ｍｏｄ  ｎかどうかを確認することで、利用資格の検証を行う。利用資格があると判断された場合には、暗号化された部分を復号し、プログラムの実行が行われる。
【００６３】
つぎに本実施例を改札装置の制御に用いる例を説明する。図１２は本実施例が適用された改札システムを示しており、この図において、ＩＣカード４０００には証明装置２０を実現するプログラムがインストールされている。チケット発行端末５０００はＩＣカードが着脱可能なものであり、チケット発行サーバ３０と通信してＩＣカード４０００に証明補助情報（チケット）を書き込む。ユーザは入場するときにＩＣカード４０００を入場ゲート６０００に提示し（例えばスロットに挿入して）、この間、入場ゲート６０００の検証装置１０とＩＣカード４０００の証明装置２０とが相互に通信して認証を行う。認証が成功すればユーザは入場ゲート６０００を通過することが可能になる。
【００６４】
次に、ＥｌＧａｍａｌ暗号を用いる場合について説明する。
【００６５】
公開鍵の発行にあたって、離散対数問題が困難な素数ｐを選択し、巡回群Ｚｐ ＊の生成元の１つｇを選択する。０＜α＜ｐ−１なる乱数αを秘密鍵として定め、
【００６６】
【数１３】
0003617259.tif 000009
を公開鍵として発行する。
【００６７】
暗号化は、以下のように行う。０＜ｋ＜ｐ−１なる乱数ｋを定め、ｕ≡ｇｋ  ｍｏｄ  ｐとする。ｙ≡βｋｘ  ｍｏｄ  ｐを求め、（ｕ，ｙ）を平文ｘに対応する暗号文とする。
【００６８】
復号化について説明する。
【００６９】
【数１４】
0003617259.tif 000010
したがって、秘密鍵αを有するものは、βｋを計算でき、その逆元β−ｋを求めることができる。よって、β−ｋｙ≡β−ｋβｋｘ≡ｘ  ｍｏｄ  ｐとして復号を行える。
【００７０】
また、一方向性関数をｈ（・，・）とする。この一方向性関数の像は、ｐ−２と互いに素である。証明補助情報ｔは、ｔ≡αｈ（ｄＵＵ，ｐ）−１  ｍｏｄ  ｐ−１である。
【００７１】
以下、認証について詳細に説明する。まず、証明装置での計算を分離しない場合について説明する。
【００７２】
検証装置のフローは、以下のようになる。検証装置では２つの乱数Ｍ，ｋを生成する。ｕ≡ｇｋ  ｍｏｄ  ｐおよびＣ≡βｋＭ  ｍｏｄ  ｐを求め、これらを試験情報とする。ｕ，Ｃ，ｐを送信する。証明装置から受信した応答情報Ｒについて、Ｒ≡Ｍ  ｍｏｄ  ｐが成立しているかどうか検査する。前記検証式が成立していれば利用資格があるものとし、そうでなければ利用資格がないと判定する。
【００７３】
証明装置のフローは、以下のようになる。証明装置では、受信した法数ｐに対応する証明補助情報ｔを検索する。一方向性関数の計算を行い、これにｔを乗じる。ここで得た値（ｔｈ（ｄＵ，ｐ））で、受信したｕをべき乗し、β’≡ｕｔｈ（ｄＵ，ｐ）を求める。法ｐ−１でのβ’の逆元β’−１を計算し、これを受信した試験情報Ｃに乗じて、応答情報Ｒ≡β’Ｃ  ｍｏｄ  ｐを計算し、検証装置に送信する。
【００７４】
つぎに証明装置での計算を２個所に分離する構成について説明する。この構成においても、ＲＳＡを用いた場合と同様に、証明装置１でべき乗計算を行った結果を証明装置２でべき乗する。
【００７５】
証明装置１では、まず、検証装置から受信した試験情報の１つであるｕを証明装置２に送信する。証明装置２から応答情報１（Ｒ’）を受信する。受信した法数ｐに対応する証明補助情報ｔを検索し、これによって応答情報をべき乗した値β’≡Ｒ’ｔ  ｍｏｄ  ｐを計算する。法ｐ−１でのβ’の逆元β’−１を計算し、これを受信したＣに乗じて、応答情報Ｒ≡β’Ｃ  ｍｏｄ  ｐを計算し、証明装置に送信する。
【００７６】
証明装置２では、まず試験情報の１つであるｕと公開鍵法数を受信する。公開鍵法数ｐと証明装置が保持する秘密情報ｄＵ一方向性関数ｈ（・，・）を適用して、ｈ（ｄＵ，ｎ）を計算する。この値でｕをべき乗し、Ｒ’≡Ｃｈ（ｄＵ，ｎ）  ｍｏｄ  ｐを応答情報１として証明装置１に送信する。
【００７７】
つぎに、乱数効果を与える場合について説明する。例えば、ソフトウェアのアクセス制御を行い、ソフトウェアの暗号に用いた鍵をＥｌＧａｍａｌ暗号で暗号化する場合には、ｋを０＜ｋ≦ｐ−２なる乱数として、（ｕ，Ｋ’）をソフトウェアと組み合わせておく。ここで、ｕ≡ｇｋ  ｍｏｄ  ｐ，Ｋ’≡βｋＫ  ｍｏｄ
ｐである。
【００７８】
いま、暗号文を計算するための乱数ｋを１つに固定すると、暗号文の一方は定数となり、暗号文のもう一方を得るための関数Ｅｋは、Ｅｋ（ｘ）≡βｋｘ  ｍｏｄ  ｐとなる。ｃを定数とすると、Ｅｋ（ｃｘ）＝ｃＥｋ（ｘ）である。ここでは、Ｃ≡ｃＫ’  ｍｏｄ  ｐとして、ｕ，Ｃ，ｐを試験情報とする。応答情報Ｒに、法ｐの下でのＣの逆元Ｃ−１を乗じＣ−１Ｒ≡Ｋ  ｍｏｄ  ｐが成立しているかどうかを確認することで利用資格の検証を行う。利用資格がある場合には、暗号化された部分を復号し、プログラムを実行する。
【００７９】
以上で実施例の説明を終了する。なお、本発明は上述の実施例に限定されるものではなく種々変更が可能である。例えば、本実施例では、一方向性を有する関数として（暗号）ハッシュを用いたが、代わりに、逆関数を求めることが少なくとも計算量的に困難である任意の関数を用いてよい。たとえば、チケットによって秘密鍵を復元する慣用鍵（対称鍵）暗号系、チケットによって署名鍵を復元するデジタル署名を用いることができる。
【００８０】
また、計算を複数の箇所で行わせる必要がない場合には、証明装置が保持する秘密情報そのものあるいは秘密情報から計算できる値を鍵として証明特徴情報を暗号化し、得られた暗号文をチケットとしてもよい。
【００８１】
本実施例では、公開鍵暗号系としてＲＳＡとＥｌＧａｍａｌ暗号を用いた。前述のように、これらの暗号化関数には、それぞれＥ（ｘｙ）＝Ｅ（ｘ）Ｅ（ｙ）（準同型性）およびＥｋ（ｃｘ）＝ｃＥｋ（ｘ）（線形性）という性質がある。前述の乱数効果の与え方は、ＲＳＡやＥｌＧａｍａｌ暗号に特有のものではなく、暗号関数に準同型性や線形性といったある種の可換図式が成立する暗号系全般に適用可能である。
【００８２】
【発明の効果】
本発明の利用資格検証装置は、公開鍵暗号系に基づく対話証明と、逆関数を計算することが少なくとも計算量的に不可能な一方向性関数とを用いたことにより、利用者が結託しても権利を詐称することのできない、安全な利用資格検証装置を実現できる。
【図面の簡単な説明】
【図１】本発明の利用資格検証装置の実施例を示すブロック図である。
【図２】上述実施例の動作を模式的に示す図である。
【図３】上述実施例の変形例（乱数効果）を示すブロック図である。
【図４】上述実施例の他の変形例（分離型証明装置）を示すブロック図である。
【図５】公開鍵発行動作を示すフローチャートである。
【図６】証明補助情報発行動作を示すフローチャートである。
【図７】検証装置の対話証明時の処理を示すフローチャートである。
【図８】証明装置の対話証明時の処理を示すフローチャートである。
【図９】分離型証明装置の動作を示すフローチャートである。
【図１０】公開鍵発行動作を示すフローチャートである。
【図１１】本発明の利用資格検証装置を用いた、ソフトウェアのアクセス制御装置を示す図である。
【図１２】本発明の利用資格検証装置を用いた改札装置を示す図である。
【符号の説明】
１０    検証装置
２０    証明装置
３０    証明補助情報発行装置
１０１    公開鍵記憶部
１０２    試験情報計算部
１０３    応答検証部
１０４    通信部
１０５    証明素データ保持部
１０６    乱数生成部
１０７    乱数効果除去部
２０１    秘密情報保持部
２０２    一方向性関数計算部
２０３    応答情報計算部
２０４    証明補助情報管理部
２０５    通信部
３０１    秘密情報管理部
３０２    一方向性関数計算部
３０３    証明補助情報計算部
３０４    鍵管理部
３０５    通信部
【図１】
0003617259.tif 000011
【図２】
0003617259.tif 000012
【図３】
0003617259.tif 000013
【図４】
0003617259.tif 000014
【図５】
0003617259.tif 000015
【図６】
0003617259.tif 000016
【図７】
0003617259.tif 000017
【図８】
0003617259.tif 000018
【図９】
0003617259.tif 000019
【図１０】
0003617259.tif 000020
【図１１】
0003617259.tif 000021
【図１２】
0003617259.tif 000022