(57)【特許請求の範囲】
【請求項１】
3台以上の秘密計算装置を含み、大きさnの配列a=(a[0], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, …, <a[n-1]>)から位置を表す整数xからの相対的な位置を表す整数i0, …, im-1に対応するm個の秘匿文(<a[x+i0 mod n]>, <a[x+i1 mod n]>, …, <a[x+im-1mod n]>)を得る秘密計算システムであって、
上記秘密計算装置は、
上記秘匿文の配列<a>、0以上n未満の上記整数xの秘匿文<x>、およびm個の0以上n未満の上記整数i0, …, im-1を入力する入力部と、
上記秘匿文の配列<a>を上記秘匿文<x>を用いて秘匿シフトして、上記配列aをxだけ左シフトした配列a'=(a'[0], …, a'[n-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, …, <a'[n-1]>)を求める秘匿シフト部と、
上記秘匿文の配列<a'>から上記整数i0, …, im-1の位置の要素を選択した秘匿文の配列<b>=(<a'[i0]>, …, <a'[im-1]>)を生成する配列生成部と、
を含むものである秘密計算システム。
【請求項２】
3台以上の秘密計算装置を含み、大きさnの配列a=(a[0], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, …, <a[n-1]>)から位置を表す整数xから続くm個の秘匿文(<a[x mod n]>, <a[x+1 mod n]>, …, <a[x+m-1 mod n]>)を得る秘密計算システムであって、
上記秘密計算装置は、
上記秘匿文の配列<a>、0以上n未満の上記整数xの秘匿文<x>、および自然数mを入力する入力部と、
上記秘匿文の配列<a>を上記秘匿文<x>を用いて秘匿シフトして、上記配列aをxだけ左シフトした配列a'=(a'[0], …, a'[n-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, …, <a'[n-1]>)を求める秘匿シフト部と、
上記秘匿文の配列<a'>の先頭からm個の要素を選択した秘匿文の配列<b>=(<a'[0]>, …, <a'[m-1]>)を生成する配列生成部と、
を含むものである秘密計算システム。
【請求項３】
大きさnの配列a=(a[0], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, …, <a[n-1]>)から位置を表す整数xからの相対的な位置を表す整数i0, …, im-1に対応するm個の秘匿文(<a[x+i0 mod n]>, <a[x+i1 mod n]>, …, <a[x+im-1mod n]>)を得る秘密計算装置であって、
上記秘匿文の配列<a>、0以上n未満の上記整数xの秘匿文<x>、およびm個の0以上n未満の上記整数i0, …, im-1を入力する入力部と、
上記秘匿文の配列<a>を上記秘匿文<x>を用いて秘匿シフトして、上記配列aをxだけ左シフトした配列a'=(a'[0], …, a'[n-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, …, <a'[n-1]>)を求める秘匿シフト部と、
上記秘匿文の配列<a'>から上記整数i0, …, im-1の位置の要素を選択した秘匿文の配列<b>=(<a'[i0]>, …, <a'[im-1]>)を生成する配列生成部と、
秘密計算装置。
【請求項４】
大きさnの配列a=(a[0], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, …, <a[n-1]>)から位置を表す整数xから続くm個の秘匿文(<a[x mod n]>, <a[x+1 mod n]>, …, <a[x+m-1 mod n]>)を得る秘密計算装置であって、
上記秘匿文の配列<a>、0以上n未満の上記整数xの秘匿文<x>、および自然数mを入力する入力部と、
上記秘匿文の配列<a>を上記秘匿文<x>を用いて秘匿シフトして、上記配列aをxだけ左シフトした配列a'=(a'[0], …, a'[n-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, …, <a'[n-1]>)を求める秘匿シフト部と、
上記秘匿文の配列<a'>の先頭からm個の要素を選択した秘匿文の配列<b>=(<a'[0]>, …, <a'[m-1]>)を生成する配列生成部と、
秘密計算装置。
【請求項５】
3台以上の秘密計算装置を含む秘密計算システムが実行する、大きさnの配列a=(a[0], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, …, <a[n-1]>)から位置を表す整数xからの相対的な位置を表す整数i0, …, im-1に対応するm個の秘匿文(<a[x+i0 mod n]>, <a[x+i1 mod n]>, …, <a[x+im-1mod n]>)を得る秘密計算方法であって、
入力部へ、上記秘匿文の配列<a>、0以上n未満の上記整数xの秘匿文<x>、およびm個の0以上n未満の上記整数i0, …, im-1が入力され、
秘匿シフト部が、上記秘匿文の配列<a>を上記秘匿文<x>を用いて秘匿シフトして、上記配列aをxだけ左シフトした配列a'=(a'[0], …, a'[n-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, …, <a'[n-1]>)を求め、
配列生成部が、上記秘匿文の配列<a'>から上記整数i0, …, im-1の位置の要素を選択した秘匿文の配列<b>=(<a'[i0]>, …, <a'[im-1]>)を生成する、
秘密計算方法。
【請求項６】
3台以上の秘密計算装置を含む秘密計算システムが実行する、大きさnの配列a=(a[0], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, …, <a[n-1]>)から位置を表す整数xから続くm個の秘匿文(<a[x mod n]>, <a[x+1 mod n]>, …, <a[x+m-1 mod n]>)を得る秘密計算方法であって、
入力部へ、上記秘匿文の配列<a>、0以上n未満の上記整数xの秘匿文<x>、および自然数mが入力され、
秘匿シフト部が、上記秘匿文の配列<a>を上記秘匿文<x>を用いて秘匿シフトして、上記配列aをxだけ左シフトした配列a'=(a'[0], …, a'[n-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, …, <a'[n-1]>)を求め、
配列生成部が、上記秘匿文の配列<a'>の先頭からm個の要素を選択した秘匿文の配列<b>=(<a'[0]>, …, <a'[m-1]>)を生成する、
秘密計算方法。
【請求項７】
請求項３または４に記載の秘密計算装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、暗号応用技術に関し、特に、入力データを明かすことなく配列から読み込みを行う技術に関する。
【背景技術】
【０００２】
暗号化された数値を復元すること無く特定の演算結果を得る方法として、秘密計算と呼ばれる方法がある（例えば非特許文献１参照）。非特許文献１の方法では、３つの秘密計算装置に数値の断片を分散させるという暗号化を行い、３つの秘密計算装置が協調計算を行うことにより、数値を復元すること無く、加減算、定数加算、乗算、定数倍、論理演算（否定、論理積、論理和、排他的論理和）、データ形式変換（整数、二進数）の結果を３つの秘密計算装置に分散された状態、すなわち暗号化されたまま保持させることができる。【０００３】
秘密計算等で暗号化された配列(<a[0]>, <a[1]>, …, <a[n-1]>)から暗号化された番号<x>の位置の要素<a[x]>の読み込みを行う場合に、暗号化された番号<x>と配列のすべての要素の位置0, 1, …, n-1との比較を行って実現する方法がある。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】千田浩司、濱田浩気、五十嵐大、高橋克巳、“軽量検証可能3パーティ秘匿関数計算の再考”、CSS2010、2010
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、大きさnの秘匿化された配列からm回の読み込みを行うためには、Ω(mn)回の比較が必要となり効率が悪かった。【０００６】
この発明の目的は、上述のような点に鑑みて、秘匿化された配列から複数の要素を効率よく読み出すことができる秘密計算技術を提供することである。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために、この発明の第一の態様の秘密計算システムは、3台以上の秘密計算装置を含む秘密計算システムであって、秘密計算装置は、大きさnの配列a=(a[0], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, …, <a[n-1]>)、0以上n未満の整数xの秘匿文<x>、およびm個の0以上n未満の整数i0, …, im-1を入力する入力部と、秘匿文の配列<a>を<x>だけ秘匿シフトして、配列aをxだけ左シフトした配列a'=(a'[0], …,a'[n-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, …, <a'[n-1]>)を求める秘匿シフト部と、秘匿文の配列<a'>から秘匿文の配列<b>=(<a'[i0]>, …, <a'[im-1]>)を生成する配列生成部と、を含むものである。【０００８】
この発明の第二の態様の秘密計算システムは、3台以上の秘密計算装置を含む秘密計算システムであって、秘密計算装置は、大きさnの配列a=(a[0], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, …, <a[n-1]>)、0以上n未満の整数xの秘匿文<x>、および自然数mを入力する入力部と、秘匿文の配列<a>を<x>だけ秘匿シフトして、配列aをxだけ左シフトした配列a'=(a'[0], …, a'[n-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, …, <a'[n-1]>)を求める秘匿シフト部と、秘匿文の配列<a'>から秘匿文の配列<b>=(<a'[0]>, …, <a'[m-1]>)を生成する配列生成部と、を含むものである。
【発明の効果】
【０００９】
この発明の秘密計算技術によれば、秘匿化された配列から複数の要素を効率よく読み出すことができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、秘密計算システムの機能構成を例示する図である。
【図２】図２は、秘密計算装置の機能構成を例示する図である。
【図３】図３は、秘密計算方法の処理手続きを例示する図である。
【図４】図４は、秘密計算方法の処理手続きを例示する図である。
【発明を実施するための形態】
【００１１】
実施形態の説明に先立ち、この明細書における表記方法およびこの明細書において用いる用語の定義について説明する。
【００１２】
＜表記方法＞
ある値aを暗号化や秘密分散などにより秘匿化した値をaの秘匿文と呼び、<a>と表記する。また、aを<a>の平文と呼ぶ。秘匿化が秘密分散である場合は、<a>により各パーティが持つ秘密分散の断片の集合を参照する。
【００１３】
＜秘匿シフト＞
大きさnの秘匿文の配列<a>=(<a[0]>, <a[1]>, …, <a[n-1]>)とシフト量dの秘匿文<d>とを入力とし、<a>を左にdだけシフトした秘匿文の配列<a'>=(<a[d]>, <a[d+1]>, …, <a[n-1]>, <a[0]>, <a[1]>, …, <a[d-1]>)を計算する処理を秘匿シフトと呼び、次式で記述する。
【００１４】
【数１】
0006585846.tif 000002
【００１５】
秘匿シフトを実現する方法は、下記参考文献１に記載されている。
〔参考文献１〕濱田浩気、桐淵直人、五十嵐大、“ラウンド効率のよい秘密計算パターンマッチング”、コンピュータセキュリティシンポジウム2014論文集、第2014巻、pp. 674-681、2014年10月
【００１６】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【００１７】
＜第一実施形態＞
この発明の第一実施形態は、秘密計算や暗号化などにより秘匿化された大きさnの配列(<a[0]>, <a[1]>, …, <a[n-1]>)、位置を表す自然数xの秘匿文<x>、およびxからの相対的な位置を表すm個の平文i0, i1, …, im-1を入力とし、xやa[0], a[1], …, a[n-1]の値を明らかにすることなく、m個の秘匿文(<a[x+i0 mod n]>, <a[x+i1 mod n]>, …, <a[x+im-1mod n]>)を得る方法である。
【００１８】
第一実施形態の秘密計算システムは、図１に例示するように、n（≧3）台の秘密計算装置１1, …, １nを含む。この実施形態では、秘密計算装置１1, …, １nはそれぞれ通信網２へ接続される。通信網２は、秘密計算装置１1, …, １nそれぞれが相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN（Local Area Network）、WAN（Wide Area Network）などを用いることができる。なお、各装置は必ずしも通信網２を介してオンラインで通信可能である必要はない。例えば、秘密計算装置１i（i∈{1, …, n}）へ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体からオフラインで入力するように構成してもよい。
【００１９】
秘密計算装置１は、図２に例示するように、入力部１１、秘匿シフト部１２、配列生成部１３、および出力部１４を含む。この秘密計算装置１が、図３に例示する各ステップの処理を行うことにより第一実施形態の秘密計算方法が実現される。
【００２０】
秘密計算装置１は、例えば、中央演算処理装置（CPU: Central Processing Unit）、主記憶装置（RAM: Random Access Memory）などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密計算装置１は、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密計算装置１に入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密計算装置１の各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【００２１】
図３を参照して、第一実施形態の秘密計算方法の処理手続きを説明する。
【００２２】
ステップＳ１１において、入力部１１へ、大きさnの配列a=(a[0], a[1], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, <a[1]>, …, <a[n-1]>)、0以上n未満の整数xの秘匿文<x>、およびm個の0以上n未満の整数i0, …, im-1が入力される。秘匿文の配列<a>および秘匿文<x>は秘匿シフト部１２へ送られる。整数i0, …, im-1は配列生成部１３へ送られる。
【００２３】
ステップＳ１２において、秘匿シフト部１２は、秘匿文の配列<a>を<x>だけ秘匿シフトして、配列aをxだけ左シフトした配列a'=(a'[0], a'[1], …, a'[n-1])=(a[x], a[x+1], …, a[n-1], a[0], a[1], …, a[x-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, <a'[1]>, …, <a'[n-1]>)を求める。すなわち、<a'>←Shift(<a>, <x>)を実行する。秘匿文の配列<a'>は配列生成部１３へ送られる。
【００２４】
ステップＳ１３において、配列生成部１３は、秘匿文の配列<a'>から、<b[j]>=<a'[ij]>（0≦j<m）として、配列b=(b[0], b[1], …, b[m-1])=(a'[i0], a'[i1], …, a'[im-1])を秘匿化した秘匿文の配列<b>=(<b[0]>, <b[1]>, …, <b[m-1]>)=(<a'[i0]>, <a'[i1]>, …, <a'[im-1]>)を生成する。
【００２５】
ステップＳ１４において、出力部１４から、秘匿文の配列<b>が出力される。
【００２６】
＜第二実施形態＞
この発明の第二実施形態は、第一実施形態においてij=jとした構成、すなわち位置xから続くm個の要素を読み込む構成である。第二実施形態は、秘密計算や暗号化により秘匿化された大きさnの配列(<a[0]>, <a[1]>, …, <a[n-1]>)、位置を表す秘匿文<x>、および出力の大きさを表す平文mを入力とし、xやa[0], a[1], …, a[n-1]の値を明らかにすることなく、m個の秘匿文(<a[x mod n]>, <a[x+1 mod n]>, …, <a[x+m-1 mod n]>)を得る方法である。
【００２７】
図４を参照して、第二実施形態の秘密計算方法の処理手続きを説明する。以下では、上述の第一実施形態との相違点を中心に説明する。
【００２８】
ステップＳ１１において、入力部１１へ、大きさnの配列a=(a[0], a[1], …, a[n-1])を秘匿化した秘匿文の配列<a>=(<a[0]>, <a[1]>, …, <a[n-1]>)、0以上n未満の整数xの秘匿文<x>、および自然数mが入力される。秘匿文の配列<a>および秘匿文<x>は秘匿シフト部１２へ送られる。自然数mは配列生成部１３へ送られる。
【００２９】
ステップＳ１２において、秘匿シフト部１２は、第一実施形態と同様に、秘匿文の配列<a>を<x>だけ秘匿シフトして、配列aをxだけ左シフトした配列a'=(a'[0], a'[1], …, a'[n-1])=(a[x], a[x+1], …, a[n-1], a[0], a[1], …, a[x-1])を秘匿化した秘匿文の配列<a'>=(<a'[0]>, <a'[1]>, …, <a'[n-1]>)を求める。すなわち、<a'>←Shift(<a>, <x>)を実行する。秘匿文の配列<a'>は配列生成部１３へ送られる。
【００３０】
ステップＳ１３において、配列生成部１３は、秘匿文の配列<a'>から、配列b=(b[0], b[1], …, b[m-1])=(a'[0], a'[1], …, a'[m-1])を秘匿化した秘匿文の配列<b>=(<b[0]>,<b[1]>, …, <b[m-1]>)=(<a'[0]>, <a'[1]>, …, <a'[m-1]>)を生成する。
【００３１】
ステップＳ１４において、出力部１４から、秘匿文の配列<b>が出力される。
【００３２】
この発明のポイントは、従来は秘匿文の配列すべてに対して比較を行うためにm回ずつ秘匿文の配列すべてを読み込む必要があったところ、m回の読み込み位置の相対位置を公開してよい場合に、１回の秘匿文のシフトのみで実現したことである。最初にxだけ秘匿文の配列を左にシフトしておくことで、x+ij番目の要素の読み込みはシフト後の配列のij番目の要素を取り出すだけで実現している。
【００３３】
このように構成することにより、この発明の秘密計算技術によれば、n個の秘匿文の配列からx+i0, x+i1, …, x+im-1番目の要素の秘匿文を読み込む処理を、１回の秘匿シフト演算により実現することができる。相対位置が明らかになってよい秘匿読み込みを行う際に、従来の秘匿読み込みを繰り返し独立に行う場合はΩ(mn)の秘匿文の比較が必要だったが、この発明によれば１回の秘匿文の配列のシフト演算で実現できる。
【００３４】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００３５】
［プログラム、記録媒体］
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【００３６】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００３７】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００３８】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００３９】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【産業上の利用可能性】
【００４０】
この発明の秘密計算技術は、情報を秘匿したまま、例えば、ゲノム情報の解析、統計計算、データベース処理、医療情報分析、顧客情報分析、売り上げ分析などを行うことに適用することが可能である。
【図１】
0006585846.tif 000003
【図２】
0006585846.tif 000004
【図３】
0006585846.tif 000005
【図４】
0006585846.tif 000006