(57)【特許請求の範囲】
【請求項１】
データベースシステム中の非決定論的に暗号化されたデータの検索を行う方法であって、当該方法は、記憶装置に記憶されたコンピュータ実行可能命令を処理装置が実行することによって実施され、
ユーザーによって与えられた所望の平文データ項目のためのインデックス値を決定するステップであって、
前記所望の平文データ項目および暗号鍵に基づいてＭＡＣを計算するステップと、
前記計算されたＭＡＣにハッシュ関数を用いて、前記インデックス値を決定するステップと
を含む、決定するステップと、
前記インデックス値をインデックス構造中の対応するエントリーへのアクセスに使用し、前記所望の平文データ項目に対応する非決定論的に暗号化された暗号文を含むデータベースエントリーを得るステップであって、前記インデックス構造は複数の対データ項目を含み、各対データ項目は、第１の項目と、第２の項目または前記第２の項目への参照のいずれかと、を含み、前記第１の項目は、前記暗号鍵を使用して、それぞれの平文データ項目にＨＭＡＣを適用することに基づいた値を持つインデックスデータ項目であり、前記第２の項目は、前記それぞれの平文データ項目に対応する非決定論的に暗号化された暗号文である、得るステップと、
前記複数の対データ項目中の対応する１つの対データ項目の第２の項目を復号化するステップと、
前記復号化した第２の項目と前記所望の平文データ項目とを比較して、ハッシュの衝突が生じたか否かを判断するステップと
を含むことを特徴とする方法。
【請求項２】
前記インデックス構造は、対応する平文データ項目のＨＭＡＣに従ったそれぞれの項目に対して割り当てられた複数のハッシュバケットを含むことを特徴とする請求項１に記載の方法。
【請求項３】
データベースシステム中の非決定論的に暗号化されたデータの検索を実行する遠隔データベースを提供する方法であって、当該方法は、記憶装置に記憶されたコンピュータ実行可能命令を処理装置が実行することによって実施され、
ネットワークを介して要求側から、所望の平文データ項目に対応するデータベースエントリーのための前記データベースシステム中の非決定論的に暗号化されたデータを検索する遠隔要求を受け付けるステップと、
前記所望の平文データ項目および暗号鍵に基づいてコードを計算するステップと、
前記コードをインデックス構造に対するインデックスとして使用し、前記所望の平文データ項目に対応する前記データベースエントリーを得るステップであって、前記インデックス構造は、対応するハッシュ値に従ったそれぞれの項目に対する複数のハッシュバケットを含み、前記対応するハッシュ値は、対応する平文データ項目および前記暗号鍵に基づいてＨＭＡＣを計算するステップと、前記計算されたＨＭＡＣにハッシュ関数を用いて、前記対応するハッシュ値を生成するステップとによって決定される、得るステップと、
前記コードに対応する前記インデックス構造中のエントリーの非決定論的に暗号化された項目を復号化するステップと、
前記復号化した項目と前記所望の平文データ項目とを比較して、ハッシュの衝突が生じたか否かを判断するステップと、
前記要求側に対して、前記データベースシステムから得た前記所望の平文データ項目に対応するデータベースエントリーを含む返却データを返却するステップと
を含むことを特徴とする方法。
【請求項４】
コードを計算する前記ステップは、ＨＭＡＣを計算するステップをさらに含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記インデックス構造は複数の項目をさらに含み、各項目は、少なくともデュプレットの第１の項目と、前記デュプレットの第２の項目または前記第２の項目への参照のいずれかと、を含み、前記第１の項目は、それぞれの平文データ項目に対応するコードを含み、前記第２の項目は、前記それぞれの平文データ項目に対応する非決定論的に暗号化された暗号文を含むことを特徴とする請求項３に記載の方法。
【請求項６】
前記インデックス構造はＢ-treeを含むことを特徴とする請求項３に記載の方法。
【請求項７】
データベースシステム中の非決定論的に暗号化されたデータの検索を行う方法を処理装置に実行させるためのコンピュータ実行可能命令を記録したコンピュータ読み取り可能な記録媒体であって、前記方法は、
所望の平文データ項目および暗号鍵に基づいてＭＡＣを計算するステップと、
前記計算されたＭＡＣにハッシュ関数を用いて、前記インデックス値を決定するステップと、
前記インデックス値をインデックス構造中の対応するエントリーへのアクセスに使用し、前記所望の平文データ項目に対応する非決定論的に暗号化された暗号文を含むデータベースエントリーを得るステップであって、前記インデックス構造は複数の対データ項目を含み、各対データ項目は、第１の項目と、第２の項目または前記第２の項目への参照のいずれかと、を含み、前記第１の項目は、前記暗号鍵を使用して、それぞれの平文データ項目にＨＭＡＣを適用することに基づいた値を持つインデックスデータ項目であり、前記第２の項目は、前記それぞれの平文データ項目に対応する非決定論的に暗号化された暗号文である、得るステップと、
前記インデックス値を使用して前記インデックス構造中の前記対応するエントリーの対データ項目の第２の項目を得るステップと、
前記第２の項目を復号化するステップと、
前記復号化した第２の項目と前記所望の平文データ項目とを比較して、ハッシュの衝突が生じたか否かを判断するステップと
を含むことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの検索に関し、具体的には、暗号化されたデータの検索に関する。
【背景技術】
【０００２】
会社は、様々なビジネスの局面で使用されるデータを格納および検索するため、データベースシステムを使用する。そのデータは、数百万もの数を含む場合があり、少なくとも一部は、例えば顧客情報のように会社が非公開にしておきたいものである。このような情報は、悪意のある人にとって価値あるものであろう。もし競業者がこれらの非公開の情報を得たとしたら、競業者は会社や顧客、または両者に対して問題を引き起こすかもしれない。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
データベース中の価値ある情報を保護するため、およびプライバシーの規則または方針を遵守するために使用される１つの一般的な方法は、暗号化である。しかしながら、暗号化されたデータをデータベースで取り扱うことで、例えば、既存のアプリケーションからデータに対し、どのように権限のあるアクセスを許可するのか、また、すべてのデータを復号化し線形検索を行うことなく、特定のデータ項目を探すにはどのようにすべきか、などの別の問題が起こる。
【０００４】
既存のデータベースシステムは、決定論的暗号化を使用することにより、上記で述べた問題点を解決した。このようなデータベースシステムでは、同一の暗号鍵を使用する場合、平文項目はいつも同一の暗号文に暗号化される。決定論的暗号化の例には、電子コードブロック（ＥＣＢ：Electronic Code Book）モードにおけるブロック暗号の使用、または、一定の初期化ベクター（ＩＶ：Initialization Vector）の使用が含まれる。決定論的暗号化では、ある与えられた暗号鍵を使用する場合、同一の平文は、同一の暗号文に暗号化されるため、データパターンが認識され、その結果情報漏洩につながる可能性がある。これは、暗号化されるべきデータがどのブロック暗号アルゴリズムが使用されるかに応じて、長さ8バイトまたは16バイトとすることができる単一ブロック内に収まらないくらい大きい場合には、特に問題である。
【課題を解決するための手段】
【０００５】
この要約は、以下の発明を実施するための形態でさらに深く記述するいくつかの概念を、簡単な形式で紹介するために提供される。この要約は、請求項に記載されている主題事項の重要な、または本質的な特徴を特定すること、また、請求項に記載されている主題事項の範囲を限定するために使用されることを意図するものではない。
【０００６】
以下に記載する実施形態は、非決定論的に暗号化されたデータについて検索を行うことができるデータベースシステムに関連する。
【０００７】
１つの実施形態では、データベースの暗号化された列に対応するインデックス構造を使用して、データベースの暗号化された列の非決定論的に暗号化された暗号文項目に対応するデータ項目の検索を行うことができる。コードを、要求側に関しては意識させないように、データ項目と暗号鍵とに基づいて計算することができる。このコードは、インデックス構造のインデックスとして使用することができるものであって、このインデックス構造は、対応するデータ項目と暗号鍵とに基づいた、それぞれのコードに従って組織化されたエントリーを持つことができる。いくつかの実施例では、インデックス構造の各エントリーは、データベースの暗号化された列の対応する非決定論的に暗号化された暗号文項目を含むデータベースの行へアクセスするための、それぞれのコードおよびデータを含むことができる。
【０００８】
他の実施形態では、データベースの暗号化された列に対応するインデックス構造にアクセスして、暗号化された列の非決定論的に暗号化された暗号文項目に対応する所望のデータ項目の検索を行うことができる。インデックス構造のエントリーを、データベースの暗号化された列の非決定論的に暗号化された暗号文項目に対応する平文データ項目に従って組織化することができる。このインデックス構造では、対応する平文データ項目に関連する参照を暗号化することができ、インデックス構造中の他の情報を暗号化しないことができる。この検索を、少なくともインデックス構造の一部をメモリーにロードし、インデックス構造のエントリーにアクセスし、および、インデックス構造のエントリーの少なくとも参照の１つを復号化することにより行うことができる。少なくとも１つの復号化された参照を、データベースの暗号化された列の対応する非決定論的に暗号化された暗号文項目を含むデータベースの行へのアクセスに使用することができる。
【０００９】
上記に挙げた利点および特徴ならびに他の利点および特徴を得ることができる方法を説明するため、より具体的な説明を以下に記載し、添付した図面中で例示されるその具体的な実施形態を参照することにより表現する。これらの図面は、単に例示的実施形態であり、したがって本発明の範囲を限定するものではない。実施例を、追加特性および詳細とともに、添付図面の使用により記述し、説明する。
【図面の簡単な説明】
【００１０】
【図１】本開示の主題に合致する例示的操作環境を示す図である。
【図２】図１の処理装置１０２、同図の処理装置１０４またはその両方の処理装置の実装に使用することができる例示的処理装置を示す機能ブロック図である。
【図３Ａ】本開示の主題に合致する実施形態において使用することができる例示的インデックス構造を示す図である。
【図３Ｂ】本開示の主題に合致する実施形態において使用することができる例示的インデックス構造を示す図である。
【図３Ｃ】本開示の主題に合致する実施形態において使用することができる例示的インデックス構造を示す図である。
【図４】図３Ａから図３Ｃの例示的インデックス構造と合わせて行うことができる方法を示すフローチャートである。
【図５】本開示の主題に合致する他の実施形態において使用することができる例示的インデックス構造を示す図である。
【図６】図５の例示的インデックス構造を用いて行うことができる方法を示すフローチャートである。
【図７】本開示の主題に合致する３つ目の実施形態において行うことができる方法を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に、詳細に実施例を説明する。特定の実施例について記載するが、これは説明を目的としてのみ行っていると解すべきである。当業者は、本開示の主題の趣旨、および範囲から切り離すことなく、他の構成要素および環境設定を使用することができると理解するであろう。
【００１２】
例示的操作環境
図１は、本開示の主題に合致する実施形態のための例示的操作環境１００を示す。操作環境１００は、処理装置１０２、処理装置１０４、およびネットワーク１０６を含むことができる。
【００１３】
処理装置１０２は、例えば、データベースシステムを実行することができるサーバーまたは他の処理装置とすることができる。処理装置１０４は、アプリケーションを実行することができ、かつ、ネットワーク１０６を介して処理装置１０２と通信することができるＰＣ（Personal Computer）または他の処理装置とすることができる。
【００１４】
ネットワーク１０６は有線であっても無線であってもよく、有線または無線手段を介して接続された、複数の装置を含むことができる。ネットワーク１０４は、１つのネットワークまたは複数の異なるネットワークを含むことができるし、一部は異なるタイプの複数のネットワークとすることができる。
【００１５】
操作環境１００において、処理装置１０４は、ネットワーク１０６を介して処理装置１０２のデータベース内にある情報にアクセスするアプリケーションを実行することができる。アプリケーションは、処理装置１０２のデータベース中のデータを作成、削除、読み取り、または変更することができる。
【００１６】
図１は、例示的操作環境を示す。他の操作環境または操作環境１００のバリエーションを、本開示の主題に合致する他の実施形態にて使用することができる。例えば、図１においては処理装置１０２と処理装置１０４は別の装置としているが、ある実施形態では、処理装置１０２と処理装置１０４は組み合わされて１つの処理装置とすることができる。このような実施形態では、操作環境はネットワーク１０６を含まない。他の実施形態では、処理装置１０２によって行われる機能またはサービスは、複数の処理装置に渡って分散されることもできる。なお、これらの処理装置は、例えば、ネットワーク１０６などのネットワークを介して接続してもよい。
【００１７】
例示的処理装置
図２は、処理装置１０２、処理装置１０４またはその両方の処理装置を実装するために使用することができる例示的処理装置２００を示す機能ブロック図である。処理装置２００は、バス２１０、プロセッサー２２０、メモリー２３０、ＲＯＭ（Read Only Memory）２４０、記憶装置２５０、入力装置２６０、出力装置２７０および通信インターフェース２８０を含むことができる。バス２１０は、処理装置２００の構成要素間の通信を許可することができる。処理装置２００を、単一の処理装置で処理装置１０２および処理装置１０４の両方を実装する装置として使用する実施形態では、通信インターフェース２８０を処理装置２００の構成要素の１つとして含むことはできない。
【００１８】
プロセッサー２２０は、命令を解釈し、実行する、少なくとも１つの従来のプロセッサーまたはマイクロプロセッサーを含むことができる。メモリー２３０は、ＲＡＭ（Random Access Memory）または動的記憶装置の他のタイプであって、プロセッサー２２０による実行のための情報および命令を格納できるものとすることができる。メモリー２３０はまた、プロセッサー２２０による命令の実行中に使用される一時変数または他の中間情報を格納することもできる。ＲＯＭ２４０は、従来のＲＯＭまたは静的記憶装置の他のタイプであって、プロセッサー２２０のための静的な情報および命令を格納するものを含んでもよい。記憶装置２５０は、データおよび/または命令を格納するあらゆるタイプのメディアを含むことができる。処理装置２００が処理装置１０２を実装するために使用される場合は、記憶装置２５０は１つまたは複数のデータベースシステムのデータベースを含むことができる。
【００１９】
入力装置２６０は、例えば、キーボード、マウス、または他の入力装置などの、ユーザーが処理装置２００に対して情報を入力可能な、１つまたは複数の従来の機構を含むことができる。出力装置２７０は、例えば、画面、プリンターまたは他の出力装置などの、ユーザーに対して情報を出力可能な、１つまたは複数の従来の機構を含むことができる。通信インターフェース２８０は、処理装置２００と他の装置またはネットワークとを通信可能とする、トランシーバーのようなどんな機構も含むことができる。１つの実施形態では、通信インターフェース２８０は、ネットワーク１０６へのインターフェースを含むことができる。
【００２０】
処理装置２００は、プロセッサー２２０がコンピューターが読取可能な媒体、例えば、メモリー２３０、または他の媒体などに含まれる命令の配列を実行すると、それに応答してこれらの機能を行うことができる。これらの命令は、記憶装置２５０のような他のコンピューターが読取可能な媒体からメモリー２３０に読み込まれたり、または、通信インターフェース２８０を介して別の装置から読み込まれたりすることができる。
【００２１】
概要
例示的データベースシステムでは、データはテーブルに格納されると考えることができる。テーブルの１行は、ファイル中の１レコードに相当するものとすることができる。いくつかのデータベースシステムは、テーブルの列中に格納されるデータを、暗号化することができる。このようなデータベースシステムは、もしそのデータが決定論的に暗号化されたものであれば、暗号化された列のデータを検索することができる。すなわち、データベースの暗号化された列の決定論的に暗号化された暗号文に対応する特定の平文値を持つテーブルの行に対しては、検索を行うことができる。しかしながら、上述したように、決定論的な暗号化は、平文項目を、常に同一の対応する暗号文項目に暗号化する。したがって、データパターンは情報漏洩をもたらすと認識され得る可能性がある。
【００２２】
非決定論的暗号化方式は、同一の平文データ項目を異なる暗号文データ項目に暗号化することができる。非決定論的暗号化方式としては、例えば、ランダムな初期化ベクトルを使ったＣＢＣ（Cipher-Block Chaining）モード、または、他の非決定論的暗号化方式などがある。例えば、ランダムな初期化ベクトルを使ったＣＢＣモードにおけるブロック暗号の使用に従った非決定論的暗号化は、平文のそれぞれのブロックを、現在のブロックが暗号化される前に、平文の現在のブロックと、前の暗号文ブロックとの排他的論理和によって暗号化することができる。したがって、暗号文データ項目の値は、対応する平文データ項目と暗号鍵だけでなく、他のデータ、例えば、前に暗号化されたデータブロックまたはランダムな初期化ベクトルなどに基づくことができる。
【００２３】
本開示の主題に合致する実施形態はデータベースシステムに関連するものであり、データベースの暗号化された列の非決定論的に暗号化されたデータの検索を行うことができる。１つの実施形態では、コードを、所望の平文データ項目と暗号鍵とに基づいて計算することができる。コードはＭＡＣ（Message Authentication Code）、ＨＭＡＣ（Hashed Message Authentication Code）または他のコードとすることができる。コードを、インデックス構造のインデックスとして使用することができ、このインデックス構造は、対応する平文データ項目と暗号鍵とに基づいた、それぞれのコードに従って組織化されたエントリーを持つことができる。
【００２４】
１つの実施形態では、インデックス構造はＢ-treeまたは他のインデックス構造とすることができる。これらのインデックス構造を、データベースの暗号化された列の暗号化されたデータに対応する、特定の平文データ項目を持つデータベース中の１行または複数行の検索に使用することができる。インデックス構造の各エントリーは、データベースの暗号化された列の対応する非決定論的に暗号化された暗号文項目を含むデータベースの行へアクセスするための、対応する平文データ項目と暗号鍵とに基づいて計算されたコードに対応するインデックス値、および、データを含むことができる。
【００２５】
他の実施形態では、インデックス構造は、対応するハッシュ値に従って、それぞれの項目に対して割り当てられたハッシュバケットを含むことができる。ＨＭＡＣを、それぞれの平文データ項目と暗号鍵とに基づいて計算することができる。ハッシュ値を、算出されたＨＭＡＣにハッシュ関数を用いることによって生成することができる。ハッシュバケットのそれぞれの項目は、それぞれの平文データ項目に対応する非決定論的に暗号化されたデータ項目を含む、データベースエントリーを得るための情報を含むことができる。
【００２６】
他の実施形態では、データベースの非決定論的に暗号化された列のためのインデックス構造にアクセスすることができる。インデックス構造の各エントリーを、データベースの暗号化された列の、非決定論的に暗号化された暗号文項目に対応する平文データ項目に従って組織化することができる。インデックス構造の各エントリーは、対応する平文データ項目に関連した１つまたは複数の参照を含むことができる。この対応する平文データ項目に関連した１つまたは複数の参照を暗号化することができ、インデックス構造中の他の情報を暗号化しないことができる。検索が実行されると、少なくともインデックス構造の一部をメモリーにロードすることができ、インデックス構造のエントリーの１つにアクセスすることができる。インデックス構造のエントリーの１つへの１つまたは複数の暗号化された参照を、復号化することができ、データベースの暗号化された列の対応する非決定論的に暗号化された暗号文項目を含む行へのアクセスに使用することができる。
【００２７】
いくつかの実施形態では、非決定論的な暗号化および復号化を、対称鍵を使用して行うことができる。すなわち、ある暗号鍵を非決定論的なデータ項目の暗号化に使用することができ、その同一の暗号鍵を暗号化データ項目の復号化に使用することができる。
【００２８】
他の実施形態では、非決定論的な暗号化および復号化を、非対称鍵を使用して行うことができる。すなわち、公開暗号鍵を非決定論的なデータ項目の暗号化に使用することができ、秘密暗号鍵を暗号化データ項目の復号化に使用することができる。
【００２９】
例示的方法
データベースシステムは、特定のレコードまたは行にアクセスするために、データベースの列に格納されたデータを敏速に検索するある種のインデックス手法を典型的に使用する。よく知られている１つのインデックス手法はＢ-treeの使用を含むが、他の実施形態では他のインデックス手法を使用することもできる。１つの実施形態では、デュプレット（Duplet）と呼ばれる新しいデータタイプを、データベースシステムのインデックス手法と共に使用することができる。デュプレットは対のデータ項目を含むことができる。例えば、デュプレットは、データベースの暗号化された列中に格納された非決定論的に暗号化された暗号文項目に対応する平文項目に基づくコード、および、非決定論的に暗号化された暗号文を含むことができ、この暗号文はデータベースの暗号化された列中に格納された非決定論的に暗号化された暗号文項目と等しいものとすることができる。非決定論的に暗号化された暗号文は、Ｅ-値と呼ぶ。
【００３０】
データベースシステムがデータベース中のデータを挿入または更新する場合、データベースシステムは、単一の原子操作において、デュプレットの両方の部分を同期させ続けることができる。すなわち、いくつかの実施形態では、データベースシステムは、デュプレットの一方の部分への書き込みなしでは、デュプレットの他方の部分への書き込みを行うことができない。
【００３１】
本開示の主題に合致する実施形態では、平文項目に基づいたコードは、ＭＡＣまたは他のコードとすることができる。１つの実施形態では、ＭＡＣは、平文項目と暗号鍵を使用して計算される一方向のハッシュ値であるＨＭＡＣとすることができる。暗号鍵は、Ｅ-値を形成するために使用される暗号鍵と同値とすることもできるし、Ｅ-値を形成するために使用される鍵が保護することができる第２の鍵と同値とすることもできるし、または、完全に独立した鍵と同値とすることもできる。
【００３２】
図３Ａは、本開示の主題に合致する実施形態において、インデックス構造として使用される例示的Ｂ-treeを示す。例示的Ｂ-treeは、インデックスノード３０２、３１２、３２０、３２６、３２８、３０、３３２、３３４、３３６、３３８、３４０、および３４２を含むことができる。各インデックスノードは、１つまたは複数のエントリーを含むことができる。リーフノードではないインデックスノードは、１つまたは複数の他のインデックスノードへのリンクを含むことができる。例えば、インデックスノード３０２は複数のエントリーおよび、インデックスノード３１２、３２０、３２６、および３２８などの他のインデックスノードへのリンクをさらに含むことができる。インデックスノード３１２は、複数のエントリーおよび、本実施例ではリーフノードとすることができるインデックスノード３３０、３３２、および３３４などの他のインデックスノードへのリンクをさらに含むことができる。インデックスノード３２０は、少なくとも１つのエントリーおよび、本実施例ではリーフノードとすることができるインデックスノード３３６、および３３８へのリンクを含むことができる。インデックスノード３２６は少なくとも１つのエントリーおよび、本実施例ではリーフノードとすることができるインデックスノード３４０へのリンクを含むことができる。インデックスノード３２８は少なくとも１つのエントリーおよび、本実施例ではリーフノードとすることができるインデックスノード３４２へのリンクを含むことができる。
【００３３】
図３Ｂは、本開示の主題に合致する図３Ａの例示的インデックスノード３０２、３１２、および３２０のさらに詳細な図を示す。本例示的Ｂ-treeのンデックス構造では、インデックスノードの各エントリーは、デュプレットを含むことができる。しかしながら、他の実施形態では、デュプレットを、他のインデックス構造と共に使用することができる。図３Ｂに示すように、各インデックスノードは、１つまたは複数の項目を含むことができ、この１つまたは複数の項目の各々は、デュプレットを含むことができる。例えば、インデックスノード３０２は、インデックス値とＥ-値を含むデュプレットを持つ第１の項目、第２の項目、および第３の項目を含むことができる。第１の項目のインデックス値は、例えば３３５６７のようなコードとすることができ、第１の平文項目に基づいたＭＡＣまたはＨＭＡＣとすることができる。第１の項目のＥ-値、ｈｄｆｙｊｄは、鍵ｋ１により暗号化された第１の平文項目に対応する。第２の項目のインデックス値は、例えば５８９５７のようなコードとすることができ、第２の平文項目に基づいたＭＡＣまたはＨＭＡＣとすることができる。第２の項目のＥ-値、ｏｌｈｄｒｓは、鍵ｋ１により暗号化された第２の平文項目に対応する。第３の項目のインデックス値は、例えば９７４６０のようなコードとすることができ、第３の平文項目に基づいたＭＡＣまたはＨＭＡＣとすることができる。第３の項目のＥ-値、ｔｈｄｋｓｉｍは、鍵ｋ１により暗号化された第３の平文項目に対応する。図３Ｂに示すように、インデックスノード３１２は、２つのエントリーを含むことができる。インデックスノード３１２の第１のエントリーは、第４の平文項目に基づいたインデックス値、１６４８５および、鍵ｋ１により暗号化された第４の平文項目に対応するＥ-値、ｉｆｊｔｒｓｌｋｍを持つデュプレットを含むことができる。インデックスノード３１２の第２のエントリーは、第５の平文項目に基づいたインデックス値、２０９４５および、鍵ｋ１により暗号化された第５の平文項目に対応するＥ-値、ｅｓｗｇｈを持つデュプレットを含むことができる。インデックスノード３２０はデュプレットを含む１つのエントリーを含むことができる。このデュプレットは、第６の平文項目に基づいたインデックス値、４６７８９および、鍵ｋ１により暗号化された第６の平文項目に対応するＥ-値、ｄｆｔｈｖｃを含むことができる。
【００３４】
インデックスノード３０２は、リンク３０４、リンク３０６、リンク３０８、およびリンク３１０を含むことができる。リンク３０４は、対応するインデックス値がインデックスノード３０２のインデックス値３３５６７よりも小さいエントリーを持つ、インデックスノード３１２へのリンクとすることができる。リンク３０６は、対応するインデックス値がインデックスノード３０２のインデックス値３３５６７よりも大きく５８９５７よりも小さいエントリーを持つ、インデックスノード３２０へのリンクである。リンク３０８は、インデックスノード３０２を、それぞれのインデックス値がインデックスノード３０２のインデックス値５８９５７よりも大きく９７４６０よりも小さい１つまたは複数のエントリーを持つ、インデックスノード３２６に連結することができる。リンク３１０は、インデックスノード３０２を、それぞれのインデックス値がインデックスノード３０２のインデックス値９７４６０よりも大きい１つまたは複数のエントリーを持つ、インデックスノード３２８に連結することができる。
【００３５】
さらに、インデックスノード３１２は、インデックスノード３１２のインデックス値１６４８５よりも小さいインデックス値を持つ、１つまたは複数のエントリーを含むインデックスノード３３０へのリンク３１４、インデックスノード３１２のインデックス値１６４８５よりも大きく２０９４５よりも小さいインデックス値を含む、１つまたは複数のエントリーを持つインデックスノード３３２へのリンク３１６、および、インデックスノード３１２のインデックス値２０９４５よりも大きいインデックス値を含む、１つまたは複数のエントリーを含むインデックスノード３３４へのリンク３１８を含むことができる。インデックスノード３２０は、インデックスノード３２０のインデックス値４６７８９よりも小さいインデックス値を含む、１つまたは複数のエントリーを含むことができるインデックスノード３３６へのリンク３２２、および、インデックスノード３２０のインデックス値４６７８９よりも大きいインデックス値を含む、１つまたは複数のエントリーを含むことができるインデックスノード３３８へのリンク３２４を含むことができる。
【００３６】
各インデックスノードエントリーは、対応する平文データ項目のデータタイプを示す情報（図示せず）および、データベースの暗号化された列の対応する非決定論的に暗号化された暗号文への参照、またはポインター（図示せず）を含むことができる。さらに、各インデックスノードは、図３Ｂの例示的インデックス構造に示される以外にも、異なる複数の項目を含むことができる。例えば、インデックスノード３０２、インデックスノード３１２、またはインデックスノード３２０は、図３Ｂに示される以外にも、それぞれのインデックスノードの中に含まれる異なる複数の項目を含むことができる。
【００３７】
図３Ａおよび図３Ｂのインデックス構造は、例示的インデックス構造である。図３Ｂは、インデックス値およびＥ-値を含む例示的インデックス構造の各項目を示すが、他の実施形態では、インデックス構造の各項目は、個別のデータ構造中に存在している対応するＥ-値がある、インデックス値を含むことができる。例えば、図３Ｃの例示的インデックスノード３０２’は図３Ｂのインデックスノード３０２と似ている。しかしながら、インデックスノード３０２’の各項目は、この例では、インデックス値、およびデータ構造３６０に含まれた対応するＥ-値への参照またはポインターであるデュプレットの第１のエントリーを含むことができる。データ構造３６０は、テーブル、配列、または他のデータ構造とすることができる。データ構造３０６は、インデックスノード３０２’に対応するＥ-値を、データ構造３６０中の連続した位置に示しているが、Ｅ-値を、データ構造３６０中の連続していない、または隣接していない位置に配置することもできる。
【００３８】
本開示の主題に合致する実施形態では、例えば、図３Ａから図３Ｃのインデックス構造などのインデックス構造を、処理装置１０２により、インデックスノードへの項目の追加により、または、新規のインデックスノードの追加により、更新し、新規の項目と図３Ａから図３Ｃに示された方法において機能するインデックス構造中の新規の項目に対応するリンクを含むようにすることができる。すなわち、インデックス構造中のあるノードに追加されたリーフではない各新規の項目は、それぞれ、その追加した項目のインデックス値より小さなインデックス値を持つ１つまたは複数の項目を含むインデックスノードを指し示すリンク、および、それぞれ、その追加した項目のインデックス値より大きなインデックス値を持つ１つまたは複数の項目を含むインデックスノードを指し示す第２のリンクを持つことができる。さらに、新しいインデックスノードがインデックス構造に追加される場合は、処理装置１０２は、新しいインデックスノードを指し示すための、インデックス構造中の既存のリンクのうち少なくとも１つを更新することができる。処理装置１０２がインデックス構造中に追加することができる各新規の項目は、それぞれのインデックス値と、対応するＥ-値、または、それぞれのインデックス値および対応するＥ-値への参照のどちらかを含むことができる。対応するＥ-値への参照を、インデックス構造の項目中に格納する場合は、対応するＥ-値を、別のデータ構造、例えば、テーブル、配列、またはその他のデータ構造などに格納することができる。
【００３９】
図４は、本開示の主題に合致する実施形態において、例えば、図３Ａから図３Ｃの例示的インデックス構造のようなインデックス構造を使用して、データベース中の非決定論的に暗号化されたデータを検索するための例示的処理を示すフローチャートである。処理装置１０２は始めに、処理装置１０２のデータベース中に含まれることができる所望のデータ項目の要求を受け付けることができる（アクション４０２）。この要求は、例えば、処理装置１０２のユーザーまたはアプリケーションなどの要求側からであっても良く、または、他の処理装置であって、例えば、ネットワーク１０６などのネットワークを介して処理装置１０２と通信することができる例えば処理装置１０４などの他の処理装置のユーザーまたはアプリケーションなどの要求側からであっても良い。この要求は、検索要求または所望のデータ項目を見つけることを含む他の要求とすることができ、所望のデータ項目の平文形式を含むことができる。与えられた所望の平文データ項目に対して、処理装置１０２は、要求側に関しては意識させないように、例えば、所望の平文データ項目と暗号鍵とに基づくＭＡＣまたはＨＭＡＣのようなコードとすることができる、インデックス値を計算することができる（アクション４０４）。処理装置１０２は次に、所望の平文データ項目に対応するデータを探し出す試みにおいて、データベースのインデックス構造にアクセスし、検索することができる（アクション４０６）。インデックス構造が例えばＢ-treeである場合は、処理装置１０２は、所望のデータを探し出す試みにおいて、Ｂ-tree内を走査するために、Ｂ-treeのインデックスノードの中でデュプレットのインデックス値を調べることができる。
【００４０】
処理装置１０２は次に、所望の項目が見つかったかどうかを判断することができる（アクション４０８）。所望の項目が見つからなかった場合は、処理装置１０２は次に、所望のデータがデータベース内で見つけられなかった指示を返すことができる（アクション４２２）。そうでなければ、処理装置１０２は、アクション４０４にて計算されたインデックス値に対応するデュプレットのＥ-値を得ることができる（アクション４１０）。処理装置１０２は次に、対応する平文をもたらすために、Ｅ-値を復号化することができる（アクション４１２）。この対応する平文を、アクション４０２にて与えられた所望のデータ項目の平文形式と比較することができる（アクション４１４）。処理装置１０２が、比較した平文が等しいと判断した場合は、インデックス構造の中で見つかった項目に対応するデータを、データベースから得ることができ、要求側に返すことができる（アクション４１６）。すなわち、インデックス構造の見つかった項目は、データベース中に格納された対応するデータへの参照を含むことができる。処理装置１０２は次に、見つかったデータ項目が一意であるか否かを判断することができる（アクション４１８）。１つの実施形態では、処理装置１０２は、見つかったデータ項目が一意であるか否かを、見つかったデータ項目がデータベース中の一次キーであるか否かに基づいて、データベースまたはインデックス構造のエントリー中に含まれることができる唯一の標識に基づいて、または他の基準に基づいて判断することができる。処理装置１０２が、見つかったデータ項目がデータベース中で一意であると判断した場合は、処理は完了する。そうでなければ、処理装置１０２は、インデックス値に対応する次の項目をインデックス構造から検索することができる（アクション４２０）。処理装置１０２は、アクション４０８から４２４を繰り返すことができる。
【００４１】
アクション４１４にて行われた比較が、平文が一致しないことを指し示す場合は、処理装置１０２は次に、ハッシュの衝突が生じたと判断することができる。すなわち、同一の暗号鍵を使用した場合に、二つの異なる平文項目から、同一のインデックス値が生成される。このような発生の可能性は稀であるが、しかし起こり得る。処理装置１０２がハッシュの衝突が生じたと判断した場合、処理装置１０２は、ハッシュの衝突を解決する、あらゆる複数のよく知られた方法の１つを使用することができる（アクション４２４）。例えば、１つの実施形態では、一意なコードまたはインデックス値を持つ項目（ハッシュの衝突を指し示す）は、インデックス構造のノードの隣接した位置に格納されている場合がある。ハッシュの衝突が生じたと判断した場合は、処理装置１０２は、該当のノード中で隣接した項目を検索し、ノードの中で隣接した項目のいずれかが、復号したときに所望の項目の平文と一致するＥ-値と関連するか否かを判断することができる。ハッシュの衝突が解決した時点で、処理装置１０２はアクション４０８から４１４を繰り返すことができる。
【００４２】
図５は、本開示の主題に合致する他の実施形態にて使用されることができる他の例示的インデックス構造を示す。図５は例示的Ｂ-treeインデックス構造を示すが、他の実施形態において他のインデックス構造を使用することができる。図５の右側に位置するインデックス構造５０２の一部は、メモリーに存在している場合のインデックス構造５０２のインデックスノードそのものを示す。メモリーのインデックス構造５０２は、インデックス値として平文項目を使用して作られたノードを含むことができる。各ノードは、インデックス値または平文項目、ならびに平文項目に関係する他のデータを、他の非暗号化されたデータと共に含むことができる。例えば、メモリーにおいてノード５０２は、２つの項目を含むことができる。第１の項目は、インデックス値および平文項目に関係する他のデータのように個別の平文項目である、平文-１と、第１の項目の他の暗号化されていない情報とすることができる、非暗号化データ-１を含むことができる。ノード５０２の第２の項目は、インデックス値および平文項目に関係する他のデータのように、他の個別の平文項目である、平文-２と、第２の項目の他の暗号化されていない情報とすることができる、非暗号化データ-２を含むことができる。例えば、インデックス構造をデータベース中の従業員名の検索のために構築する場合、インデックス値は、従業員名とすることができる。このようなインデックス構造における検索を、インデックス構造のノード中に所望の名称を見つけるまで、または、所望の名称は見つからない場合は所望の名称がデータベース中には含まれないと判断することができるまで、インデックス構造を走査して実行することができる。
【００４３】
図５の左側は、データベースシステムの中で記憶装置に保存された場合のインデックス構造５０２そのものを示す。インデックス構造５０２の保存されたバージョンは、すべての平文参照の暗号化されたバージョン、例えばノード５０２の第１の項目の暗号化テキスト−１と、ノード５０２の第２の項目の暗号化テキスト−２を含むことができる。すなわち、インデックス構造の構成が変化しない間は、インデックス値を含めたすべての平文参照を、暗号化された形式で保存することができる。言い換えると、インデックスノードにおける項目同士の順序とノード間のリンケージの順序は平文インデックス値に従って配置されるが、インデックス値を含むすべての平文参照は暗号化された形式で保存されることができる。さらに、例えば平文統計値のようなインデックスに使用することができる平文項目に関係する他のどのような情報も、暗号化することができる。インデックス構造に使用される、平文項目に関係する情報を含む平文参照を、データベース中の対応するデータの暗号化に使用した同一の鍵により、または他の鍵により、保存されたインデックス構造中で暗号化することができる。
【００４４】
図５は、２つの項目を持つインデックス構造の例示的ノードを示す。他の実施形態では、インデックス構造のノード内に、さらに多くの項目を格納することもできるし、少ない項目を格納することもできる。
【００４５】
図６は、本開示の主題に合致する実施形態において、例えば図５の例示的インデックス構造のような、データベース中の非決定論的に暗号化されたデータを検索するインデックス構造を使用する例示的プロセスを示すフローチャートである。処理装置１０２は始めに、処理装置１０２のデータベース中に含まれることができる所望のデータ項目の要求を受け付けることができる（アクション６０２）。この要求は、例えば、処理装置１０２を介してユーザーまたはアプリケーションなどの要求側により直接作られることもできるし、または、ネットワーク１０６などのネットワークを介する処理装置１０４などの他の処理装置を介してユーザーまたはアプリケーションなどの要求側により作られることができる。この要求は検索要求とすることができ、所望のデータ項目の平文形式を含むことができる。処理装置１０２は次に、所望のデータ項目に対応するデータベース中のデータの検索を実行するために、データベースのインデックス構造にアクセスすることができる（アクション６０４）。処理装置１０２は次に、メモリー２３０のような動的記憶装置に少なくともインデックス構造の一部をロードすることができる（アクション６０６）。処理装置１０２は、ロードしたインデックス構造の一部の中の暗号化された参照を、復号化し（アクション６０８）、かつデータベース中の１つまたは複数の非決定論的に暗号化されたデータを探し、アクセスするために、ロードしたインデックス構造の一部を使用することができる（アクション６１０）。
【００４６】
１つの実施形態では、処理装置１０２は、インデックスページまたはインデックス構造の一部をメモリー２３０にロードすると、インデックス構造の暗号化された参照を復号化することができる。このような実施形態では、対応する平文参照およびインデックス構造からの他の情報を使用して、検索を実行することができる。他の実施形態では、インデックス構造からの平文参照を、例えば、インデックスからの平文参照が必要になったときなどのように、検索しながら復号化することができる。
【００４７】
図６を参照して上記で記載した例示的方法を、例えば、一致検索（equality search）のような、特定のデータ項目に関係するデータの検索の実行に使用することができるし、例えば、範囲検索（range search）のような、データ値のレンジに関係するデータの検索の実行に使用することができるし、または、例えば、あいまい検索（fuzzy search）のような、特定のデータ項目に類似する情報の検索の実行に使用することができる。
【００４８】
本開示の主題に合致する実施形態において使用することができる他の例示的方法を、図７を参照して説明する。この方法を、ハッシュに基づいたインデックスをサポートするデータベースと共に使用することができる。図７の例示的方法によれば、処理装置１０２は始めに、検索要求または平文項目に関係するデータベースのデータを見つける他の要求を受け付けることができる（アクション７０２）。この要求は、例えば、処理装置１０２を介してユーザーまたはアプリケーションなどの要求側により直接作られることもできるし、または、ネットワーク１０６などのネットワークを介する処理装置１０４などの他の処理装置を介してユーザーまたはアプリケーションなどの要求側により作られることができる。処理装置１０２は、平文項目について暗号鍵を使用して、ＨＭＡＣを計算することができる（アクション７０４）。処理装置１０２は次に、計算されたＨＭＡＣのハッシュ値を計算して、ハッシュ値を生成することができる（アクション７０６）。処理装置１０２はハッシュに基づいたインデックス構造７１０中で、ハッシュバケットのインデックス値としてハッシュ値を使用して、ハッシュに基づいたインデックス構造７１０の索引のついたエントリーに基づいた、要求された平文データ項目に関係するデータを得ることができる（アクション７０８）。ハッシュ値は平文項目に基づいてＨＭＡＣから計算されるので、データの対応する平文項目のそれぞれのＨＭＡＣに従ってデータの平文項目に対応する項目に対して、ハッシュに基づいたインデックスのハッシュバケットを割り当てることができる。少なくともいくつかの実施形態では、ハッシュに基づいたインデックス構造７１０は、要求された平文データ項目に関係する暗号化された情報を持つデータベース中の項目へのリンクを含むことができる。暗号化された情報は、非決定論的に暗号化されたデータを含むことができる。
【００４９】
図７に示したハッシュに基づいた例示的インデックス構造手法は、インデックスハッシュ関数に従って、ハッシュバケットの処理の結果として生じる可能性がある情報漏えいを、できる限り防ぐ。
【００５０】
構造上の特徴および/または方法論的な動作について、具体的な言葉で主題の事項を記載してきたが、添付した特許請求の範囲の主題は、必ずしも前述の具体的な特徴または動作に限定されない、と理解すべきである。 むしろ、前述の具体的な特徴および動作は、本特許請求の範囲を実施するための実施例の形態として明らかにしたものである。
【００５１】
上記の説明は具体的な詳細を含むことができるが、いかなる方法においても、本特許請求の範囲を限定する事項として解すべきでない。記載した実施形態の他の構成は、本開示の範囲の一部である。さらに、本開示の主題に合致する実施形態は、記載したよりも多くの、または、記載したより少ない動作を含むことができ、または、記載した順序とは異なる順で動作を実施することもできる。したがって、与えられたいずれの具体的な実施例ではなく、添付の特許請求の範囲およびそれらの法的な等価物だけが、本発明を唯一定義すべきである。
【図１】
0004810611.tif 000002
【図２】
0004810611.tif 000003
【図３Ａ】
0004810611.tif 000004
【図３Ｂ】
0004810611.tif 000005
【図３Ｃ】
0004810611.tif 000006
【図４】
0004810611.tif 000007
【図５】
0004810611.tif 000008
【図６】
0004810611.tif 000009
【図７】
0004810611.tif 000010