(57)【特許請求の範囲】
【請求項１】
複数の秘密計算装置を含む秘密集約順位システムであって、
mは２以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記キー属性の値に基づいてグループ分けしたときの各グループのレコード数が先頭からグループ数までの要素に設定されたクロス集計v:=v0, …, vm-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、
上記秘密計算装置は、
上記シェア[v]と上記シェア{{σ}}とを用いて、復元すると上記クロス集計vに上記置換σを逆適用した逆置換済みクロス集計u:=σ-1(v)となるシェア[u]:=[σ-1(v)]を生成する逆置換部と、
上記シェア[u]を用いて、0以上m-1以下の各整数iについて[si]に[u0]から[ui]までの総和を設定して、復元するとベクトルs:=s0, …, sm-1∈Fとなるシェア[s]を生成する部分総和部と、
上記シェア[s]を用いて、1以上m-1以下の各整数iについて[xi]:=[i-si-1]を設定し、かつ、[x0]:=[0]を設定して、復元するとグループ内での昇順順位を表すベクトルx:=x0, …, xm-1となるシェア[x]を生成する順位計算部と、
を含む秘密集約順位システム。
【請求項２】
複数の秘密計算装置を含む秘密集約順位システムであって、
mは２以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記キー属性の値に基づいてグループ分けしたときの各グループのレコード数が先頭からグループ数までの要素に設定されたクロス集計v:=v0, …, vm-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、
上記秘密計算装置は、
上記シェア[v]を用いて、0以上m-2以下の各整数iについて[v'i]:=[vi+1]を設定し、かつ、[v'm-1]:=[0]を設定して、復元するとシフト済みクロス集計v':=v'0, …, v'm-1となるシェア[v']を生成するカウントシフト部と、
上記シェア[v']と上記シェア{{σ}}とを用いて、復元すると上記シフト済みクロス集計v'に上記置換σを逆適用した逆置換済みクロス集計u':=σ-1(v')となるシェア[u']:=[σ-1(v')]を生成する逆置換部と、
上記シェア[u']を用いて、0以上m-1以下の各整数iについて[s'i]に[u'i]から[u'm-i]までの総和を設定して、復元するとベクトルs':=s'0, …, s'm-1∈Fとなるシェア[s']を生成する部分総和部と、
上記シェア[s']を用いて、1以上m-1以下の各整数iについて[x'i]:=[m-i-s'i-1]を設定して、復元するとグループ内での降順順位を表すベクトルx':=x'0, …, x'm-1となるシェア[x']を生成する順位計算部と、
を含む秘密集約順位システム。
【請求項３】
請求項１または２に記載の秘密集約順位システムであって、
Fは任意の環であり、nkは１以上の整数であり、[k0], …, [knk-1]はキー属性k0, …, knk-1∈Fmを秘密分散したシェアであり、
上記秘密計算装置は、
上記シェア[k0], …, [knk-1]を用いて、復元すると上記キー属性k0, …, knk-1をビット分解して結合したビット列b:=b0, …, bm-1となるシェア{b}から、復元すると上記ビット列bを昇順に安定ソートする置換σ0となるシェア{{σ0}}を生成するグループソート生成部と、
上記シェア{b}と上記シェア{{σ0}}とを用いて、復元すると上記ビット列bを上記置換σ0でソートしたソート済みビット列b':=b'0, …, b'm-1となるシェア{b'}を生成するビット列ソート部と、
上記シェア{b'}を用いて、0以上m-2以下の各整数iについて{ei}:={b'i≠b'i+1}を設定し、かつ、{em-1}:={1}を設定して、復元すると上記フラグe:=e0, …, em-1となる上記シェア{e}を生成するフラグ生成部と、
上記シェア{e}を用いて、復元すると上記フラグeの否定¬eを昇順に安定ソートする上記置換σとなる上記シェア{{σ}}を生成するキー集約ソート生成部と、
上記シェア{e}を用いて、0以上m-1以下の各整数iについて、{ei}が真のとき[x"i]:=[i+1]を設定し、{ei}が偽のとき[x"i]:=[m]を設定して、復元するとベクトルx":=x"0, …, x"m-1となるシェア[x"]を生成する境界番号設定部と、
上記シェア[x"]と上記シェア{{σ}}とを用いて、復元すると上記ベクトルx"を上記置換σでソートしたソート済みベクトルσ(x")となるシェア[σ(x")]を生成するソート部と、
上記シェア[σ(x")]を用いて、1以上min(g,m)-1以下の各整数iについて[vi]:=[σ(x")i-σ(x")i-1]を設定し、かつ、min(g,m)以上m-1以下の各整数iについて[vi]:=[0]を設定し、かつ、[v0]:=[σ(x")0]を設定して、復元すると各グループのレコード数を表すベクトルv:=v0, …, vm-1となるシェア[v]を生成するカウント計算部と、
をさらに含む秘密集約順位システム。
【請求項４】
mは２以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記キー属性の値に基づいてグループ分けしたときの各グループのレコード数が先頭からグループ数までの要素に設定されたクロス集計v:=v0, …, vm-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、
上記シェア[v]と上記シェア{{σ}}とを用いて、復元すると上記クロス集計vに上記置換σを逆適用した逆置換済みクロス集計u:=σ-1(v)となるシェア[u]:=[σ-1(v)]を生成する逆置換部と、
上記シェア[u]を用いて、0以上m-1以下の各整数iについて[si]に[u0]から[ui]までの総和を設定して、復元するとベクトルs:=s0, …, sm-1∈Fとなるシェア[s]を生成する部分総和部と、
上記シェア[s]を用いて、1以上m-1以下の各整数iについて[xi]:=[i-si-1]を設定し、かつ、[x0]:=[0]を設定して、復元するとグループ内での昇順順位を表すベクトルx:=x0, …, xm-1となるシェア[x]を生成する順位計算部と、
を含む秘密計算装置。
【請求項５】
mは２以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記キー属性の値に基づいてグループ分けしたときの各グループのレコード数が先頭からグループ数までの要素に設定されたクロス集計v:=v0, …, vm-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、
上記シェア[v]を用いて、0以上m-2以下の各整数iについて[v'i]:=[vi+1]を設定し、かつ、[v'm-1]:=[0]を設定して、復元するとシフト済みクロス集計v':=v'0, …, v'm-1となるシェア[v']を生成するカウントシフト部と、
上記シェア[v']と上記シェア{{σ}}とを用いて、復元すると上記シフト済みクロス集計v'に上記置換σを逆適用した逆置換済みクロス集計u':=σ-1(v')となるシェア[u']:=[σ-1(v')]を生成する逆置換部と、
上記シェア[u']を用いて、0以上m-1以下の各整数iについて[s'i]に[u'i]から[u'm-i]までの総和を設定して、復元するとベクトルs':=s'0, …, s'm-1∈Fとなるシェア[s']を生成する部分総和部と、
上記シェア[s']を用いて、1以上m-1以下の各整数iについて[x'i]:=[m-i-s'i-1]を設定して、復元するとグループ内での降順順位を表すベクトルx':=x'0, …, x'm-1となるシェア[x']を生成する順位計算部と、
を含む秘密計算装置。
【請求項６】
複数の秘密計算装置を含む秘密集約順位システムが実行する秘密集約順位方法であって、
mは２以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記キー属性の値に基づいてグループ分けしたときの各グループのレコード数が先頭からグループ数までの要素に設定されたクロス集計v:=v0, …, vm-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、
上記秘密計算装置の逆置換部が、上記シェア[v]と上記シェア{{σ}}とを用いて、復元すると上記クロス集計vに上記置換σを逆適用した逆置換済みクロス集計u:=σ-1(v)となるシェア[u]:=[σ-1(v)]を生成し、
上記秘密計算装置の部分総和部が、上記シェア[u]を用いて、0以上m-1以下の各整数iについて[si]に[u0]から[ui]までの総和を設定して、復元するとベクトルs:=s0, …, sm-1∈Fとなるシェア[s]を生成し、
上記秘密計算装置の順位計算部が、上記シェア[s]を用いて、1以上m-1以下の各整数iについて[xi]:=[i-si-1]を設定し、かつ、[x0]:=[0]を設定して、復元するとグループ内での昇順順位を表すベクトルx:=x0, …, xm-1となるシェア[x]を生成する、
秘密集約順位方法。
【請求項７】
複数の秘密計算装置を含む秘密集約順位システムが実行する秘密集約順位方法であって、
mは２以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記キー属性の値に基づいてグループ分けしたときの各グループのレコード数が先頭からグループ数までの要素に設定されたクロス集計v:=v0, …, vm-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、
上記秘密計算装置のカウントシフト部が、上記シェア[v]を用いて、0以上m-2以下の各整数iについて[v'i]:=[vi+1]を設定し、かつ、[v'm-1]:=[0]を設定して、復元するとシフト済みクロス集計v':=v'0, …, v'm-1となるシェア[v']を生成し、
上記秘密計算装置の逆置換部が、上記シェア[v']と上記シェア{{σ}}とを用いて、復元すると上記シフト済みクロス集計v'に上記置換σを逆適用した逆置換済みクロス集計u':=σ-1(v')となるシェア[u']:=[σ-1(v')]を生成し、
上記秘密計算装置の部分総和部が、上記シェア[u']を用いて、0以上m-1以下の各整数iについて[s'i]に[u'i]から[u'm-i]までの総和を設定して、復元するとベクトルs':=s'0, …, s'm-1∈Fとなるシェア[s']を生成し、
上記秘密計算装置の順位計算部が、上記シェア[s']を用いて、1以上m-1以下の各整数iについて[x'i]:=[m-i-s'i-1]を設定して、復元するとグループ内での降順順位を表すベクトルx':=x'0, …, x'm-1となるシェア[x']を生成する、
秘密集約順位方法。
【請求項８】
請求項４または５に記載の秘密計算装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は秘密計算技術に関し、特に、秘匿性を保ったまま集約関数を計算する技術に関する。
【背景技術】
【０００２】
集約関数は、テーブルにキー属性とバリュー属性があるときに、キー属性の値に基づいてグループ分けした統計値を得る演算である。集約関数は、group-by演算とも呼ばれる。キー属性は、テーブルのレコードをグループ分けするために用いる属性であり、例えば、役職や性別などが挙げられる。バリュー属性は、統計値を計算するために用いる属性であり、例えば、給料や身長などが挙げられる。group-by演算は、例えば、キー属性が性別のときに、男女別の平均身長を求める演算などである。キー属性は複数の属性による複合キーであってもよく、例えば、キー属性が性別と年齢のときに、10代男性の平均身長、20代男性の平均身長、・・・を得るような演算であってもよい。非特許文献１には、group-by演算を秘密計算で行う方法が記載されている。【０００３】
集約順位は、集約関数の一つであり、テーブルをキー属性の値に基づいてグループ分けしたときに、所望のバリュー属性の値がグループ内で何番目の値であるかを得る演算である。集約順位は、グループ内の順位とも呼ばれ、バリュー属性を昇順でソートしたときの順位であるグループ内の昇順順位と、バリュー属性を降順でソートしたときの順位であるグループ内の降順順位とがある。例えば、キー属性が年齢と性別であり、バリュー属性が給料のときに、グループ内の昇順順位は、給料が20代男性の中で低い方から数えて何番目、30代男性の中で低い方から数えて何番目、・・・を得るような演算であり、グループ内の降順順位は、給料が20代男性の中で高い方から数えて何番目、30代男性の中で高い方から数えて何番目、・・・を得るような演算である。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】五十嵐大，千田浩司，濱田浩気，高橋克巳，“軽量検証可能３パーティ秘匿関数計算の効率化及びこれを用いたセキュアなデータベース処理”，２０１１年暗号と情報セキュリティシンポジウム
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来の秘密計算技術では、グループ内の順位を求めるために、nを計算主体の数としてlog(n)の通信回数が必要となり、効率が悪かった。【０００６】
この発明の目的は、上記のような技術的課題に鑑みて、秘匿性を保ったままグループ内の順位を効率的に求めることができる技術を提供することである。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために、この発明の第一の態様の秘密集約順位システムは、複数の秘密計算装置を含む秘密集約順位システムであって、mは２以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルをキー属性の値に基づいてグループ分けしたときの各グループのレコード数が先頭からグループ数までの要素に設定されたクロス集計v:=v0, …, vm-1を秘密分散したシェアであり、{{σ}}はテーブルをキー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、秘密計算装置は、シェア[v]とシェア{{σ}}とを用いて、復元するとクロス集計vに置換σを逆適用した逆置換済みクロス集計u:=σ-1(v)となるシェア[u]:=[σ-1(v)]を生成する逆置換部と、シェア[u]を用いて、0以上m-1以下の各整数iについて[si]に[u0]から[ui]までの総和を設定して、復元するとベクトルs:=s0, …, sm-1∈Fとなるシェア[s]を生成する部分総和部と、シェア[s]を用いて、1以上m-1以下の各整数iについて[xi]:=[i-si-1]を設定し、かつ、[x0]:=[0]を設定して、復元するとグループ内での昇順順位を表すベクトルx:=x0, …, xm-1となるシェア[x]を生成する順位計算部と、を含む。【０００８】
上記の課題を解決するために、この発明の第二の態様の秘密集約順位システムは、複数の秘密計算装置を含む秘密集約順位システムであって、mは２以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルをキー属性の値に基づいてグループ分けしたときの各グループのレコード数が先頭からグループ数までの要素に設定されたクロス集計v:=v0, …, vm-1を秘密分散したシェアであり、{{σ}}はテーブルをキー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、秘密計算装置は、シェア[v]を用いて、0以上m-2以下の各整数iについて[v'i]:=[vi+1]を設定し、かつ、[v'm-1]:=[0]を設定して、復元するとシフト済みクロス集計v':=v'0, …, v'm-1となるシェア[v']を生成するカウントシフト部と、シェア[v']とシェア{{σ}}とを用いて、復元するとシフト済みクロス集計v'に置換σを逆適用した逆置換済みクロス集計u':=σ-1(v')となるシェア[u']:=[σ-1(v')]を生成する逆置換部と、シェア[u']を用いて、0以上m-1以下の各整数iについて[s'i]に[u'i]から[u'm-i]までの総和を設定して、復元するとベクトルs':=s'0, …, s'm-1∈Fとなるシェア[s']を生成する部分総和部と、シェア[s']を用いて、1以上m-1以下の各整数iについて[x'i]:=[m-i-s'i-1]を設定して、復元するとグループ内での降順順位を表すベクトルx':=x'0, …, x'm-1となるシェア[x']を生成する順位計算部と、を含む。
【発明の効果】
【０００９】
この発明の秘密集約順位技術によれば、秘匿性を保ったままグループ内の順位をO(1)の通信回数で効率的に求めることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、秘密集約順位システムの機能構成を例示する図である。
【図２】図２は、秘密計算装置の機能構成を例示する図である。
【図３】図３は、秘密集約順位方法（昇順順位）の処理手続きを例示する図である。
【図４】図４は、秘密集約順位方法（降順順位）の処理手続きを例示する図である。
【図５】図５は、変形例の秘密計算装置の機能構成を例示する図である。
【発明を実施するための形態】
【００１１】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【００１２】
[x]∈[F]は、ある値xが任意の環F上の秘密分散等により秘匿されていることを表す。{b}∈{B}は、１ビットのある値bが１ビットを表せる環B上の秘密分散等により秘匿されていることを表す。{{s}}∈{{Sm}}は、m個の要素の置換の集合Smに属するある置換sが秘密分散等により秘匿されていることを表す。以下、秘密分散された値を「シェア」とも呼ぶ。
【００１３】
＜第一実施形態＞
≪グループ内の昇順順位≫
この発明の第一実施形態は、グループ内の昇順順位を求める秘密集約順位システムおよび方法である。図１を参照して、第一実施形態の秘密集約順位システム１００の構成例を説明する。秘密集約順位システム１００は、N（≧2）台の秘密計算装置１1, …, １Nを含む。本形態では、秘密計算装置１1, …, １Nはそれぞれ通信網９へ接続される。通信網９は、接続される各装置が相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN（Local Area Network）、WAN（Wide Area Network）などを用いることができる。なお、各装置は必ずしも通信網９を介してオンラインで通信可能である必要はない。例えば、秘密計算装置１1, …, １Nへ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体から秘密計算装置１1, …, １Nへオフラインで入力するように構成してもよい。
【００１４】
図２を参照して、本形態の秘密集約順位システム１００に含まれる秘密計算装置１n（n=1, …, N）の構成例を説明する。秘密計算装置１nは、例えば、図２に示すように、入力部１０、逆置換部１２、部分総和部１３、順位計算部１４、および出力部１５を含む。この秘密計算装置１n（1≦n≦N）が他の秘密計算装置１n'（n'=1, …, N、ただしn≠n'）と協調しながら後述する各ステップの処理を行うことにより第一実施形態の秘密集約順位方法が実現される。
【００１５】
秘密計算装置１nは、例えば、中央演算処理装置（CPU: Central Processing Unit）、主記憶装置（RAM: Random Access Memory）などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密計算装置１nは、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密計算装置１nに入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密計算装置１nの各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【００１６】
図３を参照して、第一実施形態の秘密集約順位システム１００が実行する秘密集約順位方法（昇順順位）の処理手続きを説明する。
【００１７】
ステップＳ１０において、各秘密計算装置１nの入力部１０は、クロス集計v∈Fmを秘密分散により秘匿したシェア[v]∈[F]mと、置換σを秘密分散により秘匿したシェア{{σ}}∈{{Sm}}とを入力として受け取る。ただし、mは２以上の整数である。入力部１０は、クロス集計vのシェア[v]と置換σのシェア{{σ}}とを逆置換部１２へ出力する。
【００１８】
クロス集計vは、各グループのレコード数を集計した結果である。例えば、クロス集計vは、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、先頭からグループ数までの要素には各グループのレコード数を集計した結果が設定され、それ以降の要素には０が設定されたベクトルである。グループ数は１以上m以下の整数であり、mと等しいとは限らない。グループ数は秘密の値であり、以降の処理でグループ数の値を参照することはなく、グループ数を知らなくても処理が可能なように構成されている。なお、安定ソートとは、ソート演算のうち、同じ値の要素が存在した場合に、同じ値の要素同士の順序を保存する演算である。例えば、社員番号順でソートされたテーブルに対して性別で安定ソートすると、各性別の中で社員番号順が保たれているソート結果が得られる。
【００１９】
置換σは、各グループのキー属性の値を先頭から１つずつ並べる置換である。例えば、置換σは、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、各グループの最後の要素が先頭から順に並び、続いて他の要素が順に並ぶように移動する置換である。
【００２０】
ステップＳ１２において、各秘密計算装置１nの逆置換部１２は、クロス集計vのシェア[v]と置換σのシェア{{σ}}とを用いて、復元するとクロス集計vに置換σを逆適用した逆置換済みクロス集計u:=σ-1(v)となるシェア[u]:=[σ-1(v)]∈[F]mを生成する。クロス集計vは先頭からグループ数までの要素に各グループのレコード数が設定されたベクトルであり、置換σは各グループの最後の要素を先頭から順に並べる置換であるため、クロス集計vに置換σを逆適用した逆置換済みクロス集計uは各グループの最後の要素にそのグループのレコード数が設定されたベクトルとなる。以下、[u]∈[F]mの各要素は、[ui]∈[F]（i=0, …, m-1）で参照することもある。逆置換部１２は、逆置換済みクロス集計uのシェア[u]を部分総和部１３へ出力する。
【００２１】
ステップＳ１３において、各秘密計算装置１nの部分総和部１３は、逆置換済みクロス集計uのシェア[u]を用いて、[s]:=prefix-sum([u])を計算し、復元するとベクトルs:=s0, …, sm-1∈Fとなるシェア[s]∈[F]mを生成する。prefix-sumは、mを入力ベクトルuの長さとして、0以上m-1以下の各整数iについて、出力ベクトルsのi番目の要素siには入力ベクトルuの0番目の要素u0からi番目の要素uiまでの値の総和を設定する演算である。部分総和部１３は、ベクトルsのシェア[s]を順位計算部１４へ出力する。
【００２２】
ステップＳ１４において、各秘密計算装置１nの順位計算部１４は、ベクトルsのシェア[s]を用いて、1以上m-1以下の各整数iについて[xi]:=[i-si-1]を設定し、かつ、[x0]:=[0]を設定して、復元するとグループ内での昇順順位x:=x0, …, xm-1∈Fとなるシェア[x]∈[F]mを生成する。なお、グループ内での昇順順位は０スタートとなることに注意されたい。１スタートの順位を得たいのであれば、各順位に１を加算すればよい。すなわち、1以上m-1以下の各整数iについて[xi]:=[i-si-1+1]を設定し、かつ、[x0]:=[1]を設定して、昇順順位xを生成すればよい。順位計算部１４は、昇順順位xのシェア[x]を出力部１５へ出力する。
【００２３】
ステップＳ１５において、各秘密計算装置１nの出力部１５は、昇順順位xのシェア[x]を出力する。
【００２４】
＜第二実施形態＞
≪グループ内の降順順位≫
この発明の第二実施形態は、グループ内の降順順位を求める秘密集約順位システムおよび方法である。図１を参照して、第二実施形態の秘密集約順位システム１０１の構成例を説明する。本形態の秘密集約順位システム１０１は、N（≧2）台の秘密計算装置２1, …, ２Nを含む。本形態では、秘密計算装置２1, …, ２Nはそれぞれ通信網９へ接続される。通信網９は、接続される各装置が相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN（Local Area Network）、WAN（Wide Area Network）などを用いることができる。なお、各装置は必ずしも通信網９を介してオンラインで通信可能である必要はない。例えば、秘密計算装置２1, …, ２Nへ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体から秘密計算装置２1, …, ２Nへオフラインで入力するように構成してもよい。
【００２５】
図２を参照して、本形態の秘密集約順位システム１０１に含まれる秘密計算装置２n（n=1, …, N）の構成例を説明する。秘密計算装置２nは、例えば、図２に示すように、第一実施形態の秘密集約順位システム１００に含まれる秘密計算装置１nが備える処理部に加えて、カウントシフト部１１をさらに含む。この秘密計算装置２n（1≦n≦N）が他の秘密計算装置２n'（n'=1, …, N、ただしn≠n'）と協調しながら後述する各ステップの処理を行うことにより第二実施形態の秘密集約順位方法が実現される。
【００２６】
図４を参照して、第二実施形態の秘密集約順位システム１０１が実行する秘密集約順位方法（降順順位）の処理手続きを説明する。
【００２７】
ステップＳ１０において、各秘密計算装置２nの入力部１０は、クロス集計v∈Fmを秘密分散により秘匿したシェア[v]∈[F]mと、置換σを秘密分散により秘匿したシェア{{σ}}∈{{Sm}}とを入力として受け取る。入力部１０は、クロス集計vのシェア[v]をカウントシフト部１１へ出力する。また、入力部１０は、置換σのシェア{{σ}}を逆置換部１２へ出力する。
【００２８】
ステップＳ１１において、各秘密計算装置２nのカウントシフト部１１は、クロス集計vのシェア[v]を用いて、0以上m-2以下の各整数iについて[v'i]:=[vi+1]を設定し、かつ、[v'm-1]:=[0]を設定して、復元するとシフト済みクロス集計v':=v'0, …, v'm-1∈Fmとなるシェア[v']∈[F]mを生成する。シフト済みクロス集計v'は各グループのレコード数を表すベクトルであるクロス集計vを一つずつ前方へシフトしたベクトルとなる。カウントシフト部１１は、シフト済みクロス集計v'のシェア[v']を逆置換部１２へ出力する。
【００２９】
ステップＳ１２において、各秘密計算装置２nの逆置換部１２は、シフト済みクロス集計v'のシェア[v']と置換σのシェア{{σ}}とを用いて、復元するとシフト済みクロス集計v'に置換σを逆適用した逆置換済みクロス集計u':=σ-1(v')となるシェア[u']:=[σ-1(v')]∈[F]mを生成する。シフト済みクロス集計v'は先頭からグループ数までの要素に各グループのレコード数が設定されたクロス集計vを一つずつ前方へシフトしたベクトルであり、置換σは各グループの最後の要素を先頭から順に並べる置換であるため、シフト済みクロス集計v'に置換σを逆適用した逆置換済みクロス集計u'は各グループの最後の要素に一つ後方のグループのレコード数が設定されたベクトルとなる。以下、[u']∈[F]mの各要素は、[u'i]∈[F]（i=0, …, m-1）で参照することもある。逆置換部１２は、逆置換済みクロス集計u'のシェア[u']を部分総和部１３へ出力する。
【００３０】
ステップＳ１３において、各秘密計算装置２nの部分総和部１３は、逆置換済みクロス集計u'のシェア[u']を用いて、[s']:=postfix-sum([u'])を計算し、復元するとベクトルs':=s'0, …, s'm-1∈Fとなるシェア[s']∈[F]mを生成する。postfix-sumは、mを入力ベクトルu'の長さとして、0以上m-1以下の各整数iについて、出力ベクトルs'のi番目の要素s'iには入力ベクトルu'のi番目の要素u'iからm-1番目の要素u'm-1までの値の総和を設定する演算である。部分総和部１３は、ベクトルs'のシェア[s']を順位計算部１４へ出力する。
【００３１】
ステップＳ１４において、各秘密計算装置２nの順位計算部１４は、ベクトルs'のシェア[s']を用いて、0以上m-1以下の各整数iについて[x'i]:=[m-i-s'i-1]を設定して、復元するとグループ内での降順順位x':=x'0, …, x'm-1∈Fとなるシェア[x']∈[F]mを生成する。なお、グループ内での降順順位は０スタートとなることに注意されたい。１スタートの順位を得たいのであれば、各順位に１を加算すればよい。すなわち、0以上m-1以下の各整数iについて[x'i]:=[m-i-s'i]を設定して、降順順位x'を生成すればよい。順位計算部１４は、降順順位x'のシェア[x']を出力部１５へ出力する。
【００３２】
ステップＳ１５において、各秘密計算装置２nの出力部１５は、降順順位x'のシェア[x']を出力する。
【００３３】
＜変形例＞
上記の実施形態では、入力部１０へクロス集計vのシェア[v]と置換σのシェア{{σ}}とが入力される構成を説明した。変形例では、入力部１０へテーブルを秘密分散等により秘匿したシェアが入力され、クロス集計vのシェア[v]と置換σのシェア{{σ}}とを求めてから、上記の実施形態で説明した手順に従ってグループ内の順位を計算する構成を説明する。
【００３４】
変形例の秘密計算装置３n（n=1, …, N）は、例えば、図５に示すように、第一実施形態の秘密計算装置１n（n=1, …, N）または第二実施形態の秘密計算装置２n（n=1, …, N）が備える各処理部に加えて、ビット分解部２１、グループソート生成部２２、ビット列ソート部２３、フラグ生成部２４、キー集約ソート生成部２５、フラグ変換部３１、境界番号設定部３２、ソート部３３、およびカウント計算部３４を含む。以下、第一実施形態および第二実施形態の秘密集約順位システムと異なる点についてのみ説明する。
【００３５】
各秘密計算装置３nの入力部１０は、nk個のキー属性k0, …, knk-1∈Fmそれぞれを秘密分散により秘匿したシェア[k0], …, [knk-1]∈[F]mと、na個のバリュー属性v0, …, vna-1∈Fmそれぞれを秘密分散により秘匿したシェア[v0], …, [vna-1]∈[F]mとを入力として受け取る。ただし、nk, naは１以上の整数である。以下、[kj]∈[F]m（j=0, …, nk-1）の各要素は、[kj,i]∈[F]（i=0, …, m-1）で参照することもある。入力部１０は、キー属性k0, …, knk-1のシェア[k0], …, [knk-1]をビット分解部２１へ出力する。
【００３６】
各秘密計算装置３nのビット分解部２１は、キー属性k0, …, knk-1のシェア[k0], …, [knk-1]をビット分解して結合し、復元するとキー属性k0, …, knk-1のビット表現を結合したビット列b:=b0, …, bm-1∈Bλとなるシェア{b}∈{B}λを得る。ただし、λはビット列bのビット長であり、各bi（i=0, …, m-1）のビット長の総和である。言い替えると、{bi}は、キー属性k0, …, knk-1のシェア[k0], …, [knk-1]それぞれのi番目の要素[k0,i], …, [knk-1,i]のビット表現を結合したビット列である。ビット分解部２１は、ビット列bのシェア{b}をグループソート生成部２２へ出力する。
【００３７】
各秘密計算装置３nのグループソート生成部２２は、ビット列bのシェア{b}を用いて、復元するとビット列bを昇順で安定ソートするための置換σ0となるシェア{{σ0}}∈{{Sm}}を生成する。ビット列bはキー属性k0, …, knk-1のビット表現を結合したものであるため、置換σ0はキー属性k0, …, knk-1の値が等しいレコードを連続するように並び替えてグループ分けする操作であるとも言える。グループソート生成部２２は、ビット列bのシェア{b}と置換σ0のシェア{{σ0}}とをビット列ソート部２３へ出力する。
【００３８】
各秘密計算装置３nのビット列ソート部２３は、ビット列bのシェア{b}と置換σ0のシェア{{σ0}}とを用いて、復元するとビット列bを置換σ0でソートしたソート済みビット列b':=b'0, …, b'm-1∈Bλとなるシェア{b'}∈{B}λを得る。ビット列ソート部２３は、ソート済みビット列b'のシェア{b'}をフラグ生成部２４へ出力する。
【００３９】
各秘密計算装置３nのフラグ生成部２４は、ソート済みビット列b'のシェア{b'}を用いて、0以上m-2以下の各整数iについて{ei}:={b'i≠b'i+1}を設定し、かつ、{em-1}:={1}を設定して、復元するとフラグe:=e0, …, em-1∈Bmとなるシェア{e}∈{B}mを生成する。フラグeiはソート済みビット列b'のi番目の要素b'iがi+1番目の要素b'i+1と異なる場合に真が設定されるため、各グループの最後の要素（すなわち、グループ間の境界の直前の要素）を示すフラグとなる。フラグ生成部２４は、フラグeのシェア{e}をキー集約ソート生成部２５へ出力する。また、フラグ生成部２４は、フラグeのシェア{e}をフラグ変換部３１へ出力する。
【００４０】
各秘密計算装置３nのキー集約ソート生成部２５は、まず、フラグeのシェア{e}を用いて、復元するとフラグeの否定¬eであるフラグe'となるシェア{e'}∈{B}mを生成する。すなわち、0以上m-1以下の各整数iについて{e'i}:={¬ei}を設定する。次に、キー集約ソート生成部２５は、フラグe'のシェア{e'}を用いて、復元するとフラグe'を昇順に安定ソートするための置換σとなるシェア{{σ}}∈{{Sm}}を生成する。キー集約ソート生成部２５は、置換σのシェア{{σ}}をソート部３３へ出力する。また、キー集約ソート生成部２５は、置換σのシェア{{σ}}をカウントシフト部１１または逆置換部１２へ出力する。
【００４１】
各秘密計算装置３nのフラグ変換部３１は、フラグeのシェア{e}∈{B}mを任意の環F上の秘密分散によるシェア[e]∈[F]mに変換する。フラグ変換部３１は、フラグeのシェア[e]を境界番号設定部３２へ出力する。
【００４２】
各秘密計算装置３nの境界番号設定部３２は、フラグeのシェア[e]を用いて、0以上m-1以下の各整数iについて[x"i]:=[ei?i+1:m]を設定し、復元するとベクトルx":=x"0, …, x"m-1∈Fとなるシェア[x"]∈[F]mを生成する。ここで、「?」は条件演算子（または三項演算子）である。すなわち、[ei]が真（例えば、[ei]=[1]）のときは[x"i]:=[i+1]を設定し、[ei]が偽（例えば、[ei]=[0]）のときは[x"i]:=[m]を設定する。ベクトルx"は、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、各グループの最後の要素には次の要素の先頭からの位置が設定され、その他の要素にはテーブル全体のレコード数が設定されたベクトルとなる。言い替えると、各グループの最後の要素には、先頭のグループからそのグループまでの各グループのレコード数を積み上げた合計値が設定されることになる。境界番号設定部３２は、ベクトルx"のシェア[x"]をソート部３３へ出力する。
【００４３】
各秘密計算装置３nのソート部３３は、ベクトルx"のシェア[x"]と置換σのシェア{{σ}}とを用いて、復元するとベクトルx"を置換σでソートしたソート済みベクトルσ(x")となるシェア[σ(x")]∈[F]mを生成する。以下、[σ(x")]∈[F]mの各要素は、[σ(x")i]∈[F]（i=0, …, m-1）で参照することもある。ソート部３３は、ソート済みベクトルσ(x")のシェア[σ(x")]をカウント計算部３４へ出力する。
【００４４】
各秘密計算装置３nのカウント計算部３４は、ソート済みベクトルσ(x")のシェア[σ(x")]を用いて、1以上min(g,m)-1以下の各整数iについて[vi]:=[σ(x")i-σ(x")i-1]を設定し、かつ、min(g,m)以上m-1以下の各整数iについて[vi]:=[0]を設定し、かつ、[v0]:=[σ(x")0]を設定して、復元すると各グループのレコード数（すなわち、クロス集計）を表すベクトルv:=v0, …, vm-1∈Fとなるシェア[v]∈[F]mを生成する。ソート済みベクトルσ(x")のi番目の要素σ(x")iは、0番目からi番目までの各グループのレコード数を積み上げた合計値が設定されているため、クロス集計vのi番目の要素viには、i番目のグループのレコード数が設定されることになる。カウント計算部３４は、クロス集計vのシェア[v]をカウントシフト部１１または逆置換部１２へ出力する。
【００４５】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００４６】
［プログラム、記録媒体］
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【００４７】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００４８】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００４９】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００５０】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図１】
0006973629.tif 000002
【図２】
0006973629.tif 000003
【図３】
0006973629.tif 000004
【図４】
0006973629.tif 000005
【図５】
0006973629.tif 000006