(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-26
(45)【発行日】2023-01-10
(54)【発明の名称】分散装置、秘匿演算装置、検証復元装置、分散システム、秘匿演算検証復元システム、及びプログラム
(51)【国際特許分類】
G09C 1/00 20060101AFI20221227BHJP
G06F 21/62 20130101ALI20221227BHJP
【FI】
G09C1/00 650Z
G06F21/62 318
(21)【出願番号】P 2018185931
(22)【出願日】2018-09-28
【審査請求日】2021-09-03
(73)【特許権者】
【識別番号】000125370
【氏名又は名称】学校法人東京理科大学
(74)【代理人】
【識別番号】100079049
【氏名又は名称】中島 淳
(74)【代理人】
【識別番号】100084995
【氏名又は名称】加藤 和詳
(74)【代理人】
【識別番号】100099025
【氏名又は名称】福田 浩志
(72)【発明者】
【氏名】岩村 惠市
【審査官】青木 重徳
(56)【参考文献】
【文献】特開2008-250931(JP,A)
【文献】荒木 俊則 ほか,秘密分散法を用いた3者秘密計算の有用性,情報処理,日本,一般社団法人情報処理学会,2018年09月15日, 第59巻 第10号 ,p. 886-892,安全なデータ活用を実現する秘密計算技術 3
【文献】神宮 武志 ほか,秘密分散法を用いた次数変化のない秘匿計算手法,情報処理学会 論文誌(ジャーナル)[online] ,日本,情報処理学会,2018年03月15日,Vol.59 No.3 ,p. 1038-1049
【文献】ムハンマド カマル アフマド アクマル アミヌディン ほか,秘密分散法を用いた四則演算の組み合わせに対して安全な次数変化のない秘匿計算,情報処理学会 論文誌(ジャーナル) [online] ,日本,情報処理学会,2018年09月15日,Vol.59 No.9 ,p. 1581-1595
【文献】濱田 浩気 ほか,3パーティ秘匿関数計算上のランダム置換プロトコル,コンピュータセキュリティシンポジウム2010 論文集 [第二分冊],日本,一般社団法人情報処理学会,2010年10月12日,Vol.2010 No.9,p. 561-566
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
G06F 21/62
(57)【特許請求の範囲】
【請求項1】
nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の前記分散値によって前記秘密情報を復元でき、k個未満では前記秘密情報を復元できない
秘密分散システム
であって、
第1の秘密情報に第1の乱数及び第2の乱数を作用させた第1の値を生成し、前記第1の乱数及び前記第1の秘密情報の少なくとも一方に第3の乱数を作用させた第2の値を生成する第1生成部を備えた
複数の分散装置
の各々と、
前記複数の分散装置の各々から得た、複数の前記第1の値と、複数の前記第2の値とを用いて、
複数の前記第1の秘密情報同士の演算結果に複数の前記第1の乱数同士の演算結果、及び第4の乱数を作用させた第3の値を生成し、
複数の前記第1の乱数同士又は前記第1の秘密情報同士の演算結果に第5の乱数を作用させた第4の値を生成する第2生成部を備えた秘匿演算装置と、
を含む秘密分散システム。
【請求項2】
前記秘匿演算装置は、前記第2生成部によって得られた前記第3の値及び前記第4の値の少なくとも一方が0である場合に第6の乱数を生成する第3生成部と、前記第6の乱数を秘匿加算する加算部と、を更に備える請求項1に記載の秘密分散システム。
【請求項3】
前記秘匿演算装置によって得られた、秘密情報に対して乱数を作用させて生成した第3の値から秘密情報と
前記第4の乱数に相当する値を排除する第1排除部と、
前記第1排除部による排除によって得られた
前記第1の乱数同士の演算結果が正しいか否かを判定する第1判定部と、を備え
た復元装置
を更に含む請求項1又は請求項2に記載の秘密分散システム。
【請求項4】
前記秘匿演算装置によって得られた、秘密情報に対して乱数を作用させて生成した第3の値から秘密情報と
前記第4の乱数に相当する値を排除する第2排除部と、
前記第2排除部による排除によって得られた
前記第1の乱数同士の演算結果であって、前記第3の値または
前記第4の値が0の場合に第6の乱数を含む
前記第1の乱数同士の演算結果が正しいか否かを判定する第2判定部と、を備え
た復元装置
を更に含む請求項1又は請求項2に記載の秘密分散システム。
【請求項5】
請求項3に記載の前記復元装置の前記第1排除部
から得られる値の演算結果が正しいと判定された場合、又は請求項4に記載の前記復元装置の前記第2排除部から得られる値
の演算結果が正しいと判定された場合に、前記第1の秘密情報同士の演算結果を得る復元部
を更に含む秘密分散システム。
【請求項6】
前記第1の乱数を前記第1の秘密情報の生成者以外が生成した乱数を用いて生成する第4生成部を含む分散装置、を備えた
請求項1に記載の秘密分散システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、分散装置、秘匿演算装置、検証復元装置、分散システム、秘匿演算検証復元システム、及びプログラムに関する。
【背景技術】
【0002】
近年、ビッグデータおよびIoT環境の進歩に伴い、個人に関する情報の活用が期待されている。ただし、個人情報の活用においては、個人情報が漏洩すると個人のプライバシーに影響を与える可能性がある。そのため、ビッグデータの利活用においては、ビッグデータを活用する技術と、個人に関する情報を守る技術とを両立させる必要がある。このような個人に関する情報を守る技術に対するアプローチとして、データを守りながら演算を行うことができる秘匿計算技術が研究されている。
【0003】
秘匿計算技術は大きく分けると、主に鍵を用いてデータを秘匿する準同型暗号と、鍵を用いずにデータを秘匿する秘密分散法を用いた手法がある。ただし、準同型暗号は一般的に計算量が多く、演算処理に多大な時間がかかるという問題がある。そのため、クラウドシステムへの適用に対しては、計算量が重い準同型暗号よりも、計算量が軽い秘密分散法を用いるというアプローチが検討されている。
【0004】
秘密分散法とはユーザが持っている秘密情報を複数の異なる値(以降、分散値)に変換し、分散する手法である。秘密分散法の1つであるShamirの(k,n)閾値秘密分散法(以下、「Shamir法」または「(k,n)Shamir法」)が知られている。
【0005】
また、秘密情報をL個に分割し、分散式の係数として含ませるランプ型秘密分散方式も知られている。ランプ型秘密分散方式によって、分散値の小型化が実現できる。
【0006】
秘密分散法に関する技術として、例えば、特許文献1には、データを秘匿しながら計算を行い計算結果の正当性を保証する秘匿計算システムが開示されている。
【0007】
また、特許文献2には、秘密分散によりデータを秘匿しつつ、乗算及び加算からなる式の計算を、計算結果の正当性を保ちながら行う秘匿積和結合システムが開示されている。
【0008】
また、特許文献3には、完全準同型暗号及び信頼できる第三者を利用せずに、集計対象データ及びその集計結果を秘匿した状態で集計装置に集計処理を実行させる技術が開示されている。
【0009】
また、秘密分散法の1つに、Shamir法を用いるTUS法がある。TUS法では、他の秘密分散法では実現できないn<2k-1において秘匿演算を実現することが特徴である。
【先行技術文献】
【特許文献】
【0010】
【文献】再公表2014-112548号公報
【文献】再公表2012-121333号公報
【文献】特開2013-205592号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
もっとも、TUS法では、秘匿乗算において乱数で秘匿化された秘密情報αaを一旦復号するために、秘密情報は0を含まず、乱数も0を含まないものである。ただし、秘匿乗算以外では0を含んでもよいものとされる。
【0012】
上記のTUS法の問題の一つに、秘密情報に0を含むことができず、減算を含む秘匿計算を繰り返せないという問題があった。また、計算結果の正当性を検証できないという問題もあった。
【0013】
本開示は、以上の事情を鑑みて成されたものであり、秘密情報に0を含んでいても、効率よく秘匿演算を繰り返すことに対応する分散装置、秘匿演算装置、検証復元装置、分散システム、秘匿演算検証復元システム、及びプログラムを提供することを目的とする。さらに、その計算結果を効率的に検証できる分散装置、秘匿演算装置、検証復元装置、分散システム、秘匿演算検証復元システム、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0014】
開示の技術は、一つの態様として、第1の発明に係る分散装置が、nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の前記分散値によって前記秘密情報を復元でき、k個未満では前記秘密情報を復元できないシステムにおいて、第1の秘密情報に第1の乱数及び第2の乱数を作用させた第1の値を生成し、前記第1の乱数及び前記第1の秘密情報の少なくとも一方に第3の乱数を作用させた第2の値を生成する第1生成部を備えることを特徴とする。
【0015】
開示の技術は、一つの態様として、第2の発明に係る秘匿演算装置が、nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の前記分散値によって前記秘密情報を復元でき、k個未満では前記秘密情報を復元できないシステムにおいて、第1の秘密情報に第1の乱数及び第2の乱数を作用させた複数の第1の値と、前記第1の乱数又は前記第1の秘密情報に第3の乱数を作用させた複数の第2の値とを用いて、前記複数の第1の秘密情報同士の演算結果に前記複数の第1の乱数同士の演算結果、及び第4の乱数を作用させた第3の値を生成し、前記複数の第1の乱数同士又は秘密情報同士の演算結果に第5の乱数を作用させた第4の値を生成する第2生成部を備えることを特徴とする。
【0016】
開示の技術は、一つの態様として、第2の発明に係る秘匿演算装置が、nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の前記分散値によって前記秘密情報を復元でき、k個未満では前記秘密情報を復元できないシステムにおいて、上記に記載の第2生成部によって得られた第3の値及び第4の値の少なくとも一方が0である場合に第6の乱数を生成する第3生成部と、前記第6の乱数を秘匿加算する加算部と、を更に備えることを特徴とする。
【0017】
開示の技術は、一つの態様として、第3の発明に係る検証復元装置が、nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の前記分散値によって前記秘密情報を復元でき、k個未満では前記秘密情報を復元できないシステムにおいて、第2の発明に係る秘匿演算装置によって得られた、秘密情報に対して乱数を作用させて生成した第3の値から秘密情報と第4の乱数に相当する値を排除する第1排除部と、前記第1排除部による排除によって得られた第1の乱数同士の演算結果が正しいか否かを判定する第1判定部と、を備えることを特徴とする。
【0018】
開示の技術は、一つの態様として、第4の発明に係る検証復元装置が、nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の前記分散値によって前記秘密情報を復元でき、k個未満では前記秘密情報を復元できないシステムにおいて、第2の発明に係る秘匿演算装置によって得られた、秘密情報に対して乱数を作用させて生成した第3の値から秘密情報と第4の乱数に相当する値を排除する第2排除部と、前記第2排除部による排除によって得られた第1の乱数同士の演算結果であって、前記第3の値または第4の値が0の場合に第6の乱数を含む第1の乱数同士の演算結果が正しいか否かを判定する第2判定部と、を備えることを特徴とする。
【0019】
開示の技術は、一つの態様として、第2の発明に係る秘匿演算装置が、第3の発明に記載の第1排除部、もしくは第4の発明に記載の第2排除部から得られる値、又は第4の値から各々の第5の乱数に相当する値を排除した値から第1の秘密情報同士の演算結果を得る復元部を有することを特徴とする。
【0020】
開示の技術は、一つの態様として、第5の発明に係る分散システムが、請求項1に記載の乱数を前記第1の秘密情報の生成者以外が生成した乱数を用いて生成する第4生成部を含む分散装置、を備えることを特徴とする。
【0021】
開示の技術は、一つの態様として、第6の発明に係る秘匿演算装置が、nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の前記分散値によって前記秘密情報を復元でき、k個未満では前記秘密情報を復元できないシステムにおいて、分散値同士の乗算を行う乗算部と、前記乗算部による乗算により得られた乗算値と他装置から送られた分離できない乗算値とを用いて分散値の次数変換処理を行う変換部と、乱数を生成し、生成した乱数を自装置に返信される次数変換後の分散値に加算する加算部と、を備えることを特徴とする。
【0022】
開示の技術は、一つの態様として、第7の発明に係る秘匿演算検証復元システムが、nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の前記分散値によって前記秘密情報を復元でき、k個未満では前記秘密情報を復元できないシステムにおいて、秘匿された登録値を用いて、登録値による検証用演算を行う演算部、を含む演算装置と、前記演算部による演算結果が正しいかどうかを検証する検証部を含む検証復元装置と、を備えることを特徴とする。
【0023】
開示の技術は、一つの態様として、コンピュータを、上記第1~第7の発明のいずれか1つの装置の各部として機能させるプログラムを有する。
【発明の効果】
【0024】
本開示によれば、秘密情報に0を含んでいても、効率よく秘匿演算を繰り返すことができ、その計算結果を効率的に検証することができる。
【図面の簡単な説明】
【0025】
【
図1】第1実施形態に係る秘密分散システムの構成の一例を示すブロック図である。
【
図2】第1実施形態に係るサーバ16のハードウェア構成の一例を示す図である。
【
図3】第1実施形態に係る変換用乱数組を生成する処理シーケンスの一例を示す図である。
【
図4】第1実施形態の変形例に係る変換用乱数組を生成する処理シーケンスの一例を示す図である。
【
図5】第2実施形態に係る秘密分散システムの構成の一例を示すブロック図である。
【
図6】第2実施形態に係る入力装置212のハードウェア構成の一例を示す図である。
【
図7】第2実施形態に係るサーバ216のハードウェア構成の一例を示す図である。
【
図8】第2実施形態に係る分散の処理シーケンスの一例を示す図である。
【
図9】第2実施形態に係る秘匿積和演算の処理シーケンスの一例を示す図である。
【
図10】第2実施形態に係る補正処理の処理シーケンスの一例を示す図である。
【
図11】第3実施形態に係る秘密分散システムの構成の一例を示すブロック図である。
【
図12】第3実施形態に係る復元装置314のハードウェア構成の一例を示す図である。
【
図13】第3実施形態に係る分散の処理シーケンスの一例を示す図である。
【
図14】第3実施形態に係る秘匿積和演算の処理シーケンスの一例を示す図である。
【
図15】第3実施形態に係る検証の処理シーケンスの一例を示す図である。
【
図16】第4実施形態に係るサーバ416のハードウェア構成の一例を示す図である。
【
図17】第4実施形態に係る分散の処理シーケンスの一例を示す図である。
【
図18】第4実施形態の変形例に係る分散の処理シーケンスの一例を示す図である。
【
図19】第5実施形態に係る復元装置514のハードウェア構成の一例を示す図である。
【
図20】第5実施形態に係る分散の処理シーケンスの一例を示す図である。
【
図21】第5実施形態に係る秘匿積和演算の処理シーケンスの一例を示す図である。
【
図22】第5実施形態に係る補正処理の処理シーケンスの一例を示す図である。
【
図23】第5実施形態に係る検証の処理シーケンスの一例を示す図である。
【
図24】第6実施形態に係る秘密分散システムの構成の一例を示すブロック図である。
【
図25】第6実施形態に係る復元装置614のハードウェア構成の一例を示す図である。
【
図26】第6実施形態に係るブロックチェーン装置616のハードウェア構成の一例を示す図である。
【
図27】第6実施形態に係る検証装置618のハードウェア構成の一例を示す図である。
【
図28】第6実施形態に係る分散、秘匿積和演算、補正処理の処理シーケンスの一例を示す図である。
【
図29】第6実施形態に係る検証の処理シーケンスの一例を示す図である。
【発明を実施するための形態】
【0026】
以下、図面を参照して、本開示の技術を実施するための形態例を詳細に説明する。
【0027】
まず、実施形態の詳細を説明する前に、実施形態の技術の前提となるShamir法、及びTUS法の詳細を説明した上で、TUS法における各問題点を説明する。
【0028】
<Shamir法>
Shamir法は、ある秘密情報をn個の分散情報に分散し、そのうちのk個以上の分散情報を集めることによって、元の秘密情報を復元することができるという方法である。ただし、k個未満の分散情報からは元の秘密情報を得ることが一切できないというものである。Shamir法での秘密情報の分散及び復元は、以下に示すように行われる。このような手法を(k,n)Shamir法と呼ぶ。
【0029】
<分散>
1.ユーザはs<pかつn<pの条件を満たす任意の素数pを選択する。
【0030】
2.ユーザはGF(p)の元から、n個のxi(i=0,1,2,…,n-1)を選び、サーバIDとする。
【0031】
3.ユーザはGF(p)の元から、k-1個の乱数al(l=1,2,…,k-1)を選び、以下の分散式を生成する。
【0032】
Wi=s+a1xi+a2xi
2+…+ak-1xk-1 (mod p)
【0033】
4.ユーザは上記式のxiに各サーバIDを代入して分散値Wiを計算し、各サーバSiに送信する。
【0034】
<復元処理>
1.復元に用いる分散情報をWi(i=0,1,2,…,k-1)とする。また、その分散情報に対応するサーバIDをxiとする。
【0035】
2.復元者は、k個の(xi,Wi)を集め、集めたk個の(xi,Wi)を上記の分散式に代入し、k個の連立方程式を解くことで秘密情報であるsを復元する。なお、sの復元の際には、Lagrangeの補間公式を用いることができる。
【0036】
以上がShamir法の詳細である。
【0037】
<TUS法>
次にTUS法の詳細を説明する。以下に、TUS法を用いてab+cの積和演算を行う場合の例を示す。なお、秘密情報a,b,c及び乱数α
j,β
j,λ
j,γ
jは、a,b,c,α
j,β
j,λ
j,γ
j∈Z/pZである。ただし、乗算において一旦復元されるaと乱数は0ではない。以下において、[a]
jは秘密情報aに対してサーバS
jが保持する分散値を表す。以降、秘密分散の処理も含めてすべての秘匿演算はpを法として行われる。また、サーバS
iは攻撃者が知らない変換用乱数組([ε]
j,ε
j),([φ]
j,φ
j)を持つものとする。変換用乱数組とは、例えば
の関係を満たす変換用乱数εの分散値と、εを構成する乱数ε
jからなる組である。
【0038】
ab+cの秘匿演算の入出力を以下に示す。
【0039】
(入力)
([αa]j,[α0]j,…,[αk-1]j)(j=0,1,…,k-1)
([βb]j,[β0]j,…,[βk-1]j)(j=0,1,…,k-1)
([γc]j,[γ0]j,…,[γk-1]j)(j=0,1,…,k-1)
(出力)
([δ(ab+c)]i,[δ0]j,…,[δk-1]j)(i=0,1,…,n-1)
【0040】
上記の入出力のもと、ab+cの秘匿演算は以下に示すように行われる。
【0041】
1.k台のサーバSjは[αa]j,[βb]j,[γc]jを公開する。また、Sjは、αa,βb,γcを復元する。
【0042】
2-1.k台のサーバSjは[αj]0,…,[αj]k-1,[βj]0,…,[βj]k-1,[γj]0,…,[γj]k-1を収集して、乱数αj,βj,γjを復元する。
【0043】
2-2.サーバSjは、乱数δjを生成する。
【0044】
2-3.サーバSjは、生成した乱数δjを用いて、δj/αjβjεj,δj/γjφjを計算して公開する。
【0045】
【0046】
【0047】
4.k台のサーバSjは乱数δjをShamir法で分散し、全てのサーバSiに分散する。
【0048】
5.以上より、サーバSi(i=0,1,2,…,n-1)は秘密情報ab+cに関する分散情報として([δ(ab+c)]i,[δ0]j,…,[δk-1]j)を保持する。
【0049】
以上がTUS法による秘匿演算の詳細である。TUS法は以下の3つの問題点を持つ。
【0050】
<問題点1>
問題点1は、複数人による変換用乱数組の安全な生成法が知られていないというものである。変換用乱数組を一人が生成する場合、例えば生成者はk個の乱数ε0,ε1,…,εk-1を生成して、ε=ε0ε1…εk-1を計算し、εを秘密分散して、[ε]jとεjをサーバSjに送れば、Sjは変換用乱数組([ε]j,εj)を持つことができる。TUS法の安全性は変換用乱数組の安全性に依存するため、変換用乱数組の生成者が攻撃者であれば、その変換用乱数組を用いた秘匿計算は安全ではない。よって、信頼できない複数の生成者が変換用乱数組を生成しても、その値を知ることができない安全な変換用乱数組の生成法がなければ、上記TUS法は安全ではないということである。
【0051】
<問題点2>
問題点2は、秘密情報に0を含むことができないというものである。例えば、入力をaではなくa+1として入力すれば、最初の入力aは0であってもよいが、減算を含む場合、すなわちab-cまたはa-cを演算する場合、その出力が0となる可能性がある。そのため、TUS法による演算結果を用いて秘匿演算を繰り返せないという問題がある。
【0052】
<問題点3>
問題点3は、秘匿計算の正当性を検証できないというものである。一般に秘密分散においては、k-1台までのサーバがもつ情報は盗聴などにより知られることを想定している。しかし、その盗聴可能なk-1台のサーバが乗っ取られ、偽の情報を出力したり、決められた処理をしない場合、上記秘匿演算の結果は信用できないものとなる。
【0053】
以上がTUS法の問題点1~3である。
【0054】
問題点1の解決はTUS法において必須であり、問題点1が解決されることにより、TUS法の安全性が向上する。例えば、信頼できる変換用乱数組の生成者がいない場合でもTUS法を用いて秘匿演算できるようになる。また問題点1を解消することは、秘匿計算の検証においても必要となる。
【0055】
問題点2が解決されることにより、減算を含む秘匿演算を繰り返すことができるようになり、TUS法の実用性が向上する。また問題点2を解消することは、繰返し演算された結果、または0を含む結果を検証する場合に必要となる。
【0056】
問題点3が解決されることにより、嘘の情報を出力するなど決められたプロトコルに従わないactiveな攻撃者に対しても安全性を確保することができるようになる。さらに、一般の検証機能付き秘匿計算は非常に複雑な処理を必要とするが、本発明の実施形態の手法によって非常に効率的に演算結果を検証できるようになる。
【0057】
以上の各問題点を解消することによって、安全かつ効率的、実用的に秘匿演算を検証できるようになる。
【0058】
以上を踏まえて、以下に各実施形態を展開する。以下の各実施形態において説明する秘密分散システムは、nを2以上の整数、kを2以上n以下の整数とし、秘密情報をn個の分散値に分散し、k個の分散値によって秘密情報を復元でき、k個未満では秘密情報を復元できないシステムである。
【0059】
[第1実施形態]
第1実施形態は、上記問題点1に対応する。すなわち複数の信頼できない入力者及び復元者によって生成されていたとしても、変換用乱数の値が知られない安全な変換用乱数組の生成法を実現するものである。本実施形態の手法によって生成された変換用乱数組は、以降の各実施形態においても用いられる。
【0060】
まず第1実施形態の手法の前提について説明する。第1実施形態では、変換用乱数組を生成するために、参考文献1及び2に示される手法を拡張する。
【0061】
[参考文献1]M. Ben-Or, S. Goldwasser, and A. Wigderson, “Completeness theorems for non-cryptographic fault-tolerant distributed computation,” STOC ’88, 1988, pp. 1-10, ACM Press.
[参考文献2]Rosario Gennaro, Michael O. Rabin, and Tal Rabin, “Simplified VSS and fast-track multiparty computations with applications to threshold cryptography,” In Brian A. Coen and Yehuda Afek, editors, PODC, 1998, pp. 101-111, ACM.
【0062】
参考文献1及び2において、2k次の多項式に対する分散値をk次の多項式に対する分散値に変換する方法が示されている。例えば参考文献1では、以下に示す変換手法が開示されている。
【0063】
ある規則によって生成された定数を要素とする行列を以下の行列Aとする。
【0064】
【0065】
上記行列Aを用いて、2k次の多項式に対する分散値ベクトルW=(W0,W1,・・・,W2k-1)に対してR=W・Aを計算することで、k次の多項式に対する分散値ベクトルR=(R0,R1,・・・,R2k-1)に変換することができる。参考文献2の手法もほぼ同様の処理で、分散値ベクトルRへの変換を実現できる。
【0066】
ただし、参考文献1及び2の手法はサーバ台数がn≧2k-1の場合に有効であるが、本実施形態ではTUS法と同様にn<2k-1の場合を扱う。以下で説明する本実施形態の構成では、二人の入力者に対応する入力装置と、一人の復元者に対応する復元装置とを想定し、n=kの場合の生成法を示す。ただし、後述するように復元装置は復元を行わず、演算支援装置としてふるまう。
【0067】
2k-1>n>kの場合は乱数αi等を直接サーバに送らず、(k,n)Shamir法を用いて分散し、演算を行うk台のサーバが乱数αi等を復元して使用する。また、秘密情報λ0,λ1は(k,n+k-1)Shamir法を用いて分散され、n台のサーバ中k-1台のサーバのみが[αλ0]i+kを持つ。また、復元装置は復元を行うと変換用乱数の値を知るので、復元装置は復元を行わず、演算支援の役割を持つ。以下において、秘密情報λ0,λ1及び乱数αj,i,βj,i,γiはλ0,λ1,αj,i,βj,i,γi∈Z/pZである。ただし、秘密情報と乱数は0を含まないものとする。また、0r1などは0を表し、他と区別するため記号を付ける。
【0068】
以上の前提を踏まえて、
図1を参照して、本実施形態に係る秘密分散システム10の構成を説明する。
図1に示すように、秘密分散システム10は、2台の入力装置12A及び入力装置12B、復元装置14、並びにサーバ16
0~16
n-1を含む。以下、入力装置12A及び入力装置12Bについて共通する内容については「入力装置12」、サーバ16
0~16
n-1について共通する内容については「サーバ16」とし、末尾の識別記号を省略して説明する場合もある。入力装置12、復元装置14、及びサーバ16は、ネットワークNに接続され、互いに通信可能とされる。なお、サーバ16が、乗算部と、変換部と、加算部とを含む秘匿演算装置の一例である。
【0069】
入力装置12は、秘密情報の入力者(以下、単に「入力者」という)によって操作される装置であり、入力装置12の例としては、パーソナルコンピュータ等の情報処理装置が挙げられる。
【0070】
復元装置14は、秘密情報を復元する復元者(以下、単に「復元者」という)によって操作される装置であり、復元装置14の例としては、パーソナルコンピュータ等の情報処理装置が挙げられる。
【0071】
サーバ16は、変換用乱数組の生成に係る計算、変換用乱数組の保管などをする役割を持つ。また、サーバ16はn台存在し、説明に応じてサーバSi(i=0,…,n-1)等とも記載する(以下、各実施形態において同様である)。
【0072】
次に、
図2を参照して、本実施形態に係るサーバ16のハードウェア構成を説明する。
図2に示すように、サーバ16は、CPU(Central Processing Unit)20、一時記憶領域としてのメモリ21、不揮発性の記憶部22を含む。また、サーバ16は、液晶ディスプレイ等の表示装置23、キーボード等の入力I/F24、及びネットワークNに接続されるネットワークI/F25(InterFace)を含む。CPU20、メモリ21、記憶部22、表示装置23、入力I/F24、及びネットワークI/F25は、バス26に接続される。
【0073】
記憶部22は、HDD(Hard Disk Drive)、SSD(Solid State Drive)、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部22には、変換用乱数組生成プログラム28が記憶される。変換用乱数組生成プログラム28は、乗算プロセス28aと、変換プロセス28bと、加算プロセス28cとを含む。CPU20は、記憶部22から変換用乱数組生成プログラム28を読み出してからメモリ21に展開し、展開した生成プログラム28を実行する。CPU20が変換用乱数組生成プログラム28の乗算プロセス28aを実行することで、開示の技術の乗算部として動作する。CPU20が変換用乱数組生成プログラム28の変換プロセス28bを実行することで、開示の技術の変換部として動作する。CPU20が変換用乱数組生成プログラム28の加算プロセス28cを実行することで、開示の技術の加算部として動作する。
【0074】
なお、入力装置12、及び復元装置14についてはサーバ16と同様の装置構成をとることができ、実行するプログラムのみが異なるため詳細な説明を省略する。
【0075】
次に、
図3を参照して、本実施形態に係る秘密分散システム10の作用を説明する。
【0076】
<変換用乱数組生成1:n=k>
図3は、秘密分散システム10の変換用乱数組を生成する処理シーケンスを説明したものである。以下において、サーバ16は、シーケンスの各処理に応じてサーバS
i、S
j、及びS
k-1のいずれかが対象であるものとして説明する。
【0077】
S10で、入力装置12Aは、乱数λ0,i、及びαi(i=0,…,k-1)を生成する。
【0078】
S12で、入力装置12Aは、
を計算する。また、入力装置12Aは、λ
0を(k,2k-1)Shamir法で分散して[αλ
0]
i+k=α×[λ
0]
i+kを計算する。
【0079】
S14で、入力装置12Aは、S10及びS12で得られた[λ0]i,[αλ0]i+k,αi,λ0,iをサーバSiに送信する。ただし、サーバSk-1は[αλ0]2k-1を持たないものとする。
【0080】
S16で、入力装置12Bは、乱数λ1,i、及びβi(i=0,…,k-1)を生成する。
【0081】
S18で、入力装置12Bは、
を計算する。また、入力装置12Bは、λ
1を(k,2k-1)Shamir法で分散して[βλ
1]
i+k=β×[λ
1]
i+kを計算する。
【0082】
S20で、入力装置12Bは、S16及びS18で得られた[λ1]i,[βλ1]i+k,βi,λ1,iをSiに送信する。ただし、サーバSk-1は[βλ1]2k-1を持たないものとする。
【0083】
S22で、サーバSk-1を除くサーバSi(以下、本シーケンスの説明では単にSiと記載する)は、[λ0λ1]i=[λ0]i×[λ1]i,[αβλ0λ1]i+k=[αλ0]i+k×[βλ1]i+kを計算する。なお、S22は、サーバSiにおける、変換用乱数組生成プログラム28の乗算プロセス28aに対応する。サーバSiのCPU20が、乗算プロセス28aを実行することで、開示の技術における分散値同士を乗算する処理を行う。
【0084】
S24で、サーバSiは、[αβλ0λ1]i+kを復元装置14に送信する。
【0085】
S26で、サーバSiは、αiβiを計算する。
【0086】
S28で、復元装置14は、0r1を(2k-1,2k-1)Shamir法で分散する。
【0087】
S30で、復元装置14は、サーバSiで計算されたαiβiを取得する。
【0088】
S32で、取得したαiβiを元に、αβを復元する。
【0089】
S34で、復元装置14は、S28で分散した0r1、及びS32で復元したαβを用いて[λ0λ1]′i+k=[αβλ0λ1]i+k/αβ+[0r1]i+kを計算する。
【0090】
S36で、復元装置14は、計算した[λ0λ1]′i+kをサーバSiに送信する。
【0091】
S38で、サーバSiは、0iを(k,n)Shamir法で分散し、Ri,jを計算する。j≠i(j=0,…,n-1)のとき、Ri,jは以下のように計算できる。なお、以下におけるai,jなどは上記行列Aの要素である。
Ri,j=ai,j×[λ0λ1]i+ai+n,j×[λ0λ1]′i+n+[0i]j
【0092】
なお、S38は、サーバSiにおける、変換用乱数組生成プログラム28の変換プロセス28bに対応する。サーバSiのCPU20が、変換プロセス28bを実行することで、開示の技術における分散値の次数変換処理を行う。S38のRi,jの計算ではS36で返却された[λ0λ1]′i+kを用いるが、[λ0λ1]′i+kが他装置から送られた分離できない乗算値の一例である。また、Ri,jが次数変換後の分散値の一例である。
【0093】
S40で、サーバSiは、i=jか否かを判定する。i=jであればS42へ移行し、i=jでなければ(すなわち、i≠jであれば)、S44へ移行する。
【0094】
S42で、サーバSiは、乱数riを生成して、以下のようにRi,jにriを加算する。
Ri,j=ai,j×[λ0λ1]i+ai+n,j×[λ0λ1]′i+n+[0i]j+ri
【0095】
なお、S42は、サーバSiにおける、変換用乱数組生成プログラム28の加算プロセス28cに対応する。サーバSiのCPU20が、加算プロセス28cを実行することで、開示の技術における乱数を分散値に加算する処理を行う。
【0096】
S44で、サーバSiは、計算したRi,jを復元装置14に送信する。
【0097】
S46で、復元装置14は、0r2を(k,n)Shamir法で分散し、R′i,j=Ri,j+ai,j×[0r1]i+[0r2]iを計算する。ただし、j=0,…,n-1とし、
(i≠j)のとき:
R′i,j=ai,j×[λ0λ1]′i+ai+n,j×[λ0λ1]′i+n+[0i]j+[0r2]j(i=j)のとき:
R′i,j=ai,j×[λ0λ1]′i+ai+n,j×[λ0λ1]′i+n+[0i]j+[0r2]j+ri
とする。
【0098】
S48で、復元装置14は、R′i,jをサーバSjに送信する。このように、サーバSiで計算された次数変換後の分散値であるRi,jは、R′i,jとなってサーバSjに返信される。
【0099】
S50で、サーバSjは、Σi=0
k-1R′i,j-ri=[λ]jと計算する。また、サーバSjは、λi=λ0,iλ1,iを計算する。以上のシーケンスによって、変換用乱数組([λ]j,λi)が得られる。
【0100】
[第1実施形態の変形例]
上述した変換用乱数組生成1では、n=kのとき、入力装置12及び復元装置14を必要とする場合を例に説明した。一方、n=k=2の場合、入力装置12及び復元装置14を不要とした以下の処理が可能となる。すなわち、サーバ16だけの構成で変換用乱数組生成が可能となる。
【0101】
<変換用乱数組生成1′:n=k=2>
図4は、n=k=2の場合の変換用乱数組を生成する処理シーケンスを説明したものである。以下において、サーバ16のうち、サーバS
0、及びS
1の間で処理する場合を例に説明する。
図4のシーケンスにおいて、以下のS60~S94の処理が行われる。なお、
図4において各処理は簡略化して記載するものとする。
【0102】
S60では、サーバS0は、乱数λ0,α0,α1,τ0を生成し、α=α0α1を計算する。
【0103】
S62では、サーバS0は、λ0を(2,3)Shamir法で分散して、[αλ0]0=α×[λ0]0,[αλ0]2=α×[λ0]2,[τ0λ0]1=τ0×[λ0]1を計算する。
【0104】
S64では、サーバS0は、得られた[τ0λ0]1,α1をサーバS1に送信する。
【0105】
S66では、サーバS1は、乱数λ1,β0,β1を生成し、β=β0β1を計算する。
【0106】
S68では、サーバS1は、λ1を(2,3)Shamir法で分散して、[βλ1]0=β×[λ1]0,[βλ1]2=β×[λ1]2を計算する。
【0107】
S70では、サーバS1は、得られた[βλ1]0,[βλ1]2,β0をサーバS0に送信する。
【0108】
S72では、サーバS0は、00を(3,3)Shamir法で分散し、α0β0と以下を計算する。
[αβλ0λ1]′0=[αλ0]0×[βλ1]0+[00]0,[αβλ0λ1]′2=[αλ0]2×[βλ1]2+[00]2,[00]1
【0109】
S74では、サーバS0は、計算した[αβλ0λ1]′0、[αβλ0λ1]′2、α0β0をサーバS1に送信する。
【0110】
S76では、サーバS1は、01を(3,3)Shamir法で分散し、α1β1とα0β0からαβを計算すると共に、以下を計算する。ただし、[001]i=[00]i/αβ+[01]iである。
【0111】
【0112】
S78では、サーバS1は、得られた[λ0λ1]′0,[λ0λ1]′2,[001]1をサーバS0に送信する。
【0113】
S80では、サーバS0は、00′を(2,2)Shamir法で分散する。
【0114】
S82では、サーバS0は、乱数r0を生成する。
【0115】
S84では、サーバS0は、分散した00′、及び乱数r0を用いて、以下のR0,0及びR0,1を計算する。
R0,0=τ0(a0,0×[λ0λ1]′0+a2,0×[λ0λ1]′2+a1,0×[001]1)+[00′]0+r0=τ0(a0,0[λ0λ1]0+a2,0[λ0λ1]2)+τ0[001]″0+[00′]0+r0
R0,1=τ0(a0,1×[λ0λ1]′0+a2,1×[λ0λ1]′2+a1,1×τ0[001]1)+[00′]1=τ0(a0,1[λ0λ1]0+a2,1[λ0λ1]2)+τ0[001]″1+[00′]1
【0116】
S86では、サーバS0は、計算したR0,0,R0,1をサーバS1に送信する。
【0117】
S88では、サーバS1は、[τ0λ0λ1]1=[τ0λ0]1×[λ1]1を計算すると共に、01′を(2,2)Shamir法で分散し、以下を計算する。
R′0,0=R0,0+a1,0×[τ0λ0λ1]1+[01′]0=τ0[λ0λ1]0+τ0[001]″0+[00′]0+[01′]0+r0
R′0,1=R0,1+a1,1×[τ0λ0λ1]1+[01′]1=τ0[λ0λ1]1+τ0[001]″1+[00′]1+[01′]1
【0118】
S90では、サーバS1は、得られたR′0,0をサーバS0に送信する。
【0119】
S92では、サーバS0は[λ]0=R′0,0-r0,λ0=τ0λ0として変換用乱数組([λ]0,λ0)を得る。
【0120】
S94では、サーバS1は[λ]1=R′0,1として変換用乱数組([λ]1,λ1)を得る。
【0121】
以上が、変換用乱数組生成1′の場合の説明である。
【0122】
以上説明したように、本発明の第1実施形態の手法を用いて変換用乱数組を生成することにより、安全に変換用乱数組を生成することができる。
【0123】
[第2実施形態]
第2実施形態は、上記問題点2に対応する。すなわち秘密情報に0を含む場合の手法である。
【0124】
まず第2実施形態の手法の前提について説明する。以下において,秘密情報a,b,c及び乱数αj,i,βj,i,γj,i,a1,b1,c1はa,b,c,αj,i,βj,i,γj,i,a1,b1,c1∈Z/pZである。また、秘密情報に0を含んでもよいが、乱数は0を含まないものとする。また、第2実施形態では、第1実施形態に示した手法により変換用乱数組が予め生成されており、サーバSiは変換用乱数組([εh,i]i,εh,i),(h=1,…,必要個数)を持つものとする。以下の説明においては、n=kにおける秘匿積和演算を示すが、n>kの場合、αj,i,βj,i,γj,i,εj,iなどは(k,n)Shamir法で分散し、演算に参加するk台のサーバが復元してもよい。また、a+a1のように秘密情報に加えられる乱数a1,b1,c1は0でなく、その加算結果も0とならない値を選ぶものとする。積和演算を組み合わせることにより、任意の四則演算を構成できるため、秘匿積和演算を例に以下、詳細を説明する。
【0125】
以上の前提を踏まえて、
図5を参照して、本実施形態に係る秘密分散システム210の構成を説明する。
図5に示すように、秘密分散システム210は、3台の入力装置212A~212C、及び複数台のサーバ216
0~216
n-1を含む。以下、入力装置212A~212Cについて共通する内容については「入力装置212」、サーバ216
0~216
n-1について共通する内容については「サーバ216」とし、末尾の識別記号を省略して説明する場合もある。入力装置212、及びサーバ216は、ネットワークNに接続され、互いに通信可能とされる。なお、入力装置212が、第1生成部を含む分散装置の一例である。また、サーバ216が、第2生成部を含む秘匿演算装置の一例である。また、サーバ216が、第3生成部と、加算部とを含む秘匿演算装置の一例である。
【0126】
入力装置212は、秘密情報の入力者によって操作される装置である。入力装置212は、乱数を作用させた所定の値を生成して、サーバ216に分散する。
【0127】
サーバ216は、秘匿積和演算に係る計算などをする役割を持つ。
【0128】
次に、
図6を参照して、本実施形態に係る入力装置212のハードウェア構成を説明する。
図6に示すように、入力装置212は、CPU220、一時記憶領域としてのメモリ221、不揮発性の記憶部222を含む。また、入力装置212は、表示装置223、入力I/F224、及びネットワークNに接続されるネットワークI/F225を含む。CPU220、メモリ221、記憶部222、表示装置223、入力I/F224、及びネットワークI/F225は、バス226に接続される。
【0129】
記憶部222は、HDD、SSD、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部222には、第1生成プログラム228が記憶される。CPU220は、記憶部222から第1生成プログラム228を読み出してからメモリ221に展開し、展開した第1生成プログラム228を実行する。CPU220が第1生成プログラム228を実行することで、開示の技術の第1生成部として動作する。なお、後述する第3~第5実施形態においても同様である。
【0130】
次に、
図7を参照して、本実施形態に係るサーバ216のハードウェア構成を説明する。
図7に示すように、サーバ216は、CPU230、一時記憶領域としてのメモリ231、不揮発性の記憶部232を含む。また、サーバ216は、表示装置233、入力I/F234、及びネットワークNに接続されるネットワークI/F235を含む。CPU230、メモリ231、記憶部232、表示装置233、入力I/F234、及びネットワークI/F235は、バス236に接続される。
【0131】
記憶部232は、HDD、SSD、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部232には、秘匿積和演算プログラム238が記憶される。秘匿積和演算プログラム238は、第2生成プロセス238aと、第3生成プロセス238bと、加算プロセス238cとを含む。CPU230は、記憶部232から秘匿積和演算プログラム238を読み出してからメモリ231に展開し、展開した秘匿積和演算プログラム238を実行する。CPU230が秘匿積和演算プログラム238の第2生成プロセス238aを実行することで、開示の技術の第2生成部として動作する。CPU230が秘匿積和演算プログラム238の第3生成プロセス238bを実行することで、開示の技術の第3生成部として動作する。CPU230が秘匿積和演算プログラム238の加算プロセス238cを実行することで、開示の技術の加算部として動作する。なお、後述する第3、第5実施形態においても同様である。なお、サーバ216において補正処理が行われない想定とし、秘匿積和演算プログラム238において第2生成プロセス238aのみを含み、第3生成プロセス238bと、加算プロセス238cとを含まないようにしてもよい。
【0132】
次に、
図8~10を参照して、本実施形態に係る秘密分散システム210の作用を説明する。
【0133】
まず、秘密情報を各サーバに分散する処理について説明する。
図8は、秘密分散システム210における分散の処理シーケンスを説明したものである。分散の処理シーケンスでは、入力装置212A~Cが持つ秘密情報をサーバ216に分散する。以下において、サーバ216は、分散の処理シーケンスの各処理に応じてn台の全てのサーバである全サーバS、及びサーバS
iのいずれかが対象であるものとして説明する。
【0134】
<分散2>
S210で、入力装置212Aは、乱数a1,α1,i,α2,i(i=0,…,k-1)を生成する。
【0135】
S212で、入力装置212Aは、以下の式に基づいて、秘密情報aに対してα1a1とα2(a+a1)を計算する。
【0136】
【0137】
なお、S212は、入力装置212Aにおける、第1生成プログラム228に対応する。入力装置212AのCPU220が、第1生成プログラム228を実行することで、開示の技術における第1生成部の処理を行う。秘密情報aが第1の秘密情報、乱数a1が第1の乱数、乱数α2が第2の乱数、乱数α1が第3の乱数の一例である。α2(a+a1)が、第1の乱数及び第2の乱数を作用させた第1の値の一例である。α1a1が、第1の乱数に第3の乱数を作用させた第2の値の一例である。第1生成プログラム228との対応は、以下、入力装置212B、及び入力装置212Cの秘密情報に対して行う処理において同様である。
【0138】
S214で、入力装置212Aは、計算したα1a1とα2(a+a1)を全サーバSに送信する。
【0139】
S216で、入力装置212Aは、乱数α1,i,α2,iをサーバSiに送信する。
【0140】
S218で、入力装置212Bは、乱数b1,β1,i,β2,i(i=0,…,k-1)を生成する。
【0141】
S220で、入力装置212Bは、以下の式に基づいて、秘密情報bに対してβ1b1とβ2(b+b1)を計算する。
【0142】
【0143】
S222で、入力装置212Bは、計算したβ1b1とβ2(b+b1)を全サーバSに送信する。
【0144】
S224で、入力装置212Bは、乱数β1,i,β2,iをSiに送信する。
【0145】
S226で、入力装置212Cは、乱数c1,γ1,i,γ2,i(i=0,…,k-1)を生成する。
【0146】
S228で、入力装置212Cは、以下の式に基づいて、秘密情報cに対してγ1c1とγ2(c+c1)を計算する。
【0147】
【0148】
S230で、入力装置212Cは、計算したγ1c1とγ2(c+c1)を全サーバSに送信する。
【0149】
S232で、入力装置212Cは、乱数γ1,i,γ2,iをサーバSiに送信する。
【0150】
以上の分散の処理シーケンスを実行することで、サーバSiはα1a1,α2(a+a1),β1b1,β2(b+b1),γ1c1,γ2(c+c1)とα1,i,β1,i,γ1,i,α2,i,β2,i,γ2,iを持つことになる。また、サーバSiは、上記第1実施形態の手法で生成された変換用乱数組([εh,i]i,εh,i)(h=0,…,必要個数)も予め持つものとする。
【0151】
上記で説明した分散2の特徴は、秘密情報が漏洩しないよう、秘密情報に乱数を加えた値とその乱数のみが秘匿されて公開される点である。また、下記に説明する秘匿積和演算2は、秘密情報に乱数を加えた値とその乱数のみから、秘密情報による秘匿演算結果に乱数を加えた値とその乱数による秘匿演算結果が得られるように構成される。また、以下の秘匿積和演算において、計算結果を新たなα2(a+a1),α1a1などとするが、β1b1,β2(b+b1)またはγ1c1,γ2(c+c1)としてもよい。またα2,i,α1,iも同様である。
【0152】
<秘匿積和演算2>
次に秘匿積和演算する処理について説明する。
図9は、秘密分散システム210における、秘匿積和演算の処理シーケンスを説明したものである。
図9では、説明の便宜のため、サーバ216のうち、サーバS
i、S
0の間で秘匿積和演算の処理シーケンスが行われるものとし、
図9上は全サーバSへの送信はサーバS
iに対する送信であるものとして説明するが、サーバS
iで行われる処理はサーバS
0でも行われる。
【0153】
S240で、サーバSi(i=0,…,k-1)は、以下の乱数δ1,i,δ2,iを生成する。
【0154】
【0155】
S242で、サーバSiは、S240で生成した乱数δ1,i,δ2,iを用いて以下を計算する。
【0156】
【0157】
S244で、サーバSiは、S242の計算結果をサーバS0に送信する。
【0158】
S246で、サーバS0は、サーバSiから受信した計算結果を用いて、以下を計算する。ただし以降、Πはi=0,…,k-1に関する乗算を表す。
【0159】
【0160】
S248で、サーバS0は、S246の計算結果を全サーバSに送信する。
【0161】
S250で、サーバSiは、サーバS0から受信した計算結果を用いて、以下を計算して公開し、計算結果を復元する。
【0162】
【0163】
なお、S250は、サーバSiにおける、秘匿積和演算プログラム238の第2生成プロセス238aに対応する。サーバSiのCPU230が、第2生成プロセス238aを実行することで、開示の技術における第3の値の生成、及び第4の値の生成を行う。δ2{(ab+c)+(c1-a1b1)}が、開示の技術における第3の値の一例である。δ1(c1-a1b1)が、開示の技術における第4の値の一例である。第3の値は、複数の第1の秘密情報同士の演算結果(ab+c)に複数の乱数同士の演算結果(c1-a1b1)、及び第4の乱数(δ2)を作用させた値である。また、第3の値は、複数の第1の秘密情報同士の演算結果を第1の秘密情報に置き換え、複数の第1の乱数同士の演算結果を第1の乱数に置き換え、第4の乱数を第2の乱数に置き換えた場合に第1の値と同形式になる。第4の値は、第1の乱数同士の演算結果(c1-a1b1)に第5の乱数(δ1)を作用させた値である。また、第4の値は、複数の第1の乱数同士の演算結果を第1の乱数に置き換え、第5の乱数を第3の乱数に置き換えた場合に第2の値と同形式になる。
【0164】
S252は、秘匿積和演算の処理シーケンスを繰り返す場合の処理である。S252で、サーバSiは、δ2{(ab+c)+(c1-a1b1)}及びδ1(c1-a1b1)が0でなければ、その復元値を新たなα2(a+a1)及びα1a1として設定し、δ2,i,δ1,iを新たなα2,i,α1,iに設定してS240に戻る。上記の秘匿積和演算の処理シーケンスは、例えば全てのサーバSiについて処理を終了するまで繰り返す。
【0165】
<補正処理2>
次に、補正処理について説明する。上述した
図9の秘匿積和演算の処理シーケンスにおいて、δ
2{(ab+c)+(c
1-a
1b
1)},δ
1(c
1-a
1b
1)の少なくとも1つが0の場合、以下の補正処理を行う。
図10は、秘密分散システム210における補正処理の処理シーケンスを説明したものである。補正処理の処理シーケンスは、サーバ216のうち、全サーバS、サーバS
i、及びS
0の間で行われるものとして説明する。また、δ
2{(ab+c)+(c
1-a
1b
1)}=0の場合を第1のケース、δ
1(c
1-a
1b
1)=0の場合を第2のケースとして、第1のケース及び第2のケースのいずれか少なくとも一つに当てはまる場合の計算例を説明する。
【0166】
S260で、サーバSiは、新たな乱数τ1,iとa′1,iを生成し、その積τ1,ia′1,iを公開する。
【0167】
S262で、サーバSiは、τ1a′1=Πτ1,ia′1,iを新たなα1a1に設定する。また、τ1,iを新たなα1,iに設定する。なお、S262は、サーバSiにおける、秘匿積和演算プログラム238の第3生成プロセス238bに対応する。サーバSiのCPU230が、第3生成プロセス238bを実行することで、開示の技術における第6の乱数の生成を行う。a′1が、第6の乱数の一例である。
【0168】
S264で、サーバSiは、乱数τ2,iを生成する。
【0169】
S266で、サーバS
iは、S264で生成した乱数τ
2,iを用いて計算を行う。第1ケースの場合、
と計算する。第2のケースの場合、
と計算する。
【0170】
S268で、サーバSiは、S266の計算結果をサーバS0に送信する。
【0171】
S270で、サーバS
0は、サーバS
iから受信した計算結果を用いて、iについて乗算し計算を行う。第1のケースの場合
と計算する。第2のケースの場合
と計算する。
【0172】
S272で、サーバS0は、S270の計算結果をサーバSiに送信する。
【0173】
S274で、サーバS
iは、S272で返却された計算結果を用いて計算を行い、秘密情報を復元する。第1のケースの場合
を計算する。第2のケースの場合
を計算する。なお、S264は、サーバS
iにおける、秘匿積和演算プログラム238の加算プロセス238cに対応する。サーバS
iのCPU230が、加算プロセス238cを実行することで、開示の技術における第6の乱数(a′)を秘匿加算する処理を行う。
【0174】
S276で、サーバSiは、S274の計算結果を用いて、新たなα2(a+a1)を設定する。また、τ2,iを新たなα2,iに設定する。
【0175】
秘匿積和演算を繰り返す場合には、上記
図9の秘匿積和演算の処理シーケンスのS240に戻る。
【0176】
以上が補正処理の処理シーケンスの説明である。以下に補正処理に関する補足を述べる。
【0177】
上記において、c=c
1=c+c
1=0としてcに関する処理を省略すれば秘匿乗算になり、α
2(a+a
1)=α
0a=1としてaに関する処理を省略すれば秘匿加算になる。また、abとcの間の+を-にすれば秘匿減算となる。また、α
2(a+a
1)からα
1a
1を秘匿減算すればα
0aが出力されるので、上記秘匿積和演算の処理シーケンスのS250におけるα
2(a+a
1)による乗算をα
0aによる除算にし、-β
2(b+b
1)を-β
1b
1にすれば
の除算が実現できる。この場合、
は
に変化させる。
【0178】
上記において、δ2{(ab+c)+(c1-a1b1)}=0の場合、ab+c=(a1b1-c1)となるが、a1,b1,c1が秘匿されている。そのため、秘密情報ab+cは漏えいせず、(a1b1-c1)=ab+cとして、a′1を秘密情報ab+cに加える新たな乱数とする。そして、新たなα2(a+a1)及びα1a1を計算することによって、演算を継続可能とする。
【0179】
δ2{(ab+c)+(c1-a1b1)},δ1(c1-a1b1)の2つが0の場合、ab+c=0が漏洩する。上記の補正処理の処理シーケンスの第1のケース及び第2のケースでは、簡単のためδ2{(ab+c)+(c1-a1b1)},δ1(c1-a1b1)を同時に復元するように読めるが、まずδ1(c1-a1b1)を復元して0である場合、以下を計算してδ2(ab+c+a′1)を復元する。
【0180】
【0181】
このとき、δ2(ab+c+a′1)が0であれば、補正処理の処理シーケンスにおけるS274の第1のケースの場合の計算を行えばよい。これによって、δ2{(ab+c)+(c1-a1b1)},δ1(c1-a1b1)の2つが0であったとしてもab+c=0は漏洩しない。
【0182】
また、後述の第5実施形態の秘匿積和演算に示すようにδ1(c1-a1b1),δ2{(ab+c)+(c1-a1b1)}のどちらかが0であった場合、0となった値を新たな乱数で置き換え、0でない値の方にその乱数を加えてもよい。
【0183】
以上説明したように、本発明の第2実施形態の手法を用いて秘匿積和演算を行うことにより、秘密情報に0を含んでいても、効率よく秘匿演算を繰り返すことができる。
【0184】
なお、復元を行う場合、δ
2{(ab+c)+(c
1-a
1b
1)}からδ
1(c
1-a
1b
1)を秘匿減算すればδ
0(ab+c)が得られ、復元者はδ
0を復元してその値を排除することにより、秘密情報による演算結果(ab+c)が得られる。この処理は復元装置によって実行されるので、復元を含む場合、後述する
図11と同様のネットワーク構成となる。
【0185】
[第3実施形態]
第3実施形態は、上記問題点3に対応する。すなわち秘匿計算の検証を実現する機能である。以下は、簡単のため秘密情報a,b,c及び演算結果に0を含まない場合に検証を行う場合を例に説明する。
【0186】
図11を参照して、本実施形態に係る秘密分散システム310の構成を説明する。
図11に示すように、秘密分散システム310は、3台の入力装置312A~312C、復元装置314、及び複数台のサーバ316
0~316
n-1を含む。以下、入力装置312A~312Cについて共通する内容については「入力装置312」、サーバ316
0~316
n-1について共通する内容については「サーバ316」とし、末尾の識別記号を省略して説明する場合もある。入力装置312、復元装置314、及びサーバ316は、ネットワークNに接続され、互いに通信可能とされる。なお、復元装置314が、第1排除部と、第1判定部とを含む検証復元装置の一例である。
【0187】
入力装置312は、秘密情報の入力者によって操作される装置である。入力装置312は、乱数を作用された所定の値を生成して、サーバ316に分散する。
【0188】
復元装置314は、秘密情報の復元者によって操作される装置である。復元装置314は、入力装置312、及びサーバ316によって公開されている値を収集して、秘匿積和演算の結果に不正がないかを検証する。
【0189】
サーバ316は、秘匿積和演算に係る計算などをする役割を持つ。
【0190】
次に、
図12を参照して、本実施形態に係る復元装置314のハードウェア構成を説明する。なお、入力装置312、及びサーバ316については第2実施形態と同様の装置構成をとることができるため詳細な説明を省略する。
【0191】
図12に示すように、復元装置314は、CPU340、一時記憶領域としてのメモリ341、不揮発性の記憶部342を含む。また、復元装置314は、表示装置343、入力I/F344、及びネットワークNに接続されるネットワークI/F345を含む。CPU340、メモリ341、記憶部342、表示装置343、入力I/F344、及びネットワークI/F345は、バス346に接続される。
【0192】
記憶部342は、HDD、SSD、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部342には、復号プログラム348が記憶される。復号プログラム348は、第1排除プロセス348aと、第1判定プロセス348bと、復元プロセス348cとを含む。CPU340は、記憶部342から復号プログラム348を読み出してからメモリ341に展開し、展開した復号プログラム348を実行する。CPU340が第1生成プログラム348の第1排除プロセス348aを実行することで、開示の技術の第1排除部として動作する。CPU340が第1生成プログラム348の第1判定プロセス348bを実行することで、開示の技術の第1判定部として動作する。CPU340が第1生成プログラム348の復元プロセス348cを実行することで、開示の技術の復元部として動作する。
【0193】
次に、
図13~15を参照して、本実施形態に係る秘密分散システム310の作用を説明する。
【0194】
<分散3>
まず、秘密情報を各サーバに分散する処理について説明する。
図13は、秘密分散システム310における分散の処理シーケンスを説明したものである。分散の処理シーケンスでは、入力装置312A~Cが持つ秘密情報をサーバ316に分散する。以下において、サーバ316は、分散の処理シーケンスの各処理に応じてn台の全てのサーバである全サーバS、及びサーバS
iのいずれかが対象であるものとして説明する。
【0195】
S310で、入力装置312Aは、乱数αi,0,…,αi,k-1(i=0,2)を生成する。
【0196】
S312で、入力装置312Aは、乱数αi=Πj=0
k-1αi,jを計算する。
【0197】
S314で、入力装置312Aは、乱数a1を生成し、秘密情報aに対して以下を計算して計算結果を公開する。また、入力装置312Aは、a1に対するハッシュ値ha1を公開する。
【0198】
【0199】
S316で、入力装置312Aは、α0,j,α2,jをサーバSiに送信する。
【0200】
S318で、入力装置312Bは、乱数βi,0,…,βi,k-1(i=0,2)を生成する。
【0201】
S320で、入力装置312Bは、乱数βi=Πj=0
k-1βi,jを計算する。
【0202】
S322で、入力装置312Bは、乱数b1を生成し、秘密情報bに対して以下を計算して計算結果を公開する。また、入力装置312Bは、b1に対するハッシュ値hb1を公開する。
【0203】
【0204】
S324で、入力装置312Bは、β0,j,β2,jをサーバSiに送信する。
【0205】
S326で、入力装置312Cは、乱数γi,0,…,γi,k-1(i=0,2)を生成する。
【0206】
S328で、入力装置312Cは、乱数γi=Πj=0
k-1γi,jを計算する。
【0207】
S330で、入力装置312Cは、乱数c1を生成し、秘密情報cに対して以下を計算して計算結果を公開する。また、入力装置312Cは、c1に対するハッシュ値hc1を公開する。
【0208】
【0209】
S332で、入力装置312Cは、γ0,j,γ2,jをサーバSiに送信する。
【0210】
以上の分散の処理シーケンスにより、サーバSiは、以下を持つことになる。
【0211】
【0212】
なお、入力装置312A、入力装置312B、及び入力装置312Cは、a1,b1,c1を秘密分散してもよい。
【0213】
<秘匿積和演算3>
次に秘匿積和演算する処理について説明する。
【0214】
秘匿積和演算の前提として、分散処理は正しく行われているものとする。ここでは変換用乱数組として([μh]i,μh,i)(h=1,…,必要個数)も持つものとする。
【0215】
以下において、c=c1=c+c1=0としてcに関する処理を省略すれば秘匿乗算になり、α2(a+a1)=α0a=1としてaに関する処理を省略すれば秘匿加算になる。また、abとcの間の+を-にすれば秘匿減算となる。また以下の秘匿積和演算において、計算結果を新たなα2(a+a1),α1a1などとするが、β1b1,β2(b+b1)またはγ1c1,γ2(c+c1)としてもよい。α2,i,α1,iについても同様である。
【0216】
図14は、秘密分散システム310における、秘匿積和演算の処理シーケンスを説明したものである。
図14では、説明の便宜のため、サーバ316のうち、サーバS
iまたは全サーバSおいて秘匿積和演算の処理シーケンスが行われるものとして説明する。
【0217】
S340で、サーバSiは、乱数δ0,i,δ2,iを生成する。
【0218】
S342で、サーバSiは、生成した乱数δ0,i,δ2,iを用いて、以下を計算して計算結果を公開する。ただし、0となる値が公開された場合、公開したサーバは不正処理があるとして処理を中断する。
【0219】
【0220】
S344で、全サーバは、以下を計算する。
【0221】
【0222】
S346で、サーバSiは、以下を計算して復元し、復元したδ2{(ab+c)+(c1-a1b1)},δ0(ab+c)を公開する。
【0223】
【0224】
S348は、演算を継続する場合の処理である。S348で、サーバSiは、δ0(ab+c),δ2{(ab+c)+(c1-a1b1)を新たなα0a,α2(a+a1)に設定し、新たなα0a,α2(a+a1)に合わせて、δ0,i,δ2,iを新たなα0,i,α2,iに設定してS340に戻る。
【0225】
<検証・復元3>
次に、検証処理について説明する。
図15は、秘密分散システム310における検証の処理シーケンスを説明したものである。検証の処理シーケンスにおいて、入力装置312A、入力装置312B、及び入力装置312Cは、それぞれa
1,b
1,c
1を公開しているものとする。
【0226】
S360で、復元装置314は、サーバSiからδ0,i,δ2,iを収集する。
【0227】
S362で、復元装置314は、収集したδ0,i,δ2,iの積δ0,δ2を計算し、積δ0,δ2を用いて以下を計算して公開する。
【0228】
【0229】
なお、S362は、復元装置314における、復号プログラム348の第1排除プロセス338aに対応する。復元装置314のCPU340が、第1排除プロセス348aを実行することで、開示の技術における第1排除部の処理を行う。上記の計算が、秘密情報同士の演算結果に対して乱数を作用させて生成した第3の値δ2{(ab+c)+(c1-a1b1)}とδ0(ab+c)を用いて秘密情報(ab+c)と第4の乱数δ2,δ0に相当する値を排除し、判定を行うための第1の乱数同士の演算結果を得ることに対応する。
【0230】
S364で、復元装置314は、入力装置312A、入力装置312B、及び入力装置312Cが公開しているa1,b1,c1及びそのハッシュ値を収集する。
【0231】
S366で、復元装置314は、公開されているa1,b1,c1と、そのハッシュ値が一致するかを検証し、ハッシュ値が正しければS368へ移行し、正しくなければS374へ移行して不正検出とする。
【0232】
S368で、復元装置314は、公開されているa1,b1,c1を用いてc1-a1b1を計算する。
【0233】
S370で、復元装置314は、公開されているa1,b1,c1から計算されたc1-a1b1と、S362で計算されたc1-a1b1が等しいか検証し、計算結果が正しければS372へ移行し、正しくなければS374へ移行して不正検出とする。
【0234】
なお、S370は、復元装置314における、復号プログラム348の第1判定プロセス348bに対応する。復元装置314のCPU340が、第1判定プロセス348bを実行することで、開示の技術における第1判定部の処理を行う。
【0235】
S372で、復元装置314は、検証結果が正しい場合、S362で用いられたδ0(ab+c)/δ0をab+cと判定する。
【0236】
S374で、検証結果が不正検出であるものとする。
【0237】
以上が、検証の処理シーケンスである。なお、a1,b1,c1が秘密分散されている場合、S366に対応する処理として、各サーバでa1,b1,c1の分散値を公開して、復元装置314でa1,b1,c1を復元してもよい。
【0238】
また、演算が繰り返されている場合、S362において乱数による最終的な演算結果を復元し、S364で全乱数を収集して、その乱数を用いて同様の演算を構成し、S362の結果とS368の結果が一致するかを検証する。
【0239】
攻撃者が入力値や乱数を知らない場合、(c1-a1b1)が一致するように操作できないことが言える。よって、その計算に使用したδ0(ab+c)/δ0は正しいといえる。
【0240】
また、検証処理は演算の最後でなく、任意の積和演算単位で検証することも可能である。
【0241】
また、本実施形態における検証の処理シーケンスは復元装置314が行うものとしたが、サーバSiがδ0,i,δ2,iを公開すればどの装置でも公開値から検証可能である。この場合、復元者は不正ができないこととなる。
【0242】
ただし、サーバSiがδ0,i,δ2,iを公開する場合、例えば入力者Aが攻撃者で、分散処理においてハッシュ値を公開したa1と異なるa′1を用いてa+a′1を入力し、a1を公開しているとすれば、S370における検証結果は不正となるが、S362においてδ0(ab+c)/δ0は復元されているので、攻撃者のみ演算結果が正しいことを知ることができる。よって、S360、S362を以下S360′~S364′のように変形し、S370の結果が正しい場合に以下S371′を追加して処理するようにすれば、δ0(ab+c)は秘匿されたままa1b1+c1が計算されるので、攻撃者のみ演算結果を知ることを防止できる。また、下記S360′~S364′における秘匿計算を秘匿積和演算の一環と考えれば、下記S360′~S364′における処理も検証されるため不正を行えば検証される。また、S374を復元装置314ではなく、サーバSiがδ0,i,[μ7]i,[μ8]iを公開すれば、公開の処理とできる。この対策は以降の実施形態においても適用できる。
【0243】
S360′では、サーバSiは、(1/δ0,iμ7,i),(1/δ2,iμ8,i)を復元装置314に送信する。
【0244】
S362′では、復元装置314は、受信したその積(1/δ0μ7),(1/δ2μ8)を公開して、各サーバが計算した以下を収集する。
【0245】
【0246】
S364′では、復元装置314は、収集した上記の計算結果を復元してその結果を公開する。
【0247】
S371′では、復元装置314は、S370の結果が正しいとき、δ0,i,[μ7]i,[μ8]iを収集してS364′の結果を検算し、計算したδ0(ab+c)/δ0をab+cとする。検算結果が一致しない場合、[a1b1+c1]iが一致しないサーバを不正とする。
【0248】
ただし、入力者が攻撃者の場合、以下のようにすれば不正検出されずに、偽の答えを復元者に得させることができる。例えば、ユーザCはc,c1を知っており、a,bと独立であるので、cに関連する部分のみ正しくない処理をしてもc1と一致させることが可能である。この対策は次の実施形態で示される。
【0249】
よって、本実施形態は入力者が不正をしない場合、すなわち攻撃者がk-1台までのサーバまたは入力を知らない外部攻撃者の場合に対して有効である。
【0250】
また、復元装置314は、第1排除部から得られる値から第1の秘密情報同士の演算結果を得る演算結果を得る復元部を含む秘匿演算装置として機能する。復元装置314は、上記、本実施形態の各処理シーケンスを経て、復元プロセス348cの実行によって、S372から得られる値を取得し、第1の秘密情報同士の演算結果(ab+c)を得る。
【0251】
以上説明したように、本発明の第3実施形態の手法を用いて秘匿積和演算を検証することにより、秘匿積和演算の不正を検出することができる。
【0252】
[第4実施形態]
第4実施形態は、第3実施形態では入力を知るユーザの不正は防げなかった点に着目し、本実施形態ではユーザの結託を含む不正を防止することができる手法を示す。
【0253】
第4実施形態の構成は上記
図5の第2実施形態と同様の構成をとることができ、秘密分散システム410において、入力装置212を入力装置412に、サーバ216をサーバ416に置き換えた構成とすればよい。なお、サーバ416が分散装置の一例であり、秘密分散システム410が分散システムの一例である。
【0254】
秘密分散システム410において、不正の防止のためには、a1,b1,c1を入力装置412だけで生成しないようにする。これによって、例えば、入力装置412Cを操作するユーザCはc1を知らないため、Cに関する部分を不正にc1に一致させられなくなる。また、本実施の形態は第3の実施の形態と同様に秘密情報に0は含まないが、第1の実施の形態に示す変換用乱数組([εh]i,εh,i)(h=1,…,12)が事前に配布されているものとする。
【0255】
次に、
図16を参照して、本実施形態に係るサーバ416のハードウェア構成を説明する。なお、入力装置412については第2実施形態と同様のハードウェア構成をとることができるため、詳細な説明を省略する。
【0256】
図16に示すように、サーバ416は、CPU430、一時記憶領域としてのメモリ431、不揮発性の記憶部432を含む。また、サーバ416は、表示装置433、入力I/F434、及びネットワークNに接続されるネットワークI/F435を含む。CPU430、メモリ431、記憶部432、表示装置433、入力I/F434、及びネットワークI/F435は、バス436に接続される。
【0257】
記憶部432は、HDD、SSD、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部432には、秘匿積和演算プログラム238、及び第4生成プログラム440が記憶される。CPU430は、記憶部432から第4生成プログラムを読み出してからメモリ431に展開し、展開した第4生成プログラム440を実行する。CPU430が第4生成プログラム440を実行することで、開示の技術の第4生成部として動作する。
【0258】
次に、
図17を参照して、本実施形態に係る秘密分散システム410の作用を説明する。第4実施形態は分散の処理シーケンスが、第3実施形態と異なるため、分散の処理シーケンスについてのみ説明する。
図17は、秘密分散システム410における分散の処理シーケンスを説明したものである。
【0259】
<分散4>
S410で、入力装置412Aは、k個の乱数α0,0,…,α0,k-1生成し、乱数α0=Πj=0
k-1α0,jを計算する。
【0260】
S412で、入力装置412Aは、k個の乱数の組(α1a,0,…,α1a,k-1),(β1a,0,…,β1a,k-1),(γ1a,0,…,γ1a,k-1)を生成し、乱数α1a=Πj=0
k-1α1a,j,β1a=Πj=0
k-1β1b,j,γ1a=Πj=0
k-1γ1a,jを計算する。
【0261】
S414で、入力装置412Aは、秘密情報aに対してα0a=α0×aを計算して公開する。
【0262】
S416で、入力装置412Aは、(α1a,i,β1a,i,γ1a,i,α0,i)をサーバSiに送信する。
【0263】
S418で、入力装置412Aは、乱数a1a,b1a,c1aを生成する。
【0264】
S420で、入力装置412Aは、S418で生成した乱数を用いて、以下を計算してα1aa1a,β1ab1a,γ1ac1aを公開する。また、入力装置412Aは、乱数a1a,b1a,c1aを保持し、そのハッシュ値ha1,a,hb1,a,hc1,aを公開する。
【0265】
【0266】
S422で、入力装置412Bは、k個の乱数β0,0,…,β0,k-1を生成し、乱数β0=Πj=0
k-1β0,jを計算する。
【0267】
S424で、入力装置412Bは、k個の乱数の組(α1b,0,…,α1b,k-1),(β1b,0,…,β1b,k-1),(γ1b,0,…,γ1b,k-1)を生成し、乱数α1b=Πj=0
k-1α1b,j,β1b=Πj=0
k-1β1b,j,γ1b=Πj=0
k-1γ1b,jを計算する。
【0268】
S426で、入力装置412Bは、秘密情報bに対してβ0b=β0×bを計算して公開する。
【0269】
S428で、入力装置412Bは、(α1b,i,β1b,i,γ1b,i,β0,i)をサーバSiに送信する。
【0270】
S430で、入力装置412Bは、ユーザBは乱数a1b,b1b,c1bを生成する。
【0271】
S432で、入力装置412Bは、S430で生成した乱数を用いて、以下を計算してα1ba1b,β1bb1b,γ1bc1bを公開する。また、ユーザBは乱数a1b,b1b,c1bを保持し、そのハッシュ値ha1,b,hb1,b,hc1,bを公開する。
【0272】
【0273】
S434で、入力装置412Cは、k個の乱数γ0,0,…,γ0,k-1を生成し、乱数γ0=Πj=0
k-1γ0,jを計算する。
【0274】
S436で、入力装置412Cは、k個の乱数の組(α1c,0,…,α1c,k-1),(β1c,0,…,β1c,k-1),(γ1c,0,…,γ1c,k-1)を生成し、乱数α1c=Πj=0
k-1α1c,j,β1c=Πj=0
k-12β1c,j,γ1c=Πj=0
k-1γ1c,jを計算する。
【0275】
S438で、入力装置412Cは、ユーザCは秘密情報cに対してγ0c=γ0×cを計算して公開する。
【0276】
S440で、入力装置412Cは、(α1c,i,β1c,i,γ1c,i,γ0,i)をサーバSiに送信する。
【0277】
S442で、入力装置412Cは、乱数a1c,b1c,c1cを生成する。
【0278】
S444で、入力装置412Cは、S442で生成した乱数を用いて、以下を計算してα1ca1c,β1cb1c,γ1cc1c公開する。また、ユーザCは乱数a1c,b1c,c1cを保持し、そのハッシュ値ha1,c,hb1,c,hc1,cを公開する。
【0279】
【0280】
以上が入力装置412A~Cでの処理である。以下からはサーバSiでの処理である。
【0281】
S446で、サーバSiは、乱数α1,i,β1,i,γ1,iを生成する。
【0282】
S448で、サーバSiは、S446で生成した乱数を用いて、以下を計算し、計算結果を公開する。ただし、0となる値が公開された場合、公開したサーバは不正処理があるとして処理を中断する。
【0283】
【0284】
S450で、サーバSiは、iに関する乗算により、以下を計算する。
【0285】
【0286】
S452で、サーバSiは、変換用乱数組[ε1]i~[ε9]iを用いて以下を計算し、計算結果を公開する。
【0287】
【0288】
なお、S450は、サーバSiにおける、第4生成プログラム440に対応する。サーバSiのCPU430が、第4生成プログラム440を実行することで、開示の技術における第4生成部の処理を行う。例えば計算の過程で、乱数a1を、a1a,a1b,a1cを用いて生成する。a1a,a1b,a1cが、第1の秘密情報の生成者以外が生成した乱数の一例である。
【0289】
S454で、サーバSiは、α1a1,β1b1,γ1c1を復元する。
【0290】
S456で、サーバSiは、乱数α2,i,β2,i,γ2,iを生成する。
【0291】
S458で、サーバSiは、S456で生成した乱数を用いて、以下を計算し、計算結果を公開する。ただし、0となる値が公開された場合、公開したサーバは不正処理があるとして処理を中断する。
【0292】
【0293】
S460で、サーバSiは、iに関する乗算により、以下を計算する。
【0294】
【0295】
S462で、サーバSiは、以下を計算し、計算結果を公開する。
【0296】
【0297】
S464で、サーバSiは、α2(a+a1),β2(b+b1),γ2(c+c1)を復元する。
【0298】
以上の分散の処理シーケンスにより、サーバSiは、は変換用乱数組の他に以下を持つことになる。なお、入力装置412A、入力装置412B、及び入力装置412Cはそれぞれa1h,b1h,c1h(h=a,b,c)を秘密分散してもよい。
【0299】
【0300】
以上が本実施形態の分散の処理シーケンスである。
【0301】
本実施の形態に対する秘匿積和演算は第3実施形態と同様であり、検証も第3実施形態と基本的には同じである。ただし、a1,a,a1,b,a1,c,b1,a,b1,b,b1,c,c1,a,c1,b,c1,cをハッシュ値で検証し、a1,b1,c1をa1=a1,a+a1,b+a1,c,b1=b1,a+b1,b+b1,c,c1=c1,a+c1,b+c1,cによって計算することだけが異なる。また、演算が繰り返された場合、全てのa1h,b1h,c1h(h=a,b,c)を集めて乱数による演算部分の正当性を検証する。
【0302】
安全性に関しては、入力者が攻撃者ではない場合、すなわち攻撃者がk-1台までのサーバまたは外部攻撃者である場合は第3の実施の形態と同様に安全であることが言える。それに加えて、本実施形態ではa1,b1,c1を入力装置412Aを操作するユーザA、入力装置412Bを操作するユーザB、及び入力装置412Cを操作するユーザCの全員で生成するため、入力者が攻撃者となっても安全であることが以下のように言える。
【0303】
例えば、ユーザCが攻撃者である場合、ユーザCはcを知るが、c1を知らない。これはc1はユーザA,B,Cによって作られるためである。よって、ユーザCはCに関する部分を不正に操作しても、c1を知らないため最終結果を0にできない。また、ユーザCはq4-q6を操作できるが、c1を知らないため、他の値を調整できない。これはユーザ2者の結託に関しても言うことができ、(c1-a1b1)′-(c1-a1b1)=0であれば不正が行われていないことが言える。
【0304】
ただし、a,b,cの値を知る全員が結託すれば、(c1-a1b1)′-(c1-a1b1)=0としながら、異なる値を秘密情報による計算結果とすることができる。1回の秘匿積和演算において全員が結託することは想定しないが、秘匿積和演算を繰り返す場合、1つの積和演算を実行する全入力者が結託すれば、上記差分値を0にしたまま、不正な値を計算結果とすることができる。よって、秘匿積和演算を繰り返す場合、1回の積和演算を構成する入力者は全員結託することはないという前提を置く。また、秘匿積和演算を繰り返し、1つの積和演算に関する入力者全員の結託が考えられる場合、乱数a1,b1,c1も漏洩する。よって、演算参加者が乱数a1,b1,c1を知らないようにするため、各サーバが予め保有する変換用乱数組を用いる。このようにすると、分散4は以下のように非常に簡単にできる。
【0305】
[第4実施形態の変形例]
以下に、第4実施形態の変形例として、変換用乱数組([λ]j,λi),([ε]j,εi),([μ]j,μi)を用いる例を示す。以下におけるa1等はα1,iの乗算によって構成され、a1等の値は誰も知らないので安全である。以下の[α2(a+a1)]iなどの生成において、a=0の場合でも利用できる手法も示す。
【0306】
図18は、変形例における分散の処理シーケンスを説明したものである。
図18のシーケンスにおいて、以下のS470~S490の処理が行われる。なお、
図18において各処理は簡略化して記載するものとする。
【0307】
<分散4′>
S470で、入力装置412Aは、乱数α2,j(j=0,…,k-1)を生成して乱数α2=Πj=0
k-1α2,jを計算し、秘密情報aに対してα2a=α2×aを計算して秘密分散する。
【0308】
S472で、入力装置412Aは、α2,j,[α2a]jをサーバSjに送信する。
【0309】
S474で、入力装置412Bは、乱数β2,j(j=0,…,k-1)を生成して乱数β2=Πj=0
k-1β2,jを計算し、秘密情報bに対してβ2b=β2×bを計算して秘密分散する。
【0310】
S476で、入力装置412Bは、β2,j,[β2b]jをサーバSjに送信する。
【0311】
S478で、入力装置412Cは、乱数γ2,j(j=0,…,k-1)生成して乱数γ2=Πj=0
k-1γ2,jを計算し、秘密情報cに対してγ2c=γ2×cを計算して秘密分散する。
【0312】
S480で、入力装置412Cは、γ2,j,[γ2c]jをサーバSjに送る。
【0313】
S482で、サーバSiは乱数a1,i,b1,i,c1,iを定め、λi=α1,ia1,i,εi=β1,ib1,i,μi=γ1,ic1,iと分解する。サーバSiはa1,i,b1,i,c1,iのハッシュ値を公開する。
【0314】
S484で、サーバSiは、[λ]i,[ε]i,[μ]iを公開してλ=α1a1,ε=β1b1,μ=γ1c1を復元する。ただし、α1=Πi=0
k-1α1,i,a1=Πi=0
k-1a1,i,β1=Πi=0
k-1β1,i,b1=Πi=0
k-1b1,i,γ1=Πi=0
k-1γ1,i,c1=Πi=0
k-1c1,iとする。
【0315】
S486で、サーバSiは、乱数α2,i,β2,i,γ2,iを生成し、以下を計算して公開する。
【0316】
【0317】
S488で、サーバSiは、以下を計算する。
【0318】
【0319】
S490で、サーバSiは、以下を計算して復元し、α2(a+a1),β2(b+b1),α2(a+a1)を公開する。
【0320】
【0321】
以上説明したように、本発明の第4実施形態の手法を用いて秘密情報を分散することにより、秘密情報に0を含んでいても、ユーザの結託を含む不正を防止することができる。
【0322】
[第5実施形態]
第5実施形態は、秘密情報に0を含む場合の演算結果の検証法を示すものである。
【0323】
まず第5実施形態の手法の前提について説明する。第3、第4実施形態では秘密情報に乱数をかけたα0aを公開するため、秘密情報が0、例えばa=0の場合α0a=0となり、秘密情報が漏洩する。それに対して、第2実施形態では秘密情報に乱数をかけた値を生成しないため、秘密情報が0であっても漏洩しない。よって、その原理を生かして秘密情報に0を含む場合の検証を行う。
【0324】
また、本実施形態の分散では簡単のため、第3実施形態の分散と同様にユーザからの攻撃がない場合を考える。ユーザからの攻撃に対しても安全性を確保したい場合、下記におけるa1などの乱数を、第4実施形態の変形例のように入力者が直接生成せず、変換用乱数組を用いて生成すれば良い。この場合、入力装置側では生成されるα2(a+a1)のα2もa1も知ることができず、不正防止が可能となる。また、b1,c1,a2,b2,c2についても同様である。また、本実施形態の秘匿積和演算では、サーバSiは変換用乱数組として([μh]i,μh,i)(h=1,…,必要個数)を持つものとする。
【0325】
第5実施形態の構成は上記
図11の第3実施形態と同様の構成をとることができ、秘密分散システム510において、入力装置312を入力装置512に、復元装置314を復元装置514に、サーバ316をサーバ516に置き換えた構成とすればよい。なお、復元装置514が、第2排除部と、第2判定部とを含む検証復元装置の一例である。
【0326】
次に、
図19を参照して、本実施形態に係る復元装置514のハードウェア構成を説明する。
【0327】
図19に示すように、復元装置514は、CPU540、一時記憶領域としてのメモリ541、不揮発性の記憶部542を含む。また、復元装置514は、表示装置543、入力I/F544、及びネットワークNに接続されるネットワークI/F545を含む。CPU540、メモリ541、記憶部542、表示装置543、入力I/F544、及びネットワークI/F545は、バス546に接続される。
【0328】
記憶部542は、HDD、SSD、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部542には、復号プログラム548が記憶される。復号プログラム548は、第2排除プロセス548aと、第2判定プロセス548bと、復元プロセス548cとを含む。CPU540は、記憶部542から復号プログラム548を読み出してからメモリ541に展開し、展開した復号プログラム548を実行する。CPU540が復号プログラム548の第2排除プロセス548aを実行することで、開示の技術の第2排除部として動作する。CPU540が復号プログラム548の第2判定プロセス548bを実行することで、開示の技術の第2判定部として動作する。CPU540が復号プログラム548の復元プロセス548cを実行することで、開示の技術の復元部として動作する。
【0329】
なお、他の各装置のハードウェア構成は第3実施形態と同様のハードウェア構成をとることができるため、詳細な説明を省略する。
【0330】
次に、
図20~23を参照して、本実施形態に係る秘密分散システム510の作用を説明する。
【0331】
<分散5>
まず、秘密情報を各サーバに分散する処理について説明する。
図20は、秘密分散システム510における分散の処理シーケンスを説明したものである。分散の処理シーケンスでは、入力装置512A~Cが持つ秘密情報をサーバ516に分散する。以下において、サーバ516は、分散の処理シーケンスの各処理に応じてn台の全てのサーバである全サーバS、及びサーバS
iのいずれかが対象であるものとして説明する。
【0332】
S510で、入力装置512Aは、乱数αi,0,…,αi,k-1(i=1,..,4)を生成する。
【0333】
S512で、入力装置512Aは、乱数αi=Πj=0
k-1αi,jを計算する。
【0334】
S514で、入力装置512Aは、乱数a1,a2を生成し、秘密情報aに対して以下を計算して計算結果を公開する。また、入力装置512Aは、a1,a2に対するハッシュ値ha1,ha2を公開する。
【0335】
【0336】
S516で、入力装置512Aは、α0,j,..,α4,jをサーバSiに送信する。
【0337】
S518で、入力装置512Bは、乱数βi,0,…,βi,k-1(i=1,..,4)を生成する。
【0338】
S520で、入力装置512Bは、乱数βi=Πj=0
k-1βi,jを計算する。
【0339】
S522で、入力装置512Bは、乱数b1,b2を生成し、秘密情報bに対して以下を計算して計算結果を公開する。また、入力装置512Bは、b1,b2に対するハッシュ値hb1,hb2を公開する。
【0340】
【0341】
S524で、入力装置512Bは、β0,j,..,β4,jをサーバSiに送信する。
【0342】
S526で、入力装置512Cは、乱数γi,0,…,γi,k-1(i=1,..,4)を生成する。
【0343】
S528で、入力装置512Cは、乱数γi=Πj=0
k-1γi,jを計算する。
【0344】
S530で、入力装置512Cは、乱数c1,c2を生成し、秘密情報cに対して以下を計算して計算結果を公開する。また、入力装置512Cは、c1,c2に対するハッシュ値hc1,hc2を公開する。
【0345】
【0346】
S532で、入力装置512Cは、γ0,j,..,γ4,jをサーバSiに送信する。
【0347】
以上の分散の処理シーケンスにより、サーバSiは、以下を持つことになる。
【0348】
【0349】
なお、入力装置512A、入力装置512B、及び入力装置512Cは、a1,b1,c1,a2,b2,c2を秘密分散してもよい。
【0350】
<秘匿積和演算5>
次に秘匿積和演算する処理について説明する。
図21は、秘密分散システム510における、秘匿積和演算の処理シーケンスを説明したものである。
図21では、説明の便宜のため、サーバ516のうち、サーバS
iまたは全サーバSおいて秘匿積和演算の処理シーケンスが行われるものとして説明する。
【0351】
S540で、サーバSiは、乱数δ1,i,δ2,i,δ3,i,δ4,iを生成する。
【0352】
S542で、サーバSiは、生成した乱数δ1,i,δ2,i,δ3,i,δ4,iを用いて、以下を計算して計算結果を公開する。ただし、0となる値が公開された場合、公開したサーバは不正処理があるとして処理を中断する。
【0353】
【0354】
S544で、全サーバは、以下を計算する。
【0355】
【0356】
S546で、サーバSiは、以下を計算して復元し、復元したδ2{(ab+c)+(c1-a1b1)},δ1(c1-a1b1),δ4{(ab+c)+(c2-a2b2)},δ3(c2-a2b2)を公開する。
【0357】
【0358】
S548は、演算を継続する場合の処理である。S548で、サーバSiは、δ1(c1-a1b1),δ2{(ab+c)+(c1-a1b1)},δ3(c2-a2b2),δ4{(ab+c)+(c2-a2b2)}が0でなければ、新たなα1a1,α2(a+a1),α3a2,α4(a+a2)に設定し、δ1,i,δ2,i,δ3,i,δ4,iを新たなα1,i,α2,i,α3,i,α4,iに設定してS540に戻る。
【0359】
<補正処理5>
次に、S546の計算結果が0であった場合の補正処理について説明する。上述した
図21の秘匿積和演算の処理シーケンスにおいて、δ
2{(ab+c)+(c
1-a
1b
1)},δ
1(c
1-a
1b
1)の少なくとも1つが0の場合、以下の補正処理を行う。
図22は、秘密分散システム510における補正処理の処理シーケンスを説明したものである。補正処理の処理シーケンスは、サーバS
iで行われるものとして説明する。また、δ
2{(ab+c)+(c
1-a
1b
1)}=0の場合を第1のケース、δ
1(c
1-a
1b
1)=0の場合を第2のケースとして、第1のケース及び第2のケースのいずれか少なくとも一つに当てはまる場合の計算例を説明する。
【0360】
S560で、サーバSiは、新たな乱数τ0,iとwiを生成し、公開する。
【0361】
S562で、サーバSiは、τ0w=Πτ0,iwiを計算する。また、サーバSiは、wiのハッシュ値を公開する。
【0362】
S564で、サーバS
iは、乱数τ
1,i,τ
2,iを生成して、生成した乱数を用いて以下を計算する。第1のケースの場合、
を計算する。第2のケースの場合、
を計算する。
【0363】
S566で、サーバSiは、S564の計算結果を公開する。ただし、0となる値が公開された場合、公開したサーバは不正処理があるとして処理を中断する。
【0364】
S568で、サーバS
iは公開された計算結果を用いて、iについて乗算し以下を計算する。第1のケースの場合、
。
第2のケースの場合、
。
【0365】
S570で、サーバS
iは、以下の計算を行い、新たな値の設定を行う。第1のケースの場合、
と考えて、τ
0wを新たなτ
2{(ab+c)+(c′
1-a
1b
1)}とする。また、サーバS
iは以下を計算して復元し公開し、それらを新たなα
1a
1,α
2(a+a
1)とし、τ
1,i,τ
2,i=τ
0,iを新たなα
1,i,α
2,iとして上記
図21の秘匿積和演算の処理シーケンスのS540に戻る。
【0366】
【0367】
第2のケースの場合、
と考えて、τ
0wを新たなτ
1(c´
1-a
1b
1)とする。また、サーバS
iは以下を計算して復元し公開し、それらを新たなα
1a
1,α
2(a+a
1)とし、τ
1,i=τ
0,i,τ
2,iを新たなα
1,i,α
2,iとして上記
図21の秘匿積和演算の処理シーケンスのS540に戻る。ただし、c´
1=c
1+wとする。
【0368】
【0369】
以上が補正処理の処理シーケンスである。なお、δ3(c2-a2b2),δ4{(ab+c)+(c2-a2b2)}が0の場合も同様である。
【0370】
<検証・復元5>
次に、検証処理について説明する。
図23は、秘密分散システム510における検証の処理シーケンスを説明したものである。検証の処理シーケンスにおいて、入力装置512A、入力装置512B、及び入力装置512Cは、a
1,b
1,c
1,a
2,b
2,c
2を公開しているものとする。また、補正処理を行っている場合、w
iを生成したサーバはその値とハッシュ値を公開する。以降、w
iについてはc´
1=c
1+wよりc´
1に含まれるが、簡単のためc´
1もc
1として表現する。
【0371】
S580で、復元装置514は、サーバSiからδ2,i,δ4,iを収集する。
【0372】
S582で、復元装置514は、収集したδ2,i,δ4,iの積δ2,δ4を計算し、積δ2,δ4を用いて以下を計算して公開する。
【0373】
【0374】
なお、S582は、復元装置514における、復号プログラム548の第2排除プロセス548aに対応する。復元装置514のCPU540が、第2排除プロセス548aを実行することで、開示の技術における第2排除部の処理を行う。上記の計算が、複数の第3の値δ2{(ab+c)+(c1-a1b1)},δ4{(ab+c)+(c2-a2b2)}から各々の第4の乱数δ2,δ4に相当する値を排除することに対応する。
【0375】
S584で、復元装置514は、入力装置512A、入力装置512B、及び入力装置512Cが公開しているa1,b1,c1,a2,b2,c2及びそのハッシュ値を収集する。
【0376】
S586で、復元装置514は、公開されているa1,b1,c1,a2,b2,c2と、そのハッシュ値が一致するかを検証し、ハッシュ値が正しければS588へ移行し、正しくなければS594へ移行して不正検出とする。なお、途中演算結果が0になっている場合、復元装置514は新たに定めたwiを集めて公開し、そのハッシュ値を検証する。
【0377】
S588で、復元装置514は、公開されているa1,b1,c1,a2,b2,c2を用いて(c1-a1b1)-(c2-a2b2)を計算する。なお、途中演算結果が0になり補正した場合、c1,c2はc´1,c´2となる。
【0378】
S590で、復元装置514は、公開されているa1,b1,c1,a2,b2,c2から計算された(c1-a1b1)-(c2-a2b2)と、S582で復元値(つまり積δ2,δ4)から計算された(c1-a1b1)-(c2-a2b2)が等しいか検証し、計算結果が正しければS590へ移行し、正しくなければS594へ移行して不正検出とする。
【0379】
なお、S590は、復元装置514における、復号プログラム548の第2判定プロセス548bに対応する。復元装置514のCPU540が、第2判定プロセス548bを実行することで、開示の技術における第2判定部の処理を行う。また、δ1(c1-a1b1)=0で補正した場合におけるc´1=c1+wが第6の乱数に対応する。S582の計算結果である(c1-a1b1)-(c2-a2b2)が第1の乱数同士の演算結果に対応する。上述したようにここでのc1,c2はc´1,c´2となる。
【0380】
S592で、復元装置514は、検証結果が正しい場合、S582で用いられたδ2{(ab+c)+(c1-a1b1)}/δ2から公開値による(c1-a1b1)を差し引いた値をab+cとする。
【0381】
S594で、検証結果が不正検出であるものとする。
【0382】
以上が、検証の処理シーケンスである。なお、a1,b1,c1,a2,b2,c2が秘密分散されている場合、S586に対応する処理として、各サーバでa1,b1,c1,a2,b2,c2の分散値を公開して、復元装置514でa1,b1,c1,a2,b2,c2を復元してもよい。
【0383】
また、演算が繰り返されている場合、S582において乱数による最終的な演算結果を計算し、S584で全乱数を収集して、その乱数を用いて同様の演算を構成し、S582で計算した結果とS588で計算した結果が一致するかを検証する。
【0384】
また、上記においてδ2{(ab+c)+(c1-a1b1)}とδ4{(ab+c)+(c2-a2b2)}は簡単のため同形式のものを用いたが、どちらも(ab+c)を含んでいれば、異なる形式の演算であっても、その差分が乱数のみになれば問題ない。
【0385】
また、第2実施形態と同様の変形を行えば、秘匿減算及び秘匿除算も実現できる。また、本実施の形態の安全性は第3実施形態と同様に秘密情報及び乱数を知らない攻撃者に対しては安全であることが言える。ただし、これも第3実施形態と同様に例えばユーザCはc,c1,c2を知るのでその間の関係を調整することによって不正ができる。よって、乱数a1,b1,c1,a2,b2,c2は入力装置の入力者が生成せず、第4実施形態に示したように分散4または分散4’のようにして生成すればよい。
【0386】
また、補正処理5においてδ2{(ab+c)+(c1-a1b1)}やδ4{(ab+c)+(c2-a2b2)}が補正されたとしても安全であることが言える。
【0387】
以上により、問題点1~3の全てを解決できる。
【0388】
また、復元装置514は、第2排除部から得られる値から第1の秘密情報同士の演算結果を得る演算結果を得る復元部を含む秘匿演算装置として機能する。復元装置514は、上記、本実施形態の各処理シーケンスを経て、復元プロセス548cの実行によって、S592から得られる値を取得し、第1の秘密情報同士の演算結果(ab+c)を得る。
【0389】
以上説明したように、本発明の第5実施形態の手法を用いて秘密情報を分散することにより、秘密情報に0を含んでいても、ユーザの結託を含む不正を防止することができる。また、また、第5実施形態の手法を用いて秘匿積和演算を行うことにより、秘密情報に0を含んでいても、効率よく秘匿演算を繰り返すことができる。また、第5実施形態の手法を用いて秘匿積和演算を検証することにより、秘匿積和演算の不正を検出することができる。
【0390】
[第6実施形態]
第6実施形態は、第1~第5実施形態で説明した提案手法を変形してブロックチェーンに応用する場合を示す。すなわち、値を登録する入力者が操作する入力装置と、その値を検証してブロックチェーンに公開する検証者が操作する検証装置と、ブロックチェーン装置と、ブロックチェーンに公開された値を確認する復元者が操作する復元装置からなるシステムを考える。入力装置は検証装置には登録する値を知らせるが、復元装置に対しては登録した値を秘匿したいものとする。ただし、ブロックチェーンでは公開性、及び検証性が重要なので、秘匿した登録値から合計値や各種統計値などの演算(以降、検証用演算と呼ぶ)を復元装置が実行でき、その演算結果を検証できるようにする。すなわち、登録値は1台のブロックチェーン装置に秘匿されて公開されるが、その登録値を用いた検証用演算は誰でも実行でき、その合計値や統計値などを知ることができ、かつその演算結果が正しいことを検証できることが大きな特徴である。
【0391】
図24を参照して、本実施形態に係る秘密分散システム610の構成を説明する。
図24に示すように、秘密分散システム610は、入力装置6、復元装置614、ブロックチェーン装置616、及び検証装置618を含む。各装置はネットワークNに接続され、互いに通信可能とされる。なお、ブロックチェーン装置616が演算装置の一例であり、復元装置614が検証部を含む検証復元装置の一例であり、秘密分散システム610が秘匿演算検証復元システムの一例である。
【0392】
以降において、ブロックチェーン装置616をS1、登録値を秘密情報と呼び、k=2の場合で説明する(kは任意に設定できるが、1台のサーバで演算を行う場合、k=2が最も効率的)。また、簡単のため実行する検証用演算を積和演算とし、登録値には0を含まず、演算結果も0を含まないとする。また以下では、秘密情報に対する演算と乱数に対する演算を同じ処理とするためにα2(a+a1),α1a1,α0aを用いる場合を示す。以下の例では入力者がa,b,cの値を発生毎に検証者に送り、検証者がそれらを確認した後、秘匿して公開する場合を示す。
【0393】
次に、
図25を参照して、本実施形態に係る復元装置614のハードウェア構成を説明する。
【0394】
図25に示すように、復元装置614は、CPU640、一時記憶領域としてのメモリ641、不揮発性の記憶部642を含む。また、復元装置614は、表示装置643、入力I/F644、及びネットワークNに接続されるネットワークI/F645を含む。CPU640、メモリ641、記憶部642、表示装置643、入力I/F644、及びネットワークI/F645は、バス646に接続される。
【0395】
記憶部642は、HDD、SSD、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部642には、検証復元プログラム648が記憶される。CPU640は、記憶部642から検証復元プログラム648を読み出してからメモリ641に展開し、展開した検証復元プログラム648を実行する。CPU640が検証復元プログラム648を実行することで、開示の技術の検証部として動作する。
【0396】
次に、
図26を参照して、本実施形態に係るブロックチェーン装置616のハードウェア構成を説明する。
【0397】
図26に示すように、ブロックチェーン装置616は、CPU650、一時記憶領域としてのメモリ651、不揮発性の記憶部652を含む。また、ブロックチェーン装置616は、表示装置653、入力I/F654、及びネットワークNに接続されるネットワークI/F655を含む。CPU650、メモリ651、記憶部652、表示装置653、入力I/F654、及びネットワークI/F655は、バス656に接続される。
【0398】
記憶部652は、HDD、SSD、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部652には、演算プログラム658が記憶される。CPU650は、記憶部652から演算プログラム658を読み出してからメモリ651に展開し、展開した演算プログラム658を実行する。CPU650が演算プログラム658を実行することで、開示の技術の演算部として動作する。
【0399】
次に、
図27を参照して、本実施形態に係る検証装置618のハードウェア構成を説明する。
【0400】
図27に示すように、検証装置618は、CPU660、一時記憶領域としてのメモリ661、不揮発性の記憶部662を含む。また、検証装置618は、表示装置663、入力I/F664、及びネットワークNに接続されるネットワークI/F665を含む。CPU660、メモリ661、記憶部662、表示装置663、入力I/F664、及びネットワークI/F665は、バス666に接続される。
【0401】
記憶部662は、HDD、SSD、及びフラッシュメモリ等によって実現される。記憶媒体としての記憶部662には、検証プログラム668が記憶される。CPU660は、記憶部662から検証プログラム668を読み出してからメモリ661に展開し、展開した検証プログラム668を実行する。
【0402】
なお、入力装置612は検証装置618と同様の構成をとることができるため詳細な説明を省略する。
【0403】
次に、
図28、
図29を参照して、本実施形態に係る秘密分散システム610の作用を説明する。
【0404】
<分散6=データ登録>
図28は、秘密分散システム610における分散(データ登録)、秘匿積和演算(検証用演算)の処理シーケンスを説明したものである。また、
図29は、検証・復元処理(データ検証)の処理シーケンスを説明したものである。
【0405】
S610で、入力装置612は、各秘密情報a,b,cが発生する毎に安全な通信路を用いて検証装置618に送信する。
【0406】
検証装置618は、受信したa,b,cを確認し、問題なければ以下を行う。
【0407】
S612で、検証装置618は、秘密情報aに対して3個の乱数α0,α1,α2を生成する。また、乱数a1を生成し、以下の値を計算する。
【0408】
【0409】
S614で、検証装置618は、S612の計算結果、及び、a1に対するハッシュ値ha1をブロックチェーン装置S1に送信する。
【0410】
S616で、検証装置618は、秘密情報bに対して3個の乱数β0,β1,β2を生成する。また、乱数b1を生成し、以下の値を計算する。
【0411】
【0412】
S618で、検証装置618は、S616の計算結果、及び、b1に対するハッシュ値hb1をブロックチェーン装置S1に送信する。
【0413】
S620で、検証装置618は、秘密情報cに対して3個の乱数γ0,γ1,γ2を生成する。また、乱数c1を生成し、以下の値を計算する。
【0414】
【0415】
S622で、検証装置618は、S620の計算結果、及び、c1に対するハッシュ値hc1をブロックチェーン装置S1に送信する。
【0416】
S624で、検証装置618は、変換用乱数組([εi]0,εi,0)と([εi]1,εi,1)(i=1,…,必要個数)を生成する。
【0417】
S626で、検証装置618は、([εi]1,εi,1)に乱数μをかけて([εi]0,εi,0),(μ[εi]1,εi,1)をブロックチェーン装置S1に送信する。
【0418】
S628で、検証装置618は、乱数δ0,δ1,δ2を生成し、以下をブロックチェーン装置S1に送信する。
【0419】
【0420】
S630で、ブロックチェーン装置S1は、検証装置618から送られてきた値を登録値として公開する。
【0421】
以上が分散の処理シーケンスである。
【0422】
<秘匿積和演算6=検証用演算>
S632で、ブロックチェーン装置S1は、以下を計算し計算結果を検証装置618に送信する。ただし、μ2=μδ2,μ1=μδ1,μ0=μδ0とする。
【0423】
【0424】
なお、S632は、ブロックチェーン装置Siにおける、演算プログラム658の処理に対応する。ブロックチェーン装置SiのCPU650が、演算プログラム658を実行することで、開示の技術における演算部の処理を行う。秘匿された登録値であるδ2/α2β2ε1等を用いて、登録値による検証用演算、つまり上記計算を行う。
【0425】
以上が秘匿積和演算の処理シーケンスである。
【0426】
<検証・復元6=データ検証>
図29は、秘密分散システム610における検証の処理シーケンスを説明したものである。秘密分散システム610は、演算を終了し検証を行う場合、以下の検証の処理シーケンスを実行する。
【0427】
S650で、検証装置618は、δ2{(ab+c)+(a1b1+c1)},δ0(ab+c)とa1,b1,c1,δ2,δ0を公開する。
【0428】
S652で、復元装置614は、以下を計算する。
【0429】
【0430】
S654で、復元装置614は、a1,b1,c1がそのハッシュ値と一致するか検証し、ハッシュ値が正しければS656へ移行し、正しくなければS662へ移行して不正とする。
【0431】
S656で、復元装置614は、公開されているa1,b1,c1を用いてa1b1+c1を計算する。
【0432】
S658で、復元装置614は、S656で計算されたa1b1+c1とS652で計算されたa1b1+c1が等しいか検証し、計算結果が等しく、正しければS660へ移行し、正しくなければS662へ移行して不正とする。
【0433】
なお、S658は、復元装置614における、検証復元プログラム648の処理に対応する。サーバSiのCPU640が、検証復元プログラム648を実行することで、開示の技術における検証部の処理を行う。
【0434】
S660で、復元装置614は、(ab+c=δ0(ab+c))/δ0を確認値とする。
【0435】
S662で、検証結果が不正であるものとする。
【0436】
以上が検証の処理シーケンスである。
【0437】
上記において、検証用演算を積和演算としたが、積和演算はb=1とすれば加算となり、c=0とすれば乗算となる。また、第2の実施の形態に示したように減算及び除算も可能である。さらに、積和演算の組み合わせにより任意の四則演算が構成できるので、任意の検証用演算が可能である。
【0438】
また、本実施形態の分散(データ登録)の時点で登録値は秘匿されて公開されるが、復元者は秘密情報に関して何の情報も得ることができない。また、秘匿積和演算(検証用演算)においても乱数δ2,δ1,δ0が秘匿されているので、演算は実行できるが秘密情報及び演算結果について何の情報も得ることはできない。また、δ0(ab+c)が0になれば秘密情報が漏洩するが、秘密情報による演算結果に0を含まないとするので問題ない。演算結果に0を含む場合は、第5実施形態の秘匿計算を採用すればよい。よって、本実施形態の補正処理におけるδ2{(ab+c)+(a1b1+c1)},δ1(a1b1+c1)の更新についても情報は得られない。最後に、本実施形態の検証(データ検証)において検証装置618により乱数a1,b1,c1,δ2,δ0が公開されることにより、復元された演算結果の正当性を検証できる。
【0439】
本実施の形態の特徴は誰でも秘匿計算及びその検証処理が実行できる点である。すなわち、前実施形態までは秘匿積和演算に参加できるメンバーは分散時に種々の値を配布されたk台のサーバに限定され、それ以外のメンバーは演算結果の正しさを確認できるが、自ら検証処理を行えなかった。本実施の形態によりk台のサーバに秘匿演算を依頼しなくても、全ての値が公開されるため誰でも検証処理できる。また、最終結果に用いられた乱数が公開されることにより、最終結果は知ることができるが、途中結果を復元するためのδ2,δ0が公開されないため、入力値及び途中の演算結果に関する情報は得られないというものである。
【0440】
ただし、検証者は全入力を知っており、乱数も自ら設定するため、不正することが可能であるが、検証者が信頼できるとする場合はこのままで問題はない。信頼できるとしない場合は、第4実施形態と同様に乱数を検証者だけが生成しないようにすればよい。例えば、分散(データ登録)のS612~622の処理とS628の処理の代わりに以下の生成処理を入力装置612が行い検証装置618に送信する。
【0441】
【0442】
検証装置618は受信した値を秘密分散して、片側の分散値にμをかけた以下の値をブロックチェーン装置S1に送る。
【0443】
【0444】
このとき、検証装置618ではS610で送られたa,b,cの値からα0,β0,γ0を知ることができるが、それ以上の情報を知ることができない。そのため、乱数の演算結果の差分が0となるように公開値を調整できない。また、入力装置612が偽の値を送っている場合、検証装置618はS610によって知る秘密情報による検証結果の正当性をS654において直接確認できる。また、入力装置612が送る値に入力装置612のデジタル署名をつけて送らせ、それを検証した後上記処理を行えば、入力装置612が偽の値を送っていることを証明できる。またこれに対して検証装置のデジタル署名を入力装置が得れば、検証装置618による偽の値の登録を防ぐために利用できる。
【0445】
また、第4実施形態に示したように入力の乱数a1,b1,c1を他者と協力して生成してもよい。例えば、入力装置と検証装置、または検証装置と復元装置などの組合せで、入力装置または検証装置が設定したa1をその生成者が知らないa"1=a1+a′1に変更してもよい。
【0446】
また、上記分散(データ登録)ではα2(a+a1),α1a1,α0aの3つの入力を生成したが、乱数の演算を秘密情報の演算と同じ形にしなくてよい場合は、第3実施形態のようにα2(a+a1),α0aまたは第5の実施の形態のように2組のα2(a+a1),α1a1として、各々同じ形式で更新して行ってもよい。
【0447】
以上説明したように、本発明の第6実施形態の手法を用いて秘密情報を分散することにより、ブロックチェーンのような公開性が重視される応用に対しても、上述した第1~第5実施形態と同様の秘匿計算を適用することができる。
【0448】
なお、上記各実施形態でCPUがソフトウェア(プログラム)を実行することにより実行した各種処理を、CPU以外の各種のプロセッサが実行してもよい。この場合のプロセッサとしては、FPGA(Field-Programmable Gate Array)等の製造後に回路構成を変更可能なPLD(Programmable Logic Device)、及びASIC(Application Specific Integrated Circuit)等の特定の処理を実行させるために専用に設計された回路構成を有するプロセッサである専用電気回路等が例示される。また、各種処理を、これらの各種のプロセッサのうちの1つで実行してもよいし、同種又は異種の2つ以上のプロセッサの組み合わせ(例えば、複数のFPGA、及びCPUとFPGAとの組み合わせ等)で実行してもよい。また、これらの各種のプロセッサのハードウェア的な構造は、より具体的には、半導体素子等の回路素子を組み合わせた電気回路である。
【0449】
また、上記各実施形態では、各種プログラムが記憶部に予め記憶(インストール)されている態様を説明したが、これに限定されない。各種プログラムは、CD-ROM(Compact Disc Read Only Memory)、DVD-ROM(Digital Versatile Disc Read Only Memory)、及びUSB(Universal Serial Bus)メモリ等の記録媒体に記録された形態で提供されてもよい。また、各種プログラムは、ネットワークを介して外部装置からダウンロードされる形態としてもよい。
【符号の説明】
【0450】
10、210、310、410、510、610 秘密分散システム
12、212、312、412、512、612 入力装置
14、314、414、514、614 復元装置
16、216、316、416、516 サーバ
616 ブロックチェーン装置
618 検証装置