(57)【要約】  検証システムは、証明装置（１）と検証装置（２）とを含む。証明装置（１）は、署名が付された証明書情報を受信すると、ユーザによる指定に応じて、受信した証明書情報のうち、公開情報および秘匿情報を分割し（Ｓ１４）、分割した公開情報および秘匿情報をそれぞれコミットするためのコミットメントを生成し（Ｓ１７）、生成したそれぞれのコミットメントの積が証明書情報の署名に対応することを示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成し、検証用情報および公開情報を検証装置（２）に送信する（Ｓ２１，Ｓ２５）。検証装置（２）は、検証用情報に基づいて、公開情報の検証を行う（Ｓ２６）。これにより、検証システムは、署名が付された証明書情報について、柔軟な開示情報で検証することができる。
2020261396.tif 000002
【特許請求の範囲】
【請求項１】
証明装置および検証装置により署名が付された証明書情報を検証する検証方法であって、
前記証明装置は、
前記証明書情報を受信すると、ユーザによる指定に応じて、受信した前記証明書情報のうち、公開情報および秘匿情報を特定し、
該特定した前記公開情報および前記秘匿情報をそれぞれコミットするためのコミットメントを生成し、
該生成したそれぞれのコミットメントの積が前記証明書情報の前記署名に対応することを示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成し、
該生成した前記検証用情報および前記公開情報を前記検証装置に送信し、
前記検証装置は、
前記検証用情報に基づいて、前記公開情報の検証を行う
処理をコンピュータが実行することを特徴とする検証方法。
【請求項２】
前記検証用情報を生成する処理は、前記公開情報のコミットメントの値と前記秘匿情報のコミットメントの値との積が前記証明書情報の前記署名の値と一致することを証明し、証明した結果を示す前記証明情報を含んで前記検証用情報を生成する
ことを特徴とする請求項１に記載の検証方法。
【請求項３】
前記公開情報および前記秘匿情報を特定する処理は、前記証明書情報に含まれる複数の属性のうち所定の属性に対する文字列について、前記公開情報の部分文字列および前記秘匿情報の部分文字列を特定する
ことを特徴とする請求項１に記載の検証方法。
【請求項４】
前記コミットメントを生成する処理は、前記検証装置によって生成される乱数を用いて前記公開情報および前記秘匿情報のコミットメントを生成し、
前記検証用情報を生成する処理は、前記乱数を含んで前記検証用情報を生成する
ことを特徴とする請求項１に記載の検証方法。
【請求項５】
前記コミットメントを生成する処理は、自装置によって生成される第１の乱数とハッシュ関数とを用いて第２の乱数を生成し、前記第２の乱数を用いて前記公開情報および前記秘匿情報のコミットメントを生成し、
前記検証用情報を生成する処理は、前記第２の乱数を含んで前記検証用情報を生成する
ことを特徴とする請求項１に記載の検証方法。
【請求項６】
証明装置と、
検証装置と、を有し、
前記証明装置は、
署名が付された証明書情報を受信すると、ユーザによる指定に応じて、受信した前記証明書情報のうち、公開情報および秘匿情報を特定する特定部と、
前記特定部によって特定された前記公開情報および前記秘匿情報をそれぞれコミットするためのコミットメントを生成する第１の生成部と、
前記第１の生成部によって生成されたそれぞれのコミットメントの積が前記証明書情報の前記署名に対応することを示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成する第２の生成部と、
前記第２の生成部によって生成された前記検証用情報および前記公開情報を前記検証装置に送信する送信部と、を有し、
前記検証装置は、
前記検証用情報に基づいて、前記公開情報の検証を行う検証部
を有することを特徴とする検証システム。
【請求項７】
署名が付された証明書情報を受信すると、ユーザによる指定に応じて、受信した前記証明書情報のうち、公開情報および秘匿情報を特定し、
該特定した前記公開情報および前記秘匿情報をそれぞれコミットするためのコミットメントを生成し、
該生成したそれぞれのコミットメントの積が前記証明書情報の前記署名に対応することを示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成し、
該生成した前記検証用情報および前記公開情報を検証装置に送信する、
処理をコンピュータに実行させることを特徴とする証明プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検証方法等に関する。
【背景技術】
【０００２】
近年、個人の信用情報が電子的に管理されつつある。例えば、ブロックチェーンを用いた個人の信用情報の管理として、Hyperledger  Indy（登録商標）がある。Hyperledger  Indyでは、個人は、信頼された機関から発行された電子署名付きの証明書を持ち、この証明書を提示することにより、個人の信用情報を提示することができる。提示先では、証明書を発行した機関の公開鍵をブロックチェーンから探索して、公開鍵に対応した秘密鍵で署名がなされているかを検証することで、証明書の正当性を検証する。【０００３】
ところが、個人は、提示先に対して、開示する必要のない情報を開示したくない場合がある。しかしながら、電子署名は証明書に付されているので、通常は、証明書の全てを開示しないと、証明書の正当性を検証できない。【０００４】
そこで、ゼロ知識証明の技術を用いて、証明書の一部の情報を秘匿して証明書の正当性を検証する技術が開示されている。ゼロ知識証明とは、証明者が「命題が真である」こと以外の知識を検証者に与えることなく、「命題が真である」ことを検証者に証明する手法である（例えば、特許文献１参照）。例えば、秘密情報ｓに対して、コミットメント演算を施し、コミットメントｃを生成し、証明者がｃの秘密情報ｓを「知っている」ことを検証者に確認させる（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１６−２０８１０７号公報
【特許文献２】特開平１１−２４９５６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、電子署名が付された証明書について、柔軟な開示情報で検証することが難しいという問題がある。例えば、従来の技術では、ゼロ知識証明の技術を用いて、証明書の一部の属性に対する情報を隠して開示する場合、証明書の正当性を検証することができる。ところが、ゼロ知識証明の技術を用いても、証明書の一部の属性に対する文字列の一部を隠して開示する場合、証明書の正当性を検証することが難しい。一例として、証明書に住所の属性があるとする。証明書に「住所：kanagawakawasaki・・・」とあるときに、「住所：kanagawa□□□・・・」のように「kawasaki」を隠して開示する場合、証明書の正当性を検証することが難しい。【０００７】
１つの側面では、本発明は、電子署名が付された証明書について、柔軟な開示情報で検証することを目的とする。
【課題を解決するための手段】
【０００８】
一態様の検証方法において、検証方法は、証明装置および検証装置により証明書情報を検証する。前記証明装置は、前記証明書情報を受信すると、ユーザによる指定に応じて、受信した証明書情報のうち、公開情報および秘匿情報を特定し、該特定したそれぞれの情報をコミットするためのコミットメントを生成し、該生成したそれぞれのコミットメントの積が前記証明書情報の前記署名に対応することを示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成し、該生成した前記検証用情報および前記公開情報を前記検証装置に送信する。前記検証装置は、前記公開情報を前記検証用情報に基づいて前記証明書の検証を行う。
【発明の効果】
【０００９】
一つの態様によれば、電子署名が付された証明書について、柔軟な開示情報で検証することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例に係る証明装置を含む検証システムの機能構成を示すブロック図である。
【図２】図２は、実施例に係る証明装置の機能構成を示す図である。
【図３】図３は、実施例に係る検証装置の機能構成を示す図ある。
【図４】図４は、実施例に係る発行機関の機能構成を示す図である。
【図５】図５は、実施例に係る検証処理のシーケンスの一例を示す図である。
【図６】図６は、実施例に係る検証処理を用いて証明書を検証する一例を示す図である。
【図７】図７は、証明プログラムを実行するコンピュータの一例を示す図である。
【図８】図８は、ゼロ知識証明技術を用いて証明書を検証する参考例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する検証方法、検証システム及び証明プログラムの実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
【実施例】
【００１２】
まず、ゼロ知識証明技術を用いて証明書を検証する参考例を、図８を参照して説明する。図８は、ゼロ知識証明技術を用いて証明書を検証する参考例を示す図である。ゼロ知識証明技術とは、証明者が「命題が真である」こと以外の知識を検証者に与えることなく、「命題が真である」ことを検証者に証明する技術である。言い換えれば、かかる技術は、証明者が証明書の一部の属性の情報を隠したまま証明書の正当性（証明書を発行した発行元の電子署名が有効な証明書であること）を検証者に証明する技術のことをいう。証明する証明者は、証明書の発行を受けた個人である。【００１３】
図８に示すように、証明書が給与証明書であるとする。給与証明書は、信頼できる機関、例えば企業によって発行されたものである。ここでは、証明者は、給与証明書に含まれる複数の属性の中で「従業員Ｎｏ」属性と「住所」属性との情報を隠したいとする。【００１４】
検証先が、証明者に対して、企業、年収と年収の信用情報を要求する。すると、証明者は、電子署名が付された給与証明書の開示しない情報として「従業員Ｎｏ」属性の情報と、「住所」属性の情報とを選択する。そして、証明者は、選択した開示しない情報を隠したまま証明書の正当性を証明する。すなわち、証明者は、ゼロ知識証明を行う。そして、証明者は、証明情報を含む検証用情報を生成し、検証先へ送信する。そして、検証先は、検証用情報を用いて、「従業員Ｎｏ」属性の情報と、「住所」属性の情報とが隠れたまま、証明書の正当性を検証する。すなわち、検証先は、「従業員Ｎｏ」属性の情報と、「住所」属性の情報の知識がゼロであるが、証明書の署名が残りの属性の情報と隠れた２つの属性の情報の署名であることを検証する。【００１５】
ところが、参考例では、ゼロ知識証明技術を用いても、証明書内の一部の属性に対する文字列の一部を隠して開示する場合、証明書の正当性を検証することが難しい。一例として、図８で示す給与証明書に「住所：kanagawakawasaki・・・」があるときに、「住所：kanagawa□□□・・・」のように「kawasaki」を隠して開示する場合である。【００１６】
そこで、以降では、証明書の一部の属性に対する文字列の一部を隠して開示した場合であっても、証明書の正当性を検証することができる検証システムについて説明する。【００１７】
［実施例に係る検証システムの構成］
図１は、実施例に係る証明装置を含む検証システムの機能構成を示すブロック図である。検証システム９は、証明装置１と、検証装置２と、発行機関３とを有する。証明装置１と、検証装置２と、発行機関３とは、それぞれネットワーク５で接続される。【００１８】
発行機関３は、電子署名が付された証明書を、ネットワーク５を介して証明装置１に対して発行する。ここでいう発行機関３とは、電子証明書を発行する、信頼された機関のことをいう。発行機関３には、例えば、認証局（ＣＡ：Certification  Authority）や企業などが含まれる。【００１９】
証明装置１は、証明書の一部の属性に対する文字列について、ゼロ知識証明技術を用いて、隠したい文字列のコミットメントと開示したい文字列のコミットメントとの結合が当該属性に対する文字列の署名に対応することを証明する。証明装置１は、それぞれのコミットメントおよび証明されたことを示す証明情報を含む、検証に用いられる情報（以降、「検証用情報」という）を検証装置２に送信するとともに、開示したい文字列そのものを検証装置２に送信する。【００２０】
検証装置２は、検証用情報および開示された文字列そのものに基づいて、証明書の正当性を検証する。すなわち、検証装置２は、属性に対する文字列に開示された文字列が含まれていることを検証する。つまり、属性に対する文字列全体は発行機関３によって署名されている。検証装置２は、開示された文字列そのものはわかるので、コミットメントや証明情報などの検証用情報から開示された文字列の検証ができれば、開示された文字列が属性に対する文字列に含まれていることを検証できる。この結果、検証装置２は、電子署名が付された証明書について、柔軟な開示情報で検証することが可能となる。【００２１】
［証明装置の機能構成］
図２は、実施例に係る証明装置の機能構成を示す図である。図２に示すように、証明装置１は、制御部１０、記憶部２０およびユーザインタフェース部３０を有する。【００２２】
制御部１０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部１０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路又はＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。さらに、制御部１０は、証明書受信部１１、開示／非開示受付部１２、文字列分割部１３、乱数受信部１４、コミットメント生成部１５、検証用情報生成部１６および検証用情報送信部１７を有する。なお、開示／非開示受付部１２および文字列分割部１３は、特定部の一例である。コミットメント生成部１５は、第１の生成部の一例である。検証用情報生成部１６は、第２の生成部の一例である。検証用情報送信部１７は、送信部の一例である。【００２３】
記憶部２０は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）等の不揮発性の半導体メモリ素子等の記憶装置に対応する。さらに、記憶部２０は、証明書２１０を記憶する。【００２４】
ユーザインタフェース部３０は、ユーザの入出力のインタフェースを示す。ユーザインタフェース部３０は、例えば、入力のインタフェースとして、キーボード、マウスやタッチパネルを用いることができる。さらに、ユーザインタフェース部３０は、音声で入力を受け付けるマイクなどであっても良い。また、ユーザインタフェース部３０は、例えば、出力のインタフェースとして、各種の情報を表示するディスプレイを用いることができる。さらに、ユーザインタフェース部３０は、各種の情報を音声で出力するスピーカなどであっても良い。【００２５】
証明書受信部１１は、発行機関３から署名付きの証明書２１０を受信する。署名には、例えば、証明書２１０に含まれる属性ごとに、各属性の文字列に対するコミットメントを示す署名が含まれる。また、証明書受信部１１は、受信した証明書２１０および各属性の文字列に対するコミットメントを記憶部２０に格納する。【００２６】
開示／非開示受付部１２は、ユーザによる指定に応じて、受信した証明書２１０の情報のうち、開示部分および非開示部分（秘匿部分）を受け付ける。例えば、開示／非開示受付部１２は、ユーザインタフェース部３０を介して、証明書２１０の情報に含まれる複数の属性のうち所定の属性に対する文字列について、開示したい開示部分（公開情報）、隠したい非開示部分（秘匿情報）を特定する。【００２７】
文字列分割部１３は、証明書２１０の所定の属性に対する文字列を、特定した開示部分の部分文字列および特定した非開示部分の部分文字列に分割する。【００２８】
乱数受信部１４は、検証装置２から乱数を受信する。乱数は、証明装置１側で変更することができないランダム値として用いられる。なお、乱数は、ゼロ知識証明における、チャレンジに相当する。【００２９】
コミットメント生成部１５は、開示部分の部分文字列および非開示部分の部分文字列のそれぞれのコミットメントを生成する。【００３０】
例えば、コミットメント生成部１５は、文字列がＡＳＣＩＩコードでエンコードされている場合にはビッグエンディアンによって２５６＾Ｎ以下の数値として解釈する。Ｎは、バイト数（文字数）である。一例として、Ｍが“ａｂ”であるとする。Ｍは、ＡＳＣＩＩコードで「０ｘ６１  ０ｘ６２」である。コミットメント生成部１５は、Ｍを（６×１６＋１）×２５６＾１＋（６×１６＋２）×２５６＾０＝２４９３０（１０進数）と解釈する。なお、「＾」はべき乗である。なお、ＡＳＣＩＩコード以外のコードでエンコードされている場合にはその文字コードのエントロピーに用いて数値として解釈することができる。【００３１】
そして、コミットメント生成部１５は、分割された部分文字列ごとにビッグエンディアンによって数値を求める。一例として、所定の属性に対する文字列ＭがＭ＿ｐｒｅとＳとＭ＿ｓｕｆとに分割されたとする。Ｍ＿ｐｒｅ、Ｍ＿ｓｕｆが非開示部分の部分文字列であり、Ｓが開示部分の部分文字列であるとする。すると、コミットメント生成部１５は、文字列ＭをＭ＿ｐｒｅ×２５６＾α＋Ｓ×２５６＾β＋Ｍ＿ｓｕｆと計算して、Ｍの文字列を数値として求める。βは、Ｍ＿ｓｕｆの文字数である。αは、Ｓの文字数とＭ＿ｓｕｆの文字数（β）を加算した文字数である。【００３２】
そして、コミットメント生成部１５は、非開示部分のＭ＿ｐｒｅの部分文字列に対して、以下のようにコミットメントを生成する。なお、ｇ、ｈは、適当な群の元とする。ｒ＿１１、ｒ＿１２、ｒ＿１３は、それぞれ乱数受信部１４によって受信された乱数を示す。
Ｃ＿１１＝ｇ＾（Ｍ＿ｐｒｅ）×ｈ＾（ｒ＿１１）・・・式（１）
Ｃ＿１２＝ｇ＾（２５６＾α）×ｈ＾（ｒ＿１２）・・・式（２）
Ｃ＿１３＝ｇ＾（Ｍ＿ｐｒｅ×２５６＾α）×ｈ＾（ｒ＿１３）・・・式（３）【００３３】
Ｃ＿１１は、Ｍ＿ｐｒｅに対するコミットメントである。Ｃ＿１１は、Ｃ＿１２と組み合わせることにより、Ｃ＿１３に含まれるＭ＿ｐｒｅの文字数がαであることを証明するために用いられる。Ｃ＿１２は、２５６＾αに対するコミットメントである。Ｃ＿１２は、Ｃ＿１１と組み合わせることにより、Ｃ＿１３に含まれるＭ＿ｐｒｅの文字数がαであることを証明するために用いられる。Ｃ＿１３は、Ｍ＿ｐｒｅ×２５６＾αに対するコミットメントである。Ｃ＿１３は、Ｃ＿２３とＣ＿３１と組み合わせることにより、Ｃ＿１３とＣ＿２３とＣ＿３１がコミットしている数値を足し合わせたものが文字列Ｍに等しいことを証明するために用いられる。【００３４】
そして、コミットメント生成部１５は、開示部分のＳの部分文字列に対して、以下のようにコミットメントを生成する。なお、ｇ、ｈは、Ｍ＿ｐｒｅのコミットメントの生成で用いられたｇ、ｈと同じ元である。ｒ＿２１、ｒ＿２２、ｒ＿２３は、それぞれ乱数受信部１４によって受信された乱数を示す。
Ｃ＿２１＝ｇ＾（Ｓ）×ｈ＾（ｒ＿２１）・・・式（４）
Ｃ＿２２＝ｇ＾（２５６＾β）×ｈ＾（ｒ＿２２）・・・式（５）
Ｃ＿２３＝ｇ＾（Ｓ×２５６＾β）×ｈ＾（ｒ＿２３）・・・式（６）【００３５】
Ｃ＿２１は、Ｓの部分文字列に対するコミットメントである。Ｃ＿２１は、Ｃ＿２２と組み合わせることにより、Ｃ＿２３に含まれるＳの文字数がβであることを証明するために用いられる。Ｃ＿２２は、２５６＾βに対するコミットメントである。Ｃ＿２２は、Ｃ＿２１と組み合わせることにより、Ｃ＿２３に含まれるＳの文字数がβであることを証明するために用いられる。Ｃ＿２３は、Ｓ×２５６＾βに対するコミットメントである。Ｃ＿２３は、Ｃ＿１３とＣ＿３１と組み合わせることにより、Ｃ＿１３とＣ＿２３とＣ＿３１がコミットしている数値を足し合わせたものが文字列Ｍに等しいことを証明するために用いられる。【００３６】
そして、コミットメント生成部１５は、非開示部分のＭ＿ｓｕｆの部分文字列に対して、以下のようにコミットメントを生成する。なお、ｇ、ｈは、Ｍ＿ｐｒｅおよびＳのコミットメントの生成で用いられたｇ、ｈと同じ元である。ｒ＿３１は、乱数受信部１４によって受信された乱数を示す。
Ｃ＿３１＝ｇ＾（Ｍ＿ｓｕｆ）×ｈ＾（ｒ＿３１）・・・式（７）【００３７】
Ｃ＿３１は、Ｍ＿ｓｕｆの部分文字列に対するコミットメントである。Ｃ＿３１は、Ｃ＿１３とＣ＿２３と組み合わせることにより、Ｃ＿１３とＣ＿２３とＣ＿３１がコミットしている数値を足し合わせたものが文字列Ｍに等しいことを証明するために用いられる。【００３８】
検証用情報生成部１６は、検証装置２によって検証に用いられる検証用情報を生成する。【００３９】
例えば、検証用情報生成部１６は、コミットメントに対する知識（文字列）を検証装置２に提示するために、Ｃ＿１３がＣ＿１１とＣ＿１２の積の知識であることの証明を行う。また、検証用情報生成部１６は、コミットメントに対する知識（文字列）を検証装置２に提示するために、Ｃ＿２３がＣ＿２１とＣ＿２２の積の知識であることの証明を行う。なお、積の知識であることの証明は、ゼロ知識証明の手法で実現でき、例えば、「Camenish,  J.,  Lysyanskaya,  A.,  “A  Signature  Scheme  with  Efficient  Protocols”,  in  SCN’04,pp.268-289,2002」の文献の技術を用いれば良い。【００４０】
また、検証用情報生成部１６は、分割した開示部分および非開示部分のそれぞれの部分文字列についてのコミットメントの結合が属性の文字列に対するコミットメント（署名）に対応することを証明する。すなわち、検証用情報生成部１６は、分割した開示部分および非開示部分のそれぞれの部分文字列についてのコミットメントを組み合わせることにより、属性の文字列のコミットメント（署名）になることを証明する。一例として、検証用情報生成部１６は、Ｍ＿ｐｒｅ、Ｓ、Ｍ＿ｓｕｆを結合したものが該当する属性の文字列Ｍに対応することを証明する。さらに具体的には、Ｍが該当する属性の文字列、Ｃがその署名値であるとする。検証用情報生成部１６は、該当する属性の文字列Ｍ自身に対する署名値  Ｃ＝ｇ＾Ｍ×ｈ＾ｒについてＣ＿１３×Ｃ＿２３×Ｃ＿３１と同じｇの冪を持つことを証明する。かかる証明を結合の証明と呼ぶ。なお、結合の証明は、ゼロ知識証明の手法で実現でき、例えば、「Camenish,  J.,  Lysyanskaya,  A.,  “A  Signature  Scheme  with  Efficient  Protocols”,  in  SCN’04,pp.268-289,2002」の文献の技術を用いれば良い。【００４１】
また、検証用情報生成部１６は、分割した開示部分および非開示部分のそれぞれの部分文字列のコミットメントを用いて、それぞれの部分文字列に対する長さを証明する。一例として、検証用情報生成部１６は、分割した開示部分および非開示部分のそれぞれの部分文字列の長さが一定以上または一定以下であることを証明する。なお、長さの証明は、例えば、「F.Boudot,  “Efficient  Proofs  that  a  committed  number  lies  in  an  interval”」の文献の技術を用いれば良い。【００４２】
検証用情報送信部１７は、検証用情報を検証装置２に対して送信する。検証用情報には、それぞれのコミットメントと、コミットメントを生成する際に用いられた乱数および部分文字列の長さと、積の知識であることの証明、結合の証明および長さの証明がされたことを示す証明情報と、属性の文字列に対するコミットメント（署名）とが含まれる。【００４３】
また、検証用情報送信部１７は、開示部分の部分文字列そのものを検証装置２に対して送信する。【００４４】
［検証装置の機能構成］
図３は、実施例に係る検証装置の機能構成を示す図である。図３に示すように、検証装置２は、図示しない制御部および記憶部を有する。制御部は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路又はＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。さらに、制御部は、乱数生成送信部２１、検証用情報受信部２２および検証部２３を有する。記憶部は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）等の不揮発性の半導体メモリ素子等の記憶装置に対応する。なお、検証部２３は、検証部の一例である。【００４５】
乱数生成送信部２１は、証明装置１からの乱数の生成要求に応じて、乱数を生成する。生成した乱数は、証明装置１が変更することができないランダム値として証明装置１で用いられる。また、乱数生成送信部２１は、生成した乱数を要求元の証明装置１へ送信する。【００４６】
検証用情報受信部２２は、証明装置１から検証用情報を受信する。また、検証用情報受信部２２は、証明装置１から開示部分の文字列そのものを受信する。【００４７】
検証部２３は、検証用情報を用いて、各種の証明の正当性を検証する。例えば、検証部２３は、検証用情報を用いて、積の知識であることの証明の正当性を検証する。また、検証部２３は、検証用情報を用いて、結合の証明の正当性を検証する。また、検証部２３は、検証用情報を用いて、部分文字列の長さの証明の正当性を検証する。【００４８】
また、検証部２３は、検証用情報および開示部分の部分文字列を用いて、属性の文字列に開示部分の部分文字列が含まれていることを検証する。一例として、検証部２３は、コミットメントを生成する際に用いられた乱数ｒ＿２３と、Ｍ＿ｓｕｆの文字数βを用いて、開示部分の部分文字列ＳのコミットメントＣ＿２３を検証する。なお、ｇ、ｈは、証明装置１、検証装置２および発行機関３に共通して明示されている。【００４９】
［発行機関の機能構成］
図４は、実施例に係る発行機関の機能構成を示す図である。図４に示すように、発行機関３は、図示しない制御部および記憶部を有する。制御部は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路又はＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。さらに、制御部は、証明書生成部３１および証明書送信部３２を有する。記憶部は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）等の不揮発性の半導体メモリ素子等の記憶装置に対応する。【００５０】
証明書生成部３１は、証明装置１からの要求に応じて、署名付きの証明書を生成する。証明書送信部３２は、生成された署名付きの証明書を証明装置１に送信する。【００５１】
［検証処理のシーケンスの一例］
図５は、実施例に係る検証処理のシーケンスの一例を示す図である。なお、図５では、発行機関３は、証明装置１から証明書の発行要求を受け付けたとする。【００５２】
図５に示すように、発行機関３では、証明書生成部３１が、証明書の発行要求に応じて、署名付きの証明書を生成する（Ｓ１１）。そして、証明書送信部３２は、生成された署名付きの証明書を証明装置１に対して発行する（Ｓ１２）。なお、ここでは、証明書に含まれる特定の属性の文字列ｍに対する署名がＣであるとする。【００５３】
証明装置１では、証明書受信部１１が、証明書を受信する。開示／非開示受付部１２が、ユーザ（証明者）から証明書の中の特定の属性の文字列に関し、開示部分と非開示部分の部分文字列を受け付ける（Ｓ１３）。そして、文字列分割部１３は、文字列ｍをｍ＿ｐｒｅ、Ｓ、ｍ＿ｓｕｆの部分文字列に分割する（Ｓ１４）。ここでは、Ｓが開示部分の部分文字列であり、ｍ＿ｐｒｅ、ｍ＿ｓｕｆが非開示部分の部分文字列であるとする。そして、乱数受信部１４は、検証装置２に対してランダム値を要求する（Ｓ１５）。【００５４】
検証装置２では、ランダム値の要求を受信した乱数生成送信部２１が、ランダム値を生成し、要求元の証明装置１へ送信する（Ｓ１６）。ここでいうランダム値は、乱数と同義である。かかる乱数は、検証装置２以外で変更されないランダム値として証明装置１側で用いられる。【００５５】
証明装置１では、乱数受信部１４が、ランダム値を受信する。コミットメント生成部１５が、各部分文字列ｍ＿ｐｒｅ、Ｓ、ｍ＿ｓｕｆに対するコミットメントを生成する（Ｓ１７）。一例として、コミットメント生成部１５は、部分文字列ｍ＿ｐｒｅに対して式（１）〜式（３）のコミットメントを生成する。コミットメント生成部１５は、部分文字列Ｓに対して式（４）〜式（６）のコミットメントを生成する。コミットメント生成部１５は、部分文字列ｍ＿ｓｕｆに対して式（７）のコミットメントを生成する。【００５６】
続いて、証明装置１では、検証用情報生成部１６が、各部分文字列のコミットメントに対する積の証明を行う（Ｓ１８）。一例として、検証用情報生成部１６は、部分文字列Ｍ＿ｐｒｅのコミットメントＣ＿１３がＣ＿１１とＣ＿１２の積の知識であることの証明を行う。検証用情報生成部１６は、部分文字列ＳのコミットメントＣ＿２３がＣ＿２１とＣ＿２２の積の知識であることの証明を行う。【００５７】
続いて、証明装置１では、検証用情報生成部１６が、各部分文字列の結合文字列と文字列ｍの署名Ｃとが対応することの結合の証明を行う（Ｓ１９）。一例として、検証用情報生成部１６は、文字列ｍ自身に対する署名値  Ｃ＝ｇ＾ｍ×ｈ＾ｒ    についてＣ＿１３×Ｃ＿２３×Ｃ＿３１と同じｇの冪を持つことを証明する。すなわち、検証用情報生成部１６は、分割した開示部分および非開示部分のそれぞれの部分文字列についてのコミットメントを組み合わせることにより、属性の文字列ｍのコミットメントＣ（署名）になることを証明する。【００５８】
続いて、証明装置１では、検証用情報生成部１６が、各部分文字列のコミットメントを用いて、各部分文字列の長さを証明する（Ｓ２０）。【００５９】
そして、証明装置１では、検証用情報生成部１６が、検証用情報を生成する。検証用情報送信部１７が、生成された検証用情報を検証装置２へ送信する（Ｓ２１）。一例として、検証用情報には、各部分文字列のコミットメントと、コミットメントを生成する際に用いられた乱数および部分文字列の長さと、積の知識であることの証明、結合の証明および長さの証明がされたことを示す証明情報とが含まれる。加えて、検証用情報には、属性の文字列ｍに対するコミットメントＣ（署名）が含まれる。【００６０】
検証装置２では、検証部２３が、検証用情報を用いて、積の証明の正当性を検証する（Ｓ２２）。検証部２３は、検証用情報を用いて、結合の証明の正当性を検証する（Ｓ２３）。また、検証部２３は、検証用情報を用いて、長さの証明の正当性を検証する（Ｓ２４）。【００６１】
続いて、証明装置１では、検証用情報送信部１７が、開示部分の部分文字列そのものを検証装置２に対して送信する（Ｓ２５）。ここでは、検証用情報送信部１７は、開示部分の部分文字列Ｓを検証装置２に送信する。【００６２】
検証装置２では、検証部２３が、開示部分の部分文字列を検証する（Ｓ２６）。一例として、検証部２３は、開示部分の部分文字列ＳのコミットメントＣ＿２３を生成する際に用いられた乱数ｒ＿２３と、Ｍ＿ｓｕｆの文字数βを用いて、開示部分の部分文字列ＳのコミットメントＣ＿２３を検証する。【００６３】
これにより、証明装置１は、証明書２１０について、属性に対する文字列そのものではなく、属性に対する文字列の一部を隠すことができるようになり、検証装置２に対して柔軟な情報開示を行うことができる。つまり、証明装置１は、属性に対する文字列について、文字列を開示する部分文字列と秘匿する部分文字列とに分割する。そして、証明装置１は、分割されたそれぞれの部分文字列についてのゼロ知識証明と、それぞれの部分文字列を組み合わせた全体の文字列についてのゼロ知識証明との２つの知識証明を行った後に、開示する部分の部分文字列を開示する。これにより、証明装置１は、属性に対する文字列の一部を隠しつつもその他の情報についての提示を可能にする。【００６４】
［証明書の検証例］
ここで、実施例に係る検証処理を用いて署名付きの証明書を検証する一例を、図６を参照して説明する。図６は、実施例に係る検証処理を用いて証明書を検証する一例を示す図である。ここでは、検証者である検証装置２が、例えば、ローン会社のサーバであるとする。そして、ローン会社がユーザに企業、年収と年収の信用情報を要求する場合とする。ユーザが、証明装置１の証明者である。【００６５】
図６に示すように、証明書は、署名付きの給与証明書である場合とする。給与証明書は、証明装置１の要求に応じて、企業などの発行機関３によって発行されたものである。ここでは、証明者が、給与証明書に含まれる「住所」属性に対する文字列の一部の部分文字列を開示しない情報とする場合である。【００６６】
ここでは、給与証明書に含まれる「住所」属性の文字列は、「ｋａｎａｋａｗａ１−２−３」である。証明装置１は、「住所」属性の文字列に関し、ユーザ（証明者）から開示部分の部分文字列「ｋａｗａ」と、非開示部分の部分文字列「ｋａｎａ」および「１−２−３」とを受け付け、「住所」属性の文字列を部分文字列に分割する。【００６７】
そして、証明装置１は、検証装置２によって生成されたランダム値（乱数）を用いて、部分文字列「ｋａｗａ」、部分文字列「ｋａｎａ」、部分文字列「１−２−３」のそれぞれのコミットメントを生成する。【００６８】
そして、証明装置１は、部分文字列「ｋａｗａ」のコミットメントについて積の知識の証明を行う。証明装置１は、部分文字列「ｋａｎａ」のコミットメントについて積の知識の証明を行う。証明装置１は、部分文字列「１−２−３」のコミットメントについて積の知識の証明を行う。【００６９】
そして、証明装置１は、各部分文字列の結合文字列と「住所」属性の文字列の署名とが対応することの結合の証明を行う。すなわち、証明装置１は、開示部分の部分文字列「ｋａｎａ」および非開示部分の部分文字列「ｋａｗａ」、「１−２−３」のそれぞれのコミットメントを組み合わせることにより、「住所」属性の文字列の署名になることを証明する。【００７０】
そして、証明装置１は、各部分文字列のコミットメントを用いて、各部分文字列の長さを証明する。【００７１】
そして、証明装置１は、検証用情報を生成し、生成した検証用情報および開示部分の部分文字列「ｋａｎａ」そのものを検証装置２へ送信する。なお、検証用情報には、各部分文字列のコミットメントと、コミットメントを生成する際に用いられた乱数および文字列の長さと、積の知識であることの証明、結合の証明および長さの証明がされたことを示す証明情報とが含まれる。加えて、検証用情報には、「住所」属性の文字列の署名が含まれる。【００７２】
そして、検証装置２は、検証用情報を用いて、積の知識の証明、結合の証明および長さの証明の正当性を検証する。そして、検証装置２は、検証用情報を用いて、開示部分の部分文字列を検証する。【００７３】
これにより、証明装置１は、給与証明書について、「住所」属性に対する文字列そのものではなく、「住所」属性に対する文字列の一部の部分文字列を隠すことができるようになり、検証装置２に対して柔軟な情報開示を行うことができる。言い換えれば、証明装置１は、属性情報として例えば住所が記載された電子署名付きの証明書について、住所全体でなく、住所の一部を提示しつつも、提示した一部の情報が電子署名付きの証明書により保証されるような開示制御を実現できる。【００７４】
なお、上記実施例では、証明装置１は、属性に対する文字列を非開示部分の文字列と開示部分の文字列とに３つに分割する場合を説明したがこれに限定されない。証明装置１は、属性に対する文字列を非開示部分の文字列と開示部分の文字列とに２つに分割する場合であっても良く、３つより大きく分割する場合であっても良い。【００７５】
また、上記実施例では、証明装置１は、証明書２１０内の１つの属性に対する文字列の一部の部分文字列を隠す場合について説明したが、これに限定されない。証明装置１は、証明書２１０内の複数の属性に対するそれぞれの文字列の一部の部分文字列を隠す場合についても適用できる。かかる場合には、証明装置１は、属性ごとに、実施例に係る検証処理を実行すれば良い。これにより、証明装置１は、複数の属性について隠したい部分を隠すことができるので、検証装置２に対してさらに柔軟な情報開示を行うことができる。【００７６】
また、上記実施例では、検証装置２が乱数（ランダム値）を生成する場合を説明したが、これに限定されない。証明装置１が、検証装置２の代わりに乱数（ランダム値）を生成する場合であっても良い。かかる場合には、証明装置１は、所定の属性に対する文字列を、開示部分および非開示部分の部分文字列に分割した後に、乱数（ランダム値）を生成すれば良い。一例として、証明装置１は、乱数（ランダム値）を生成し、生成した乱数（ランダム値）とハッシュ関数とを用いて、チャレンジ乱数を生成する。これにより、証明装置１は、チャレンジ乱数を乱数（ランダム値）とすることで、乱数（ランダム値）をコミットすることができる。すなわち、生成したチャレンジ乱数は、証明装置１が変更することができない乱数（ランダム値）とすることができる。そして、証明装置１は、生成した乱数（ランダム値）を用いて、開示部分および非開示部分の部分文字列それぞれのコミットミントを生成すれば良い。【００７７】
［実施例の効果］
上記実施例によれば、検証システム９は、証明装置１および検証装置２により署名付きの証明書情報を検証する。証明装置１は、証明書情報を受信すると、ユーザによる指定に応じて、受信した証明書情報のうち、公開情報および秘匿情報を特定する。証明装置１は、特定した公開情報および秘匿情報をそれぞれコミットするためのコミットメントを生成する。証明装置１は、生成したそれぞれのコミットメントの積が証明書情報の署名に対応することを示す証明情報およびコミットメントを含む、証明書情報の検証に用いる検証用情報を生成する。証明装置１は、生成した検証用情報および公開情報を検証装置２に送信する。かかる構成によれば、検証システム９は、署名が付された証明書について、柔軟な開示情報で検証することが可能となる。【００７８】
また、上記実施例によれば、証明装置１は、公開情報のコミットメントの値と非公開情報のコミットメントの値との積が証明書情報の署名の値と一致することを証明する。証明装置１は、証明した結果を示す証明情報を含んで検証用情報を生成する。かかる構成によれば、証明装置１は、一部の情報を非公開にしたまま証明書情報の正当性を証明することで、ゼロ知識証明技術を利用し、証明書情報を検証することが可能となる。【００７９】
また、上記実施例によれば、証明装置１は、証明書情報に含まれる複数の属性のうち所定の属性に対する文字列について、公開情報の部分文字列および秘匿情報の部分文字列を特定する。かかる構成によれば、証明装置１は、属性に対する文字列の一部の文字列を非公開にしたまま証明書情報の正当性を証明することで、ゼロ知識証明技術を利用し、証明書情報を検証することが可能となる。【００８０】
また、上記実施例によれば、証明装置１は、検証装置２によって生成される乱数を用いて公開情報および非公開情報のコミットメントを生成する。証明装置１は、乱数を含んで検証用情報を生成する。かかる構成によれば、証明装置１は、検証装置２によってコミットされた、証明装置１側で変更することができない乱数を用いてコミットメントを生成し、ゼロ知識証明を行うことができる。この結果、証明装置１は、生成したコミットメントおよび乱数を含む検証用情報を検証装置２に送信することで、検証装置２が、検証用情報と公開情報を用いてゼロ知識証明を検証できる。【００８１】
また、上記実施例によれば、証明装置１は、自装置によって生成される第１の乱数とハッシュ関数とを用いて第２の乱数を生成し、第２の乱数を用いて公開情報および非公開情報のコミットメントを生成する。証明装置１は、第２の乱数を含んで検証用情報を生成する。かかる構成によれば、証明装置１は、自装置によってコミットした乱数を用いてコミットメントを生成し、ゼロ知識証明を行うことができる。この結果、証明装置１は、生成したコミットメントおよび乱数を含む検証用情報を検証装置２に送信することで、検証装置２が、検証用情報と公開情報を用いてゼロ知識証明を検証できる。【００８２】
［プログラム等］
なお、図示した証明装置１の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、証明装置１の分散・統合の具体的態様は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、乱数受信部１４とコミットメント生成部１５とを１個の部として統合しても良い。一方、検証用情報生成部１６を、検証装置２によって検証される検証対象である証明情報を生成する第１の生成部と、証明情報を含む検証用情報を生成する第２の生成部とに分散しても良い。また、証明装置１の記憶部２０を証明装置１の外部装置としてネットワーク経由で接続するようにしても良い。【００８３】
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することによって実現することができる。そこで、以下では、図２に示した証明装置１と同様の機能を実現する証明プログラムを実行するコンピュータの一例を説明する。図７は、証明プログラムを実行するコンピュータの一例を示す図である。【００８４】
図７に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ（Central  Processing  Unit）２０３と、ユーザからのデータの入力を受け付ける入力装置２１５と、表示装置２０９を制御する表示制御部２０７を有する。また、コンピュータ２００は、記憶媒体からプログラム等を読取るドライブ装置２１３と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部２１７とを有する。また、コンピュータ２００は、各種情報を一時記憶するメモリ２０１と、ＨＤＤ（Hard  Disk  Drive）２０５を有する。そして、メモリ２０１、ＣＰＵ２０３、ＨＤＤ２０５、表示制御部２０７、ドライブ装置２１３、入力装置２１５、通信制御部２１７は、バス２１９で接続されている。【００８５】
ドライブ装置２１３は、例えばリムーバブルディスク２１１用の装置である。ＨＤＤ２０５は、証明プログラム２０５ａ及び証明処理関連情報２０５ｂを記憶する。【００８６】
ＣＰＵ２０３は、証明プログラム２０５ａを読み出して、メモリ２０１に展開する。証明プログラム２０５ａは、証明プロセスとして機能する。【００８７】
例えば、証明プロセスは、制御部１０の各機能部に対応する。証明処理関連情報２０５ｂは、証明書２１０などに対応する。【００８８】
なお、証明プログラム２０５ａについては、必ずしも最初からＨＤＤ２０５に記憶させておかなくても良い。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、ＤＶＤ（Digital  Versatile  Disk）、光磁気ディスク、ＩＣ（Integrated  Circuit）カード等の「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ２００がこれらから証明プログラム２０５ａを読み出して実行するようにしても良い。
【符号の説明】
【００８９】
１  証明装置
２  検証装置
３  発行機関
５  ネットワーク
９  検証システム
１０制御部
１１  証明書受信部
１２  開示／非開示受付部
１３  文字列分割部
１４  乱数受信部
１５  コミットメント生成部
１６  検証用情報生成部
１７  検証用情報送信部
２０  記憶部
２１０  証明書
３０  ユーザインタフェース部
２１  乱数生成送信部
２２  検証用情報受信部
２３  検証部
３１  証明書生成部
３２  証明書送信部
【図１】
2020261396.tif 000003
【図２】
2020261396.tif 000004
【図３】
2020261396.tif 000005
【図４】
2020261396.tif 000006
【図５】
2020261396.tif 000007
【図６】
2020261396.tif 000008
【図７】
2020261396.tif 000009
【図８】
2020261396.tif 000010
【国際調査報告】
2020261396.tif 000011
2020261396.tif 000012
2020261396.tif 000013
2020261396.tif 000014
2020261396.tif 000015
2020261396.tif 000016