(57)【要約】  アクセスした位置を明かすことなく、配列へのアクセスを効率よく行う。記憶部１０は、配列x'→の秘匿値の配列[x'→]と、秘匿値の配列[x'→]の各要素に対応するアドレスの配列a'→とを記憶する。リフレッシュ部１１は、ランダムなパラメータFの秘匿値[F]と、配列x'→をランダムな置換ρで置換した配列x→の秘匿値の配列[x→]と、関数TagFによりアドレスの配列a→の各要素から計算した公開タグの配列b→とを求める。アクセス部１２は、アクセス位置jの秘匿値[j]から関数Tagとパラメータの秘匿値[F]により計算したタグに対応する秘匿値の配列[x→]の要素に対して所望のアクセスを行う。
2020145340.tif 000002
【特許請求の範囲】
【請求項１】
配列x'→の秘匿値の配列[x'→]と、上記秘匿値の配列[x'→]の各要素に対応するアドレスの配列a'→とを記憶する記憶部と、
ランダムな置換をρ、上記配列x'→を上記置換ρで置換した配列をx→、上記アドレスの配列a'→を上記置換ρで置換したアドレスの配列をa→、F'をパラメータとしてアドレスからタグへの単射を表す関数をTagF’、ランダムなパラメータをF、上記関数TagFにより上記アドレスの配列a→の各要素から計算した公開タグの配列をb→とするとき、上記パラメータFの秘匿値[F]と、上記配列x→の秘匿値の配列[x→]と、上記公開タグの配列b→とを求めるリフレッシュ部と、
入力されたアクセス位置jの秘匿値[j]から上記関数Tagと上記パラメータの秘匿値[F]により計算したタグに対応する上記秘匿値の配列[x→]の要素に対して所望のアクセスを行うアクセス部と、
を含む秘密配列アクセス装置。
【請求項２】
請求項１に記載の秘密配列アクセス装置であって、
上記アドレスの配列a'→を0番目のアドレスの配列a→(0)とし、mを自然数とし、1以上m以下の各整数kについて、上記関数Tagのランダムなパラメータ[F(k)]と、ランダムな置換[ρ(k)]と、上記置換[ρ(k)]に対応するように上記アドレスの配列a'→を並べ替えたアドレスの配列a→(k)の秘匿値[a→(k)]と、上記パラメータ[F(k)]を用いる上記関数Tagにより上記アドレスの配列a→(k)の秘匿値[a→(k)]の各要素から計算した公開タグの配列b→(k)と、を計算する事前計算部をさらに含み、
上記リフレッシュ部は、k回目の実行の際に、上記パラメータ[F(k)]を上記関数Tagのパラメータ[F]とし、上記公開タグの配列b→(k)を上記公開タグの配列b→とし、上記秘匿値の配列[x'→]を上記置換[ρ(k)]で置換した秘匿値の配列[x→]を求めるものである、
秘密配列アクセス装置。
【請求項３】
請求項２に記載の秘密配列アクセス装置であって、
上記事前計算部は、k-1番目のアドレスの配列a→(k-1)をk番目の置換[ρ(k)]で置換してk番目のアドレスの配列a→(k)を計算するものである、
秘密配列アクセス装置。
【請求項４】
請求項２に記載の秘密配列アクセス装置であって、
上記事前計算部は、k番目のランダムな置換[π(k)]を生成し、k-1番目の置換[π(k-1)]の逆置換Inv([π(k-1)])とk番目の置換[π(k)]とを合成して上記置換[ρ(k)]を計算し、
上記アドレスの配列a→(0)をk番目の置換[π(k)]で置換してk番目のアドレスの配列a→(k)を計算するものである、
秘密配列アクセス装置。
【請求項５】
記憶部に、配列x'→の秘匿値の配列[x'→]と、上記秘匿値の配列[x'→]の各要素に対応するアドレスの配列a'→とが記憶されており、
リフレッシュ部が、ランダムな置換をρ、上記配列x'→を上記置換ρで置換した配列をx→、上記アドレスの配列a'→を上記置換ρで置換したアドレスの配列をa→、F'をパラメータとしてアドレスからタグへの単射を表す関数をTagF’、ランダムなパラメータをF、関数TagFにより上記アドレスの配列a→の各要素から計算した公開タグの配列をb→とするとき、上記パラメータFの秘匿値[F]と、上記配列x→の秘匿値の配列[x→]と、上記公開タグの配列b→とを求め、
アクセス部が、入力されたアクセス位置jの秘匿値[j]から上記関数Tagと上記パラメータの秘匿値[F]により計算したタグに対応する上記秘匿値の配列[x→]の要素に対して所望のアクセスを行う、
秘密配列アクセス方法。
【請求項６】
請求項１から４のいずれかに記載の秘密配列アクセス装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、暗号応用技術に関し、特にアクセスした位置を明かすことなく配列に対するデータの読み込みや書き込みを行う技術に関する。
【背景技術】
【０００２】
暗号化された数値を復元することなく特定の演算結果を得る方法として、秘密計算と呼ばれる方法がある（例えば、非特許文献１参照）。非特許文献１に記載された方法では、３つの秘密計算装置に数値の断片を分散させるという暗号化を行い、３つの秘密計算装置が協調計算を行うことにより、数値を復元することなく、加減算、定数加算、乗算、定数倍、論理演算（否定、論理積、論理和、排他的論理和）、データ形式変換（整数、二進数）の結果を３つの秘密計算装置に分散された状態、すなわち暗号化されたまま保持させることができる。【０００３】
アクセスした位置jを明かすことなく、配列のj番目のデータの読み込みや値wの書き込みを行う場合、アクセスの度にランダムな要素にアクセスしたように見せかけることがよく行われる（例えば、非特許文献２、３参照）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】千田浩司、濱田浩気、五十嵐大、高橋克巳、“軽量検証可能3パーティ秘匿関数計算の再考”、CSS、2010年
【非特許文献２】Oded Goldreich and Rafail Ostrovsky, “Software protection and simulation on oblivious rams.” J. ACM, Vol. 43, No. 3, pp. 431-473, 1996.
【非特許文献３】Samee Zahur, Xiao Shaun Wang, Mariana Raykova, Adria Gasc'on, Jack Doerner, David Evans, and Jonathan Katz, “Revisiting square-root ORAM: efficient random access in multi-party computation.” In IEEE Symposium on Security and Privacy, SP 2016, pp. 218-234, May 22-26, 2016.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、大きさnの配列へのアクセスにΩ(log n)の通信段数が必要であった。そのため、通信遅延が大きい環境では、配列へのアクセスに要する時間が大きくなることが課題であった。【０００６】
この発明の目的は、定数段の通信で、アクセスした位置を明かすことなく、配列へのデータの読み込みと書き込みを効率よく行うことができる秘密配列アクセス技術を実現することである。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために、この発明の一態様の秘密配列アクセス装置は、配列x'→の秘匿値の配列[x'→]と、秘匿値の配列[x'→]の各要素に対応するアドレスの配列a'→とを記憶する記憶部と、ランダムな置換をρ、配列x'→を置換ρで置換した配列をx→、アドレスの配列a'→を置換ρで置換したアドレスの配列をa→、F'をパラメータとしてアドレスからタグへの単射を表す関数をTagF’、ランダムなパラメータをF、関数TagFによりアドレスの配列a→の各要素から計算した公開タグの配列をb→とするとき、パラメータFの秘匿値[F]と、配列x→の秘匿値の配列[x→]と、公開タグの配列b→とを求めるリフレッシュ部と、入力されたアクセス位置jの秘匿値[j]から関数Tagとパラメータの秘匿値[F]により計算したタグに対応する秘匿値の配列[x→]の要素に対して所望のアクセスを行うアクセス部と、を含む。
【発明の効果】
【０００８】
この発明の秘密配列アクセス技術によれば、定数段の通信で、アクセスした位置を明かすことなく、配列へのデータの読み込みと書き込みを効率よく行うことができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、第一実施形態の秘密配列アクセス装置の機能構成を例示する図である。
【図２】図２は、第一実施形態の秘密配列アクセス方法の処理手順を例示する図である。
【図３】図３は、秘密配列アクセス方法のうちリフレッシュ時に実行される処理手順を例示する図である。
【図４】図４は、リフレッシュ部により生成されるデータを例示する図である。
【図５】図５は、秘密配列アクセス方法のうち読み込み時に実行される処理手順を例示する図である。
【図６】図６は、秘密配列アクセス方法のうち書き込み時に実行される処理手順を例示する図である。
【図７】図７は、第二実施形態の秘密配列アクセス装置の機能構成を例示する図である。
【図８】図８は、第二実施形態の秘密配列アクセス方法の処理手順を例示する図である。
【図９】図９は、秘密配列アクセス方法のうち事前計算時に実行される処理手順を例示する図である。
【図１０】図１０は、秘密配列アクセス方法のうち事前計算時に実行される処理手順を例示する図である。
【発明を実施するための形態】
【００１０】
この発明の実施の形態を説明する前に、この明細書における表記方法および用語の定義について説明する。
【００１１】
＜表記方法＞
文中で使用する記号「→」（上付き矢印）は、本来直前の文字の真上に記載されるべきものであるが、テキスト記法の制限により、当該文字の直後に記載する。数式中においてはこれらの記号は本来の位置、すなわち文字の真上に記述している。例えば、「a→」は数式中では次式で表される。
【００１２】
【数１】
2020145340.tif 000003
【００１３】
ある値aを暗号化や秘密分散などにより秘匿化した値をaの秘匿値と呼び、[a]と表記する。また、aを[a]の平文と呼ぶ。秘匿化が秘密分散である場合は、[a]により各秘密計算装置が持つ秘密分散の断片の集合を参照する。ベクトルa→=(a→[0], a→[1], …)のi番目の要素をa→[i]により参照する。ベクトルa→=(a→[1], a→[2], …, a→[n])と全単射π: [1, n]→[1, n]に対して、ベクトルa→=(b→[π(1)], b→[π(2)], …, b→[π(n)])であるようなベクトルb→をb→=πa→と表記する。ベクトルa→の要素の数を|a→|と表記する。
【００１４】
＜復元＞
aの秘匿値[a]を入力とし、c=aとなる値cを計算する処理を次式で記述する。
【００１５】
【数２】
2020145340.tif 000004
【００１６】
＜算術演算＞
加算、減算、乗算の各演算は、２つの値a, bの秘匿値[a], [b]を入力とし、それぞれa+b, a-b, abの計算結果c1, c2, c3の秘匿値[c1], [c2], [c3]を計算する。これらの演算の実行をそれぞれ次式のように記述する。
【００１７】
【数３】
2020145340.tif 000005
【００１８】
誤解を招く恐れのない場合は、Add([a], [b]), Sub([a], [b]), Mul([a], [b])をそれぞれ[a]+[b], [a]-[b], [a]×[b]と略記する。
【００１９】
＜等号判定＞
等号判定の演算は、２つの値a, bの秘匿値[a], [b]を入力とし、a=bの真偽値c∈{0, 1}の秘匿値[c]を計算する。真偽値は真のとき１、偽のとき０とする。この演算の実行を次式のように記述する。
【００２０】
【数４】
2020145340.tif 000006
【００２１】
＜選択＞
選択の演算は、真偽値c∈{0, 1}の秘匿値[c]と２つの値a, bの秘匿値[a], [b]を入力とし、次式を満たすdの秘匿値[d]を計算する。
【００２２】
【数５】
2020145340.tif 000007
【００２３】
この演算の実行を次式のように記述する。
【００２４】
【数６】
2020145340.tif 000008
【００２５】
この演算は次式により実現できる。
【００２６】
【数７】
2020145340.tif 000009
【００２７】
＜置換の適用＞
n個の秘匿値の列[a→]=([a→[1]], [a→[2]], …, [a→[n]])と全単射π: {1, 2, …, n}→{1, 2, …, n}を表す秘匿値[π]を入力とし、b→=πa→となる秘匿値を計算する処理を次式で記述する。
【００２８】
【数８】
2020145340.tif 000010
【００２９】
＜逆置換＞
全単射π: {1, 2, …, n}→{1, 2, …, n}を表す秘匿値[π]を入力とし、σ=π-1となる全単射を表す秘匿値[σ]を計算する処理を次式で記述する。
【００３０】
【数９】
2020145340.tif 000011
【００３１】
＜置換の合成＞
全単射π:{1, 2, …, n}→{1, 2, …, n}を表す秘匿値[π]と全単射ρ: {1, 2, …, n}→{1, 2, …, n}を表す秘匿値[ρ]を入力とし、σ=ρ○πとなる全単射を表す秘匿値[σ]を計算する処理を次式で記述する。なお、○は写像の合成を表す演算子である。
【００３２】
【数１０】
2020145340.tif 000012
【００３３】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【００３４】
＜第一実施形態＞
第一実施形態の秘密配列アクセス装置１は、配列からの読み込みを行う場合、アクセス位置を表す秘匿値[j]を入力とし、アクセス位置に対応する配列の要素を出力する。秘密配列アクセス装置１は、配列への書き込みを行う場合、アクセス位置を表す秘匿値[j]と書き込む値の秘匿値[w]とを入力とし、アクセス位置に対応する配列の要素を書き込む値に更新する。秘密配列アクセス装置１は、図１に例示するように、記憶部１０、リフレッシュ部１１、およびアクセス部１２を備える。この秘密配列アクセス装置１が、図２に例示する各ステップの処理を行うことにより第一実施形態の秘密配列アクセス方法が実現される。
【００３５】
秘密配列アクセス装置１は、例えば、中央演算処理装置（CPU: Central Processing Unit）、主記憶装置（RAM: Random Access Memory）などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密配列アクセス装置１は、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密配列アクセス装置１に入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密配列アクセス装置１の各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。秘密配列アクセス装置１が備える各記憶部は、例えば、RAM（Random Access Memory）などの主記憶装置、ハードディスクや光ディスクもしくはフラッシュメモリ（Flash Memory）のような半導体メモリ素子により構成される補助記憶装置、またはリレーショナルデータベースやキーバリューストアなどのミドルウェアにより構成することができる。
【００３６】
記憶部１０には、n個の秘匿値の配列[x'→]=([x'→[1]], [x'→[2]], …, [x'→[n]])と、秘匿値の配列[x'→]の各要素に対応するアドレスの配列a'→=(a'→[1], a'→[2], …, a'→[n])とが記憶されている。ただし、nは所定の自然数である。a'→の各要素は互いに異なるものとする。
【００３７】
ステップＳ１１において、リフレッシュ部１１は、記憶部１０に記憶されている秘匿値の配列[x'→]とアドレスの配列a'→とを用いて、秘匿値の配列[x'→]の平文x'→を置換した配列x→=(x→[1], x→[2], …, x→[n])の秘匿値[x→]=([x→[1]], [x→[2]], …, [x→[n]])と、置換後の秘匿値の配列[x→]の各要素に対応するアドレスの配列をa→=(a→[1], a→[2], …, a→[n])として置換後のアドレスの配列a→の各要素に一対一に対応する公開タグの配列b→=(b→[1], b→[2], …, b→[n])と、を生成する。以下、図３を参照して、リフレッシュ部１１の動作を詳細に説明する。
【００３８】
ステップＳ１１１において、リフレッシュ部１１は、ランダムな置換ρを表す秘匿値[ρ]を生成する。
【００３９】
ステップＳ１１２において、リフレッシュ部１１は、記憶部１０に記憶されているアドレスの配列a'→の各要素を秘匿化し、アドレスの秘匿値の配列[a'→]を得る。
【００４０】
ステップＳ１１３において、リフレッシュ部１１は、記憶部１０に記憶されている秘匿値の配列[x'→]に対して置換[ρ]を適用し、置換後の秘匿値の配列[x→]を得る。すなわち、リフレッシュ部１１は、式（１）を計算する。
【００４１】
【数１１】
2020145340.tif 000013
【００４２】
また、リフレッシュ部１１は、アドレスの秘匿値の配列[a'→]に対して置換[ρ]を適用し、置換後のアドレスの秘匿値の配列[a→]を得る。すなわち、リフレッシュ部１１は、式（２）を計算する。
【００４３】
【数１２】
2020145340.tif 000014
【００４４】
ステップＳ１１４において、リフレッシュ部１１は、ランダムなパラメータFを表す秘匿値[F]を用いて、置換後のアドレスの秘匿値の配列[a→]に対して関数Tag[F]([a→])を計算し、その計算結果を復元して公開タグの配列b→=(b→[1], b→[2], …, b→[n])を得る。ここで、関数Tag[F]は、アドレスからタグへの単射を表す関数であり、その動作がパラメータ[F]により制御されるものである。関数Tag[F]は、入力が秘匿値である場合、入力値を秘匿したまま関数内の各演算を実行するものとする。また、関数Tag[F]は、入力が配列である場合、配列の各要素に対して関数内の各演算を計算するものとする。すなわち、リフレッシュ部１１は、1以上n以下の各整数iについて、式（３）を計算する。
【００４５】
【数１３】
2020145340.tif 000015
【００４６】
図４に、リフレッシュ部１１により生成されるデータを例示する。置換前の秘匿値の配列[x'→]とアドレスの配列a'→とはそれぞれ同じ置換ρにより並べ替えられ、置換後の秘匿値の配列[x→]と置換後のアドレスの配列a→とが生成される。すなわち、秘匿値[x'→[i]]とアドレスa'→[i]の組み合わせが維持されるようにそれぞれ置換される。次に、置換後のアドレスの配列a→の各要素から関数TagFにより一対一に対応する公開のタグが計算され、公開タグの配列b→が生成される。なお、アドレスの配列a'→の並び替えは、安全性を考慮して、上述のように一旦秘匿化した上で秘密計算により実行することが望ましい。
【００４７】
ステップＳ１２ａにおいて、アクセス部１２は、アクセス位置jを表す秘匿値[j]を入力とし、アクセス位置jに対応する秘匿値の配列[x→]の要素を読み込み、出力する。以下、図５を参照して、読み込み時のアクセス部１２の動作を詳細に説明する。
【００４８】
ステップＳ１２１ａにおいて、アクセス部１２は、アクセス位置jを表す秘匿値[j]を入力として受け取る。
【００４９】
ステップＳ１２２ａにおいて、アクセス部１２は、パラメータFを表す秘匿値[F]を用いて、アクセス位置jを表す秘匿値[j]に対して関数Tag[F]([j])を計算し、その計算結果を復元してタグtを得る。すなわち、アクセス部１２は、式（４）を計算する。
【００５０】
【数１４】
2020145340.tif 000016
【００５１】
ステップＳ１２３ａにおいて、アクセス部１２は、タグtに対応する秘匿値の配列[x→]の要素[x→[d]]の値を読み込み、出力する。なお、「タグtに対応する」とは、公開タグの配列b→のうちタグtと一致する公開タグb→[d]を生成したアドレスa→[d]と組になっている、という意味である。
【００５２】
ステップＳ１２ｂにおいて、アクセス部１２は、アクセス位置jを表す秘匿値[j]と書き込む値wを表す秘匿値[w]とを入力とし、アクセス位置jに対応する秘匿値の配列[x→]の要素を書き込む値[w]で書き換える。以下、図６を参照して、書き込み時のアクセス部１２の動作を詳細に説明する。
【００５３】
ステップＳ１２１ｂにおいて、アクセス部１２は、アクセス位置jを表す秘匿値[j]と書き込む値wを表す秘匿値[w]とを入力として受け取る。
【００５４】
ステップＳ１２２ｂにおいて、アクセス部１２は、パラメータFを表す秘匿値[F]を用いて、アクセス位置jを表す秘匿値[j]に対して関数Tag[F]([j])を計算し、その計算結果を復元してタグtを得る。すなわち、アクセス部１２は、上記式（４）を計算する。
【００５５】
ステップＳ１２３ｂにおいて、アクセス部１２は、タグtに対応する秘匿値の配列[x→]の要素[x→[d]]の値を書き込む値[w]に更新する。
【００５６】
＜第二実施形態＞
第一実施形態の秘密配列アクセス装置１は、リフレッシュ部１１が実行されるために必要なパラメータを都度生成するよう構成されていた。第二実施形態では、リフレッシュ部１１が用いるパラメータのうち事前に生成できるものについては予め生成して記憶しておく。予め計算しておいたパラメータを用いることにより、リフレッシュ部１１の動作を高速にすることができる。
【００５７】
第二実施形態の秘密配列アクセス装置２は、図７に例示するように、第一実施形態の記憶部１０、リフレッシュ部１１、およびアクセス部１２に加えて、事前計算部１３を備える。この秘密配列アクセス装置２が、図８に例示する各ステップの処理を行うことにより第二実施形態の秘密配列アクセス方法が実現される。
【００５８】
ステップＳ１３において、事前計算部１３は、まず、記憶部１０に記憶されているアドレスの配列a'→を0番目のアドレスの配列a→(0)に設定する。そして、1以上m以下の各整数kについて、下記の計算を行う。ただし、mは所定の自然数である。mは、配列への想定アクセス数とリフレッシュを行う頻度に従って任意に設定される。
【００５９】
第一に、事前計算部１３は、k番目のランダムなパラメータF(k)を表す秘匿値[F(k)]を生成する。第二に、事前計算部１３は、k番目のランダムな置換ρ(k)を表す秘匿値[ρ(k)]を生成する。第三に、事前計算部１３は、k番目の置換[ρ(k)]に対応するようにアドレスの配列a'→を並べ替えたk番目のアドレスの配列a→(k)を生成する。最後に、事前計算部１３は、k番目のアドレスの配列a→(k)の各要素から計算したk番目の公開タグの配列b→(k)を計算する。すなわち、事前計算部１３は、k回目の実行の際に、1以上n以下の各整数iについて、式（５）を計算する。
【００６０】
【数１５】
2020145340.tif 000017
【００６１】
アドレスの配列a→(k)は、具体的には、k-1番目のアドレスの配列a→(k-1)をk番目の置換[ρ(k)]で置換して計算する。すなわち、式（６）によりアドレスの配列a→(k)を計算する。
【００６２】
【数１６】
2020145340.tif 000018
【００６３】
アドレスの配列a→(k)は、以下のように計算してもよい。まず、k番目のランダムな置換π(k)を表す秘匿値[π(k)]を生成する。次に、k-1番目の置換[π(k-1)]の逆置換Inv([π(k-1)])とk番目の置換[π(k)]とを合成してk番目の置換[ρ(k)]を計算する。すなわち、式（７）により置換[ρ(k)]を計算する。
【００６４】
【数１７】
2020145340.tif 000019
【００６５】
そして、0番目のアドレスの配列a→(0)を置換[π(k)]で置換してアドレスの配列a→(k)を計算する。すなわち、式（８）によりアドレスの配列a→(k)を計算する。
【００６６】
【数１８】
2020145340.tif 000020
【００６７】
後者の手順であれば、k番目のアドレスの配列a→(k)を計算する際にk-1番目のアドレスの配列a→(k-1)を必要としないため、複数のアドレスの配列a→(k)を並列に計算することができる。したがって、事前計算部１３の処理をより高速に行うことができる。
【００６８】
ステップＳ１１において、リフレッシュ部１１は、k回目の実行の際に、下記の計算を行う。第一に、リフレッシュ部１１は、k番目のパラメータ[F(k)]を関数Tag[F]のパラメータ[F]とする。第二に、リフレッシュ部１１は、k番目の公開タグの配列b→(k)を公開タグの配列b→とする。最後に、リフレッシュ部１１は、秘匿値の配列[x'→]をk番目の置換[ρ(k)]で置換した秘匿値の配列[x→]を求める。すなわち、リフレッシュ部１１は、式（９）を計算する。
【００６９】
【数１９】
2020145340.tif 000021
【００７０】
＜第三実施形態＞
第一実施形態および第二実施形態では、前のリフレッシュが行われてから次のリフレッシュが行われるまでは、同じアクセス位置へのアクセスは同じタグを参照することになる。そのため、あるアクセス位置へ複数回アクセスを行うとアクセス位置が推測され易くなるおそれがある。第三実施形態では、同じアクセス位置へのアクセスであっても異なるタグを参照することで、アクセス位置をより推測され難くし、安全性を向上する。
【００７１】
第三実施形態では、関数TagFをAES-128とし、Fを暗号化鍵とする。N, Tを自然数とし、n=N+Tとする。アドレスの配列a→をa→[i]=i（i∈[1, n]）とし、アクセス位置jをj∈[1,N]とする。
【００７２】
第三実施形態の事前計算部１３は、mを十分に大きな自然数として、各k∈[1, k]について、第二実施形態で説明した処理を実行する。
【００７３】
第三実施形態のリフレッシュ部１１は、第二実施形態で説明した処理を実行する。また、第三実施形態のリフレッシュ部１１は、アクセス済みのタグを記憶するための集合Sを空集合に初期化する。
【００７４】
第三実施形態のアクセス部１２は、以下のようにして、秘匿値の配列[x→]への読み込みまたは書き込みを行う。第一に、アクセス部１２は、パラメータFを表す秘匿値[F]を用いて、アクセス位置jを表す秘匿値[j]に対して関数Tag[F]([j])を計算し、タグtの秘匿値[t]を得る。すなわち、アクセス部１２は、式（10）を計算する。
【００７５】
【数２０】
2020145340.tif 000022
【００７６】
第二に、アクセス部１２は、パラメータFを表す秘匿値[F]を用いて、N+|S|に対して関数Tag[F](N+|S|)を計算し、タグsの秘匿値[s]を得る。すなわち、アクセス部１２は、式（11）を計算する。
【００７７】
【数２１】
2020145340.tif 000023
【００７８】
第三に、アクセス部１２は、t∈Sならばc=1、そうでなければc=0であるような真偽値cの秘匿値[c]を計算する。例えば、アクセス部１２は、c←0とし、各t'∈Sについて、式（12）を計算する。
【００７９】
【数２２】
2020145340.tif 000024
【００８０】
第四に、アクセス部１２は、c=1ならばタグsを選択し、c=0ならばタグtを選択して、その選択結果を復元したタグpを得る。すなわち、アクセス部１２は、式（13）を計算する。
【００８１】
【数２３】
2020145340.tif 000025
【００８２】
第五に、アクセス部１２は、S←S∪{p}を計算し、集合Sにタグpを追加する。
【００８３】
読み込みを行う場合、アクセス部１２は、集合Sに含まれる公開タグを持つ秘匿値の配列[x→]の要素の中から、公開タグがタグtと一致する要素の値の秘匿値[r]を計算する。例えば、アクセス部１２は、[r]←0とし、各t'∈Sについて、iをb→[i]=t'である数として、式（14）を計算する。
【００８４】
【数２４】
2020145340.tif 000026
【００８５】
書き込みを行う場合、アクセス部１２は、集合Sに含まれる公開タグを持つ秘匿値の配列[x→]の要素の中から、公開タグがタグtと一致する要素の値を書き込む値の秘匿値[w]に書き換える。例えば、アクセス部１２は、各t'∈Sについて、iをb→[i]=t'である数として、式（15）を計算する。
【００８６】
【数２５】
2020145340.tif 000027
【００８７】
最後に、アクセス部１２は、|S|≧Tならば、集合Sを空集合に初期化し、リフレッシュ部１１を実行する。
【００８８】
第三実施形態の構成では、アドレスを秘匿したままの読み書きを、O(1)の通信ラウンドで実現できる。通信ラウンドが小さいため、直列での読み書きが効率的に実現できる。
【００８９】
各実施形態の秘密配列アクセス装置および方法は、秘匿値の配列を予めランダムな置換でシャッフルしてあるため、配列の要素から生成したタグを開示しても配列の要素の並びに関する情報は漏洩しない。開示されたタグへの探索は平文で実行でき、また、タグの計算にAES等の定数ラウンドの手法を用いれば、タグの計算やタグに対応した要素の探索に再帰的な処理を含まない。そのため、全体でも定数の通信ラウンドを達成することができる。従来技術ではタグの公開を行うことなく直接要素の位置を計算していたため、要素の位置の計算に再帰的な処理を含む。その結果、定数よりも大きい通信ラウンドが必要とされる。
【００９０】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００９１】
［プログラム、記録媒体］
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【００９２】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００９３】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００９４】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００９５】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図１】
2020145340.tif 000028
【図２】
2020145340.tif 000029
【図３】
2020145340.tif 000030
【図４】
2020145340.tif 000031
【図５】
2020145340.tif 000032
【図６】
2020145340.tif 000033
【図７】
2020145340.tif 000034
【図８】
2020145340.tif 000035
【図９】
2020145340.tif 000036
【図１０】
2020145340.tif 000037
【国際調査報告】
2020145340.tif 000038
2020145340.tif 000039
2020145340.tif 000040
2020145340.tif 000041
2020145340.tif 000042
2020145340.tif 000043