(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-15
(45)【発行日】2024-01-23
(54)【発明の名称】シャッフルシステム、シャッフル方法及びプログラム
(51)【国際特許分類】
G09C 1/00 20060101AFI20240116BHJP
H04L 9/32 20060101ALI20240116BHJP
【FI】
G09C1/00 650Z
H04L9/32 200Z
(21)【出願番号】P 2021561063
(86)(22)【出願日】2019-11-28
(86)【国際出願番号】 JP2019046509
(87)【国際公開番号】W WO2021106133
(87)【国際公開日】2021-06-03
【審査請求日】2022-05-27
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100080816
【氏名又は名称】加藤 朝道
(74)【代理人】
【識別番号】100098648
【氏名又は名称】内田 潔人
(72)【発明者】
【氏名】土田 光
【審査官】青木 重徳
(56)【参考文献】
【文献】特開2017-129913(JP,A)
【文献】国際公開第2012/046692(WO,A1)
【文献】米国特許出願公開第2003/0046547(US,A1)
【文献】国際公開第2015/107952(WO,A1)
【文献】辻下 健太郎 ほか,パスワード付秘密分散法の秘匿検索への応用,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2017年05月18日,Vol. 117 No. 55,p. 99-106
【文献】千田 浩司 ほか,効率的な3パーティ秘匿関数計算の提案とその運用モデルの考察,情報処理学会研究報告 コンピュータセキュリティ(CSEC),日本,社団法人情報処理学会,2010年04月15日,p. 1-7
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
H04L 9/32
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
相互にネットワークで接続された4台の秘密計算ノードを備え、前記4台の秘密計算ノードに秘密分散されたシェアをシャッフルするシャッフルシステムであって、
前記4台の秘密計算ノードのうちの1台の秘密計算ノードを受信ノード
、2台の秘密計算ノード
を再分散ノード、残る1台の秘密計算ノード
を検証ノードと
するラウンドを、前記4台の秘密計算ノードで共有された選定順序に従って前記4台の秘密計算ノードの中から前記受信ノード、再分散ノードおよび検証ノード
を選定し、
前記再分散ノードが前記受信ノードの知らない置換を用いてそれぞれが保持するシェアを再分散するミニシャッフルを実施し、前記ミニシャッフルの結果を前記受信ノードに送信し、
前記検証ノードが、前記受信ノードの知らない置換を用いて生成した、前記再分散ノードのミニシャッフルの結果を検証するデータを前記受信ノードに送信
し、
前記受信ノードは、前記検証ノードから受信したデータを用いた前記ミニシャッフルの正当性を確認した結果、前記ミニシャッフルの正当性を確認できない場合、処理を中止し、正当性を確認できた場合は前記ラウンドを終了して次のラウンドへ進み、
前記ラウンドを、前記4台の秘密計算ノードが少なくとも1回以上受信ノードとなるよう繰り返すことで、
前記シェアのシャッフルを行うシャッフルシステム。
【請求項2】
前記4台の秘密計算ノードは、
3つのシード(seed1,seed2,seed4)と秘密情報xのシェア(x1,x2)とを秘密分散して保持する第1の秘密計算ノードと、
3つのシード(seed2,seed3,seed4)と秘密情報xのシェア(x2,x3)とを秘密分散して保持する第2の秘密計算ノードと、
3つのシード(seed3,seed1,seed4)と秘密情報xのシェア(x3,x1)とを秘密分散して保持する第3の秘密計算ノードと、
3つのシード(seed1,seed2,seed3)と秘密情報xのシェア(x1-x2,x2-x3)とを秘密分散して保持する第4の秘密計算ノードと、により構成され、
前記再分散ノード及び前記検証ノードは、前記受信ノードの知らないシードを用いて、2つの乱数を生成し、
前記再分散ノードは、前記ミニシャッフルの結果として、前記シェアに前記乱数の組み合わせを適用した結果を前記受信ノードに送信し、
前記検証ノードは、前記2台の再分散ノードが前記受信ノードに送信した結果の和又は差を計算して、前記受信ノードに送信する、
請求項1のシャッフルシステム。
【請求項3】
前記第4の秘密計算ノード
を受信ノードとするラウンドと、第1の秘密計算ノードを受信ノードとする
ラウンドと、を並列に実行し、
前記第2の秘密計算ノード
を受信ノードとするラウンドと、第3の秘密計算ノードを受信ノードとする
ラウンドと、を並列に実行する、
請求項2のシャッフルシステム。
【請求項4】
相互にネットワークで接続された4台の秘密計算ノードを用いて、前記4台の秘密計算ノードに秘密分散されたシェアをシャッフルするシャッフル方法であって、
前記4台の秘密計算ノードのうちの1台の秘密計算ノードを受信ノード
、2台の秘密計算ノード
を再分散ノード
、残る1台の秘密計算ノード
を検証ノードと
するラウンドを、前記4台の秘密計算ノードで共有された選定順序に従って前記4台の秘密計算ノードの中から前記受信ノード、再分散ノードおよび検証ノードを選定し、
前記再分散ノードが前記受信ノードの知らない置換を用いてそれぞれが保持するシェアを再分散するミニシャッフルを実施し、前記ミニシャッフルの結果を前記受信ノードに送信し、
前記検証ノードが、前記受信ノードの知らない置換を用いて生成した、前記再分散ノードのミニシャッフルの結果を検証するデータを前記受信ノードに送信
し、
前記受信ノードは、前記検証ノードから受信したデータを用いた前記ミニシャッフルの正当性を確認した結果、前記ミニシャッフルの正当性を確認できない場合、処理を中止し、正当性を確認できた場合は前記ラウンドを終了して次のラウンドへ進み、
前記ラウンドを、前記4台の秘密計算ノードが少なくとも1回以上受信ノードとなるよう繰り返すことで、
前記シェアのシャッフルを行うシャッフル方法。
【請求項5】
相互にネットワークで接続された4台の秘密計算ノードに、前記4台の秘密計算ノードに秘密分散されたシェアをシャッフルする処理を行わせるシャッフルプログラムであって、
前記4台の秘密計算ノードのうちの1台の秘密計算ノードを受信ノード
、2台の秘密計算ノード
を再分散ノード
、残る1台の秘密計算ノード
を検証ノードと
するラウンドを、前記4台の秘密計算ノードで共有された選定順序に従って前記4台の秘密計算ノードの中から前記受信ノード、再分散ノードおよび検証ノードを選定する処理と、
前記再分散ノードが前記受信ノードの知らない置換を用いてそれぞれが保持するシェアを再分散するミニシャッフルを実施し、前記ミニシャッフルの結果を前記受信ノードに送信する処理と、
前記検証ノードが、前記受信ノードの知らない置換を用いて生成した、前記再分散ノードのミニシャッフルの結果を検証するデータを前記受信ノードに送信する
処理と、
前記受信ノードが、前記検証ノードから受信したデータを用いた前記ミニシャッフルの正当性を確認した結果、前記ミニシャッフルの正当性を確認できない場合、処理を中止し、正当性を確認できた場合は前記ラウンドを終了して次のラウンドへ進む処理と、
前記ラウンドを、前記4台の秘密計算ノードが少なくとも1回以上受信ノードとなるよう繰り返す処理とを、
含むシャッフルプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シャッフルシステム、シャッフル方法及びプログラムに関する。
【背景技術】
【0002】
特許文献1に、秘密ランダム置換が含まれる秘密計算を高速に行うことができるという秘密計算方法が開示されている。また、秘密計算によるアプリケーションとして、データやクエリを秘匿したデータベース処理が挙げられる。また、この秘密計算上のデータベース演算を実現する際に、重要なサブプロトコルの一つとして,ソートプロトコルが挙げられる。特許文献2には、比較に基づかないソーティングアルゴリズムが開示されている。
【0003】
上記ソートプロトコルの実現方法はいくつか存在し、代表的なものとして以下の2つが挙げられる。
・ソーティングネットワークによる方式
・シャッフル(ランダム置換)を用いる方式
【0004】
コストが小さいのはシャッフルを用いる方式であり、特許文献1、2もこの方式を採用している。シャッフル(ランダム置換)を用いる方式の代表的なものとしては、以下の2つが挙げられる。
・3者の(環上の)複製型秘密分散を用いるセミオネスト安全な方式(非特許文献1参照)
・N者の(体上の)加法型秘密分散を用いるセミオネスト安全/マリシャス安全な方式(非特許文献2参照)
【先行技術文献】
【特許文献】
【0005】
【文献】国際公開第2015/107952号
【文献】特開2012-154990号公報
【非特許文献】
【0006】
【文献】五十嵐大, et al.、“超高速秘密計算ソートの設計と実装: 秘密計算がスクリプト言語に並ぶ日”、コンピュータセキュリティシンポジウム2017、論文集 2017.2(2017)
【文献】Sven Laur, Jan Willemson, and Bingsheng Zhang, “Round-efficient oblivious database manipulation”, International Conference on Information Security, Springer, Berlin, Heidelberg, 2011,[令和元(2019)年11月1日検索]、インターネット〈URL:https://eprint.iacr.org/2011/429.pdf〉
【発明の概要】
【発明が解決しようとする課題】
【0007】
以下の分析は、本発明者によって与えられたものである。上記した非特許文献2の方式は、コミットメントとゼロ知識証明を用いて、確率的に不正を検知することが可能となっている。しかしながら、非特許文献2の方式をもってしても、決定的に不正を検知可能な方式とはなっていない。
【0008】
本発明は、決定的に不正を検知可能なシャッフルシステム、シャッフル方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
第1の視点によれば、4台の秘密計算ノードのうちの1台の秘密計算ノードを受信ノードに選定し、前記4台の秘密計算ノードのうちの残る3台の秘密計算ノードのうち、2台の秘密計算ノードが再分散ノードとして、残る1台の秘密計算ノードが検証ノードとして動作し、前記再分散ノードが前記受信ノードの知らない置換を用いてそれぞれが保持するシェアを再分散するミニシャッフルを実施し、前記ミニシャッフルの結果を前記受信ノードに送信し、前記検証ノードが、前記受信ノードの知らない置換を用いて生成した、前記再分散ノードのミニシャッフルの結果を検証するデータを前記受信ノードに送信することを1ラウンドとする。このラウンドを、前記4台の秘密計算ノードが少なくとも1回以上受信ノードとなるよう繰り返すことで、シェアのシャッフルを行うシャッフルシステムが提供される。
【0010】
第2の視点によれば、4台の秘密計算ノードのうちの1台の秘密計算ノードを受信ノードに選定し、前記4台の秘密計算ノードのうちの残る3台の秘密計算ノードのうち、2台の秘密計算ノードが再分散ノードとして、残る1台の秘密計算ノードが検証ノードとして動作するシャッフル方法が提供される。このシャッフル方法は、前記再分散ノードが前記受信ノードの知らない置換を用いてそれぞれが保持するシェアを再分散するミニシャッフルを実施し、前記ミニシャッフルの結果を前記受信ノードに送信し、前記検証ノードが、前記受信ノードの知らない置換を用いて生成した、前記再分散ノードのミニシャッフルの結果を検証するデータを前記受信ノードに送信するラウンドを、前記4台の秘密計算ノードが少なくとも1回以上受信ノードとなるよう繰り返すことで、前記シェアのシャッフルを行う。本方法は、4台の秘密計算ノードの構成する秘密計算ノードという、特定の機械に結びつけられている。
【0011】
第3の視点によれば、上記した秘密計算ノードの機能を実現するための(コンピュータ)プログラムが提供される。このプログラムは、コンピュータ装置に入力装置又は外部から通信インターフェースを介して入力され、記憶装置に記憶されて、プロセッサを所定のステップないし処理に従って駆動させ、必要に応じ中間状態を含めその処理結果を段階毎に表示装置を介して表示することができ、あるいは通信インターフェースを介して、外部と交信することができる。そのためのコンピュータ装置は、一例として、典型的には互いにバスによって接続可能なプロセッサ、記憶装置、入力装置、通信インターフェース、及び必要に応じ表示装置を備える。また、このプログラムは、コンピュータが読み取り可能な(非トランジトリーな)記憶媒体に記録することができる。
【発明の効果】
【0012】
本発明によれば、決定的に不正を検知可能なシャッフルシステム、シャッフル方法及びプログラムが提供される。
【図面の簡単な説明】
【0013】
【
図2】本発明の一実施形態の動作を説明するための図である。
【
図3】本発明の一実施形態の動作を説明するための図である。
【
図4】本発明の第1の実施形態のシャッフルシステムの構成を示す図である。
【
図5】本発明の第1の実施形態の秘密計算サーバの構成を示す図である。
【
図6】本発明の第1の実施形態のミニシャッフルの実行順序の一例を示す図である。
【
図7】本発明の第1の実施形態のラウンド(i=1)の動作を説明するための図である。
【
図8】本発明の第1の実施形態のラウンド(i=2)の動作を説明するための図である。
【
図9】本発明の第1の実施形態のラウンド(i=3)の動作を説明するための図である。
【
図10】本発明の第1の実施形態のラウンド(i=4)の動作を説明するための図である。
【
図11】本発明の第2の実施形態のラウンド(i=1、2)の動作を説明するための図である。
【
図12】本発明の第2の実施形態のラウンド(i=3、4)の動作を説明するための図である。
【
図13】本発明の第3の実施形態のラウンド(i=1)の動作を説明するための図である。
【
図14】本発明の第3の実施形態のラウンド(i=2)の動作を説明するための図である。
【
図15】本発明の第3の実施形態のラウンド(i=3)の動作を説明するための図である。
【
図16】本発明の第3の実施形態のラウンド(i=4)の動作を説明するための図である。
【
図17】本発明の秘密計算サーバを構成するコンピュータの構成を示す図である。
【発明を実施するための形態】
【0014】
はじめに本発明の一実施形態の概要について図面を参照して説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。また、以降の説明で参照する図面等のブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号(データ)の流れを模式的に示すものであり、双方向性を排除するものではない。プログラムはコンピュータ装置を介して実行され、コンピュータ装置は、例えば、プロセッサ、記憶装置、入力装置、通信インターフェース、及び必要に応じ表示装置を備える。また、このコンピュータ装置は、通信インターフェースを介して装置内又は外部の機器(コンピュータを含む)と、有線、無線を問わず、通信可能に構成される。また、図中の各ブロックの入出力の接続点には、ポート乃至インターフェースがあるが図示を省略する。また、以下の説明において、「A及び/又はB」は、A又はB、若しくは、A及びBという意味で用いる。
【0015】
本発明は、その一実施形態において、
図1に示すように、4台の秘密計算ノード10-1~10-4にて構成されたシャッフルシステムにて実現できる。より具体的には、4台の秘密計算ノード10-1~10-4のうちの1台の秘密計算ノードを受信ノードに選定し、残る3台の秘密計算ノードのうち、2台の秘密計算ノードが再分散ノードとして、残る1台の秘密計算ノードが検証ノードとして動作する。
【0016】
例えば、
図2に示すように、秘密計算ノード10-4を受信ノード(R)に選定したものとする。このとき、秘密計算ノード10-1、10-2が再分散ノード(RS1)、(RS2)、秘密計算ノード10-3が検証ノード(V)として動作することができる。
【0017】
再分散ノード(RS1)として動作する秘密計算ノード10-1、10-2が、受信ノードである秘密計算ノード10-4の知らない置換を用いてそれぞれが保持するシェアを再分散するミニシャッフルを実施する。そして、秘密計算ノード10-1、10-2は、受信ノードである秘密計算ノード10-4に対し、前記ミニシャッフルの結果M1、M2を送信する。一方、検証ノード(V)として動作する秘密計算ノード10-3は、受信ノードである秘密計算ノード10-4の知らない置換を用いて、秘密計算ノード10-1、10-2のミニシャッフルの結果M1、M2を検証するデータVを計算する。そして、秘密計算ノード10-3は、秘密計算ノード10-4に対し、秘密計算ノード10-1、10-2のミニシャッフルの結果M1、M2を検証するデータVを送信する。そして、秘密計算ノード10-4は、ミニシャッフルの結果M1、M2を検証するデータVを用いて、秘密計算ノード10-1、10-2によるミニシャッフルが正しく行われているか否かを検査する。
【0018】
以上の各手順を1ラウンドとする。
図3は、秘密計算ノード10-1を受信ノード(R)に選定し、秘密計算ノード10-2、10-3が再分散ノード(RS1)、(RS2)、秘密計算ノード10-4が検証ノード(V)として動作するラウンドを示している。この場合も同様に、秘密計算ノード10-2、10-3がミニシャッフルを行い、秘密計算ノード10-1に対し、ミニシャッフルの結果M1、M2を送信する。秘密計算ノード10-4は、秘密計算ノード10-1に対し、ミニシャッフルの結果M1、M2を検証するデータVを送信する。そして、秘密計算ノード10-1が、前記データVを用いて、秘密計算ノード10-2、10-3によるミニシャッフルが正しく行われているか否かを検査する。
【0019】
以上のようにして、各秘密計算ノードが少なくとも1回以上受信ノードとなるよう繰り返すことで、シェアのシャッフルを行うことができる。さらに、前述のように各ラウンドで、受信ノード(R)が、検証ノード(V)にて作成されたデータを用いて、ミニシャッフルが正しく行われているか否かを検査するため、決定的に不正を検知することが可能となる。
【0020】
[第1の実施形態]
続いて、本発明の第1の実施形態について図面を参照して詳細に説明する。
図4は、本発明の第1の実施形態のシャッフルシステムの構成を示す図である。
図4を参照すると、上述した秘密計算ノードとして機能する4台の秘密計算サーバP
1~P
4が相互に接続された構成が示されている。以下、秘密計算サーバを特に指定しない場合、秘密計算サーバP
iとも記す。
【0021】
ここで、以下の説明で用いる表記について定義する。なお、finite ringは、有限環、pseudorandom functionは疑似乱数関数を表す。また、Smは、m個の要素に対する置換の集合を表し、πは、Smに属する任意の置換である。[π]iは、Smに属するm個の要素の置換セットのうち、Pi、Pi+1、Pi+2のみが知る置換を表す。
【0022】
【数1】
以降、任意の要素
xのベクトルについては、上記
xに上付きの矢線の表記のほか、[vec{x}]とも記す。例えば、上記[数1]中のシェアxのm次元のベクトルは、[vec{x}]
mとも表記する。
【0023】
図5は、本発明の第1の実施形態の秘密計算サーバの構成を示す図である。
図5を参照すると、置換生成部101と、置換適用部102と、算術演算部103と、不正検知部104と、乱数計算部105と、ハッシュ値計算部106と、シード記憶部107と、シェア値記憶部108とを備えた構成が示されている。
【0024】
置換生成部101は、他の秘密計算サーバPiと連携して、Pi、Pi+1、Pi+2のみが知る置換[π]iを生成する。例えば、秘密計算サーバP1は[π]1、[π]3、[π]4を保持するが、[π]2に関する情報は保持しないことになる。
【0025】
置換適用部102は、上記シェアxのm次元ベクトル[vec{x}]mと、置換[π]iを入力として、[vec{x}]mを置換した[vec{y}]mを出力する。置換適用部102の具体的な処理の例は、後に、本実施形態の動作とともに説明する。
【0026】
算術演算部103は、xのシェアのm次元ベクトル[vec{x}]mと、乱数計算部105で計算された乱数との計算等を行う。算術演算部103の具体的な処理の例は、後に、本実施形態の動作とともに説明する。
【0027】
不正検知部104は、受信ノードとして動作する際に、検証ノードから送られた検証用データを用いて、他の秘密計算サーバで置換が正しく行われているか否かを検知する。他の秘密計算サーバで置換が正しく行われていないと判定した場合、不正検知部104は、処理の中止を決定する。
【0028】
乱数計算部105は、シード記憶部107に保持されているシードを用いて、2つの乱数を生成し、ハッシュ値計算部106に送る。
【0029】
ハッシュ値計算部106は、乱数計算部105にて計算された乱数のハッシュ値を計算する。本実施形態では、このハッシュ値を乱数として使用する。
【0030】
シード記憶部107は、上記した乱数を生成するためのシードを記憶する。本実施形態では、事前に、秘密計算サーバP1~P4に、以下のようにシードが配布されているものとする。
P1:(seed1,seed2,seed4)
P2:(seed2,seed3,seed4)
P3:(seed3,seed1,seed4)
P4:(seed1,seed2,seed3)
【0031】
シェア値記憶部108は、置換の対象となるシェアのm次元ベクトルを記憶する。以下の説明では、各秘密計算サーバP1~P4は、以下に示すように、2-out-of-4の秘密分散方式でxのシェアを分散保持するものとして説明する。ここでxは、有限環Rの元であり、x1,x2,x3は、x1+x2+x3がx(mod R)を満たすようにランダムに生成される。以下、xのシェアを[x]と表記し、秘密計算サーバPiが保持するシェアを[x]iと表記する。
P1:[x]1=(x1,x2)
P2:[x]2=(x2,x3)
P3:[x]3=(x3,x1)
P4:[x]4=(x1-x2,x2-x3)
【0032】
続いて、本実施形態の動作について図面を参照して詳細に説明する。本実施形態では、秘密計算サーバP1~P4のうちの1台が受信ノード、2台が再分散ノード、1台が検証ノードとして動作してミニシャッフルを行うラウンドを少なくとも4回繰り返すことで、xのシェアのm次元ベクトル[vec{x}]mのシャッフルを行う。すべてのラウンドで、不正検知部104が不正を検出できなかった場合、シャッフル成功となり、いずれかのラウンドで、不正検知部104が不正を検出した場合、処理を中止する。
【0033】
図6は、本発明の第1の実施形態のミニシャッフルの実行順序の一例を示す図である。
図6を参照すると、まず、i=1として、P
i+3であるP
4が受信ノードとなる。そして、P
i、P
i+1、P
i+2にあたるP
1~P
3が再分散ノード及び検証ノードとしてミニシャッフルを行う。以下、同様に、iをインクリメントしていき、i=4のラウンドを実行することでシャッフルが完了する。
【0034】
続いて、各ラウンドにおいて行われる処理の詳細を順番に説明する。
[ラウンド1 i=1]
図7は、ラウンド(i=1)の動作を説明するための図である。ラウンド1においては、秘密計算サーバP
4が受信ノードとなる。また、秘密計算サーバP
1,P
2が再分散ノード、秘密計算サーバP
3が検証ノードとなる。ラウンド1におけるミニシャッフルを次式[数2]のように表すものとする。
【0035】
【数2】
右辺の[vec{x}]
mは、シェアxを秘密分散したm次元のベクトルであり、[x
1],・・・,[x
m
]のように表される。実際には、前述のように、x
jは、x
j=x
j,1+x
j,2+x
j,3(j=1,・・・,m)を満たす形で、秘密計算サーバP
iに秘密分散される。右辺の[π]
1は、秘密計算サーバP
1、P
2、P
3のみが知る置換[π]
iである。
【0036】
以上の右辺の内容を入力とする出力[vec{y}]mは、置換[π]1を用いたミニシャッフルを1回行った結果であり、[yπ1(1)],・・・,[yπ1(m)]のように表される。この出力中のyπ1(j)も、前述のように、yπ1(j)=yπ1(j),1+yπ1(j),2+yπ1(j),3(j=1,・・・,m)を満たす形で、秘密計算サーバPiに分散保持される。
【0037】
次式[数3]に上記したミニシャッフルの手順を示す。
【0038】
【0039】
(ステップ1-1)まず、秘密計算サーバP1、P2、P3は、受信ノードである秘密計算サーバP4が知らないシードseed4を用いて、2つの乱数rj,1、rj,2を生成する。
【0040】
(ステップ1-2-1~1-2-3)次に、秘密計算サーバP1、P2、P3は、互いに連携して、乱数rj,1、rj,2を用いて、yπ1(j)=yπ1(j),1+yπ1(j),2+yπ1(j),3を満たすようなyπ1(j),1,yπ1(j),2,yπ1(j),3をそれぞれ計算する。具体的には、yπ1(j),1,yπ1(j),2,yπ1(j),3は、以下のように計算される。
yπ1(j),1=xπ1(j),1-rj,1
yπ1(j),2=xπ1(j),2+rj,1+rj,2
yπ1(j),3=xπ1(j),3-rj,2
【0041】
(ステップ1-3)次に、秘密計算サーバP1、P2、P3は、受信ノードである秘密計算サーバP4に対し、計算結果を送信する。具体的には、秘密計算サーバP1は、秘密計算サーバP4に対し、vec{y1}-vec{y2}をvec{m1,1}として送信する。秘密計算サーバP2は、秘密計算サーバP4に対し、vec{y2}-vec{y3}をvec{m2,2}として送信する。さらに、秘密計算サーバP3は、秘密計算サーバP4に対し、検証データとして、vec{y1}-vec{y3}をvec{m3}として送信する。なお、[数3]に表したとおり、vec{yi}は、([yπ1(1),i],・・・,[yπ1(m),i])のようなm次元のベクトルである。
【0042】
(ステップ1-4)次に、秘密計算サーバP4は、vec{m3}=vec{m1,1}+vec{m2,2}が成り立つか否かにより、不正検知を行う。vec{m3}=vec{m1,1}+vec{m2,2}が成り立つ場合、正しくミニシャッフルが行われたと判定し、秘密計算サーバP4は、次のラウンドに進む。一方、vec{m3}=vec{m1,1}+vec{m2,2}が成り立たない場合、秘密計算サーバP4は、不正なシャッフルが行われたと判定し、以降の処理を中断する。
【0043】
以上のミニシャッフルの結果、秘密計算サーバP1~P4は、次式[数4]のように、ミニシャッフル後のm次元ベクトルを保持することになる。
【0044】
【0045】
[ラウンド2 i=2]
図8は、ラウンド(i=2)の動作を説明するための図である。ラウンド2においては、秘密計算サーバP
1が受信ノードとなる。また、秘密計算サーバP
2,P
3が再分散ノード、秘密計算サーバP
4が検証ノードとなる。ラウンド2におけるミニシャッフルを次式[数5]のように表すものとする。
【0046】
【数5】
右辺の[π]
2は、秘密計算サーバP
2、P
3、P
4のみが知る置換[π]
iである。
【0047】
以上の右辺の内容を入力とする出力[vec{y}]mは、置換[π]2を用いたミニシャッフルを1回行った結果であり、[yπ2(1)],・・・,[yπ2(m)]のように表される。この出力中のyπ2(j)も、前述のように、yπ2(j)=yπ2(j),1+yπ2(j),2+yπ2(j),3(j=1,・・・,m)を満たす形で、秘密計算サーバPiに分散保持される。
【0048】
次式[数6]に上記したミニシャッフルの手順を示す。
【0049】
【0050】
(ステップ2-1)まず、秘密計算サーバP2、P3、P4は、受信ノードである秘密計算サーバP1が知らないシードseed3を用いて、2つの乱数rj,1、rj,2を生成する。
【0051】
(ステップ2-2-1~2-2-3)次に、秘密計算サーバP2、P3、P4は、互いに連携して、乱数rj,1、rj,2を用いて、yπ2(j)=yπ2(j),1+yπ2(j),2+yπ2(j),3(mod R)を満たすようなyπ2(j),1,yπ2(j),2,yπ2(j),3を計算する。具体的には、yπ2(j),1,yπ2(j),2,yπ2(j),3は、以下のように計算される。
yπ2(j),1=xπ2(j),1-rj,1
yπ2(j),2=xπ2(j),2+rj,1+rj,2
yπ2(j),3=xπ2(j),3-rj,2
【0052】
さらに、秘密計算サーバP4は、[数6]に示すように、yπ2(j),1-yπ2(j),2、yπ2(j),2-yπ2(j),3を計算する。
【0053】
(ステップ2-3)次に、秘密計算サーバP2、P3、P4は、受信ノードである秘密計算サーバP1に対し、計算結果を送信する。具体的には、秘密計算サーバP2は、秘密計算サーバP1に対し、vec{y2}をvec{m2,2}として送信する。秘密計算サーバP3は、秘密計算サーバP1に対し、vec{y1}をvec{m1,3}として送信する。さらに、秘密計算サーバP4は、秘密計算サーバP1に対し、検証データとして、vec{y1}-vec{y2}をvec{m4}として送信する。なお、[数6]に表したとおり、vec{yi}は、([yπ2(1),i],・・・,[yπ2(m),i])のようなm次元のベクトルである。
【0054】
(ステップ2-4)次に、秘密計算サーバP1は、vec{m4}=vec{m1,3}+vec{m2,2}が成り立つか否かにより、不正検知を行う。vec{m4}=vec{m1,3}+vec{m2,2}が成り立つ場合、正しくミニシャッフルが行われたと判定し、秘密計算サーバP1は、次のラウンドに進む。一方、vec{m4}=vec{m1,3}+vec{m2,2}が成り立たない場合、秘密計算サーバP1は、不正なシャッフルが行われたと判定し、以降の処理を中断する。
【0055】
以上のミニシャッフルの結果、秘密計算サーバP1~P4は、次式[数7]のように、ミニシャッフル後のm次元ベクトルを保持することになる。
【0056】
【0057】
[ラウンド3 i=3]
図9は、ラウンド(i=3)の動作を説明するための図である。ラウンド3においては、秘密計算サーバP
2が受信ノードとなる。また、秘密計算サーバP
3,P
1が再分散ノード、秘密計算サーバP
4が検証ノードとなる。ラウンド3におけるミニシャッフルを次式[数8]のように表すものとする。
【0058】
【数8】
右辺の[π]
3は、秘密計算サーバP
1、P
3、P
4のみが知る置換[π]
iである。
【0059】
以上の右辺の内容を入力とする出力[vec{y}]mは、置換[π]3を用いたミニシャッフルを1回行った結果であり、[yπ3(1)],・・・,[yπ3(m)]のように表される。この出力中のyπ3(j)も、前述のように、yπ3(j)=yπ3(j),1+yπ3(j),2+yπ3(j),3(j=1,・・・,m)を満たす形で、秘密計算サーバPiに分散保持される。
【0060】
次式[数9]に上記したミニシャッフルの手順を示す。
【0061】
【0062】
(ステップ3-1)まず、秘密計算サーバP3、P4、P1は、受信ノードである秘密計算サーバP2が知らないシードseed1を用いて、2つの乱数rj,1、rj,2を生成する。
【0063】
(ステップ3-2-1~3-2-3)次に、秘密計算サーバP3、P4、P1は、互いに連携して、乱数rj,1、rj,2を用いて、yπ3(j)=yπ3(j),1+yπ3(j),2+yπ3(j),3(mod R)を満たすようなyπ3(j),1,yπ3(j),2,yπ3(j),3を計算する。具体的には、yπ3(j),1,yπ3(j),2,yπ3(j),3は、以下のように計算される。
yπ3(j),1=xπ3(j),1-rj,1
yπ3(j),2=xπ3(j),2+rj,1+rj,2
yπ3(j),3=xπ3(j),3-rj,2
【0064】
さらに、秘密計算サーバP4は、[数9]に示すように、yπ3(j),1-yπ3(j),2、yπ3(j),2-yπ3(j),3を計算する。
【0065】
(ステップ3-3)次に、秘密計算サーバP3、P4、P1は、受信ノードである秘密計算サーバP2に対し、計算結果を送信する。具体的には、秘密計算サーバP3は、秘密計算サーバP2に対し、vec{y3}をvec{m3,3}として送信する。秘密計算サーバP1は、秘密計算サーバP2に対し、vec{y2}をvec{m2,1}として送信する。さらに、秘密計算サーバP4は、検証データとして、秘密計算サーバP2に対し、vec{y2}-vec{y3}をvec{m4}として送信する。なお、[数9]に表したとおり、vec{yi}は、([yπ3(1),i],・・・,[yπ3(m),i])のようなm次元のベクトルである。
【0066】
(ステップ3-4)次に、秘密計算サーバP2は、vec{m4}=vec{m2,1}-vec{m3,3}が成り立つか否かにより、不正検知を行う。vec{m4}=vec{m2,1}-vec{m3,3}が成り立つ場合、正しくミニシャッフルが行われたと判定し、秘密計算サーバP2は、次のラウンドに進む。一方、vec{m4}=vec{m2,1}-vec{m3,3}が成り立たない場合、秘密計算サーバP2は、不正なシャッフルが行われたと判定し、以降の処理を中断する。
【0067】
以上のミニシャッフルの結果、秘密計算サーバP1~P4は、次式[数10]のように、ミニシャッフル後のm次元ベクトルを保持することになる。
【0068】
【0069】
[ラウンド4 i=4]
図10は、ラウンド(i=4)の動作を説明するための図である。ラウンド4においては、秘密計算サーバP
3が受信ノードとなる。また、秘密計算サーバP
1,P
2が再分散ノード、秘密計算サーバP
4が検証ノードとなる。ラウンド4におけるミニシャッフルを次式[数11]のように表すものとする。
【0070】
【数11】
右辺の[π]
4は、秘密計算サーバP
1、P
2、P
4のみが知る置換[π]
iである。
【0071】
以上の右辺の内容を入力とする出力[vec{y}]mは、置換[π]4を用いたミニシャッフルを1回行った結果であり、[yπ4(1)],・・・,[yπ4(m)]のように表される。この出力中のyπ4(j)も、前述のように、yπ4(j)=yπ4(j),1+yπ4(j),2+yπ4(j),3(j=1,・・・,m)を満たす形で、秘密計算サーバPiに分散保持される。
【0072】
次式[数12]に上記したミニシャッフルの手順を示す。
【0073】
【0074】
(ステップ4-1)まず、秘密計算サーバP4、P1、P2は、受信ノードである秘密計算サーバP3が知らないシードseed2を用いて、2つの乱数rj,1、rj,2を生成する。
【0075】
(ステップ4-2-1~4-2-3)次に、秘密計算サーバP4、P1、P2は、互いに連携して、乱数rj,1、rj,2を用いて、yπ4(j)=yπ4(j),1+yπ4(j),2+yπ4(j),3(mod R)を満たすようなyπ4(j),1,yπ4(j),2,yπ4(j),3を計算する。具体的には、yπ4(j),1,yπ4(j),2,yπ4(j),3は、以下のように計算される。
yπ4(j),1=xπ4(j),1-rj,1
yπ4(j),2=xπ4(j),2+rj,1+rj,2
yπ4(j),3=xπ4(j),3-rj,2
【0076】
さらに、秘密計算サーバP4は、[数12]に示すように、yπ4(j),1-yπ3(j),2、yπ4(j),2-yπ4(j),3を計算する。
【0077】
(ステップ4-3)次に、秘密計算サーバP4、P1、P2は、受信ノードである秘密計算サーバP3に対し、計算結果を送信する。具体的には、秘密計算サーバP1は、秘密計算サーバP3に対し、vec{y1}をvec{m1,1}として送信する。秘密計算サーバP2は、秘密計算サーバP3に対し、vec{y3}をvec{m3,2}として送信する。さらに、秘密計算サーバP4は、秘密計算サーバP3に対し、検証データとして、vec{y1}-vec{y3}をvec{m4}として送信する。なお、[数12]に表したとおり、vec{yi}は、([yπ4(1),i],・・・,[yπ4(m),i])のようなm次元のベクトルである。
【0078】
(ステップ4-4)次に、秘密計算サーバP3は、vec{m4}=vec{m1,1}-vec{m3,2}が成り立つか否かにより、不正検知を行う。vec{m4}=vec{m1,1}-vec{m3,2}が成り立つ場合、正しくミニシャッフルが行われたと判定し、処理を終了する。一方、vec{m4}=vec{m1,1}-vec{m3,2}が成り立たない場合、秘密計算サーバP3は、不正なシャッフルが行われたと判定し、処理を中断する。
【0079】
以上のミニシャッフルの結果、秘密計算サーバP1~P4は、次式[数13]のように、ミニシャッフル後のm次元ベクトルを保持することになる。
【0080】
【0081】
以上のようなミニシャッフルを行うことで、入力された[vec{x}]mの置換[π]iを4回行うことが可能となる。また、上記各ラウンドで説明したとおり、[π]iによる置換は、受信ノードにその置換内容を知られない形態で行われるが、受信ノードは、不正を決定的検出できるようになっている。
【0082】
上記した4ラウンドの置換は、下記[数14]のように表すことができる。
【0083】
【0084】
また、本実施形態によるシャッフルのコストは、環のサイズがκビットのm個の要素の通信を1ラウンドあたり3回行うので、計4ラウンドで12κmビットとなる。
【0085】
[第2の実施形態]
上記した第1の実施形態では、4ラウンドを実行するものとして説明したが、計算の仕方に工夫を加えることで、2ラウンドにて、第1の実施形態と同等のシャッフルを行うことができる。以下、2ラウンドにてシャッフルを行う第2の実施形態について説明する。第2の実施形態は、第1の実施形態と同様の構成で実施可能であるため、以下、その相違点を中心に説明する。
【0086】
[ラウンド1 i=1、2]
図11は、第2の実施形態のラウンド1(i=1、2)の動作を説明するための図である。
図11に示されたとおり、第2の実施形態においては、第1の実施形態のラウンド1とラウンド2の計算とデータの送信が並列に行われる。具体的には、秘密計算サーバP
1は、秘密計算サーバP
4に対し、vec{y
1}-vec{y
2}をvec{m
1,1}として送信する。秘密計算サーバP
2は、秘密計算サーバP
4に対し、vec{y
2}-vec{y
3}をvec{m
2,2}として送信する。さらに、秘密計算サーバP
3は、秘密計算サーバP
4に対し、検証データとして、vec{y
1}-vec{y
3}をvec{m
3}として送信する。これと並列に、秘密計算サーバP
2は、秘密計算サーバP
1に対し、vec{y
2}をvec{m
2,2}として送信する。秘密計算サーバP
3は、秘密計算サーバP
1に対し、vec{y
1}をvec{m
1,3}として送信する。さらに、秘密計算サーバP
4は、秘密計算サーバP
1に対し、検証データとして、vec{y
1}-vec{y
2}をvec{m
4}として送信する。
【0087】
ここで、秘密計算サーバP2は、vec{m2,2}とvec{m2,2}を送信することになるが、[数3]のとおり、前者は、vec{y2}-vec{y3}であり、[数6]のとおり、後者は、vec{y2}であるので、並列して計算することができる。同様に、秘密計算サーバP3は、vec{m3}とvec{m1,3}を送信することになるが、[数3]のとおり、前者は、vec{y1}-vec{y2}であり、後者は、vec{y1}であるので、並列して計算することができる。
【0088】
図12は、第2の実施形態のラウンド2(i=3、4)の動作を説明するための図である。
図12に示されたとおり、第2の実施形態においては、第1の実施形態のラウンド3とラウンド4の計算とデータの送信が並列に行われる。具体的には、秘密計算サーバP
1は、秘密計算サーバP
2に対し、vec{y
2}をvec{m
2,1}として送信する。秘密計算サーバP
3は、秘密計算サーバP
2に対し、vec{y
3}をvec{m
3,3}として送信する。さらに、秘密計算サーバP
4は、秘密計算サーバP
2に対し、検証データとして、vec{y
2}-vec{y
3}をvec{m
4}として送信する。これと並列に、秘密計算サーバP
1は、秘密計算サーバP
3に対し、vec{y
1}をvec{m
1,1}として送信する。秘密計算サーバP
2は、秘密計算サーバP
3に対し、vec{y
3}をvec{m
3,2}として送信する。さらに、秘密計算サーバP
4は、秘密計算サーバP
3に対し、検証データとして、vec{y
1}-vec{y
3}をvec{m
4}として送信する。
【0089】
ここで、秘密計算サーバP1は、vec{m2,1}とvec{m1,1}を送信することになるが、[数9]のとおり、前者は、vec{y2}であり、[数12]のとおり、後者は、vec{y1}であるので、並列して計算することができる。同様に、秘密計算サーバP4は、vec{m4}とvec{m4}を送信することになるが、[数9]のとおり、前者は、vec{y2}-vec{y3}であり、後者は、vec{y1}-vec{y3}であるので、並列して計算することができる。もちろん、本実施形態においても、受信ノードが検証データを用いて、不正検知を行うことができる。
【0090】
さらに、本実施形態では、前述のとおりラウンド数を2に削減することができる。本実施形態において、ハッシュ値の通信コストを無視すると、通信コストは、8κmに削減することができる。
【0091】
[第3の実施形態]
続いて、上記した第1の実施形態の検証ノード及び受信ノードにおける検証の方法に変更を加えた第3の実施形態について説明する。第3の実施形態は、第1の実施形態と同様の構成で実施可能であるため、以下、その相違点を中心に説明する。
【0092】
第3の実施形態においては、ミニシャッフルの後半手順3.以降が次式[数15]の手順に置き換えられる。
【0093】
【0094】
具体的には、秘密計算サーバP
1は、秘密計算サーバP
4に対し、vec{y
1}-vec{y
2}をvec{m
1,1}として送信する。秘密計算サーバP
2は、秘密計算サーバP
4に対し、vec{y
2}-vec{y
3}をvec{m
2,2}として送信する。ここまでの動作は第1の実施形態と同様である。第3の実施形態では、秘密計算サーバP
3は、検証用データν
3を計算し、秘密計算サーバP
4に送信する(
図13参照)。一方、秘密計算サーバP
4は、検証用データν’を計算する。
【0095】
上記検証用データν3,ν’は次式[数16]に規定される。
【0096】
【0097】
そして、秘密計算サーバP4は、ν3=ν’が成り立つか否かにより、不正検知を行う。ν3=ν’が成り立つ場合、正しくミニシャッフルが行われたと判定し、秘密計算サーバP4は、次のラウンドに進む。一方、ν3=ν’が成り立たない場合、秘密計算サーバP4は、不正なシャッフルが行われたと判定し、以降の処理を中断する。なお、上記検証にあたり、確率的にしか行えないので,ν’の生成及びν3の生成・送信はセキュリティパラメータκ回だけ繰り返すことが好ましい(但し、ν3の送信は1ラウンドにまとめて良い)。
【0098】
ラウンド2以降も[数6][数9][数12]の手順3.以降は、それぞれ次の[数17]、[数18]、[数19]の手順に置き換えられる。
【0099】
【0100】
【0101】
【0102】
ラウンド2以降も同様であり、秘密計算サーバP
4は、検証用データν
4を計算し、受信ノードとなる秘密計算サーバP
iに送信する(
図14~
図16参照)。一方、秘密計算サーバP
4は、検証用データν’を計算する。また、ラウンド2以降も、上記ν’及びν
4を用いた検証は、確率的にしか行えないので,ν’の生成,ν
4の生成・送信はセキュリティパラメータκ回だけ繰り返すことが好ましい(但し、ν
4の送信は1ラウンドにまとめて良い)。
【0103】
上記検証用データν4,ν’は次式[数20]~[数22]に規定される。
【0104】
【0105】
【0106】
【0107】
以上、第3の実施形態によれば、ハッシュ関数を用いずに検証(不正検知)を行うことが可能となる。
【0108】
以上、本発明の各実施形態を説明したが、本発明は、上記した実施形態に限定されるものではなく、本発明の基本的技術的思想を逸脱しない範囲で、更なる変形・置換・調整を加えることができる。例えば、各図面に示したネットワーク構成、各要素の構成、データの表現形態は、本発明の理解を助けるための一例であり、これらの図面に示した構成に限定されるものではない。
【0109】
また、上記した第1から第3の実施形態に示した手順は、秘密計算ノード乃至秘密計算サーバPiとして機能するコンピュータ(
図17の9000)に、これらの装置としての機能を実現させるプログラムにより実現可能である。このようなコンピュータは、
図17のCPU(Central Processing Unit)9010、通信インターフェース9020、メモリ9030、補助記憶装置9040を備える構成に例示される。すなわち、
図17のCPU9010にて、乱数生成プログラムや置換処理プログラムを実行し、その補助記憶装置9040等に保持された各計算パラメーターの更新処理を実施させればよい。
【0110】
即ち、上記した第1から第3の実施形態に示した秘密計算サーバPiの各部(処理手段、機能)は、これらの装置に搭載されたプロセッサに、そのハードウェアを用いて、上記した各処理を実行させるコンピュータプログラムにより実現することができる。
【0111】
最後に、本発明の好ましい形態を要約する。
[第1の形態]
(上記第1の視点によるシャッフルシステム参照)
[第2の形態]
上記したシャッフルシステムにおいて、前記受信ノードは、前記検証ノードから受信したデータを用いた前記ミニシャッフルの正当性を確認した結果、前記ミニシャッフルの正当性を確認できない場合、処理を中止する構成を採ることができる。
[第3の形態]
上記したシャッフルシステムにおいて、
前記4台の秘密計算ノードは、
3つのシード(seed1,seed2,seed4)と秘密情報xのシェア(x1,x2)とを秘密分散して保持する第1の秘密計算ノードと、
3つのシード(seed2,seed3,seed4)と秘密情報xのシェア(x2,x3)とを秘密分散して保持する第2の秘密計算ノードと、
3つのシード(seed3,seed1,seed4)と秘密情報xのシェア(x3,x1)とを秘密分散して保持する第3の秘密計算ノードと、
3つのシード(seed1,seed2,seed3)と秘密情報xのシェア(x1-x2,x2-x3)とを秘密分散して保持する第4の秘密計算ノードと、により構成され、
前記再分散ノード及び前記検証ノードは、前記受信ノードの知らないシードを用いて、2つの乱数を生成し、
前記再分散ノードは、前記ミニシャッフルの結果として、前記シェアに前記乱数の組み合わせを適用した結果を前記受信ノードに送信し、
前記検証ノードは、前記2台の再分散ノードが前記受信ノードに送信した結果の和又は差を計算して、前記受信ノードに送信する構成を採ることができる。
[第4の形態]
上記したシャッフルシステムにおいて、
前記第4の秘密計算ノードと、第1の秘密計算ノードとを受信ノードとするミニシャッフルと、を並列に実行し、
前記第2の秘密計算ノードと、第3の秘密計算ノードとを受信ノードとするミニシャッフルと、を並列に実行する構成を採ることができる。
[第5の形態]
(上記第2の視点によるシャッフル方法参照)
[第6の形態]
(上記第3の視点によるプログラム参照)
なお、上記第5~第6の形態は、第1の形態と同様に、第2~第4の形態に展開することが可能である。
【0112】
なお、上記の特許文献および非特許文献の各開示は、本書に引用をもって繰り込み記載されているものとし、必要に応じて本発明の基礎ないし一部として用いることが出来るものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし選択(部分的削除を含む)が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。さらに、上記引用した文献の各開示事項は、必要に応じ、本発明の趣旨に則り、本発明の開示の一部として、その一部又は全部を、本書の記載事項と組み合わせて用いることも、本願の開示事項に含まれるものと、みなされる。
【産業上の利用可能性】
【0113】
本発明は、シャッフルシステムのほか、そのシャッフル機能を用いたソート処理を行う秘密分散システムに適用することができる。
【符号の説明】
【0114】
10-1~10-4 秘密計算ノード
101 置換生成部
102 置換適用部
103 算術演算部
104 不正検知部
105 乱数計算部
106 ハッシュ値計算部
107 シード記憶部
108 シェア値記憶部
9000 コンピュータ
9010 CPU
9020 通信インターフェース
9030 メモリ
9040 補助記憶装置
P1~P4 秘密計算サーバ