(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-01
(45)【発行日】2023-05-12
(54)【発明の名称】検証方法、検証システム及び証明プログラム
(51)【国際特許分類】
H04L 9/32 20060101AFI20230502BHJP
【FI】
H04L9/32 200C
(21)【出願番号】P 2021528714
(86)(22)【出願日】2019-06-25
(86)【国際出願番号】 JP2019025224
(87)【国際公開番号】W WO2020261396
(87)【国際公開日】2020-12-30
【審査請求日】2021-07-29
【前置審査】
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】清水 俊也
(72)【発明者】
【氏名】坂本 拓也
【審査官】中里 裕正
(56)【参考文献】
【文献】特開2002-215027(JP,A)
【文献】特開2005-051734(JP,A)
【文献】国際公開第2011/007697(WO,A1)
【文献】CAMENISCH, J. and GROβ, T.,Efficient Attributes for Anonymous Credentials,Proceedings of the 15th ACM conference on Computer and communications security,2008年,pp.345-356
【文献】CAMENISCH, J. et al.,Composable & Modular Anonymous Credentials: Definitions and Practical Constructions,Cryptology ePrint Archive,Report 2015/580,[online],2015年,pp.1-43,URL:https://eprint.iacr.org/2015/580
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
証明装置および検証装置により署名が付された証明書情報を検証する検証方法であって、
前記証明装置は、
前記証明書情報を受信すると、ユーザによる指定に応じて、受信した前記証明書情報に含まれる複数の属性のうちの所定の属性に対する文字列について公開情報および秘匿情報を特定し、
該特定した前記公開情報および前記秘匿情報をそれぞれコミットするためのコミットメントを生成し、
該生成したそれぞれのコミットメントの結合が前記証明書情報に含まれる前記所定の属性の前記署名に対応することを示す証明情報
であって前記公開情報のコミットメントの値と前記秘匿情報のコミットメントの値との積が前記証明書情報の前記署名の値と一致することを証明して得られた結果を示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成し、
該生成した前記検証用情報および前記公開情報を前記検証装置に送信し、
前記検証装置は、
前記検証用情報に基づいて、前記公開情報の検証を行う
処理をコンピュータが実行することを特徴とする検証方法。
【請求項2】
前記公開情報および前記秘匿情報を特定する処理は、前記証明書情報に含まれる複数の属性のうち所定の属性に対する文字列について、前記公開情報の部分文字列および前記秘匿情報の部分文字列を特定する
ことを特徴とする請求項1に記載の検証方法。
【請求項3】
前記コミットメントを生成する処理は、前記検証装置によって生成される乱数を用いて前記公開情報および前記秘匿情報のコミットメントを生成し、
前記検証用情報を生成する処理は、前記乱数を含んで前記検証用情報を生成する
ことを特徴とする請求項1に記載の検証方法。
【請求項4】
前記コミットメントを生成する処理は、自装置によって生成される第1の乱数とハッシュ関数とを用いて第2の乱数を生成し、前記第2の乱数を用いて前記公開情報および前記秘匿情報のコミットメントを生成し、
前記検証用情報を生成する処理は、前記第2の乱数を含んで前記検証用情報を生成する
ことを特徴とする請求項1に記載の検証方法。
【請求項5】
証明装置と、
検証装置と、を有し、
前記証明装置は、
署名が付された証明書情報を受信すると、ユーザによる指定に応じて、受信した前記証明書情報に含まれる複数の属性のうちの所定の属性に対する文字列について公開情報および秘匿情報を特定する特定部と、
前記特定部によって特定された前記公開情報および前記秘匿情報をそれぞれコミットするためのコミットメントを生成する第1の生成部と、
前記第1の生成部によって生成されたそれぞれのコミットメントの結合が前記証明書情報に含まれる前記所定の属性の前記署名に対応することを示す証明情報
であって前記公開情報のコミットメントの値と前記秘匿情報のコミットメントの値との積が前記証明書情報の前記署名の値と一致することを証明して得られた結果を示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成する第2の生成部と、
前記第2の生成部によって生成された前記検証用情報および前記公開情報を前記検証装置に送信する送信部と、を有し、
前記検証装置は、
前記検証用情報に基づいて、前記公開情報の検証を行う検証部
を有することを特徴とする検証システム。
【請求項6】
署名が付された証明書情報を受信すると、ユーザによる指定に応じて、受信した前記証明書情報に含まれる複数の属性のうちの所定の属性に対する文字列について公開情報および秘匿情報を特定し、
該特定した前記公開情報および前記秘匿情報をそれぞれコミットするためのコミットメントを生成し、
該生成したそれぞれのコミットメントの結合が前記証明書情報に含まれる前記所定の属性の前記署名に対応することを示す証明情報
であって前記公開情報のコミットメントの値と前記秘匿情報のコミットメントの値との積が前記証明書情報の前記署名の値と一致することを証明して得られた結果を示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成し、
該生成した前記検証用情報および前記公開情報を検証装置に送信する、
処理をコンピュータに実行させることを特徴とする証明プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、検証方法等に関する。
【背景技術】
【0002】
近年、個人の信用情報が電子的に管理されつつある。例えば、ブロックチェーンを用いた個人の信用情報の管理として、Hyperledger Indy(登録商標)がある。Hyperledger Indyでは、個人は、信頼された機関から発行された電子署名付きの証明書を持ち、この証明書を提示することにより、個人の信用情報を提示することができる。提示先では、証明書を発行した機関の公開鍵をブロックチェーンから探索して、公開鍵に対応した秘密鍵で署名がなされているかを検証することで、証明書の正当性を検証する。
【0003】
ところが、個人は、提示先に対して、開示する必要のない情報を開示したくない場合がある。しかしながら、電子署名は証明書に付されているので、通常は、証明書の全てを開示しないと、証明書の正当性を検証できない。
【0004】
そこで、ゼロ知識証明の技術を用いて、証明書の一部の情報を秘匿して証明書の正当性を検証する技術が開示されている。ゼロ知識証明とは、証明者が「命題が真である」こと以外の知識を検証者に与えることなく、「命題が真である」ことを検証者に証明する手法である(例えば、特許文献1参照)。例えば、秘密情報sに対して、コミットメント演算を施し、コミットメントcを生成し、証明者がcの秘密情報sを「知っている」ことを検証者に確認させる(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2016-208107号公報
【文献】特開平11-249560号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、電子署名が付された証明書について、柔軟な開示情報で検証することが難しいという問題がある。例えば、従来の技術では、ゼロ知識証明の技術を用いて、証明書の一部の属性に対する情報を隠して開示する場合、証明書の正当性を検証することができる。ところが、ゼロ知識証明の技術を用いても、証明書の一部の属性に対する文字列の一部を隠して開示する場合、証明書の正当性を検証することが難しい。一例として、証明書に住所の属性があるとする。証明書に「住所:kanagawakawasaki・・・」とあるときに、「住所:kanagawa□□□・・・」のように「kawasaki」を隠して開示する場合、証明書の正当性を検証することが難しい。
【0007】
1つの側面では、本発明は、電子署名が付された証明書について、柔軟な開示情報で検証することを目的とする。
【課題を解決するための手段】
【0008】
一態様の検証方法において、検証方法は、証明装置および検証装置により証明書情報を検証する。前記証明装置は、前記証明書情報を受信すると、ユーザによる指定に応じて、受信した証明書情報のうち、公開情報および秘匿情報を特定し、該特定したそれぞれの情報をコミットするためのコミットメントを生成し、該生成したそれぞれのコミットメントの積が前記証明書情報の前記署名に対応することを示す証明情報および前記コミットメントを含む、前記証明書情報の検証に用いる検証用情報を生成し、該生成した前記検証用情報および前記公開情報を前記検証装置に送信する。前記検証装置は、前記公開情報を前記検証用情報に基づいて前記証明書の検証を行う。
【発明の効果】
【0009】
一つの態様によれば、電子署名が付された証明書について、柔軟な開示情報で検証することができる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、実施例に係る証明装置を含む検証システムの機能構成を示すブロック図である。
【
図2】
図2は、実施例に係る証明装置の機能構成を示す図である。
【
図3】
図3は、実施例に係る検証装置の機能構成を示す図ある。
【
図4】
図4は、実施例に係る発行機関の機能構成を示す図である。
【
図5】
図5は、実施例に係る検証処理のシーケンスの一例を示す図である。
【
図6】
図6は、実施例に係る検証処理を用いて証明書を検証する一例を示す図である。
【
図7】
図7は、証明プログラムを実行するコンピュータの一例を示す図である。
【
図8】
図8は、ゼロ知識証明技術を用いて証明書を検証する参考例を示す図である。
【発明を実施するための形態】
【0011】
以下に、本願の開示する検証方法、検証システム及び証明プログラムの実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
【実施例】
【0012】
まず、ゼロ知識証明技術を用いて証明書を検証する参考例を、
図8を参照して説明する。
図8は、ゼロ知識証明技術を用いて証明書を検証する参考例を示す図である。ゼロ知識証明技術とは、証明者が「命題が真である」こと以外の知識を検証者に与えることなく、「命題が真である」ことを検証者に証明する技術である。言い換えれば、かかる技術は、証明者が証明書の一部の属性の情報を隠したまま証明書の正当性(証明書を発行した発行元の電子署名が有効な証明書であること)を検証者に証明する技術のことをいう。証明する証明者は、証明書の発行を受けた個人である。
【0013】
図8に示すように、証明書が給与証明書であるとする。給与証明書は、信頼できる機関、例えば企業によって発行されたものである。ここでは、証明者は、給与証明書に含まれる複数の属性の中で「従業員No」属性と「住所」属性との情報を隠したいとする。
【0014】
検証先が、証明者に対して、企業、年収と年収の信用情報を要求する。すると、証明者は、電子署名が付された給与証明書の開示しない情報として「従業員No」属性の情報と、「住所」属性の情報とを選択する。そして、証明者は、選択した開示しない情報を隠したまま証明書の正当性を証明する。すなわち、証明者は、ゼロ知識証明を行う。そして、証明者は、証明情報を含む検証用情報を生成し、検証先へ送信する。そして、検証先は、検証用情報を用いて、「従業員No」属性の情報と、「住所」属性の情報とが隠れたまま、証明書の正当性を検証する。すなわち、検証先は、「従業員No」属性の情報と、「住所」属性の情報の知識がゼロであるが、証明書の署名が残りの属性の情報と隠れた2つの属性の情報の署名であることを検証する。
【0015】
ところが、参考例では、ゼロ知識証明技術を用いても、証明書内の一部の属性に対する文字列の一部を隠して開示する場合、証明書の正当性を検証することが難しい。一例として、
図8で示す給与証明書に「住所:kanagawakawasaki・・・」があるときに、「住所:kanagawa□□□・・・」のように「kawasaki」を隠して開示する場合である。
【0016】
そこで、以降では、証明書の一部の属性に対する文字列の一部を隠して開示した場合であっても、証明書の正当性を検証することができる検証システムについて説明する。
【0017】
[実施例に係る検証システムの構成]
図1は、実施例に係る証明装置を含む検証システムの機能構成を示すブロック図である。検証システム9は、証明装置1と、検証装置2と、発行機関3とを有する。証明装置1と、検証装置2と、発行機関3とは、それぞれネットワーク5で接続される。
【0018】
発行機関3は、電子署名が付された証明書を、ネットワーク5を介して証明装置1に対して発行する。ここでいう発行機関3とは、電子証明書を発行する、信頼された機関のことをいう。発行機関3には、例えば、認証局(CA:Certification Authority)や企業などが含まれる。
【0019】
証明装置1は、証明書の一部の属性に対する文字列について、ゼロ知識証明技術を用いて、隠したい文字列のコミットメントと開示したい文字列のコミットメントとの結合が当該属性に対する文字列の署名に対応することを証明する。証明装置1は、それぞれのコミットメントおよび証明されたことを示す証明情報を含む、検証に用いられる情報(以降、「検証用情報」という)を検証装置2に送信するとともに、開示したい文字列そのものを検証装置2に送信する。
【0020】
検証装置2は、検証用情報および開示された文字列そのものに基づいて、証明書の正当性を検証する。すなわち、検証装置2は、属性に対する文字列に開示された文字列が含まれていることを検証する。つまり、属性に対する文字列全体は発行機関3によって署名されている。検証装置2は、開示された文字列そのものはわかるので、コミットメントや証明情報などの検証用情報から開示された文字列の検証ができれば、開示された文字列が属性に対する文字列に含まれていることを検証できる。この結果、検証装置2は、電子署名が付された証明書について、柔軟な開示情報で検証することが可能となる。
【0021】
[証明装置の機能構成]
図2は、実施例に係る証明装置の機能構成を示す図である。
図2に示すように、証明装置1は、制御部10、記憶部20およびユーザインタフェース部30を有する。
【0022】
制御部10は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部10は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路又はCPU(Central Processing Unit)やMPU(Micro Processing Unit)等の電子回路に対応する。さらに、制御部10は、証明書受信部11、開示/非開示受付部12、文字列分割部13、乱数受信部14、コミットメント生成部15、検証用情報生成部16および検証用情報送信部17を有する。なお、開示/非開示受付部12および文字列分割部13は、特定部の一例である。コミットメント生成部15は、第1の生成部の一例である。検証用情報生成部16は、第2の生成部の一例である。検証用情報送信部17は、送信部の一例である。
【0023】
記憶部20は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。さらに、記憶部20は、証明書210を記憶する。
【0024】
ユーザインタフェース部30は、ユーザの入出力のインタフェースを示す。ユーザインタフェース部30は、例えば、入力のインタフェースとして、キーボード、マウスやタッチパネルを用いることができる。さらに、ユーザインタフェース部30は、音声で入力を受け付けるマイクなどであっても良い。また、ユーザインタフェース部30は、例えば、出力のインタフェースとして、各種の情報を表示するディスプレイを用いることができる。さらに、ユーザインタフェース部30は、各種の情報を音声で出力するスピーカなどであっても良い。
【0025】
証明書受信部11は、発行機関3から署名付きの証明書210を受信する。署名には、例えば、証明書210に含まれる属性ごとに、各属性の文字列に対するコミットメントを示す署名が含まれる。また、証明書受信部11は、受信した証明書210および各属性の文字列に対するコミットメントを記憶部20に格納する。
【0026】
開示/非開示受付部12は、ユーザによる指定に応じて、受信した証明書210の情報のうち、開示部分および非開示部分(秘匿部分)を受け付ける。例えば、開示/非開示受付部12は、ユーザインタフェース部30を介して、証明書210の情報に含まれる複数の属性のうち所定の属性に対する文字列について、開示したい開示部分(公開情報)、隠したい非開示部分(秘匿情報)を特定する。
【0027】
文字列分割部13は、証明書210の所定の属性に対する文字列を、特定した開示部分の部分文字列および特定した非開示部分の部分文字列に分割する。
【0028】
乱数受信部14は、検証装置2から乱数を受信する。乱数は、証明装置1側で変更することができないランダム値として用いられる。なお、乱数は、ゼロ知識証明における、チャレンジに相当する。
【0029】
コミットメント生成部15は、開示部分の部分文字列および非開示部分の部分文字列のそれぞれのコミットメントを生成する。
【0030】
例えば、コミットメント生成部15は、文字列がASCIIコードでエンコードされている場合にはビッグエンディアンによって256^N以下の数値として解釈する。Nは、バイト数(文字数)である。一例として、Mが“ab”であるとする。Mは、ASCIIコードで「0x61 0x62」である。コミットメント生成部15は、Mを(6×16+1)×256^1+(6×16+2)×256^0=24930(10進数)と解釈する。なお、「^」はべき乗である。なお、ASCIIコード以外のコードでエンコードされている場合にはその文字コードのエントロピーに用いて数値として解釈することができる。
【0031】
そして、コミットメント生成部15は、分割された部分文字列ごとにビッグエンディアンによって数値を求める。一例として、所定の属性に対する文字列MがM_preとSとM_sufとに分割されたとする。M_pre、M_sufが非開示部分の部分文字列であり、Sが開示部分の部分文字列であるとする。すると、コミットメント生成部15は、文字列MをM_pre×256^α+S×256^β+M_sufと計算して、Mの文字列を数値として求める。βは、M_sufの文字数である。αは、Sの文字数とM_sufの文字数(β)を加算した文字数である。
【0032】
そして、コミットメント生成部15は、非開示部分のM_preの部分文字列に対して、以下のようにコミットメントを生成する。なお、g、hは、適当な群の元とする。r_11、r_12、r_13は、それぞれ乱数受信部14によって受信された乱数を示す。
C_11=g^(M_pre)×h^(r_11)・・・式(1)
C_12=g^(256^α)×h^(r_12)・・・式(2)
C_13=g^(M_pre×256^α)×h^(r_13)・・・式(3)
【0033】
C_11は、M_preに対するコミットメントである。C_11は、C_12と組み合わせることにより、C_13に含まれるM_preの文字数がαであることを証明するために用いられる。C_12は、256^αに対するコミットメントである。C_12は、C_11と組み合わせることにより、C_13に含まれるM_preの文字数がαであることを証明するために用いられる。C_13は、M_pre×256^αに対するコミットメントである。C_13は、C_23とC_31と組み合わせることにより、C_13とC_23とC_31がコミットしている数値を足し合わせたものが文字列Mに等しいことを証明するために用いられる。
【0034】
そして、コミットメント生成部15は、開示部分のSの部分文字列に対して、以下のようにコミットメントを生成する。なお、g、hは、M_preのコミットメントの生成で用いられたg、hと同じ元である。r_21、r_22、r_23は、それぞれ乱数受信部14によって受信された乱数を示す。
C_21=g^(S)×h^(r_21)・・・式(4)
C_22=g^(256^β)×h^(r_22)・・・式(5)
C_23=g^(S×256^β)×h^(r_23)・・・式(6)
【0035】
C_21は、Sの部分文字列に対するコミットメントである。C_21は、C_22と組み合わせることにより、C_23に含まれるSの文字数がβであることを証明するために用いられる。C_22は、256^βに対するコミットメントである。C_22は、C_21と組み合わせることにより、C_23に含まれるSの文字数がβであることを証明するために用いられる。C_23は、S×256^βに対するコミットメントである。C_23は、C_13とC_31と組み合わせることにより、C_13とC_23とC_31がコミットしている数値を足し合わせたものが文字列Mに等しいことを証明するために用いられる。
【0036】
そして、コミットメント生成部15は、非開示部分のM_sufの部分文字列に対して、以下のようにコミットメントを生成する。なお、g、hは、M_preおよびSのコミットメントの生成で用いられたg、hと同じ元である。r_31は、乱数受信部14によって受信された乱数を示す。
C_31=g^(M_suf)×h^(r_31)・・・式(7)
【0037】
C_31は、M_sufの部分文字列に対するコミットメントである。C_31は、C_13とC_23と組み合わせることにより、C_13とC_23とC_31がコミットしている数値を足し合わせたものが文字列Mに等しいことを証明するために用いられる。
【0038】
検証用情報生成部16は、検証装置2によって検証に用いられる検証用情報を生成する。
【0039】
例えば、検証用情報生成部16は、コミットメントに対する知識(文字列)を検証装置2に提示するために、C_13がC_11とC_12の積の知識であることの証明を行う。また、検証用情報生成部16は、コミットメントに対する知識(文字列)を検証装置2に提示するために、C_23がC_21とC_22の積の知識であることの証明を行う。なお、積の知識であることの証明は、ゼロ知識証明の手法で実現でき、例えば、「Camenish, J., Lysyanskaya, A., “A Signature Scheme with Efficient Protocols”, in SCN’04,pp.268-289,2002」の文献の技術を用いれば良い。
【0040】
また、検証用情報生成部16は、分割した開示部分および非開示部分のそれぞれの部分文字列についてのコミットメントの結合が属性の文字列に対するコミットメント(署名)に対応することを証明する。すなわち、検証用情報生成部16は、分割した開示部分および非開示部分のそれぞれの部分文字列についてのコミットメントを組み合わせることにより、属性の文字列のコミットメント(署名)になることを証明する。一例として、検証用情報生成部16は、M_pre、S、M_sufを結合したものが該当する属性の文字列Mに対応することを証明する。さらに具体的には、Mが該当する属性の文字列、Cがその署名値であるとする。検証用情報生成部16は、該当する属性の文字列M自身に対する署名値 C=g^M×h^rについてC_13×C_23×C_31と同じgの冪を持つことを証明する。かかる証明を結合の証明と呼ぶ。なお、結合の証明は、ゼロ知識証明の手法で実現でき、例えば、「Camenish, J., Lysyanskaya, A., “A Signature Scheme with Efficient Protocols”, in SCN’04,pp.268-289,2002」の文献の技術を用いれば良い。
【0041】
また、検証用情報生成部16は、分割した開示部分および非開示部分のそれぞれの部分文字列のコミットメントを用いて、それぞれの部分文字列に対する長さを証明する。一例として、検証用情報生成部16は、分割した開示部分および非開示部分のそれぞれの部分文字列の長さが一定以上または一定以下であることを証明する。なお、長さの証明は、例えば、「F.Boudot, “Efficient Proofs that a committed number lies in an interval”」の文献の技術を用いれば良い。
【0042】
検証用情報送信部17は、検証用情報を検証装置2に対して送信する。検証用情報には、それぞれのコミットメントと、コミットメントを生成する際に用いられた乱数および部分文字列の長さと、積の知識であることの証明、結合の証明および長さの証明がされたことを示す証明情報と、属性の文字列に対するコミットメント(署名)とが含まれる。
【0043】
また、検証用情報送信部17は、開示部分の部分文字列そのものを検証装置2に対して送信する。
【0044】
[検証装置の機能構成]
図3は、実施例に係る検証装置の機能構成を示す図である。
図3に示すように、検証装置2は、図示しない制御部および記憶部を有する。制御部は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路又はCPU(Central Processing Unit)やMPU(Micro Processing Unit)等の電子回路に対応する。さらに、制御部は、乱数生成送信部21、検証用情報受信部22および検証部23を有する。記憶部は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。なお、検証部23は、検証部の一例である。
【0045】
乱数生成送信部21は、証明装置1からの乱数の生成要求に応じて、乱数を生成する。生成した乱数は、証明装置1が変更することができないランダム値として証明装置1で用いられる。また、乱数生成送信部21は、生成した乱数を要求元の証明装置1へ送信する。
【0046】
検証用情報受信部22は、証明装置1から検証用情報を受信する。また、検証用情報受信部22は、証明装置1から開示部分の文字列そのものを受信する。
【0047】
検証部23は、検証用情報を用いて、各種の証明の正当性を検証する。例えば、検証部23は、検証用情報を用いて、積の知識であることの証明の正当性を検証する。また、検証部23は、検証用情報を用いて、結合の証明の正当性を検証する。また、検証部23は、検証用情報を用いて、部分文字列の長さの証明の正当性を検証する。
【0048】
また、検証部23は、検証用情報および開示部分の部分文字列を用いて、属性の文字列に開示部分の部分文字列が含まれていることを検証する。一例として、検証部23は、コミットメントを生成する際に用いられた乱数r_23と、M_sufの文字数βを用いて、開示部分の部分文字列SのコミットメントC_23を検証する。なお、g、hは、証明装置1、検証装置2および発行機関3に共通して明示されている。
【0049】
[発行機関の機能構成]
図4は、実施例に係る発行機関の機能構成を示す図である。
図4に示すように、発行機関3は、図示しない制御部および記憶部を有する。制御部は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路又はCPU(Central Processing Unit)やMPU(Micro Processing Unit)等の電子回路に対応する。さらに、制御部は、証明書生成部31および証明書送信部32を有する。記憶部は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。
【0050】
証明書生成部31は、証明装置1からの要求に応じて、署名付きの証明書を生成する。証明書送信部32は、生成された署名付きの証明書を証明装置1に送信する。
【0051】
[検証処理のシーケンスの一例]
図5は、実施例に係る検証処理のシーケンスの一例を示す図である。なお、
図5では、発行機関3は、証明装置1から証明書の発行要求を受け付けたとする。
【0052】
図5に示すように、発行機関3では、証明書生成部31が、証明書の発行要求に応じて、署名付きの証明書を生成する(S11)。そして、証明書送信部32は、生成された署名付きの証明書を証明装置1に対して発行する(S12)。なお、ここでは、証明書に含まれる特定の属性の文字列mに対する署名がCであるとする。
【0053】
証明装置1では、証明書受信部11が、証明書を受信する。開示/非開示受付部12が、ユーザ(証明者)から証明書の中の特定の属性の文字列に関し、開示部分と非開示部分の部分文字列を受け付ける(S13)。そして、文字列分割部13は、文字列mをm_pre、S、m_sufの部分文字列に分割する(S14)。ここでは、Sが開示部分の部分文字列であり、m_pre、m_sufが非開示部分の部分文字列であるとする。そして、乱数受信部14は、検証装置2に対してランダム値を要求する(S15)。
【0054】
検証装置2では、ランダム値の要求を受信した乱数生成送信部21が、ランダム値を生成し、要求元の証明装置1へ送信する(S16)。ここでいうランダム値は、乱数と同義である。かかる乱数は、検証装置2以外で変更されないランダム値として証明装置1側で用いられる。
【0055】
証明装置1では、乱数受信部14が、ランダム値を受信する。コミットメント生成部15が、各部分文字列m_pre、S、m_sufに対するコミットメントを生成する(S17)。一例として、コミットメント生成部15は、部分文字列m_preに対して式(1)~式(3)のコミットメントを生成する。コミットメント生成部15は、部分文字列Sに対して式(4)~式(6)のコミットメントを生成する。コミットメント生成部15は、部分文字列m_sufに対して式(7)のコミットメントを生成する。
【0056】
続いて、証明装置1では、検証用情報生成部16が、各部分文字列のコミットメントに対する積の証明を行う(S18)。一例として、検証用情報生成部16は、部分文字列M_preのコミットメントC_13がC_11とC_12の積の知識であることの証明を行う。検証用情報生成部16は、部分文字列SのコミットメントC_23がC_21とC_22の積の知識であることの証明を行う。
【0057】
続いて、証明装置1では、検証用情報生成部16が、各部分文字列の結合文字列と文字列mの署名Cとが対応することの結合の証明を行う(S19)。一例として、検証用情報生成部16は、文字列m自身に対する署名値 C=g^m×h^r についてC_13×C_23×C_31と同じgの冪を持つことを証明する。すなわち、検証用情報生成部16は、分割した開示部分および非開示部分のそれぞれの部分文字列についてのコミットメントを組み合わせることにより、属性の文字列mのコミットメントC(署名)になることを証明する。
【0058】
続いて、証明装置1では、検証用情報生成部16が、各部分文字列のコミットメントを用いて、各部分文字列の長さを証明する(S20)。
【0059】
そして、証明装置1では、検証用情報生成部16が、検証用情報を生成する。検証用情報送信部17が、生成された検証用情報を検証装置2へ送信する(S21)。一例として、検証用情報には、各部分文字列のコミットメントと、コミットメントを生成する際に用いられた乱数および部分文字列の長さと、積の知識であることの証明、結合の証明および長さの証明がされたことを示す証明情報とが含まれる。加えて、検証用情報には、属性の文字列mに対するコミットメントC(署名)が含まれる。
【0060】
検証装置2では、検証部23が、検証用情報を用いて、積の証明の正当性を検証する(S22)。検証部23は、検証用情報を用いて、結合の証明の正当性を検証する(S23)。また、検証部23は、検証用情報を用いて、長さの証明の正当性を検証する(S24)。
【0061】
続いて、証明装置1では、検証用情報送信部17が、開示部分の部分文字列そのものを検証装置2に対して送信する(S25)。ここでは、検証用情報送信部17は、開示部分の部分文字列Sを検証装置2に送信する。
【0062】
検証装置2では、検証部23が、開示部分の部分文字列を検証する(S26)。一例として、検証部23は、開示部分の部分文字列SのコミットメントC_23を生成する際に用いられた乱数r_23と、M_sufの文字数βを用いて、開示部分の部分文字列SのコミットメントC_23を検証する。
【0063】
これにより、証明装置1は、証明書210について、属性に対する文字列そのものではなく、属性に対する文字列の一部を隠すことができるようになり、検証装置2に対して柔軟な情報開示を行うことができる。つまり、証明装置1は、属性に対する文字列について、文字列を開示する部分文字列と秘匿する部分文字列とに分割する。そして、証明装置1は、分割されたそれぞれの部分文字列についてのゼロ知識証明と、それぞれの部分文字列を組み合わせた全体の文字列についてのゼロ知識証明との2つの知識証明を行った後に、開示する部分の部分文字列を開示する。これにより、証明装置1は、属性に対する文字列の一部を隠しつつもその他の情報についての提示を可能にする。
【0064】
[証明書の検証例]
ここで、実施例に係る検証処理を用いて署名付きの証明書を検証する一例を、
図6を参照して説明する。
図6は、実施例に係る検証処理を用いて証明書を検証する一例を示す図である。ここでは、検証者である検証装置2が、例えば、ローン会社のサーバであるとする。そして、ローン会社がユーザに企業、年収と年収の信用情報を要求する場合とする。ユーザが、証明装置1の証明者である。
【0065】
図6に示すように、証明書は、署名付きの給与証明書である場合とする。給与証明書は、証明装置1の要求に応じて、企業などの発行機関3によって発行されたものである。ここでは、証明者が、給与証明書に含まれる「住所」属性に対する文字列の一部の部分文字列を開示しない情報とする場合である。
【0066】
ここでは、給与証明書に含まれる「住所」属性の文字列は、「kanakawa1-2-3」である。証明装置1は、「住所」属性の文字列に関し、ユーザ(証明者)から開示部分の部分文字列「kawa」と、非開示部分の部分文字列「kana」および「1-2-3」とを受け付け、「住所」属性の文字列を部分文字列に分割する。
【0067】
そして、証明装置1は、検証装置2によって生成されたランダム値(乱数)を用いて、部分文字列「kawa」、部分文字列「kana」、部分文字列「1-2-3」のそれぞれのコミットメントを生成する。
【0068】
そして、証明装置1は、部分文字列「kawa」のコミットメントについて積の知識の証明を行う。証明装置1は、部分文字列「kana」のコミットメントについて積の知識の証明を行う。証明装置1は、部分文字列「1-2-3」のコミットメントについて積の知識の証明を行う。
【0069】
そして、証明装置1は、各部分文字列の結合文字列と「住所」属性の文字列の署名とが対応することの結合の証明を行う。すなわち、証明装置1は、開示部分の部分文字列「kana」および非開示部分の部分文字列「kawa」、「1-2-3」のそれぞれのコミットメントを組み合わせることにより、「住所」属性の文字列の署名になることを証明する。
【0070】
そして、証明装置1は、各部分文字列のコミットメントを用いて、各部分文字列の長さを証明する。
【0071】
そして、証明装置1は、検証用情報を生成し、生成した検証用情報および開示部分の部分文字列「kana」そのものを検証装置2へ送信する。なお、検証用情報には、各部分文字列のコミットメントと、コミットメントを生成する際に用いられた乱数および文字列の長さと、積の知識であることの証明、結合の証明および長さの証明がされたことを示す証明情報とが含まれる。加えて、検証用情報には、「住所」属性の文字列の署名が含まれる。
【0072】
そして、検証装置2は、検証用情報を用いて、積の知識の証明、結合の証明および長さの証明の正当性を検証する。そして、検証装置2は、検証用情報を用いて、開示部分の部分文字列を検証する。
【0073】
これにより、証明装置1は、給与証明書について、「住所」属性に対する文字列そのものではなく、「住所」属性に対する文字列の一部の部分文字列を隠すことができるようになり、検証装置2に対して柔軟な情報開示を行うことができる。言い換えれば、証明装置1は、属性情報として例えば住所が記載された電子署名付きの証明書について、住所全体でなく、住所の一部を提示しつつも、提示した一部の情報が電子署名付きの証明書により保証されるような開示制御を実現できる。
【0074】
なお、上記実施例では、証明装置1は、属性に対する文字列を非開示部分の文字列と開示部分の文字列とに3つに分割する場合を説明したがこれに限定されない。証明装置1は、属性に対する文字列を非開示部分の文字列と開示部分の文字列とに2つに分割する場合であっても良く、3つより大きく分割する場合であっても良い。
【0075】
また、上記実施例では、証明装置1は、証明書210内の1つの属性に対する文字列の一部の部分文字列を隠す場合について説明したが、これに限定されない。証明装置1は、証明書210内の複数の属性に対するそれぞれの文字列の一部の部分文字列を隠す場合についても適用できる。かかる場合には、証明装置1は、属性ごとに、実施例に係る検証処理を実行すれば良い。これにより、証明装置1は、複数の属性について隠したい部分を隠すことができるので、検証装置2に対してさらに柔軟な情報開示を行うことができる。
【0076】
また、上記実施例では、検証装置2が乱数(ランダム値)を生成する場合を説明したが、これに限定されない。証明装置1が、検証装置2の代わりに乱数(ランダム値)を生成する場合であっても良い。かかる場合には、証明装置1は、所定の属性に対する文字列を、開示部分および非開示部分の部分文字列に分割した後に、乱数(ランダム値)を生成すれば良い。一例として、証明装置1は、乱数(ランダム値)を生成し、生成した乱数(ランダム値)とハッシュ関数とを用いて、チャレンジ乱数を生成する。これにより、証明装置1は、チャレンジ乱数を乱数(ランダム値)とすることで、乱数(ランダム値)をコミットすることができる。すなわち、生成したチャレンジ乱数は、証明装置1が変更することができない乱数(ランダム値)とすることができる。そして、証明装置1は、生成した乱数(ランダム値)を用いて、開示部分および非開示部分の部分文字列それぞれのコミットミントを生成すれば良い。
【0077】
[実施例の効果]
上記実施例によれば、検証システム9は、証明装置1および検証装置2により署名付きの証明書情報を検証する。証明装置1は、証明書情報を受信すると、ユーザによる指定に応じて、受信した証明書情報のうち、公開情報および秘匿情報を特定する。証明装置1は、特定した公開情報および秘匿情報をそれぞれコミットするためのコミットメントを生成する。証明装置1は、生成したそれぞれのコミットメントの積が証明書情報の署名に対応することを示す証明情報およびコミットメントを含む、証明書情報の検証に用いる検証用情報を生成する。証明装置1は、生成した検証用情報および公開情報を検証装置2に送信する。かかる構成によれば、検証システム9は、署名が付された証明書について、柔軟な開示情報で検証することが可能となる。
【0078】
また、上記実施例によれば、証明装置1は、公開情報のコミットメントの値と非公開情報のコミットメントの値との積が証明書情報の署名の値と一致することを証明する。証明装置1は、証明した結果を示す証明情報を含んで検証用情報を生成する。かかる構成によれば、証明装置1は、一部の情報を非公開にしたまま証明書情報の正当性を証明することで、ゼロ知識証明技術を利用し、証明書情報を検証することが可能となる。
【0079】
また、上記実施例によれば、証明装置1は、証明書情報に含まれる複数の属性のうち所定の属性に対する文字列について、公開情報の部分文字列および秘匿情報の部分文字列を特定する。かかる構成によれば、証明装置1は、属性に対する文字列の一部の文字列を非公開にしたまま証明書情報の正当性を証明することで、ゼロ知識証明技術を利用し、証明書情報を検証することが可能となる。
【0080】
また、上記実施例によれば、証明装置1は、検証装置2によって生成される乱数を用いて公開情報および非公開情報のコミットメントを生成する。証明装置1は、乱数を含んで検証用情報を生成する。かかる構成によれば、証明装置1は、検証装置2によってコミットされた、証明装置1側で変更することができない乱数を用いてコミットメントを生成し、ゼロ知識証明を行うことができる。この結果、証明装置1は、生成したコミットメントおよび乱数を含む検証用情報を検証装置2に送信することで、検証装置2が、検証用情報と公開情報を用いてゼロ知識証明を検証できる。
【0081】
また、上記実施例によれば、証明装置1は、自装置によって生成される第1の乱数とハッシュ関数とを用いて第2の乱数を生成し、第2の乱数を用いて公開情報および非公開情報のコミットメントを生成する。証明装置1は、第2の乱数を含んで検証用情報を生成する。かかる構成によれば、証明装置1は、自装置によってコミットした乱数を用いてコミットメントを生成し、ゼロ知識証明を行うことができる。この結果、証明装置1は、生成したコミットメントおよび乱数を含む検証用情報を検証装置2に送信することで、検証装置2が、検証用情報と公開情報を用いてゼロ知識証明を検証できる。
【0082】
[プログラム等]
なお、図示した証明装置1の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、証明装置1の分散・統合の具体的態様は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、乱数受信部14とコミットメント生成部15とを1個の部として統合しても良い。一方、検証用情報生成部16を、検証装置2によって検証される検証対象である証明情報を生成する第1の生成部と、証明情報を含む検証用情報を生成する第2の生成部とに分散しても良い。また、証明装置1の記憶部20を証明装置1の外部装置としてネットワーク経由で接続するようにしても良い。
【0083】
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することによって実現することができる。そこで、以下では、
図2に示した証明装置1と同様の機能を実現する証明プログラムを実行するコンピュータの一例を説明する。
図7は、証明プログラムを実行するコンピュータの一例を示す図である。
【0084】
図7に示すように、コンピュータ200は、各種演算処理を実行するCPU(Central Processing Unit)203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209を制御する表示制御部207を有する。また、コンピュータ200は、記憶媒体からプログラム等を読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD(Hard Disk Drive)205を有する。そして、メモリ201、CPU203、HDD205、表示制御部207、ドライブ装置213、入力装置215、通信制御部217は、バス219で接続されている。
【0085】
ドライブ装置213は、例えばリムーバブルディスク211用の装置である。HDD205は、証明プログラム205a及び証明処理関連情報205bを記憶する。
【0086】
CPU203は、証明プログラム205aを読み出して、メモリ201に展開する。証明プログラム205aは、証明プロセスとして機能する。
【0087】
例えば、証明プロセスは、制御部10の各機能部に対応する。証明処理関連情報205bは、証明書210などに対応する。
【0088】
なお、証明プログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)、光磁気ディスク、IC(Integrated Circuit)カード等の「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらから証明プログラム205aを読み出して実行するようにしても良い。
【符号の説明】
【0089】
1 証明装置
2 検証装置
3 発行機関
5 ネットワーク
9 検証システム
10制御部
11 証明書受信部
12 開示/非開示受付部
13 文字列分割部
14 乱数受信部
15 コミットメント生成部
16 検証用情報生成部
17 検証用情報送信部
20 記憶部
210 証明書
30 ユーザインタフェース部
21 乱数生成送信部
22 検証用情報受信部
23 検証部
31 証明書生成部
32 証明書送信部