(57)【特許請求の範囲】
【請求項１】
暗号化ＤＢ（データベース）に挿入するデータと、暗号化データ生成鍵と、暗号化検索キー生成鍵と、を入力として受け取るデータ入力手段と、
前記暗号化データ生成鍵を用いて、前記データを暗号化して暗号化データを生成する暗号化手段と、
範囲検索用の検索キーを生成する検索キー生成手段と、
前記暗号化検索キー生成鍵を用いて、前記検索キーを暗号化して暗号化検索キーを生成する暗号化検索キー生成手段と、
前記暗号化検索キーを用いて、前記暗号化データを暗号化する二重暗号化手段と
を具備し、
前記検索キー生成手段は、前記データの値の大きさに依らず所定の数の範囲検索用の検索キーを生成する
範囲検索システム。
【請求項２】
請求項１に記載の範囲検索システムであって、
前記検索キー生成手段は、１つのデータに対して、範囲の幅が狭い場合及び広い場合のそれぞれに対応する範囲検索用の検索キーを生成する
範囲検索システム。
【請求項３】
請求項１又は２に記載の範囲検索システムであって、
前記検索キー生成手段は、１つのデータに対して、割り当てられる範囲の幅がそれぞれベキ長の関係になる形式で、範囲検索用の検索キーを生成する
範囲検索システム。
【請求項４】
請求項１乃至３のいずれか一項に記載の範囲検索システムであって、
前記暗号化ＤＢへ問い合わせたい範囲の情報を入力として受け取るデータ問合せ手段と、
前記範囲に対応する検索キーを生成する範囲検索キー生成手段と
を更に具備し、
前記データ問合せ手段は、前記範囲に対応する検索キーによる問合せを生成して、前記暗号化ＤＢへ問い合わせる
範囲検索システム。
【請求項５】
コンピュータを用いて実施される暗号化ＤＢ（データベース）の範囲検索方法であって、
前記暗号化ＤＢに挿入するデータと、暗号化データ生成鍵と、暗号化検索キー生成鍵と、を入力として受け取り、
前記暗号化データ生成鍵を用いて、前記データを暗号化して暗号化データを生成し、
前記データの値の大きさに依らず所定の数の範囲検索用の検索キーを生成し、
前記暗号化検索キー生成鍵を用いて、前記検索キーを暗号化して暗号化検索キーを生成し、
前記暗号化検索キーを用いて、前記暗号化データを暗号化する
範囲検索方法。
【請求項６】
請求項５に記載の範囲検索方法であって、
前記範囲検索用の検索キーを生成する際、１つのデータに対して、範囲の幅が狭い場合及び広い場合のそれぞれに対応する範囲検索用の検索キーを生成する
範囲検索方法。
【請求項７】
請求項５又は６に記載の範囲検索方法であって、
前記範囲検索用の検索キーを生成する際、１つのデータに対して、割り当てられる範囲の幅がそれぞれベキ長の関係になる形式で、範囲検索用の検索キーを生成する
範囲検索方法。
【請求項８】
請求項５乃至７のいずれか一項に記載の範囲検索方法であって、
前記暗号化ＤＢへ問い合わせたい範囲の情報を入力として受け取り、
前記範囲に対応する検索キーを生成し、
前記範囲に対応する検索キーによる問合せを生成して、前記暗号化ＤＢへ問い合わせる
範囲検索方法。
【請求項９】
暗号化ＤＢ（データベース）に挿入するデータと、暗号化データ生成鍵と、暗号化検索キー生成鍵と、を入力として受け取るステップと、
前記暗号化データ生成鍵を用いて、前記データを暗号化して暗号化データを生成するステップと、
前記データの値の大きさに依らず所定の数の範囲検索用の検索キーを生成するステップと、
前記暗号化検索キー生成鍵を用いて、前記検索キーを暗号化して暗号化検索キーを生成するステップと、
前記暗号化検索キーを用いて、前記暗号化データを暗号化するステップと
をコンピュータに実行させるための範囲検索用プログラムを格納した
記憶媒体。
【請求項１０】
請求項９に記載の記憶媒体であって、
前記範囲検索用の検索キーを生成する際、１つのデータに対して、範囲の幅が狭い場合及び広い場合のそれぞれに対応する範囲検索用の検索キーを生成するステップ
を更にコンピュータに実行させるための範囲検索用プログラムを格納した
記憶媒体。
【請求項１１】
請求項９又は１０に記載の記憶媒体であって、
前記範囲検索用の検索キーを生成する際、１つのデータに対して、割り当てられる範囲の幅がそれぞれベキ長の関係になる形式で、範囲検索用の検索キーを生成するステップ
を更にコンピュータに実行させるための範囲検索用プログラムを格納した
記憶媒体。
【請求項１２】
請求項９乃至１１のいずれか一項に記載の記憶媒体であって、
前記暗号化ＤＢへ問い合わせたい範囲の情報を入力として受け取るステップと、
前記範囲に対応する検索キーを生成するステップと、
前記範囲に対応する検索キーによる問合せを生成して、前記暗号化ＤＢへ問い合わせるステップと
を更にコンピュータに実行させるための範囲検索用プログラムを格納した
記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、範囲検索システムに関し、特に暗号化ＤＢ（データベース）における範囲検索システムに関する。
【背景技術】
【０００２】
暗号化ＤＢ（データベース）とは、データを暗号化して保存し、暗号化ＤＢの管理者に、どのようなデータが格納されているか、どのようなデータの検索が行われたかを知られることなく実現する技術である。一方で、範囲検索とは、ある範囲内にあるデータをＤＢから取得する問い合わせ（ｑｕｅｒｙ）を行う検索である。【０００３】
従来の暗号化ＤＢにおける検索システムの一例が、非特許文献１、非特許文献２に記載されている。【０００４】
＜非特許文献１＞
非特許文献１は、安全な完全一致検索を提供する暗号化ＤＢシステムを示している。完全一致検索とは、問い合わせた値と完全に一致するデータだけをＤＢから取得する問い合わせを行う検索である。【０００５】
非特許文献１におけるデータ処理手順はおおむね、データ挿入とデータ検索の２つの手順に分けられる。以下に、それぞれの手順について述べる。【０００６】
［データ挿入手順］
まず、暗号化データ生成鍵でデータを暗号化し、暗号化データを生成する。次に、暗号化検索キー生成鍵を用いて、データから一方向関数等で暗号化検索キーを生成する。そして、暗号化検索キーで暗号化データを暗号化し、二重暗号化データを生成する。この暗号化データと二重暗号化データを関連付けて、暗号化ＤＢへ格納する。【０００７】
［データ検索手順］
取り出したい値を暗号化検索キー生成鍵を用いて暗号化し、暗号化検索キーを生成する。この暗号化検索キーを暗号化ＤＢへ渡す。暗号化ＤＢは、暗号化検索キーで、暗号化ＤＢ中に格納された各暗号化データを暗号化し、その結果が、その暗号化データに関連付けられた二重暗号化データと一致するかをチェックする。そして、一致した場合、その暗号化データを結果として返す。【０００８】
このようにして、非特許文献１の暗号化ＤＢには、元のデータ、問い合わせは全て暗号化されたものが渡され、かつ、一致しなかったものの同値性は不明なままにしておけるため、安全な完全一致検索を実現している。【０００９】
しかし、範囲検索をしたい場合、その範囲に含まれる全てのデータの完全一致検索をする必要がある。例えば、１以上１０以下の範囲にあるデータを範囲検索したい場合、値が１、２、…、１０に関する完全一致検索をする必要がある。このため、範囲が広くなる場合、検索コストが膨大になってしまう課題がある。【００１０】
＜非特許文献２＞
非特許文献２は、非特許文献１を拡張して、範囲検索を提供する暗号化ＤＢシステムである。非特許文献２では、データから暗号化検索キーを生成する際、データから複数個の範囲検索用の検索キーを生成し、これらの検索キーそれぞれから暗号化検索キーを生成する。【００１１】
以下に、非特許文献２における検索キーの生成方法及び範囲検索の方法について、具体例を用いて説明する。【００１２】
［検索キーの生成方法］
まず、データの取り得る範囲（値域）を適当な数ＮでＮ等分してＮ個のブロックに分割する。ここでは、小さいほうからブロック１、ブロック２、…、ブロックＮとし、各ブロックのインデックスキーが、キー１、キー２、…、キーＮとする。あるデータがブロックＫに含まれる場合、そのデータには、キー１、キー２、…、キーＫがそのデータの検索キーとして割り当てられる。つまり、このデータにはＫ個の二重暗号化データが関連付けられることになる。例えば、データの値域が１以上８以下とし、４等分した場合、図１のように４つのブロックが構成され、それぞれ、ｋ１，ｋ２，ｋ３，ｋ４の検索キーと関連付けられる。そして、値１に関しては、検索キーとしてｋ１が割り当てられ、値５に関しては、検索キーとしてｋ１，ｋ２，ｋ３が割り当てられる。【００１３】
［範囲検索の方法］
データの値がＭ以上の範囲に含まれるものを検索したい場合、Ｍが前記のどのブロックに含まれるかをチェックする。そして、そのブロックがブロックＭであった場合、その検索キーｋ３から暗号化検索キー生成鍵を生成し、暗号化検索キーとする。暗号化ＤＢは、暗号化検索キーを鍵に各暗号化データを暗号化し、その結果と一致する二重暗号化データを持っている暗号化データを返す。逆に、Ｍ未満の範囲に含まれるものを検索したい場合、その結果と一致する二重暗号化データを持っていない暗号化データを返す。また、Ａ以上Ｂ未満の範囲検索はこれらの２つの検索結果のＡＮＤをとることで実現している。【００１４】
図１の例で挙げると、値５以上を検索したい場合は、検索キーｋ３を基に作られる二重暗号化データを含むものを問合せ、値５未満を検索したい場合は、検索キーｋ３を基に作られる二重暗号化データを含まないものを問い合わせる。つまり、非特許文献２では、あるデータには、そのデータより小さいデータが持ち得る全ての検索キーを持つことで範囲検索を実現している。【００１５】
しかし、この方法には、安全性に問題がある。その理由は、値の大きさに比例して検索キーが関連付けられるため、割り当てられた検索キーの数を数えることで、暗号化されたデータの元の値が推測できるからである。【００１６】
例えば、図１の極端な例として、４分割でなく８分割した場合、検索キーの数がその値となる。また、この方法には、データ挿入コストの問題がある。その理由は、値域の幅が広くなり、分割数Ｎを増やすと、平均的に１つのデータあたり検索キーをＮ／２割り当てられるため、二重暗号化データを生成する数が増えてしまうからである。一方で、分割数Ｎを小さく抑えると、非常に粗い範囲検索しかできなくなる。【００１７】
従来技術では、データ検索コストへ転化することでデータ挿入コストを抑える改良手法も提案しているが、依然、前記の安全性の問題を解決していない。
【先行技術文献】
【非特許文献】
【００１８】
【非特許文献１】「Ｐｒｉｖａｃｙ−Ｐｒｅｓｅｒｖｉｎｇ  Ｑｕｅｒｙ  ｏｎ  Ｅｎｃｒｙｐｔｅｄ  Ｄａｔａ」  Ｚｈｉｑｉａｎｇ  Ｙａｎｇ，  Ｓｈｅｎｇ  Ｚｈｏｎｇ，  Ｒｅｂｅｃｃａ  Ｎ．  Ｗｒｉｇｈｔ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １１ｔｈ  Ｅｕｒｏｐｅａｎ  Ｓｙｍｏｓｉｕｍ  Ｏｎ  Ｒｅｓｅａｒｃｈ  Ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｅｃｕｒｉｔｙ（Ｅｓｏｒｉｃｓ）ＬＮＣＳ４１８９，  ｐｐ．４７９−４９５，  ２００６．＜ｈｔｔｐ：／／ｗｗｗ．ｃｓ．ｒｕｔｇｅｒｓ．ｅｄｕ／〜ｒｅｂｅｃｃａ．ｗｒｉｇｈｔ／Ｐｕｂｌｉｃａｔｉｏｎｓ／ｅｓｏｒｉｃｓ０６．ｐｄｆ＞
【非特許文献２】「データベースアウトソーシングにおけるプライバシー保護に考慮した範囲検索法」  新井裕子、渡辺知恵美  第１９回データ工学ワークショップ（ＤＥＷＳ２００８）＜ｈｔｔｐ：／／ｗｗｗ．ｉｅｉｃｅ．ｏｒｇ／〜ｄｅ／ＤＥＷＳ／ＤＥＷＳ２００８／ｐｒｏｃｅｅｄｉｎｇｓ／ｆｉｌｅｓ／ｃ１／ｃ１−１．ｐｄｆ＞
【発明の概要】
【００１９】
従来技術における第１の問題点は、暗号化されたデータの値が容易に推測可能であるためである。その理由は、値の大きさと生成される検索キーの数に相関があるため、二重暗号化データの数を数えることで暗号化された値の内容を推測可能にしてしまうためである。
【００２０】
従来技術における第２の問題点は、データ挿入のコストが大きいということである。その理由は、データの値域が広い、それなりの精度がある範囲検索を実現する際に、大量の検索キーが割り当てられるデータが出てくるからである。
【００２１】
従来技術における第３の問題点は、データ検索のコストが大きいということである。その理由は、範囲検索の広さに比例した検索キーが必要であるからである。
【００２２】
本発明の範囲検索システムは、暗号化ＤＢ（データベース）に挿入するデータと、暗号化データ生成鍵と、暗号化検索キー生成鍵と、を入力として受け取るデータ入力手段と、暗号化データ生成鍵を用いて、データを暗号化する暗号化手段と、範囲検索用の検索キーを生成する検索キー生成手段と、暗号化検索キー生成鍵を用いて、検索キーを暗号化する暗号化検索キー生成手段と、暗号化検索キーを用いて、暗号化データを暗号化する二重暗号化手段とを具備する。本発明では、検索キー生成手段は、データの値の大きさに依らず所定の数の範囲検索用の検索キーを生成する。
【００２３】
本発明の範囲検索方法は、コンピュータを用いて実施される暗号化ＤＢ（データベース）の範囲検索方法である。本発明の範囲検索方法では、暗号化ＤＢに挿入するデータと、暗号化データ生成鍵と、暗号化検索キー生成鍵と、を入力として受け取る。また、暗号化データ生成鍵を用いて、データを暗号化して暗号化データを生成する。また、データの値の大きさに依らず所定の数の範囲検索用の検索キーを生成する。また、暗号化検索キー生成鍵を用いて、検索キーを暗号化して暗号化検索キーを生成する。また、暗号化検索キーを用いて、暗号化データを暗号化する。
【００２４】
本発明の範囲検索用プログラムは、暗号化ＤＢ（データベース）に挿入するデータと、暗号化データ生成鍵と、暗号化検索キー生成鍵と、を入力として受け取るステップと、暗号化データ生成鍵を用いて、データを暗号化して暗号化データを生成するステップと、データの値の大きさに依らず所定の数の範囲検索用の検索キーを生成するステップと、暗号化検索キー生成鍵を用いて、検索キーを暗号化して暗号化検索キーを生成するステップと、暗号化検索キーを用いて、暗号化データを暗号化するステップとをコンピュータに実行させるためのプログラムである。なお、本発明の範囲検索用プログラムは、記憶装置や記憶媒体に格納することが可能である。
【００２５】
これにより、暗号化ＤＢに対する検索において、意図しない情報漏洩を防止することができ、暗号化ＤＢに対して挿入されるデータを小さくすることができ、データ検索コストを小さくすることができ、暗号化ＤＢに対して、安全で効率的な範囲検索ができる。
【図面の簡単な説明】
【００２６】
【図１】データの値域を４等分した場合の４つのブロックを示す図である。
【図２】本発明の第１実施形態の範囲検索システムの構成例を示すブロック図である。
【図３】本発明の第１実施形態のデータ入力動作を示す流れ図である。
【図４】本発明の第１実施形態のデータ問合せ動作を示す流れ図である。
【図５】本発明の第２実施形態の範囲検索システムの構成例を示すブロック図である。
【図６】本発明の第３実施形態の範囲検索システムの構成例を示すブロック図である。
【図７】本発明の実施例１におけるグレイコード表記の例を示す図である。
【図８】本発明の暗号化ＤＢに格納されたレコードの例を示す図である。
【図９】本発明の実施例２におけるグレイコード表記の例を示す図である。
【図１０】本発明の実施例３におけるグレイコード表記の例を示す図である。
【発明を実施するための形態】
【００２７】
＜第１実施形態＞
以下に、本発明の第１実施形態について添付図面を参照して説明する。
図２に示すように、本発明の範囲検索システムは、第１コンピュータ１００と、第２コンピュータ２００を含む。
【００２８】
第１コンピュータ１００及び第２コンピュータ２００の例として、中央処理装置、プロセッサ、データ処理装置、ＰＣ（パソコン）、シンクライアント端末／サーバ、ワークステーション、メインフレーム、スーパーコンピュータ等のコンピュータを想定している。例えば、本発明の範囲検索システムをクライアントサーバシステムの構成にして、第１コンピュータ１００をクライアント（端末）とし、第２コンピュータ２００をサーバとしても良い。但し、実際には、これらの例に限定されない。
【００２９】
第１コンピュータ１００は、データ入力部１１０と、暗号化部１１１と、値非依存一定数検索キー生成部１１２と、二重暗号化部１１３と、データ問合せ部１２０と、範囲検索キー生成部１２１と、暗号化検索キー生成部１３０を備える。
【００３０】
第２コンピュータ２００は、データ挿入部２１０と、データ検索部２２０と、暗号化検索キー比較部２３０と、暗号化データ格納部（暗号化ＤＢ）２４０を備える。
【００３１】
これらの手段は、それぞれ概略つぎのように動作する。
【００３２】
データ入力部１１０は、暗号化ＤＢに格納したいデータと、暗号化データ生成鍵と、暗号化検索キー生成鍵を入力として受け取る。
【００３３】
暗号化部１１１は、暗号化データ生成鍵を用いて、入力されたデータを暗号化して暗号化データを生成する。
【００３４】
値非依存一定数検索キー生成部１１２は、入力されたデータから、データの値の大きさに依らず定まった数（所定の数）の検索キーを生成する。
【００３５】
二重暗号化部１１３は、暗号化検索キーを用いて、暗号化データを暗号化する。暗号化検索キーとは、後述する暗号化検索キー生成部１３０が暗号化検索キー生成鍵を用いて検索キーを暗号化したものである。
【００３６】
データ問合せ部１２０は、問い合わせたい範囲の情報を入力として受け取り、入力された範囲に対応する検索キーによる問合せを生成して、暗号化ＤＢへ問い合わせる。ここでは、データ問合せ部１２０は、範囲検索キー生成部１２１から、入力された範囲に対応する検索キーを取得する。
【００３７】
範囲検索キー生成部１２１は、入力された範囲に対応する検索キーを生成する。
【００３８】
暗号化検索キー生成部１３０は、暗号化検索キー生成鍵を用いて、検索キーを暗号化して暗号化検索キーを生成する。
【００３９】
データ挿入部２１０は、暗号化データと二重暗号化データを受け取り、暗号化データ格納部２４０に、これらを関連付けて挿入する。
【００４０】
データ検索部２２０は、暗号化データ格納部２４０からデータを取り出し、暗号化検索キー比較部２３０の比較結果に基づき、暗号化データを返す。
【００４１】
暗号化検索キー比較部２３０は、暗号化データを暗号化検索キーで暗号化し、同一の二重暗号化データが存在するかどうかをチェックする。
【００４２】
暗号化データ格納部２４０は、暗号化ＤＢに該当し、暗号化データと二重暗号化データを関連付けて保持する。
【００４３】
例えば、データ入力部１１０、暗号化部１１１、二重暗号化部１１３、値非依存一定数検索キー生成部１１２、データ問合せ部１２０、範囲検索キー生成部１２１、暗号化検索キー生成部１３０、データ挿入部２１０、データ検索部２２０、及び暗号化検索キー比較部２３０、暗号化データ格納部２４０は、プログラムで駆動されるプロセッサ等のハードウェアと、そのハードウェアを駆動して所望の処理を実行するソフトウェアと、そのソフトウェアを格納するメモリ等の記憶装置によって実現される。なお、暗号化データ格納部２４０は、記憶装置を搭載したコンピュータや、記憶装置そのものでも良い。
【００４４】
上記のハードウェアの例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、マイクロプロセッサ、マイクロコントローラ、或いは、専用の機能を有する半導体集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＩＣ））等が考えられる。また、上記の記憶装置の例として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ等の半導体記憶装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の補助記憶装置、又は、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）やＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等のリムーバブルディスクや記憶媒体（メディア）等が考えられる。また、上記の記憶装置は、コンピュータ本体に内蔵された記憶装置に限らず、周辺機器（外付けＨＤＤ等）や外部のサーバ（ストレージサーバ等）に設置された記憶装置、或いは、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）でも良い。但し、実際には、これらの例に限定されない。
【００４５】
また、第１コンピュータ１００と第２コンピュータ２００との間の通信回線の例として、インターネット、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、無線ＬＡＮ（Ｗｉｒｅｌｅｓｓ  ＬＡＮ）、固定電話網、携帯電話網、専用線（ｌｅａｓｅ  ｌｉｎｅ）、ＩｒＤＡ（Ｉｎｆｒａｒｅｄ  Ｄａｔａ  Ａｓｓｏｃｉａｔｉｏｎ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、シリアル通信回線、データバス等が考えられる。第２コンピュータ２００と暗号化データ格納部２４０との間の通信回線についても同様である。但し、実際には、これらの例に限定されない。
【００４６】
次に、図３及び図４のフローチャートを参照して、本実施形態の全体の動作について詳細に説明する。ここでは、データ入力とデータ問合せの二つの動作に分けて説明する。
【００４７】
［データ入力動作］
図３のフローチャートを参照して、データ入力動作について説明する。
【００４８】
（１）ステップＳ１０１
まず、データ入力部１１０は、暗号化ＤＢ（暗号化データ格納部２４０）に格納したいデータと暗号化データ生成鍵と暗号化検索キー生成鍵を入力として受け取る。
【００４９】
（２）ステップＳ１０２
次に、暗号化部１１１は、データ入力部１１０からデータと暗号化データ生成鍵を受け取り、暗号化データ生成鍵を用いてデータを暗号化し、暗号化データを生成する。
【００５０】
（３）ステップＳ１０３
次に、値非依存一定数検索キー生成部１１２は、データ入力部１１０からデータを受け取り、一定の数の検索キーを生成する。このとき、検索キーは、ある幅を持った範囲に関連付けられたものである。
【００５１】
あるデータの値域が与えられたとき、様々な範囲を定義することができるが、本実施形態では、これらの範囲のうち、下記の条件を満たす範囲の集合を選んで用いる。すなわち、値域に含まれる各値について、その値が含まれる範囲の数が定まった数になるように範囲の集合を選ぶ。
【００５２】
この条件を満たす範囲の集合の例を示す。
あるデータの値域が１以上４以下だったとする。ここでは、Ｍ以上Ｎ以下の範囲を［Ｍ，Ｎ］で表すとする。例えば、範囲として、［１，２］、［２，３］、［３，４］、［４，１］を選択したとする。但し、［４，１］は、値域がラップアラウンド（ｗｒａｐ  ａｒｏｕｎｄ）していると考え、４と１だけを含む範囲である。
【００５３】
この場合、各値が含まれる範囲の数はそれぞれ以下の通りである。
・値１が含まれる範囲の集合は、｛［１，２］、［４，１］｝であるので２つ
・値２が含まれる範囲の集合は、｛［１，２］、［２，３］｝であるので２つ
・値３が含まれる範囲の集合は、｛［２，３］、［３，４］｝であるので２つ
・値４が含まれる範囲の集合は、｛［３，４］、［４，１］｝であるので２つ
【００５４】
このように、各値が含まれる範囲の数は、定まった数（この例では２つ）となっている。
【００５５】
前記の条件を満たさない例も挙げる。
範囲として、［１，１］、［１，２］、［１，３］、［１，４］を選択したとすると、各値が含まれる範囲の数はそれぞれ以下の通りである。
・値１が含まれる範囲の集合は、｛［１，１］、［１，２］、［１，３］、［１，４］｝であるので４つ
・値２が含まれる範囲の集合は、｛［１，２］、［１，３］、［１，４］｝であるので３つ
・値３が含まれる範囲の集合は、｛［１，３］、［１，４］｝であるので２つ
・値４が含まれる範囲の集合は、｛［１，４］｝であるので１つ
【００５６】
このように、各値が含まれる範囲の数はばらばらになっているため、定まった数にはなっていない。従来技術も、この条件に満たさない例の１つである。
【００５７】
（４）ステップＳ１０４
次に、暗号化検索キー生成部１３０は、データ入力部１１０から、値非依存一定数検索キー生成部１１２により生成された検索キーと、暗号化検索キー生成鍵を受け取り、暗号化検索キー生成鍵を用いて、検索キーを暗号化し、暗号化検索キーを生成する。
【００５８】
（５）ステップＳ１０５
次に、二重暗号化部１１３は、データ入力部１１０から、暗号化部１１１により生成された暗号化データと、暗号化検索キー生成部１３０により生成された暗号化検索キーを受け取り、暗号化検索キーを用いて、暗号化データを暗号化し、二重暗号化データを生成する。このとき、暗号化検索キーは前述の通り複数個あるため、二重暗号化データも暗号化検索キーの数だけ生成される。
【００５９】
（６）ステップＳ１０６
データ入力部１１０は、暗号化データ、二重暗号化データをデータ挿入部２１０へ送信する。
【００６０】
（７）ステップＳ１０７
データ挿入部２１０は、受け取った暗号化データと二重暗号化データとを関連付けて１つのレコードとし、暗号化データ格納部２４０へ格納する。ここでは、レコードは、暗号化データと二重暗号化データの組を示す。
【００６１】
［データ問合せ動作］
図４のフローチャートを参照して、データ問合せ動作について説明する。
【００６２】
（１）ステップＳ２０１
まず、データ問合せ部１２０は、範囲検索したい範囲（値域）のデータと暗号化検索キー生成鍵を入力として受け取る。
【００６３】
（２）ステップＳ２０２
次に、範囲検索キー生成部１２１は、データ問合せ部１２０から範囲の情報を受け取り、範囲にあたる検索キーの論理式を生成する。範囲にあたる検索キーは、ステップＳ１０３において選択された範囲の集合を基に生成する。ここで、簡単な例を示す。例えば、データの値域が１以上４以下とし、範囲として、［１，２］、［２，３］、［３，４］、［４，１］が選択されたとする。このとき、１以上２以下という範囲検索が問い合わされた場合、範囲［１，２］に対応する検索キーを生成する。また、選択された範囲の集合にない場合は、選択された範囲を組み合わせて検索キーを構成する。すなわち、１以上３以下という範囲検索が問い合わされた場合、範囲［１，２］及び範囲［２，３］の論理和として表現する。
【００６４】
（３）ステップＳ２０３
次に、暗号化検索キー生成部１３０は、データ問合せ部１２０から、近傍関係に基づいて範囲検索キー生成部１２１により生成された検索キーと、暗号化検索キー生成鍵とを受け取り、暗号化検索キー生成鍵を用いて、検索キーを暗号化し、暗号化検索キーを生成する。
【００６５】
（４）ステップＳ２０４
次に、データ問合せ部１２０は、検索キーの論理式中の検索キーを暗号化検索キーに置き換えることで、検索キーの論理式を暗号化検索キーの論理式に変換し、この暗号化検索キーの論理式をデータ検索部２２０へ送信する。
【００６６】
（５）ステップＳ２０５
次に、データ検索部２２０は、暗号化検索キーの論理式を受け取ると、暗号化データ格納部２４０に格納された全てのレコード（暗号化データと二重暗号化データの組）について処理が終了しているか確認する。
【００６７】
（６）ステップＳ２０６
次に、データ検索部２２０は、暗号化データ格納部２４０に未処理のレコードがあれば、暗号化データ格納部２４０からレコードを１つ取り出し、取り出されたレコードと暗号化検索キーを暗号化検索キー比較部２３０へ渡す。
【００６８】
（７）ステップＳ２０７
次に、暗号化検索キー比較部２３０は、取り出されたレコードと暗号化検索キーをデータ検索部２２０から受け取り、暗号化検索キーを用いて、取り出されたレコード中の暗号化データを暗号化し、検索用二重暗号化データを生成する。
【００６９】
（８）ステップＳ２０８
次に、暗号化検索キー比較部２３０は、検索用二重暗号化データと一致する二重暗号化データがレコード内に存在するかをチェックし、そのチェック結果をデータ検索部２２０へ返す。
【００７０】
（９）ステップＳ２０９
データ検索部２２０は、当該チェック結果で暗号化検索キーによる論理式を評価する。ここでは、データ検索部２２０は、当該チェック結果において、検索用二重暗号化データと一致する二重暗号化データがレコード内に存在する旨が示されている場合、評価の結果、真であると判断する。データ検索部２２０は、評価の結果、偽であれば、暗号化データ格納部２４０に他に未処理のレコードがあるか確認する。
【００７１】
（１０）ステップＳ２１０
データ検索部２２０は、評価の結果、真であれば、取り出されたレコードをマッチレコードと判断し、そのレコード中の暗号化データをマッチリストに追加する。その後、データ検索部２２０は、暗号化データ格納部２４０に他に未処理のレコードがあるか確認する。データ検索部２２０は、以上のステップＳ２０６からステップＳ２１０までの処理を、暗号化データ格納部２４０に格納された全てのレコードに対して繰り返す。
【００７２】
（１１）ステップＳ２１１
データ検索部２２０は、暗号化データ格納部２４０に格納された全てのレコードに対して処理が終了したと判断した場合、最後にマッチリストを検索結果として、データ問合せ部１２０へ返却する。
【００７３】
本実施形態では、データからをデータの値に依らず、一定数の検索キーを生成し、それを基にして作られた二重暗号化データを暗号化データ関連付けて格納している。
【００７４】
このため、１つの暗号化データに関連付けられた二重暗号化データの数は一定であるため、それを手がかりに暗号化データの元の値を推測することはできないため、安全性を確保することができる。
【００７５】
＜第２実施形態＞
次に、本発明の第２実施形態について詳細に説明する。
図５に示すように、本発明の範囲検索システムは、第１コンピュータ１００と、第２コンピュータ２００を含む。
【００７６】
第１コンピュータ１００は、データ入力部１１０と、暗号化部１１１と、二重暗号化部１１３と、値非依存一定数階層化検索キー生成部１１４と、データ問合せ部１２０と、範囲検索キー生成部１２１と、暗号化検索キー生成部１３０を備える。
【００７７】
第２コンピュータ２００は、データ挿入部２１０と、データ検索部２２０と、暗号化検索キー比較部２３０と、暗号化データ格納部（暗号化ＤＢ）２４０を備える。
【００７８】
データ入力部１１０、暗号化部１１１、二重暗号化部１１３、データ問合せ部１２０、範囲検索キー生成部１２１、暗号化検索キー生成部１３０、データ挿入部２１０、データ検索部２２０、暗号化検索キー比較部２３０、暗号化データ格納部（暗号化ＤＢ）２４０については、第１実施形態と同様である。
【００７９】
第２実施形態は、前記第１実施形態のうち、値非依存一定数検索キー生成部１１２が、値非依存一定数階層化検索キー生成部１１４に置き換わったものであるので、その差分についてのみ説明する。
【００８０】
値非依存一定数階層化検索キー生成部１１４は、前記第１実施形態の値非依存一定数検索キー生成部１１２により選択される範囲の集合の条件に、検索キーに対応する範囲の幅が狭いものから広いものまで少なくとも２種類以上を含むという条件を追加したものである。
【００８１】
この条件を満たす範囲の集合の例を示す。
データの値域が１以上４以下だとする。例えば、範囲として、［１，２］、［２，３］、［３，４］、［４，１］、［１，４］を選択したとする。このとき、範囲の幅が２のものと４のものの２種類あり、かつ、各値を含む範囲の集合の数はそれぞれ３つと一定数となっている。この結果、例えば、１以上４以下という範囲検索をするとき、第１実施形態における例では２つの検索キーが必要であったが、この例では、範囲［１，４］に対する検索キーを１つで済ますことが可能である。特に、値域が広い場合、その効果が大きくなる。
【００８２】
本実施形態では、範囲の幅が狭いもの、広いものが含まれるように検索キーに関連付けられた範囲の集合を持つように構成している。このため、範囲検索の際、範囲が狭い場合、広い場合どちらの場合であっても、より少ない検索キーで、範囲検索を表現することができるため、検索コストを抑えることが可能である。
【００８３】
＜第３実施形態＞
次に、本発明の第３実施形態について詳細に説明する。
図６に示すように、本発明の範囲検索システムは、第１コンピュータ１００と、第２コンピュータ２００を含む。
【００８４】
第１コンピュータ１００は、データ入力部１１０と、暗号化部１１１と、二重暗号化部１１３と、値非依存一定数ベキ長階層化検索キー生成部１１５と、データ問合せ部１２０と、範囲検索キー生成部１２１と、暗号化検索キー生成部１３０を備える。
【００８５】
第２コンピュータ２００は、データ挿入部２１０と、データ検索部２２０と、暗号化検索キー比較部２３０と、暗号化データ格納部（暗号化ＤＢ）２４０を備える。
【００８６】
データ入力部１１０、暗号化部１１１、二重暗号化部１１３、データ問合せ部１２０、範囲検索キー生成部１２１、暗号化検索キー生成部１３０、データ挿入部２１０、データ検索部２２０、暗号化検索キー比較部２３０、暗号化データ格納部（暗号化ＤＢ）２４０については、第１実施形態と同様である。
【００８７】
第３実施形態は、前記第１実施形態のうち、値非依存一定数検索キー生成部１１２が、値非依存一定数ベキ長階層化検索キー生成部１１５に置き換わったものであるので、その差分についてのみ説明する。
【００８８】
値非依存一定数ベキ長階層化検索キー生成部１１５は、前記第２実施形態の値非依存一定数階層化検索キー生成部１１４により選択される範囲の集合の条件に、範囲の幅がベキ長の関係になるような種類で、かつ、範囲の幅が狭いときは、その範囲の幅を持つ範囲を選択する数を大きく、範囲の幅が広いときはその数を小さくなるように範囲の集合を選択する条件を追加したものである。
【００８９】
範囲の幅がベキ長の関係とは、例えば、範囲の幅が１，２，４，８、．．．、２ｎ（ｎは任意の整数）のように、ベキ級数の式で表されるような幅を取ることである。
【００９０】
範囲の幅が狭いときは、その範囲の幅を持つ範囲を選択する数を大きく、範囲の幅が広いときはその数を小さくなるように範囲の集合を選択するのは、ある値において、その値を含む範囲の幅Ｋの範囲の数を一定数以下に抑えるためである。
【００９１】
まず、明らかなように、範囲の幅がＫの場合、その範囲に含まれる値の数はＫ個である。また、任意の範囲の幅Ｋを持つ範囲は、データの値域の幅をＮとし、ラップアラウンドするような範囲を考慮するならば、Ｎ個定義することが可能である。
【００９２】
このとき、ある範囲の幅Ｋを持つＮ個の範囲のうち、ある値を含む範囲はＫ個ある。例えば、選択された範囲の幅をＫ１，Ｋ２（Ｋ１  ＝  ２＊Ｋ２）とし、それぞれ、Ｎ個の範囲を選択したとする。すると、ある値Ｖを含む範囲の数は、範囲の幅Ｋ１はＫ１個、範囲の幅Ｋ２はＫ２個となり、範囲の幅Ｋ１の個数は範囲の幅Ｋ２の個数の倍あることになる。
【００９３】
範囲の幅に依らずある値を含む範囲の数を一定にするには、選択する範囲の数を減らせば良い。つまり、範囲の幅Ｋ１はＮ個ではなく、うまくＮ／２個選べば、ある値Ｖを含む範囲の数は、範囲の幅Ｋ２と同じになる。
【００９４】
以上から、範囲の幅に対して、おおよそ反比例するようにその範囲の幅を持つ範囲を選択すれば、各範囲の幅に対して、各値に定数個の検索キーを割り当てることができる。
【００９５】
また、範囲の幅の種類をベキ長の関係になるように選択すると、データの値域の幅Ｎに対して、高々Ｏ（ｌｏｇ  Ｎ）種類の範囲の幅が選択されることになる。
【００９６】
この結果、ある値に関連付けられる検索キーの個数は高々Ｏ（ｌｏｇ  Ｎ）個に抑えることができる。また、本実施形態の条件を満たすように検索キーに関連付ける範囲を選択すると、範囲検索において、任意の範囲を表現する際に高々Ｏ（ｌｏｇ  Ｎ）個の検索キーの組合せで表現できる。
【００９７】
簡単な例を用いて説明する。
データの値域が１以上８以下とし、本実施形態の条件を満たす範囲の集合として、
範囲の幅１：［１，１］、［２，２］、［３，３］、［４，４］、［５，５］、［６，６］、［７，７］、［８，８］
範囲の幅２：［１，２］、［３，４］、［５，６］、［７，８］
範囲の幅４：［１，４］、［５，８］
範囲の幅８：［１，８］
を選択したとする。
【００９８】
まず、任意の幅（Ｎ−Ｋ）をもつ範囲検索に対応する検索キーは、幅Ｋをもつある範囲検索に対応する検索キーの論理否定と等価であるため、幅Ｎ／２より大きい範囲検索については考えなくて良い。つまり、範囲の幅７に対する範囲検索は範囲の幅１に対する範囲検索と等価である。
【００９９】
以下では、範囲の幅が４より大きい範囲検索は考えない。
【０１００】
次に、選択された各範囲の幅の範囲の集合において、ある値を含む範囲の数が一定数であることから、選択された各範囲の幅の範囲の集合が、値域全体を一様に網羅する（値域のうちカバーしない部分がない）性質を持っている。言い換えれば、全ての値は少なくとも１つ以上の範囲でカバーされている。
【０１０１】
次に、ある範囲検索に対応する検索キーがない場合、その範囲検索の幅Ｍより小さい範囲検索に対応する検索キーを組み合わせて構成するとする。
【０１０２】
このとき、各範囲の幅がベキ長の関係になっており、前記の性質とあわせると、幅Ｍ／２以上の範囲が必ず１つ含まれる。例えば、１以上４以下という範囲検索では、範囲［１，４］という幅４を持つ範囲が含まれている。また、２以上５以下という範囲検索では、範囲［３，４］という幅２を持つ範囲が含まれている。同様に、任意の範囲の幅３の範囲検索では、必ずどれかの幅２を持つ範囲が含まれていることがわかる。
【０１０３】
つまり、幅Ｍ／２以上の範囲が１つと、幅Ｍ／２以下の範囲検索が高々２つの組合せとして構成されることがわかる。例えば、２以上５以下のという範囲検索は、範囲［３，４］と２以上２以下、５以上５以下の２つの範囲検索から構成することができる。
【０１０４】
この操作を高々ｌｏｇ  Ｍ／２回、再帰的に適用することで、残った範囲検索も分解することができる。つまり、高々Ｏ（ｌｏｇ  Ｍ）個の検索キーの組合せとして表現可能である。
【０１０５】
以上から、高々Ｏ（ｌｏｇ  Ｎ）個の検索キーの組合せで任意の範囲検索が構成することが可能である。
【０１０６】
本実施形態は、範囲の幅がベキ長の関係になるような種類で、かつ、範囲の幅が狭いときは、その範囲の幅を持つ範囲を選択する数を大きく、範囲の幅が広いときはその数を小さくなるように範囲の集合を基に検索キーを構成するようにしている。このため、データの挿入コストや検索コストを抑えることが可能である。
【０１０７】
なお、上記の各実施形態は、組み合わせて実施することも可能である。
【０１０８】
＜具体的な実施例＞
次に、具体的な実施例を用いて、本発明の動作について説明する。
本発明の範囲検索システムは、データ挿入、範囲検索の問合せをする暗号化ＤＢクライアント（端末）と、暗号化されたデータ及びそのデータの索引にあたる二重暗号化されたデータを保持する暗号化ＤＢサーバに分けられる。
【０１０９】
まず、暗号化ＤＢクライアントは、ファイルやメモリに格納されたデータから読み込んだり、キーボード等の入力装置からの入力、ネットワークからデータを受け取ったりする等の方法により、暗号化ＤＢに格納したいデータや、暗号化データ生成鍵、暗号化検索キー生成鍵、範囲検索の問合せを取得する。
【０１１０】
また、暗号化ＤＢサーバは、暗号化ＤＢに格納したいデータを、ファイルやデータベースのテーブル等を通じてＨＤＤやメモリ等の記憶装置に格納する。ここでは、暗号化ＤＢに格納したいデータは、０以上１５以下の値域を持つものとする。今、値が５であるようなデータを暗号化ＤＢに挿入したいとする。このデータから暗号化データ生成鍵を用いて暗号化データを生成する。
【０１１１】
生成方法としては、例えば、ＤＥＳ、ＡＥＳのような共通鍵暗号、ＲＳＡのような公開鍵暗号を用いる。また、用途として暗号化したデータを復号しなくても良いのなら、「ＳＨＡ−１」、「ＭＤ５」のような一方向ハッシュ関数や「ＡＮＳＩ  Ｘ９．３１」のような擬似乱数生成器を用いても良い。より安全性を高めるには、データにノンスのような適当な値をつなげ、同じ値であっても異なる暗号化データになるようにしても良い。
【０１１２】
ここでは、この結果、値５は、Ｅ５という暗号化データになったとする。本来であれば、暗号化した結果、元の値が推測不能なものへ変換されるが、ここでは、説明がわかりやすいように、元の値が推測可能なものへと変換して表記する。以下、同じである。
【０１１３】
次に、データから範囲検索のための検索キーを生成する。
【０１１４】
＜実施例１＞
実施例１としてバイナリコードに基づいて検索キーを生成する方法を示す。
まず、暗号化ＤＢクライアントは、図７のように、値域における各値をバイナリコード表記する。そして、範囲の定義は、バイナリコード表記において、上位１ビット、上位２ビット、上位３ビット、上位４ビットが共通するもの同士を範囲としてまとめる。
【０１１５】
この例では、
範囲の幅が１のものとして、［０，０］、［１，１］、．．．、［１５，１５］の１６個
範囲の幅が２のものとして、［０，１］、［２，３］、．．．、［１４，１５］の８個
範囲の幅が４のものとして、［０，３］、［４，７］、［８，１１］、［１２，１５］の４個
範囲の幅が８のものとして、［０，７］、［８，１５］の２個
範囲の幅が１６のものとして、［０，１５］の１個
を選択された範囲の集合とする。
【０１１６】
この選択された範囲の集合はメモリやディスク上にキャッシュとして保持しておいても良いし、毎回計算して求めても良い。
【０１１７】
このとき、値５を含むものは、［５，５］、［４，５］、［４，７］、［０，７］、［０，１５］の５つであるので、暗号化ＤＢクライアントは、それぞれの範囲に対応する検索キーとして、例えば、「ｋｂ０１０１」、「ｋｂ０１０＊」、「ｋｂ０１＊＊」、「ｋｂ０＊＊＊」、「ｋｂ＊＊＊＊」を生成する。なお、「＊」は、０，１どちらでも良いという意味で表し、この例では、０，１，＊の組合せで範囲を一意に表現する。以下、同じである。
【０１１８】
次に、生成された検索キーを暗号化検索キー生成鍵で暗号化する。
暗号化ＤＢクライアントは、この暗号化では、生成された暗号化検索キーから元の検索キーが推測できないという条件を満たしていれば良いため、例えば、ＤＥＳ、ＡＥＳのような共通鍵暗号、ＲＳＡのような公開鍵暗号、「ＳＨＡ−１」、「ＭＤ５」のような一方向ハッシュ関数を用いて暗号化する。
【０１１９】
ここでは、暗号化ＤＢクライアントは、その結果、「Ｅ＿ｋｂ０１０１」、「Ｅ＿ｋｂ０１０＊」、「Ｅ＿ｋｂ０１＊＊」、「Ｅ＿ｋｂ０＊＊＊」、「Ｅ＿ｋｂ＊＊＊＊」を生成したとする。
【０１２０】
次に、暗号化ＤＢクライアントは、暗号化検索キーを鍵に、暗号化データを暗号化し、二重暗号化データを生成する。ここでは、暗号化ＤＢクライアントは、生成された二重暗号化データから元の暗号化検索キーと暗号化データの組を推測できなくなるものであれば何でも良いため、例えば、ＤＥＳ、ＡＥＳのような共通鍵暗号、ＲＳＡのような公開鍵暗号、「ＳＨＡ−１」、「ＭＤ５」のような一方向ハッシュ関数を用いて暗号化する。
【０１２１】
ここでは、この結果、「Ｈ＿Ｅ５＿Ｅ＿ｋｂ０１０１」、「Ｈ＿Ｅ５＿Ｅ＿ｋｂ０１０＊」、「Ｈ＿Ｅ５＿Ｅ＿ｋｂ０１＊＊」、「Ｈ＿Ｅ５＿Ｅ＿ｋｂ０＊＊＊」、「Ｈ＿Ｅ５＿Ｅ＿ｋｂ＊＊＊＊」が生成されたとする。
【０１２２】
次に、暗号化ＤＢクライアントは、暗号化データと二重暗号化データの組を暗号化ＤＢサーバへと送信する。そして、暗号化ＤＢサーバは、渡されたデータを、暗号化データと二重暗号化データとを関連付けて保持できる構造として記録する。
【０１２３】
例えば、暗号化ＤＢサーバは、図８のように、各行をレコードとし、暗号化データの列、二重暗号化データの列を持ったテーブルへ格納する。ここでは、値５に関するデータは、図８の最後のレコードとして追加されたことを示している。
【０１２４】
次に、図８を参照して、範囲検索の具体例について説明する。
暗号化ＤＢクライアントは、図８のように暗号化ＤＢに格納されたレコードに対して範囲検索をする。ここでは、まず、４以上５以下の範囲検索の問合せをしたとする。すると、この場合では、範囲［４，５］というものが選択された範囲の集合に含まれているため、暗号化ＤＢクライアントは、検索キーの論理式として（ｋｂ０１０＊）を生成する。そして、暗号化ＤＢクライアントは、この検索キー「ｋｂ０１０＊」を暗号化し、暗号化検索キー「Ｅ＿ｋｂ０１０＊」を得て、暗号化検索キーの論理式として（Ｅ＿ｋｂ０１０＊）を得ることができる。暗号化ＤＢクライアントは、この検索キーを暗号化ＤＢサーバへ送信する。暗号化ＤＢサーバは、検索キーを受け取ると、テーブル中の各レコードの暗号化データを受け取った検索キーで二重暗号化し、その結果が二重暗号化データに含まれているかチェックする。
【０１２５】
まず、図８に示すテーブルの１行目のレコードに対して行う。
このレコードの暗号化データは「Ｅ６」であるので、これを暗号化検索キー「Ｅ＿ｋｂ０１０＊」で暗号化すると、検索用二重暗号化データ「Ｈ＿Ｅ６＿Ｅ＿ｋｂ０１０＊」を得る。この「Ｈ＿Ｅ６＿Ｅ＿ｋｂ０１０＊」が二重暗号化データに存在するかをチェックし、この例では存在しなかったので、このレコードに対する暗号化検索キー「Ｅ＿ｋｂ０１０＊」の結果として、「ｆａｌｓｅ（偽）」が返される。暗号化検索キーの論理式（Ｅ＿ｋｂ０１０＊）は、「Ｅ＿ｋｂ０１０＊」でこの結果は「ｆａｌｓｅ（偽）」であるから、このレコードはマッチリストに追加されない。
【０１２６】
次に、図８に示すテーブルの２行目のレコードに対して行う。
このレコードの暗号化データはＥ４であるので、これを暗号化検索キー「Ｅ＿ｋｂ０１０＊」で暗号化すると、検索用二重暗号化データ「Ｈ＿Ｅ４＿Ｅ＿ｋｂ０１０＊」を得る。この「Ｈ＿Ｅ４＿Ｅ＿ｋｂ０１０＊」が二重暗号化データに存在するかをチェックし、この例では存在するので、このレコードに対する暗号化検索キー「Ｅ＿ｋｂ０１０＊」の結果として、「ｔｒｕｅ（真）」が返される。暗号化検索キーの論理式（Ｅ＿ｋｂ０１０＊）は、Ｅ＿ｋｂ０１０＊でこの結果は「ｔｒｕｅ（真）」であるから、このため、このレコードはマッチリストに追加される。
【０１２７】
以下、同様にして、全てのレコードに対して同様の手続きを繰り返す。この結果、暗号化検索キーの論理式として満たすものは、Ｅ４，Ｅ５（それぞれ値４、値５を暗号化したもの）であるのでこれを検索結果として返す。また、４以上６以下の範囲検索の問合せだった場合、範囲［４，５］、範囲［４，６］の論理和で構成されるので、例えば、（ＯＲ  ｋｂ０１０＊  ｋｂ０１１０）という検索キーを生成する。そして、暗号化した結果、（ＯＲ  Ｅ＿ｋｂ０１０＊  Ｅ＿ｋｂ０１１０）という暗号化検索キーの論理式を暗号化ＤＢサーバへ送信する。
【０１２８】
この暗号化検索キーの論理式は２つの暗号化検索キーを持っているので、それぞれについて二重暗号化データを生成し、論理式の評価をする。
【０１２９】
まず、図８の１行目のレコードに対して、二重暗号化データを生成すると、それぞれ「Ｈ＿Ｅ６＿Ｅ＿ｋｂ０１０＊」、「Ｈ＿Ｅ６＿Ｅ＿ｋｂ０１１０」となる。このとき、「Ｈ＿Ｅ６＿Ｅ＿ｋｂ０１０＊」とマッチする二重暗号化データは存在しないのでＥ＿ｋｂ０１０＊の結果として「ｆａｌｓｅ（偽）」を、「Ｈ＿Ｅ６＿Ｅ＿ｋｂ０１１０」とマッチする二重暗号化データは存在するので「Ｅ＿ｋｂ０１１０」の結果として「ｔｒｕｅ（真）」を返す。この例では、これらの結果の論理和であるから、この論理式の結果は「ｔｒｕｅ（真）」となるので、このレコードをマッチリストに追加する。
【０１３０】
同様の手順を全てのレコードに対して繰り返すとマッチリストとして、Ｅ６，Ｅ４，Ｅ５（それぞれ値６、値４、値５を暗号化したもの）を得られ、これを検索結果として返す。
【０１３１】
＜実施例２＞
その他のデータから範囲検索のための検索キーを生成する方法について述べる。ここでは、実施例２として、値のグレイコード表記に基づいて検索キーを生成する方法を示す。
【０１３２】
まず、図９のように、値域における各値をグレイコード表記する。
【０１３３】
コンピュータで通常用いられるバイナリコードからグレイコードへの変換方法は知られていて、バイナリコードを右に１ビットシフトしたものと、元のバイナリコードとの排他的論理和をとれば良い。グレイコードは、隣合う値のビット表現のハミング距離が１という性質を持っている。
【０１３４】
そして、範囲の定義は、グレイコード表記において、隣り合う２ｎの中でお互いのハミング距離がｎ以下になっているものを選ぶ。
【０１３５】
範囲の幅が４の時を例に挙げる。このとき、お互いのハミング距離が２以下になっている必要がある。
【０１３６】
［０，３］の場合は、これらの４つの値の上位２ビットが００と共通し、下位２ビットだけ異なるため、お互いのハミング距離は２以下に収まっているので、この範囲は選択する。
【０１３７】
一方、［１，４］の場合は、１と４は、下位３ビットが異なっているためハミング距離は３であることから、この範囲は選択されない。
【０１３８】
この例では、
範囲の幅が１のものとして、［０，０］、［１，１］、．．．、［１５，１５］の１６個
範囲の幅が２のものとして、［０，１］、［１，２］、．．．、［１４，１５］、［１５，０］の１６個
範囲の幅が４のものとして、［０，３］、［２，５］、．．．、［１２，１５］、［１４，１］の８個
範囲の幅が８のものとして、［０，７］、［４，１１］、［８，１５］、［１２，３］の４個
範囲の幅が１６のものとして、［０，１５］の１個
を選択された範囲の集合となる。
【０１３９】
このとき、値５を含むものは、［５，５］、［４，５］、［５，６］、［２，５］、［４，７］、［０  ７］、［４，１１］、［０，１５］の８つであるので、値５に関連付けられる検索キーとしては、それぞれの範囲に対応する検索キーとして例えば、「ｋｂ０１１１」、「ｋｂ０１１＊」、「ｋｂ０１＊１」、「ｋｂ０＊１＊」、「ｋｂ０１＊＊」、「ｋｂ０＊＊＊」、「ｋｂ＊１＊＊」、「ｋｂ＊＊＊＊」が生成される。
【０１４０】
このような選択された範囲の集合を用いる利点は、検索の際、必要な検索キーの数を抑えることができることにある。
【０１４１】
特に、バイナリコードに基づいて範囲を選択した場合、例えば、７と８の間のように範囲の境界がそろってしまうため、そのような範囲の境界をまたぐような範囲検索があった場合、必要な検索キーの数が多くなる。
【０１４２】
しかし、グレイコードに基づいて範囲を選択した場合、それが解消されるため、範囲検索時に必要な検索キーの数を抑えることができる。
【０１４３】
＜実施例３＞
更に、その他のデータから範囲検索のための検索キーを生成する方法について述べる。ここでは、実施例３として、値の冗長グレイコード表記に基づいて検索キーを生成する方法を示す。
【０１４４】
冗長グレイコード表記とは、ｎ＋１ビットで表されるグレイコードによる実数表現に対して、２ｎ倍したものである。
【０１４５】
１つの値について２通りの表現が可能であることから、ここでは、冗長グレイコード表記と呼んでいる。（参考文献：「グレイコードと実数」＜ｈｔｔｐ：／／ｗｗｗ．ｉ．ｈ．ｋｙｏｔｏ−ｕ．ａｃ．ｊｐ／〜ｔｓｕｉｋｉ／ｂｉｔ／ｇｒａｙ．ｈｔｍｌ＞）
【０１４６】
まず、図１０のように、全ての値を冗長グレイコード表記する。
【０１４７】
コンピュータで通常用いられるバイナリコードから冗長グレイコードへの変換は、比較的容易であり、バイナリコードを２倍したものをグレイコード変換したものと、バイナリコードを２倍して１引いたものをグレイコード変換したものである。そして、範囲の定義は、グレイコード表記において、隣り合う２ｎ−１の中でお互いのハミング距離がｎ以下になっているものを選ぶ。
【０１４８】
この例では、
範囲の幅が１のものとして、［０，０］、［１，１］、．．．、［１５，１５］の１６個
範囲の幅が３のものとして、［０，２］、［１，３］、．．．、［１５，１］の１６個
範囲の幅が５のものとして、［０，４］、［２，６］、．．．、［１４，２］の８個
範囲の幅が９のものとして、［０，８］、［４，１２］、［８，０］、［１２，４］の４個
範囲の幅が１６のものとして、［０，１５］の１個
を選択された範囲の集合となる。
【０１４９】
この表現においては、ある値を中心とみて、両側０、１、２、４離れているものという視点で範囲を定義したものになる。
【０１５０】
このとき、値５を含むものは、［５，５］、［３，５］、［４，６］、［５，７］、［２，６］、［４，８］、［０，８］、［４，１２］、［０，１５］の８つであるので、それぞれの範囲に対応する検索キーとしては、例えば、「ｋｂ０１１＊１」、「ｋｂ０＊１０＊」、「ｋｂ０１１＊＊」、「ｋｂ０１＊１＊」、「ｋｂ０＊１＊＊」、「ｋｂ０１＊＊＊」、「ｋｂ０＊＊＊＊」、「ｋｂ＊１＊＊＊」、「ｋｂ＊＊＊＊」が生成する。
【０１５１】
更に、範囲の幅が５，９を持つ範囲に関して、値によっては２回ないし３回出現する。値５の場合は、それぞれ２回であったが、例えば、値８の場合は、それぞれ３回出現する。
【０１５２】
そこで、範囲の幅が５，９の範囲に対して、２つしか存在しない値の場合、ダミーの検索キー「ｋｄｕｍｍｙ５」，「ｋｄｕｍｍｙ９」をそれぞれ付与し、値により検索キーの数に偏りが出ないようにする。
【０１５３】
結局、値５に関しては、上記の８つに加え、「ｋｄｕｍｍｙ５」，「ｋｄｕｍｍｙ９」をあわせた１０個の検索キーが割り当てられることになる。
【０１５４】
このような選択された範囲の集合を用いると、例えば、格子状に区切られた地図データにおいて、ある格子及びその上下左右の格子に含まれるデータを通りたいというように、ある値を中心とする範囲検索を主にしたい場合や実数値に対する範囲検索をしたいという場合に利用できる。
【０１５５】
本発明は、ＡＳＰ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｅｒｖｉｃｅ  Ｐｒｏｖｉｄｅｒ）や、ＳａａＳ（Ｓｅｒｖｉｃｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）といった形態でサービスを提供し、利用者がサーバ側へ安全にデータを預けるような用途に適用できる。
【０１５６】
以上のように、本発明の範囲検索システムは、暗号化ＤＢに対する範囲検索システムであって、データの値の大きさに依らず定まった数の範囲検索用の検索キーを生成する手段を備えたことを特徴とする。
【０１５７】
検索キーを生成する手段は、１つのデータに対して狭い範囲及び広い範囲に対応する範囲検索用の検索キーを生成する手段を含むことを特徴とする。
【０１５８】
検索キーを生成する手段は、１つのデータに対して割り当てられる範囲の幅がそれぞれベキ長の関係になるように範囲検索用の検索キーを生成する手段を含むことを特徴とする。
【０１５９】
本発明の範囲検索システムは、暗号化手段と、暗号化検索キー生成手段と、二重暗号化手段と、暗号化データ格納手段と、範囲検索キー生成手段と、データ検索手段とを更に備えたことを特徴とする。暗号化手段は、挿入するデータを暗号化し、暗号化データを生成する。暗号化検索キー生成手段は、検索キーを暗号化する。二重暗号化手段は、暗号化データを暗号化検索キーで暗号化し、二重暗号化データを生成する。暗号化データ格納手段は、暗号化データと二重暗号化データを関連付けて保持する。範囲検索キー生成手段は、範囲検索の問合せからその範囲検索を実現する暗号化検索キーを生成する。データ検索手段は、暗号化データ格納手段に格納された暗号化データを範囲検索キー生成手段で生成された暗号化検索キーで二重暗号化し、その結果と一致する二重暗号化データが存在するかを判定することで範囲検索結果を求める。
【０１６０】
本発明の範囲検索方法は、暗号化ＤＢに対する範囲検索方法であって、データの値の大きさに依らず定まった数の範囲検索用の検索キーを生成することを特徴とする。
【０１６１】
本発明の範囲検索方法は、更に、１つのデータに対して狭い範囲及び広い範囲に対応する範囲検索用の検索キーを生成することを特徴とする。
【０１６２】
本発明の範囲検索方法は、更に、１つのデータに対して割り当てられる範囲の幅がそれぞれベキ長の関係になるように範囲検索用の検索キーを生成する。
【０１６３】
本発明の範囲検索方法では、挿入するデータを暗号化して暗号化データを生成する。次に、検索キーを暗号化して暗号化検索キーを生成する。次に、暗号化データを暗号化検索キーで暗号化して二重暗号化データを生成する。次に、暗号化データと二重暗号化データを関連付けて保持する。次に、範囲検索の問合せからその範囲検索を実現する暗号化検索キーを生成する。次に、暗号化ＤＢに格納された暗号化データを範囲検索キー生成手段で生成された暗号化検索キーで二重暗号化して、その結果と一致する二重暗号化データが存在するかを判定することで範囲検索結果を求める。
【０１６４】
本発明のプログラムは、データの値の大きさに依らず定まった数の範囲検索用の検索キーを生成する処理をコンピュータに実行させるためのプログラムである。
【０１６５】
本発明のプログラムは、更に、検索キーを生成する処理において、１つのデータに対して狭い範囲及び広い範囲に対応する範囲検索用の検索キーを生成する処理をコンピュータに実行させることを特徴とする。
【０１６６】
本発明のプログラムは、更に、検索キーを生成する処理において、１つのデータに対して割り当てられる範囲の幅がそれぞれベキ長の関係になるように範囲検索用の検索キーを生成する処理をコンピュータに実行させることを特徴とする。
【０１６７】
本発明のプログラムは、暗号化処理と、暗号化検索キー生成処理と、二重暗号化処理と、暗号化データ格納処理と、範囲検索キー生成処理と、データ検索処理をコンピュータに更に実行させることを特徴とする。暗号化処理では、コンピュータは、挿入するデータを暗号化し、暗号化データを生成する。暗号化検索キー生成処理では、コンピュータは、検索キーを暗号化する。二重暗号化処理では、コンピュータは、暗号化データを暗号化検索キーで暗号化し、二重暗号化データを生成する。暗号化データ格納処理では、コンピュータは、暗号化データと二重暗号化データを関連付けて保持する。範囲検索キー生成処理では、コンピュータは、範囲検索の問合せからその範囲検索を実現する暗号化検索キーを生成する。データ検索処理では、コンピュータは、暗号化データ格納手段に格納された暗号化データを範囲検索キー生成手段で生成された暗号化検索キーで二重暗号化し、その結果と一致する二重暗号化データが存在するかを判定することで範囲検索結果を求める。
【０１６８】
本発明の範囲検索システムで使用される端末は、データの値の大きさに依らず定まった数の範囲検索用の検索キーを生成する手段と、挿入するデータを暗号化し、暗号化データを生成する暗号化手段と、検索キーを暗号化する暗号化検索キー生成手段と、暗号化データを暗号化検索キーで暗号化し、二重暗号化データを生成する二重暗号化手段とを備えたことを特徴とする。
【０１６９】
本発明の範囲検索システムで使用されるサーバは、暗号化データと二重暗号化データを関連付けて保持する暗号化データ格納手段と、暗号化データ格納手段に格納された暗号化データを端末から渡された暗号化検索キーで二重暗号化し、その結果と一致する二重暗号化データが存在するかを判定することで範囲検索結果を求めるデータ検索手段を備えたことを特徴とする。
【０１７０】
以上のように、本発明の暗号化ＤＢシステムは、データに対して値の大きさに依らず定まった数の検索キーを生成する手段を備え、生成された検索キーを基につくられた二重暗号化データを暗号化データと関連付けて格納し、範囲検索の問合せからその範囲に対応する検索キーによって範囲検索するよう動作する。このような構成を採用し、暗号化ＤＢシステムに格納されるデータに関連付けられる検索キーの数にバラつきをなくすことにより本発明の目的を達成することができる。
【０１７１】
また、この検索キーは範囲に対応付けられるが、前記の検索キーを生成する手段は、更に、各データに対して、範囲の幅が狭いものから広いものまでを関連付けるよう動作する。このような構成を採用し、任意の範囲検索に対して、少ない数の検索キーの問合せで実現することにより本発明の目的を達成することができる。
【０１７２】
また、前記の検索キーを生成する手段は、更に、各データに対して関連付けられる範囲の幅をベキ長の関係になるよう動作する。このような構成を採用し、各データに対して関連付けられる検索キーの数を抑え、かつ、任意の範囲検索に対して、少ない数の検索キーの問合せを実現することにより本発明の目的を達成することができる。
【０１７３】
第１の効果は、意図しない情報漏洩を防止する暗号化ＤＢに対する検索ができることにある。その理由は、値の大きさによらず生成される検索キーの数が一定であるためである。
【０１７４】
第２の効果は、データ挿入が小さくできることにある。その理由は、値によらず生成される検索キーの数が一定であり、かつ、検索キーの数を高々Ｏ（ｌｏｇ  Ｎ）に抑えることができるためである。
【０１７５】
第３の効果は、データ検索コストが小さくできることにある。その理由は、あるデータに関連付けられる検索キーを範囲が狭いものから広いものまで、階層化して用意されているため、任意の範囲検索の範囲Ｍに対して、高々Ｏ（１）〜Ｏ（ｌｏｇ  Ｍ）個の問合せで実現できるからである。
【０１７６】
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【０１７７】
なお、本出願は、日本出願番号２００９−１７６９８６に基づく優先権を主張するものであり、日本出願番号２００９−１７６９８６における開示内容は引用により本出願に組み込まれる。
【図１】
0005429502.tif 000002
【図２】
0005429502.tif 000003
【図３】
0005429502.tif 000004
【図４】
0005429502.tif 000005
【図５】
0005429502.tif 000006
【図６】
0005429502.tif 000007
【図７】
0005429502.tif 000008
【図８】
0005429502.tif 000009
【図９】
0005429502.tif 000010
【図１０】
0005429502.tif 000011