(57)【要約】  読み込み位置を明かすことなく配列からのデータ読み込みを効率よく行う。秘密読み込み装置１は、秘匿文の配列と読み込み位置の秘匿文とを入力とし、秘匿文の配列の読み込み位置の要素を出力する。ベクトル作成部（１２）は、読み込み位置を表現するベクトルを作成する。圧縮計算部（１３）は、秘匿文の配列に基づくベクトルと読み込み位置を表現するベクトルとの内積を要素とする新たな秘匿文の配列を繰り返し生成する。読み込み部（１４）は、要素数が1の新たな秘匿文の配列を秘匿文の配列の読み込み位置の要素として出力する。
2019059042.tif 000002
【特許請求の範囲】
【請求項１】
秘匿文の配列と読み込み位置の秘匿文とを入力とし、当該秘匿文の配列の当該読み込み位置の要素を出力する秘密読み込み装置であって、
上記読み込み位置を表現するベクトルと上記秘匿文の配列に基づくベクトルとの内積を要素とする新たな秘匿文の配列を生成することを上記新たな秘匿文の配列の要素数が１となるまで繰り返し、要素数が１の上記新たな秘匿文の配列を上記読み込み位置の要素として出力する、
秘密読み込み装置。
【請求項２】
請求項１に記載の秘密読み込み装置であって、
n, kを2以上の整数とし、jを1以上k以下の各整数とし、
上記秘密読み込み装置は、大きさnの秘匿文の配列[a0]=([a0[0]], [a0[1]], …,[a0[n-1]])と読み込み位置xの秘匿文[x]とを入力とし、秘匿文の配列[a0]のx番目の要素である秘匿文[a0[x]]を出力するものであり、
各整数jについて秘匿文[x]を用いて秘匿文のベクトル[vj]を作成するベクトル作成部と、
各整数jについて秘匿文の配列[aj-1]と秘匿文のベクトル[vj]とを用いて秘匿文の配列[aj]を作成する圧縮計算部と、
要素数が1の秘匿文の配列[ak]を秘匿文の配列[a0]のx番目の要素である秘匿文[a0[x]]として出力する読み込み部と、
を含む秘密読み込み装置。
【請求項３】
請求項２に記載の秘密読み込み装置であって、
m1, m2, …, mkをn≦m1×m2×…×mkを満たす自然数とし、
njを次式で定義される整数とし、iを0以上nj未満の各整数とし、
【数１３】
2019059042.tif 000015
上記圧縮計算部は、各整数iについて秘匿文の配列[aj-1]を用いて作成した秘匿文のベクトル[bj,i]と、上記秘匿文のベクトル[vj]との内積を第i要素とする上記秘匿文の配列[aj]を作成するものである、
秘密読み込み装置。
【請求項４】
請求項３に記載の秘密読み込み装置であって、
上記ベクトル作成部は、各整数jについて、xjを次式で定義される整数とし、
【数１４】
2019059042.tif 000016
第xjmod mj番目の要素が1であり、他の要素が0である大きさmjの上記秘匿文のベクトル[vj]を作成するものであり、
上記圧縮計算部は、各整数iについて、[bj,i]=([aj-1[mji+0]], [aj-1[mji+1]], …, [aj-1[mji+mj-1]])、かつ、λ≧|aj-1|のとき[aj-1[λ]]=0となる上記秘匿文のベクトル[bj,i]を作成するものである、
秘密読み込み装置。
【請求項５】
請求項４に記載の秘密読み込み装置であって、
上記秘匿文の配列[a0]および上記秘匿文[x]は、tを1以上の整数とし、s≧2t-1とし、平文をs個に分割したシェアのうち、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られない秘密分散により秘匿化したものであり、
k, mi（i=1, 2, …, k）は、次式で定義されるものである、
【数１５】
2019059042.tif 000017
秘密読み込み装置。
【請求項６】
秘匿文の配列と読み込み位置の秘匿文とを入力とし、当該秘匿文の配列の当該読み込み位置の要素を出力する秘密読み込み装置が実行する秘密読み込み方法であって、
上記秘密読み込み装置が、上記読み込み位置を表現するベクトルと上記秘匿文の配列に基づくベクトルとの内積を要素とする新たな秘匿文の配列を生成することを上記新たな秘匿文の配列の要素数が１となるまで繰り返し、要素数が１の上記新たな秘匿文の配列を上記読み込み位置の要素として出力する、
秘密読み込み方法。
【請求項７】
秘匿文の配列と書き込み番地の秘匿文と書き込む値の秘匿文とを入力とし、当該秘匿文の配列の当該書き込み番地の要素に当該値を加算する秘密書き込み装置であって、
上記書き込み番地を表現するベクトルと上記書き込む値を表現するベクトルとの内積を上記秘匿文の配列に加算する、
秘密書き込み装置。
【請求項８】
請求項７に記載の秘密書き込み装置であって、
n, mを2以上の整数とし、iを0以上m未満の各整数とし、jを0以上n未満の各整数とし、
上記秘密書き込み装置は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …,[a[n-1]])と書き込み番地xiの秘匿文[xi]と書き込む値yiの秘匿文[yi]とを入力とし、各整数iについて秘匿文の配列[a]のxi番目の要素である秘匿文[a[xi]]に値yiを加算するものであり、
各整数iについて値yiの書き込み先番地xiを表現する秘匿文のベクトル[wi]を作成する番地分解部と、
各整数jについて秘匿文のベクトル[wi]から要素を選択して秘匿文のベクトル[uj], [vj]を作成するベクトル作成部と、
各整数jについて秘匿文のベクトル[uj]と秘匿文のベクトル[vj]との内積を秘匿文の配列[a]のj番目の要素である秘匿文[a[j]]に加算する書き込み部と、
を含む秘密書き込み装置。
【請求項９】
請求項８に記載の秘密書き込み装置であって、
上記番地分解部は、n1, n2をn1n2≧nを満たす自然数とし、pi[λ1]qi[λ2]がn2λ1+λ2=xiのとき[yi]となり、他のときは0となる秘匿文のベクトル[pi], [qi]を結合して上記秘匿文のベクトル[wi]を作成するものであり、
上記ベクトル作成部は、iを0以上m未満の各整数とし、jを0以上n未満の各整数とし、λ1, λ2を次式とし、
【数１６】
2019059042.tif 000018
次式のようにして上記秘匿文のベクトル[uj], [vj]を作成するものである、
【数１７】
2019059042.tif 000019
秘密書き込み装置。
【請求項１０】
請求項９に記載の秘密書き込み装置であって、
上記秘匿文のベクトル[pi]は、
【数１８】
2019059042.tif 000020
の要素が1であり、他の要素が0である大きさn1の秘匿文のベクトルであり、
上記秘匿文のベクトル[qi]は、
【数１９】
2019059042.tif 000021
の要素が[yi]であり、他の要素が0である大きさn2の秘匿文のベクトルである、
秘密書き込み装置。
【請求項１１】
請求項９または１０に記載の秘密書き込み装置であって、
上記秘匿文の配列[a]と上記秘匿文[xi]と上記秘匿文[yi]とは、tを1以上の整数とし、s≧2t-1とし、平文をs個に分割したシェアのうち、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られない秘密分散により秘匿化したものであり、
n1, n2は、次式で定義されるものである、
【数２０】
2019059042.tif 000022
秘密書き込み装置。
【請求項１２】
秘匿文の配列と書き込み番地の秘匿文と書き込む値の秘匿文とを入力とし、当該秘匿文の配列の当該書き込み番地の要素に当該値を加算する秘密書き込み装置が実行する秘密書き込み方法であって、
上記秘密書き込み装置が、上記書き込み番地を表現するベクトルと上記書き込む値を表現するベクトルとの内積を上記秘匿文の配列に加算する、
秘密書き込み方法。
【請求項１３】
請求項１から５のいずれかに記載の秘密読み込み装置または請求項７から１１のいずれかに記載の秘密書き込み装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、暗号応用技術に関するものであり、特にアクセスした位置を明かすことなく配列に対するデータの読み込みや書き込みを行う技術に関する。
【背景技術】
【０００２】
暗号化された数値を復元することなく特定の演算結果を得る方法として、秘密計算と呼ばれる方法がある（例えば、非特許文献１参照）。非特許文献１に記載された方法では、３つの秘密計算装置に数値の断片を分散させるという暗号化を行い、３つの秘密計算装置が協調計算を行うことにより、数値を復元することなく、加減算、定数加算、乗算、定数倍、論理演算（否定、論理積、論理和、排他的論理和）、データ形式変換（整数、二進数）の結果を３つの秘密計算装置に分散された状態、すなわち暗号化されたまま保持させることができる。【０００３】
読み込み位置iを明かすことなく、配列からi番目のデータを読み込む場合、すべての要素に対してその位置と読み込み位置iとが一致するか否かを判定して、一致しない場合にはその位置の値を0に置き換え、すべての要素の値を足し合わせることで、i番目のデータを得ることがよく行われる（例えば、非特許文献２参照）。【０００４】
書き込み位置iを明かすことなく、配列のi番目のデータに値dを書き込む場合、配列のサイズnと同じ大きさの新しい配列を用意し、i番目の要素にのみdを、他の要素には0を設定し、新しい配列を書き込み先の配列に加算することがよく行われる（例えば、非特許文献２参照）。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】千田浩司、濱田浩気、五十嵐大、高橋克巳、“軽量検証可能3パーティ秘匿関数計算の再考”、CSS、2010年
【非特許文献２】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.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、非特許文献２に記載された従来技術は、定数段の乗算で大きさnの配列からのデータ読み込みを行う場合に、nに比例した回数の乗算が必要であった。また、非特許文献２に記載された従来技術は、定数段の通信でm個の値を大きさnの配列へ書き込むのに通信量Ω(nm)が必要であった。【０００７】
この発明の目的は、上記のような点に鑑みて、定数段の乗算で従来よりも小さい回数で読み込み位置を明かすことなく配列からのデータ読み込みを効率よく行うことを可能とすることである。また、定数段の通信で従来よりも少ない通信量で書き込み位置を明かすことなく配列へのデータ書き込みを効率よく行うことを可能とすることである。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、この発明の第一の態様の秘密読み込み装置は、秘匿文の配列と読み込み位置の秘匿文とを入力とし、当該秘匿文の配列の当該読み込み位置の要素を出力する秘密読み込み装置であって、読み込み位置を表現するベクトルと秘匿文の配列に基づくベクトルとの内積を要素とする新たな秘匿文の配列を生成することを新たな秘匿文の配列の要素数が１となるまで繰り返し、要素数が１の新たな秘匿文の配列を読み込み位置の要素として出力する。【０００９】
上記の課題を解決するために、この発明の第二の態様の秘密書き込み装置は、秘匿文の配列と書き込み番地の秘匿文と書き込む値の秘匿文とを入力とし、当該秘匿文の配列の当該書き込み番地の要素に当該値を加算する秘密書き込み装置であって、書き込み番地を表現するベクトルと書き込む値を表現するベクトルとの内積を秘匿文の配列に加算する。
【発明の効果】
【００１０】
この発明の第一の態様の秘密読み込み技術によれば、定数段の乗算で従来よりも小さい回数で読み込み位置を明かすことなく配列からのデータ読み込みを効率よく行うことが可能となる。この発明の第二の態様の秘密書き込み技術によれば、定数段の通信で従来よりも少ない通信量で書き込み位置を明かすことなく配列へのデータ書き込みを効率よく行うことが可能となる。
【図面の簡単な説明】
【００１１】
【図１】図１は、秘密読み込み装置の機能構成を例示する図である。
【図２】図２は、秘密読み込み方法の処理手続きを例示する図である。
【図３】図３は、秘密書き込み装置の機能構成を例示する図である。
【図４】図４は、秘密書き込み方法の処理手続きを例示する図である。
【発明を実施するための形態】
【００１２】
実施形態の説明に先立ち、この明細書における表記方法および用語の定義について説明する。
【００１３】
＜表記方法＞
ある値aを暗号化や秘密分散などにより秘匿化した値をaの秘匿文と呼び、[a]と表記する。また、aを[a]の平文と呼ぶ。秘匿化が秘密分散である場合は、[a]により各秘密計算装置が持つ秘密分散の断片の集合を参照する。ベクトルa=(a0, a1, …)のi番目の要素をa[i]により参照する。ベクトルaの要素の数を|a|と表記する。
【００１４】
【数１】
2019059042.tif 000003
【００１５】
は床関数であり、実数x以下の最大の整数を表す。
【００１６】
【数２】
2019059042.tif 000004
【００１７】
は天井関数であり、実数x以上の最小の整数を表す。
【００１８】
＜加算、減算、乗算＞
秘匿文に対する加算、減算、乗算の各演算は、２つの値a, bの秘匿文[a], [b]を入力とし、それぞれa+b, a-b, abの計算結果c1, c2, c3の秘匿文[c1], [c2], [c3]を計算する。これらの演算の実行をそれぞれ次式のように記述する。
【００１９】
【数３】
2019059042.tif 000005
【００２０】
誤解を招く恐れのない場合は、Add([a], [b]), Sub([a], [b]), Mul([a], [b])をそれぞれ[a]+[b], [a]-[b], [a][b]と略記する。
【００２１】
＜等号判定＞
２つの値a, bの秘匿文[a], [b]を入力とし、a=bならばc=1、a≠bならばc=0となる秘匿文[c]を計算する処理を次式のように記述する。
【００２２】
【数４】
2019059042.tif 000006
【００２３】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【００２４】
＜第一実施形態＞
第一実施形態の秘密読み込み装置は、秘匿文の配列と読み込み位置の秘匿文とを入力とし、当該秘匿文の配列の当該読み込み位置の要素を出力する。この際、読み込み位置を表現するベクトルと秘匿文の配列に基づくベクトルとの内積を要素とする新たな秘匿文の配列を生成することを新たな秘匿文の配列の要素数が１となるまで繰り返し、要素数が１の新たな秘匿文の配列を読み込み位置の要素として出力することを特徴とする。
【００２５】
第一実施形態の秘密読み込み装置１は、図１に例示するように、入力部１１、ベクトル作成部１２、圧縮計算部１３、および読み込み部１４を含む。この秘密読み込み装置１が、図２に例示する各ステップの処理を行うことにより第一実施形態の秘密読み込み方法が実現される。
【００２６】
秘密読み込み装置１は、例えば、中央演算処理装置（CPU: Central Processing Unit）、主記憶装置（RAM: Random Access Memory）などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密読み込み装置１は、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密読み込み装置１に入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密読み込み装置１の各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【００２７】
以下、図２を参照して、第一実施形態の秘密読み込み装置１が実行する秘密読み込み方法について説明する。
【００２８】
ステップＳ１１において、入力部１１は、大きさnの秘匿文の配列[a0]=([a0[0]], [a0[1]], …, [a0[n-1]])と、読み込み位置xの秘匿文[x]とを入力として受け取る。入力部１１は、秘匿文の配列[a0]と秘匿文[x]とをベクトル作成部１２へ出力する。
【００２９】
ステップＳ１２において、ベクトル作成部１２は、入力部１１から秘匿文の配列[a0]と秘匿文[x]とを受け取り、k個の秘匿文のベクトル[vj]を作成する。ただし、kは2以上の整数であり、jは1以上k以下の各整数である。具体的には、m1, m2, …, mkをn≦m1×m2×…×mkを満たす自然数とし、各整数jについて、xjを式（１）で定義される整数とし、(xjmod mj)番目の要素が1であり、他の要素が0である、大きさmjの秘匿文のベクトル[vj]を作成する。
【００３０】
【数５】
2019059042.tif 000007
【００３１】
特に、入力される各秘匿文が、(t, s)Shamir秘密分散によるシェアであれば、k, mi（i=1, 2, …, k）を式（２）とすることができる。なお、(t, s)Shamir秘密分散とは、入力された平文をs個に分割した分散値をs個の秘密計算装置に分散して保持しておき、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られないような秘密分散である。このとき、tは1以上の整数であり、s≧2t-1である。
【００３２】
【数６】
2019059042.tif 000008
【００３３】
ステップＳ１３−１において、圧縮計算部１３は、jを1に初期化する。
【００３４】
ステップＳ１３−２において、圧縮計算部１３は、秘匿文の配列[aj-1]を用いてnj個の秘匿文のベクトル[bj,i]を作成する。作成する秘匿文のベクトル[bj,i]の数njは、jの値により異なる。具体的には、njを式（３）で定義される整数とし、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]を計算する。
【００３５】
【数７】
2019059042.tif 000009
【００３６】
ステップＳ１３−３において、圧縮計算部１３は、秘匿文のベクトル[bj,j]と秘匿文のベクトル[vj]との内積を第i要素とする秘匿文の配列[aj]を計算する。
【００３７】
ステップＳ１３−４において、圧縮計算部１３は、j+1がk以下（j+1≦k）であるか否かを判定し、j+1がk以下であれば、jをインクリメント（j←j+1）してステップＳ１３−２へ処理を戻し、j+1がkより大きければ（j+1>k）、秘匿文の配列[ak]を出力する。なお、このとき、秘匿文の配列[ak]は要素数が１の配列となっている。
【００３８】
ステップＳ１４において、読み込み部１４は、要素数が１の秘匿文の配列[ak]を秘匿文の配列[a0]のx番目の要素である秘匿文[a0[x]]として出力する。
【００３９】
第一実施形態は、(t, s)Shamir秘密分散では、k-1段までの乗算（内積）を乗算１回分の通信で行うことができることを利用し、第i要素の読み込みを大きさΘ(n1/k)のベクトルによるk段の内積で表現したことがポイントである。各ベクトルの大きさをO(n1/k)とし、k-1段目の計算がO(n1/k)回で済むようにしたことで、全体の通信量をO(n1/k)に抑えることができる。
【００４０】
＜第二実施形態＞
第二実施形態の秘密書き込み装置は、秘匿文の配列と書き込み番地の秘匿文と書き込む値の秘匿文とを入力とし、当該秘匿文の配列の当該書き込み番地の要素に当該値を加算する。この際、書き込み番地を表現するベクトルと書き込む値を表現するベクトルとの内積を秘匿文の配列に加算することを特徴とする。
【００４１】
第二実施形態の秘密書き込み装置２は、図３に例示するように、入力部２１、番地分解部２２、ベクトル作成部２３、および書き込み部２４を含む。この秘密書き込み装置２が、図４に例示する各ステップの処理を行うことにより第二実施形態の秘密書き込み方法が実現される。
【００４２】
秘密書き込み装置２は、例えば、中央演算処理装置（CPU: Central Processing Unit）、主記憶装置（RAM: Random Access Memory）などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密書き込み装置２は、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密書き込み装置２に入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密書き込み装置２の各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【００４３】
以下、図４を参照して、第二実施形態の秘密書き込み装置２が実行する秘密書き込み方法について説明する。
【００４４】
ステップＳ２１において、入力部２１は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …, [a[n-1]])と、m個の書き込み先番地の秘匿文[xi]と、m個の書き込む値の秘匿文[yi]とを入力として受け取る。ただし、mは2以上の整数であり、iは0以上m未満の各整数である。入力部２１は、書き込み先番地の秘匿文[xi]と書き込む値の秘匿文[yi]とを番地分解部２２へ出力する。
【００４５】
ステップＳ２２において、番地分解部２２は、入力部２１から書き込み先番地の秘匿文[xi]と書き込む値の秘匿文[yi]とを受け取り、各値yiを書き込み先番地xiに書き込むことを表現する秘匿文のベクトル[wi]を作成する。具体的には、n1, n2をn1n2≧nを満たす自然数とし、pi[λ1]qi[λ2]が、n2λ1+λ2=xiのとき[yi]となり、他のときは0となる秘匿文のベクトル[pi], [qi]を作成し、その秘匿文のベクトル[pi], [qi]を結合して、秘匿文のベクトル[wi]=[pi]||[qi]を生成する。このとき、秘匿文のベクトル[pi]は、
【００４６】
【数８】
2019059042.tif 000010
【００４７】
の要素が1であり、他の要素が0である大きさn1の秘匿文のベクトルとし、秘匿文のベクトル[qi]は、
【００４８】
【数９】
2019059042.tif 000011
【００４９】
の要素が[yi]であり、他の要素が0である大きさn2の秘匿文のベクトルとしてもよい。
【００５０】
特に、入力される各秘匿文が、(t, s)Shamir秘密分散によるシェアであれば、n1, n2は、式（４）とすることができる。なお、(t, s)Shamir秘密分散とは、入力された平文をs個に分割した分散値をs個の秘密計算装置に分散して保持しておき、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られないような秘密分散である。このとき、tは1以上の整数であり、s≧2t-1である。
【００５１】
【数１０】
2019059042.tif 000012
【００５２】
ステップＳ２３において、ベクトル作成部２３は、jを0以上n未満の各整数とし、秘匿文のベクトル[wi]から要素を選択して秘匿文のベクトル[uj], [vj]を生成する。具体的には、iを0以上m未満の各整数とし、jを0以上n未満の各整数とし、λ1, λ2を式（５）とし、
【００５３】
【数１１】
2019059042.tif 000013
【００５４】
式（６）のようにして秘匿文のベクトル[uj], [vj]を生成する。
【００５５】
【数１２】
2019059042.tif 000014
【００５６】
ステップＳ２４において、書き込み部２４は、jを0以上n未満の各整数とし、秘匿文のベクトル[uj]と秘匿文のベクトル[vj]との内積を秘匿文の配列[a]のj番目の要素である秘匿文[a[j]]に加算する。
【００５７】
第二実施形態は、書き込む値をそれぞれ２個のベクトルの内積で表現することで、書き込み先の各番地に加算する値を大きさmのベクトル同士の内積により計算できるようにしたことがポイントである。内積は乗算１回分の通信で計算できるため、全体の通信量はO(n+m√n)に抑えることができる。
【００５８】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００５９】
［プログラム、記録媒体］
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【００６０】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００６１】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００６２】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００６３】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図１】
2019059042.tif 000023
【図２】
2019059042.tif 000024
【図３】
2019059042.tif 000025
【図４】
2019059042.tif 000026
【手続補正書】
【提出日】令和2年3月3日(2020.3.3)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００４４
【補正方法】変更
【補正の内容】
【００４４】
ステップＳ２１において、入力部２１は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …, [a[n-1]])と、m個の書き込み番地の秘匿文[xi]と、m個の書き込む値の秘匿文[yi]とを入力として受け取る。ただし、mは2以上の整数であり、iは0以上m未満の各整数である。入力部２１は、書き込み番地の秘匿文[xi]と書き込む値の秘匿文[yi]とを番地分解部２２へ出力する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００４５
【補正方法】変更
【補正の内容】
【００４５】
ステップＳ２２において、番地分解部２２は、入力部２１から書き込み番地の秘匿文[xi]と書き込む値の秘匿文[yi]とを受け取り、各値yiを書き込み番地xiに書き込むことを表現する秘匿文のベクトル[wi]を作成する。具体的には、n1, n2をn1n2≧nを満たす自然数とし、pi[λ1]qi[λ2]が、n2λ1+λ2=xiのとき[yi]となり、他のときは0となる秘匿文のベクトル[pi], [qi]を作成し、その秘匿文のベクトル[pi], [qi]を結合して、秘匿文のベクトル[wi]=[pi]||[qi]を生成する。このとき、秘匿文のベクトル[pi]は、
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
秘匿文の配列と読み込み位置の秘匿文とを入力とし、当該秘匿文の配列の当該読み込み位置の要素を出力する秘密読み込み装置であって、
上記読み込み位置を表現するベクトルと上記秘匿文の配列に基づくベクトルとの内積を要素とする新たな秘匿文の配列を生成することを上記新たな秘匿文の配列の要素数が１となるまで繰り返し、要素数が１の上記新たな秘匿文の配列を上記読み込み位置の要素として出力する、
秘密読み込み装置。
【請求項２】
請求項１に記載の秘密読み込み装置であって、
n, kを2以上の整数とし、jを1以上k以下の各整数とし、
上記秘密読み込み装置は、大きさnの秘匿文の配列[a0]=([a0[0]], [a0[1]], …,[a0[n-1]])と読み込み位置xの秘匿文[x]とを入力とし、秘匿文の配列[a0]のx番目の要素である秘匿文[a0[x]]を出力するものであり、
各整数jについて秘匿文[x]を用いて秘匿文のベクトル[vj]を作成するベクトル作成部と、
各整数jについて秘匿文の配列[aj-1]と秘匿文のベクトル[vj]とを用いて秘匿文の配列[aj]を作成する圧縮計算部と、
要素数が1の秘匿文の配列[ak]を秘匿文の配列[a0]のx番目の要素である秘匿文[a0[x]]として出力する読み込み部と、
を含む秘密読み込み装置。
【請求項３】
請求項２に記載の秘密読み込み装置であって、
m1, m2, …, mkをn≦m1×m2×…×mkを満たす自然数とし、
njを次式で定義される整数とし、iを0以上nj未満の各整数とし、
【数１３】
2019059042.tif 000027
上記圧縮計算部は、各整数iについて秘匿文の配列[aj-1]を用いて作成した秘匿文のベクトル[bj,i]と、上記秘匿文のベクトル[vj]との内積を第i要素とする上記秘匿文の配列[aj]を作成するものである、
秘密読み込み装置。
【請求項４】
請求項３に記載の秘密読み込み装置であって、
上記ベクトル作成部は、各整数jについて、xjを次式で定義される整数とし、
【数１４】
2019059042.tif 000028
第xjmod mj番目の要素が1であり、他の要素が0である大きさmjの上記秘匿文のベクトル[vj]を作成するものであり、
上記圧縮計算部は、各整数iについて、[bj,i]=([aj-1[mji+0]], [aj-1[mji+1]], …, [aj-1[mji+mj-1]])、かつ、λ≧|aj-1|のとき[aj-1[λ]]=0となる上記秘匿文のベクトル[bj,i]を作成するものである、
秘密読み込み装置。
【請求項５】
請求項４に記載の秘密読み込み装置であって、
上記秘匿文の配列[a0]および上記秘匿文[x]は、tを1以上の整数とし、s≧2t-1とし、平文をs個に分割したシェアのうち、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られない秘密分散により秘匿化したものであり、
k, mi（i=1, 2, …, k）は、次式で定義されるものである、
【数１５】
2019059042.tif 000029
秘密読み込み装置。
【請求項６】
秘匿文の配列と読み込み位置の秘匿文とを入力とし、当該秘匿文の配列の当該読み込み位置の要素を出力する秘密読み込み装置が実行する秘密読み込み方法であって、
上記秘密読み込み装置が、上記読み込み位置を表現するベクトルと上記秘匿文の配列に基づくベクトルとの内積を要素とする新たな秘匿文の配列を生成することを上記新たな秘匿文の配列の要素数が１となるまで繰り返し、要素数が１の上記新たな秘匿文の配列を上記読み込み位置の要素として出力する、
秘密読み込み方法。
【請求項７】
秘匿文の配列と書き込み番地の秘匿文と書き込む値の秘匿文とを入力とし、当該秘匿文の配列の当該書き込み番地の要素に当該値を加算する秘密書き込み装置であって、
上記書き込み番地を表現するベクトルと上記書き込む値を表現するベクトルとの内積を上記秘匿文の配列に加算する、
秘密書き込み装置。
【請求項８】
請求項７に記載の秘密書き込み装置であって、
n, mを2以上の整数とし、iを0以上m未満の各整数とし、jを0以上n未満の各整数とし、
上記秘密書き込み装置は、大きさnの秘匿文の配列[a]=([a[0]], [a[1]], …,[a[n-1]])と書き込み番地xiの秘匿文[xi]と書き込む値yiの秘匿文[yi]とを入力とし、各整数iについて秘匿文の配列[a]のxi番目の要素である秘匿文[a[xi]]に値yiを加算するものであり、
各整数iについて値yiの書き込み番地xiを表現する秘匿文のベクトル[wi]を作成する番地分解部と、
各整数jについて秘匿文のベクトル[wi]から要素を選択して秘匿文のベクトル[uj], [vj]を作成するベクトル作成部と、
各整数jについて秘匿文のベクトル[uj]と秘匿文のベクトル[vj]との内積を秘匿文の配列[a]のj番目の要素である秘匿文[a[j]]に加算する書き込み部と、
を含む秘密書き込み装置。
【請求項９】
請求項８に記載の秘密書き込み装置であって、
上記番地分解部は、n1, n2をn1n2≧nを満たす自然数とし、pi[λ1]qi[λ2]がn2λ1+λ2=xiのとき[yi]となり、他のときは0となる秘匿文のベクトル[pi], [qi]を結合して上記秘匿文のベクトル[wi]を作成するものであり、
上記ベクトル作成部は、iを0以上m未満の各整数とし、jを0以上n未満の各整数とし、λ1, λ2を次式とし、
【数１６】
2019059042.tif 000030
次式のようにして上記秘匿文のベクトル[uj], [vj]を作成するものである、
【数１７】
2019059042.tif 000031
秘密書き込み装置。
【請求項１０】
請求項９に記載の秘密書き込み装置であって、
上記秘匿文のベクトル[pi]は、
【数１８】
2019059042.tif 000032
の要素が1であり、他の要素が0である大きさn1の秘匿文のベクトルであり、
上記秘匿文のベクトル[qi]は、
【数１９】
2019059042.tif 000033
の要素が[yi]であり、他の要素が0である大きさn2の秘匿文のベクトルである、
秘密書き込み装置。
【請求項１１】
請求項９または１０に記載の秘密書き込み装置であって、
上記秘匿文の配列[a]と上記秘匿文[xi]と上記秘匿文[yi]とは、tを1以上の整数とし、s≧2t-1とし、平文をs個に分割したシェアのうち、任意のt個のシェアが揃えば平文を復元でき、t個未満のシェアからは平文に関する一切の情報を得られない秘密分散により秘匿化したものであり、
n1, n2は、次式で定義されるものである、
【数２０】
2019059042.tif 000034
秘密書き込み装置。
【請求項１２】
秘匿文の配列と書き込み番地の秘匿文と書き込む値の秘匿文とを入力とし、当該秘匿文の配列の当該書き込み番地の要素に当該値を加算する秘密書き込み装置が実行する秘密書き込み方法であって、
上記秘密書き込み装置が、上記書き込み番地を表現するベクトルと上記書き込む値を表現するベクトルとの内積を上記秘匿文の配列に加算する、
秘密書き込み方法。
【請求項１３】
請求項１から５のいずれかに記載の秘密読み込み装置または請求項７から１１のいずれかに記載の秘密書き込み装置としてコンピュータを機能させるためのプログラム。
【国際調査報告】
2019059042.tif 000035
2019059042.tif 000036
2019059042.tif 000037
2019059042.tif 000038