(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6973633
(24)【登録日】2021年11月8日
(45)【発行日】2021年12月1日
(54)【発明の名称】秘密集約最大値システム、秘密集約最小値システム、秘密計算装置、秘密集約最大値方法、秘密集約最小値方法、およびプログラム
(51)【国際特許分類】
G09C 1/00 20060101AFI20211118BHJP
【FI】
G09C1/00 650Z
【請求項の数】9
【全頁数】15
(21)【出願番号】特願2020-516337(P2020-516337)
(86)(22)【出願日】2019年4月22日
(86)【国際出願番号】JP2019016986
(87)【国際公開番号】WO2019208485
(87)【国際公開日】20191031
【審査請求日】2020年10月14日
(31)【優先権主張番号】特願2018-84115(P2018-84115)
(32)【優先日】2018年4月25日
(33)【優先権主張国】JP
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100121706
【弁理士】
【氏名又は名称】中尾 直樹
(74)【代理人】
【識別番号】100128705
【弁理士】
【氏名又は名称】中村 幸雄
(74)【代理人】
【識別番号】100147773
【弁理士】
【氏名又は名称】義村 宗洋
(72)【発明者】
【氏名】五十嵐 大
【審査官】
行田 悦資
(56)【参考文献】
【文献】
特開2012−154968(JP,A)
【文献】
特許第5957126(JP,B1)
【文献】
千田浩司ほか,比較器ネットワークに適した秘匿関数計算の評価と応用,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2007年03月09日,第106巻,第595号,p.53−58
【文献】
濱田浩気ほか,実用的な速度で統計分析が可能な秘密計算システムMEVAL,コンピュータセキュリティシンポジウム2013論文集,日本,一般社団法人情報処理学会,2013年10月14日,第2013巻,第4号,p.777−784,情報処理学会シンポジウムシリーズ
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
複数の秘密計算装置を含む秘密集約最大値システムであって、
mは2以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記バリュー属性の値と上記キー属性の値とに基づいて安定ソートしたときの所望のバリュー属性v:=v0, …, vm-1を秘密分散したシェアであり、[e]:=[e0], …, [em-1]は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が真、その他の要素が偽であるフラグe:=e0, …, em-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、gは上記グループの最大数であり、
上記秘密計算装置は、
上記シェア[v]と上記シェア[e]とを用いて、0以上m-1以下の各整数iについて[ei]が真ならば[fi]に[vi]を設定し、[ei]が偽ならば[fi]に所定の固定値を設定して、復元するとベクトルf:=f0, …, fm-1となるシェア[f]を生成するフラグ適用部と、
上記シェア[f]と上記シェア{{σ}}とを用いて、復元すると上記ベクトルfを上記置換σでソートしたソート済みベクトルσ(f)となるシェア[σ(f)]を生成するソート部と、
上記シェア[σ(f)]を用いて、復元すると各グループの最大値を表すベクトルx:=σ(f)0, …, σ(f)min(g,m)-1となるシェア[x]を生成する出力部と、
を含む秘密集約最大値システム。
【請求項2】
請求項1に記載の秘密集約最大値システムであって、
Fは任意の環であり、nkは1以上の整数であり、[k0], …, [knk-1]はキー属性k0, …, knk-1∈Fmを秘密分散したシェアであり、[v']は上記テーブルを上記キー属性の値に基づいてソートする前の所望のバリュー属性v'∈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を昇順に安定ソートする上記置換σとなる上記シェア{{σ}}を生成するキー集約ソート生成部と、
上記シェア[v']と上記シェア{{σ0}}とを用いて、復元すると上記バリュー属性v'を上記置換σ0でソートした上記バリュー属性vとなるシェア[v]を生成するバリューソート部と、
をさらに含む秘密集約最大値システム。
【請求項3】
複数の秘密計算装置を含む秘密集約最小値システムであって、
mは2以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記バリュー属性の値と上記キー属性の値とに基づいて安定ソートしたときの所望のバリュー属性v:=v0, …, vm-1を秘密分散したシェアであり、[e]:=[e0], …, [em-1]は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が真、その他の要素が偽であるフラグe:=e0, …, em-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、gは上記グループの最大数であり、
上記秘密計算装置は、
上記シェア[e]を用いて、1以上m-1以下の各整数iについて[e'i]に[ei-1]を設定し、かつ、[e'0]に真を設定して、復元するとフラグe':=e'0, …, e'm-1となるシェア[e']を生成するフラグシフト部と、
上記シェア[v]と上記シェア[e']とを用いて、0以上m-1以下の各整数iについて[e'i]が真ならば[f'i]に[vi]を設定し、[e'i]が偽ならば[f'i]に所定の固定値を設定して、復元するとベクトルf':=f'0, …, f'm-1となるシェア[f']を生成するフラグ適用部と、
上記シェア[f']と上記シェア{{σ}}とを用いて、復元すると上記ベクトルf'を上記置換σでソートしたソート済みベクトルσ(f')となるシェア[σ(f')]を生成するソート部と、
上記シェア[σ(f')]を用いて、復元すると各グループの最小値を表すベクトルx':=σ(f')0, …, σ(f')min(g,m)-1となるシェア[x']を生成する出力部と、
を含む秘密集約最小値システム。
【請求項4】
請求項3に記載の秘密集約最小値システムであって、
Fは任意の環であり、nkは1以上の整数であり、[k0], …, [knk-1]はキー属性k0, …, knk-1∈Fmを秘密分散したシェアであり、[v']は上記テーブルを上記キー属性の値に基づいてソートする前の所望のバリュー属性v'∈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を昇順に安定ソートする上記置換σとなる上記シェア{{σ}}を生成するキー集約ソート生成部と、
上記シェア[v']と上記シェア{{σ0}}とを用いて、復元すると上記バリュー属性v'を上記置換σ0でソートした上記バリュー属性vとなるシェア[v]を生成するバリューソート部と、
をさらに含む秘密集約最小値システム。
【請求項5】
mは2以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記バリュー属性の値と上記キー属性の値とに基づいて安定ソートしたときの所望のバリュー属性v:=v0, …, vm-1を秘密分散したシェアであり、[e]:=[e0], …, [em-1]は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が真、その他の要素が偽であるフラグe:=e0, …, em-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、gは上記グループの最大数であり、
上記シェア[v]と上記シェア[e]とを用いて、0以上m-1以下の各整数iについて[ei]が真ならば[fi]に[vi]を設定し、[ei]が偽ならば[fi]に所定の固定値を設定して、復元するとベクトルf:=f0, …, fm-1となるシェア[f]を生成するフラグ適用部と、
上記シェア[f]と上記シェア{{σ}}とを用いて、復元すると上記ベクトルfを上記置換σでソートしたソート済みベクトルσ(f)となるシェア[σ(f)]を生成するソート部と、
上記シェア[σ(f)]を用いて、復元すると各グループの最大値を表すベクトルx:=σ(f)0, …, σ(f)min(g,m)-1となるシェア[x]を生成する出力部と、
を含む秘密計算装置。
【請求項6】
mは2以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記バリュー属性の値と上記キー属性の値とに基づいて安定ソートしたときの所望のバリュー属性v:=v0, …, vm-1を秘密分散したシェアであり、[e]:=[e0], …, [em-1]は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が真、その他の要素が偽であるフラグe:=e0, …, em-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、gは上記グループの最大数であり、
上記シェア[e]を用いて、1以上m-1以下の各整数iについて[e'i]に[ei-1]を設定し、かつ、[e'0]に真を設定して、復元するとフラグe':=e'0, …, e'm-1となるシェア[e']を生成するフラグシフト部と、
上記シェア[v]と上記シェア[e']とを用いて、0以上m-1以下の各整数iについて[e'i]が真ならば[f'i]に[vi]を設定し、[e'i]が偽ならば[f'i]に所定の固定値を設定して、復元するとベクトルf':=f'0, …, f'm-1となるシェア[f']を生成するフラグ適用部と、
上記シェア[f']と上記シェア{{σ}}とを用いて、復元すると上記ベクトルf'を上記置換σでソートしたソート済みベクトルσ(f')となるシェア[σ(f')]を生成するソート部と、
上記シェア[σ(f')]を用いて、復元すると各グループの最小値を表すベクトルx':=σ(f')0, …, σ(f')min(g,m)-1となるシェア[x']を生成する出力部と、
を含む秘密計算装置。
【請求項7】
複数の秘密計算装置を含む秘密集約最大値システムが実行する秘密集約最大値方法であって、
mは2以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記バリュー属性の値と上記キー属性の値とに基づいて安定ソートしたときの所望のバリュー属性v:=v0, …, vm-1を秘密分散したシェアであり、[e]:=[e0], …, [em-1]は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が真、その他の要素が偽であるフラグe:=e0, …, em-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、gは上記グループの最大数であり、
上記秘密計算装置のフラグ適用部が、上記シェア[v]と上記シェア[e]とを用いて、0以上m-1以下の各整数iについて[ei]が真ならば[fi]に[vi]を設定し、[ei]が偽ならば[fi]に所定の固定値を設定して、復元するとベクトルf:=f0, …, fm-1となるシェア[f]を生成し、
上記秘密計算装置のソート部が、上記シェア[f]と上記シェア{{σ}}とを用いて、復元すると上記ベクトルfを上記置換σでソートしたソート済みベクトルσ(f)となるシェア[σ(f)]を生成し、
上記秘密計算装置の出力部が、上記シェア[σ(f)]を用いて、復元すると各グループの最大値を表すベクトルx:=σ(f)0, …, σ(f)min(g,m)-1となるシェア[x]を生成する、
秘密集約最大値方法。
【請求項8】
複数の秘密計算装置を含む秘密集約最小値システムが実行する秘密集約最小値方法であって、
mは2以上の整数であり、[v]:=[v0], …, [vm-1]はキー属性とバリュー属性とからなるテーブルを上記バリュー属性の値と上記キー属性の値とに基づいて安定ソートしたときの所望のバリュー属性v:=v0, …, vm-1を秘密分散したシェアであり、[e]:=[e0], …, [em-1]は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が真、その他の要素が偽であるフラグe:=e0, …, em-1を秘密分散したシェアであり、{{σ}}は上記テーブルを上記キー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、gは上記グループの最大数であり、
上記秘密計算装置のフラグシフト部が、上記シェア[e]を用いて、1以上m-1以下の各整数iについて[e'i]に[ei-1]を設定し、かつ、[e'0]に真を設定して、復元するとフラグe':=e'0, …, e'm-1となるシェア[e']を生成し、
上記秘密計算装置のフラグ適用部が、上記シェア[v]と上記シェア[e']とを用いて、0以上m-1以下の各整数iについて[e'i]が真ならば[f'i]に[vi]を設定し、[e'i]が偽ならば[f'i]に所定の固定値を設定して、復元するとベクトルf':=f'0, …, f'm-1となるシェア[f']を生成し、
上記秘密計算装置のソート部が、上記シェア[f']と上記シェア{{σ}}とを用いて、復元すると上記ベクトルf'を上記置換σでソートしたソート済みベクトルσ(f')となるシェア[σ(f')]を生成し、
上記秘密計算装置の出力部が、上記シェア[σ(f')]を用いて、復元すると各グループの最小値を表すベクトルx':=σ(f')0, …, σ(f')min(g,m)-1となるシェア[x']を生成する、
秘密集約最小値方法。
【請求項9】
請求項5または6に記載の秘密計算装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は秘密計算技術に関し、特に、秘匿性を保ったまま集約関数を計算する技術に関する。
【背景技術】
【0002】
集約関数は、テーブルにキー属性とバリュー属性があるときに、キー属性の値に基づいてグループ分けした統計値を得る演算である。集約関数は、group-by演算とも呼ばれる。キー属性は、テーブルのレコードをグループ分けするために用いる属性であり、例えば、役職や性別などが挙げられる。バリュー属性は、統計値を計算するために用いる属性であり、例えば、給料や身長などが挙げられる。group-by演算は、例えば、キー属性が性別のときに、男女別の平均身長を求める演算などである。キー属性は複数の属性による複合キーであってもよく、例えば、キー属性が性別と年齢のときに、10代男性の平均身長、20代男性の平均身長、・・・を得るような演算であってもよい。非特許文献1には、group-by演算を秘密計算で行う方法が記載されている。
【0003】
集約最大値は、集約関数の一つであり、テーブルをキー属性の値に基づいてグループ分けしたときに、グループごとに所望のバリュー属性の最大値を得る演算である。集約最大値は、group-by最大値とも呼ばれる。group-by最大値は、例えば、キー属性が性別と年齢であり、バリュー属性が給料のときに、10代男性の給料の最高額、20代男性の給料の最高額、・・・を得るような演算である。
【0004】
集約最小値は、集約関数の一つであり、テーブルをキー属性の値に基づいてグループ分けしたときに、グループごとに所望のバリュー属性の最小値を得る演算である。集約最小値は、group-by最小値とも呼ばれる。group-by最小値は、例えば、キー属性が性別と年齢であり、バリュー属性が給料のときに、10代男性の給料の最低額、20代男性の給料の最低額、・・・を得るような演算である。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】五十嵐大,千田浩司,濱田浩気,高橋克巳,“軽量検証可能3パーティ秘匿関数計算の効率化及びこれを用いたセキュアなデータベース処理”,2011年暗号と情報セキュリティシンポジウム
【発明の概要】
【発明が解決しようとする課題】
【0006】
従来の秘密計算技術では、group-by最大値/最小値を求めるために、nを計算主体の数としてlog(n)の通信回数が必要となり、効率が悪かった。
【0007】
この発明の目的は、上記のような技術的課題に鑑みて、秘匿性を保ったままgroup-by最大値/最小値を効率的に求めることができる技術を提供することである。
【課題を解決するための手段】
【0008】
上記の課題を解決するために、この発明の第一の態様の秘密集約最大値システムは、複数の秘密計算装置を含む秘密集約最大値システムであって、mは2以上の整数であり、[v]:=[v
0], …, [v
m-1]はキー属性とバリュー属性とからなるテーブルをバリュー属性の値とキー属性の値とに基づいて安定ソートしたときの所望のバリュー属性v:=v
0, …, v
m-1を秘密分散したシェアであり、[e]:=[e
0], …, [e
m-1]はテーブルをキー属性の値に基づいてグループ分けしたときに各グループの最後の要素が真、その他の要素が偽であるフラグe:=e
0, …, e
m-1を秘密分散したシェアであり、{{σ}}はテーブルをキー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、gはグループの最大数であり、秘密計算装置は、シェア[v]とシェア[e]とを用いて、0以上m-1以下の各整数iについて[e
i]が真ならば[f
i]に[v
i]を設定し、[e
i]が偽ならば[f
i]に所定の固定値を設定して、復元するとベクトルf:=f
0, …, f
m-1となるシェア[f]を生成するフラグ適用部と、シェア[f]とシェア{{σ}}とを用いて、復元するとベクトルfを置換σでソートしたソート済みベクトルσ(f)となるシェア[σ(f)]を生成するソート部と、シェア[σ(f)]を用いて、復元すると各グループの最大値を表すベクトルx:=σ(f)
0, …, σ(f)
min(g,m)-1となるシェア[x]を生成する出力部と、を含む。
【0009】
上記の課題を解決するために、この発明の第二の態様の秘密集約最小値システムは、複数の秘密計算装置を含む秘密集約最小値システムであって、mは2以上の整数であり、[v]:=[v
0], …, [v
m-1]はキー属性とバリュー属性とからなるテーブルをバリュー属性の値とキー属性の値とに基づいて安定ソートしたときの所望のバリュー属性v:=v
0, …, v
m-1を秘密分散したシェアであり、[e]:=[e
0], …, [e
m-1]はテーブルをキー属性の値に基づいてグループ分けしたときに各グループの最後の要素が真、その他の要素が偽であるフラグe:=e
0, …, e
m-1を秘密分散したシェアであり、{{σ}}はテーブルをキー属性の値に基づいてグループ分けしたときに各グループの最後の要素が先頭から順に並ぶように移動する置換σを秘密分散したシェアであり、gはグループの最大数であり、秘密計算装置は、シェア[e]を用いて、1以上m-1以下の各整数iについて[e'
i]に[e
i-1]を設定し、かつ、[e'
0]に真を設定して、復元するとフラグe':=e'
0, …, e'
m-1となるシェア[e']を生成するフラグシフト部と、シェア[v]とシェア[e']とを用いて、0以上m-1以下の各整数iについて[e'
i]が真ならば[f'
i]に[v
i]を設定し、[e'
i]が偽ならば[f'
i]に所定の固定値を設定して、復元するとベクトルf':=f'
0, …, f'
m-1となるシェア[f']を生成するフラグ適用部と、シェア[f']とシェア{{σ}}とを用いて、復元するとベクトルf'を置換σでソートしたソート済みベクトルσ(f')となるシェア[σ(f')]を生成するソート部と、シェア[σ(f')]を用いて、復元すると各グループの最小値を表すベクトルx':=σ(f')
0, …, σ(f')
min(g,m)-1となるシェア[x']を生成する出力部と、を含む。
【発明の効果】
【0010】
この発明の秘密集約最大値/最小値技術によれば、秘匿性を保ったままgroup-by最大値/最小値をO(1)の通信回数で効率的に求めることができる。
【図面の簡単な説明】
【0011】
【
図1】
図1は、秘密集約最大値/最小値システムの機能構成を例示する図である。
【
図2】
図2は、秘密計算装置の機能構成を例示する図である。
【
図3】
図3は、秘密集約最大値方法の処理手続きを例示する図である。
【
図4】
図4は、秘密集約最小値方法の処理手続きを例示する図である。
【
図5】
図5は、変形例の秘密計算装置の機能構成を例示する図である。
【発明を実施するための形態】
【0012】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【0013】
[x]∈[F]は、ある値xが任意の環F上の秘密分散等により秘匿されていることを表す。{b}∈{B}は、1ビットのある値bが1ビットを表せる環B上の秘密分散等により秘匿されていることを表す。{{s}}∈{{S
m}}は、m個の要素の置換の集合S
mに属するある置換sが秘密分散等により秘匿されていることを表す。以下、秘密分散された値を「シェア」とも呼ぶ。
【0014】
実施形態中で用いる秘密計算におけるソート処理(安定ソートを含む)は、例えば、下記参考文献1に記載されたソートを用いることができる。置換sのシェア{{s}}については下記参考文献1に記載されたハイブリッド置換{{π}}を用いればよい。
【0015】
〔参考文献1〕五十嵐大,濱田浩気,菊池亮,千田浩司,“超高速秘密計算ソートの設計と実装: 秘密計算がスクリプト言語に並ぶ日”,CSS2017
<第一実施形態>
≪秘密集約最大値システム≫
この発明の第一実施形態は、group-by最大値を求める秘密集約最大値システムおよび方法である。
図1を参照して、第一実施形態の秘密集約最大値システム100の構成例を説明する。秘密集約最大値システム100は、N(≧2)台の秘密計算装置1
1, …, 1
Nを含む。本形態では、秘密計算装置1
1, …, 1
Nはそれぞれ通信網9へ接続される。通信網9は、接続される各装置が相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN(Local Area Network)、WAN(Wide Area Network)などを用いることができる。なお、各装置は必ずしも通信網9を介してオンラインで通信可能である必要はない。例えば、秘密計算装置1
1, …, 1
Nへ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体から秘密計算装置1
1, …, 1
Nへオフラインで入力するように構成してもよい。
【0016】
図2を参照して、本形態の秘密集約最大値システム100に含まれる秘密計算装置1
n(n=1, …, N)の構成例を説明する。秘密計算装置1
nは、例えば、
図2に示すように、入力部10、フラグ変換部12、フラグ適用部13、ソート部14、および出力部15を含む。この秘密計算装置1
n(1≦n≦N)が他の秘密計算装置1
n'(n'=1, …, N、ただしn≠n')と協調しながら後述する各ステップの処理を行うことにより第一実施形態の秘密集約最大値方法が実現される。
【0017】
秘密計算装置1
nは、例えば、中央演算処理装置(CPU: Central Processing Unit)、主記憶装置(RAM: Random Access Memory)などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密計算装置1
nは、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密計算装置1
nに入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密計算装置1
nの各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【0018】
図3を参照して、第一実施形態の秘密集約最大値システム100が実行する秘密集約最大値方法の処理手続きを説明する。
【0019】
ステップS10において、各秘密計算装置1
nの入力部10は、バリュー属性v∈F
mを秘密分散により秘匿したシェア[v]∈[F]
mと、フラグe∈B
mを秘密分散により秘匿したシェア{e}∈{B}
mと、置換σを秘密分散により秘匿したシェア{{σ}}∈{{S
m}}と、最大グループ数gとを入力として受け取る。ただし、mは2以上の整数である。入力部10は、フラグeのシェア{e}をフラグ変換部12へ、バリュー属性vのシェア[v]をフラグ適用部13へ、置換σのシェア{{σ}}をソート部14へ出力する。
【0020】
バリュー属性vは、テーブルをバリュー属性とキー属性とで昇順に安定ソートした後のバリュー属性である。なお、安定ソートとは、ソート演算のうち、同じ値の要素が存在した場合に、同じ値の要素同士の順序を保存する演算である。例えば、社員番号順でソートされたテーブルに対して性別で安定ソートすると、各性別の中で社員番号順が保たれているソート結果が得られる。すなわち、バリュー属性vは、グループ毎にバリュー属性の値で昇順にソートされたものとなっている。以下、[v]∈[F]
mの各要素は、[v
i]∈[F](i=0,…, m-1)で参照することもある。
【0021】
フラグeは、グループの境界を表すフラグである。例えば、フラグeは、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、各グループの最後の要素(すなわち、グループの境界の直前の要素)に該当する値が真(例えば1)となり、その他の要素に該当する値が偽(例えば0)となるフラグである。以下、{e}∈{B}
mの各要素は、{e
i}∈{B}(i=0, …, m-1)で参照することもある。
【0022】
置換σは、各グループのキー属性の値を先頭から1つずつ並べる置換である。例えば、置換σは、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、各グループの最後の要素が先頭から順に並び、続いて他の要素が順に並ぶように移動する置換である。置換σのシェア{{σ}}は上記参考文献1に記載されたハイブリッド置換{{π}}を用いて構成すればよい。
【0023】
最大グループ数gは、キー属性が取り得る値の組み合わせの数、すなわち、キー属性が取り得る値の種類の数である。
【0024】
ステップS12において、各秘密計算装置1
nのフラグ変換部12は、フラグeのシェア{e}∈{B}
mを任意の環F上の秘密分散によるシェア[e]∈[F]
mに変換する。フラグ変換部12は、フラグeのシェア[e]をフラグ適用部13へ出力する。
【0025】
ステップS13において、各秘密計算装置1
nのフラグ適用部13は、バリュー属性vのシェア[v]とフラグeのシェア[e]とを用いて、0以上m-1以下の各整数iについて[f
i]:=[e
i?v
i:0]を設定し、復元するとベクトルf:=f
0, …, f
m-1∈Fとなるシェア[f]∈[F]
mを生成する。ここで、「?」は条件演算子(または三項演算子)である。すなわち、[e
i]が真(例えば、[e
i]=[1])のときは[f
i]:=[v
i]を設定し、[e
i]が偽(例えば、[e
i]=[0])のときは[f
i]:=[0]を設定する。[e
i]=[0]のときに設定する値は0でなくともよく、バリュー属性vが取り得ない値であればどのような値でもよい。ベクトルfは、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、各グループの最後の要素f
iにはその要素に対応するバリュー属性の値v
iが設定され、その他の要素には0が設定されたベクトルとなる。すなわち、各グループの最大値と0とを要素としてもつベクトルとなる。フラグ適用部13は、ベクトルfのシェア[f]をソート部14へ出力する。
【0026】
ステップS14において、各秘密計算装置1
nのソート部14は、ベクトルfのシェア[f]と置換σのシェア{{σ}}とを用いて、復元するとベクトルfを置換σでソートしたソート済みベクトルσ(f)となるシェア[σ(f)]∈[F]
mを生成する。以下、[σ(f)]∈[F]
mの各要素は、[σ(f)
i]∈[F](i=0, …, m-1)で参照することもある。ソート済みベクトルσ(f)は、先頭からグループ数の要素にグループ毎にソートしたときの最後の要素の値(すなわち、各グループの最大値)が設定され、それ以降の要素に0が設定されたベクトルとなる。ソート部14は、ソート済みベクトルσ(f)のシェア[σ(f)]を出力部15へ出力する。
【0027】
ステップS15において、各秘密計算装置1
nの出力部15は、ソート済みベクトルσ(f)のシェア[σ(f)]から、復元すると各グループの最大値を表すベクトルx:=σ(f)
0, …, σ(f)
min(g,m)-1となるシェア[x]∈[F]
min(g,m)を生成し、最大値xのシェア[x]を出力する。
【0028】
<第二実施形態>
≪秘密集約最小値システム≫
この発明の第二実施形態は、group-by最小値を求める秘密集約最小値システムおよび方法である。
図1を参照して、第二実施形態の秘密集約最小値システム101の構成例を説明する。秘密集約最小値システム101は、N(≧2)台の秘密計算装置2
1, …, 2
Nを含む。本形態では、秘密計算装置2
1, …, 2
Nはそれぞれ通信網9へ接続される。通信網9は、接続される各装置が相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN(Local Area Network)、WAN(Wide Area Network)などを用いることができる。なお、各装置は必ずしも通信網9を介してオンラインで通信可能である必要はない。例えば、秘密計算装置2
1, …, 2
Nへ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体から秘密計算装置2
1, …, 2
Nへオフラインで入力するように構成してもよい。
【0029】
図2を参照して、本形態の秘密集約最小値システム101に含まれる秘密計算装置2
n(n=1, …, N)の構成例を説明する。秘密計算装置2
nは、例えば、
図2に示すように、第一実施形態の秘密集約最大値システム100に含まれる秘密計算装置1
nが備える処理部に加えて、フラグシフト部11をさらに含む。この秘密計算装置2
n(1≦n≦N)が他の秘密計算装置2
n'(n'=1, …, N、ただしn≠n')と協調しながら後述する各ステップの処理を行うことにより第二実施形態の秘密集約最小値方法が実現される。
【0030】
図4を参照して、第二実施形態の秘密集約最小値システム101が実行する秘密集約最小値方法の処理手続きを説明する。
【0031】
ステップS10において、各秘密計算装置2
nの入力部10は、バリュー属性v∈F
mを秘密分散により秘匿したシェア[v]∈[F]
mと、フラグe∈B
mを秘密分散により秘匿したシェア{e}∈{B}
mと、置換σを秘密分散により秘匿したシェア{{σ}}∈{{S
m}}と、最大グループ数gとを入力として受け取る。入力部10は、フラグeのシェア{e}をフラグシフト部11へ、バリュー属性vのシェア[v]をフラグ適用部13へ、置換σのシェア{{σ}}をソート部14へ出力する。
【0032】
ステップS11において、各秘密計算装置2
nのフラグシフト部11は、フラグeのシェア{e}を用いて、1以上m-1以下の各整数iについて{e'
i}:={e
i-1}を設定し、かつ、{e'
0}:={1}を設定して、復元するとフラグe':=e'
0, …, e'
m-1∈B
mとなるシェア{e'}∈{B}
mを生成する。フラグe'は各グループの最後の要素を示すフラグeを一つずつ後方へシフトしたフラグであるため、各グループの最初の要素(すなわち、グループ間の境界の直後の要素)を示すフラグとなる。フラグシフト部11は、フラグe'のシェア{e'}をフラグ変換部12へ出力する。
【0033】
ステップS12において、各秘密計算装置2
nのフラグ変換部12は、フラグe'のシェア{e'}∈{B}
mを任意の環F上の秘密分散によるシェア[e']∈[F]
mに変換する。フラグ変換部12は、フラグe'のシェア[e']をフラグ適用部13へ出力する。
【0034】
ステップS13において、各秘密計算装置2
nのフラグ適用部13は、バリュー属性vのシェア[v]とフラグe'のシェア[e']とを用いて、0以上m-1以下の各整数iについて[f'
i]:=[e'
i?v
i:0]を設定し、復元するとベクトルf':=f'
0, …, f'
m-1∈Fとなるシェア[f']∈[F]
mを生成する。すなわち、[e'
i]が真(例えば、[e'
i]=[1])のときは[f'
i]:=[v
i]を設定し、[e'
i]が偽(例えば、[e'
i]=[0])のときは[f'
i]:=[0]を設定する。[e'
i]=[0]のときに設定する値は0でなくともよく、バリュー属性vが取り得ない値であればどのような値でもよい。ベクトルf'は、テーブルをキー属性で安定ソートしたときに同じキー属性の値をもつレコードを同じグループとして、各グループの最初の要素f'
iにはその要素に対応するバリュー属性の値v
iが設定され、その他の要素には0が設定されたベクトルとなる。すなわち、各グループの最小値と0とを要素としてもつベクトルとなる。フラグ適用部13は、ベクトルf'のシェア[f']をソート部14へ出力する。
【0035】
ステップS14において、各秘密計算装置2
nのソート部14は、ベクトルf'のシェア[f']と置換σのシェア{{σ}}とを用いて、復元するとベクトルf'を置換σでソートしたソート済みベクトルσ(f')となるシェア[σ(f')]∈[F]
mを生成する。以下、[σ(f')]∈[F]
mの各要素は、[σ(f')
i]∈[F](i=0, …, m-1)で参照することもある。ソート済みベクトルσ(f')は、先頭からグループ数の要素にグループ毎にソートしたときの最初の要素の値(すなわち、各グループの最小値)が設定され、それ以降の要素に0が設定されたベクトルとなる。ソート部14は、ソート済みベクトルσ(f')のシェア[σ(f')]を出力部15へ出力する。
【0036】
ステップS15において、各秘密計算装置2
nの出力部15は、ソート済みベクトルσ(f')のシェア[σ(f')]から、復元すると各グループの最小値を表すベクトルx':=σ(f')
0, …, σ(f')
min(g,m)-1となるシェア[x']∈[F]
min(g,m)を生成し、最小値x'のシェア[x']を出力する。
【0037】
<変形例>
上記の実施形態では、入力部10へバリュー属性vのシェア[v]とフラグeのシェア{e}と置換σのシェア{{σ}}とが入力される構成を説明した。変形例では、入力部10へテーブルを秘密分散等により秘匿したシェアが入力され、バリュー属性vのシェア[v]とフラグeのシェア{e}と置換σのシェア{{σ}}とを求めてから、上記の実施形態で説明した手順に従ってgroup-by最大値/最小値を計算する構成を説明する。
【0038】
変形例の秘密計算装置3
n(n=1, …, N)は、例えば、
図5に示すように、第一実施形態の秘密計算装置1
n(n=1, …, N)または第二実施形態の秘密計算装置2
n(n=1, …, N)が備える各処理部に加えて、ビット分解部21、グループソート生成部22、ビット列ソート部23、フラグ生成部24、キー集約ソート生成部25、およびバリューソート部26を含む。以下、第一実施形態の秘密集約最大値システム100および第二実施形態の秘密集約最小値システム101と異なる点についてのみ説明する。
【0039】
各秘密計算装置3
nの入力部10は、n
k個のキー属性k
0, …, k
nk-1∈F
mそれぞれを秘密分散により秘匿したシェア[k
0], …, [k
nk-1]∈[F]
mと、n
a個のバリュー属性v'
0, …, v'
na-1∈F
mそれぞれを秘密分散により秘匿したシェア[v'
0], …, [v'
na-1]∈[F]
mとを入力として受け取る。ただし、n
k, n
aは1以上の整数である。以下、[k
j]∈[F]
m(j=0, …, n
k-1)の各要素は、[k
j,i]∈[F](i=0, …, m-1)で参照することもある。入力部10は、キー属性k
0, …, k
nk-1のシェア[k
0], …, [k
nk-1]をビット分解部21へ出力する。また、入力部10は、バリュー属性v'
0, …, v'
na-1のシェア[v'
0], …, [v'
na-1]をバリューソート部26へ出力する。
【0040】
各秘密計算装置3
nのビット分解部21は、キー属性k
0, …, k
nk-1のシェア[k
0], …, [k
nk-1]をビット分解して結合し、復元するとキー属性k
0, …, k
nk-1のビット表現を結合したビット列b:=b
0, …, b
m-1∈B
λとなるシェア{b}∈{B}
λを得る。ただし、λはビット列bのビット長であり、各b
i(i=0, …, m-1)のビット長の総和である。言い替えると、{b
i}は、キー属性k
0, …, k
nk-1のシェア[k
0], …, [k
nk-1]それぞれのi番目の要素[k
0,i], …, [k
nk-1,i]のビット表現を結合したビット列である。ビット分解部21は、ビット列bのシェア{b}をグループソート生成部22へ出力する。
【0041】
各秘密計算装置3
nのグループソート生成部22は、ビット列bのシェア{b}を用いて、復元するとビット列bを昇順で安定ソートするための置換σ
0となるシェア{{σ
0}}∈{{S
m}}を生成する。ビット列bはキー属性k
0, …, k
nk-1のビット表現を結合したものであるため、置換σ
0はキー属性k
0, …, k
nk-1の値が等しいレコードを連続するように並び替えてグループ分けする操作であるとも言える。グループソート生成部22は、ビット列bのシェア{b}と置換σ
0のシェア{{σ
0}}とをビット列ソート部23へ出力する。また、グループソート生成部22は、置換σ
0のシェア{{σ
0}}をバリューソート部26へ出力する。
【0042】
各秘密計算装置3
nのビット列ソート部23は、ビット列bのシェア{b}と置換σ
0のシェア{{σ
0}}とを用いて、復元するとビット列bを置換σ
0でソートしたソート済みビット列b':=b'
0, …, b'
m-1∈B
λとなるシェア{b'}∈{B}
λを得る。ビット列ソート部23は、ソート済みビット列b'のシェア{b'}をフラグ生成部24へ出力する。
【0043】
各秘密計算装置3
nのフラグ生成部24は、ソート済みビット列b'のシェア{b'}を用いて、0以上m-2以下の各整数iについて{e
i}:={b'
i≠b'
i+1}を設定し、かつ、{e
m-1}:={1}を設定して、復元するとフラグe:=e
0, …, e
m-1∈B
mとなるシェア{e}∈{B}
mを生成する。フラグe
iはソート済みビット列b'のi番目の要素b'
iがi+1番目の要素b'
i+1と異なる場合に真が設定されるため、各グループの最後の要素(すなわち、グループ間の境界の直前の要素)を示すフラグとなる。フラグ生成部24は、フラグeのシェア{e}をキー集約ソート生成部25へ出力する。また、フラグ生成部24は、フラグeのシェア{e}をフラグ変換部12またはフラグシフト部11へ出力する。
【0044】
各秘密計算装置3
nのキー集約ソート生成部25は、まず、フラグeのシェア{e}を用いて、復元するとフラグeの否定¬eであるフラグe"となるシェア{e"}∈{B}
mを生成する。すなわち、0以上m-1以下の各整数iについて{e"
i}:={¬e
i}を設定する。次に、キー集約ソート生成部25は、フラグe"のシェア{e"}を用いて、復元するとフラグe"を昇順に安定ソートするための置換σとなるシェア{{σ}}∈{{S
m}}を生成する。キー集約ソート生成部25は、置換σのシェア{{σ}}をバリューソート部26へ出力する。また、キー集約ソート生成部25は、置換σのシェア{{σ}}をソート部14へ出力する。
【0045】
各秘密計算装置3
nのバリューソート部26は、バリュー属性v'
0, …, v'
na-1のシェア[v'
0], …, [v'
na-1]と置換σ
0のシェア{{σ
0}}とを用いて、復元するとバリュー属性v'
0, …, v'
na-1を置換σ
0でソートしたソート済みバリュー属性v
0, …, v
na-1となるシェア[v
0], …, [v
na-1]を生成する。バリューソート部26は、ソート済みバリュー属性v
0, …, v
na-1のシェア[v
0], …, [v
na-1]のうち、グループ毎の最大値/最小値を計算したいものをバリュー属性vのシェア[v]としてフラグ適用部13へ出力する。
【0046】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【0047】
[プログラム、記録媒体]
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【0048】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【0049】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0050】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0051】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。