(57)【特許請求の範囲】
【請求項１】
下記のステップ、
（1-1）任意データ型の第１クリアテキストを取得し、該第１クリアテキストから所定進数系の第２クリアテキストを取得する、
ここで、前記第１クリアテキストのデータ型が前記所定進数系でない場合には、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換する、
（1-2）ステップ（1-1）で取得した前記所定進数系の前記第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、当該第１暗号化テキストを、クエリされる対象として記憶する、
（2-1）クエリ条件としての任意データ型の第３クリアテキストを受信し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得する、
ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換する、
（2-2）ステップ（2-1）で取得した前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶する、
（３）ステップ（1-2）で取得したクエリされる対象である第１暗号化テキスト及びステップ（2-2）で取得したクエリする対象である第２暗号化テキストに対し、前記暗号化された各桁の値である構成要素ごとの加算を行い、加算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得する、
（４）ステップ（３）で取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、
前記所定進数系の前記第５クリアテキストから第６クリアテキストを取得し、ここで、該第５クリアテキストのデータ型が前記第３クリアテキストのデータ型と同じでない場合には、該第５クリアテキストのデータ型を前記第３クリアテキストのデータ型に転換して前記第６クリアテキストを取得し、
該第６クリアテキストとステップ（2-1）で受信したクエリ条件としての前記第３クリアテキストとの比較を行い、二者が同じであると、クエリ結果が正確であること、即ち、クエリする対象がクエリされる対象にあることを示し、二者が同じでないと、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示す、
を含み、
ステップ（1-2）およびステップ（2-2）において暗号化に対称暗号化アルゴリズムを利用する場合、下式を利用し、
c=(m+s×r+p×q) mod x0
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r：乱数
p：暗号化で利用するシークレットキー
x0：中間変数＝暗号化で利用するシークレットキーp×暗号化で利用するもう一つのシークレットキーq
p、q：奇数
上記の如何なるシークレットキーも開示されないものであり、
ステップ（1-2）およびステップ（2-2）において暗号化に非対称暗号化アルゴリズムを利用する場合、下式を利用し、
0006783877.tif 000005
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r、τ：乱数
xi ：ランダムに生成したi個の数、xi=qi×p+s×r
p：非対称アルゴリズムで利用されるシークレットキー、大奇数であり、qi≪q0，0≦i≦τ
pk=（x0，x1，…，xi，…，xτ）：非対称暗号化アルゴリズムで利用される公開鍵であり、
ステップ（４）における復号化の操作式が次の通りであり、
（（c mod p）mod y）/2
ここで、cは前記第３暗号化テキストにおける各構成要素の値であり、 y≧s×2-1、且つy≦p/2であることを特徴とする完全準同型暗号化の暗号化テキストのクエリメソッド。
【請求項２】
下記のステップ、
（1-1）任意データ型の第１クリアテキストを取得し、該第１クリアテキストから所定進数系の第２クリアテキストを取得する、
ここで、前記第１クリアテキストのデータ型が前記所定進数系でない場合には、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換する、
（1-2）ステップ（1-1）で取得した前記所定進数系の前記第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、当該第１暗号化テキストを、クエリされる対象として記憶する、
（2-1）クエリ条件としての任意データ型の第３クリアテキストを受信し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得する、
ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換する、
（2-2）ステップ（2-1）で取得した前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶する、
（３）ステップ（1-2）で取得したクエリされる対象である第１暗号化テキストとステップ（2-2）で取得したクエリする対象である第２暗号化テキストに対し、前記暗号化された各桁の値である構成要素ごとの減算を行い、減算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得する、
（４）ステップ（３）で取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、当該第５クリアテキストがゼロであるかを判断し、Yesの場合、クエリ結果が正しいこと、即ち、クエリする対象がクエリされる対象にあることを示し、Noの場合、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示す、
を含み、
ステップ（1-2）およびステップ（2-2）において暗号化に対称暗号化アルゴリズムを利用する場合、下式を利用し、
c=(m+s×r+p×q) mod x0
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r：乱数
p：暗号化で利用するシークレットキー
x0：中間変数＝暗号化で利用するシークレットキーp×暗号化で利用するもう一つのシークレットキーq
p、q：奇数
上記の如何なるシークレットキーも開示されないものであり、
ステップ（1-2）およびステップ（2-2）において暗号化に非対称暗号化アルゴリズムを利用する場合、下式を利用し、
0006783877.tif 000006
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r、τ：乱数
xi ：ランダムに生成したi個の数、xi=qi×p+s×r
p：非対称アルゴリズムで利用されるシークレットキー、大奇数であり、qi≪q0，0≦i≦τ
pk=（x0，x1，…，xi，…，xτ）：非対称暗号化アルゴリズムで利用される公開鍵であり、
ステップ（４）における復号化の操作式が次の通りであり、
（c mod p）mod s
ここで、cは前記第３暗号化テキストにおける各構成要素の値であることを特徴とする完全準同型暗号化の暗号化テキストのクエリメソッド。
【請求項３】
ステップ（1-1）における、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換するステップが、文字区分の前記第１クリアテキストを文字コードに転換し、当該文字コードを前記所定進数系の前記第２クリアテキストに転換するステップを含むか、または、
ステップ（2-1）における、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換するステップが、文字区分の前記第３クリアテキストを文字コードに転換し、当該文字コードを前記所定進数系の前記第４クリアテキストに転換するステップを含むことを特徴とする請求項１または２に記載の暗号化テキストのクエリメソッド。
【請求項４】
シークレットキーpは生成方式がLWE、格子、またはGCDに基づき、スパース・サブセット合計に近似する方法であることを特徴とする請求項１または２に記載の暗号化テキストのクエリメソッド。
【請求項５】
ステップ（３）は順にクエリされる対象である第１暗号化テキストからクエリする対象である第２暗号化テキストと同じ数量の構成要素を取り出し、クエリされる対象である第１暗号化テキストにおける構成要素数がクエリする対象である第２暗号化テキストの構成要素数以下となるまで、前記第１暗号化テキストから取り出された構成要素と前記第２暗号化テキストの構成要素とをそれぞれ加算し、加算結果を構成要素とする複数の第３暗号化テキストを、クエリ結果として取得することであることを特徴とする請求項１または２に記載の暗号化テキストのクエリメソッド。
【請求項６】
ステップ（４）における、前記第５クリアテキストのデータ型を前記第３クリアテキストのデータ型に転換して前記第６クリアテキストとするステップが、前記所定進数系の前記第５クリアテキストを対応する文字コードに転換し、当該文字コードを文字区分の前記第６クリアテキストに転換するステップを含むことを特徴とする請求項１に記載の暗号化テキストのクエリメソッド。
【請求項７】
文字コードはコードASCIIまたはコードUnicodeであることを特徴とする請求項３または６に記載の暗号化テキストのクエリメソッド。
【請求項８】
下記のモジュール、
第一モジュール：任意データ型の第１クリアテキストを取得し、該第１クリアテキストから所定進数系の第２クリアテキストを取得し、
ここで、前記第１クリアテキストのデータ型が前記所定進数系でない場合には、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換し、
前記所定進数系の前記第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、当該第１暗号化テキストを、クエリされる対象として記憶することに用いられる、
第二モジュール：クエリ条件としての任意データ型の第３クリアテキストを受信し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得し、
ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換し、
前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶することに用いられる、
第三モジュール：第一モジュールが取得したクエリされる対象である第１暗号化テキスト及び第二モジュールが取得したクエリする対象である第２暗号化テキストに対し、前記暗号化された各桁の値である構成要素ごとの加算を行い、加算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得するようにすることに用いられる、
第四モジュール：第三モジュールが取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、
前記所定進数系の前記第５クリアテキストから第６クリアテキストを取得し、ここで、該第５クリアテキストのデータ型が前記第３クリアテキストのデータ型と同じでない場合には、該第５クリアテキストのデータ型を前記第３クリアテキストのデータ型に転換して前記第６クリアテキストを取得し、該第６クリアテキストと第二モジュールにおけるクエリ条件としての前記第３クリアテキストとの比較を行い、二者が同じであると、クエリ結果が正確であること、即ち、クエリする対象がクエリされる対象にあることを示し、二者が同じでないと、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示すことに用いられる、
を含み、
前記第一モジュールおよび前記第二モジュールにおいて暗号化に対称暗号化アルゴリズムを利用する場合、下式を利用し、
c=(m+s×r+p×q) mod x0
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r：乱数
p：暗号化で利用するシークレットキー
x0：中間変数＝暗号化で利用するシークレットキーp×暗号化で利用するもう一つのシークレットキーq
p、q：奇数
上記の如何なるシークレットキーも開示されないものであり、
前記第一モジュールおよび前記第二モジュールにおいて暗号化に非対称暗号化アルゴリズムを利用する場合、下式を利用し、
0006783877.tif 000007
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値、
r、τ：乱数
xi ：ランダムに生成したi個の数、xi=qi×p+s×r
p：非対称アルゴリズムで利用されるシークレットキー、大奇数であり、qi≪q0，0≦i≦τ
pk=（x0，x1，…，xi，…，xτ）：非対称暗号化アルゴリズムで利用される公開鍵であり、
前記第四モジュールにおける復号化の操作式が次の通りであり、
（（c mod p）mod y）/2
ここで、cは前記第３暗号化テキストにおける各構成要素の値であり、 y≧s×2-1、且つy≦p/2であることを特徴とする完全準同型暗号化の暗号化テキストクエリ・システム。
【請求項９】
下記のモジュール、
第一モジュール：任意データ型の第１クリアテキストを取得し、該第１クリアテキストから所定進数系の第２クリアテキストを取得し、
ここで、前記第１クリアテキストのデータ型が前記所定進数系でない場合には、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換し、
前記所定進数系の前記第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、当該第１暗号化テキストを、クエリされる対象として記憶することに用いられる、
第二モジュール：クエリ条件としての任意データ型の第３クリアテキストを受信し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得し、
ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換し、
前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶することに用いられる、
第三モジュール：第一モジュールが取得したクエリされる対象である第１暗号化テキストと第二モジュールが取得したクエリする対象である第２暗号化テキストに対し、前記暗号化された各桁の値である構成要素ごとの減算を行い、減算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得することに用いられる、
第四モジュール：第三モジュールが取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、当該第５クリアテキストがゼロであるかを判断し、Yesの場合、クエリ結果が正しいこと、即ち、クエリする対象がクエリされる対象にあることを示し、Noの場合、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示すことに用いられる、
を含み、
前記第一モジュールおよび前記第二モジュールにおいて暗号化に対称暗号化アルゴリズムを利用する場合、下式を利用し、
c=(m+s×r+p×q) mod x0
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r：乱数
p：暗号化で利用するシークレットキー
x0：中間変数＝暗号化で利用するシークレットキーp×暗号化で利用するもう一つのシークレットキーq
p、q：奇数
上記の如何なるシークレットキーも開示されないものであり、
前記第一モジュールおよび前記第二モジュールにおいて暗号化に非対称暗号化アルゴリズムを利用する場合、下式を利用し、
0006783877.tif 000008
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r、τ：乱数
xi ：ランダムに生成したi個の数、xi=qi×p+s×r
p：非対称アルゴリズムで利用されるシークレットキー、大奇数であり、qi≪q0，0≦i≦τ
pk=（x0，x1，…，xi，…，xτ）：非対称暗号化アルゴリズムで利用される公開鍵であり、
前記第四モジュールにおける復号化の操作式が次の通りであり、
（c mod p）mod s
ここで、cは前記第３暗号化テキストにおける各構成要素の値であることを特徴とする完全準同型暗号化の暗号化テキストクエリ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報安全分野、更に具体的に、完全準同型暗号化の暗号化テキストのクエリメソッド及びシステムに関する。
【背景技術】
【０００２】
現在、暗号化テキストクエリは広く全文検索の技術分野でキーワードクエリの検索結果を取得することに用いられている。
【０００３】
現在、広く用いられている暗号化テキストのクエリメソッドは主に対称暗号アルゴリズム及び非対称暗号アルゴリズムを用いている。対称暗号アルゴリズムで、シークレットキーが同じである場合、ブロック暗号アルゴリズムは同じ内容の暗号化された暗号化テキストが始終に同じであり、復号化不要でクエリされる内容の真偽を判断できるので、秘密情報の漏洩という課題があり、非対称暗号アルゴリズムにとって、クリアテキストデータが暗号化されると、その暗号化テキスト内容をクエリする場合、暗号化テキストの復号化を行ってクリアテキストの比較をしなければクエリ結果を取得できない。このようなクエリ過程にデータ漏洩のおそれがあるので、秘密情報の漏洩という課題がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は完全準同型暗号化の暗号化テキストのクエリメソッド及びシステムを提供し、従来の対称暗号アルゴリズムに基づく暗号化テキストのクエリメソッドにおける、同じシークレットキーで暗号化された暗号化テキストが始終に同じであり、復号化不要でクエリされる内容の真偽を判断できるので、秘密情報の漏洩があるという技術上の課題、及び非対称暗号アルゴリズムに基づく暗号化テキストのクエリメソッドにおける、クエリの過程にデータ漏洩のおそれがあるので、秘密情報の漏洩があるという技術上の課題を解決することを目的にする。
【課題を解決するための手段】
【０００５】
上記の目的に達成するために、本発明では下記のステップを含む完全準同型暗号化の暗号化テキストのクエリメソッドを提供する。
【０００６】
（1-1）任意データ型の第１クリアテキストを取得し、該第１クリアテキストから所定進数系の第２クリアテキストを取得する。ここで、前記第１クリアテキストのデータ型が前記所定進数系でない場合には、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換する。
（1-2）ステップ（1-1）で取得した前記所定進数系の前記第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、当該第１暗号化テキストを、クエリされる対象として記憶する。
【０００７】
（2-1）クエリ条件としての任意データ型の第３クリアテキストを受信し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得する。ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換する。
（2-2）ステップ（2-1）で取得した前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶する。
【０００８】
（３）ステップ（1-2）で取得したクエリされる対象である第１暗号化テキスト及びステップ（2-2）で取得したクエリする対象である第２暗号化テキストに対し、前記暗号化された各桁の値である構成要素ごとの加算を行い、、加算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得する。
【０００９】
（４）ステップ（３）で取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、前記所定進数系の前記第５クリアテキストから第６クリアテキストを取得し、ここで、該第５クリアテキストのデータ型が前記第３クリアテキストのデータ型と同じでない場合には、該第５クリアテキストのデータ型を前記第３クリアテキストのデータ型に転換して前記第６クリアテキストを取得し、該第６クリアテキストとステップ（2-1）で受信したクエリ条件としての前記第３クリアテキストとの比較を行い、二者が同じであると、クエリ結果が正確であること、即ち、クエリする対象がクエリされる対象にあることを示し、二者が同じでないと、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示す。
【００１０】
本発明では下記のステップを含む完全準同型暗号化の暗号化テキストのクエリメソッドも提供する。
【００１１】
（1-1）任意データ型の第１クリアテキストを取得し、該第１クリアテキストから所定進数系の第２クリアテキストを取得する。ここで、前記第１クリアテキストのデータ型が前記所定進数系でない場合には、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換する。
（1-2）ステップ（1-1）で取得した前記所定進数系の前記第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、当該第１暗号化テキストを、クエリされる対象として記憶する。
【００１２】
（2-1）クエリ条件としての任意データ型の第３クリアテキストを受信し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得する。ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換する、
（2-2）ステップ（2-1）で取得した前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶する。
【００１３】
（３）ステップ（1-2）で取得したクエリされる対象である第１暗号化テキストとステップ（2-2）で取得したクエリする対象である第２暗号化テキストに対し、前記暗号化された各桁の値である構成要素ごとの減算を行い、減算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得する。
【００１４】
（４）ステップ（３）で取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、当該第５クリアテキストがゼロであるかを判断し、Yesの場合、クエリ結果が正しいこと、即ち、クエリする対象がクエリされる対象にあることを示し、Noの場合、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示す。
【００１５】
削除
【００１６】
削除
【００１７】
削除
【００１８】
削除
【００１９】
削除
【００２０】
削除
【００２１】
望ましくは、ステップ（1-1）における、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換するステップが、文字区分の前記第１クリアテキストを文字コードに転換し、当該文字コードを前記所定進数系の前記第２クリアテキストに転換するステップを含むか、または、ステップ（2-1）における、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換するステップが、文字区分の前記第３クリアテキストを文字コードに転換し、当該文字コードを前記所定進数系の前記第４クリアテキストに転換するステップを含む。
【００２２】
望ましくは、暗号化計算について対称暗号化のアルゴリズムを利用する場合、具体的に下式を利用する。
【００２３】
c=(m+s×r+p×q) mod x0
【００２４】
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r：乱数
p：暗号化で利用するシークレットキー
x0：中間変数＝暗号化で利用するシークレットキーp×暗号化で利用するもう一つのシークレットキーq、
p、q：奇数
上記の如何なるシークレットキーも開示されないものである。
【００２５】
望ましくは、暗号化計算で非対称暗号化のアルゴリズムを利用する場合に具体的に下式を利用する。
【００２６】
0006783877.tif 000002
【００２７】
ここで、
c：第１暗号化テキストおよび第２暗号化テキストにおける各構成要素の値
m：第２クリアテキストおよび第４クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r及びτ：乱数
xi：ランダムに生成したi個の数、xi=qi×p+s×r
p：非対称アルゴリズムで利用されるシークレットキー、大奇数であり、且つqi≪q0，0≦i≦τ、非対称暗号化アルゴリズムで利用される公開鍵がpk=（x0，x1，…，xi，…，xτ）である。
【００２８】
望ましくは、シークレットキーpは生成方式がLWE、格子、またはGCDに基づき、スパース・サブセット合計に近似する方法である。
【００２９】
望ましくは、ステップ（３）は順にクエリされる対象である第１暗号化テキストからクエリする対象である第２暗号化テキストと同じ数量の構成要素を取り出し、クエリされる対象である第１暗号化テキストにおける構成要素数がクエリする対象である第２暗号化テキストの構成要素数以下となるまで、前記第１暗号化テキストから取り出された構成要素と前記第２暗号化テキストの構成要素とをそれぞれ加算し、加算結果を構成要素とする複数の第３暗号化テキストを、クエリ結果として取得する。
【００３０】
望ましくは、ステップ（４）における、前記第５クリアテキストのデータ型を前記第３クリアテキストのデータ型に転換して前記第６クリアテキストとするステップが、前記所定進数系の前記第５クリアテキストを対応する文字コードに転換し、当該文字コードを文字区分の前記第６クリアテキストに転換するステップを含む。
【００３１】
ステップ（３）で加算を行う場合、ステップ（４）における復号化の操作式が次の通りである。
【００３２】
（（c mod p）mod y）/2
【００３３】
ここで、cは前記第３暗号化テキストにおける各構成要素の値であり、y≧s×2-1，且つy≦p/2である。
【００３４】
ステップ（３）で減算を行う場合、ステップ（４）における復号化の操作式が次の通りである。
【００３５】
（c mod p）mod s
ここで、cは前記第３暗号化テキストにおける各構成要素の値である。
【００３６】
望ましくは、文字コードはコードASCIIまたはコードUnicodeである。
【００３７】
本発明では下記のモジュールを含む完全準同型暗号化の暗号化テキストクエリ・システムを提供する。
【００３８】
第一モジュール：任意データ型の第１クリアテキストを取得し、該第１クリアテキストから所定進数系の第２クリアテキストを取得し、ここで、前記第１クリアテキストのデータ型が前記所定進数系でない場合には、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換し、前記所定進数系の前記第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、当該第１暗号化テキストを、クエリされる対象として記憶することに用いられる。
【００３９】
第二モジュール：クエリ条件としての任意データ型の第３クリアテキストを受信し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得し、ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換し、前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶することに用いられる。
【００４０】
第三モジュール：第一モジュールが取得したクエリされる対象である第１暗号化テキスト及び第二モジュールが取得したクエリする対象である第２暗号化テキストに対し、前記暗号化された各桁の値である構成要素ごとの加算を行い、加算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得するようにすることに用いられる。
【００４１】
第四モジュール：第三モジュールが取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、前記所定進数系の前記第５クリアテキストから第６クリアテキストを取得し、ここで、該第５クリアテキストのデータ型が前記第３クリアテキストのデータ型と同じでない場合には、該第５クリアテキストのデータ型を前記第３クリアテキストのデータ型に転換して前記第６クリアテキストを取得し、該第６クリアテキストと第二モジュールにおけるクエリ条件としての前記第３クリアテキストとの比較を行い、二者が同じであると、クエリ結果が正確であること、即ち、クエリする対象がクエリされる対象にあることを示し、二者が同じでないと、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示すことに用いられる。
【００４２】
本発明では下記のモジュールを含むことを特徴とする完全準同型暗号化の暗号化テキストクエリ・システムを提供する。
【００４３】
第一モジュール：任意データ型の第１クリアテキストを取得し、該第１クリアテキストから所定進数系の第２クリアテキストを取得し、ここで、前記第１クリアテキストのデータ型が前記所定進数系でない場合には、前記第１クリアテキストを前記所定進数系の前記第２クリアテキストに転換し、前記所定進数系の前記第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、当該第１暗号化テキストを、クエリされる対象として記憶することに用いられる。
【００４４】
第二モジュール：クエリ条件としての任意データ型の第３クリアテキストを受信し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得し、ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換し、前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶することに用いられる。
【００４５】
第三モジュール：第一モジュールが取得したクエリされる対象である第１暗号化テキストと第二モジュールが取得したクエリする対象である第２暗号化テキストに対し、前記暗号化された各桁の値である構成要素ごとの減算を行い、減算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得することに用いられる。
【００４６】
第四モジュール：第三モジュールが取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、当該第５クリアテキストがゼロであるかを判断し、Yesの場合、クエリ結果が正しいこと、即ち、クエリする対象がクエリされる対象にあることを示し、Noの場合、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示すことに用いられる。
【発明の効果】
【００４７】
（１）本発明は従来の対称暗号アルゴリズムに基づく暗号化テキストのクエリメソッドにある秘密情報の漏洩という技術上の課題を解決できる。本発明によるクエリメソッドで同じシークレットキーを利用し、同じ内容暗号化による暗号化テキストの内容が違うので、情報漏洩という課題がない。
【００４８】
（２）本発明は従来の非対称暗号アルゴリズムに基づく暗号化テキストのクエリメソッドにおける、クエリの過程にデータ漏洩のおそれがあるという技術上の課題を解決できる。本発明によるクエリメソッドで所定進数系のクリアテキストの各桁の値を暗号化し、暗号化された各桁の値を構成要素とする暗号化テキストを構成し、暗号化された各桁の値である構成要素ごとに加算を行うだけでクエリ結果を取得でき、暗号化テキストがクエリの過程に始終に計算に参加するものであるので、データ漏洩という課題がない。
【００４９】
（３）本発明は暗号化テキストクエリの過程に所定進数系のクリアテキストの各桁の値を暗号化し、暗号化された各桁の値を構成要素とする暗号化テキストを構成し、暗号化された各桁の値である構成要素ごとに加算を行うだけでクエリの結果を取得できるので、クエリ効率が高い。
【００５０】
（４）本発明はクエリの結果の正確性に対する判断が復号化過程だけで達成できるので、操作が簡単である。
【００５１】
（５）本発明は暗号化テキストクエリの過程が完全に暗号化テキストの状態で行われるのでクエリの過程にいかなるデータ漏洩もなく、クエリ及び復号化の権限を持つユーザが暗号化テキストに関するクエリ結果に対する復号化操作を行うだけでクエリ結果のデータを調べることができるので、本発明の応用シーンが更に拡張し、そしてより一歩に暗号化テキストクエリ過程におけるデータの安全性を向上させるものである。
【図面の簡単な説明】
【００５２】
【図１】本発明による完全準同型暗号化の暗号化テキストのクエリメソッドのプロセスチャート。
【発明を実施するための形態】
【００５３】
本発明の目的、ソリューション及び長所を更にはっきりして理解できるように、次に図及び実施例を利用して本発明について更に詳細に説明する。いうまでもなく、ここで、具体的な実施例は本発明の説明のためのものだけであり、本発明を限定するものではない。また、下記の本発明各実施方式に関する技術上の特徴は衝突を構成しない限り相互に組み合わせることができる。
【００５４】
次に、先ず本発明で利用される用語について説明する。
【００５５】
進数系：進数系によるビットの数量のことである。例：2進数系は1ビット、8進数系は3ビット、16進数系は4ビット、32進数系は5ビット、64進数系は6ビット、128進数系は7ビットである。
【００５６】
進数系の値：現在の進数系状態にある値。例：2進数系の値は表現可能な領域が{0,1}、8進数系の値は表現可能な領域が{0,1,2,3,4,5,6,7}である。
【００５７】
本発明では完全準同型暗号化の暗号化テキストのクエリメソッドを利用する。先ず、完全準同型暗号化のアルゴリズムでクリアテキストデータをクエリされる対象として暗号化、記憶する。ユーザが暗号化テキストに記憶された内容をクエリする場合、クリアテキストのクエリ条件を入力するだけでシステムが完全準同型暗号化アルゴリズムでそのクリアテキスト条件を暗号化テキストに暗号化し、クエリする対象にし、クエリされる対象及びクエリする対象から、クエリ結果を取得する。そのクエリ結果はまだ暗号化テキストであり、クエリ及び復号化のクエリ結果に関する権限を持つユーザしか暗号化テキストに関するクエリ結果を調べることができない。システムは暗号化テキストクエリの「含む」(like)、「等しい」(=)及び「等しくない」 (<>)の操作機能に達成するものである。
【００５８】
本発明による完全準同型暗号化の暗号化テキストのクエリメソッドはデータ表示、シークレットキー生成、暗号化アルゴリズム、復号化アルゴリズム及び暗号化テキストクエリ（Ciphertext Query、「CQ」と略す）を含む。
【００５９】
データ表示：クリアテキストmの区分（Type）をT、Tの集合を{整数、実数、文字、年月日、ブール}などに表記する。既知クリアテキストms、その中、sはデータ進数系（System）、即ち2進数系、10進数系、16進数系、521進数系などであり、（T，ms）と表記される。例：s=2は2進数系を示す。普通、2進数系はBで表記され、クリアテキストmは2進数系mBを示し、（T，mB）で表記され、s=16は16進数系を示し、16進数系がHで表記され、クリアテキストmは16進数系mH を示し、（T，mH）で表記され、s=512は512進数系、クリアテキストmは512進数系m512を示し、（T，m512）で表記される。
【００６０】
シークレットキー生成（KeyGen）：大奇数pを選択し、x0=q0×p+s×rにより計算し、x0が奇数ではなければ再計算をしなければいけない。
【００６１】
ランダムにτ個の数を生成する：xi=qi×p+s×rにより計算する。その中、0≦i≦τ、qi≪q0、rが乱数である。
【００６２】
非対称アルゴリズム用公開鍵はpk=（x0，x1，…，xi，…，xτ）、シークレットキーはp、対称アルゴリズム用シークレットキーは（x0，p）である。はっきりして暗号化、復号化及び暗号化を表現するために、テキストクエリの過程に関する説明に業務用シークレットキーWkey（pk，p）を導入する。
【００６３】
暗号化アルゴリズム（Enc）：KeyGenから生成した業務用シークレットキーWkeyで任意の数mの暗号化を行う。mを2進数系に転換し、BでmBを表記し、B=（b1，b2，…，bi，…，bn），bi∈{0，1}，1≦i≦n，c=Enc（Wkey，B）。cは暗号化アルゴリズムfによるc=（c1，c2，…，ci，…，cn），
0006783877.tif 000003
である。その中、rは乱数である。
【００６４】
復号化アルゴリズム（Dec）：KeyGenから生成した業務用シークレットキーWkeyであり、入力された暗号化テキストデータcに対するものであり、b’=Dec（Wkey，ci）となる。b’は復号化アルゴリズムf’によるb’=（b1’，b2’，…，bi’，…，bn’）である。その中、b’= f’（Wkey，ci）=（（ci mod p）mod s × 2）/2，1≦i≦nであり、s進数系b’をクリアテキストmに転換する。
【００６５】
暗号化テキストクエリ（CQ）：KeyGenから生成した業務用シークレットキーWkeyであり、入力された暗号化テキストデータc1、c2に対するものである。その中、c1はクエリされる対象、c2はクエリする対象であり、c’=CQ（Wkey，c1 O c2）となり、c’は暗号化テキストクエリ機能関数f”によって取得したクエリ結果c’=（c1’，c2’，…，ci’，…，cn’）である。
【００６６】
ci’= f”（Wkey，c1i’O c2i’ ）
【００６７】
その中、1≦i≦n ， O∈{like，=，<>}
【００６８】
暗号化テキストクエリ機能関数f”は暗号化テキストのクエリの達成に用いられ、暗号化テキストのクエリ過程としてクエリされる対象とクエリする対象からクエリ結果が取得され、クエリ及び暗号化テキストに関するクエリ結果に関するデータに対する復号化に関する権限を持つユーザが暗号化テキストに関するクエリ結果に対する復号化を行い、クエリ条件が入力されたクリアテキストとの比較を行い、等しいである場合、「真」というクエリ結果を示し、暗号化テキストに関するクエリ結果に関するデータを調べることができるようになり、反対に、「偽」というクエリ結果を示し、暗号化テキストに関するクエリ結果に関するデータを調べることができない。
【００６９】
図1によると、本発明による完全準同型暗号化の暗号化テキストのクエリメソッドは下記のステップを含む。
【００７０】
（1-1）任意データ型の第１クリアテキストを取得し、第１クリアテキストから所定進数系の第２クリアテキストを取得する。ここで、第１クリアテキストのデータ型が前記所定進数系でない場合には、第１クリアテキストを前記所定進数系の第２クリアテキストに転換する。
（1-2）ステップ（1-1）で取得した前記所定進数系の第２クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、第１暗号化テキストを、クエリされる対象として記憶する。
【００７１】
暗号化計算について対称暗号化のアルゴリズムを利用する場合、具体的に下式を利用する。
【００７２】
c=(m+s×r+p×q) mod x0
【００７３】
その中、
c：第１暗号化テキストにおける各構成要素の値
m：第２クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r：乱数
p：暗号化で利用するシークレットキー
x0：中間変数＝暗号化で利用するシークレットキーp×暗号化で利用するもう一つのシークレットキーq
p、q：奇数
上記の如何なるシークレットキーも開示されないものである。
【００７４】
暗号化計算で非対称暗号化のアルゴリズムを利用する場合に具体的に下式を利用する。
【００７５】
0006783877.tif 000004
【００７６】
その中、
c：第１暗号化テキストおける各構成要素の値
m：第２クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値
r及びτ：乱数
xi ：ランダムに生成したi個の数、xi=qi×p+s×r
p：非対称アルゴリズムで利用されるシークレットキー、大奇数であり、且つqi≪q0，0≦i≦τである。
pk=（x0，x1，…，xi，…，xτ）：非対称暗号化アルゴリズムで利用される公開鍵。
【００７７】
シークレットキーpは生成方式がエラー付けの学習（Leaning with Error、「LWE」と略す）、格子（Lattice）、または近似最大公約数（Greatest Common Divisor「GCD」と略す）及びスパース・サブセット合計（Sparse Subset Sum Problem、「SSSP」と略す）に基づく方法である。
【００７８】
このステップに具体的に下記のサブステップを含む。
【００７９】
（1-1）任意データ型の第１クリアテキストを取得し、それを所定進数系の第２クリアテキストに転換する。
【００８０】
具体的に、所定進数系の第２クリアテキストに転換する過程として、当該文字区分の第１クリアテキストを文字コード（当該文字コードはASCIIコードでもUnicodeコードでもいい）、当該文字コードを所定進数系の第２クリアテキストに転換する。
【００８１】
例えば、文字区分の第１クリアテキストm=「abdabd」につて、当該文字区分の第１クリアテキストを情報交換用米国標準コード（American Standard Code for Information Interchange、「ASCIIコード」と略す）（即ち、a=97，b=98，d=100）に転換してから当該ASCIIコードを2進数系の第２クリアテキスト（即ち、a=97=(1100001)，b=98=(1100010)，d=100=(1100100)）に転換する。
【００８２】
（1-2）ステップ（1-1）で取得した所定進数系の第２クリアテキストの中の各桁の値に対する暗号化を行い、暗号化の結果を組合せて第１暗号化テキストを構成し、当該第１暗号化テキストをクエリされる対象として記憶する。
【００８３】
具体的に、このステップで下式で暗号化計算を行う。
【００８４】
c=（m+s×r+p×q）mod x0
【００８５】
その中、
c：第１暗号化テキストにおける各構成要素の値
m：第２クリアテキストにおける各桁の値
s：暗号化で利用する所定進数系の進数値（例：2進数系の場合、s=2、16進数系の場合、s=16），
r：乱数
p：暗号化で利用するシークレットキー
x0：中間変数＝暗号化で使用するシークレットキーp×暗号化で利用するもう一つのシークレットキーq（その中、pでもqでも奇数である）
【００８６】
上記の如何なるシークレットキーも開示されないものである。
【００８７】
次に2進数系s=2を例として説明する。
【００８８】
例えば、業務用シークレットキーp=111，q=11，x0=p×q=1221である場合、r=1にすると、上記のステップ（1-1）で例とする第１クリアテキストのaの2進数系の第２クリアテキストの1100001、第１クリアテキストのbの2進数系の第２クリアテキストの1100010、及び第１クリアテキストのdの2進数系の第２クリアテキストの1100100における各桁の値0及び1にとって、このステップの上式で計算してから下記の結果を取得できる。
【００８９】
数0の暗号化された暗号化テキスト＝113
数1の暗号化された暗号化テキスト＝114
【００９０】
よって、第１クリアテキストaの2進数系の第２クリアテキスト1100001が上式で計算されてから、クエリされる対象として記憶を行う第１暗号化テキストは下記の通りとなる。
Enc(a)=(114,114,113,113,113,113,114)
【００９１】
第１クリアテキストbの2進数系の第２クリアテキスト1100010は上式で計算されてからクエリされる対象として記憶を行う第１暗号化テキストは下記の通りとなる。
Enc(b)=(114,114,113,113,113,114,113)
【００９２】
第１クリアテキストdの2進数系の第２クリアテキスト1100100が上式で計算されてからクエリされる対象として記憶を行う第１暗号化テキストは下記の通りとなる。
Enc(d)=(114,114,113,113,114,113,113)
【００９３】
はっきりする表現を図るために、第１クリアテキストの１文字に対応する第１暗号化テキストの構成要素を[]で表現する。例えば、上記の例におけるクリアテキストm=‘abdabd’について、このステップの以降にそれによるクエリされる対象の第１暗号化テキストの構成要素が42件ある。
Enc(abdabd)=([114,114,113,113,113,113,114],[114,114,113,113,113,114,113],[114,114,113,113,114,113,113],[114,114,113,113,113,113,114],[114,114,113,113,113,114,113],[114,114,113,113,114,113,113])。
【００９４】
（2-1）クエリ条件としての任意データ型の第３クリアテキストを受信し、第３クリアテキストから前記所定進数系の第４クリアテキストを取得し、ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換する。
（2-2）ステップ（2-1）で取得した前記所定進数系の前記第４クリアテキストの各桁の値に対し、対称暗号化アルゴリズムまたは非対称暗号化アルゴリズムにより暗号化を行い、暗号化された各桁の値を構成要素とする第２暗号化テキストを構成し、当該第２暗号化テキストを、クエリする対象として記憶する。
【００９５】
このステップの非対称暗号化または対称暗号化過程は上記のステップ（1-2）におけるものと完全に同じであるので、ここでは省略する。
【００９６】
このステップに具体的に下記のサブステップを含む。
【００９７】
（2-1）クエリ条件としての任意データ型の第３クリアテキストを取得し、該第３クリアテキストから前記所定進数系の第４クリアテキストを取得し、ここで、前記第３クリアテキストのデータ型が前記所定進数系でない場合には、前記第３クリアテキストを前記所定進数系の前記第４クリアテキストに転換する。
【００９８】
このステップは上記のステップ（1-1）の達成方式と完全に同じである。
【００９９】
例えば、文字区分の第３クリアテキストm’=‘da’について文字区分の第３クリアテキストをASCIIコード（即ちd=100，a=97）に転換してから、当該ASCIIコードを2進数系の第４クリアテキスト（即ち、d=100=(1100100)，a=97=(1100001)）に転換する。
【０１００】
（2-2）ステップ（2-1）で取得した２進数系の第４クリアテキストにおける各桁の値に対する暗号化を行い、暗号化の結果を組合せて第２暗号化テキストを構成し、当該第２暗号化テキストをクエリする対象として記憶する。
【０１０１】
このステップは上記のステップ（1-2）の達成方式と完全に同じである。
【０１０２】
上記の示例におけるクリアテキストm’=‘da’について、このステップの以降にそれによるクエリする対象は次の通りである。Enc(da)=([114,114,113,113,114,113,113],[114,114,113,113,113,113,114])
【０１０３】
（３）ステップ（1-2）で取得したクエリされる対象である第１暗号化テキスト及びステップ（2-2）で取得したクエリする対象である第２暗号化テキストに対し、暗号化された各桁の値である構成要素ごとの加算を行い、加算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得する。
【０１０４】
具体的に、このステップは次の通りである。
【０１０５】
順にクエリされる対象である第１暗号化テキストからクエリする対象である第２暗号化テキストと同じ数量の構成要素を取り出し、クエリされる対象である第１暗号化テキストにおける構成要素数がクエリする対象である第２暗号化テキストの構成要素数以下となるまで、前記第１暗号化テキストから取り出された構成要素と前記第２暗号化テキストの構成要素とをそれぞれ加算し、加算結果を構成要素とする複数の第３暗号化テキストを、クエリ結果として取得する。
【０１０６】
その中、暗号化テキストに関するクエリ結果のサイクル回数＝第１暗号化テキストの構成要素数-第２暗号化テキストの構成要素数+1
上記の例にとって、このステップはクエリされる対象の
Enc(abdabd)=([114,114,113,113,113,113,114],[114,114,113,113,113,114,113],[114,114,113,113,114,113,113],[114,114,113,113,113,113,114],[114,114,113,113,113,114,113],[114,114,113,113,114,113,113])からクエリする対象の
Enc(da)=([114,114,113,113,114,113,113],[114,114,113,113,113,113,114])と同じ数の構成要素、即ち
[114,114,113,113,113,113,114],[114,114,113,113,113,114,113]を取り出し、それとクエリする対象の構成要素とをそれぞれ加算してから、クエリされる対象Enc(abdabd)における対応長さの次の構成要素の組、即ち[114,113,113,113,113,114,114],[114,113,113,113,114,113,114]を取り出す。最後に、クエリされる対象から取り出される構成要素の組が[114,114,113,113,113,114,113],[114,114,113,113,114,113,113]となるまで上記の操作を繰り返す。
【０１０７】
例えば、クエリに(like)機能を含むとはクエリ条件の暗号化テキストであるクエリする対象Enc(da)が暗号化テキストとして記憶されたクエリされる対象Enc(abdabd)に含まれるかということである。クエリ条件の2文字の転換による第２暗号化テキストの構成要素が14件あるので、毎度にクエリされる対象である第１暗号化テキストから第２暗号化テキストの構成要素数と同じ14件を取ってクエリする対象の暗号化テキストの14個の構成要素との構成要素ごとの加算を行って暗号化テキストに関するクエリ結果として第３暗号化テキストを取得でき、「暗号化テキストに関するクエリ結果数=クエリされる対象の第１暗号化テキストの構成要素数-クエリする対象の第２暗号化テキストの構成要素数+1=42-14+1=29」である。即ち、この例の暗号化テキストに関するクエリ結果である第３暗号化テキストが計29組ある。次に暗号化テキストに関するクエリ結果の若干組によりその正確性について説明する。
【０１０８】
第1組の暗号化テキストに関するクエリ結果：
クエリされる対象：[114,114,113,113,113,113,114],[114,114,113,113,113,114,113]
クエリする対象：[114,114,113,113,114,113,113],[114,114,113,113,113,113,114]
暗号化テキストに関するクエリ結果：[228,228,226,226,227,226,227],[228,228,226,226,226,227,227]
【０１０９】
第2組の暗号化テキストに関するクエリ結果：
クエリされる対象：[114,113,113,113,113,114,114],[114,113,113,113,114,113,114]
クエリする対象：[114,114,113,113,114,113,113],[114,114,113,113,113,113,114]
暗号化テキストに関するクエリ結果：[228,227,226,226,227,227,227],[228,227,226,226,227,226,228]
【０１１０】
第3組の暗号化テキストに関するクエリ結果：
クエリされる対象：[113,113,113,113,114,114,114],[113,113,113,114,113,114,114]
クエリする対象：[114,114,113,113,114,113,113],[114,114,113,113,113,113,114]
暗号化テキストに関するクエリ結果：[227,227,226,226,228,227,227],[227,227,226,227,226,227,228]
……
【０１１１】
第15組の暗号化テキストに関するクエリ結果：
クエリされる対象：[114,114,113,113,114,113,113],[114,114,113,113,113,113,114]
クエリする対象：[114,114,113,113,114,113,113],[114,114,113,113,113,113,114]
暗号化テキストに関するクエリ結果：[228,228,226,226,228,226,226],[228,228,226,226,226,226,228]
……
【０１１２】
第29組の暗号化テキストに関するクエリ結果：
クエリされる対象：[114,114,113,113,113,114,113],[114,114,113,113,114,113,113]
クエリする対象：[114,114,113,113,114,113,113],[114,114,113,113,113,113,114]
暗号化テキストに関するクエリ結果：
[228,228,226,226,227,227,226],[228,228,226,226,227,226,227]；
【０１１３】
注意：交換可能な実施方式として、このステップにおける構成要素ごとの加算は構成要素ごとの減算に交換されてもよく、取得した差の値を暗号化テキストに関するクエリ結果である第３暗号化テキストにすること。
【０１１４】
（４）ステップ（３）で取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、前記所定進数系の第５クリアテキストから第６クリアテキストを取得し、第６クリアテキストとステップ（2-1）で受信したクエリ条件としての第３クリアテキストとの比較を行い、二者が同じであると、クエリ結果が正確であること、即ち、クエリする対象がクエリされる対象にあることを示し、二者が同じでないと、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示す。
【０１１５】
具体的に、このステップとして、下式によりステップ（３）で取得した複数の第３暗号化テキストの各構成要素に対する復号化を行って、所定進数系の第５クリアテキストを取得する。該所定進数系の第５クリアテキストに転換してから対応する文字コード（この例でASCIIコードである）に転換し、それぞれそれによる文字コードをクエリ条件としての第３クリアテキストとの比較を行い、比較の結果が同じである場合、対応するクエリ結果が真であることを示し（即ちクエリする対象がクエリされる対象にある）、同じでない場合、対応するクエリ結果が偽であることを示す（即ちクエリする対象がクエリされる対象にない）。
【０１１６】
（（c mod p）mod y）/2
【０１１７】
その中、y≧s×2-1，且つy≦p/2
【０１１８】
この例で、y=s×2=4となり、cは第３暗号化テキストにおける各構成要素の値である。
【０１１９】
注意：上記のステップ（３）で減算を行う場合、このステップ（４）が下記の通りに交換されること。
【０１２０】
（４’）ステップ（３）で取得したクエリ結果である前記第３暗号化テキストの各構成要素に対して復号化して前記所定進数系の第５クリアテキストを取得し、当該第５クリアテキストがゼロであるかを判断し、Yesの場合、クエリ結果が正しいこと、即ち、クエリする対象がクエリされる対象にあることを示し、Noの場合、クエリ結果が違うこと、即ち、クエリする対象がクエリされる対象にないことを示す。この場合、第３暗号化テキストに対する復号化の操作式が次の通りである。
【０１２１】
（c mod p）mod s
【０１２２】
言うまでもなく、本発明は上式に限られるものではなく、当該式のどの簡単な変形でも簡単な変換でも本発明の領域にある。
【０１２３】
上記の示例で、第1組の暗号化テキストに関するクエリ結果である第３暗号化テキストに対して、cが[228,228,226,226,227,226,227],[228,228,226,226,226,227,227]における構成要素の値である。
【０１２４】
その中、c=228にとって（下記に2進数系のクリアテキストを例にする）、復号化の結果=((228 mod 111) mod 4)/2=1となる。
【０１２５】
その中、c=226にとって、復号化の結果=((226 mod 111) mod 4)/2=0となる。
【０１２６】
その中、c=227にとって、復号化の結果=((227 mod 111) mod 4)/2=1となる（その結果が0.5であるが、丸めて1となる）。
【０１２７】
第1組の暗号化テキストに関するクエリ結果である第３暗号化テキストに対して、復号の結果は、２進数系の第５クリアテキストである（1100101,1100011）となる。
【０１２８】
次に、それについて10進数系の転換を行うと、「101,99」となり、続いてそれについてASCII転換を行うと、対応するASCIIコードが第６クリアテキストであるecとなる。
【０１２９】
第1組の暗号化テキストに関するクエリ結果：
Dec([228,228,226,226,227,226,227],[228,228,226,226,226,227,227])
（４）の復号化式で暗号化テキストに関するクエリ結果に対する復号化を行って下記のクリアテキストを取得する。
m=([1100101],[1100011])=([101],[99])=‘ec’
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=‘ec’と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
【０１３０】
第2組の暗号化テキストに関するクエリ結果
Dec([228,227,226,226,227,227,227],[228,227,226,226,227,226,228])
（４）の復号化式で暗号化テキストに関するクエリ結果に対する復号化を行って下記のクリアテキストを取得する。
m=([1100111],[1100101])=([103],[101])=(ge)
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=‘ge’と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」となる。
【０１３１】
第3組の暗号化テキストに関するクエリ結果：
Dec([227,227,226,226,228,227,227],[227,227,226,227,226,227,228])
m=([1100111],[1101011])=([103],[107])=(gk)
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=‘gk’と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
……
【０１３２】
第15組の暗号化テキストに関するクエリ結果：
Dec([228,228,226,226,228,226,226],[228,228,226,226,226,226,228])
m=[1100100],[1100001]=([100],[97])=(da)
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=‘da’と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「真」である。
……
【０１３３】
第29組の暗号化テキストに関するクエリ結果
Dec([228,228,226,226,227,227,226],[228,228,226,226,227,226,227])
（４）の復号化式で暗号化テキストに関するクエリ結果に対する復号化を行って下記のクリアテキストを取得する。
m=([1100110],[1100101])=([102],[101])=(fe)
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=‘fe’と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
【０１３４】
上記の例によると、示されていない例はクエリ結果が共に「偽」である。
【０１３５】
「等しい」(=)クエリ機能で取得した暗号化テキストに関するクエリ結果は次の通りである。暗号化テキストに関するクエリ結果に対する復号化を行ってから復号化の結果としての第６クリアテキストと（2-1）のクエリ条件の第３クリアテキストとの比較を行い、結果が等しいである場合、クエリ結果が「真」、等しいでない場合、「偽」である。
【０１３６】
「等しい」機能の暗号化テキストに関するクエリ結果：
Dec([228,228,226,226,227,226,227],[228,228,226,226,226,227,227], [114,114,113,113,114,113,113],[114,114,113,113,113,113,114],[114,114,113,113,113,114,113],[114,114,113,113,114,113,113])
m=([1100101],[1100011],[1100100],[1100001],[1100010],[1100100])=(ecdabd)
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=‘ecdabd’と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
【０１３７】
「等しくない」(<>)クエリ機能で取得した暗号化テキストに関するクエリ結果が「等しい」機能による暗号化テキストに関するクエリの結果と同じであり、クエリ結果が「真」である。
【０１３８】
次に512進数系（即ちs=512）を例にして説明する。
【０１３９】
（１）任意データ型の第１クリアテキストを取得し、該第１クリアテキストから512進数系の第２クリアテキストを取得し、512進数系の前記第２クリアテキストの各桁の値に対し、暗号化を行い、暗号化された各桁の値を構成要素とする第１暗号化テキストを構成し、第１暗号化テキストを、クエリされる対象として記憶する。
【０１４０】
例えば、業務用シークレットキーp=11111，q=11，x0=p×q=122221である場合、r=1にすると、第１クリアテキストm=‘abdabd’に対して、512進数系の第１クリアテキストの文字aのASCIIコードの値が97、bが98、dが100に等しく、本発明の上式で計算されてから下記の結果を取得できる。
【０１４１】
文字aの暗号化された暗号化テキスト＝11720
文字bの暗号化された暗号化テキスト＝11721
文字dの暗号化された暗号化テキスト＝11723
【０１４２】
よって、クエリされる対象である第１暗号化テキストの構成要素が6件ある。
Enc(abdabd)=(11720,11721,11723,11720,11721,11723)
【０１４３】
（２）クエリ条件を入力する。
【０１４４】
（2-1）クエリ条件の第３クリアテキストを512進数系の第４クリアテキストに転換する。例えば、文字区分の第３クリアテキストm=‘da’に対して、512進数系の第３クリアテキストの文字dのASCIIコードの値が100、aが97である。
【０１４５】
（2-2）完全準同型暗号化アルゴリズムで（2-1）で取得した第４クリアテキストの各桁の値に対する暗号化を行い、暗号化の結果を組合せて第２暗号化テキストを構成し、クエリする対象とする。暗号化計算が（1-2）における式と同じであり、即ち、クエリする対象である第２暗号化テキストの構成要素が2件ある。
Enc(da)=(11723,11720)
【０１４６】
（３）クエリされる対象である第１暗号化テキストとクエリする対象である第２暗号化テキストに対し、暗号化された各桁の値である構成要素ごとの加算を行い、加算結果を構成要素とする第３暗号化テキストを、クエリ結果として取得する。
【０１４７】
例えば、クエリに(like)機能を含むとはクエリ条件の暗号化テキストであるクエリする対象Enc(da)が暗号化テキストとして記憶されたクエリされる対象Enc(abdabd)に含まれるかということである。クエリ条件の2文字が第２暗号化テキストの2件の構成要素に転換されたので、毎度にクエリされる対象である第１暗号化テキストから第２暗号化テキストの構成要素数と同じ2件を取ってクエリする対象の暗号化テキストの2件の構成要素との構成要素ごとの加算を行って暗号化テキストに関するクエリ結果として第３暗号化テキストを取得でき、暗号化テキストに関するクエリ結果数=クエリされる対象の第１暗号化テキストの構成要素数-クエリする対象の第２暗号化テキストの構成要素数+1=6-2+1=5となり、即ち、この例で暗号化テキストに関するクエリ結果は、下記の計5組がある。
【０１４８】
第1組の暗号化テキストに関するクエリ結果：
クエリされる対象：(11720,11721)
クエリする対象：  (11723,11720)
暗号化テキストに関するクエリ結果：(23443,23441)
【０１４９】
第2組の暗号化テキストに関するクエリ結果：
クエリされる対象：(11721,11723)
クエリする対象：  (11723,11720)
暗号化テキストに関するクエリ結果：(23444,23443)
【０１５０】
第3組の暗号化テキストに関するクエリ結果：
クエリされる対象：(11723,11720)
クエリする対象：  (11723,11720)
暗号化テキストに関するクエリ結果：(23446,23440)
【０１５１】
第4組の暗号化テキストに関するクエリ結果：
クエリされる対象：(11720,11721)
クエリする対象：  (11723,11720)
暗号化テキストに関するクエリ結果：(23443,23441)
【０１５２】
第5組の暗号化テキストに関するクエリ結果：
クエリされる対象：(11721,11723)
クエリする対象：  (11723,11720)
暗号化テキストに関するクエリ結果：(23444,23443)
【０１５３】
クエリの「等しい」(=)機能とはクエリ条件の暗号化テキストのクエリする対象Enc(da)が暗号化テキストとして記憶されるクエリされる対象Enc(abdabd)に等しいかということである。クエリ条件が2文字であり、第２暗号化テキストの構成要素が2件あるが、第１暗号化テキストの記憶対象Enc(abdabd)の構成要素が6件あり、構成要素ごとの加算を行い、加算結果を構成要素とする第３暗号化テキストを、クエリ結果として、1組、取得できる。この例で、暗号化テキストに関するクエリ結果は次の通りである。
【０１５４】
クエリされる対象：(11720,11721,11723,11720,11721,11723)
クエリする対象： (11723,11720)
暗号化テキストに関するクエリ結果：(23443,23441,11723,11720,11721,11723)
【０１５５】
クエリ「等しくない」(<>)機能とはクエリ条件の暗号化テキストであるクエリする対象Enc(da)が暗号化テキストとして記憶されるクエリされる対象Enc(abdabd)に等しくないかということである。この例で、暗号化テキストに関するクエリ結果が「等しい」機能のクエリ結果と同じである。「等しい」と「等しくない」の機能の違いについて次のステップ（４）で更に説明する。
【０１５６】
（４）クエリ及びクエリ結果に対する復号化に関する権限を持つユーザしか暗号化テキストに関するクエリ結果に対する復号化を行うことができない。即ち、復号化された暗号化テキストに関するクエリ結果としての第６クリアテキストと（2-1）のクエリ条件の第３クリアテキストとの比較を行い、等しいである場合、クエリ結果が「真」、等しいでない場合、「偽」である。例えば、
「含む」(like) クエリ機能で取得した暗号化テキストに関するクエリ結果は次の通りである。暗号化テキストに関するクエリ結果に対する復号化を行ってから復号化の結果である第６クリアテキストと（2-1）のクエリ条件の第３クリアテキストとの比較を行い、結果が等しいである場合、クエリ結果が「真」、等しいでない場合、「偽」である。
【０１５７】
第1組の暗号化テキストに関するクエリ結果：
Dec(23443,23441)
（４）の復号化式で暗号化テキストに関するクエリ結果に対する復号化を行って下記のクリアテキストを取得する。
m=(99,98)=‘cb’
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=「cb」と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
【０１５８】
第2組の暗号化テキストに関するクエリ結果：
Dec(23444,23443)
（４）の復号化式で暗号化テキストに関するクエリ結果に対する復号化を行って下記のクリアテキストを取得する。
m=(99,99)=‘cc’
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=「cc」と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
【０１５９】
第3組の暗号化テキストに関するクエリ結果：
Dec(23446,23440)
m=(100,97)=‘da’
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=‘da’と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「真」である。
【０１６０】
第4組の暗号化テキストに関するクエリ結果：
Dec(23443,23441)
（４）の復号化式で暗号化テキストに関するクエリ結果に対する復号化を行い、下記のクリアテキストを取得する。
m=(99,98)=「cb」
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=「cb」と（2-1）クエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
【０１６１】
第5組の暗号化テキストに関するクエリ結果：
Dec(23444,23443)
（４）の復号化式で暗号化テキストに関するクエリ結果に対する復号化を行って下記のクリアテキストを取得する。
m=(99,99)=‘cc’
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=「cc」と（2-1）クエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
【０１６２】
「等しい」(=)クエリ機能で取得した暗号化テキストに関するクエリ結果は次の通りである。暗号化テキストに関するクエリ結果に対する復号化を行ってから復号化の結果としての第６クリアテキストと（2-1）のクエリ条件の第３クリアテキストとの比較を行い、結果が等しいである場合、クエリ結果が「真」、等しいでない場合、「偽」である。
【０１６３】
「等しい」機能の暗号化テキストに関するクエリ結果：
Dec(23443,23441,11723,11720,11721,11723)
m=(99,98,100,97,98,100)=(cbdabd)
暗号化テキストに関するクエリ結果復号化による第６クリアテキストm=「cbdabd」と（2-1）のクエリ条件の第３クリアテキストm=‘da’との比較を行い、クエリ結果が「偽」である。
【０１６４】
「等しくない」(<>)クエリ機能で取得した暗号化テキストに関するクエリ結果が「等しい」機能の暗号化テキストに関するクエリの結果と同じであり、クエリ結果が「真」である。
【０１６５】
上記のステップに記載されたすべての例にとって、上記のステップ（4）で「含む」(like)、「等しい」(=)、「等しくない」(<>)の復号化過程及び結果について詳細に説明したので、このステップで省略する。
【０１６６】
本分野の技術者が容易に理解できるように、上記が本発明の望ましい実施例だけであり、本発明を制限するものではなく、本発明の実質及び原則によるどの改訂、同一交換または改善などの全ては本発明の保護範囲にある。
【図１】
0006783877.tif 000009