JP6449093B2 - 秘匿化データベースシステム及び秘匿化データ管理方法 - Google Patents

秘匿化データベースシステム及び秘匿化データ管理方法 Download PDF

Info

Publication number
JP6449093B2
JP6449093B2 JP2015087303A JP2015087303A JP6449093B2 JP 6449093 B2 JP6449093 B2 JP 6449093B2 JP 2015087303 A JP2015087303 A JP 2015087303A JP 2015087303 A JP2015087303 A JP 2015087303A JP 6449093 B2 JP6449093 B2 JP 6449093B2
Authority
JP
Japan
Prior art keywords
encrypted
database
unit
data
sql
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015087303A
Other languages
English (en)
Other versions
JP2016206918A (ja
Inventor
啓成 藤原
啓成 藤原
小島 剛
剛 小島
雅之 吉野
雅之 吉野
佐藤 嘉則
嘉則 佐藤
鈴木 貴之
貴之 鈴木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2015087303A priority Critical patent/JP6449093B2/ja
Priority to PCT/JP2016/062826 priority patent/WO2016171271A1/ja
Publication of JP2016206918A publication Critical patent/JP2016206918A/ja
Application granted granted Critical
Publication of JP6449093B2 publication Critical patent/JP6449093B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、データを暗号化して他者に預託する秘匿化データベースシステムに関する。
近年、ストレージの低価格化及び大規模化、及びネットワークの整備などの様々な情報技術の発展に伴い、蓄積される情報量が増大している。このような状況の下、いわゆるビックデータを利活用しようという動きが活発化している。
ところで、多種多様な医療情報、経営情報、個人情報が取り扱われる医療機関においては、機関全体のビックデータの利活用によるグループ全体のリソース及び業務の最適化が有効である。医療機関にとって、高度なビッグデータ分析基盤は本来業務とは異なり過大な投資は難しいため、効果に応じた投資が可能なクラウド上のビッグデータ分析基盤の利用が適する。
ただし、医療情報、個人情報は極めて機微性が高く、クラウド側でのデータの復元やデータ持ち出し等の情報漏えいリスクに対処する必要がある。その対処法の一つとして、病院側のみがデータの秘匿化の鍵を持つことにより、クラウド上でのデータの復元が不可能とし、クラウド側でのデータの持ち出しリスクを低減する秘匿化データベースシステムが有効である。さらに、暗号化したままでのデータの検索を可能とする検索可能暗号技術などを用いることにより、データセンタでデータを復号化することなく、検索及び分析を可能とすることが有効である。
本技術の背景技術として、国際公開2013/069776号公報(特許文献1)、国際公開2012/077541号公報(特許文献2)がある。特許文献1には、データベースシステムにネットワークを介して接続するユーザシステムであって、暗号化と復号化のための鍵情報を管理する手段と、データ及び/又はメタデータの安全性設定情報を記憶する記憶部と、データベース操作命令に対して暗号化の必要の有無を判別し、暗号化が必要な場合、データ及び/又はメタデータに応じた暗号化アルゴリズムを選択して暗号化した上でデータベース制御手段に送信してデータベースの操作を実行し、暗号化が不要な場合、前記データベース操作命令をデータベース制御手段に送信してデータベース操作を実行し、前記データベース制御手段から送信された処理結果を受け取り、前記処理結果のデータ及び/又はメタデータの復号化あるいは変換が必要な場合、必要な復号化あるいは変換を行い、前記データベース操作命令の応答として返すアプリケーション応答手段と、データベースに格納するデータの安全性情報を設定する安全性設定手段を備えるシステムが開示されている。
また、特許文献2には、データを預かるDBサーバと、DBサーバにデータを預託する登録クライアントと、DBサーバにデータを検索させる検索クライアントがネットワーク経由で連携する検索可能暗号処理ステムであって、登録クライアントは、ハッシュ値と準同型関数を用いたマスクによる確率的暗号化方式を用いて、暗号化したデータをサーバに預託し、検索クライアントは、検索クエリの暗号化に準同型関数を用いたマスクによる確率的暗号化を用い、DBサーバにマスクを解除させずに、かつ、DBサーバに検索に該当するデータの出現頻度が漏洩しないよう、検索クエリと該当しないデータを検索結果として出力させるシステムが開示されている。
国際公開2013/069776号公報 国際公開2012/077541号公報
ところで、通常のデータベースにおける大容量データの高速検索の手段の一つとして、データベースのインデックス機能がある。インデックス機能は、特定のカラムに対して索引に相当するデータ構造を持つことで、検索対象範囲を絞り込むことにより、高速な検索を可能とする。しかし、ユーザ側のみが鍵を持つシステムの場合、暗号化されているデータの検索においては、通常のデータベースのインデックス機能が有効でない場合がある。その場合、多量のデータの高速検索ができない。従来技術では、通常のインデックス機能が有効でない暗号化状態のデータベースにおいて、多量のデータの高速検索を可能とする手段は開示されていない。
また、通常のデータベースのインデックス機能は、検索対象となる属性値の出現頻度によって有効な場合と有効ではない場合がある。例えば、あるデータベース製品は、検索対象の属性値の頻度が、その属性の属性値数に対して一定の割合を超えているか否かによって、インデックスの使用要否を自動的に判断する。しかし、頻度分布が分からないようにデータが暗号化されている場合、クラウド側では頻度分布によるインデックスの使用要否を判断できない。
本発明は、以上の点を考慮してなされたもので、暗号化された多量のデータの高速検索を可能とする秘匿化データベースシステムを提案するものである。
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、ユーザシステムが所有する元データをデータ所有者が管理する暗号鍵によって暗号化した暗号化データが預託されるセンタシステムによって構成される秘匿化データベースシステムであって、前記センタシステムは、前記預託された暗号化データを元データに復号化することなく検索する機能を提供するものであって、前記ユーザシステムは、前記暗号化データを処理するための平文のSQL文を、前記暗号化データを前記センタシステム上で処理する暗号化SQL文に変換し、前記センタシステムから受信した暗号化データの処理結果を復号化するデータベースラッパー部を有し、前記センタシステムは、前記暗号化データを格納する暗号化預託データテーブルと、前記元データのハッシュ値を暗号化した暗号化ハッシュ値を格納し、前記暗号化預託データテーブルの検索範囲を限定するために参照されるハッシュテーブルと、前記暗号化預託データテーブルに格納された暗号化データを検索するデータベース制御部と、前記暗号化データと検索クエリとの一致を判定する暗号文一致比較部と、を有し、前記データベースラッパー部は、前記暗号化データを検索するための平文のSQL文を、前記暗号化データを前記センタシステム上で処理する暗号化SQL文に変換し、前記センタシステムが受信した前記暗号化SQL文を実行することによって、前記データベース制御部が前記ハッシュテーブルを検索して前記暗号化データの範囲を限定し、前記暗号文一致比較部が前記限定された範囲の暗号化データについて前記暗号化SQL文が指示する一致比較を行い、前記データベース制御部が前記暗号化SQL文の実行結果を前記ユーザシステムへ送信し、前記データベースラッパー部は、前記データベース制御部から受信したSQL文の実行結果を復号化し、前記暗号化データの検索結果を出力する。
本発明の代表的な形態によれば、暗号化した多量のデータを高速で検索することができる。前述した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
本発明の第一の実施例の秘匿化データベースシステムのハードウェア及びソフトウェア構成を示すブロック図である。 第一の実施例のデータベースラッパー部の論理構成を示すブロック図である。 第一の実施例のユーザ定義機能部の論理構成を示すブロック図である。 第一の実施例のメインテーブルのデータ構造を示す図である。 第一の実施例の秘匿インデックスマップテーブルのデータ構造を示す図である。 第一の実施例の暗号化メインテーブルのデータ構造を示す図である。 第一の実施例のハッシュテーブルのデータ構造を示す図である。 第一の実施例の秘匿インデックス検索クエリ生成処理を示すフローチャートである。 第一の実施例の秘匿インデックス検索処理を示すフローチャートである。 第一の実施例の検索結果復号処理を示すフローチャートである。 第一の実施例の秘匿インデックス挿入クエリ生成処理を示すフローチャートである。 第一の実施例の秘匿インデックス挿入処理を示すフローチャートである。 第一の実施例の秘匿インデックス更新クエリ生成処理を示すフローチャートである。 第一の実施例の更新対象IDリスト取得処理を示すフローチャートである。 第一の実施例の秘匿インデックス用更新対象IDテーブル取得処理を示すフローチャートである。 第一の実施例の秘匿インデックス更新処理を示すフローチャートである。 第一の実施例の秘匿インデックス削除クエリ生成処理を示すフローチャートである。 第一の実施例の秘匿インデックス削除処理を示すフローチャートである。 第二の実施例の秘匿化データベースシステムのハードウェア及びソフトウェア構成を示すブロック図である。 第二の実施例のデータベースラッパー部の論理構成を示すブロック図である。 第二の実施例のユーザ定義機能部の論理構成を示すブロック図である。 第二の実施例の秘匿インデックスマップテーブルのデータ構造を示す図である。 第二の実施例の暗号化メインテーブルのデータ構造を示す図である。 第二の実施例のマッピングテーブルのデータ構造を示す概念図である。 第二の実施例のハッシュテーブルのデータ構造を示す図である。 第二の実施例の秘匿インデックス検索クエリ生成処理を示すフローチャートである。 第二の実施例の秘匿インデックス検索処理を示すフローチャートである。 第二の実施例の秘匿インデックス挿入クエリ生成処理を示すフローチャートである。 第二の実施例の秘匿インデックス挿入処理を示すフローチャートである。 第二の実施例の秘匿インデックス更新クエリ生成処理を示すフローチャートである。 第二の実施例の秘匿インデックス用更新対象IDテーブル取得処理を示すフローチャートである。 第二の実施例の秘匿インデックス更新処理を示すフローチャートである。 第二の実施例の秘匿インデックス削除クエリ生成処理を示すフローチャートである。 第二の実施例の秘匿インデックス削除処理を示すフローチャートである。 第二の実施例のマッピングテーブルの並べ替えクエリ生成処理を示すフローチャートである。 第二の実施例のマッピングテーブルの並べ替え処理を示すフローチャートである。 第三の実施例のデータベースラッパー部の論理構成を示すブロック図である。 第三の実施例の頻度分布平準化前のマッピングテーブルのデータ構造を示す図である。 第三の実施例の頻度分布平準化後のマッピングテーブルのデータ構造を示す図である。 第三の実施例のマップID頻度分布平準化クエリ生成処理を示すフローチャートである。 第三の実施例のマップID頻度分布平準化処理を示すフローチャートである。
以下、図面を参照して本発明の実施の形態を詳述する。
(1)第一の実施例
(1−1)第一の実施例による情報処理システムの構成
図1は、本発明の第一の実施例の秘匿化データベースシステム1のハードウェア及びソフトウェア構成を示すブロック図である。秘匿化データベースシステム1は、ユーザシステム側サーバ3が持つ元データを暗号化して、クラウドシステム側サーバ4に預託し、さらに、クラウドシステム側サーバ4が預託されたデータに対する検索機能及び分析機能をユーザシステム側サーバ3に提供するシステムである。
秘匿化データベースシステム1は、図1に示すように、ユーザ端末2、ユーザシステム側サーバ3、及びクラウドシステム側サーバ4によって構成される。ユーザ端末2とユーザシステム側サーバ3とは、ユーザの事業所内のローカルエリアネットワーク等からなるユーザ内部ネットワーク5を介して接続されている。ユーザシステム側サーバ3とクラウドシステム側サーバ4とは、ユーザ内部ネットワーク5、インターネットやキャリアが提供するワイドエリアネットワーク等からなる外部ネットワーク6及びクラウド事業者のデータセンタ内のローカルエリアネットワーク等からなるクラウド内部ネットワーク7を介して接続される。
ユーザ端末2は、エンドユーザが使用するパーソナルコンピュータ、タブレット端末、スマートフォン等の装置であり、表示装置、入力装置、不揮発性記憶装置(磁気ディスクドライブ、SSD)、メモリ、CPU及びネットワークインタフェース等を有する。ユーザ端末2は、エンドユーザが入力装置から入力した要求を暗号化していない平文でユーザシステム側サーバ3のアプリケーション部211に送信し、当該要求に対する結果を受信し、表示装置に結果を表示し、福発性記憶装置に結果を記憶する。
ユーザシステム側サーバ3は、メモリ210、表示装置220、入力装置230、CPU240、ネットワークインタフェース装置(NIC)250及びディスク装置260などを有する計算機である。ユーザシステム側サーバ3は、ユーザ端末2から受信した平文の要求から暗号文のSQLを生成し、クラウドシステム側サーバ4へ送信し、SQL文に対する暗号文による結果を受信し、受信した暗号文を復号化し、平文の結果をユーザ端末2へ送信する。
アプリケーション部211は、CPU240が、ディスク装置260、外部記憶媒体又はユーザ内部ネットワーク5経由でアプリケーションプログラムをメモリ210に読み出し、CPU240が読み出したアプリケーションプログラムを実行することによって構成される。アプリケーション部211は、ユーザ端末2から受信した平文の要求を処理し、処理の過程で必要な平文のSQL文をデータベースラッパー部212へ送信し、SQL文に対する平文の結果を受信する。
データベースラッパー部212は、CPU240が、ディスク装置260、外部媒体又はユーザ内部ネットワーク5経由でプログラムをメモリ210に読み出し、CPU240が読み出したプログラムを実行することによって構成される。データベースラッパー部212は、アプリケーション部211から受信した平文のSQLを、ディスク装置260の秘匿インデックスマップテーブル262の情報を利用して暗号文のSQLに変換し、データベースインタフェース部213へ送信する。さらに、SQL文に対する暗号文による結果をデータベースインタフェース部213から受信し、平文に復号化して、平文の結果をアプリケーション部211へ送信する。
データベースインタフェース部213は、CPU240が、ディスク装置260、外部媒体又はユーザ内部ネットワーク5経由でプログラムをメモリ210に読み出し、CPU240が読み出したプログラムを実行することによって構成される。データベースインタフェース部213は、データベースラッパー部212から受信した暗号文のSQLをクラウドシステム側サーバ4へ送信し、クラウドシステム側サーバ4から暗号文による結果を受信して、データベースラッパー部212へ送信する。
ディスク装置260は、ハードディスクドライブ又はソリッドステートドライブなどの不揮発性記憶装置から構成され、メインテーブル261及び秘匿インデックスマップテーブル262を記憶する。メインテーブル261は、クラウドシステム側サーバ4へ預託する前の平文の情報を格納する。秘匿インデックスマップテーブル262は、クラウドシステム側サーバ4上の暗号化メインテーブル361の情報へ高速にアクセスするための関連情報を格納する。
クラウドシステム側サーバ4は、ユーザシステム側サーバ3と同様に、メモリ310、表示装置320、入力装置330、CPU340、ネットワークインタフェース装置(NIC)350及びディスク装置360などを備えた計算機等から構成される。クラウドシステム側サーバ4は、ユーザシステム側サーバ3から受信した暗号文のSQLを実行し、得られた暗号文の実行結果をユーザシステム側サーバ3へ送信する。
データベース制御部311は、CPU340が、ディスク装置360、外部媒体あるいはクラウド内部ネットワーク7経由でプログラムをメモリ310に読み出し、読み出したプログラムをCPU340が実行することによって構成される。データベース制御部311は、ユーザシステム側サーバ3から暗号文のSQLを受信し、ハッシュテーブル362の情報とユーザ定義機能部312の機能を利用して暗号化メインテーブル361に対して暗号文のSQLを実行し、得られた暗号文による結果をユーザシステム側サーバ3へ送信する。
ユーザ定義機能部312は、CPU340が、ディスク装置360、外部媒体あるいはクラウド内部ネットワーク7経由でプログラムをメモリ310に読み出し、読み出したプログラムをCPU340が実行することによって構成される。ユーザ定義機能部312は、データベース制御部311からユーザ定義機能への入力情報を受け、異なる暗号文の元の平文が一致しているか否かを判定するユーザ定義機能による処理を実行し、処理結果をデータベース制御部311へ出力する。
ディスク装置360は、ハードディスクドライブ又はソリッドステートドライブなどの不揮発性記憶装置から構成され、暗号化メインテーブル361及びハッシュテーブル362を記憶する。暗号化メインテーブル361は、メインテーブル261を暗号化して格納する。ハッシュテーブル362は、暗号化メインテーブル361に対するアクセスを高速化するための情報を格納する。
図2は、データベースラッパー部212の論理構成を示す。データベースラッパー部212は、暗号化部2121、検索クエリ生成部2122、復号化部2124、鍵管理部2125、SQL変換部2126、及び秘匿インデックス用SQL変換部2127で構成される。
暗号化部2121は、平文及び鍵管理部2125から取得した暗号化鍵を入力とし、入力された平文を暗号文に変換して、暗号文を出力する。
検索クエリ生成部2122は、暗号化メインテーブル361に格納された暗号化データと検索データとの一致検索に必要な検索クエリを生成する。すなわち、検索クエリ生成部2122は、平文の検索データ及び鍵管理部2125から取得した暗号化鍵及び検索用鍵を入力とし、検索データと一致する暗号化メインテーブル361の暗号化データを識別するための入力情報となる暗号化検索クエリを生成し、暗号化検索クエリを出力する。
ハッシュ値生成部2123は、平文データと生成するハッシュ値の種類数を指定するハッシュ長を入力とし、平文データをハッシュ関数で処理した平文のハッシュ値を取得し、平文のハッシュ値を出力する。
復号化部2124は、暗号文及び鍵管理部2125から取得した暗号化鍵を入力とし、入力された暗号文を平文に変換して、平文を出力する。
鍵管理部2125は、暗号化、復号化及び検索クエリ生成に用いられる鍵情報を管理する。すなわち、鍵管理部2125は、暗号化鍵データ及び検索用鍵データをメモリ210及び/又はディスク装置260に格納し、暗号化部2121、検索クエリ生成部2122又は復号化部2124からの鍵の要求に対して、暗号化鍵データ又は検索用鍵データを提供する。なお、暗号化鍵データ及び検索用鍵データの両方を提供してもよい。
SQL変換部2126は、暗号化メインテーブル361のみに対し処理を行うSQLを作成する。すなわち、SQL変換部2126は、平文のSQLを入力とし、検索データを暗号化検索クエリに置き換え、挿入又は更新する平文データを暗号文データに置き換え、一致比較文をユーザ定義機能部312の暗号文一致比較部3121を呼び出すユーザ定義関数呼出文に置き換えた暗号化SQL文を生成する。そして、暗号化SQL文をデータベースインタフェース部213へ送信する。
秘匿インデックス用SQL変換部2127は、暗号化メインテーブル361とハッシュテーブル362に対する処理を行う。すなわち、秘匿インデックス用SQL変換部2127は、平文のSQLを入力とし、検索データを暗号化検索クエリに置き換え、検索データからハッシュ値を生成する。そして、生成されたハッシュ値を暗号化検索クエリに置き換え、挿入又は更新する平文データを暗号文データに置き換え、挿入又は更新する平文データから平文ハッシュ値を生成する。そして、生成された平文ハッシュ値を暗号文ハッシュ値に置き換え、ハッシュテーブル362及び暗号化メインテーブル361に対して参照、挿入、更新及び削除の少なくとも一つの処理を行う暗号化SQL文を生成する。そして、暗号化SQL文をデータベースインタフェース部213へ送信する。
図3は、ユーザ定義機能部312の論理構成を示す。ユーザ定義機能部312は、暗号文一致比較部3121で構成される。暗号文一致比較部3121は、検索用鍵データをメモリ310及び/又はディスク装置360に格納し、データベース制御部311から暗号化検索クエリ及び暗号文データの入力を受け、検索用鍵を用いて暗号化検索クエリを暗号文データとの一致比較が可能な一致検索クエリに復号し、一致検索クエリと暗号化データとを一致比較する。そして、一致検索クエリと暗号化データとが一致する場合、一致を示す値(例えば、”1”)を出力し、一致検索クエリと暗号化データとが一致しない場合、不一致を示す値(例えば、”0”)を出力する。
図4は、暗号化して預託される前の平文データを示すメインテーブル261のデータ構造を示す。メインテーブル261は、ユーザシステム側サーバ3のディスク装置260又はメモリ210に格納される。メインテーブル261は、ディスク装置260及びメモリ210の両方に格納されてもよい。本実施例では病院のデータであり、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルを想定している。メインテーブル261は、患者を一意に特定する番号である”患者番号”カラム、患者の名前である”名前”カラム、及び患者の疾病の種類を示す”病名”カラムを含む。例えば、レコード2611は、患者番号が”0000001”の患者の名前は”鈴木”であり、病名は”高血圧症”であることを示す。メインテーブル261は患者番号が”0000001”から”1000000”まで、100万件のレコードを格納している。
図5は、検索を高速化するハッシュテーブル362と暗号化メインテーブル361のマップIDカラムとを関連付ける情報を格納する秘匿インデックスマップテーブル262のデータ構造を示す。秘匿インデックスマップテーブル262は、ユーザシステム側サーバ3のディスク装置260又はメモリ210に格納される。秘匿インデックスマップテーブル262は、ディスク装置260及びメモリ210の両方に格納されてもよい。本実施例では病院のデータを想定しており、秘匿インデックスマップテーブル262は、病院のテーブルの種類を分類する”スキーマ名”カラムは、”医療情報”あるいは”経営情報”などが存在することを示す。個々のテーブルの名前を示す”暗号化メインテーブル名”カラムは”患者情報”テーブル、”薬剤情報”テーブル、”投薬情報”テーブル、”医事会計”テーブルなどが存在することを示す。”カラム名”のカラムは、そのカラムに対応するハッシュテーブル362が存在すること、及び暗号化メインテーブル361がハッシュテーブル362との関連を示す”マップID名”カラムを含むことを示す。”マップIDカラム名”カラム及び”ハッシュテーブル名”は、暗号化メインテーブル361が備える”MapID−1”カラムなどのマップIDカラム名と、ハッシュテーブル362(HT1)などのハッシュテーブル362との関連を示す。なお、ハッシュテーブル362は、インデックス化しても検索が高速化されないカラムに対しては生成しない。具体的には、同一の属性値が大部分を占めるようなカラムの属性値の分布を持つカラムに対しては生成しなくてよい。例えば、レコード2621は、”医療情報”スキーマの”患者情報”テーブルにおいて、関連するマップIDカラムとハッシュテーブルを持つ”カラム名”が”病名”であり、関連する”マップIDカラム名”が”MapID−1”であり、関連する”ハッシュテーブル名”が”HT1”であることを示す。
図6は、クラウドシステム側サーバ4が預託されたメインテーブル261の暗号文データを格納する暗号化メインテーブル361のデータ構造を示す。暗号化メインテーブル361は、クラウドシステム側サーバ4のディスク装置360又はメモリ310に格納される。なお、暗号化メインテーブル361は、ディスク装置360及びメモリ310の両方に格納されてもよい。暗号化メインテーブル361は、メインテーブル261に含まれる”患者番号”カラム、”名前”カラム及び”病名”カラムを含む。更に、暗号化メインテーブル361の各レコードを一意に特定する識別子である”ID”カラム及びハッシュテーブル(HT1)362との関連情報である”MapID−1”カラムによって、レコードを構成する。例えば、レコード3611は、暗号化された患者番号が”Enc(0000001)”、暗号化された名前が”Enc(小島)”、暗号化された病名が”Enc(高血圧症)”、レコードの識別子が”1”、及びハッシュテーブル362との関連を示すMapID−1の値が”1”であることを示す。なお、本実施例の説明で、”Enc( )”は、”( )”内の平文データが、暗号化部2121によって暗号化された暗号文であることを示す。また、”ID”カラム及び”MapID−1”カラムには、データベース制御部311の通常のインデックス機能を適用する。
図7は、検索を高速化するために用いるハッシュテーブル362のデータ構造を示す。ハッシュテーブル362は、クラウドシステム側サーバ4のディスク装置360又はメモリ310に格納される。なお、ハッシュテーブル362は、クラウドシステム側サーバ4のディスク装置360及びメモリ310に格納されてもよい。ハッシュテーブル362のレコードは、暗号化メインテーブル361の”MapID−1”カラムとの対応情報を示す”MapID”カラム、及びハッシュ値生成部2123が平文データを変換した平文ハッシュ値を暗号化部2121が暗号化した値を示す”暗号化ハッシュ値”カラムにより構成される。例えば、レコード3621は、暗号化メインテーブル361の”MapID−1”カラムの値と対応する”MapID”の値が”1”であり、MapID=1に対応する”暗号化ハッシュ値”の値が”Enc(0765)”であることを示す。”MapID”カラムの値は、メインテーブル261の一つ以上のレコードの”MapID−1”の値と等しい。このため、”MapID”を指定することによって、暗号化メインテーブル361の全レコードを全件検索することなく、検索範囲を限定することができる。
(1−2)秘匿化データベースの検索に関する処理の流れ
図8、図9及び図10を用いて、秘匿化データベースシステム1において、ハッシュテーブル362を用いた検索である秘匿インデックス検索を行う際の、データベースラッパー部212及びデータベース制御部311が行う一連の処理の詳細を説明する。
図8は、ユーザシステム側サーバ3において、データベースラッパー部212が実行する秘匿インデックス検索クエリ生成処理を示すフローチャートである。秘匿インデックス検索クエリ生成処理は、データベースラッパー部212がアプリケーション部211から平文の検索のSQLを受信すると、開始する。例えば、秘匿インデックス検索クエリ生成処理の開始時にデータベースラッパー部212が受信するSQLは、以下の平文の検索SQL(1)である。

SELECT * FROM 医療情報.患者情報 WHERE 病名=糖尿病 (1)

この検索SQLは、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルから、”病名”カラムの値が”糖尿病”であるレコードを検索し、全てのカラムの値を検索結果として得ることを意味する(ステップ810)。
次に、データベースラッパー部212は、平文の検索SQLから、検索対象のカラムの値を取り出し、検索クエリ生成部2122を用いて暗号化メインテーブル361における一致検索に用いる暗号化検索クエリを取得する。具体的には、データベースラッパー部212は、まず、鍵管理部2125から暗号化鍵及び検索用鍵を取得し、それらを検索クエリ生成部2122に入力し、その出力として暗号化検索クエリを得る。例えば、平文のSQLが(1)である場合、以下の実行文(2)となる(ステップ820)。

暗号化検索クエリ(糖尿病)=検索クエリ生成部(暗号化鍵、検索用鍵、"糖尿病") (2)
次に、データベースラッパー部212は、秘匿インデックスマップテーブル262から、検索対象カラムの”マップIDカラム名”及び”ハッシュテーブル名”を取得する。具体的には、データベースラッパー部212は、平文の検索SQLが検索対象とするスキーマ名、暗号化メインテーブル名及びカラム名の組をキーとして、秘匿インデックスマップテーブル262を検索し、スキーマ名、暗号化メインテーブル名及びカラム名が一致するレコードの”マップIDカラム名”及び”ハッシュテーブル名”を取得する。例えば、平文の検索SQLが(1)である場合、スキーマ名が”医療情報”であり、かつ暗号化メインテーブル名が”患者情報”であり、かつカラム名が”病名”であるレコード2621から、マップIDカラム名”MapID−1”及びハッシュテーブル名”HT1”を取得する(ステップ830)。
次に、データベースラッパー部212は、ステップ830の結果が存在するか否かを判定する(ステップ840)。
ステップ840の結果が存在しない場合(ステップ840でNO)、データベースラッパー部212は、ハッシュテーブル362を用いない検索SQL変換の処理を行う。具体的には、データベースラッパー部212は、平文のSQLの検索対象の値を、ステップ820で生成した暗号化検索クエリに置き換え、さらに、WHERE句の一致比較文をユーザ定義機能部312の暗号文一致比較部3121を呼び出す形式に置き換えた暗号文の検索SQLを出力する。例えば、平文のSQLが(1)、暗号化検索クエリが(2)である場合、以下の暗号文の検索SQL(3)が出力される(ステップ850)。

SELECT * FROM 医療情報.患者情報
WHERE 暗号文一致比較部(病名、暗号化検索クエリ(糖尿病)) (3)
一方、ステップ840の結果が存在する場合(ステップ840でYES)、データベースラッパー部212は、ハッシュテーブル362を用いた高速検索を行うために、ハッシュ値生成から秘匿インデックス用検索SQL変換(ステップ860〜880)の処理を行った暗号文の検索SQLを出力する。
まず、データベースラッパー部212は、検索対象の値をハッシュ値生成部2123に入力し、出力されるハッシュ値を取得する。例えば、平文の検索SQLが(1)である場合、以下のハッシュ値(4)を取得する(ステップ860)。

ハッシュ値 = ハッシュ値生成部(糖尿病)="1012" (4)
次に、データベースラッパー部212は、ハッシュテーブル362を検索するために、ステップ860で取得したハッシュ値を検索クエリ生成部2122に入力し、出力をハッシュテーブル検索クエリとする。例えば、平文のハッシュ値が(4)である場合、以下のハッシュテーブル検索クエリ(5)を取得する(ステップ870)。

ハッシュテーブル検索クエリ(1012)=検索クエリ生成部(暗号鍵、検索用鍵、"1012") (5)
次に、データベースラッパー部212は、まずハッシュテーブル362を検索して検索範囲を限定した上で、暗号化メインテーブル361を検索するためのSQLを生成する秘匿インデックス用検索SQL変換を行う。具体的には、ステップ820で得た暗号化検索クエリと、ステップ830で得たマップIDカラム名及びハッシュテーブル名と、ステップ870で得たハッシュテーブル検索クエリとを入力とし、ハッシュテーブル362をハッシュテーブル検索クエリで検索して該当したレコードの”MapID”カラムの値を取得する。そして、取得した値と等しい”MapID−1”カラムの値を持つ暗号化メインテーブル361のレコードから、暗号化検索クエリと一致する値を持つレコードを、ユーザ定義機能部312の暗号文一致比較部3121を用いて判定し、一致するレコードからメインテーブル261に存在するカラムのみ(”ID”カラム及び”MapID−1”カラム以外)を選択し、検索結果とする暗号文の検索SQLを生成し、出力する。例えば、平文の検索SQLが(1)である場合、以下の暗号文の検索SQL(6)を出力する(ステップ880)。

SELECT 患者番号, 名前, 病名 FROM 医療情報.患者情報
JOIN
(SELECT MapID FROM ハッシュテーブル(HT1)
WHERE
暗号文一致比較部(暗号化ハッシュ値、ハッシュテーブル検索クエリ(1012))
) MapResult
ON 医療情報.患者情報.MapID-1 = MapResult.MapID
WHERE 暗号化一致比較部(病名、暗号化検索クエリ(糖尿病)) (6)
最後に、データベースラッパー部212は、ステップ850又はステップ880で出力された暗号文の検索SQLを、データベースインタフェース部213へ送信する。平文の検索SQLが(1)である場合、ステップ840の結果が存在するため、データベースラッパー部212はステップ880が出力した暗号文の検索SQL(6)をデータベースインタフェース部213へ送信する(ステップ890)。以上によって、データベースラッパー部212は、秘匿インデックス検索クエリ生成処理(図8)を終了する。
図9は、クラウドシステム側サーバ4において、データベース制御部311が実行する秘匿インデックス検索処理を示すフローチャートである。秘匿インデックス検索処理は、データベース制御部311がデータベースインタフェース部213から暗号文の検索SQLを受信すると、開始する。例えば、秘匿インデックス検索処理の開始時にデータベース制御部311が受信するSQLは、暗号文の検索SQL(6)である。
まず、データベース制御部311は、暗号文の検索SQLから、検索対象となるハッシュテーブル362とハッシュテーブル検索クエリとを特定し、ユーザ定義機能部312の暗号文一致比較部3121によって、当該ハッシュテーブル362の”暗号化ハッシュ値”カラムの値と当該ハッシュテーブル検索クエリとが一致するレコードを特定し、特定されたレコードの”MapID”カラムの値をMapID_hitとして取得する。例えば、暗号文の検索SQLが(6)である場合、ハッシュテーブル362はハッシュテーブル362(HT1)であり、ハッシュテーブル検索クエリは(5)の”ハッシュテーブル検索クエリ(1012)”である。そして、暗号文一致比較部3121による一致比較の結果、検索クエリがハッシュテーブル362(HT1)のレコード3622の暗号化ハッシュ値”Enc(1012)”と一致すると判定し、当該レコードのMapID”2”をMapID_hitとして取得する(ステップ910)。
次に、データベース制御部311は、暗号化メインテーブル361から、ハッシュテーブル362と対応するマップIDカラムの値がMapID_hitと一致し、かつ暗号化検索クエリと一致する値を持つことをユーザ定義機能部312の暗号文一致比較部3121により確認したレコード群MapResultを取得する。例えば、暗号文の検索SQLが(6)である場合、例えば、データベース制御部311は、暗号化メインテーブル361から、マップIDカラム”MapID−1”の値がステップ910で取得した”2”と一致し、かつ暗号化検索クエリ(糖尿病)の値と一致する”病名”カラムの値であるEnc(糖尿病)を持つレコード群を暗号文一致比較部3121により確認し、その結果レコード3613及びレコード3615をMapResultとして取得する(ステップ920)。
最後に、データベース制御部311は、MapResultからIDカラム及びマップIDカラムを除いたレコード群を検索結果としてユーザシステム側サーバ3のデータベースインタフェース部213へ送信する。例えば、暗号文の検索SQLが(6)である場合、暗号化メインテーブル361のレコード3613及び3615から、”ID”カラム及び”MapID−1”カラムを除いたレコード群を暗号文の検索結果として送信する(ステップ930)。以上で、秘匿インデックス検索処理(図9)を終了する。
図10は、ユーザシステム側サーバ3において、データベースラッパー部212が実行する検索結果復号処理を示すフローチャートである。検索結果復号処理は、データベースラッパー部212がデータベースインタフェース部213から暗号文の検索結果を受信すると、開始する。
まず、データベースラッパー部212は、暗号文の検索結果を復号化部2124に入力し、平文の検索結果を出力として得る(ステップ1010)。最後に、データベースラッパー部212は、アプリケーション部211へ平文の検索結果を送信する(ステップ1020)。以上で、検索結果復号処理(図10)を終了する。
(1−3)秘匿化データベースへの挿入に関する処理の流れ
図11及び図12を用いて、秘匿化データベースシステム1において、ハッシュテーブル362を用いた挿入である秘匿インデックス挿入を行う際の、データベースラッパー部212及びデータベース制御部311が行う一連の処理の詳細を説明する。
図11は、ユーザシステム側サーバ3において、データベースラッパー部212が実行する秘匿インデックス挿入クエリ生成処理を示すフローチャートである。秘匿インデックス挿入クエリ生成処理は、データベースラッパー部212がアプリケーション部211から平文の挿入のSQLを受信すると、開始する。例えば、秘匿インデックス挿入クエリ生成処理の開始時にデータベースラッパー部212が受信するSQLは、以下の平文の挿入SQL(7)である。

INSERT INTO 医療情報.患者情報 ( 患者番号, 名前, 病名 )
VALUES ( 1000001, 木下, 胃腸炎 ) (7)

この挿入SQLは、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルに対し、”患者番号”カラムの値が”1000001”であり、”名前”カラムの値が”木下”であり、”病名”カラムの値が”胃腸炎”であるレコードを挿入することを意味する(ステップ1110)。
次に、データベースラッパー部212は、平文の挿入SQLから、挿入対象の値を取り出し、暗号化部2121により暗号化する。例えば、平文の挿入SQLが(7)である場合、挿入対象の値は”1000001”、”木下”及び”胃腸炎”であり、暗号化部2121により暗号化した結果の出力の暗号文はそれぞれ”Enc(1000001)”、”Enc(木下)”及び”Enc(胃腸炎)”となる(ステップ1120)。
次に、データベースラッパー部212は、秘匿インデックスマップテーブル262から、挿入対象レコードに関連する”マップIDカラム名”及び”ハッシュテーブル名”を取得する。具体的には、データベースラッパー部212は、平文の挿入SQLが挿入対象とするスキーマ名及び暗号化メインテーブル名の組をキーとして、秘匿インデックスマップテーブル262を検索し、スキーマ及び暗号化メインテーブル名が一致するすべてのレコードから、”カラム名”、”マップIDカラム名”及び”ハッシュテーブル名”を取得する。例えば、平文の挿入SQLが(7)である場合、スキーマ名が”医療情報”でありかつ暗号化メインテーブル名が”患者情報”であるレコード2621から、カラム名”病名”、マップIDカラム名”MapID−1”及びハッシュテーブル名”HT1”を取得する(ステップ1130)。
次に、データベースラッパー部212は、ステップ1130の結果が存在するか否かを判定する(ステップ1140)。
ステップ1140の結果が存在しない場合(NO)、データベースラッパー部212は、ハッシュテーブル362を用いない挿入SQL変換の処理を行う。具体的には、データベースラッパー部212は、平文の挿入SQLの挿入対象の値を、ステップ1120で生成した暗号文の値に置き換えた暗号文の挿入SQLを出力する。例えば、平文のSQLが(7)である場合、暗号文の挿入SQLは、以下の暗号文の挿入SQL(8)を出力する(ステップ1150)。

INSERT INTO 医療情報.患者情報 ( 患者番号, 名前, 病名 )
VALUES ( Enc(1000001), Enc(木下), Enc(胃腸炎) ) (8)
一方、ステップ1140の結果が存在する場合(YES)、データベースラッパー部212は、ハッシュテーブル362と一貫性を保持した挿入を行うために、ハッシュ値生成から秘匿インデックス用挿入SQL変換(ステップ1160〜1190)の処理を行い暗号文の挿入SQLを出力する。
まず、データベースラッパー部212は、挿入対象の値のうち、ハッシュテーブル362に関連するカラムの値をハッシュ値生成部2123に入力し、出力されるハッシュ値を取得する。例えば、平文の挿入SQLが(7)である場合、以下のハッシュ値(9)を取得する(ステップ1160)。

ハッシュ値 = ハッシュ値生成部(胃腸炎) = "0035" (9)
次に、データベースラッパー部212は、ハッシュテーブル362を検索するために、ステップ1160で取得したハッシュ値を検索クエリ生成部2122に入力し、出力をハッシュテーブル検索クエリとする。例えば、平文のハッシュ値が(8)である場合、以下のハッシュテーブル検索クエリ(10)を取得する(ステップ1170)。

ハッシュテーブル検索クエリ(0035)=検索クエリ生成部(暗号鍵、検索用鍵、"0035") (10)
次に、データベースラッパー部212は、ハッシュ値を暗号化部2121に入力し、出力される暗号化ハッシュ値を取得する。例えば、平文のハッシュ値が(8)である場合、暗号化ハッシュ値は”Enc(0035)”となる(ステップ1180)。
次に、データベースラッパー部212は、ハッシュテーブル362をハッシュテーブル検索クエリで検索する。検索が一致しない場合、新しいMapIDと暗号化ハッシュ値からなるレコードを挿入した後、ハッシュテーブル検索クエリに一致するレコードのMapIDを取得し、そのMapIDとステップ1120で取得した暗号文のレコードの値と新しいレコードの識別子であるIDとから構成されるレコードを暗号化メインテーブル361へ挿入する秘匿インデックス用挿入SQL変換を行う。例えば、平文のSQLが(7)である場合、以下の暗号文の挿入SQL(11)及び(12)を出力する(ステップ1190)。

INSERT INTO ハッシュテーブル362( MapID, 暗号化ハッシュ値 )
SELECT 新MapID,暗号化ハッシュ値"Enc(0035)"
FROM ハッシュテーブル362 WHERE NOT EXIST
(
SELECT * FROM ハッシュテーブル362
WHERE 暗号化一致比較部(暗号化ハッシュ値、ハッシュテーブル検索クエリ(0035)
) LIMIT 1; (11)

INSERT INTO 暗号化メインテーブル361
( 患者番号,名前,病名,ID,MapID-1 )
VALUES
( Enc(1000001),Enc(木下), Enc(胃腸炎), 新ID,
( SELECT MapID FROM ハッシュテーブル362 WHERE
暗号化一致比較部(暗号化ハッシュ値,ハッシュテーブル検索クエリ(0035) )
); (12)
最後に、データベースラッパー部212は、ステップ1150又はステップ1190で出力された暗号文の挿入SQLを、データベースインタフェース部213へ送信する。例えば、平文の挿入SQLが(7)である場合、ステップ1140の結果が存在するため、データベースラッパー部212はステップ1190が出力した暗号文の挿入SQL(11)及び(12)をデータベースインタフェース部213へ送信する(ステップ1195)。以上で、図11の秘匿インデックス挿入クエリ生成処理を終了する。
図12は、クラウドシステム側サーバ4において、データベース制御部311が実行する秘匿インデックス挿入処理を示すフローチャートである。秘匿インデックス挿入処理は、データベース制御部311がデータベースインタフェース部213から暗号文の挿入SQLを受信すると、開始する。例えば、秘匿インデックス挿入処理の開始時にデータベース制御部311が受信するSQLは、暗号文の挿入SQL(11)及び(12)である。
まず、データベース制御部311は、暗号文の検索SQLから、検索対象となるハッシュテーブルとハッシュテーブル検索クエリと暗号化ハッシュ値とを特定する。そして、ユーザ定義機能部312の暗号文一致比較部3121が、当該ハッシュテーブル362の”暗号化ハッシュ値”のカラムの値と当該ハッシュテーブル検索クエリとが一致するレコードが存在するか否かを判定する(ステップ1210)。
ステップ1210にて、検索クエリと一致するレコードがあると判定された場合(YES)、データベース制御部311は、当該レコードのMapIDカラムの値をMapID_hitとして取得する(ステップ1220)。
一方、ステップ1210にて、検索クエリと一致するレコードがないと判定された場合、データベース制御部311は、新しいMapIDを生成してMapID_hitとし、検索SQLから取得した暗号化ハッシュ値と共に、ハッシュテーブル362へレコードとして挿入する(ステップ1230)。
次に、データベース制御部311は、暗号文の挿入SQLを実行し、暗号化された値、ID及びMapID_hitから構成されるレコードを暗号化メインテーブル361へ挿入する。例えば、暗号文の挿入SQL(12)では、データベース制御部311は、患者番号が”Enc(1000001)”、名前が”Enc(木下)”、病名が”Enc(胃腸炎)”、IDが”1000001”及びMapID−1が”10”であるレコードを暗号化メインテーブル361へ挿入する(ステップ1240)。
最後に、データベース制御部311は、挿入SQLの実行結果をユーザシステム側サーバ3のデータベースインタフェース部213へ送信する(ステップ1250)。以上で、秘匿インデックス挿入処理(図12)を終了する。
(1−4)秘匿化データベースの更新に関する処理の流れ
図13、図14、図15及び図16を用いて、秘匿化データベースシステム1において、ハッシュテーブル362を用いて秘匿インデックスを更新する際の、データベースラッパー部212及びデータベース制御部311が行う一連の処理の詳細を説明する。
図13は、ユーザシステム側サーバ3において、データベースラッパー部212が実行する秘匿インデックス更新クエリ生成処理を示すフローチャートである。秘匿インデックス更新クエリ生成処理は、データベースラッパー部212がアプリケーション部211から平文の更新のSQLを受信すると、開始する。例えば、秘匿インデックス更新クエリ生成処理の開始時にデータベースラッパー部212が受信するSQLは、以下の平文の更新SQL(13)である。

UPDATE 医療情報.患者情報 SET "病名"="狭心症"
WHERE "病名"="糖尿病" (13)

この更新SQL(13)は、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルの”病名”カラムの値が”糖尿病”であるレコードにおいて、”病名”カラムの値を”狭心症”へ更新することを意味する(ステップ1310)。
次に、データベースラッパー部212は、平文の更新SQL(13)から、更新元カラムの値を取り出し、検索クエリ生成部2122を用いて暗号化メインテーブル361における一致検索に用いる暗号化検索クエリを取得する。具体的には、データベースラッパー部212は、鍵管理部2125から暗号化鍵及び検索用鍵を取得し、取得した鍵を検索クエリ生成部2122に入力し、その出力として暗号化検索クエリを得る。例えば、平文の更新SQLが(13)である場合、暗号化検索クエリ(2)と同様に”暗号化検索クエリ(糖尿病)”を得る(ステップ1315)。
次に、データベースラッパー部212は、秘匿インデックスマップテーブル262から、更新元のカラムの”マップIDカラム名”及び”ハッシュテーブル名”を取得する。具体的には、データベースラッパー部212は、平文の検索SQLが検索対象とするスキーマ名、暗号化メインテーブル名及び更新元のカラム名の組をキーとして、秘匿インデックスマップテーブル262を検索し、スキーマ名、暗号化メインテーブル名及びカラム名が一致するレコードの”マップIDカラム名”及び”ハッシュテーブル名”を取得する。例えば、平文の検索SQLが(13)である場合、スキーマ名が”医療情報”であり、かつ暗号化メインテーブル名が”患者情報”であり、かつ更新元のカラム名”病名”を含むレコード2621から、マップIDカラム名”MapID−1”及びハッシュテーブル名”HT1”を取得する(ステップ1320)。
次に、データベースラッパー部212は、ステップ1320の結果が存在するか否かを判定する(ステップ1325)。
ステップ1320の結果が存在しない場合(NO)、データベースラッパー部212は、ハッシュテーブル362を用いないで更新SQLを変換する処理を行う。具体的には、データベースラッパー部212は、まず、暗号化メインテーブル361から更新対象となるレコードのIDのリストである更新対象IDリストを取得するSQLを、データベースインタフェース部213へ送信し、結果として更新対象IDリストを受信する。例えば、平文の更新SQLが(13)である場合、以下のSQL(14)で更新対象IDリストを取得する(ステップ1330)。

SELECT ID FROM 医療情報.患者情報
WHERE 暗号文一致比較部(病名、暗号化検索クエリ(糖尿病)) (14)
データベースラッパー部212は、ステップ1330で得られた更新IDリストから更新対象IDの個数を取得し、取得した更新対象IDの個数分の、更新後の値の暗号文を生成する。例えば、平文の更新SQLが(13)である場合、更新対象IDの数は”3”及び”1000000”の二つであるため、更新後の値の暗号文はEnc(狭心症)及びEnc(狭心症)の二つとなり、確率的暗号化を用いる場合、これらは異なる暗号文となる(ステップ1335)。
次に、データベースラッパー部212は、ステップ1335で得られた二つの更新後の値の暗号文を、それぞれの更新対象IDが示すレコードの値として更新する暗号文の更新SQLを生成する。この更新SQLは、望ましくは一文のSQLで記述されるが、データベース制御部311のSQL文の最大長を超える場合、分割された複数の更新SQLを生成するとよい。例えば、平文の更新SQLが(13)である場合、以下の更新SQL(15)が出力される(ステップ1340)。

UPDATE 医療情報.患者情報
SET "病名"=
CASE ID
WHEN 3 THEN Enc(狭心症)
WHEN 1000000 THEN Enc(狭心症)
END
WHERE 暗号文一致比較部(病名、暗号化検索クエリ(糖尿病)) (15)
一方、ステップ1320の結果が存在する場合(YES)、データベースラッパー部212は、暗号化メインテーブル361及びハッシュテーブル362を更新するために、ハッシュ値生成から秘匿インデックス用更新SQL変換(ステップ1345〜1370)を行った暗号文の更新SQLを出力する。
まず、データベースラッパー部212は、更新後の値をハッシュ値生成部2123に入力し、出力されるハッシュ値を取得する。例えば、平文の更新SQLが(13)である場合、ハッシュ値(16)を取得する(ステップ1345)。

ハッシュ値 = ハッシュ値生成部(狭心症)="0500" (16)
次に、データベースラッパー部212は、ハッシュテーブル362を検索するために、ステップ1345で取得したハッシュ値を検索クエリ生成部2122に入力し、出力をハッシュテーブル検索クエリとする。例えば、平文のハッシュ値が(16)である場合、以下のハッシュテーブル検索クエリ(17)を取得する(ステップ1350)。

ハッシュテーブル検索クエリ(0500)
=検索クエリ生成部(暗号鍵、検索用鍵、"0500") (17)
次に、データベースラッパー部212は、暗号化部2121へステップ1345で取得したハッシュ値を入力し、出力としてハッシュテーブル362に挿入するための暗号化ハッシュ値を取得する。例えば、平文のハッシュ値(16)が”0500”である場合、暗号化ハッシュ値は”Enc(0500)”となる(ステップ1360)。
次に、データベースラッパー部212は、ハッシュテーブル362を用いて、更新対象となるレコード群のIDカラムの値のテーブルを取得する秘匿インデックス用更新対象IDテーブル取得SQLを実行し、更新対象IDテーブルを得る。具体的には、データベースラッパー部212は、ステップ1315で取得した更新元の値の暗号化検索クエリ、ステップ1320で取得した更新元のカラムに関連するマップIDカラム名とハッシュテーブル名、及び更新元の値のハッシュテーブル検索クエリを入力とし、ハッシュテーブル362を検索した上で暗号化メインテーブル361の検索範囲を限定し、更新対象IDテーブルを取得するSQLを実行し、その結果を更新対象IDテーブルとして出力する。例えば、平文の更新SQLが(13)である場合、秘匿インデックス用更新対象IDテーブル取得SQLは、以下の暗号文の検索SQL(18)を生成し、データベースインタフェース部213経由でデータベース制御部311へ送信し、その実行結果を更新対象IDテーブルとして取得する(ステップ1360)。

SELECT ID FROM 暗号化メインテーブル361 X
JOIN
( SELECT MapID FROM ハッシュテーブル362
WHERE 暗号化一致比較部(暗号化ハッシュ値,ハッシュテーブル検索クエリ(1012)
) Y
ON X.MapID= Y.MapID
WHERE 暗号化一致比較部(病名,暗号化検索クエリ(糖尿病)) (18)
次に、データベースラッパー部212は、ステップ1360で得られた更新IDリストから更新対象IDの個数を取得し、取得した更新対象IDの個数分の、更新後の値の暗号文リストを生成する。例えば、平文の更新SQLが(13)である場合、ステップ1335と同様に、更新対象IDの数は”3”及び”1000000”の二つであるため、更新後の値の暗号文リストはEnc(狭心症)及びEnc(狭心症)の二つとなる。確率的暗号化を用いる場合、これらは異なる暗号文となる(ステップ1365)。
次に、データベースラッパー部212は、平文の更新SQL、ステップ1315、ステップ1320、ステップ1350、ステップ1355、ステップ1360及びステップ1365で取得した各種情報を入力とし、秘匿インデックス用の暗号文の更新SQLを出力する。具体的には、第一に、ハッシュテーブル362の更新後の値のハッシュテーブル検索クエリで暗号化一致検索し、一致しない場合、更新後の値の暗号化ハッシュ値と新しいMapIDの値から成るレコードをハッシュテーブル362へ挿入するSQLを生成する。第二に、ハッシュテーブル362から更新後の値のMapIDを取得するSQLを生成する。第三に、暗号化メインテーブル361において、更新対象IDをもつレコードごとに、更新後の値の暗号文を置き換える更新SQLを生成する。例えば、平文の更新SQLが(13)である場合、第一のSQLは以下の更新SQL(19)となり、第二のSQLは以下の更新SQL(20)となり、第三のSQLは以下の更新SQL(21)となる。これら三つのSQL文を含む暗号文の更新SQLを出力する(ステップ1370)。

INSERT INTO ハッシュテーブル362( MapID, 暗号化ハッシュ値 )
SELECT 新MapID,暗号化ハッシュ値"Enc(0500)"
FROM ハッシュテーブル362 WHERE NOT EXIST
(
SELECT * FROM ハッシュテーブル362
WHERE 暗号化一致比較部(暗号化ハッシュ値、ハッシュテーブル検索クエリ(0500))
) LIMIT 1; (19)

SELECT MapID FROM ハッシュテーブル362 WHERE
暗号化一致比較部(暗号化ハッシュ値、ハッシュテーブル検索クエリ(0500)) (20)

UPDATE 暗号化メインテーブル361 X JOIN 更新対象IDテーブルY
ON X.ID = Y.ID
SET X.病名 =
CASE ID
WHEN 3 THEN Enc(狭心症)
WHEN 1000000 THEN Enc(狭心症)
END
,X.MapID =(20)で取得したMapID (21)
最後に、データベースラッパー部212は、ステップ1340又はステップ1370で出力された暗号文の更新SQLを、データベースインタフェース部213へ送信する。平文の更新SQLが(13)である場合、ステップ1320の結果が存在するため、データベースラッパー部212はステップ1370が出力した暗号文のSQL(19)、(20)及び(21)をデータベースインタフェース部213へ送信する(ステップ1375)。以上で、データベースラッパー部212は、秘匿インデックス更新クエリ生成処理(図13)を終了する。
図14は、クラウドシステム側サーバ4において、データベース制御部311が実行する更新対象IDリスト取得処理を示すフローチャートである。更新対象IDリスト取得処理は、データベース制御部311がデータベースインタフェース部213から暗号文の検索SQLを受信すると、開始する。
まず、更新対象カラムの値が暗号化検索クエリと一致するレコードのIDを、暗号化メインテーブル361からすべて取得する(ステップ1410)。最後に、取得結果をデータベースインタフェース部213へ送信し(ステップ1420)、更新対象IDリスト取得処理(図14)を終了する。例えば、暗号文の検索SQLが(14)である場合、更新対象IDリストの要素は”3”及び”1000000”となる。
図15は、クラウドシステム側サーバ4において、データベース制御部311が実行する秘匿インデックス用更新対象IDテーブル取得処理を示すフローチャートである。秘匿インデックス用更新対象IDテーブル取得処理は、データベース制御部311がデータベースインタフェース部213から暗号文の検索SQLを受信すると、開始する。
まず、ハッシュテーブル362から、ハッシュテーブル検索クエリに一致するレコードのMapIDを取得する(ステップ1510)。次に、ステップ1510で取得したMapIDと一致するMapID−1の値を持ち、かつ更新元カラムである”病名”カラムの値が暗号化検索クエリと一致するレコードのIDを、暗号化メインテーブル361から全て取得し、更新対象IDテーブルとして格納する(ステップ1520)。最後に、取得結果をデータベースインタフェース部213へ送信し(1530)、秘匿インデックス用更新対象IDテーブル取得処理(図15)を終了する。例えば、暗号文の検索SQLが(18)である場合、更新対象IDテーブルはIDカラムの値として”3”及び”1000000”を格納したテーブルとなる。
図16は、クラウドシステム側サーバ4において、データベース制御部311が実行する秘匿インデックス更新処理を示すフローチャートである。秘匿インデックス更新処理は、データベース制御部311がデータベースインタフェース部213から暗号文の更新SQLを受信すると、開始する。例えば、秘匿インデックス更新処理の開始時にデータベース制御部311が受信するSQLは、暗号文の更新SQL(19)、(20)及び(21)である。
まず、データベース制御部311は、暗号文の更新SQLの第一のSQLである(19)から、更新対象となるハッシュテーブル362とハッシュテーブル検索クエリ(0500)を取得する。そして、ユーザ定義機能部312の暗号文一致比較部3121は、当該ハッシュテーブルの"暗号化ハッシュ値"カラムの値と当該ハッシュテーブル検索クエリ(0500)とが一致するレコードを検索する(ステップ1610)。
ステップ1610の結果が存在する場合、データベース制御部311は、一致したレコードからMapIDを取得する(ステップ1620)。
一方、ステップ1610の結果が存在しない場合、データベース制御部311は、新しいMapIDを生成し、暗号化ハッシュ値”Enc(0500)”と共にハッシュテーブル362へ挿入し、新しいMapIDを取得する(ステップ1630)。
次に、データベース制御部311は、暗号化メインテーブル361の更新対象IDを持つレコードの更新対象カラムの値に更新後の暗号文を置き換え、マップIDカラム”MapID−1”の値をステップ1620又はステップ1630で取得したMapIDの値に置き換える(ステップ1640)。
次に、データベース制御部311は、ハッシュテーブル362から、暗号化メインテーブル361のマップIDカラム”MapID−1”に存在しないMapIDを持つレコードを削除する(ステップ1650)。
最後に、データベース制御部311は、データベースインタフェース部213へ、更新結果を送信する(1660)。以上で、秘匿インデックス更新処理(図16)を終了する。
(1−5)秘匿化データベースの削除に関する処理の流れ
図17及び図18を用いて、秘匿化データベースシステム1において、ハッシュテーブル362を用いた削除である秘匿インデックスを削除する際の、データベースラッパー部212及びデータベース制御部311が行う一連の処理の詳細を説明する。
図17は、ユーザシステム側サーバ3において、データベースラッパー部212が実行する秘匿インデックス削除クエリ生成処理を示すフローチャートである。秘匿インデックス削除クエリ生成処理は、データベースラッパー部212がアプリケーション部211から平文の削除のSQLを受信すると、開始する。例えば、秘匿インデックス削除クエリ生成処理の開始時にデータベースラッパー部212が受信するSQLは、以下に示す平文の削除SQL(22)である。

DELETE FROM 医療情報.患者情報 WHERE 病名=糖尿病 (22)

この削除SQLは、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルから、”病名”カラムの値が”糖尿病”であるレコードを全て削除することを意味する(ステップ1710)。
次に、データベースラッパー部212は、平文の削除SQLから、削除条件の対象カラムの値を取り出し、検索クエリ生成部2122を用いて暗号化メインテーブル361における削除条件の一致検索に用いる暗号化検索クエリを取得する。具体的には、データベースラッパー部212は、鍵管理部2125から暗号化鍵及び検索用鍵を取得し、取得した鍵を検索クエリ生成部2122に入力し、その出力として暗号化検索クエリを得る。例えば、平文のSQLが(22)である場合、以下の実行文(2)となる(ステップ1720)。

暗号化検索クエリ(糖尿病)=検索クエリ生成部(暗号化鍵、検索用鍵、"糖尿病") (2)
次に、データベースラッパー部212は、秘匿インデックスマップテーブル262から、検索対象カラムの”マップIDカラム名”及び”ハッシュテーブル名”を取得する。具体的には、データベースラッパー部212は、平文の削除SQLが削除条件の対象とするスキーマ名、暗号化メインテーブル名及びカラム名の組をキーとして、秘匿インデックスマップテーブル262を検索し、スキーマ名、暗号化メインテーブル名及びカラム名が一致するレコードの”マップIDカラム名”及び”ハッシュテーブル名”を取得する。例えば、平文の検索SQLが(22)である場合、スキーマ名が”医療情報”であり、かつ暗号化メインテーブル名が”患者情報”であり、かつカラム名が”病名”であるレコード2621から、マップIDカラム名”MapID−1”及びハッシュテーブル名”HT1”を取得する(ステップ1730)。
次に、データベースラッパー部212は、ステップ1730の結果が存在するか否かを判定する(ステップ1740)。
ステップ1740の結果が存在しない場合(NO)、データベースラッパー部212は、ハッシュテーブル362を用いないで削除SQLを変換する処理を行う。具体的には、データベースラッパー部212は、平文のSQLの削除条件の対象カラムの値を、ステップ1720で生成した暗号化検索クエリに置き換え、さらに、WHERE句の一致比較文を、ユーザ定義機能部312の暗号文一致比較部3121を呼び出す形式に置き換えた、暗号文の削除SQLを出力する。例えば、平文のSQLが(22)であり、暗号化検索クエリが(2)である場合、暗号文の削除SQLは以下の暗号文のSQL(23)である(ステップ1750)。

DELETE FROM 医療情報.患者情報
WHERE 暗号文一致比較部(病名、暗号化検索クエリ(糖尿病)) (23)
一方、ステップ1730の結果が存在する場合(YES)、データベースラッパー部212は、ハッシュテーブル362を用いた削除を行うために、ハッシュ値生成から秘匿インデックス用削除SQL変換(ステップ1760〜1780)の処理を行った暗号文の削除SQLを出力する。
具体的には、まず、データベースラッパー部212は、削除条件の対象カラムの値をハッシュ値生成部2123に入力し、出力されるハッシュ値を取得する。例えば、平文の削除SQLが(22)である場合、ハッシュ値(4)を取得する(ステップ1760)。

ハッシュ値 = ハッシュ値生成部(糖尿病)="1012" (4)
次に、データベースラッパー部212は、ハッシュテーブル362を検索するために、ステップ1760で取得したハッシュ値を検索クエリ生成部2122に入力し、出力をハッシュテーブル検索クエリとする。例えば、平文のハッシュ値が(4)である場合、ハッシュテーブル検索クエリ(5)を取得する(ステップ1770)。

ハッシュテーブル検索クエリ(1012)=検索クエリ生成部(暗号鍵、検索用鍵、"1012") (5)
次に、データベースラッパー部212は、秘匿インデックス用SQL変換部2127により、ハッシュテーブル362を検索して検索範囲を限定した上で、暗号化メインテーブル361からの削除を実行するためのSQLを生成する秘匿インデックス用検索SQL変換を行う。具体的には、ステップ1720で得た暗号化検索クエリと、ステップ1730で得たマップIDカラム名及びハッシュテーブル名と、ステップ1770で得たハッシュテーブル検索クエリを入力とし、ハッシュテーブル362をハッシュテーブル検索クエリで検索して該当したレコードの”MapID”カラムの値を取得し、その値と等しい”MapID−1”カラムの値を持つ暗号化メインテーブル361のレコードから、暗号化検索クエリと一致する値を持つレコードを、ユーザ定義機能部312の暗号文一致比較部3121を用いて判定する。そして、一致したレコードを暗号化メインテーブル361から削除するSQLを生成する。さらに、ハッシュテーブル362から、暗号化メインテーブル361のマップIDカラム”MapID−1”に存在しないMapIDを含むレコードを削除するSQLを生成する。例えば、平文の削除SQLが(22)である場合、二つのSQL文(23)、(24)を含む暗号文の削除SQLを出力する(ステップ1780)。

DELETE 医療情報.患者情報FROM 医療情報.患者情報
JOIN
( SELECT MapID FROM ハッシュテーブル(HT1)
WHERE
暗号文一致比較部(暗号化ハッシュ値、ハッシュテーブル検索クエリ(1012))
) MapResult
ON 医療情報.患者情報.MapID-1 = MapResult.MapID
WHERE 暗号化一致比較部(病名、暗号化検索クエリ(糖尿病)) (24)

DELETE ハッシュテーブル(HT1) FROM ハッシュテーブル(HT1)
WHERE NOT EXIST
( SELECT MapID FROM 医療情報.患者情報
WHERE ハッシュテーブル(HT1).MapID = 医療情報.患者情報.MapID
) (25)
最後に、データベースラッパー部212は、ステップ1750又はステップ1780で出力された暗号文の削除SQLを、データベースインタフェース部213へ送信する。平文の削除SQLが(22)である場合、ステップ1740の結果が存在するため、データベースラッパー部212はステップ1780が出力した暗号文の検索SQL(24)及び(25)をデータベースインタフェース部213へ送信する(ステップ1790)。以上で、データベースラッパー部212は、秘匿インデックス削除クエリ生成処理(図17)を終了する。
図18は、クラウドシステム側サーバ4において、データベース制御部311が実行する秘匿インデックス削除処理を示すフローチャートである。秘匿インデックス削除処理は、データベース制御部311がデータベースインタフェース部213から暗号文の削除SQLを受信すると、開始する。例えば、秘匿インデックス削除処理の開始時にデータベース制御部311が受信するSQLは、暗号文の削除SQL(24)及び(25)である。
まず、データベース制御部311は、暗号文の削除SQLから、削除条件の対象となるハッシュテーブル362及びハッシュテーブル検索クエリを特定し、ユーザ定義機能部312の暗号文一致比較部3121により当該ハッシュテーブル362の”暗号化ハッシュ値”カラムの値と当該ハッシュテーブル検索クエリとが一致するレコードを特定し、そのレコードの”MapID”カラムの値をMapID_hitとして取得する。例えば、暗号文の削除SQLが(24)及び(25)である場合、ハッシュテーブル362はハッシュテーブル362(HT1)であり、ハッシュテーブル検索クエリは”ハッシュテーブル検索クエリ(1012)”である。そして、暗号文一致比較部3121による一致比較の結果、ハッシュテーブル362(HT1)のレコード3622の暗号化ハッシュ値”Enc(1012)”と一致し、当該レコードのMapID”2”をMapID_hitとして取得する(ステップ1810)。
次に、データベース制御部311は、ハッシュテーブル362と対応するマップIDカラムの値がMapID_hitと一致し、かつ暗号化検索クエリと一致する値を持つことをユーザ定義機能部312の暗号文一致比較部3121により確認したレコード群MapResultを、暗号化メインテーブル361から取得する。例えば、暗号文の削除SQLが(24)及び(25)である場合、データベース制御部311は、マップIDカラム”MapID−1”の値がステップ910で取得した”2”と一致し、かつ暗号化検索クエリ(糖尿病)の値と一致する”病名”カラムの値であるEnc(糖尿病)を持つレコード群を暗号文一致比較部3121により確認し、その結果レコード3613及びレコード3615をMapResultとして、暗号化メインテーブル361から取得する(ステップ1820及び1830)。
次に、データベース制御部311は、暗号化メインテーブル361から、MapResultに含まれるレコードを削除する(ステップ1840)。
次に、データベース制御部311は、ハッシュテーブル362から、暗号化メインテーブル361のマップIDカラム”MapID−1”に存在しないMapIDを含むレコードを削除する(ステップ1850)。
最後に、データベース制御部311は、暗号文の削除SQLの結果をデータベースインタフェース部213へ送信する(ステップ1860)。以上で、秘匿インデックス削除処理(図18)を終了する。
(1−6)第一の実施例の効果
以上に説明したように、第一の実施例の秘匿化データベースシステム1では、暗号化された大容量の暗号化メインテーブル361への検索に際して、ハッシュテーブル362を事前に検索することで検索対象とするレコードを少なくするため、高速に検索することができる。
(2)第二の実施例
(2−1)第二の実施例による情報処理システムの構成
図19は、本発明の第二の実施例の秘匿化データベースシステム1のハードウェア及びソフトウェア構成を示すブロック図である。
秘匿化データベースシステム1は、第一の実施例(図1)と同様に、ユーザシステム側サーバ3が持つ元データを暗号化して、クラウドシステム側サーバ4に預託し、さらに、クラウドシステム側サーバ4が預託されたデータに対する検索機能及び分析機能をユーザシステム側サーバ3に対して提供するシステムである。
第二の実施例の秘匿化データベースシステム1が、第一の実施例と異なる点は、暗号化メインテーブル361の代わりに、ハッシュテーブル362Bとの対応関係を示すMapID−1カラムを取り除いた暗号化メインテーブル361Bを有し、さらに、暗号化ハッシュ値の内容が異なる暗号化メインテーブル361Bとハッシュテーブル362Bとの対応関係を隠蔽するために暗号化して格納するマッピングテーブル363を有することである。
第二の実施例のユーザ端末2は、第一の実施例のユーザ端末2と同じである。
第二の実施例のユーザシステム側サーバ3は、第一の実施例のユーザシステム側サーバ3と同じである。
第二の実施例のアプリケーション部211は、第一の実施例のアプリケーション部211と同じである。
第二の実施例のデータベースラッパー部212が第一の実施例と異なる点は、インデックス用検索クエリ生成部2128、ID暗号化部2129、インデックス用暗号化部2120及びマッピングテーブル並べ替えクエリ生成部21200を有することである。データベースラッパー部212の各部については、図20を参照して後述する。それ以外は、第一の実施例と同じである。
第二の実施例のデータベースインタフェース部213は、第一の実施例のデータベースインタフェース部213と同じである。
第二の実施例のディスク装置260が第一の実施例と異なる点は、秘匿インデックスマップテーブル262の”マップIDカラム名”カラムの代わりに、”マッピングテーブル名”カラムを備える秘匿インデックスマップテーブル262Bを有することである。それ以外は、第一の実施例と同じである。
第二の実施例のクラウドシステム側サーバ4は、第一の実施例のクラウドシステム側サーバ4と同様である。
第二の実施例のデータベース制御部311が第一の実施例と異なる点は、マッピングテーブル363の情報を加えて利用することである。それ以外は、第一の実施例のユーザ定義機能部312と同じである。
第二の実施例のユーザ定義機能部312が第一の実施例と異なる点は、インデックス用一致比較部3122、ID用鍵取得部3123、ID復号化部3124及びID暗号化部3125を有することである。ユーザ定義機能部312の各部については、図21を参照して後述する。それ以外は第一の実施例のユーザ定義機能部312と同じである。
第二の実施例のディスク装置360が第一の実施例と異なる点は、暗号化メインテーブル361に代えて暗号化メインテーブル361Bを有し、ハッシュテーブル362に代えてハッシュテーブル362Bを有し、さらに、マッピングテーブル363を追加で有することである。それ以外は、第一の実施例のディスク装置360と同じである。
図20は、第二の実施例のデータベースラッパー部212の論理構成を示す。第二の実施例のデータベースラッパー部212が、第一の実施例と異なる点は、図2に示す各部に加えて、インデックス用検索クエリ生成部2128、ID暗号化部2129、インデックス用暗号化部2120及びマッピングテーブル並べ替えクエリ生成部21200を有することである。それ以外は、第一の実施例のデータベースラッパー部212(図2)と同じである。
第二の実施例の暗号化部2121は、第一の実施例の暗号化部2121と同じである。
第二の実施例の検索クエリ生成部2122は、第一の実施例の検索クエリ生成部2122と同じである。
第二の実施例のハッシュ値生成部2123は、第一の実施例のハッシュ値生成部2123と同じである。
第二の実施例の復号化部2124は、第一の実施例の復号化部2124と同じである。
第二の実施例の鍵管理部2125が、第一の実施例と異なる点は、インデックス用検索クエリ生成部2128、ID暗号化部2129及びインデックス用暗号化部2120からの鍵の要求に対しても、暗号化鍵データ又は検索用鍵データを提供することである。なお、暗号化鍵データ及び検索用鍵データを提供してもよい。それ以外は、第一の実施例の鍵管理部2125と同じである。
第二の実施例のSQL変換部2126は、第一の実施例のSQL変換部2126と同じである。
第二の実施例の秘匿インデックス用SQL変換部2127が第一の実施例の秘匿インデックス用SQL変換部2127と異なる点は、ハッシュテーブル362B、マッピングテーブル363及び暗号化メインテーブル361Bに対して参照、挿入、更新及び削除の少なくとも一つの処理を行う暗号化SQL文を生成し、暗号化SQL文をデータベースインタフェース部213へ送信することである。それ以外は、第一の実施例の秘匿インデックス用SQL変換部2127と同じである。
第二の実施例のインデックス用検索クエリ生成部2128は、ハッシュ値生成部2123が出力したインデックスのバイト列を入力とし、ハッシュテーブル362Bを検索するためのインデックス用ハッシュテーブル検索クエリを出力する。
第二の実施例のID暗号化部2129は、マッピングテーブル363に格納するメインテーブル261のIDカラムの値を暗号化する。具体的には、ID暗号化部2129は、IDを暗号化するID用鍵を鍵管理部2125から取得し、取得した鍵を用いて平文のIDを暗号化し、その結果を暗号化IDとして出力する。
第二の実施例のインデックス用暗号化部2120は、インデックスの識別子を暗号化する。具体的には、インデックス用暗号化部2120は、鍵管理部2125から取得するID用鍵とハッシュ値生成部2123が出力する平文のハッシュ値を入力とし、鍵管理部2125から取得する暗号化鍵により入力されたハッシュ値を暗号化し、その結果を暗号化ハッシュ値として出力する。
第二の実施例のマッピングテーブル並べ替えクエリ生成部21200は、マッピングテーブル363の各レコードの順序をランダムに並べ替える。
図21は、第二の実施例のユーザ定義機能部312の論理構成を示す。第二の実施例のユーザ定義機能部312が、第一の実施例のユーザ定義機能部312(図3)と異なる点は、第一の実施例の構成に加えてインデックス用一致比較部3122、ID用鍵取得部3123、ID復号化部3124及びID暗号化部3125を有する点である。それ以外は、第一の実施例のユーザ定義機能部312と同じである。
第二の実施例の暗号文一致比較部3121は、第一の実施例の暗号文一致比較部3121と同じである。
第二の実施例のインデックス用一致比較部3122は、検索用鍵データをメモリ310及び/又はディスク装置360に格納する。また、データベース制御部311からインデックス用ハッシュテーブル検索クエリ及び暗号化ハッシュ値の入力を受け、検索用鍵を用いてインデックス用ハッシュテーブル検索クエリを暗号化ハッシュ値との一致比較が可能なインデックス用一致検索クエリに変換する。そして、インデックス用一致検索クエリと暗号化ハッシュ値の一致比較を行い、一致する場合は一致を示す値(例えば”1”)を出力し、一致しない場合は不一致を示す値(例えば”0”)を出力する。
第二の実施例のID用鍵取得部3123は、インデックス用ハッシュテーブル検索クエリ及び暗号化ハッシュ値を入力とし、暗号化ハッシュ値の一部を変換しID用鍵を出力する。
第二の実施例のID復号化部3124は、暗号化IDとID用鍵を入力とし、暗号化IDをID用鍵で復号化し、平文IDを出力する。
第二の実施例のID暗号化部3125は、平文IDとID用鍵を入力とし、平文IDをID用鍵で暗号化し、暗号化IDを出力する。
図22は、第二の実施例の秘匿インデックスマップテーブル262Bのデータ構造を示す。第二の実施例の秘匿インデックスマップテーブル262Bが第一の実施例の秘匿インデックスマップテーブル262(図5)と異なる点は、”マップIDカラム名”カラムがないこと、また、マッピングテーブル363との関連を示す”マッピングテーブル名”カラムを有することである。それ以外は第一の実施例の秘匿インデックスマップテーブル262(図5)と同じである。例えば、レコード2621Bは、”医療情報”スキーマの”患者情報”テーブルにおいて、関連するマッピングテーブルとハッシュテーブルを持つ”カラム名”が”病名”であり、関連する”マッピングテーブル名”が”MT1”であり、関連する”ハッシュテーブル名”が”HT1”であることを示す。
図23は、第二の実施例の暗号化メインテーブル361Bのデータ構造を示す。第二の実施例の暗号化メインテーブル361Bが第一の実施例の暗号化メインテーブル361(図6)と異なる点は、”マップIDカラム”がないことである。この違いにより、暗号化メインテーブル361B上で、各レコードが対応するMapIDを特定することができない。それ以外は第一の実施例の暗号化メインテーブル361(図6)と同じである。
図24は、第二の実施例のマッピングテーブル363(MT1)のデータ構造を示す。マッピングテーブル363は、クラウドシステム側サーバ4のディスク装置360又は(及び)メモリ310に格納され、暗号化メインテーブル361B上の各レコードとハッシュテーブル362B(HT1)上の”MapID”の対応関係を隠蔽して保持する。なお、マッピングテーブル363は、ディスク装置360及びメモリ310の両方に格納されてもよい。マッピングテーブル363は、”MID”カラム、”暗号化ID”カラム及び”MapID”の値を示す”MapID”カラムによりレコードを構成する。”MID”カラムは、マッピングテーブル上のレコードを一意に特定する識別子である。”暗号化ID”カラムは、暗号化メインテーブル361Bの”ID”カラムの値をID暗号化部2129又はID暗号化部3125が暗号化した暗号化IDを示す。”MapID”カラムは、マッピングテーブル363の各レコードと対応するハッシュテーブル362の”MapID”の値を示す。
例えば、レコード3631は、当該レコードを一意に特定する識別子”MID”カラムの値が”101”であり、対応する暗号化メインテーブル361Bのレコードの”ID”カラムの値を暗号化した値である”暗号化ID”カラムの値が”IEnc(1)”であり、ハッシュテーブル362と対応する”MapID”カラムの値が”1”であることを示す。
このマッピングテーブル363のデータ構造により、暗号化メインテーブル361B上の各レコードが対応するハッシュテーブル362の”MapID”の値を隠蔽して保持する。なお、”IEnc( )”は、”( )”内の平文IDが、ID暗号化部2129あるいはID暗号化部3125により暗号化された暗号化IDであることを示す。また、”MID”カラム及び”MapID”カラムには、データベース制御部311の通常のインデックス機能を適用する。
図25は、検索を高速化するために用いるハッシュテーブル362Bのデータ構造を示す。第二の実施例のハッシュテーブル362Bが、第一の実施例のハッシュテーブル362(図7)と異なる点は、”MapID”カラム及び”暗号化ハッシュ値”カラムによりレコードを構成することである。”MapID”カラムは、マッピングテーブル363との対応情報を示す。”暗号化ハッシュ値”は、ハッシュ値生成部2123が生成したハッシュ値とID用鍵のペアのビット列とを秘匿インデックス用SQL変換部2127が暗号化した値を示す。
例えば、レコード3621Bは、マッピングテーブル363の”MapID”カラムの値と対応する”MapID”の値が”1”であり、それに対応する”暗号化ハッシュ値”の値が”INEnc(ID_key_1,0765)”であることを示す。”MapID”カラムの値は、マッピングテーブル363の一つ以上のレコードの”MapID”の値と等しく、”MapID”を指定することによりマッピングテーブル363及び暗号化メインテーブル361Bの全レコードを全件検索することなく、検索範囲を限定する。
なお、”INEnc(x,y)”は、”( )”内のID用鍵x及びハッシュ値yが、インデックス用暗号化部2120により暗号化された暗号化ハッシュ値であることを示す。また、”MapID”カラムには、データベース制御部311の通常のインデックス機能を適用する。
(2−2)秘匿化データベースの検索に関する処理の流れ
図26、図27及び図10を用いて、第二の実施例の秘匿化データベースシステム1において、ハッシュテーブル362B及びマッピングテーブル363を用いた検索である秘匿インデックス検索を行う際の、データベースラッパー部212及びデータベース制御部311が行う一連の処理について、主に第一の実施例との違いを説明する。
図26は、第二の実施例の秘匿インデックス検索クエリ生成処理を示すフローチャートである。第二の実施例の秘匿インデックス検索クエリ生成処理が、第一の実施例の秘匿インデックス検索クエリ生成処理と異なる点は、マッピングテーブル363を用いて暗号化メインテーブル361Bの”ID”カラムとハッシュテーブル362Bの”MapID”カラムを対応付けることである。この処理は、データベースラッパー部212がアプリケーション部211から平文の検索のSQLを受信すると、開始する。例えば、第一の実施例と同様に、データベースラッパー部212が受信するSQLは、平文の検索のSQL(1)である。

SELECT * FROM 医療情報.患者情報 WHERE 病名=糖尿病 (1)※再掲

この検索SQLは、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルから、”病名”カラムの値が”糖尿病”であるレコードを検索し、条件に一致する全てのカラムの値を検索結果として得ることを意味する(ステップ2510)。
次に、データベースラッパー部212は、第一の実施例のステップ820と同様に、まず鍵管理部2125から暗号化鍵及び検索用鍵を取得し、取得した鍵を検索クエリ生成部2122に入力し、その出力として暗号化検索クエリを得る。例えば、平文のSQLが(1)である場合、以下の実行式(2)である(ステップ2520)。

暗号化検索クエリ(糖尿病)
= 検索クエリ生成部(暗号化鍵、検索用鍵、"糖尿病") (2)※再掲
次に、データベースラッパー部212は、第一の実施例のステップ830と一部異なり、秘匿インデックスマップテーブル262から、検索対象カラムの”マッピングテーブル名”及び”ハッシュテーブル名”を取得する。具体的には、データベースラッパー部212は、平文の検索SQLが検索対象とするスキーマ名、暗号化メインテーブル名及びカラム名の組をキーとして、秘匿インデックスマップテーブル262Bを検索し、スキーマ名、暗号化メインテーブル名及びカラム名が一致するレコードの”マッピングテーブル名”及び”ハッシュテーブル名”を取得する。例えば、平文の検索SQLが(1)である場合、スキーマ名が”医療情報”であり、かつ暗号化メインテーブル名が”患者情報”であり、かつカラム名が”病名”であるレコード2621Bから、マッピングテーブル名”MT1”及びハッシュテーブル名”HT1”を取得する(ステップ2530)。
次に、データベースラッパー部212は、第一の実施例における図8のステップ830と同様に、ステップ2530の結果が存在するか否かを判定する(ステップ2540)。
ステップ2540の結果が”存在しない”である場合(NO)、第一の実施例における図8のステップ850と同様に、データベースラッパー部212は、平文のSQLの検索対象の値を、ステップ2520で生成した暗号化検索クエリに置き換え、さらに、WHERE句の一致比較文を、ユーザ定義機能部312の暗号文一致比較部3121を呼び出す形式に置き換えた、暗号文の検索SQLを出力する。例えば、平文のSQLが(1)であり、暗号化検索クエリが(2)である場合、暗号文の検索SQLは、以下の暗号文の検索SQL(3)となる(ステップ2550)。

SELECT * FROM 医療情報.患者情報
WHERE 暗号文一致比較部(病名、暗号化検索クエリ(糖尿病))(3)※再掲
一方、ステップ2540の結果が”存在する”である場合(YES)、データベースラッパー部212は、ハッシュテーブル362及びマッピングテーブル363を用いた高速検索を行うために、ハッシュ値生成から秘匿インデックス用検索SQL変換(ステップ2560〜2580)の処理を行った暗号文の検索SQLを出力する。
まず、データベースラッパー部212は、第一の実施例における図8のステップ860と同様に、検索対象の値をハッシュ値生成部2123に入力し、出力されるハッシュ値を取得する。例えば、平文の検索SQLが(1)である場合、以下のハッシュ値(4)を取得する(ステップ2560)。

ハッシュ値 = ハッシュ値生成部(糖尿病)="1012" (4) ※再掲
次に、データベースラッパー部212は、第一の実施例における図8のステップ870とは一部異なり、ハッシュテーブル362Bを検索するために、ステップ2560で取得したハッシュ値をインデックス用検索クエリ生成部2128に入力し、出力をインデックス用ハッシュテーブル検索クエリとする。例えば、平文のハッシュ値が(4)である場合、以下のインデックス用ハッシュテーブル検索クエリ(5−2)を取得する(ステップ2570)。

インデックス用ハッシュテーブル検索クエリ(1012)
=インデックス用検索クエリ生成部(暗号鍵、検索用鍵、"1012") (5−2)
次に、データベースラッパー部212は、第一の実施例における図8のステップ880とは一部異なり、ハッシュテーブル362Bを検索して検索範囲を限定した上で、検索範囲に相当する暗号化IDをマッピングテーブル363から特定して、暗号化IDを復号してIDとし、そのIDに対応する暗号化メインテーブル361Bのレコードを検索するためのSQLを生成する秘匿インデックス用検索SQL変換を行う。具体的には、ステップ2520で得た暗号化検索クエリと、ステップ2530で得たマッピングテーブル名及びハッシュテーブル名と、ステップ2570で得たインデックス用ハッシュテーブル検索クエリを入力とし、ハッシュテーブル362Bをインデックス用ハッシュテーブル検索クエリで検索して該当したレコードの”MapID”カラムの値及びID用鍵を取得する。そして、その値と等しい”MapID”カラムの値を持つマッピングテーブル363のレコードから検索対象の暗号化IDを特定し、暗号化IDをID用鍵で復号して検索対象のIDを取得する。さらに、ユーザ定義機能部312の暗号文一致比較部3121を用いて、検索対象のIDをもつ暗号化メインテーブル361Bのレコードから、暗号化検索クエリと一致する値を持つレコードを判定し、一致するレコードからメインテーブル261に存在するカラムのみ(”ID”カラム以外)を選択し、検索結果とする暗号文の検索SQLを生成し、出力する。例えば、平文の検索SQLが(1)である場合、以下の暗号文の検索SQL(6−2)を出力する(ステップ2580)。

SELECT 患者番号, 名前, 病名 FROM 医療情報.患者情報
JOIN (
SELECT ( ID復号部( @ID用鍵, 暗号化ID) ) AS ID
FROM マッピングテーブル MT1
JOIN (
SELECT MapID,
@ID鍵:=ID用鍵取得部(インデックス用ハッシュテーブル検索クエリ、
暗号化ハッシュ値)
FROM ハッシュテーブル HT1
WHERE インデックス用一致比較部(インデックス用ハッシュテーブル検索クエリ、
暗号化ハッシュ値)
) IDResult
ON ( MT1.MapID = IDResult.MapID )
) MapResult
ON 医療情報.患者情報.ID = MapResult.ID
WHERE 暗号化一致比較部(病名、暗号化検索クエリ(糖尿病)) (6−2)
最後に、データベースラッパー部212は、ステップ2550又はステップ2880で出力された暗号文の検索SQLを、データベースインタフェース部213へ送信する。平文の検索SQLが(1)である場合、ステップ2540の結果が存在するため、データベースラッパー部212はステップ2580が出力した暗号文の検索SQL(6−2)をデータベースインタフェース部213へ送信する(ステップ2590)。以上で、データベースラッパー部212は、秘匿インデックス検索クエリ生成処理(図26)を終了する。
図27は、第二の実施例の秘匿インデックス検索処理を示すフローチャートである。第二の実施例の秘匿インデックス検索処理が、第一の実施例の秘匿インデックス検索処理(図9)と異なる点は、マッピングテーブル363を用いて暗号化メインテーブル361Bの”ID”カラムとハッシュテーブル362Bの”MapID”カラムを対応付けることである。秘匿インデックス検索処理は、データベース制御部311がデータベースインタフェース部213から暗号文の検索SQLを受信すると、開始する。例えば、
秘匿インデックス検索処理の開始時にデータベース制御部311が受信する暗号文の検索SQLは、SQL(6−2)である。
まず、データベース制御部311は、暗号文の検索SQLから、検索対象となるハッシュテーブル362Bとインデックス用ハッシュテーブル検索クエリを特定し、ユーザ定義機能部312のインデックス用一致比較部3122により当該ハッシュテーブル362Bの”暗号化ハッシュ値”カラムの値と当該インデックス用ハッシュテーブル検索クエリが一致するレコードを特定し、そのレコードの”MapID”カラムの値をMapID_hitとして取得する。例えば、暗号文の検索SQLが(6−2)である場合、ハッシュテーブルはハッシュテーブル362B(HT1)であり、インデックス用ハッシュテーブル検索クエリは(5−2)の”インデックス用ハッシュテーブル検索クエリ(1012)”である。さらに、インデックス用一致比較部3122による一致比較の結果、ハッシュテーブル362B(HT1)のレコード3622Bの暗号化ハッシュ値”INEnc(ID_key_2, 1012)”と一致し、当該レコードのMapID”2”をMapID_hitとして取得する(ステップ2610)。
次に、データベース制御部311は、マッピングテーブル363から、”MapID”カラムの値がMapID_hitと一致するレコード群をHashResultとして取得する。例えば、暗号文の検索SQLが(6−2)である場合、MapID_hitが”2”であるため、マッピングテーブル363の”MapID”の値が2であるレコード3632及び3633をHashResultとして取得する(ステップ2620)。
次に、データベース制御部311は、インデックス用ハッシュテーブル検索クエリ及びステップ2610でヒットした暗号化ハッシュ値をID用鍵取得部3123に入力してID用鍵を取得する。さらに、そのID用鍵とHashResultの”暗号化ID”カラムの値をID復号化部3124に入力して、検索対象のID群であるIDResultを取得する。例えば、暗号文の検索SQLが(6−2)である場合、ステップ2610でヒットした暗号化ハッシュ値”INEnc(ID_key_2,0120)”であり、ID用鍵取得部3123からID用鍵”ID_key_2”を得る。取得したID用鍵で、ステップ3620で取得したHashResult(マッピングテーブル363のレコード3632及び3633)の暗号化ID”IEnc(3)、IEnc(1000000)”を復号化し、IDResult”3、4”を取得する(ステップ2630)。
次に、データベース制御部311は、暗号化メインテーブル361Bから、IDResultに対応する”ID”カラムの値を持ち、かつ暗号化検索クエリと一致する値を持つことをユーザ定義機能部312の暗号文一致比較部3121により確認したレコード群MapResultを取得する。例えば、暗号文の検索SQLが(6−2)である場合、データベース制御部311は、暗号文一致比較部3121により、”ID”カラムの値がステップ2630で取得した”3、4”と一致し、かつ暗号化検索クエリ(糖尿病)の値と一致する”病名”カラムの値であるEnc(糖尿病)を持つレコード群を暗号化メインテーブル361Bで確認し、その結果レコード3613B及びレコード3615BをMapResultとして取得する(ステップ2640)。
最後に、データベース制御部311は、MapResultから”ID”カラムを除いたレコード群を検索結果としてユーザシステム側サーバ3のデータベースインタフェース部213へ送信する。例えば、暗号文の検索SQLが(6−2)である場合、暗号化メインテーブル361Bのレコード3613B及び3615Bから、”ID”カラムを除いたレコード群を暗号文の検索結果として送信する(ステップ2650)。以上で、秘匿インデックス検索処理(図27)を終了する。
第二の実施例において、検索結果復号処理は、第一の実施例の検索結果復号処理(図10)と同じである。
(2−3)秘匿化データベースへの挿入に関する処理の流れ
図28及び図29を用いて、第二の実施例の秘匿化データベースシステム1において、ハッシュテーブル362B及びマッピングテーブル363を用いた挿入である秘匿インデックス挿入を行う際の、データベースラッパー部212及びデータベース制御部311が行う一連の処理について、主に第一の実施例との違いを説明する。
図28は、第二の実施例の秘匿インデックス挿入クエリ生成処理を示すフローチャートである。第二の実施例の秘匿インデックス挿入クエリ生成処理が、第一の実施例の秘匿インデックス挿入クエリ生成処理(図11)と異なる点は、マッピングテーブル363に対する挿入処理が加わることである。秘匿インデックス挿入クエリ生成処理は、データベースラッパー部212がアプリケーション部211から平文の挿入のSQLを受信すると、開始する。秘匿インデックス挿入クエリ生成処理の開始時にデータベースラッパー部212が受信する平文の挿入SQLは、第一の実施例と同様に、以下の平文の挿入SQL(7)である。

INSERT INTO 医療情報.患者情報 ( 患者番号, 名前, 病名 )
VALUES ( 1000001, 木下, 胃腸炎) (7)※再掲

この挿入SQLは、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルに対し、”患者番号”カラムの値が”1000001”であり、”名前”カラムの値が”木下”であり、”病名”カラムの値が”胃腸炎”であるレコードを挿入することを意味する(ステップ2710)。
次に、データベースラッパー部212は、第一の実施例における図11のステップ1120と同様に、平文の挿入SQLから挿入対象の値を取り出し、暗号化部2121により暗号化する。例えば、平文の挿入SQLが(7)である場合、挿入対象の値は”1000001”、”木下”及び”胃腸炎”であり、暗号化部2121により暗号化した結果の出力の暗号文は、それぞれ”Enc(1000001)”、”Enc(木下)”及び”Enc(胃腸炎)”となる(ステップ2720)。
次に、データベースラッパー部212は、図11のステップ1130と同様に、秘匿インデックスマップテーブル262Bから、挿入対象レコードに関連する”マッピングテーブル名”及び”ハッシュテーブル名”を取得する。具体的には、データベースラッパー部212は、平文の挿入SQLが挿入対象とするスキーマ名及び暗号化メインテーブル名の組をキーとして、秘匿インデックスマップテーブル262Bを検索し、スキーマ及び暗号化メインテーブル名が一致するすべてのレコードから、”カラム名”、”マッピングテーブル名”及び”ハッシュテーブル名”を取得する。例えば、平文の挿入SQLが(7)である場合、スキーマ名が”医療情報”でありかつ暗号化メインテーブル名が”患者情報”であるレコード2621Bから、カラム名”病名”、マッピングテーブル名”MT1”及びハッシュテーブル名”HT1”を取得する(ステップ2730)。
次に、データベースラッパー部212は、第一の実施例における図11のステップ1140と同様に、ステップ2730の結果が存在するか否かを判定する(ステップ2740)。
ステップ2740の結果が存在しない場合(NO)、第一の実施例における図11のステップ1150と同様に、データベースラッパー部212は、平文の挿入SQLの挿入対象の値を、ステップ2720で生成した暗号文の値に置き換えた暗号文の挿入SQLを出力する。例えば、平文のSQLが(7)である場合、以下の暗号文の挿入SQL(8)を出力する(ステップ2750)。

INSERT INTO 医療情報.患者情報 ( 患者番号, 名前, 病名 )
VALUES ( Enc(1000001), Enc(木下), Enc(胃腸炎) ) (8)※再掲
一方、ステップ2740の結果が存在する場合(YES)、データベースラッパー部212は、ハッシュテーブル362Bと一貫性を保持した挿入を行うために、ハッシュ値生成から秘匿インデックス用挿入SQL変換(ステップ2760〜2790)の処理を行い暗号文の挿入SQLを出力する。
まず、データベースラッパー部212は、第一の実施例における図11のステップ1160と同様に、挿入対象の値のうち、ハッシュテーブル362Bに関連するカラムの値をハッシュ値生成部2123に入力し、出力されるハッシュ値を取得する。例えば、平文の挿入SQLが(7)である場合、以下のハッシュ値を(8)取得する(ステップ2760)。

ハッシュ値 = ハッシュ値生成部(胃腸炎) = "0035" (8)
次に、データベースラッパー部212は、第一の実施例における図11のステップ1170と異なり、ハッシュテーブル362Bを検索するために、ステップ2760で取得したハッシュ値をインデックス用検索クエリ生成部2128に入力し、出力をインデックス用ハッシュテーブル検索クエリとする。例えば、平文のハッシュ値が(8)である場合、以下のハッシュテーブル検索クエリ(9−2)を取得する(ステップ2770)。

インデックス用ハッシュテーブル検索クエリ(0035)
=インデックス用検索クエリ生成部(暗号鍵、検索用鍵、"0035") (9−2)
次に、データベースラッパー部212は、第一の実施例における図11のステップ1180と異なり、ハッシュ値(8)及び鍵管理部2125から取得したID用鍵をインデックス用暗号化部2120に入力し、出力される暗号化ハッシュ値を取得する。例えば、平文のハッシュ値が(8)であり、かつID用鍵が”ID_key_3”である場合、暗号化ハッシュ値は”INEnc(ID_key_3,0035)”となる(ステップ2780)。
次に、データベースラッパー部212は、第一の実施例における図11のステップ1190と同様に、ハッシュテーブル362Bをインデックス用ハッシュテーブル検索クエリで検索し、検索で一致しない場合は新しいMapIDと暗号化ハッシュ値からなるレコードをハッシュテーブル362Bへ挿入し、ハッシュテーブル検索クエリに一致するレコードのMapIDを取得し、そのMapIDとステップ2720で取得した暗号文のレコードの値と新しいレコードの識別子であるIDとから構成されるレコードを暗号化メインテーブル361Bへ挿入し、最後に新レコードのIDをID暗号化部3125により暗号化した暗号化IDと新MapIDから成るレコードをマッピングテーブル363に挿入する秘匿インデックス用挿入SQL変換を行う。例えば、平文のSQLが(7)である場合、以下の暗号文の挿入SQL(11−2)、(12−2)及び(13−2)を出力する(ステップ2790)。

INSERT INTO ハッシュテーブルHT1( MapID, 暗号化ハッシュ値 )
SELECT 新MapID,暗号化ハッシュ値"INEnc(ID_key_3, 0035)"
FROM ハッシュテーブルHT1 WHERE NOT EXIST
(
SELECT * FROM ハッシュテーブルHT1
WHERE インデックス用暗号化一致比較部(暗号化ハッシュ値、
インデックス用ハッシュテーブル検索クエリ(0035) )
) LIMIT 1; (11)

INSERT INTO 暗号化メインテーブル
( 患者番号,名前,病名,ID )
VALUES
( Enc(1000001),Enc(木下), Enc(胃腸炎), 新ID,
( SELECT MapID FROM ハッシュテーブルHT1
WHERE暗号化一致比較部(暗号化ハッシュ値,
インデックス用ハッシュテーブル検索クエリ(0035) )
); (12−2)

INSERT INTO マッピングテーブルMT1 ( 暗号化ID, MapID )
VALUES (
( SELECT ID用暗号化部(@ID用鍵, 新ID
FROM (
( SELECT @ID用鍵:=ID用鍵取得部(インデックス用ハッシュテーブル検索クエリ、
暗号化ハッシュ値)
FROM ハッシュテーブルHT1
WHERE インデックス用一致比較部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
) keytemp
, ( SELECT @新ID:= MAX(ID) FROM 医療情報.病院情報 ) IDtemp
)
, ( SELECT MapID FROM ハッシュテーブルHT1
WHERE インデックス用一致比較部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
)
); (13−2)
最後に、データベースラッパー部212は、第一の実施例における図11のステップ2795と同様に、ステップ2750又はステップ2790で出力された暗号文の挿入SQLを、データベースインタフェース部213へ送信する。例えば、平文の挿入SQLが(7)である場合、ステップ2740の結果が存在するため、データベースラッパー部212はステップ2790が出力した暗号文の挿入SQL(11−2)、(12−2)及び(13−2)をデータベースインタフェース部213へ送信する(ステップ2795)。以上で、秘匿インデックス挿入クエリ生成処理(図28)を終了する。
図29は、第二の実施例の秘匿インデックス挿入処理を示すフローチャートである。第二の実施例の秘匿インデックス挿入処理が、第一の実施例の秘匿インデックス挿入処理(図12)と異なる点は、マッピングテーブル363に対する挿入処理が加わることである。秘匿インデックス挿入処理は、データベース制御部311がデータベースインタフェース部213から暗号文の挿入SQLを受信すると、開始する。例えば、秘匿インデックス挿入処理の開始時にデータベース制御部311が受信する暗号文の挿入SQLは、SQL(11−2)、(12−2)及び(13−2)である。
まず、データベース制御部311は、暗号文の検索SQLから、検索対象となるハッシュテーブル362Bとインデックス用ハッシュテーブル検索クエリと暗号化ハッシュ値とを特定し、ユーザ定義機能部312のインデックス用一致比較部3122により当該ハッシュテーブル362Bの”暗号化ハッシュ値”のカラムの値と当該インデックス用ハッシュテーブル検索クエリが一致するレコードが存在するか否かを判定する(ステップ2810)。
ステップ2810にて一致するレコードがある場合(YES)、データベース制御部311はそのレコードのMapIDカラムの値をMapID_hitとして取得する(ステップ2820)。例えば、挿入SQLが(11−2)である場合、MapID_hitは”10”となる。
一方、ステップ2810にて一致するレコードがない場合、データベース制御部311は、新しいMapIDを生成してMapID_hitとし、検索SQLから取得した暗号化ハッシュ値と共に、ハッシュテーブル362Bへレコードとして挿入する(ステップ2830)。
次に、データベース制御部311は、暗号文の挿入SQLを実行し、暗号化された値及びIDから構成されるレコードを暗号化メインテーブル361Bへ挿入する。例えば、暗号文の挿入SQLが(12−2)である場合、データベース制御部311は、患者番号が”Enc(1000001)”、名前が”Enc(木下)”、 病名が”Enc(胃腸炎)”及びIDが”1000001”であるレコードを暗号化メインテーブル361Bへ挿入する(ステップ2840)。
次に、データベース制御部311は、インデックス用ハッシュテーブル検索クエリ及び暗号化ハッシュ値をID用鍵取得部3123へ入力し、出力としてID用鍵を取得する。例えば、暗号化ハッシュ値が(11−2)の ”INEnc(ID_key_3, 0035)”であったとすると、ID用鍵としてID_key_3を取得する(ステップ2850)。
次に、データベース制御部311は、新IDとステップ2850で取得したID用鍵をID暗号化部3125に入力し、出力として暗号化IDを取得する。例えば、新IDが”1000001”である場合、暗号化IDは”IEnc(1000001)”となる(ステップ2860)。
次に、データベース制御部311は、マッピングテーブル363へ、ステップ2860で取得した暗号化IDとステップ2820又はステップ2830で取得したMapID_hitからなるレコードを挿入する。例えば、挿入SQLが(11−2)、(12−2)及び(13−2)である場合、暗号化ID”IEnc(1000001)”及びMapID_hit”10”からなるレコードをマッピングテーブル363へ挿入する。なお、”MID”カラムの値は、データベース制御部311が通常の自動採番機能にて付与する(ステップ2870)。
最後に、データベース制御部311は、挿入SQLの実行結果をユーザシステム側サーバ3のデータベースインタフェース部213へ送信する(ステップ2880)。以上で、秘匿インデックス挿入処理(図28)を終了する。
(2−4)秘匿化データベースの更新に関する処理の流れ
図30、図14、図31及び図32を用いて、第二の実施例の秘匿化データベースシステム1において、ハッシュテーブル362B及びマッピングテーブル363を用いた更新である秘匿インデックス更新を行う際の、データベースラッパー部212及びデータベース制御部311が行う一連の処理について、主に第一の実施例との違いを説明する。
図30は、第二の実施例のユーザシステム側サーバ3のデータベースラッパー部212が実行する秘匿インデックス更新クエリ生成処理を示すフローチャートである。秘匿インデックス更新クエリ生成処理は、データベースラッパー部212がアプリケーション部211から平文の更新のSQLを受信すると、開始する。例えば、秘匿インデックス更新クエリ生成処理の開始時にデータベースラッパー部212が受信する平文の更新SQLは、第一の実施例と同様に、平文の更新SQL(13)である。

UPDATE 医療情報.患者情報 SET "病名"="狭心症"
WHERE "病名"="糖尿病" (13)※再掲

この更新SQL(13)は、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルの”病名”カラムの値が”糖尿病”であるレコードにおいて、”病名”カラムの値を”狭心症”へ更新することを意味する(ステップ2905)。
次に、データベースラッパー部212は、平文の更新SQLから、更新元カラムの値を取り出し、検索クエリ生成部2122を用いて暗号化メインテーブル361Bにおける一致検索に用いる暗号化検索クエリを取得する。具体的には、データベースラッパー部212は、鍵管理部2125から暗号化鍵及び検索用鍵を取得し、それらを検索クエリ生成部2122に入力し、その出力として暗号化検索クエリを得る。例えば、平文の更新SQLが(13)である場合の例としては、(2)と同様に”暗号化検索クエリ(糖尿病)”を得る(ステップ2910)。
次に、データベースラッパー部212は、秘匿インデックスマップテーブル262から、更新元のカラムの”マッピングテーブル名”及び”ハッシュテーブル名”を取得する。具体的には、データベースラッパー部212は、平文の検索SQLが検索対象とするスキーマ名、暗号化メインテーブル名及び更新元のカラム名の組をキーとして、秘匿インデックスマップテーブル262Bを検索し、スキーマ名、暗号化メインテーブル名及びカラム名が一致するレコードの”マッピングテーブル名”及び”ハッシュテーブル名”を取得する。例えば、平文の検索SQLが(13)である場合、スキーマ名が”医療情報”であり、かつ暗号化メインテーブル名が”患者情報”であり、かつ更新元のカラム名”病名”を含むレコード2621Bから、マッピングテーブル名”MT1”及びハッシュテーブル名”HT1”を取得する(ステップ2915)。
次に、データベースラッパー部212は、ステップ2915の結果が存在するか否かを判定する(ステップ2920)。
ステップ2915の結果が存在しない場合(NO)、第一の実施例における図13のステップ1330と同様に、データベースラッパー部212は、暗号化メインテーブル361Bから更新対象となるレコードのIDのリストである更新対象IDリストを取得するSQLを、データベースインタフェース部213へ送信し、結果として更新対象IDリストを受信する。例えば、平文の更新SQLが(13)である場合、以下のSQL(14)で更新対象IDリストを取得する(ステップ2925)。

SELECT ID FROM 医療情報.患者情報
WHERE 暗号文一致比較部(病名、暗号化検索クエリ(糖尿病)) (14)※再掲
データベースラッパー部212は、第一の実施例における図13のステップ1335と同様に、ステップ2925で得られた更新IDリストから更新対象IDの個数を取得し、更新対象IDの個数分の、更新後の値の暗号文を生成する。例えば、平文の更新SQLが(13)である場合、更新対象IDの数は”3”及び”1000000”の二つであるため、更新後の値の暗号文はEnc(狭心症)及びEnc(狭心症)の二つとなる。確率的暗号化を用いる場合、これらは異なる暗号文となる(ステップ2930)。
次に、データベースラッパー部212は、第一の実施例における図13のステップ1335で得られた二つの更新後の値の暗号文を、それぞれの更新対象IDの示すレコードの値として更新する暗号文の更新SQLを生成する。例えば、平文の更新SQLが(13)である場合、以下の暗号文の更新SQL(15)が出力される(ステップ2935)。

UPDATE 医療情報.患者情報
SET "病名"=
CASE ID
WHEN 3 THEN Enc(狭心症)
WHEN 1000000 THEN Enc(狭心症)
END
WHERE 暗号文一致比較部(病名、暗号化検索クエリ(糖尿病)) (15)※再掲
一方、ステップ2915の結果が存在する場合(YES)、データベースラッパー部212は、暗号化メインテーブル361B、ハッシュテーブル362B及びマッピングテーブル363を更新するために、ハッシュ値生成から秘匿インデックス用更新SQL変換(ステップ2940〜2970)を行った暗号文の更新SQLを出力する。
まず、データベースラッパー部212は、第一の実施例における図13のステップ1345と同様に、更新後の値をハッシュ値生成部2123に入力し、出力されるハッシュ値を取得する。例えば、平文の更新SQLが(13)である場合、ハッシュ値(16)を取得する(ステップ2940)。

ハッシュ値 = ハッシュ値生成部(狭心症)="0500" (16)※再掲
次に、データベースラッパー部212は、ハッシュテーブル362Bを検索するために、ステップ2945で取得したハッシュ値をインデックス用検索クエリ生成部2128に入力し、出力をインデックス用ハッシュテーブル検索クエリとする。例えば、平文のハッシュ値が(16)である場合、以下のハッシュテーブル検索クエリ(17−2)を取得する(ステップ2945)。

インデックス用ハッシュテーブル検索クエリ(0500)
=インデックス用検索クエリ生成部(暗号鍵、検索用鍵、"0500") (17−2)
次に、データベースラッパー部212は、ステップ2940で取得したハッシュ値及び鍵管理部2125から取得したID用鍵をインデックス用暗号化部2120へ入力し、出力としてハッシュテーブル362Bに挿入するための暗号化ハッシュ値を取得する。例えば、平文のハッシュ値(16)が”0500”であり、ID用鍵が”ID_key_4”である場合、暗号化ハッシュ値は”INEnc(ID_key_4,0500)”となる(ステップ2950)。
次に、データベースラッパー部212は、ハッシュテーブル362B及びマッピングテーブル363を用いて更新対象となるレコード群のIDカラムの値のテーブルを取得する秘匿インデックス用更新対象IDテーブル取得SQLを実行し、更新対象IDテーブルを得る。具体的には、データベースラッパー部212は、ステップ2910で取得した更新元の値の暗号化検索クエリ、ステップ2915で取得した更新元のカラムに関連するマッピングテーブル名とハッシュテーブル名、更新元の値のインデックス用ハッシュテーブル検索クエリを入力とし、ハッシュテーブル362Bとマッピングテーブル363を検索した上で暗号化メインテーブル361Bの検索範囲を限定し、更新対象IDテーブルを取得するSQLを実行し、その結果を更新対象IDテーブルとして出力する。例えば、平文の更新SQLが(13)である場合、暗号文の秘匿インデックス用更新対象IDテーブル取得SQL(18−2)を生成し、データベースインタフェース部213経由でデータベース制御部311へ送信し、その実行結果を更新対象IDテーブルとして取得する(ステップ2955)。

SELECT ID FROM 暗号化メインテーブル361BX
JOIN
( SELECT ID復号化部(@ID用鍵、暗号化ID) AS TempID
FROM マッピングテーブルMT1 JOIN
( SELECT MapID, @ID用鍵:=ID用鍵取得部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
FROM ハッシュテーブルHT1
WHERE インデックス用一致比較部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
) HitHash ON ( MT1.MapID = HitHash.MapID )
) MapResult
ON X.ID= MapResult.TempID
WHERE インデックス用一致比較部(病名,暗号化検索クエリ(糖尿病))(18−2)
次に、データベースラッパー部212は、ステップ2955で得られた更新対象IDテーブルから更新対象IDの個数を取得し、その個数分の、更新後の値の暗号文リストを生成する。例えば、平文の更新SQLが(13)である場合、第一の実施例における図13のステップ1335と同様に、更新対象IDの数は”3”及び”1000000”の二つであるため、更新後の値の暗号文リストはEnc(狭心症)及びEnc(狭心症)の二つとなる。確率的暗号化を用いる場合、これらは異なる暗号文となる(ステップ2960)。
次に、データベースラッパー部212は、平文の更新SQL、ステップ2910、ステップ2915、ステップ2945、ステップ2950、ステップ2955及びステップ2960で取得した各種情報を入力とし、秘匿インデックス用の暗号文の更新SQLを出力する。具体的には、第一に、ハッシュテーブル362Bを更新後の値のインデックス用ハッシュテーブル検索クエリでインデックス用一致検索をし、一致しない場合、更新後の値の暗号化ハッシュ値と新しいMapIDの値から成るレコードをハッシュテーブル362Bへ挿入するSQLを生成する。第二に、ハッシュテーブル362Bから更新後の値のMapIDを取得するSQLを生成する。第三に、暗号化メインテーブル361Bにおいて、更新対象IDをもつレコードごとに、更新後の値の暗号文を置き換える更新SQLを生成する。第四に、マッピングテーブル363において、更新対象IDを持つレコードの”MapID”カラムの値を第二のSQLで得られたMapIDに置き換えるSQLを生成する。例えば、平文の更新SQLが(13)である場合、第一のSQLは以下の更新SQL(19−2)となり、第二のSQLは以下の更新SQL(20−2)となり、第三のSQLは更新SQL(21−2)となり、第四のSQLは以下の更新SQL(22−2)及び(23−2)となる。これら四つのSQL文からなる暗号文の更新SQLを出力する(ステップ2965)。

INSERT INTO ハッシュテーブルHT1( MapID, 暗号化ハッシュ値 )
SELECT 新MapID,暗号化ハッシュ値"INEnc(ID_key_4, 0500)"
FROM ハッシュテーブルHT1 WHERE NOT EXIST
(
SELECT * FROM ハッシュテーブルHT1
WHERE インデックス用一致比較部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
) LIMIT 1; (19−2)

SELECT MapID FROM ハッシュテーブルHT1
WHERE インデックス用一致比較部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)) (20−2)

UPDATE 暗号化メインテーブル X JOIN 更新対象IDテーブルY
ON X.ID = Y.ID
SET X.病名 =
CASE ID
WHEN 3 THEN Enc(狭心症)
WHEN 1000000 THEN Enc(狭心症)
END (21−2)

DELETE マッピングテーブルMT1 FROM MT1 JOIN
( SELECT MID FROM UpID JOIN
( SELECT MID, ID復号化部(@ID用鍵, 暗号化ID) AS TempID
FROM MT1
JOIN
( SELECT MapID,@ID用鍵:=ID用鍵取得部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値 )
FROM HT1
WHERE インデックス用一致比較部(
インデックス用ハッシューテーブル検索クエリ、暗号化ハッシュ値 )
) HitHash
ON MT1.MapID=HitHash.MapID
) Temp
ON UpID.ID=Temp.TempID
) MapResult
ON MT1.MID = MapResult.MID; (22−2)

INSERT INTO MT1 ( 暗号化ID, MapID )
SELECT ID用暗号化部(@ID用鍵、ID ) AS EncID, MapID
FROM UpID JOIN
( SELECT MapID, @ID用鍵:=ID用鍵取得部(
インデックス用ハッシュテーブル検索クエリ,暗号化ハッシュ値)
FROM ハッシュテーブルHT1
WHERE インデックス用一致検索部(
インデックス用ハッシュテーブル検索クエリ,暗号化ハッシュ値)
) temp ; (23−2)
最後に、データベースラッパー部212は、ステップ2935又はステップ2965で出力された暗号文の更新SQLを、データベースインタフェース部213へ送信する。平文の更新SQLが(13)である場合、ステップ2915の結果が存在するため、データベースラッパー部212はステップが出力した暗号化されたSQL文(19−2)、(20−2)、(21−2)、(22−2)及び(23−2)をデータベースインタフェース部213へ送信する(ステップ2970)。以上で、データベースラッパー部212は、秘匿インデックス更新クエリ生成処理(図30)を終了する。
図14は、クラウドシステム側サーバ4において、データベース制御部311が実行する更新対象IDリスト取得処理の流れを示しており、第二の実施例でも、データベース制御部311は図14と同様の処理を行う。更新対象IDリスト取得処理は、データベース制御部311がデータベースインタフェース部213から暗号文の検索SQLを受信すると、開始する。まず、更新対象カラムの値が暗号化検索クエリと一致するレコードのIDを、暗号化メインテーブル361Bからすべて取得する(ステップ1410)。最後に、取得結果をデータベースインタフェース部213へ送信し(ステップ1420)、図14の処理を終了する。例えば、暗号文の検索SQLが(18−2)である場合、更新対象IDリストの要素は”3”及び”1000000”となる。
図31は、第二の実施例のクラウドシステム側サーバ4において、データベース制御部311が実行する秘匿インデックス用更新対象IDテーブル取得処理を示すフローチャートである。秘匿インデックス用更新対象IDテーブル取得処理は、データベース制御部311がデータベースインタフェース部213から暗号文の検索SQLを受信すると、開始する。
まず、データベース制御部311は、ハッシュテーブル362Bから、インデックス用ハッシュテーブル検索クエリに一致するレコードのMapIDを取得する(ステップ3010)。次に、データベース制御部311は、マッピングテーブル363から、ステップ3010で取得したMapIDと一致するMapIDを持つレコード群HashResultを取得する(ステップ3020)。次に、データベース制御部311は、ステップ3010で一致したハッシュテーブル362Bのレコードの暗号化ハッシュ値と、インデックス用アッシュテーブル検索クエリをID用鍵取得部3123に入力し、出力としてID用鍵を取得し、取得したID用鍵及びHashResultの暗号化IDをID復号化部3124に入力し、出力として得たID群をIDResultとする(3030)。
次に、データベース制御部311は、暗号化メインテーブル361Bから、ステップ3030で取得したIDResultが含むID群に含まれるIDを持ち、かつ更新元カラムである”病名”カラムの値が暗号化検索クエリと一致するレコードのIDをすべて取得し、更新対象IDテーブルとして格納する(ステップ3040)。最後に、データベース制御部311は、取得結果をデータベースインタフェース部213へ送信し(3050)、秘匿インデックス用更新対象IDテーブル取得処理(図31)を終了する。例えば、暗号文の検索SQLが(18−2)である場合、更新対象IDテーブルはIDカラムの値として”3”及び”1000000”を格納したテーブルとなる。
図32は、第二の実施例のクラウドシステム側サーバ4において、データベース制御部311が実行する秘匿インデックス更新処理を示すフローチャートである。秘匿インデックス更新処理は、データベース制御部311がデータベースインタフェース部213から暗号文の更新SQLを受信すると、開始する。例えば、秘匿インデックス更新処理の開始時にデータベース制御部311が受信する暗号文の更新SQLは、SQL(19−2)、(20−2)、(21−2)、(22−2)及び(23−2)である。
まず、データベース制御部311は、暗号文の更新SQLの第一のSQLである(19−2)から、更新対象となるハッシュテーブル362B及びインデックス用ハッシュテーブル検索クエリを取得し、ユーザ定義機能部312のインデックス用一致比較部3122により当該ハッシュテーブルの”暗号化ハッシュ値”カラムの値と当該インデックス用ハッシュテーブル検索クエリが一致するレコードを検索する(ステップ3110)。
ステップ3110の結果が存在する場合(YES)、データベース制御部311は、一致したレコードからMapIDを取得し、取得したMapIDをMapID_Newとする(ステップ3120)。
一方、ステップ3110の結果が存在しない場合、データベース制御部311は、新しいMapIDを生成して、生成したMapIDをMapID_newとし、暗号化ハッシュ値”INEnc(ID_key_4,0500)”と共にハッシュテーブル362Bへ挿入する(ステップ3130)。
次に、データベース制御部311は、暗号化メインテーブル361Bのうち、更新対象IDを持つレコードについて、当該レコードの更新対象カラムの値を更新し、さらに、当該レコードのIDと一致する暗号化IDを持つマッピングテーブル363のレコードの”MapID”カラムの値をMapID_Newとする(ステップ3140)。
次に、データベース制御部311は、ハッシュテーブル362Bから、マッピングテーブル363の”MapID”カラムに存在しないMapIDを持つレコードを削除する(ステップ3150)。
最後に、データベース制御部311は、更新結果をデータベースインタフェース部213へ送信する(3160)。以上で、秘匿インデックス更新処理(図32)を終了する。
(2−5)秘匿化データベースの削除に関する処理の流れ
図33及び図34を用いて、第二の実施例の秘匿化データベースシステム1において、ハッシュテーブル362B及びマッピングテーブル363を用いた削除である秘匿インデックス削除を行う際の、データベースラッパー部212及びデータベース制御部311が行う一連の処理の流れを示す。
図33は、第二の実施例のユーザシステム側サーバ3において、データベースラッパー部212が実行する秘匿インデックス削除クエリ生成処理を示すフローチャートである。秘匿インデックス削除クエリ生成処理は、データベースラッパー部212がアプリケーション部211から平文の削除のSQLを受信すると、開始する。例えば、秘匿インデックス削除クエリ生成処理の開始時にデータベースラッパー部212が受信する平文の削除のSQLは、以下のSQL(22)である。この削除SQL(22)は、スキーマ名が”医療情報”であり、テーブル名が”患者情報”であるテーブルから、”病名”カラムの値が”糖尿病”であるレコードをすべて削除することを意味する(ステップ3210)。

DELETE FROM 医療情報.患者情報 WHERE 病名=糖尿病 (22)
次に、データベースラッパー部212は、平文の削除SQLから、削除条件の対象カラムの値を取り出し、鍵管理部2125から暗号化鍵及び検索用鍵を取得し、それらを検索クエリ生成部2122に入力し、その出力として暗号化検索クエリを得る。例えば、平文のSQLが(21)である場合、暗号化検索クエリは以下の実行式(2)である(ステップ3220)。

暗号化検索クエリ(糖尿病) = 検索クエリ生成部(暗号化鍵、検索用鍵、"糖尿病") (2)
次に、データベースラッパー部212は、秘匿インデックスマップテーブル262Bから、検索対象カラムの”マッピングテーブル名”及び”ハッシュテーブル名”を取得する。具体的には、データベースラッパー部212は、平文の削除SQLが削除条件の対象とするスキーマ名、暗号化メインテーブル名及びカラム名の組をキーとして、秘匿インデックスマップテーブル262Bを検索し、スキーマ名、暗号化メインテーブル名及びカラム名が一致するレコードの”マッピングテーブル名”及び”ハッシュテーブル名”を取得する。例えば、平文の検索SQLが(22)である場合、スキーマ名が”医療情報”であり、かつ暗号化メインテーブル名が”患者情報”であり、かつカラム名が”病名”であるレコード2621から、マッピングテーブル名”MT1”及びハッシュテーブル名”HT1”を取得する(ステップ3230)。
次に、データベースラッパー部212は、ステップ3230の結果が存在するか否かを判定する(ステップ3240)。
ステップ3240の結果が存在しない場合(NO)、データベースラッパー部212は、ハッシュテーブル362Bを用いない削除SQL変換の処理を行う。具体的には、データベースラッパー部212は、平文のSQLの削除条件の対象カラムの値を、ステップ3220で生成した暗号化検索クエリに置き換え、さらに、WHERE句の一致比較文を、ユーザ定義機能部312の暗号文一致比較部3121を呼び出す形式に置き換えた、暗号文の削除SQLを出力する。例えば、平文のSQLが(22)であり、暗号化検索クエリが(2)である場合、暗号文の削除SQLは以下の暗号文のSQL(23)である(ステップ3250)。

DELETE FROM 医療情報.患者情報
WHERE 暗号文一致比較部(病名、暗号化検索クエリ(糖尿病)) (23)
一方、ステップ3230の結果が存在する場合(YES)、データベースラッパー部212は、ハッシュテーブル362Bを用いた削除を行うために、ハッシュ値生成から秘匿インデックス用削除SQL変換(ステップ3260〜3280)の処理を行った暗号文の削除SQLを出力する。
まず、データベースラッパー部212は、削除条件の対象カラムの値をハッシュ値生成部2123に入力し、出力されるハッシュ値を取得する。例えば、平文の削除SQLが(22)である場合、ハッシュ値(4)を取得する(ステップ3260)。

ハッシュ値 = ハッシュ値生成部(糖尿病)="1012" (4)
次に、データベースラッパー部212は、ハッシュテーブル362Bを検索するために、ステップ3260で取得したハッシュ値をインデックス用検索クエリ生成部2128に入力し、出力をインデックス用ハッシュテーブル検索クエリとする。例えば、平文のハッシュ値が(4)である場合、以下のインデックス用ハッシュテーブル検索クエリ(5−2)を取得する(ステップ3770)。

インデックス用ハッシュテーブル検索クエリ(1012)=インデックス用検索クエリ生成部(暗号鍵、検索用鍵、"1012") (5−2)
次に、データベースラッパー部212は、秘匿インデックス用SQL変換部2127により、まずハッシュテーブル362Bを検索して検索範囲を限定した上で、暗号化メインテーブル361Bからの削除を実行するためのSQLを生成する秘匿インデックス用検索SQL変換を行う。具体的には、ステップ3220で得た暗号化検索クエリと、ステップ3230で得たマッピングテーブル名及びハッシュテーブル名と、ステップ3770で得たインデックス用ハッシュテーブル検索クエリを入力とし、ハッシュテーブル362Bをインデックス用ハッシュテーブル検索クエリで検索して該当したレコードの”MapID”カラムの値を取得し、その値と等しい”MapID”カラムの値を持つマッピングテーブル363のレコードについて、暗号化IDを復号化してIDを取得し、そのIDを持つ暗号化メインテーブル361Bのレコードから、暗号化検索クエリと一致する値を持つレコードをユーザ定義機能部312の暗号文一致比較部3121を用いて判定し、一致したレコードを暗号化メインテーブル361Bから削除するSQLを生成する。さらに、ハッシュテーブル362Bから、マッピングテーブル363のマップIDカラム”MapID”に存在しないMapIDを含むレコードを削除するSQLを生成する。例えば、平文の削除SQLが(22)である場合、三つのSQL文からなる暗号文の削除SQL(24−2)(25−2)及び(26−2)を出力する(ステップ3280)。

CREATE TABLE UpID ( ID INT, INDEX(ID )
SELECT ID FROM 暗号化メインテーブル X JOIN
( SELECT ID用復号化部(@ID用鍵、暗号化ID) AS TempID FROM MT1 JOIN
( SELECT MapID, @ID用鍵:=ID用鍵取得部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
FROM HT1 WHERE インデックス用一致比較部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
) HitHash
ON MT1.MapID = HitHash.MapID
) MapResult
ON X.ID = MapResult.TempID
WHERE 暗号化一致比較部(暗号化検索クエリ、病名); (24−2)

DELETE 暗号化メインテーブルX FROM 暗号化メインテーブル
JOIN UpID ON X.ID = UpID.ID ; (25−2)

DELETE MT1 FROM MT1 JOIN
( SELECT MID FROM UpID JOIN
( SELECT MID, ID用復号化部(@ID用鍵、暗号化ID) AS TempID
FROM MT1 JOIN
( SELECT MapID, @ID用鍵:=ID用鍵取得部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
FROM HT1 WHERE インデックス用一致比較部(
インデックス用ハッシュテーブル検索クエリ、暗号化ハッシュ値)
) HitHash ON MT1.MapID = temp.TempID
) MapResult ON MT1.MID = MapResult.MID; (26−2)
最後に、データベースラッパー部212は、ステップ3250又はステップ3280で出力された暗号文の削除SQLを、データベースインタフェース部213へ送信する。平文の削除SQLが(22)である場合、ステップ3240の結果が存在するため、データベースラッパー部212はステップ3280が出力した暗号文の検索SQL(24−2)、(25−2)及び(26−2)をデータベースインタフェース部213へ送信する(ステップ3290)。以上で、データベースラッパー部212は、秘匿インデックス削除クエリ生成処理(図32)を終了する。
図34は、第二の実施例のクラウドシステム側サーバ4において、データベース制御部311が実行する秘匿インデックス削除処理を示すフローチャートである。秘匿インデックス削除処理は、データベース制御部311がデータベースインタフェース部213から暗号文の削除SQLを受信すると、開始する。例えば、秘匿インデックス削除処理の開始時にデータベース制御部311が受信する暗号文の削除SQLは、SQL(24−2)(25−2)及び(26−2)である。
まず、データベース制御部311は、暗号文の削除SQLから、削除条件の対象となるハッシュテーブル362Bとインデックス用ハッシュテーブル検索クエリを特定し、ユーザ定義機能部312のインデックス用一致比較部3122により当該ハッシュテーブル362Bの”暗号化ハッシュ値”カラムの値と当該インデックス用ハッシュテーブル検索クエリが一致するレコードを特定し、そのレコードの”MapID”カラムの値をMapID_hitとして取得する。例えば、暗号文の削除SQLが(24−2)(25−2)及び(26−2)である場合、ハッシュテーブル362Bはハッシュテーブル362Bであり、インデックス用一致比較部3122による一致比較の結果、ハッシュテーブル362Bのレコード3622Bの暗号化ハッシュ値”INEnc(ID_key_2,1012)”と一致し、当該レコードのMapID”2”をMapID_hitとして取得する(ステップ3310)。
次に、データベース制御部311は、マッピングテーブル363から、”MapID”カラムの値がMapID_hitと一致するレコード群HashResultを特定する。例えば、暗号文の削除SQLが(24−2)(25−2)及び(26−2)である場合、MapID_hitが”2”であるレコード3632及び3633がHashResultとなる(ステップ3320)。
次に、データベース制御部311は、インデックス用ハッシュテーブル検索クエリとステップ3310でヒットしたレコードの暗号化ハッシュ値をID用鍵取得部3123に入力し、出力としてID用鍵を取得し、そのID用鍵とHashResultの暗号化IDをID復号化部3124に入力し、出力として取得したID群をIDResultとする。ここで、暗号文の削除SQLが(24−2)(25−2)及び(26−2)である場合の例としては、IDResultは”3、1000000”となる(ステップ3330)。
次に、データベース制御部311は、暗号化メインテーブル361Bから、IDResultが含むIDを持ちかつ暗号化検索クエリと一致する値を持つレコードを削除し、さらに当該レコードと一致する暗号化IDを持つマッピングテーブル363のレコードを削除する(ステップ3340)。
次に、データベース制御部311は、ハッシュテーブル362Bから、マッピングテーブル363に存在しないMapIDを含むレコードを削除する(ステップ3350)。
最後に、データベース制御部311は、暗号文の削除SQLの結果をデータベースインタフェース部213へ送信する(ステップ3360)。以上で、秘匿インデックス削除処理(図34)を終了する。
(2−6)マッピングテーブルの並べ替えに関する処理の流れ
図35は、第二の実施例のマッピングテーブルの並べ替えクエリ生成処理を示すフローチャートである。データベースラッパー部212は、マッピングテーブル363のレコードの順序が、と暗号化メインテーブル361Bの対応するレコードのIDの順序と一致しないように、マッピングテーブル363の生成時又は任意のタイミングで、マッピングテーブル363のレコードの順序をランダムに並べ替える並べ替えSQLを生成し(ステップ3410)、データベース制御部311へ送信する(ステップ3420)。
図36は、第二の実施例のマッピングテーブルの並べ替え処理を示すフローチャートである。データベース制御部311は、データベースラッパー部212から並べ替えSQLを受信すると、マッピングテーブル363のレコードをランダムに並べ替え(ステップ3510)、その結果をデータベースラッパー部212へ送信する(ステップ3520)。
(2−7)第二の実施例の効果
以上に説明したように、第二の実施例の秘匿化データベースシステム1では、暗号化メインテーブル361Bから検索を高速化するハッシュテーブル362Bとの対応関係を示すMapIDカラムを取り除き、対応関係を暗号化したままマッピングテーブル363に保持することによって、暗号化メインテーブル361BのレコードとMapIDの対応関係を隠蔽するため、第一の実施例より安全な検索を行うことができる。
(3)第三の実施例
(3−1)第三の実施例による情報処理システムの構成
本発明の第三の実施例による秘匿化データベースシステム1のハードウェア及びソフトウェア構成は、第二の実施例(図19)で前述した構成と同じである。第三の実施例が、第二の実施例と異なる点は、マッピングテーブル363BのマップIDの頻度の偏りを平準化し、出現頻度を隠蔽することである。
図37は、第三の実施例のデータベースラッパー部212の論理構成を示す。第三の実施例のデータベースラッパー部212が第二の実施例(図20)と異なる点は、マッピングテーブル363BのマップIDの出現頻度を平準化するマップID頻度分布平準化クエリ生成部21201を有することである。
図38は、第三の実施例の頻度分布平準化前のマッピングテーブル363Bのデータ構造を示す。第三の実施例のマッピングテーブル363Bが、第二の実施例(図24)のマッピングテーブル363と異なる点は、MapIDの頻度の偏りを示すためにサンプルレコードを追加していることである。例えば、第三の実施例のマッピングテーブル363Bでは、MapID”1”の頻度が2であり、MapID”2”の頻度が3でありMapID”3”及び”10”の頻度が1である。それ以外は、第二の実施例と同じである。
図39は、第三の実施例の頻度分布平準化後のマッピングテーブル363Cのデータ構造を示す。平準化後のマッピングテーブル363Cが、平準化前のマッピングテーブル363Bと異なる点は、MapIDの頻度を平準化するための模擬レコードを備えることである。模擬レコードは、暗号化IDの代わりに、暗号化IDと同じ型のビット列を乱数で生成した値を持つ。例えば、図39では、模擬レコード3631C〜3635Cを加えた結果、全てのMapIDの頻度が3となっている。
図37、図38及び図39以外の第三の実施例による情報処理システムの構成は、2−1項で説明した第二の実施例と同じである。
(3−2)秘匿化データベースの検索に関する処理の流れ
第三の実施例の秘匿化データベースの検索に関する処理は、2−2項で説明した第二の実施例と同じである。
(3−3)秘匿化データベースへの挿入に関する処理の流れ
第三の実施例の秘匿化データベースへの挿入に関する処理は、2−3項で説明した第二の実施例と同様である。
(3−4)秘匿化データベースの更新に関する処理の流れ
第三の実施例の秘匿化データベースの更新に関する処理は、2−4項で説明した第二の実施例と同じである。
(3−5)秘匿化データベースの削除に関する処理の流れ
第三の実施例の秘匿化データベースの削除に関する処理は、2−5項で説明した第二の実施例と同じである。
(3−6)マッピングテーブルの並べ替えに関する処理の流れ
第三の実施例のマッピングテーブル363Bの並べ替えに関する処理は、2−6項で説明した第二の実施例と同じである。
(3−7)マッピングテーブルの頻度分布の平準化に関する処理の流れ
図40及び図41を用いて、第三の実施例の秘匿化データベースシステム1において、マッピングテーブル363Bの平準化を行う際の処理を説明する。
図40は、第三の実施例のユーザシステム側サーバ3において、データベースラッパー部212が実行するマップID頻度分布平準化クエリ生成処理を示すフローチャートである。マップID頻度分布平準化クエリ生成処理は、データベースラッパー部212がアプリケーション部211等からの平準化要求を受けると、開始する。
まず、データベースラッパー部212は、平準化前のマッピングテーブル363Bから”MapID”カラムの各値毎の頻度を取得する。例えば、図38に示す平準化前のマッピングテーブル363Bの場合、MapID”1”の頻度が2であり、MapID”2”の頻度が3でありMapID”3”及び”10”の頻度が1である。
次に、データベースラッパー部212は、MapIDの各値の頻度が同一かを判定し、同一の場合(YES)、処理を終了する。
一方、ステップ3920の結果が(NO)である場合、データベースラッパー部212は、ステップ3910で取得した頻度のうち最大頻度をNmaxとする。例えば、平準化前のマッピングテーブル363Bの場合、NmaxはMapID”2”の頻度である3となる(ステップ3930)。
次に、データベースラッパー部212は、最大頻度以外のMapIDの各値について、Nmaxと各値の頻度との差分の数だけ乱数を生成し、その乱数の各値のペアから構成されるレコードをマッピングテーブル363Bに挿入する頻度分布平準化SQLを生成する。例えば、平準化前のマッピングテーブル363Bの場合、図39に示す模擬レコード3631C〜3635Cを挿入するSQLを生成する(ステップ3940)。
最後に、データベースラッパー部212は、ステップ3940で生成した頻度分布平準化SQLをデータベースインタフェース部213へ送信し、マップID頻度分布平準化クエリ生成処理(図40)を終了する。
図41は、第三の実施例のクラウドシステム側サーバ4において、データベース制御部311が実行するマップID頻度分布平準化処理を示すフローチャートである。この処理は、データベース制御部311が、データベースラッパー部212からの頻度分布平準化SQLを受信すると、SQLに指定されたレコードをマッピングテーブル363Bに挿入する(ステップ4010)。そして、挿入結果をデータベースラッパーへ送信する(ステップ4020)。
(3−8)第三の実施例の効果
以上のように、第三の実施例の秘匿化データベースシステム1では、マッピングテーブル363のMapIDの出現頻度の分布を平準化することにより、MapIDの出現頻度を隠蔽するため、第二の実施例より安全な検索を行うことができる。
以上に説明したように、本発明の実施例によると、データベースラッパー部212は、暗号化データを検索するための平文のSQL文を受信すると、前記暗号化データをクラウドシステム側サーバ4上で処理する暗号化SQL文に変換し、クラウドシステム側サーバ4が前記暗号化SQL文を受信すると、受信した暗号化SQL文を実行することによって、データベース制御部311が前記ハッシュテーブルを検索して前記暗号化データの範囲を限定し、ユーザ定義機能部312(暗号文一致比較部3121)が前記限定された範囲の暗号化データについて前記暗号化SQL文が指示する一致比較を行い、データベース制御部311が前記暗号化SQL文の実行結果をユーザシステム側サーバ3へ送信するので、暗号化された大容量の暗号化メインテーブル361への検索に際して、ハッシュテーブル362を事前に検索することで検索対象とするレコードを少なくして、高速に検索することができる。
また、ユーザシステム側サーバ3は、前記暗号化データを処理するSQL文を、データ所有者が使用するユーザ端末2から、ユーザシステム側サーバ3が設けられた設備のユーザ内部ネットワーク5を経由して受信し、ユーザシステム側サーバ3は、前記暗号化データを処理するSQL文を、外部ネットワーク6を介してクラウドシステム側サーバ4に送信するので、クラウド構成の秘匿化データベースシステムにおいて、大容量の暗号化データを高速に検索することができる。
また、ハッシュテーブル362は、暗号化メインテーブル361の各レコードの識別子であるマップID及び前記ハッシュ値を含み、暗号化メインテーブル361は、ハッシュテーブル362に格納されたハッシュ値に対応する識別子であるマップIDを含み、データベース制御部311は、前記ハッシュ値をキーワードとしてハッシュテーブル362を検索し、一致したハッシュ値を持つレコードのマップIDを取得し、前記取得したマップIDを持つ暗号化メインテーブル361のレコードを検索対象とするので、ハッシュテーブル362に記録されたマップIDを用いて検索対象を絞り込むことができる。
また、データベース制御部311は、暗号化メインテーブル361のマップIDと前記ハッシュテーブルのマップIDとを対応付け、暗号化メインテーブル361に存在しないがハッシュテーブル362に存在するマップIDを含むレコードをハッシュテーブル362から削除するので、不要なデータを削除して、検索を高速化し、使用リソースを削減することができる。
また、データベースラッパー部212は、検索するデータのハッシュ値とハッシュテーブル362に格納された暗号化ハッシュ値との一致検索を行うハッシュテーブル検索クエリを生成し、データベース制御部311は、前記生成されたハッシュテーブル検索クエリと前記暗号化ハッシュ値との一致判定を暗号文一致比較部3121に行わせるので、ハッシュテーブル362の肥大化を防止することができる。
また、ユーザシステム側サーバ3は、元データに対応する暗号化ハッシュ値を格納するハッシュテーブルとの関係を示す情報を格納する秘匿インデックスマップテーブル262を有し、データベースラッパー部212は、秘匿インデックスマップテーブル262を検索した結果、検索対象のデータに対応する暗号化ハッシュ値を格納するハッシュテーブル362が存在しない場合、ハッシュテーブル362を検索するSQL文を生成せず、暗号化メインテーブル361を検索するSQL文を生成するので、ハッシュ値によるインデックスを使用できない場合でも、高速に検索することができる。
また、データベースラッパー部212は、確率的暗号化を行った暗号化データで暗号化メインテーブル361を更新する場合、暗号化メインテーブル361の更新対象レコードの識別子を全て取得し、前記取得した識別子の個数分の更新後のデータの暗号文を生成し、当該識別子の個数分の複数のレコードを更新するSQL文を生成するので、暗号の強度を低下させずに、高速に検索することができる。
また、データベースラッパー部212は、SQL文の最大長の制限により前記識別子の個数分の複数のレコードの更新を一文で記述できない場合、SQL文の最大長の制限を超えない長さの複数のSQL文を生成するので、複数の書込処理を並列して実行して、処理を高速化することができる。
また、暗号化メインテーブル361Bは、ハッシュテーブル362Bに格納された暗号化ハッシュ値に対応する識別子マップIDを含まず、クラウドシステム側サーバ4は、暗号化メインテーブル361Bの各レコードに対応する識別子を暗号化した暗号化IDと、当該暗号化IDに対応するハッシュテーブル362に格納されたハッシュ値に対応する識別子であるマップIDとを含むマッピングテーブル363を有し、データベースラッパー部212は、ハッシュテーブル362Bから取得したマップIDに対応するマッピングテーブルの暗号化IDを取得し、前記取得した暗号化IDを一時的に復号化し、前記暗号化IDを復号化した識別子によって、前記暗号化データの検索範囲を限定するので、暗号化メインテーブル361BのレコードとマップIDとの対応関係を隠蔽して、より安全な検索を行うことができる。
また、データベースラッパー部212は、前記マッピングテーブルのレコードを並べ替えるためのクエリを生成するマッピングテーブル並べ替えクエリ生成部を有し、データベース制御部311は、マッピングテーブル並べ替えクエリ生成部が生成したSQL文に従って、前記マッピングテーブルのレコードを並び替えるので、暗号化メインテーブル361Bとマッピングテーブル363のレコード順序が同一にならないようにして、暗号化メインテーブル361Bとマッピングテーブル363の各レコードの対応関係を隠蔽し、より安全に検索することができる。
また、データベースラッパー部212は、前記マッピングテーブルのマップIDの頻度を取得し、前記取得した頻度を等しくするための擬似レコードを前記マッピングテーブルに挿入するためのクエリを生成するマップID頻度分布平準化クエリ生成部を有し、データベース制御部311は、マップID頻度分布平準化クエリ生成部が生成したSQL文に従って、前記マッピングテーブルへ前記擬似レコードを挿入するので、マッピングテーブル363のマップIDの出現頻度の分布を平準化して、マップIDの出現頻度を隠蔽して、より安全な検索を行うことができる。
なお、本発明は前述した実施例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。また、ある実施例の構成の一部を他の実施例の構成に置き換えてもよい。また、ある実施例の構成に他の実施例の構成を加えてもよい。また、各実施例の構成の一部について、他の構成の追加・削除・置換をしてもよい。
また、前述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、SSD(Solid State Drive)等の記憶装置、又は、ICカード、SDカード、DVD等の記録媒体に格納することができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。
本発明は、ユーザシステム側が鍵を持ち暗号化したデータをクラウド事業者に預託し、クラウド事業者が預託された多量の暗号化データを暗号化したまま検索し、分析する機能を顧客に提供する情報処理システムに広く適用することができる。
1…秘匿化データベースシステム、2…ユーザ端末、3…ユーザシステム側サーバ、4…クラウドシステム側サーバ、5…ユーザ内部ネットワーク、6…外部ネットワーク、7…クラウド内部ネットワーク、211…アプリケーション部、212…データベースラッパー部、213…データベースインタフェース部、262、262B…秘匿インデックスマップテーブル、311…データベース制御部、312…ユーザ定義機能部、361、361B…暗号化メインテーブル、362、362B…ハッシュテーブル、363…マッピングテーブル

Claims (15)

  1. ユーザシステムが所有する元データをデータ所有者が管理する暗号鍵によって暗号化した暗号化データが預託されるセンタシステムによって構成される秘匿化データベースシステムであって、
    前記センタシステムは、前記預託された暗号化データを元データに復号化することなく検索する機能を提供するものであって、
    前記ユーザシステムは、前記暗号化データを処理するための平文のSQL文を、前記暗号化データを前記センタシステム上で処理する暗号化SQL文に変換し、前記センタシステムから受信した暗号化データの処理結果を復号化するデータベースラッパー部を有し、
    前記センタシステムは、
    前記暗号化データを格納する暗号化預託データテーブルと、
    前記元データのハッシュ値を暗号化した暗号化ハッシュ値を格納し、前記暗号化預託データテーブルの検索範囲を限定するために参照されるハッシュテーブルと、
    前記暗号化預託データテーブルに格納された暗号化データを検索するデータベース制御部と、
    前記暗号化データと検索クエリとの一致を判定する暗号文一致比較部と、を有し、
    前記データベースラッパー部は、前記暗号化データを検索するための平文のSQL文を、前記暗号化データを前記センタシステム上で処理する暗号化SQL文に変換し、
    前記センタシステムが受信した前記暗号化SQL文を実行することによって、前記データベース制御部が前記ハッシュテーブルを検索して前記暗号化データの範囲を限定し、前記暗号文一致比較部が前記限定された範囲の暗号化データについて前記暗号化SQL文が指示する一致比較を行い、前記データベース制御部が前記暗号化SQL文の実行結果を前記ユーザシステムへ送信し、
    前記データベースラッパー部は、前記データベース制御部から受信したSQL文の実行結果を復号化し、前記暗号化データの検索結果を出力することを特徴とする秘匿化データベースシステム。
  2. 請求項1に記載の秘匿化データベースシステムであって、
    前記ユーザシステムは、前記暗号化データを処理するための平文のSQL文を、前記データ所有者が使用するユーザ端末から、前記ユーザシステムが設けられた設備の内部ネットワークを経由して受信し、
    前記ユーザシステムは、前記暗号化データを処理する暗号化SQL文を、外部ネットワークを介して前記センタシステムに送信することを特徴とする秘匿化データベースシステム。
  3. 請求項1に記載の秘匿化データベースシステムであって、
    前記ユーザシステムは、
    前記データ所有者が使用するユーザ端末からの要求を受け、前記要求に対する処理の結果を返信するアプリケーション部と、
    前記データベースラッパー部から暗号化SQL文を受信して前記センタシステムの前記データベース制御部へ送信し、また、前記データベース制御部から前記暗号化SQL文の実行結果を受信して前記データベースラッパー部へ送信するデータベースインタフェース部と、を有し、
    前記データベースラッパー部は、
    前記元データを暗号化する暗号化部と、
    前記センタシステムから受信した暗号化データを元データに復号化する復号化部と、
    前記暗号化データを検索するための検索クエリを生成する検索クエリ生成部と、
    前記元データのハッシュ値を生成するハッシュ値生成部と、
    暗号化処理を実行するための暗号鍵及び検索用鍵を管理する鍵管理部と、
    前記暗号化データを検索するための平文のSQL文を、前記暗号化データを検索して結果を得るための暗号化SQL文に変換するSQL変換部と、を有することを特徴とする秘匿化データベースシステム。
  4. 請求項1に記載の秘匿化データベースシステムであって、
    前記ハッシュテーブルは、前記暗号化預託データテーブルの各レコードの識別子であるマップID及び前記暗号化ハッシュ値を含み、
    前記暗号化預託データテーブルは、前記ハッシュテーブルに格納された暗号化ハッシュ値に対応する識別子であるマップIDを含み、
    前記データベース制御部は、暗号化ハッシュ値をキーワードとして前記ハッシュテーブルを検索し、一致した暗号化ハッシュ値を持つレコードのマップIDを取得し、前記取得したマップIDを持つ前記暗号化預託データテーブルのレコードを検索対象とすることを特徴とする秘匿化データベースシステム。
  5. 請求項4に記載の秘匿化データベースシステムであって、
    前記データベース制御部は、
    前記暗号化預託データテーブルのマップIDと前記ハッシュテーブルのマップIDとを対応付け、
    前記暗号化預託データテーブルに存在しないが前記ハッシュテーブルに存在するマップIDを含むレコードを前記ハッシュテーブルから削除することを特徴とする秘匿化データベースシステム。
  6. 請求項1に記載の秘匿化データベースシステムであって、
    前記データベースラッパー部は、検索するデータの暗号化ハッシュ値と前記ハッシュテーブルに格納された暗号化ハッシュ値との一致検索を行うハッシュテーブル検索クエリを生成し、
    前記データベース制御部は、前記生成されたハッシュテーブル検索クエリと前記暗号化ハッシュ値との一致判定を前記暗号文一致比較部に行わせることを特徴とする秘匿化データベースシステム。
  7. 請求項1に記載の秘匿化データベースシステムであって、
    前記ユーザシステムは、前記元データに対応する暗号化ハッシュ値を格納するハッシュテーブルと、前記暗号化データの格納場所との関係を示す情報を格納する秘匿インデックスマップテーブルを有し、
    前記データベースラッパー部は、前記秘匿インデックスマップテーブルを検索した結果、検索対象のデータに対応する暗号化ハッシュ値を格納するハッシュテーブルが存在しない場合、前記ハッシュテーブルを検索するSQL文を生成せず、前記暗号化預託データテーブルを検索するSQL文を生成することを特徴とする秘匿化データベースシステム。
  8. 請求項1に記載の秘匿化データベースシステムであって、
    前記データベースラッパー部は、確率的暗号化を行った暗号化データで前記暗号化預託データテーブルを更新する場合、前記暗号化預託データテーブルの更新対象レコードの識別子を全て取得し、前記取得した識別子の個数分の更新後の暗号化データを生成し、当該識別子の個数分の複数のレコードを更新するSQL文を生成することを特徴とする秘匿化データベースシステム。
  9. 請求項8に記載の秘匿化データベースシステムであって、
    前記データベースラッパー部は、SQL文の最大長の制限により前記識別子の個数分の複数のレコードの更新を一文で記述できない場合、SQL文の最大長の制限を超えない長さの複数のSQL文を生成することを特徴とする秘匿化データベースシステム。
  10. 請求項1に記載の秘匿化データベースシステムであって、
    前記暗号化預託データテーブルは、前記ハッシュテーブルに格納された暗号化ハッシュ値に対応する識別子マップIDを含まず、
    前記センタシステムは、前記暗号化預託データテーブルの各レコードに対応する識別子を暗号化した暗号化IDと、当該暗号化IDに対応して前記ハッシュテーブルに格納されたハッシュ値に対応する識別子であるマップIDとを含むマッピングテーブルを有し、
    前記データベースラッパー部は、
    前記ハッシュテーブルから取得したマップIDに対応するマッピングテーブルの暗号化IDを取得し、
    前記取得した暗号化IDを一時的に復号化し、
    前記暗号化IDを復号化した識別子によって、前記暗号化データの検索範囲を限定することを特徴とする秘匿化データベースシステム。
  11. 請求項10に記載の秘匿化データベースシステムであって、
    前記データベースラッパー部は、前記マッピングテーブルのレコードを並べ替えるためのクエリを生成するマッピングテーブル並べ替えクエリ生成部を有し、
    前記データベース制御部は、マッピングテーブル並べ替えクエリ生成部が生成したクエリに従って、前記マッピングテーブルのレコードを並び替えることを特徴とする秘匿化データベースシステム。
  12. 請求項10に記載の秘匿化データベースシステムであって、
    前記データベースラッパー部は、前記マッピングテーブルのマップIDの頻度を取得し、前記取得した頻度を等しくするための擬似レコードを前記マッピングテーブルに挿入するためのクエリを生成するマップID頻度分布平準化クエリ生成部を有し、
    前記データベース制御部は、マップID頻度分布平準化クエリ生成部が生成したクエリに従って、前記マッピングテーブルへ前記擬似レコードを挿入することを特徴とする秘匿化データベースシステム。
  13. 秘匿化データベースシステムにおける秘匿化データ管理方法であって、
    前記秘匿化データベースシステムは、ユーザシステムが所有する元データをデータ所有者が管理する暗号鍵によって暗号化した暗号化データが預託されるセンタシステムによって構成され、
    前記センタシステムは、前記預託された暗号化データを元データに復号化することなく検索する機能を提供するものであって、
    前記ユーザシステムは、前記暗号化データを処理するための平文のSQL文を、前記暗号化データを前記センタシステム上で処理する暗号化SQL文に変換し、前記センタシステムから受信した暗号化データの処理結果を復号化するデータベースラッパー部を有し、
    前記センタシステムは、
    前記暗号化データを格納する暗号化預託データテーブルと、
    前記元データのハッシュ値を暗号化した暗号化ハッシュ値を格納し、前記暗号化預託データテーブルの検索範囲を限定するために参照されるハッシュテーブルと、
    前記暗号化預託データテーブルに格納された暗号化データを検索するデータベース制御部と、
    前記暗号化データと検索クエリとの一致を判定する暗号文一致比較部と、を有し、
    前記方法は、
    前記データベースラッパー部が、前記暗号化データを検索するための平文のSQL文を、前記暗号化データを前記センタシステム上で処理する暗号化SQL文に変換し、
    前記センタシステムが受信した前記暗号化SQL文を実行することによって、前記データベース制御部が前記ハッシュテーブルを検索して前記暗号化データの範囲を限定し、前記暗号文一致比較部が前記限定された範囲の暗号化データについて前記暗号化SQL文が指示する一致比較を行い、前記データベース制御部が前記暗号化SQL文の実行結果を前記ユーザシステムへ送信し、
    前記データベースラッパー部が、前記データベース制御部から受信したSQL文の実行結果を復号化し、前記暗号化データの検索結果を出力することを特徴とする秘匿化データ管理方法。
  14. 請求項13に記載の秘匿化データ管理方法であって、
    前記ハッシュテーブルは、前記暗号化預託データテーブルの各レコードの識別子であるマップID及び前記ハッシュ値を含み、
    前記暗号化預託データテーブルは、前記ハッシュテーブルに格納された暗号化ハッシュ値に対応する識別子マップIDを含み、
    前記方法は、前記データベース制御部が、暗号化ハッシュ値をキーワードとして前記ハッシュテーブルを検索し、一致した暗号化ハッシュ値を持つレコードのマップIDを取得し、前記取得したマップIDを持つ前記暗号化預託データテーブルのレコードを検索対象とすることを特徴とする秘匿化データ管理方法。
  15. 請求項14に記載の秘匿化データ管理方法であって、
    前記データベース制御部が、前記暗号化預託データテーブルのマップIDと前記ハッシュテーブルのマップIDとを対応付け、
    前記データベース制御部が、前記暗号化預託データテーブルに存在しないが前記ハッシュテーブルに存在するマップIDを含むレコードを前記ハッシュテーブルから削除することを特徴とする秘匿化データ管理方法。
JP2015087303A 2015-04-22 2015-04-22 秘匿化データベースシステム及び秘匿化データ管理方法 Active JP6449093B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015087303A JP6449093B2 (ja) 2015-04-22 2015-04-22 秘匿化データベースシステム及び秘匿化データ管理方法
PCT/JP2016/062826 WO2016171271A1 (ja) 2015-04-22 2016-04-22 秘匿化データベースシステム及び秘匿化データ管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015087303A JP6449093B2 (ja) 2015-04-22 2015-04-22 秘匿化データベースシステム及び秘匿化データ管理方法

Publications (2)

Publication Number Publication Date
JP2016206918A JP2016206918A (ja) 2016-12-08
JP6449093B2 true JP6449093B2 (ja) 2019-01-09

Family

ID=57144518

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015087303A Active JP6449093B2 (ja) 2015-04-22 2015-04-22 秘匿化データベースシステム及び秘匿化データ管理方法

Country Status (2)

Country Link
JP (1) JP6449093B2 (ja)
WO (1) WO2016171271A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018154581A1 (en) * 2017-02-22 2018-08-30 Kindite Ltd. Encrypting data records and processing encrypted records without exposing plaintext
KR101979320B1 (ko) * 2017-05-18 2019-05-16 뱅크웨어글로벌 주식회사 메타정보 및 엔터프라이즈 프레임웍을 이용한 암호화 sql문 자동 생성 시스템 및 방법
EP3605505B1 (en) * 2017-05-18 2021-08-25 Mitsubishi Electric Corporation Search device, tag generator, query generator, secret search system, search program, tag generation program, and query generation program
US10846423B2 (en) * 2017-08-11 2020-11-24 Palo Alto Research Center Incorporated System and architecture for analytics on encrypted databases
KR101881856B1 (ko) * 2017-08-31 2018-08-24 주식회사 스파이스웨어 클라우드 네트워크 환경에서 데이터 암호화 및 복호화 처리 방법
US10728022B2 (en) * 2017-12-28 2020-07-28 Fujitsu Limited Secure hash operations in a trusted execution environment
WO2020158842A1 (ja) * 2019-02-01 2020-08-06 株式会社東芝 端末装置、データ処理方法、及びプログラム
CN110008448B (zh) * 2019-04-02 2023-10-17 中国工商银行股份有限公司 将SQL代码自动转换为Java代码的方法和装置
JP7249248B2 (ja) * 2019-08-30 2023-03-30 株式会社日立製作所 秘匿情報処理システム及び秘匿情報処理方法
CN113050878A (zh) * 2019-12-27 2021-06-29 北京兆易创新科技股份有限公司 一种开卡划分块的方法和装置
JP7381893B2 (ja) 2020-04-14 2023-11-16 富士通株式会社 検索方法、検索プログラム、および秘密情報検索システム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11143780A (ja) * 1997-11-05 1999-05-28 Hitachi Ltd データベースにおける秘密情報管理方法およびデータベースの秘密情報管理装置
JP5589746B2 (ja) * 2010-10-14 2014-09-17 富士通株式会社 連携装置、連携元装置、連携先装置、連携プログラム、および連携方法
JP2012248940A (ja) * 2011-05-25 2012-12-13 Mitsubishi Electric Corp データ生成装置、データ生成方法、データ生成プログラム及びデータベースシステム
JP5991155B2 (ja) * 2012-11-13 2016-09-14 富士通株式会社 検索処理方法、データ生成方法及び情報処理装置

Also Published As

Publication number Publication date
WO2016171271A1 (ja) 2016-10-27
JP2016206918A (ja) 2016-12-08

Similar Documents

Publication Publication Date Title
JP6449093B2 (ja) 秘匿化データベースシステム及び秘匿化データ管理方法
US10474835B2 (en) Zero-knowledge databases
US11726993B1 (en) Systems and methods for cryptographically-secure queries using filters generated by multiple parties
US7519835B2 (en) Encrypted table indexes and searching encrypted tables
US11709948B1 (en) Systems and methods for generation of secure indexes for cryptographically-secure queries
US8533489B2 (en) Searchable symmetric encryption with dynamic updating
US10764039B2 (en) Dynamic generation and management of asymmetric cryptographic keys using distributed ledgers
US7930560B2 (en) Personal information management system, personal information management program, and personal information protecting method
KR20090048623A (ko) 데이터베이스 시스템에서 비-결정적으로 암호화된 데이터에대한 검색을 수행하는 방법 및 이를 위한 원격 데이터베이스를 제공하는 방법, 및 기계-판독가능 매체
US11256662B2 (en) Distributed ledger system
CN103607405A (zh) 一种面向云存储的密文搜索认证方法
EP3296980B1 (en) Database system and database processing method
CN115455463A (zh) 一种基于同态加密的隐匿sql查询方法
US20210182314A1 (en) Systems and methods for on-chain / off-chain storage using a cryptographic blockchain
Li et al. Forward and backward secure searchable encryption scheme supporting conjunctive queries over bipartite graphs
JP7185953B1 (ja) データ管理システム、データ管理方法、及びデータ管理プログラム
Demertzis Improving Efficiency, Expressiveness and Security of Searchable Encryption
Aashmi et al. Ranked key search and efficient retrieval of grand data on cloud computing
EP4154147A1 (en) Data storage server and client devices for securely storing data
CA2832978C (en) Method of obfuscating relationships between data in database tables
CN116089976A (zh) 关系型数据库的管理方法及装置
Youn et al. Bucket Index Ordering Problem in Range Queries

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171120

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181205

R150 Certificate of patent or registration of utility model

Ref document number: 6449093

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150