(57)【要約】【課題】データが暗号化されたデータベースをそのまま検索するときは一致検索しかできない。【解決手段】  秘匿処理部１１は、所定の検索条件を含むデータベースに対する検索要求を受け付けると、検索要求と等価の複数の一致検索を含むクエリプランを生成し、複数の一致検索に対応する、暗号鍵で暗号化したデータを含む複数の検索コマンドを生成する。【選択図】  図１
2018097625.tif 000002
【特許請求の範囲】
【請求項１】
クライアントと、暗号化されたデータが格納されたデータベースを有するデータベースサーバとを備えたデータベースシステムであって、
前記クライアントは、
鍵情報を管理する鍵情報管理部と、
所定の検索条件を含む前記データベースに対する検索要求を受け付けると、前記検索要求と等価の複数の一致検索を含むクエリプランを生成し、前記複数の一致検索に対応する、前記暗号鍵で暗号化したデータを含む複数の検索コマンドを生成する秘匿処理部と、を有するデータベースシステム。
【請求項２】
前記検索条件が、前記データベースのカラムの値の範囲の指定を含むときは、前記複数の一致検索のそれぞれは、前記検索条件で指定された範囲で取り得る個別の値についての一致検索である、請求項１記載のデータベースシステム。
【請求項３】
前記カラムには、最大値及び／または最小値が定められている、請求項２記載のデータベースシステム。
【請求項４】
前記クエリプランには、前記複数の一致検索の検索結果のデータに対する統計処理をさらに含む、請求項２記載のデータベースシステム。
【請求項５】
前記検索条件が、第１段階の検索と第２段階の検索に分割できるときは、
前記秘匿処理部は、
前記複数の一致検索に基づいて、第１段階の検索について前記暗号鍵で暗号化したデータを含む複数の第１の検索コマンドを生成し、
前記複数の第１の検索コマンドを実行した結果のデータを母集団として、前記複数の一致検索に基づいて、第２段階の検索について前記暗号鍵で暗号化したデータを含む複数の第２の検索コマンドを生成する、請求項１記載のデータベースシステム。
【請求項６】
前記データベースサーバは、
前記複数の検索コマンドに基づいて前記データベースの検索を実行するアクセラレータを、さらに備える請求項１記載のデータベースシステム。
【請求項７】
クライアントと、暗号化されたデータが格納されたデータベースを有するデータベースサーバと、を有するデータベースシステムが行う暗号化データの検索方法であって、
前記クライアントは、鍵情報を管理する鍵情報管理部を有し、
前記クライアントが、
所定の検索条件を含む前記データベースに対する検索要求を受け付けると、前記検索要求と等価の複数の一致検索を含むクエリプランを生成し、
前記複数の一致検索に対応する、前記暗号鍵で暗号化したデータを含む複数の検索コマンドを生成する、暗号化データの検索方法。
【請求項８】
暗号化されたデータが格納されたデータベースを有するデータベースサーバと接続されたクライアントのためのコンピュータプログラムであって、
前記クライアントは、鍵情報を管理する鍵情報管理部を有し、
前記クライアントに、
所定の検索条件を含む前記データベースに対する検索要求を受け付けると、前記検索要求と等価の複数の一致検索を含むクエリプランを生成する処理と、
前記複数の一致検索に対応する、前記暗号鍵で暗号化したデータを含む複数の検索コマンドを生成する処理と、を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
データベースシステムに関する。
【背景技術】
【０００２】
近年、クラウドにデータを格納することが増えてきているが、個人情報などをクラウドに保管した際に、クラウド管理者による情報漏えいの防止が困難という課題がある。このクラウド管理者からの情報漏えいを防ぐため、特許文献１では、クライアントで暗号化したデータをクラウド上に保存しつつ、暗号化したクエリを用いて一致検索するシステムが提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１３５５４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載のシステムを用いると、クラウド上でデータを暗号化したまま復号することなく、暗号化データの一致検索ができるため、クラウド管理者からの情報漏えいを防ぐことが可能になる。しかし、大小比較や統計処理といった処理に対応していないという課題がある。
【課題を解決するための手段】
【０００５】
本発明の一つの態様に従うデータベースシステムは、クライアントと、暗号化されたデータが格納されたデータベースを有するデータベースサーバとを備える。前記クライアントは、鍵情報を管理する鍵情報管理部と、所定の検索条件を含む前記データベースに対する検索要求を受け付けると、前記検索要求と等価の複数の一致検索を含むクエリプランを生成し、前記複数の一致検索に対応する、前記暗号鍵で暗号化したデータを含む複数の検索コマンドを生成する秘匿処理部と、を有する。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態のデータベースシステムを示す。
【図２】名簿テーブルの一例を示す。
【図３】テーブル管理情報の一例を示す。
【図４】秘匿処理部の動作フローを示す。
【図５】第２の実施形態のデータベースシステムを示す。
【図６】クエリ処理部の動作フローを示す。
【図７】第３の実施形態のデータベースシステムを示す。
【発明を実施するための形態】
【０００７】
以下、本発明の実施形態について、図面を用いて説明する。なお、以下に説明する実施形態は本発明を実施できる例示的な実施形態を示すものであって本発明を限定するものではない。これらの図面において、複数の図を通じて同一の符号は同一の構成要素を示している。更に、詳細な説明は各種の例示的な実施形態を提供するが、以下に記述及び図示するように、本発明は本明細書に記述及び図示する実施形態に限定されるものではなく、当業者には公知または将来公知となる他の実施形態に拡張できる点に注意されたい。
【０００８】
本明細書において「本実施形態」に言及する場合、当該実施形態との関連で記述されている特定の特徴、構造または特性は、本発明の少なくとも１つの実施形態に含まれることを意味しており、本明細書の各所でこれらの語句が出現しても必ずしもすべて同一の実施形態を指している訳ではない。
【０００９】
また、以下の詳細な説明において、本発明を完全に理解されるよう多くの具体的な詳細事項を開示している。しかし、当業者には明らかなように、本発明を実施するためにこれらの具体的な詳細事項のすべてが必要な訳ではない。他の状況において、本発明を無用に分かり難くしないよう、公知の構造、材料、回路、処理及びインタフェースについては詳細に記述せず、及び／またはブロック図の形式で示す場合がある。
【００１０】
特に別途明言しない限り、以下の記述から明らかなように、本明細書の記述を通じて、「処理する」、「計算する」、「算出する」、「判定する」、「表示する」等の用語を用いた説明は、コンピュータシステムまたは当該コンピュータシステムのレジスタ及びメモリ内の物理的（電子的）な量として表現されたデータを操作して、当該コンピュータシステムのメモリまたはレジスタまたは他の情報記憶、伝送または表示装置内の物理量として同様に表現された他のデータに変換する他の情報処理装置の動作及び処理を含んでいてよい。
【００１１】
本発明はまた、本明細書における動作を実行する装置に関する。この装置は、必要な目的のために特別に構築されてもよいし、または、１つ以上のコンピュータプログラムにより選択的に起動または再設定される１つ以上の汎用コンピュータを含んでいてもよい。そのようなコンピュータプログラムは、例えば、光ディスク、磁気ディスク、読出し専用メモリ、ランダムアクセスメモリ、固体装置及びドライブ等のコンピュータ可読記憶媒体、または電子情報の保存に適している他の任意の媒体に保存できるが、これらに限定されない。
【００１２】
本明細書に示すアルゴリズム及びディスプレイは、いかなる特定のコンピュータまたは他の装置にも本質的には関係していない。各種の汎用システムを、本明細書の教示によるプログラム及びモジュールと共に用いてもよいが、所望の方法ステップを実行するためのより特化した装置を構築した方が便利なことが分かる場合がある。これら各種のシステムの構造は以下に開示する説明で明らかになる。本発明はまた、いかなる特定のプログラミング言語も前提としては記述していない。以下に記述するように、本発明の教示を実行するために各種のプログラミング言語を用いてもよいことが理解されよう。プログラム言語のコマンドは、１つ以上の処理装置、例えば中央処理装置（ＣＰＵ）、プロセッサ、またはコントローラにより実行できる。
【００１３】
なお、以後の説明では「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」等の表現にて本発明の情報を説明するが、これら情報はテーブル、リスト、リレーショナルデータベース等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」等について「ａａａ情報」と呼ぶことがある。
【００１４】
さらに、各情報の内容を説明する際に、「識別情報」、「名」、「ＩＤ」という表現を用いるが、これらについてはお互いに置換が可能である。
【００１５】
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御デバイス）を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部またはすべては専用ハードウェアによって実現されてもよい。
【００１６】
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。この場合、プログラム配布サーバはＣＰＵと記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムを記憶している。そして、配布プログラムをＣＰＵが実行することで、プログラム配布サーバのＣＰＵは配布対象のプログラムを他の計算機に配布する。
【００１７】
なお、クライアント１は入出力デバイスを有する。入出力デバイスの例としてはディスプレイとキーボードとポインタデバイスが考えられるが、これ以外のデバイスであってもよい。また、入出力デバイスの代替としてシリアルインターフェースやイーサーネットインターフェースを入出力デバイスとし、当該インタフェースにディスプレイ又はキーボード又はポインタデバイスを有する表示用計算機を接続し、表示用情報を表示用計算機に送信したり、入力用情報を表示用計算機から受信することで、表示用計算機で表示を行ったり、入力を受け付けることで入出力デバイスでの入力及び表示を代替してもよい。
【００１８】
以後、情報処理システムを管理し、本願発明の表示用情報を表示する一つ以上の計算機の集合を管理システムと呼ぶことがある。管理計算機が表示用情報を表示する場合は管理計算機が管理システムである、また、管理計算機と表示用計算機の組み合わせも管理システムである。また、管理処理の高速化や高信頼化のために複数の計算機で管理計算機と同等の処理を実現してもよく、この場合は当該複数の計算機（表示を表示用計算機が行う場合は表示用計算機も含め）が管理システムである。
【００１９】
＜第１の実施形態＞
図１に、本発明の一実施形態に係るデータベースシステムの構成図を示す。
【００２０】
データベースシステムは、クライアント１と、データベースサーバ２とを有し、それらが互いにネットワーク３で接続されている。データベースサーバ２には、暗号化されたデータが格納されている。本実施形態では、クライアント１がデータベースサーバ２のデータベースを管理するシステムとして機能する。
【００２１】
クライアント１とデータベースサーバ２は、例えば、ＣＰＵ、主記憶メモリ、マザーボード、ネットワークＩＦ、Ｉ／Ｏ  ＩＦ、外部記憶媒体などを搭載したコンピュータが、所定のコンピュータプログラムを実行することにより実現されても良いが、その具体的な構成については限定しない。
【００２２】
ネットワーク３は、例えば、イーサネット（登録商標）やＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）など異なる装置間を通信できるものであれば良く、有線及び無線のいずれでも良い。
【００２３】
次に、クライアント１とデータベースサーバ２の各処理の機能について説明する。
【００２４】
クライアント１は、ユーザインタフェース部１０と、秘匿処理部１１と、情報管理部１２と、ネットワーク部１３とを有する。
【００２５】
ユーザインタフェース部１０は、ディスプレイ、マウス、キーボード、スピーカ等の外部デバイスに対するインタフェースでよい。ユーザインタフェース部１０は、例えば、外部デバイスを通じて、ユーザからの要求（テーブルの新規登録、テーブルへのデータの挿入及び削除、及びテーブル内のデータ検索など）を受け付ける、さらに、ユーザインタフェース部１０は、例えば、データの検索要求を受け付けたときの検索結果を外部デバイスに対して出力する。これにより、ディスプレイやスピーカなどの外部デバイスを通じて検索結果がユーザへ通知されるようにしてもよい。
【００２６】
秘匿処理部１１は、データベースサーバ２で暗号化されているデータを、暗号化された状態のまま検索を行うための処理を行う。その際、秘匿処理部１１は、暗号及び復号処理を行う。例えば、秘匿処理部１１は、検索コマンドに含める検索条件（値）を暗号化し、及び検索結果として取得した暗号データを復号する。
【００２７】
例えば、秘匿処理部１１は、検索要求としてＳＱＬを受け付けると、これを解釈するパーサとしての機能を有する。検索要求に含まれる検索条件には、例えば、データベースのカラムの値の範囲の指定（大小比較を含む）が含まれていてもよい。検索要求には、検索して取得したデータに対する統計処理（例えば、平均値または分散値等の算出、ヒストグラムの生成、等）がさらに含まれていても良い。
【００２８】
暗号化されているデータベース内のデータを暗号のままで検索する場合は、一致検索しか行うことができず、範囲の指定などはできない。さらに、検索結果を統計処理することもできない。そこで、秘匿処理部１１は、一文のＳＱＬで表現された検索要求と等価の複数の一致検索を含むクエリプランを生成する。検索要求に統計処理が含まれるときは、クエリプランにもそれに等価の統計処理が含まれる。
【００２９】
秘匿処理部１１は、さらに、このクエリプランに従って、複数の一致検索に対応する暗号化したデータを含む複数の検索コマンドを生成する。例えば、秘匿処理部１１は、それぞれの一致検索の検索条件に係るデータを暗号化したデータを含む検索コマンド（ＳＱＬ）を生成する。
【００３０】
情報管理部１２は、データベースが有するデータの管理情報を有する。情報管理部１２は、テーブル管理情報１２０として、データベースのテーブル単位にデータを管理してもよい。テーブル管理情報１２０には、例えば、データベースに保存するデータを暗号または復号するときに使う鍵情報を含む。本実施形態では共通鍵暗号方式を用いるが、公開鍵暗号方式であっても良い。情報管理部１２は、さらに、平文テーブルと暗号文テーブルとを対応付ける情報と統計処理を高速に行うためのテーブル情報を有してもよい。
【００３１】
ネットワーク部１３、２０は、クライアント１とデータベースサーバ２とで通信を行う機能を持つ。以下の説明においては、クライアント１とデータベースサーバ２との通信について説明するとき、ネットワーク部１３、２０間でのデータ送受信については説明を省略する場合がある。
【００３２】
データベースサーバ２は、ネットワーク部２０と、データベース部２１と、記憶部２２とを有する。
【００３３】
データベース部２１は、例えば、ＳＱＬにより動作するデータベースソフトウエアである。データベース部２１は、クライアント１から送られたＳＱＬを実行する。
【００３４】
記憶部２２は、データベースのテーブルを保存しておく機能を持つ。記憶部２２は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）やＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）のような記憶媒体でも良いし、ストレージ装置、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）などの記憶装置であっても良い。
【００３５】
図２は、記憶部２２に記憶されているユーザの名簿テーブル２２０の一例を示す。
【００３６】
同図に示すテーブルは、個人を識別するＩＤ２２１、年齢２２２、性別２２３、住所２２４、及び年収２２５の５つのカラムを有する。ＩＤ２２１はＩＮＴ型（４バイトの数字）で同一番号は存在しない。本実施形態では、ＩＤ２２１は連番で設定されてよい。年齢２２２はＳＭＡＬＬＩＮＴ型（２バイトの数字）である。性別２２３はＣＨＡＲ型（文字列）で、男性または女性のどちらかが入る。住所２２４は、ＣＨＡＲ型で４７都道府県のいずれかが入る。年収２２５は、ＩＮＴ型で１万円単位の数値が入る。本実施形態では、例えば、テーブルの総件数を１万件としてもよい。
【００３７】
図３は、情報管理部１２が有する名簿テーブル２２０に関するテーブル管理情報１２０の一例を示す。同図はＪＳＯＮ形式で表現されている。
【００３８】
同図に示すように、テーブル管理情報１２０は、鍵情報１２１と、テーブル名１２２と、カラム情報１２３とを有する。
【００３９】
鍵情報１２１には、暗号及び復号の鍵情報（「共通鍵Ａ」）が含まれる。本実施形態で用いる暗号化方式は、共通鍵方式のＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）暗号でよい。なお、本実施形態では一つのテーブルがすべて同じ暗号鍵を使って暗号化されているが、カラムごとに異なる暗号鍵を用いるようにしても良い。
また、全て暗号化されている例を示しているが、暗号化しないカラムがあっても良い。
【００４０】
カラム情報１２３には、各カラムのカラム名（「ＩＤ」、「年齢」、「性別」、「住所」、「年収」）が含まれる。さらに、カラム情報１２３には、カラムごとに、平文のときのデータ型と、暗号文にしたときのデータ型とが含まれる。平文のときのデータ型が数値であれば、カラム情報１２３には、さらに、その最大値及び最小値が登録されている。
【００４１】
同図の例では、最大値及び最小値は、例えば以下のような値が設定されている。すなわち、「ＩＤ」の最大値は最大ユーザ数を示している。ここでは「ＩＤ」の最大値を１０万とした。「年齢」については、最低年齢を０歳とする一方、最高年齢を１２０歳とした。「年収」の最大値は５０００万とした。このテーブル情報の保存先は、クライアント１内の主記憶メモリ、ＨＤＤやＳＳＤなどの記憶媒体でも良いし、クライアント１の外部装置でも良い。
【００４２】
次に、図２及び図３を参照して、テーブルの登録、データの挿入、及びデータの検索について、処理手順を説明する。
【００４３】
＜テーブル登録＞
図２のテーブルを新規登録する動作を説明する。
【００４４】
まず、秘匿処理部１１が、ユーザインタフェース部１０からテーブル作成コマンドを受け付ける。このテーブル作成コマンドには、ユーザから指定されたテーブル名、カラム名、データ型、数値の最大値と最小値の情報が引数として含まれてもよい。
【００４５】
テーブル作成コマンドを受けた秘匿処理部１１が、テーブル管理情報１２０を生成して情報管理部１２に登録する。
【００４６】
その後、秘匿処理部１１は、テーブル名、カラム名、暗号化後のデータ型（ＢＹＮＡＲＹ型）の情報を含む新規テーブル登録要求をデータベース部２１に出す。新規テーブル登録要求を受けたデータベース部２１は、新規テーブルを登録する。
【００４７】
＜データ登録＞
次に、上記の処理によって生成されたテーブルに、データを登録する手順について説明する。
【００４８】
秘匿処理部１１は、ユーザの要求として、データ挿入コマンド及び平文のデータ群（例えば、１万×５カラム＝５万要素）をユーザインタフェース部１０を介して取得する。データ挿入コマンドでは、データを挿入するテーブルとして名簿テーブル２２０が指定されている。
【００４９】
秘匿処理部１１は、名簿テーブル２２０のテーブル管理情報１２０から共通鍵を取得して、この共通鍵を用いて平文のデータ群をカラム単位に暗号化する。秘匿処理部１１は、暗号化されたデータ群をデータベース部２１へ送り、データベースへの登録を依頼する。データベース部２１がこの依頼に応じて暗号化データを記憶部２２の名簿テーブル２２０に保存する。
【００５０】
これにより、クライアント１で暗号化したデータがデータベースに保存される。
【００５１】
＜検索例１＞
次に、各要素が暗号化された状態で記憶されているデータベースを検索する処理について説明する。
【００５２】
記憶部２２には、図２に記載されている名簿テーブル２２０の各カラムの値が暗号化された状態で格納されている。
【００５３】
検索例１として、名簿テーブル２２０から３０歳以上のユーザを検索して、その結果をリスト表示する例について説明する。
【００５４】
図４は、秘匿処理部１１の処理手順を示すフローチャートである。このフローチャートに従って、検索例１の具体的な処理についても説明する。
【００５５】
秘匿処理部１１は、ユーザインタフェース部１０からの検索要求を受け付け、その検索が一致検索以外を含むものであるか否かの判定を行う（Ｓ１００）。
【００５６】
ここで、検索要求は、例えばＳＱＬの形式で記載されていてよい。秘匿処理部１１は、所得したＳＱＬの内容を解析し、一致検索のみの検索要求であるか、範囲指定及び統計処理を含むものであるかどうかの判定を行う。
【００５７】
この例では、３０歳以上のユーザのリスト出力が要求されている。つまり、検索条件には年齢の大小比較が含まれるので、一致検索以外が含まれると判定される。
【００５８】
ステップＳ１００の判定で、検索要求に一致検索以外が含まれる場合は、秘匿処理部１１は情報管理部１２のテーブル管理情報１２０を参照し、検索条件に係るテーブル情報を取得する（Ｓ１０１）。この例では、秘匿処理部１１は、名簿テーブルの管理情報１２０から、「共通鍵Ａ」と、「年齢」の最大値「１２０」と最小値「０」を取得する。
【００５９】
秘匿処理部１１は、取得したテーブル情報を用いてクエリプランを生成する（Ｓ１０２）。
【００６０】
検索条件が、データベースのカラムの値の範囲の指定を含むときは、秘匿処理部１１は、複数の一致検索のそれぞれを検索条件で指定された範囲で取り得る個別の値についての一致検索としても良い。例えば、この例では、クエリプランには、年齢が３０歳から１２０歳までの人を検索する９１個の一致検索を行う、というクエリプランになる。
【００６１】
秘匿処理部１１は、ステップＳ１０２で生成したクエリプランを実行する（Ｓ１０３）。例えば、この例では、秘匿処理部１１が上述した９１個の一致検索に対応するＳＱＬを生成し、一つずつデータベース部２１に発行する。生成されるＳＱＬの一例を示すと、例えば（式１）である。
Ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  名簿  ｗｈｅｒｅ  年齢=ＡＥＳ（３０）;  （式１）
【００６２】
ここでは、一致検索の条件（ｗｈｅｒｅ句）に「年齢＝ＡＥＳ（３０）」と記載されている。ここで、ＡＥＳ（３０）は、「共通鍵Ａ」を使ってＡＥＳで暗号化された「３０」に対応するビット列を示す。
【００６３】
秘匿処理部１１は、（式１）のＳＱＬと同様に、一致検索の「年齢」の条件をＡＥＳ（３１）からＡＥＳ（１２０）に設定したＳＱＬをそれぞれ発行する。秘匿処理部１１は、これらの個別の検索の結果を取得し、各カラムの暗号化されているデータを共通鍵Ａで復号する。
【００６４】
ステップＳ１０３のクエリプラン実行が終わったら、ユーザインタフェース部１０を通じて、検索結果がユーザへ提示される。
【００６５】
ステップＳ１００の判定で、検索要求に統計処理が含まれず、一致検索のみであった場合は、秘匿処理部１１は情報管理部１２のテーブル管理情報１２０を参照し、検索条件に係るテーブルの鍵情報を取得する（Ｓ１０４）。
【００６６】
秘匿処理部１１は、一致検索の条件を「共通鍵Ａ」を用いてＡＥＳ暗号化して検索用のＳＱＬを作成する（Ｓ１０５）。
【００６７】
秘匿処理部１１は、ＳＱＬをデータベース部２１に発行し、検索結果を取得する。秘匿処理部１１は、取得した検索結果で復号が必要なデータについては復号する（Ｓ１０６）。
【００６８】
これにより、単純な一致検索以外の検索要求であっても、暗号化されたデータを有するデータベースを暗号のまま検索することができる。
【００６９】
＜検索例２＞
検索例２として、名簿テーブル２２０に登録されているユーザの平均年齢を求める例について説明する。
【００７０】
秘匿処理部１１は、ユーザインタフェース部１０から、名簿テーブル２２０に登録されている全ユーザの「年齢」を取得し、その平均値を算出する要求を受け付ける。この検索要求は、検索結果に対して平均値の計算が必要であるので、ステップＳ１００では、一致検索以外の処理を含むものと判定される。
【００７１】
秘匿処理部１１は、ステップＳ１０１で、情報管理部１２の名簿テーブルの管理情報１２０を参照し、「共通鍵Ａ」と、検索条件に係るカラム「年齢」の情報を取得する。
【００７２】
秘匿処理部１１は、ステップＳ１０２で、０から１２０までの各年齢に一致するユーザ数をカウントする１２１個の検索と、その平均値を算出するクエリプランを生成する。
【００７３】
秘匿処理部１１は、ステップＳ１０３で、この１２１個の一致検索に対応するＳＱＬを生成して、一つずつデータベース部２１に発行する。検索例１と同様に、ここで生成されるＳＱＬの一例を示すと、例えば（式２）である。
Ｓｅｌｅｃｔ  ｃｏｕｎｔ（）ｆｒｏｍ  名簿  ｗｈｅｒｅ  年齢＝ＡＥＳ（０）  （式２）
【００７４】
ここで、検索例１と同様に、秘匿処理部１１は、さらに、一致検索の「年齢」の条件をＡＥＳ（１）からＡＥＳ（１２０）まで変動させたＳＱＬをそれぞれ発行する。
【００７５】
秘匿処理部１１は、これらのＳＱＬを実行して各年齢の人数を取得すると、平均年齢を算出する。
【００７６】
これにより、統計処理を含む場合であっても、暗号化されたデータを有するデータベースを暗号のまま検索することができる。
【００７７】
本実施形態に係るデータベースシステムによれば、ユーザはデータが暗号化されていることをまったく意識せずに検索をすることができる。一致検索以外の検索や統計処理を必要とする場合であっても、秘匿処理部１１が作成するクエリプランに従って処理を行うことにより、データベースサーバ２において暗号化されたデータの検索を行うことができる。
【００７８】
さらに、本実施形態では、数値の項目の上限及び／または下限が定められているときは、その最大値及び最小値を用いて検索範囲を制限することで、実行すべき一致検索の数を減らすことができ、処理をより高速化できる。例えば、年齢のカラムは２バイトなので、すべてについて一致検索を行う場合、全部で６５５３６個のクエリを発行する必要がある。これに対して、最大値と最小値の範囲内で検索を行えば、検索回数を検索例１では９１個、検索例２では１２１個に抑えることが可能となる。
【００７９】
このように検索範囲を最大値と最小値の範囲を制限することにより検索数を制限した場合であっても、検索数が膨大になり、検索に時間がかかる場合はある。そこで、一つのテーブルに対する検索数の上限を設けても良い。例えば、テーブル作成時に情報管理部１２のテーブル管理情報１２０に検索個数の上限値を登録し、秘匿処理部１１が生成した検索数がこの上限数を超えたときにはエラーとしたり、実行要否をユーザに照会したりしても良い。あるいは、あらかじめ計測したカラム一つの全探索１回の処理時間に基づいて、要求された検索を実行するのに要する時間をユーザに提示してもよい。
【００８０】
また、本実施形態では、暗号化にＡＥＳ暗号を用いたが、ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）などの他の暗号化方式であっても良いし、特許文献１のような独自暗号を用いても良い。独自暗号を用いる場合、データベースのＵＤＦ（Ｕｓｅｒ  Ｄｅｆｉｎｅ  Ｆｕｎｃｔｉｏｎ）という外部関数に判定処理を委託する機能を用いて、一致判定処理のみを外部関数に依頼することで対応可能となる。
【００８１】
上記の実施形態では、各カラムの最大値及び最小値をテーブル作成時に設定しているが、これに限られない。例えば、秘匿処理部１１が、テーブルにデータを登録する際に、登録するデータの最大値及び最小値と、テーブル管理情報１２０に登録済みの最大値及び最小値とをカラムごとに比較して、登録済みの最大値よりも大きな値があるとき及び登録済みの最小値よりも小さな値があるときは、テーブル管理情報１２０の最大値及び最小値を更新してもよい。この場合、テーブルのデータが削除されると、データの内容とテーブル管理情報１２０の最大値及び最小値に不整合が生じる可能性がある。そのため、データの削除があったときは、秘匿処理部１１が所定のタイミング（一定の時間間隔、一定回数削除があった、など）で、全ての範囲のクエリをデータベースに発行して、最大値と最小値の値を更新してもよい。
【００８２】
また、最大値や最小値ではなくビットマップ形式で管理しても良い。例えば、最大値が１００００の場合、１００００ビットの各ビットで数値と対応（数値の０は０ビット目、数値の１は１ビット目、・・・）させて、データベースに少なくとも１つ以上存在するかしないかを「１」と「０」で表現しても良い。この「１」と「０」の設定は、予め離散的な値しかとらないことが分かっていればテーブル作成時に各ビットの「１」と「０」を設定しても良いし、上記のように動的に更新する形でも良い。また、ビットマップ形式と最大値、最小値を併用しても良い。
【００８３】
本実施形態では、文字列（ＣＨＡＲ）の項目についても、出現する可能性があるものをすべてテーブル管理情報１２０に登録しておいても良い。例えば、住所のカラムについては、４７都道府県をすべてテーブル管理情報１２０に登録しておいても良い。そして、都道府県別の人数のヒストグラムを取るような命令がきたときは、４７都道府県別にユーザ数をカウントするクエリを発行すればよい。この処理では、平文のデータ型が文字列の場合でも暗号化したまま、ヒストグラム（統計処理）を作成することが可能である。この場合も予め、４７パターンをテーブル登録時に登録しても良いし、動的に更新する形にしても良い。
【００８４】
＜実施形態２＞
次に、本発明の第２の実施形態にかかるデータベースシステムについて説明する。なお、以下の説明において第１の実施形態と同等の機能または構成については共通の符号を付して説明を省略する場合がある。
【００８５】
図５は、本実施形態にかかるデータベースシステムの構成図である。
【００８６】
本実施形態では、クライアント１の秘匿処理部１４は、第１の実施形態の秘匿処理部１１の機能に加えて、さらにまとめコマンドを生成する。まとめコマンドについては後述する。データベースサーバ２は、第１の実施形態の構成に加えて、さらにクエリ処理部２３を有する。本実施形態では、クライアント１と、データベースサーバ２のクエリ処理部２３とが、データベースを管理するシステムとして機能する。
【００８７】
クエリ処理部２３は、クライアント１からまとめコマンドを受け付けたときに、クエリの実行回数を減らす実行プランを作成して実行する。
【００８８】
例えば、クライアント１が受け付けた検索条件が複数の段階に分けて検索を行うことが可能であるときは、後段の検索が前段の検索結果を利用して、前段から順次行う多段階検索が行われるようにしてもよい。例えば、検索条件に第１カラムの値の範囲の指定、及び第２カラムの値の範囲の指定が含まれるときは、データベースサーバ２において、第１段階の検索として第１のカラムについて複数の第１の検索コマンドが実行され、第２段階の検索として第２のカラムについて複数の第２の検索コマンドが実行されるようにしても良い。このとき、第２段階の検索は、第１段階の検索を実行した結果のデータを母集団として実行される。各検索コマンドは一致検索でよく、その検索条件では、指定されたカラムの値の範囲内の個別の値が暗号化されている。なお、以下の実施形態では２段階の検索について説明するが、検索条件によっては３段階以上の検索に分解される場合もある。
【００８９】
第１の実施形態と同様の手順で、データベースサーバ２にテーブルが生成され、データの登録が行われる。本実施形態でも図２の名簿テーブル２２０が登録されている。
【００９０】
検索例３として、年齢が３０代で年収６００万円〜６９９万円のユーザのリストを表示する例を述べる。
【００９１】
この検索例３は、秘匿処理部１４が年齢３０〜３９歳のそれぞれについて、年収６００〜６９９万円の人の情報を抽出するクエリプランを生成する。
【００９２】
ここで、このクエリプランを第１の実施形態のデータベースシステムで実行したとき、データベース部２１では、（式３）に示すような１０００個のＳＱＬが実行される。すなわち、これらのＳＱＬは、その検索条件（ｗｈｅｒｅ句）において、年齢が３０〜３９の１０種類と年収が６００〜６９９の１００種類の組み合わせた合計１０００通りである。
「Ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  名簿  ｗｈｅｒｅ  年齢＝ＡＥＳ（３０）,年収＝ＡＥＳ（６００）；
「Ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  名簿  ｗｈｅｒｅ  年齢＝ＡＥＳ（３０）,年収＝ＡＥＳ（６０１）；
・・・
「Ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  名簿  ｗｈｅｒｅ  年齢＝ＡＥＳ（３９）,年収＝ＡＥＳ（６９９）；
（式３）
【００９３】
これに対して第２の実施形態では、秘匿処理部１４とクエリ処理部２３とが連携することにより、１０００個の一致検索を実行するよりも効率的な処理を行う。すなわち、本実施形態では、秘匿処理部１４がクエリプランを作成するときにこれらの一致検索をグループ化したまとめコマンドとする。まとめコマンドとは、元々一つの要求から生じたクエリであって、まとめて処理できるクエリである。
【００９４】
クエリ処理部２３は、クエリプランに従って１４で生成された複数の一致検索に基づいて、第１段階の検索として第１のカラム（年齢）について暗号鍵で暗号化したデータを含む複数の第１の検索コマンドを生成する。クエリ処理部２３は、その複数の第１の検索コマンドをデータベース部２１へ依頼して実行させる。第１段階の検索の実行結果データを母集団として、クエリ処理部２３は、さらに、複数の一致検索に基づいて、第２段階の検索として第２のカラム（年収）について暗号鍵で暗号化したデータを含む複数の第２の検索コマンドを生成して、データベース部２１に実行させる。
【００９５】
この例では、秘匿処理部１４が（式３）の１０００個の一致検索を行うＳＱＬをまとめコマンドであることを示す情報と一緒にクエリ処理部２３へ送る。
【００９６】
図６は、クエリ処理部２３の処理手順を示すフローチャートを示す。
【００９７】
クエリ処理部２３は、クライアント１から検索コマンドを受け付けると、コマンド判定を行う（Ｓ２００）。ここで、受け付けた複数の検索コマンドがまとめコマンドでなければ、そのままその検索コマンド（ＳＱＬ）をデータベース部２１に送ることで通常の処理が可能になる。
【００９８】
一方で、ステップＳ２００でまとめコマンドであることが分かると、クエリ処理部２３は、まとめコマンドに含まれるすべてのＳＱＬを解析し（Ｓ２０１）、クエリ処理部２３が行う実行プランを決めて実行する（Ｓ２０２）。この実行プランが実行されて得られた暗号データがクライアント１へ送られる。
【００９９】
この例では、「年齢」と「年収」の二つ以上の検索条件が組み合わされている。クエリ処理部２３はステップＳ２０１の解析で、二つの検索条件を検出する。そして、クエリ処理部２３は、この検索条件を分けて、２段階で検索を行うように実行プランを生成し、実行する。例えば、クエリ処理部２３は、年齢に関する条件で検索を行い、この検索結果を母集団としてさらに年収に関する条件で検索を行う。これにより、実行されるクエリ数を大幅に減らすことができる。
【０１００】
例えば、クエリ処理部２３は、まず、「年齢」がＡＥＳ（３０）〜ＡＥＳ（３９）のユーザの情報を検索する１０個の一致検索をデータベース部２１に発行する。その結果、検索結果として取得した３０歳代ユーザのデータをクエリ処理部２３が管理できるようになる。本実施形態の場合は、１万人中３０００人が抽出されたとする。
【０１０１】
次に、クエリ処理部２３が、この抽出された３０００人のデータを母集合として、「年収」のカラムでＡＥＳ（６００）〜ＡＥＳ（６９９）と一致する人を検索する。この条件に該当するユーザが１００人いるとすると、クエリ処理部２３は、この１００人の「ＩＤ」「年齢」「性別」「住所」「年収」の暗号化されたデータを抽出して、秘匿処理部１４に返却する。
【０１０２】
秘匿処理部１４は、暗号化されたデータを復号した後、ユーザインタフェース部１０を通じて、ユーザに復号した検索結果を提示する。
【０１０３】
これにより、秘匿処理部１４とクエリ処理部２３が連携することで、マッチング回数を大幅に削減することが可能となる。
【０１０４】
第一の実施形態のデータベースシステムで検索例３を処理した場合、「年齢」１０種類×「年収」１００種類×テーブルの件数１万件の合計１０００万回のマッチング処理が発生するが、第２の実施形態では、はじめは「年齢」１０種類×１万件のマッチング処理が必要になるが、３０代のユーザを先に絞ると３０００人になるので、その後は「年収」１００種類×３０００人のマッチング処理を良く、合計すると４０万回となり、マッチング処理の回数を大幅に削減することができる。
【０１０５】
このように、秘匿処理部１４とクエリ処理部２３が連携することで、データベースサーバ内で効率よく統計処理が行えるようになる。さらに、データベースサーバ２とクライアント１と間の通信量も少なくなるため、通信帯域の削減もできるという利点もある。
【０１０６】
なお、本実施形態では、データベースサーバ２内にクエリ処理部２３がある例を説明したが、物理的に同一の装置内に無くても良い。例えば、クエリ処理部２３は別のコンピュータ上に実現されていて、このコンピュータとデータベースサーバ２とはネットワークを介して接続されていても良い。
【０１０７】
本実施形態では、まとめコマンドを用いて秘匿処理部１４とクエリ処理部２３が連携する例を説明したが、クエリ処理部２３で同様の処理ができるようなコマンドを送ることができれば他の方法でも良い。例えば、クエリ処理部２３のＳ２０２で実行プランを生成したが、秘匿処理部１４で同様の実行プランを生成し、特殊コマンドとしてその実行プランをクエリ処理部２３に渡すとしても良い。この場合は、クエリ処理部２３の処理は、図６のＳ２０１とＳ２０２が無くなり、Ｓ２０３の実行プランの実行だけになる。
【０１０８】
また、本実施形態では、複数の段階に分けて検索を行う多段階検索の例で説明したが、まとめコマンドは第一の実施形態で説明した平均値の算出などの統計処理にも応用できる。例えば、第一の実施形態では、クライアント１で各数字の出現個数を取得するＳＱＬを発行した後、その出現個数に基づいて平均値を算出したが、本実施形態を応用すると、データベースサーバ２内のクエリ処理部２３で出現個数を取得するＳＱＬを発行した後、その出現個数に基づいて平均値を求めて、結果の平均値だけをクライアント１に返却してもよい。
【０１０９】
＜実施形態３＞
次に、本発明の第３の実施形態にかかるデータベースシステムについて説明する。なお、以下の説明において第１の実施形態及び第２の実施形態と同等の機能または構成については共通の符号を付して説明を省略する場合がある。
【０１１０】
図７は、第３の実施形態に係るデータベースシステムを示す。
【０１１１】
本実施形態に係るデータベースサーバ２は、ネットワーク部２０と、クエリ処理部２４と、データベース部２１と、アクセラレータ２５とを有する。本実施形態では、クライアント１と、データベースサーバ２のクエリ処理部２４と、アクセラレータ２５とが、データベースを管理するシステムとして機能する。
【０１１２】
本実施形態では、クエリ処理部２４はクエリ処理部２３と同様の処理を行うが、第２の実施形態ではクエリ処理部２３がデータベース部２１へ複数の検索コマンドを一つずつ送っていたのに対して、本実施形態ではクエリ処理部２４はアクセラレータ２５へ複数の検索コマンドをまとめて送り、アクセラレータ２５が検索を実行する点が異なる。
【０１１３】
アクセラレータ２５とは、例えば、ＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）でよい。ＧＰＵは、数百コア以上の演算器を使って一致判定ができるので、ＣＰＵよりも高速に処理できる。また、アクセラレータ２５は、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）やＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などでもよい。この場合は、パイプランで一致判定を実行できるので、ＣＰＵで順次判定するより高速に処理できる。
【０１１４】
本実施形態では、クエリ処理部２４が一致判定するデータをすべて管理している。そのため、一致判定条件と一致判定が必要なデータをすべてアクセラレータ２５へ転送して、並列もしくはパイプラインで高速に判定してもらうことが可能になる。
【０１１５】
また、本方式は、単純な一致検索ではなく、特にＵＤＦ機能を用いた独自暗号のときに外部関数に依頼する一致判定処理をアクセラレータで処理できるので、特に有効である。
【０１１６】
＜システムの変形例＞
第１〜第３の実施形態では、クライアントが１つの例を説明したが、本発明ではクライアント数の制限は特にない。但し、情報管理部１２が管理するテーブル情報１２０は全クライアントに共通するので、ネットワーク部１３を通じて、各クライアント１間で同期するなどの共有の仕組みが必要になる。
【０１１７】
同期の方法は、例えば、テーブル作成時に、全クライアント１の情報管理部１２のテーブル情報１２０を同期させるようにしても良い。あるいは、複数のクライアント１の中からマスタ情報を有するマスタクライアントを決めて、他のクライアントは随時マスタクライアントに問い合わせるようにしてもよい。あるいは、鍵情報はクライアントで管理して、その他の情報は、データベース部２１でマスタ情報を管理するようにしても良い。
【０１１８】
また、本実施形態では、ＳＱＬで問い合わせ可能なデータベースの例を説明したが、データベースはこれに限定されず、ＫＶＳ形式のＮｏＳＱＬのデータベースを用いても良い。
【符号の説明】
【０１１９】
１  クライアント
２  データベースサーバ
３  ネットワーク
１０  ユーザインタフェース部
１１  秘匿処理部
１２  情報管理部
１３  ネットワーク部
２０  ネットワーク部
２１  データベース部
２２  記憶部
【図１】
2018097625.tif 000003
【図２】
2018097625.tif 000004
【図３】
2018097625.tif 000005
【図４】
2018097625.tif 000006
【図５】
2018097625.tif 000007
【図６】
2018097625.tif 000008
【図７】
2018097625.tif 000009