特許第6981473号(P6981473)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電信電話株式会社の特許一覧

特許6981473秘密読み書き装置、秘密読み書き方法、およびプログラム
<>
  • 特許6981473-秘密読み書き装置、秘密読み書き方法、およびプログラム 図000018
  • 特許6981473-秘密読み書き装置、秘密読み書き方法、およびプログラム 図000019
  • 特許6981473-秘密読み書き装置、秘密読み書き方法、およびプログラム 図000020
  • 特許6981473-秘密読み書き装置、秘密読み書き方法、およびプログラム 図000021
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6981473
(24)【登録日】2021年11月22日
(45)【発行日】2021年12月15日
(54)【発明の名称】秘密読み書き装置、秘密読み書き方法、およびプログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20211202BHJP
【FI】
   G09C1/00 650Z
【請求項の数】6
【全頁数】12
(21)【出願番号】特願2019-543586(P2019-543586)
(86)(22)【出願日】2018年9月12日
(86)【国際出願番号】JP2018033849
(87)【国際公開番号】WO2019059069
(87)【国際公開日】20190328
【審査請求日】2020年3月3日
(31)【優先権主張番号】特願2017-181264(P2017-181264)
(32)【優先日】2017年9月21日
(33)【優先権主張国】JP
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100121706
【弁理士】
【氏名又は名称】中尾 直樹
(74)【代理人】
【識別番号】100128705
【弁理士】
【氏名又は名称】中村 幸雄
(74)【代理人】
【識別番号】100147773
【弁理士】
【氏名又は名称】義村 宗洋
(72)【発明者】
【氏名】濱田 浩気
【審査官】 金沢 史明
(56)【参考文献】
【文献】 特開平10−334067(JP,A)
【文献】 ZAHUR, Samee et al.,Revisiting Square-Root ORAM: Efficient Random Access in Multi-Party Computation,Proceedings of 2016 IEEE Symposium on Security and Privacy (SP 2016),IEEE,2016年,pp. 218-234
【文献】 濱田 浩気,劣線形通信量で定数ラウンドの秘密計算配列アクセスアルゴリズム,コンピュータセキュリティシンポジウム2017 論文集,日本,情報処理学会,2017年10月16日,pp. 757-764
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
H04L 9/00ー 9/38
(57)【特許請求の範囲】
【請求項1】
大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …,[a[n-1]])とアクセス位置xの秘匿文[x]とを含む読み込み命令、もしくは、上記秘匿文の配列[a]と上記秘匿文[x]と書き込む値dの秘匿文[d]とを含む書き込み命令を入力とし、上記読み込み命令が入力されたときは上記秘匿文の配列[a]のx番目の要素である秘匿文[a[x]]を出力し、上記書き込み命令が入力されたときは上記秘匿文の配列[a]のx番目の要素である秘匿文[a[x]]を値a[x]と値dとの和の秘匿文[a[x]+d]に更新する秘密読み書き装置であって、
2個の秘匿文のベクトル[b0], [b1]からなる書き込みバッファ[b]=([b0], [b1])を記憶するバッファ記憶部と、
上記書き込み命令が入力されたとき、上記秘匿文のベクトル[b0]の末尾へ上記秘匿文[x]を新しい要素として追加し、上記秘匿文のベクトル[b1]の末尾へ上記秘匿文[d]を新しい要素として追加し、上記秘匿文のベクトル[b0]の要素数mが所定の値を超えたか否かを判定するバッファ追加部と、
上記秘匿文のベクトル[b0]の要素数m上記所定の値を超えたとき、0以上m-1以下の各整数iについて、上記秘匿文の配列[a]のうち上記秘匿文のベクトル[b0]のi番目の要素である秘匿文[b0[i]]に対応する値b0[i]をインデックスとする要素である秘匿文[a[b0[i]]]を、上記秘匿文[a[b0[i]]]に対応する値a[b0[i]]と上記秘匿文のベクトル[b1]のi番目の要素である秘匿文[b1[i]]に対応する値b1[i]との和の秘匿文[a[b0[i]]+b1[i]]に更新する秘密書き込み部と、
上記読み込み命令が入力されたとき、上記秘匿文の配列[a]からx番目の要素である秘匿文[a[x]]を読み込む秘密読み込み部と、
上記秘密読み込み部が上記秘匿文[a[x]]を読みこんだ後、上記秘密読み込み部が読み込んだ秘匿文[a[x]]を、未反映値cの秘匿文[c]を用いて値a[x]と未反映値cとの和の秘匿文[a[x]+c]に更新するバッファ加算部と、
を含み、
上記未反映値cは、0以上m-1以下の各整数iについて、上記秘匿文のベクトル[b1]の要素のうち上記秘匿文のベクトル[b0]のi番目の要素である秘匿文[b0[i]]に対応する値b0[i]が上記秘匿文[x]に対応する値xと等しい要素である秘匿文[b1[i]]に対応する値b1[i]を総和した値である、
秘密読み書き装置。
【請求項2】
請求項1に記載の秘密読み書き装置であって、
上記バッファ加算部は、次式により上記未反映値cの秘匿文[c]を計算するものである、
【数15】
秘密読み書き装置。
【請求項3】
請求項1に記載の秘密読み書き装置であって、
上記バッファ加算部は、次式により上記未反映値cの秘匿文[c]を計算するものである、
【数16】
秘密読み書き装置。
【請求項4】
請求項1に記載の秘密読み書き装置であって、
上記秘匿文の配列[a]と上記秘匿文[x]と上記秘匿文[d]は、tを1以上の整数とし、s≧2t-1とし、平文をs個に分割したシェアのうち、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られない秘密分散により秘匿化したものであり、
上記秘密読み込み部は、上記秘匿文の配列[a]からx番目の要素である秘匿文[a[x]]を、アクセス位置xを秘匿したまま読み込むものであり、
上記秘密書き込み部は、上記秘匿文のベクトル[b0]の要素数mが√nを超えたとき、0以上m-1以下の各整数iについて、上記秘匿文の配列[a]のうち上記秘匿文のベクトル[b0]のi番目の要素である秘匿文[b0[i]]に対応する値b0[i]をインデックスとする要素である秘匿文[a[b0[i]]]を、上記秘匿文[a[b0[i]]]に対応する値a[b0[i]]と上記秘匿文のベクトル[b1]のi番目の要素である秘匿文[b1[i]]に対応する値b1[i]との和の秘匿文[a[b0[i]]+b1[i]]に、アクセス位置xを秘匿したまま更新するものである、
秘密読み書き装置。
【請求項5】
大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …,[a[n-1]])とアクセス位置xの秘匿文[x]とを含む読み込み命令、もしくは、上記秘匿文の配列[a]と上記秘匿文[x]と書き込む値dの秘匿文[d]とを含む書き込み命令を入力とし、上記読み込み命令が入力されたときは上記秘匿文の配列[a]のx番目の要素である秘匿文[a[x]]を出力し、上記書き込み命令が入力されたときは上記秘匿文の配列[a]のx番目の要素である秘匿文[a[x]]を値a[x]と値dとの和の秘匿文[a[x]+d]に更新する秘密読み書き装置が実行する秘密読み書き方法であって、
バッファ記憶部に、2個の秘匿文のベクトル[b0], [b1]からなる書き込みバッファ[b]=([b0], [b1])が記憶されており、
バッファ追加部が、上記書き込み命令が入力されたとき、上記秘匿文のベクトル[b0]の末尾へ上記秘匿文[x]を新しい要素として追加し、上記秘匿文のベクトル[b1]の末尾へ上記秘匿文[d]を新しい要素として追加し、上記秘匿文のベクトル[b0]の要素数mが所定の値を超えたか否かを判定し、
秘密書き込み部が、上記秘匿文のベクトル[b0]の要素数m上記所定の値を超えたとき、0以上m-1以下の各整数iについて、上記秘匿文の配列[a]のうち上記秘匿文のベクトル[b0]のi番目の要素である秘匿文[b0[i]]に対応する値b0[i]をインデックスとする要素である秘匿文[a[b0[i]]]を、上記秘匿文[a[b0[i]]]に対応する値a[b0[i]]と上記秘匿文のベクトル[b1]のi番目の要素である秘匿文[b1[i]]に対応する値b1[i]との和の秘匿文[a[b0[i]]+b1[i]]に更新し、
秘密読み込み部が、上記読み込み命令が入力されたとき、上記秘匿文の配列[a]からx番目の要素である秘匿文[a[x]]を読み込み、
バッファ加算部が、上記秘密読み込み部が上記秘匿文[a[x]]を読みこんだ後、上記秘密読み込み部が読み込んだ秘匿文[a[x]]を、未反映値cの秘匿文[c]を用いて値a[x]と未反映値cの和の秘匿文[a[x]+c]に更新し
上記未反映値cは、0以上m-1以下の各整数iについて、上記秘匿文のベクトル[b1]の要素のうち上記秘匿文のベクトル[b0]のi番目の要素である秘匿文[b0[i]]に対応する値b0[i]が上記秘匿文[x]に対応する値xと等しい要素である秘匿文[b1[i]]に対応する値b1[i]を総和した値である、
秘密読み書き方法。
【請求項6】
請求項1から4のいずれかに記載の秘密読み書き装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、暗号応用技術に関するものであり、特にアクセスした位置を明かすことなく配列に対するデータの読み込みや書き込みを行う技術に関する。
【背景技術】
【0002】
暗号化された数値を復元することなく特定の演算結果を得る方法として、秘密計算と呼ばれる方法がある(例えば、非特許文献1参照)。非特許文献1に記載された方法では、3つの秘密計算装置に数値の断片を分散させるという暗号化を行い、3つの秘密計算装置が協調計算を行うことにより、数値を復元することなく、加減算、定数加算、乗算、定数倍、論理演算(否定、論理積、論理和、排他的論理和)、データ形式変換(整数、二進数)の結果を3つの秘密計算装置に分散された状態、すなわち暗号化されたまま保持させることができる。
【0003】
アクセスした位置iを明かすことなく、配列のi番目のデータの読み込みや配列のi番目のデータへの値dの書き込みを行う場合、すべての要素に対してアクセスしたように見せかけることがよく行われる(例えば、非特許文献2参照)。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】千田浩司、濱田浩気、五十嵐大、高橋克巳、“軽量検証可能3パーティ秘匿関数計算の再考”、CSS、2010年
【非特許文献2】Marcel Keller and Peter Scholl, "Efficient, oblivious data structures for MPC", Advances in Cryptology - ASIACRYPT 2014, Vol. 8874 of Lecture Notes in Computer Science, pp. 506-525, 2014.
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、非特許文献2に記載された従来技術は、定数段の通信で大きさnの配列へデータの読み込みや書き込みを行うのに通信量Ω(n)が必要であった。
【0006】
この発明の目的は、上記のような点に鑑みて、定数段の通信でアクセスした位置を明かすことなく行う配列に対するデータ読み込みやデータ書き込みを従来よりも少ない通信量で効率よく行うことを可能とすることである。
【課題を解決するための手段】
【0007】
上記の課題を解決するために、この発明の秘密読み書き装置は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …,[a[n-1]])とアクセス位置xの秘匿文[x]とを含む読み込み命令、もしくは、秘匿文の配列[a]と秘匿文[x]と書き込む値dの秘匿文[d]とを含む書き込み命令を入力とし、読み込み命令が入力されたときは秘匿文の配列[a]のx番目の要素である秘匿文[a[x]]を出力し、書き込み命令が入力されたときは秘匿文の配列[a]のx番目の要素である秘匿文[a[x]]に秘匿文[d]を加算する秘密読み書き装置であって、2個の秘匿文のベクトル[b0], [b1]からなる書き込みバッファ[b]=([b0], [b1])を記憶するバッファ記憶部と、書き込み命令が入力されたとき、秘匿文のベクトル[b0]へ秘匿文[x]を追加し、秘匿文のベクトル[b1]へ秘匿文[d]を追加するバッファ追加部と、書き込みバッファ[b]の要素数が所定の値を超えたとき、秘匿文の配列[a]のうち秘匿文のベクトル[b0]が示すアクセス位置へ秘匿文のベクトル[b1]が示す値を加算する秘密書き込み部と、読み込み命令が入力されたとき、秘匿文の配列[a]からx番目の要素である秘匿文[a[x]]を読み込む秘密読み込み部と、秘匿文のベクトル[b1]の要素のうち秘匿文のベクトル[b0]が示すアクセス位置が秘匿文[x]が示すアクセス位置と等しい要素の総和である未反映値cの秘匿文[c]を秘匿文の配列[a]のx番目の要素である秘匿文[a[x]]へ加算するバッファ加算部と、を含む。
【発明の効果】
【0008】
この発明の秘密読み書き技術によれば、定数段の通信でアクセスした位置を明かすことなく行う配列に対するデータ読み込みやデータ書き込みを従来よりも少ない通信量で効率よく行うことが可能となる。
【図面の簡単な説明】
【0009】
図1図1は、秘密読み書き装置の機能構成を例示する図である。
図2図2は、秘密読み書き方法の処理手続きを例示する図である。
図3図3は、秘密読み込み部の処理手続きを例示する図である。
図4図4は、秘密書き込み部の処理手続きを例示する図である。
【発明を実施するための形態】
【0010】
実施形態の説明に先立ち、この明細書における表記方法および用語の定義について説明する。
【0011】
<表記方法>
ある値aを暗号化や秘密分散などにより秘匿化した値をaの秘匿文と呼び、[a]と表記する。また、aを[a]の平文と呼ぶ。秘匿化が秘密分散である場合は、[a]により各秘密計算装置が持つ秘密分散の断片の集合を参照する。ベクトルa=(a0, a1, …)のi番目の要素をa[i]により参照する。ベクトルaとベクトルbの結合をa||bと表記する。ベクトルaの要素の数を|a|と表記する。実数xの絶対値を|x|と表記する。
【0012】
【数1】
【0013】
は床関数であり、実数x以下の最大の整数を表す。
【0014】
【数2】
【0015】
は天井関数であり、実数x以上の最小の整数を表す。
【0016】
<加算、減算、乗算>
秘匿文に対する加算、減算、乗算の各演算は、2つの値a, bの秘匿文[a], [b]を入力とし、それぞれa+b, a-b, abの計算結果c1, c2, c3の秘匿文[c1], [c2], [c3]を計算する。これらの演算の実行をそれぞれ次式のように記述する。
【0017】
【数3】
【0018】
誤解を招く恐れのない場合は、Add([a], [b]), Sub([a], [b]), Mul([a], [b])をそれぞれ[a]+[b], [a]-[b], [a][b]と略記する。
【0019】
<等号判定>
2つの値a, bの秘匿文[a], [b]を入力とし、a=bならばc=1、a≠bならばc=0となる秘匿文[c]を計算する処理を次式のように記述する。
【0020】
【数4】
【0021】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【0022】
実施形態の秘密読み書き装置1は、図1に例示するように、バッファ記憶部10、命令判断部11、秘密読み込み部12、バッファ加算部13、バッファ追加部14、および秘密書き込み部15を含む。この秘密読み書き装置1が、図2に例示する各ステップの処理を行うことにより実施形態の秘密読み書き方法が実現される。
【0023】
秘密読み書き装置1は、例えば、中央演算処理装置(CPU: Central Processing Unit)、主記憶装置(RAM: Random Access Memory)などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密読み書き装置1は、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密読み書き装置1に入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密読み書き装置1の各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【0024】
以下、図2を参照して、実施形態の秘密読み書き装置1が実行する秘密読み書き方法について説明する。
【0025】
バッファ記憶部10には、入力された書き込み命令を保持しておくための書き込みバッファ[b]=([b0], [b1])が記憶されている。[b0]はアクセス位置の秘匿文のベクトル[b0]=([b0[0]], [b0[1]], …,[b0[m-1]])である。[b1]は書き込む値の秘匿文のベクトル[b1]=([b1[0]], [b1[1]], …,[b1[m-1]])である。ただし、mは書き込みバッファ[b]の要素数であり、m=|[b]|である。
【0026】
ステップS1−1において、命令判断部11は、読み込み命令もしくは書き込み命令を入力として受け取る。読み込み命令は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …, [a[n-1]])とアクセス位置xの秘匿文[x]とを含む。書き込み命令は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …, [a[n-1]])とアクセス位置xの秘匿文[x]と書き込む値dの秘匿文[d]とを含む。
【0027】
ステップS1−2において、命令判断部11は、入力が読み込み命令であれば、秘匿文の配列[a]とアクセス位置の秘匿文[x]とを秘密読み込み部12へ出力し、ステップS2へ処理を進める。また、入力が書き込み命令であれば、秘匿文の配列[a]とアクセス位置の秘匿文[x]と書き込む値の秘匿文[d]とをバッファ追加部14へ出力し、ステップS4−1へ処理を進める。
【0028】
ステップS2において、秘密読み込み部12は、アクセス位置xを秘匿したまま秘匿文の配列[a]からx番目の要素である秘匿文[a[x]]を読み込む。アクセス位置を秘匿したまま配列から要素を読み込む方法は、例えば、非特許文献2に記載されている方法を用いることができる。また、後述する秘密読み込み方法を用いれば、より効率よく読み込みを行うことができる。秘密読み込み部12は、読み出した配列[a]のx番目の要素である秘匿文[a[x]]をバッファ加算部13へ出力する。
【0029】
ステップS3−1において、バッファ加算部13は、バッファ記憶部10に記憶されている書き込みバッファ[b]を用いて未反映の値cの秘匿文[c]を計算する。具体的には、式(1)により秘匿文[c]を計算する。
【0030】
【数5】
【0031】
もしくは、式(2)により未反映の値cの秘匿文[c]を計算する。
【0032】
【数6】
【0033】
ステップS3−2において、バッファ加算部13は、秘密読み込み部12が出力した配列[a]のx番目の要素である秘匿文[a[x]]に未反映の値cの秘匿文[c]を加算して、秘匿文[a[x]]+[c]を配列[a]のx番目の要素である秘匿文[a[x]]として秘密読み書き装置1の出力とする。
【0034】
ステップS4−1において、バッファ追加部14は、バッファ記憶部10に記憶されている書き込みバッファ[b]へアクセス位置の秘匿文[x]と書き込む値の秘匿文[d]とを追加する。具体的には、m=|[b]|とし、[b[m]]=([b0[m]], [b1[m]])=([x], [d])とする。
【0035】
ステップS4−2において、バッファ追加部14は、書き込みバッファ[b]の要素数|[b]|が√nを超えているか否かを判定する。書き込みバッファ[b]の要素数|[b]|が√nを超えている場合(すなわち、|[b]|>√n)はステップS5へ処理を進める。また、書き込みバッファ[b]の要素数|[b]|が√n以下の場合(すなわち、|[b]|≦√n)は処理を終了する。
【0036】
ステップS5において、秘密書き込み部15は、書き込みバッファ[b]に記憶されているアクセス位置の秘匿文のベクトル[b0]=([b0[0]], [b0[1]], …, [b0[m-1]])と書き込む値の秘匿文のベクトル[b1]=([b1[0]], [b1[1]], …, [b1[m-1]])とを用いて、アクセス位置xを秘匿したまま書き込む値の秘匿文[d]を配列のx番目の要素である秘匿文a[x]へ加算する。アクセス位置を秘匿したまま配列へ値を書き込む方法は、例えば、非特許文献2に記載されている方法を用いることができる。また、後述する秘密書き込み方法を用いれば、より効率よく書き込みを行うことができる。
【0037】
以下、図3を参照して、秘密読み込み部12が効率よく配列からのデータ読み込みを行う方法について説明する。
【0038】
ステップS12−1において、秘密読み込み部12は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …, [a[n-1]])とアクセス位置xの秘匿文[x]とを入力として受け取る。
【0039】
ステップS12−2において、秘密読み込み部12は、k個の秘匿文のベクトル[vj]を作成する。ただし、kは2以上の整数であり、jは1以上k以下の各整数である。具体的には、m1, m2, …, mkをn≦m1×m2×…×mkを満たす自然数とし、各整数jについて、xjを式(3)で定義される整数とし、(xjmod mj)番目の要素が1であり、他の要素が0である、大きさmjの秘匿文のベクトル[vj]を作成する。
【0040】
【数7】
【0041】
特に、入力される各秘匿文が、(t, s)Shamir秘密分散によるシェアであれば、k, mi(i=1, 2, …, k)を式(4)とすることができる。なお、(t, s)Shamir秘密分散とは、入力された平文をs個に分割した分散値をs個の秘密計算装置に分散して保持しておき、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られないような秘密分散である。このとき、tは1以上の整数であり、s≧2t-1である。
【0042】
【数8】
【0043】
ステップS12−3−1において、秘密読み込み部12は、jを1に初期化する。
【0044】
ステップS12−3−2において、秘密読み込み部12は、秘匿文の配列[aj-1]を用いてnj個の秘匿文のベクトル[bj,i]を作成する。このとき、秘匿文の配列[a]=([a[0]], [a[1]], …, [a[n-1]])は、秘匿文の配列[a0]=([a0[0]], [a0[1]], …, [a0[n-1]])として扱う。作成する秘匿文のベクトル[bj,i]の数njは、jの値により異なる。具体的には、njを式(5)で定義される整数とし、iを0以上nj未満の各整数とし、[bj,i]=([aj-1[mji+0]],[aj-1[mji+1]], …, [aj-1[mji+mj-1]])(ただし、λ≧|aj-1|のとき[aj-1[λ]]=0)として、秘匿文のベクトル[bj,j]を計算する。
【0045】
【数9】
【0046】
ステップS12−3−3において、秘密読み込み部12は、秘匿文のベクトル[bj,j]と秘匿文のベクトル[vj]との内積を第i要素とする秘匿文の配列[aj]を計算する。
【0047】
ステップS12−3−4において、秘密読み込み部12は、j+1がk以下(j+1≦k)であるか否かを判定し、j+1がk以下であれば、jをインクリメント(j←j+1)してステップS12−3−2へ処理を戻し、j+1がkより大きければ(j+1>k)、秘匿文の配列[ak]を出力する。なお、このとき、秘匿文の配列[ak]は要素数が1の配列となっている。
【0048】
ステップS12−4において、秘密読み込み部12は、要素数が1の秘匿文の配列[ak]を秘匿文の配列[a]のx番目の要素である秘匿文[a[x]]として出力する。
【0049】
以下、図4を参照して、秘密書き込み部15が効率よく配列へデータ書き込みを行う方法について説明する。
【0050】
ステップS15−1において、秘密書き込み部15は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …, [a[n-1]])と、アクセス位置の秘匿文のベクトル[b0]と、書き込む値の秘匿文のベクトル[b1]とを入力として受け取る。以下、アクセス位置の秘匿文のベクトル[b0]は秘匿文[xi]、書き込む値の秘匿文のベクトル[b1]は秘匿文[yi]として扱う。ただし、mを書き込みバッファ[b]の要素数|[b]|とし、iは0以上m未満の各整数である。
【0051】
ステップS15−2において、秘密書き込み部15は、各値yiの書き込み番地xiを表現する秘匿文のベクトル[wi]を作成する。具体的には、n1, n2をn1n2≧nを満たす自然数とし、pi1]qi2]が、n2λ12=xiのとき[yi]となり、他のときは0となる秘匿文のベクトル[pi], [qi]を作成し、その秘匿文のベクトル[pi], [qi]を結合して、秘匿文のベクトル[wi]=[pi]||[qi]を生成する。このとき、秘匿文のベクトル[pi]は、
【0052】
【数10】
【0053】
の要素が1であり、他の要素が0である大きさn1の秘匿文のベクトルとし、秘匿文のベクトル[qi]は、
【0054】
【数11】
【0055】
の要素が[yi]であり、他の要素が0である大きさn2の秘匿文のベクトルとしてもよい。
【0056】
特に、入力される各秘匿文が、(t, s)Shamir秘密分散によるシェアであれば、n1, n2は、式(6)とすることができる。なお、(t, s)Shamir秘密分散とは、入力された平文をs個に分割した分散値をs個の秘密計算装置に分散して保持しておき、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られないような秘密分散である。このとき、tは1以上の整数であり、s≧2t-1である。
【0057】
【数12】
【0058】
ステップS15−3において、秘密書き込み部15は、jを0以上n未満の各整数とし、秘匿文のベクトル[wi]から要素を選択して秘匿文のベクトル[uj], [vj]を生成する。具体的には、iを0以上m未満の各整数とし、jを0以上n未満の各整数とし、λ1, λ2を式(7)とし、
【0059】
【数13】
【0060】
式(8)のようにして秘匿文のベクトル[uj], [vj]を生成する。
【0061】
【数14】
【0062】
ステップS15−4において、秘密書き込み部15は、jを0以上n未満の各整数とし、秘匿文のベクトル[uj]と秘匿文のベクトル[vj]との内積を秘匿文の配列[a]のj番目の要素[a[j]]に加算する。
【0063】
この発明は、バッファからの読み込みはバッファサイズに線形の通信量でできることと、秘密書き込み方法がバッファサイズO(√n)のときはO(n)の通信量でできることを利用することがポイントである。バッファサイズが√nを超えるまで実際の書き込みを保留することで、読み込みは必ずO(√n)の通信量で、書き込みは各回O(√n)に加えて1回だけO(n)の通信量で実現することができる。
【0064】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【0065】
[プログラム、記録媒体]
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【0066】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【0067】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0068】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0069】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
図1
図2
図3
図4