(57)【要約】  確率的暗号化方式を用いて暗号化された暗号化データ含む登録情報を記憶するデータベースサーバ、及び端末を含むデータベースシステムであって、端末は、暗号化部、復号化部、暗号化データの検索に用いる検索クエリが暗号化された暗号化検索クエリを生成する暗号化検索クエリ生成部、及び平文の検索条件を暗号化し、暗号化された検索条件を含むデータの取得要求を送信する付加処理部を有し、データベースサーバは、データベース操作命令定義情報、及び検索用付加情報を保持し、データベース操作命令定義情報に基づいてデータの取得要求を変換してデータベース操作命令を生成するデータベース操作命令生成部、及びデータベース操作命令及び検索用付加情報を用いて、検索条件を満たす暗号化データを取得するデータベース制御部を有する。
2017168535.tif 000002
【特許請求の範囲】
【請求項１】
確率的暗号化方式を用いて暗号化された暗号化データを一つ以上含む登録情報を記憶するデータベースサーバ、及び、前記データベースサーバから前記暗号化データを取得するためのデータの取得要求を送信する端末を含むデータベースシステムであって、
前記確率的暗号化方式は、暗号化前のデータ値が、暗号化処理毎に異なるデータ値となるように前記暗号化データが生成される暗号化方式であり、
前記端末は、
ハッシュ値と準同形関数の出力値によるマスクを用いた確率的暗号化方式にしたがって前記データベースサーバに格納するデータを暗号化する暗号化部と、
前記暗号化データを復号化する復号化部と、
複数の異なる入力値から同一の値を出力する準同形関数を用いたマスクによる確率的暗号化にしたがって、暗号化データの検索に用いられる検索クエリが暗号化された暗号化検索クエリを生成する暗号化検索クエリ生成部と、
平文の検索条件を暗号化し、暗号化された前記検索条件を含む前記データの取得要求を送信する付加処理部と、を有し、
前記データベースサーバは、
検索処理の種別毎に、前記データの取得要求を前記データベースサーバが処理するデータベース操作命令に変換するための定義パターンを格納するデータベース操作命令定義情報と、
前記検索処理の種別毎の検索用付加情報と、を保持し、
前記データベース操作命令定義情報に基づいて、前記端末から受信したデータ取得要求を変換することによって前記データベース操作命令を生成するデータベース操作命令生成部と、
前記データベース操作命令及び前記検索用付加情報を用いて、要求された前記暗号化データを取得するデータベース制御部と、
前記検索用付加情報を用いて、前記暗号化検索クエリと一致する前記暗号化データを判定する暗号一致判定部と、を有し、
前記付加処理部は、前記検索用付加情報を用いた検索処理を行うためのデータの取得要求を生成し、
前記データベース制御部は、
前記データベース操作命令の実行時に、前記暗号一致判定部を呼び出し、
前記暗号一致判定部の処理結果に基づいて、前記検索条件を満たす前記暗号化データを取得し、
前記取得された暗号化データを含む処理結果を前記端末に送信し、
前記復号化部は、前記処理結果に含まれる前記暗号化データを復号化することを特徴とするデータベースシステム。
【請求項２】
請求項１に記載のデータベースシステムであって、
前記検索用付加情報を用いた検索処理は、二つの結合対象の前記登録情報を結合した結合情報から前記暗号化データを取得する結合情報取得処理、前記登録情報から検索語と部分的に一致する前記暗号化データを取得する部分一致検索処理、及び任意の範囲に含まれる前記暗号化データを取得する範囲検索処理の少なくともいずれかであることを特徴とするデータベースシステム。
【請求項３】
請求項２に記載のデータベースシステムであって、
前記登録情報は、前記暗号化データを格納する一つ以上のカラムを含むレコードを一つ以上含み、
前記結合情報取得処理は、前記結合情報に含まれるレコードから前記一つ以上の暗号化データを取得する処理であり、
前記データベースサーバは、前記結合情報取得処理に用いる暗号化結合情報を前記検索用付加情報として保持し、
前記暗号化結合情報は、前記二つの結合対象の登録情報から結合するレコードを特定するための前記暗号化検索クエリを含み、
前記データベース操作命令生成部は、前記暗号化結合情報を参照し、前記暗号化検索クエリと一致する前記二つの結合対象の登録情報に含まれるレコードを結合するための第１データベース操作命令を生成することを特徴とするデータベースシステム。
【請求項４】
請求項３に記載のデータベースシステムであって、
前記付加処理部は、
前記二つの結合対象の登録情報から、一つの前記登録情報を選択し、
前記データベースサーバから、前記選択された登録情報の結合対象のカラムに格納される前記暗号化データを取得し、
前記復号化部に前記暗号化データの復号化を指示し、
前記暗号化検索クエリ生成部は、前記復号化されたデータから第１暗号化検索クエリを生成し、
前記付加処理部は、
前記選択された登録情報に、前記第１暗号化検索クエリを格納するカラムを追加することによって前記暗号化結合情報を生成するための第１生成要求を送信し、
前記データベース操作命令生成部は、前記第１生成要求から第２データベース操作命令を生成し、
前記データベース制御部は、前記第２データベース操作命令に基づいて、前記暗号化結合情報を生成することを特徴とするデータベースシステム。
【請求項５】
請求項４に記載のデータベースシステムであって、
前記付加処理部は、
前記二つの結合対象の登録情報の各々の前記レコード数を取得し、
前記レコード数が少ない前記登録情報を、前記第１暗号化検索クエリを格納するカラムを追加する前記登録情報として選択することを特徴とするデータベースシステム。
【請求項６】
請求項２に記載のデータベースシステムであって、
前記登録情報は、前記暗号化データを格納する一つ以上のカラムを含むレコードを一つ以上含み、
前記部分一致検索処理は、前記登録情報から検索語に部分的に一致する暗号化データを格納するレコードを検索し、検索されたレコードから前記一つ以上の暗号化データを取得する処理であり、
前記データベースサーバは、前記部分一致検索処理に用いる暗号化部分情報を前記検索用付加情報として保持し、
前記暗号化部分情報は、検索対象の前記登録情報の対象のカラムに格納される前記暗号化データが暗号化される前の平文データが所定の粒度に分割した第１部分データを暗号化することによって生成された暗号化部分データ、及び前記暗号化データの識別情報を含み、
前記付加処理部は、前記検索語を所定の粒度に分割することによって前記複数の第１部分データを生成し、
前記暗号化検索クエリ生成部は、前記複数の第１部分データから複数の第２暗号化検索クエリを生成し、
前記付加処理部は、前記複数の第２暗号化検索クエリを含む前記データの取得要求を送信し、
前記データベース操作命令生成部は、前記複数の第２検索クエリの各々に一致する前記暗号化部分情報の前記暗号化部分データを含むレコードを検索するための第３データベース操作命令を生成することを特徴とするデータベースシステム。
【請求項７】
請求項６に記載のデータベースシステムであって、
前記第３データベース操作命令は、前記暗号化部分情報から前記第２検索クエリに一致するレコードを検索し、前記検索されたレコードに含まれる前記暗号化データの識別情報を取得するための第４データベース操作命令と、前記暗号化部分情報から検索されたレコードに含まれる前記暗号化データの識別情報に基づいて、前記検索対象の登録情報に含まれるレコードを検索するための第５データベース操作命令と、を含むことを特徴とするデータベースシステム。
【請求項８】
請求項６に記載のデータベースシステムであって、
前記付加処理部は、
検索対象の前記登録情報から前記対象のカラムに格納される前記暗号化データを取得し、
前記復号化部に前記暗号化データの復号化を指示し、
前記復号化されたデータを所定の粒度の分割することによって複数の第２部分データを生成し、
前記暗号化検索クエリ生成部は、前記複数の第２部分データから前記複数の第２暗号化検索クエリを生成し、
前記複数の第２暗号化データの各々の識別情報と、前記複数の第２暗号化検索クエリとを対応付けて前記暗号化部分情報を生成するための第２生成要求を送信し、
前記データベース操作命令生成部は、前記第２生成要求から第５データベース操作命令を生成し、
前記データベース制御部は、前記第５データベース操作命令に基づいて、前記暗号化部分情報を生成することを特徴とするデータベースシステム。
【請求項９】
請求項８に記載のデータベースシステムであって、
前記付加処理部は、Ｎ−ｇｒａｍ方式に基づいて、前記第１部分データ及び前記第２部分データを生成することを特徴とするデータベースシステム。
【請求項１０】
請求項２に記載のデータベースシステムであって、
前記登録情報は、前記暗号化データを格納する一つ以上のカラムを含むレコードを一つ以上含み、
前記範囲検索処理は、対象の登録情報から、対象のカラムに格納される前記暗号化データが指定された範囲に含まれるレコードを検索し、前記検索されたレコードから前記一つ以上の暗号化データを取得する処理であり、
前記データベースサーバは、前記範囲検索処理に用いる暗号化対応範囲情報を保持し、
前記端末は、第３暗号化検索クエリを生成するための対応範囲情報を保持し、
前記暗号化対応範囲情報は、前記対象の登録情報に含まれるレコードの識別情報、及び、前記対象の登録情報に含まれるレコードの前記対象のカラムに含まれる前記暗号化データが含まれる範囲を識別するためのラベルが暗号化された暗号化ラベルを含み、
前記対応範囲情報は、前記対象のカラムの値域を分割した区分及び前記ラベルを含み、
前記付加処理部は、
前記対応範囲情報を参照して、指定された範囲と重複する前記区分を特定し、
前記特定された区分に対応する前記ラベルから前記第３暗号化検索クエリを生成し、
前記第３暗号化検索クエリを含む前記データの取得要求を送信し、
前記データベース操作命令生成部は、前記暗号化されたラベルが前記第３暗号化検索クエリに一致する前記暗号化対応範囲情報に含まれるレコードを検索するための第６データベース操作命令を生成することを特徴とするデータベースシステム。
【請求項１１】
請求項１０に記載のデータベースシステムであって、
前記対応範囲情報に含まれるレコードは、前記区分に含まれる値を有する前記対象の登録情報に含まれるレコードの数を示す頻度を含み、
前記付加処理部は、前記対応範囲情報に含まれる前記レコードに含まれる前記頻度に基づいて、指定された数より出力されるレコードの数が小さくなるように所定の数の前記区分を特定することを特徴とするデータベースシステム。
【請求項１２】
請求項１０に記載のデータベースシステムであって、
前記付加処理部は、
前記データベースサーバから取得したレコードの前記対象のカラムに格納される前記暗号化データの復号化を前記復号化部に命令し、
前記復号化されたデータに基づいて、前記データベースサーバから取得したレコードから、指定された範囲に含まれないレコードを削除することを特徴とするデータベースシステム。
【請求項１３】
請求項２に記載のデータベースシステムであって、
前記付加処理部は、前記データベースサーバから取得された前記暗号化データを所定の順番で並び替えることを特徴とするデータベースシステム。
【請求項１４】
確率的暗号化方式を用いて暗号化された暗号化データを一つ以上含む登録情報を記憶するデータベースサーバ、及び、前記データベースサーバから前記暗号化データを取得するためのデータの取得要求を送信する端末を含むデータベースシステムにおけるデータ検索方法であって、
前記確率的暗号化方式は、暗号化前のデータ値が、暗号化処理毎に異なるデータ値となるように前記暗号化データが生成される暗号化方式であり、
前記端末は、
ハッシュ値と準同形関数の出力値によるマスクを用いた確率的暗号化方式にしたがって前記データベースサーバに格納するデータを暗号化する暗号化部と、
前記暗号化データを復号化する復号化部と、
複数の異なる入力値から同一の値を出力する準同形関数を用いたマスクによる確率的暗号化にしたがって、暗号化データの検索に用いられる検索クエリが暗号化された暗号化検索クエリを生成する暗号化検索クエリ生成部と、
平文の検索条件を暗号化し、暗号化された前記検索条件を含む前記データの取得要求を送信する付加処理部と、を有し、
前記データベースサーバは、
検索処理の種別毎に、前記データの取得要求を前記データベースサーバが処理するデータベース操作命令に変換するための定義パターンを格納するデータベース操作命令定義情報と、
前記検索処理の種別毎の検索用付加情報と、を保持し、
前記データベース操作命令定義情報に基づいて、前記端末から受信したデータ取得要求を変換することによって前記データベース操作命令を生成するデータベース操作命令生成部と、
前記データベース操作命令及び前記検索用付加情報を用いて、要求された前記暗号化データを取得するデータベース制御部と、
前記検索用付加情報を用いて、前記暗号化検索クエリと一致する前記暗号化データを判定する暗号一致判定部と、を有し、
前記データ検索方法は、
前記付加処理部が、検索条件を受け付けるステップと、
前記付加処理部が、前記検索条件に基づいて、前記検索用付加情報を用いた検索処理を行うためのデータの取得要求を生成するステップと、
前記付加処理部が、前記データの取得要求を前記データベースサーバに送信するステップと、
前記データベース制御部が、前記データベース操作命令によって生成された前記データベース操作命令を実行する場合、前記暗号一致判定部を呼び出すステップと、
前記データベース制御部が、前記暗号一致判定部の処理結果に基づいて、前記検索条件を満たす前記暗号化データを取得するステップと、
前記データベース制御部が、前記取得された暗号化データを含む処理結果を前記端末に送信するステップと、
前記復号化部が、前記処理結果に含まれる前記暗号化データを復号化するステップと、
前記付加処理部が、前記復号化されたデータを提示するための表示情報を生成するステップと、を含むことを特徴とするデータ検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを暗号化して鍵を持たないシステム管理者に隠蔽した状態でデータを保存する秘匿化データベースシステムに関する。
【背景技術】
【０００２】
近年、ストレージの低価格化及び大規模化、並びにネットワークの整備等の情報技術の発展に伴い、蓄積される情報量が増大している。このような状況の下、いわゆるビッグデータを活用しようという動きが活発化している。【０００３】
また、クラウドコンピューティングの普及が進んでおり、クラウド上のビッグデータ分析基盤の活用が広まっていくと考えられる。【０００４】
医療情報及び個人情報等は極めて機微性が高く、クラウド上からのデータの復元及びデータ持ち出し等の情報漏えいのリスクに対処する必要がある。その対処法の１つとして、ユーザのみがデータの暗号化の鍵を管理することによって、鍵を管理していないクラウドのシステム管理者に対してデータを隠蔽し、クラウド上でデータを復元できない状態にし、クラウドからのデータの持ち出しリスクを低減する秘匿化データベースシステムが有効である。【０００５】
前述した秘匿化データベースシステムに、さらに、暗号化データの検索を可能とする検索可能暗号技術などを用いることが有効である。これによって、クラウド上でデータを復号化することなく、データの検索及び分析が可能となる。【０００６】
本技術の背景技術として、特許文献１、特許文献２、特許文献３、及び非特許文献１がある。特許文献１には、「データベースシステムにネットワークを介して接続するユーザシステムであって、暗号化と復号化のための鍵情報を管理する手段と、データ及び／又はメタデータの安全性設定情報を記憶する記憶部と、データベース操作命令に対して暗号化の必要の有無を判別し、暗号化が必要な場合、データ及び／又はメタデータに応じた暗号化アルゴリズムを選択して暗号化した上でデータベース制御手段に送信してデータベースの操作を実行し、暗号化が不要な場合、前記データベース操作命令をデータベース制御手段に送信してデータベース操作を実行し、前記データベース制御手段から送信された処理結果を受け取り、前記処理結果のデータ及び／又はメタデータの復号化あるいは変換が必要な場合、必要な復号化あるいは変換を行い、前記データベース操作命令の応答として返すアプリケーション応答手段と、データベースに格納するデータの安全性情報を設定する安全性設定手段を備えるシステム」が開示されている。【０００７】
また、特許文献２には、同値関係を保存する暗号化及び順序関係をクラウド上に保持すること等により暗号化状態での検索・ソート等を可能とするシステムが開示されている。【０００８】
また、非特許文献１には、暗号化データの部分情報を開示可能な鍵をサーバ側に送付することによって、検索を高速化する方法が開示されている。さらに、非特許文献１には、Ｗｅｂアプリケーションシステムにおいて、プラグインとして利用者のブラウザ上で動作する暗号化／復号化の仕組みを設け、データベースのユーザ定義関数として検索可能暗号を追加し、ＳＱＬ文を用いて当該暗号を利用するシステムが開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１４−１３５８２号公報
【特許文献２】特開２０１３−２５３６１号公報
【特許文献３】特開２０１２−１２３６１４号公報
【非特許文献】
【００１０】
【非特許文献１】松田  規、他４名、“検索可能暗号の高速化とWebアプリケーションへの適用方式に関する提案”、平成２５年７月、「マルチメディア，分散，協調とモバイル（ＤＩＣＯＭＯ２０１３）シンポジウム」
【発明の概要】
【発明が解決しようとする課題】
【００１１】
近年、一般的なＰＣに加えて、スマートフォン及びタブレット端末等ユーザ端末が多様化している。そのため、様々なユーザ端末が、直接、クラウドにアクセスし、クラウド上のアプリケーションサーバを介してデータベースサーバを操作し、主要なデータ処理をクラウド側で行なうクラウドサービスの利用形態が広まっている。【００１２】
前述した利用形態におけるデータ取得処理は、一般的に以下の流れとなる。まず、ユーザ端末が、アプリケーションサーバにキーワード等を含むデータの取得条件を送信する。次に、クラウド上のアプリケーションサーバが、データの取得条件を解釈し、解釈の結果に基づいてデータベース操作命令を生成し、データベース操作命令をデータベースサーバに送信することによって、要求された情報をデータベースサーバから取得する。最後に、アプリケーションサーバが、取得した情報をユーザ端末に送信する。【００１３】
ユーザのみが鍵を管理し、データベースサーバには当該鍵を用いて暗号化されたデータを格納する秘匿化データベースシステムでは、アプリケーションサーバが生成する一般的なデータベース操作命令が処理できない場合がある。【００１４】
具体的には、暗号文間の同値関係及び順序関係が隠蔽される確率的暗号方式で暗号化を行なった秘匿化データベースシステムに対して、データベースサーバは、次の（１）から（４）のデータ取得処理を実行することができない。【００１５】
（１）２つの異なるテーブルに含まれるレコードを結合し、結合した情報を取得するデータベース操作命令。例えば、患者テーブル及び診断テーブルから各患者の情報を含むレコードと診断情報を含むレコードとを結合した結合結果を取得する場合に、前述したデータベース操作命令が発行される。【００１６】
（２）部分的なキーワードを検索条件として、任意のテーブルのレコードに含まれるカラムと部分的に一致するレコードを取得するデータベース操作命令。例えば、患者の氏名の一部をキーワードとして入力し、患者テーブルから部分的に一致する患者のレコードを取得する場合に、前述したデータベース操作命が発行される。【００１７】
（３）所定のカラムの値の範囲、例えば、上限値及び下限値を検索条件として、任意のテーブルから指定された範囲に含まれるレコードを取得するデータベース操作命令。例えば、患者の年齢の上限値及び下限値を範囲の条件として、患者テーブルから指定された範囲に含まれる患者のレコードを取得する場合に、前述したデータベース操作命が発行される。【００１８】
（４）所定のテーブルから、指定された順番にソートされた所定の数のレコードを取得するデータベース操作命令。例えば、患者ＩＤの昇順に並び替えられた一定数のレコードを患者テーブルから取得する場合に、前述したデータベース操作命令が発行される。【００１９】
本発明は、前述したデータベース操作命令が実行可能な秘匿化データベースシステム及び秘匿化データベースシステムにおけるデータの取得方法を提案するものである。
【課題を解決するための手段】
【００２０】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、確率的暗号化方式を用いて暗号化された暗号化データを一つ以上含む登録情報を記憶するデータベースサーバ、及び、前記データベースサーバから前記暗号化データを取得するためのデータの取得要求を送信する端末を含むデータベースシステムであって、前記確率的暗号化方式は、暗号化前のデータ値が、暗号化処理毎に異なるデータ値となるように前記暗号化データが生成される暗号化方式であり、前記端末は、ハッシュ値と準同形関数の出力値によるマスクを用いた確率的暗号化方式にしたがって前記データベースサーバに格納するデータを暗号化する暗号化部と、前記暗号化データを復号化する復号化部と、複数の異なる入力値から同一の値を出力する準同形関数を用いたマスクによる確率的暗号化にしたがって、暗号化データの検索に用いられる検索クエリが暗号化された暗号化検索クエリを生成する暗号化検索クエリ生成部と、平文の検索条件を暗号化し、暗号化された前記検索条件を含む前記データの取得要求を送信する付加処理部と、を有し、前記データベースサーバは、検索処理の種別毎に、前記データの取得要求を前記データベースサーバが処理するデータベース操作命令に変換するための定義パターンを格納するデータベース操作命令定義情報と、前記検索処理の種別毎の検索用付加情報と、を保持し、前記データベース操作命令定義情報に基づいて、前記端末から受信したデータ取得要求を変換することによって前記データベース操作命令を生成するデータベース操作命令生成部と、前記データベース操作命令及び前記検索用付加情報を用いて、要求された前記暗号化データを取得するデータベース制御部と、前記検索用付加情報を用いて、前記暗号化検索クエリと一致する前記暗号化データを判定する暗号一致判定部と、を有し、前記付加処理部は、前記検索用付加情報を用いた検索処理を行うためのデータの取得要求を生成し、前記データベース制御部は、前記データベース操作命令の実行時に、前記暗号一致判定部を呼び出し、前記暗号一致判定部の処理結果に基づいて、前記検索条件を満たす前記暗号化データを取得し、前記取得された暗号化データを含む処理結果を前記端末に送信し、前記復号化部は、前記処理結果に含まれる前記暗号化データを復号化することを特徴とする。
【発明の効果】
【００２１】
本発明の一形態によれば、端末は、暗号化データを復号化することなく、効率的に暗号化データをデータベースサーバから取得できる。前述した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００２２】
【図１】実施例１の秘匿化データベースシステムの構成例を示すブロック図である。
【図２】実施例１の暗号化メイン情報群のデータ構造の一例を示す図である。
【図３】実施例１のデータベース側付加情報群のデータ構造の一例を示す図である。
【図４】実施例１のＳＱＬ定義情報のデータ構造の一例を示す図である。
【図５】実施例１のメモリに一時的に格納される一時情報のデータ構造の一例を示す図である。
【図６】実施例１の結合情報取得処理の準備処理の流れを説明するシーケンス図である。
【図７】実施例１の結合設定入力画面の一例を示す図である。
【図８】実施例１の結合設定結果表示画面の一例を示す図である。
【図９】実施例１のユーザ側付加処理部が実行する結合対象カラム決定処理の一例を説明するフローチャートである。
【図１０】実施例１の結合情報取得処理の流れを示すシーケンス図である。
【図１１】実施例１の患者情報取得画面の一例を示す図である。
【図１２】実施例１の患者病名一覧表示画面の一例を示す図である。
【図１３】実施例２のユーザ側付加処理部の論理構成を示すブロック図である。
【図１４】実施例２のデータベース側付加処理部の論理構成を示すブロック図である。
【図１５】実施例２のメモリに一時的に格納されるデータのデータ構造の一例を示す図である。
【図１６】実施例２の暗号化メイン情報群のデータ構造の一例を示す図である。
【図１７】実施例２のデータベース側付加情報群のデータ構造の一例を示す図である。
【図１８】実施例２のメモリに一時的に格納される一時情報のデータ構造の一例を示す図である。
【図１９】実施例２の部分一致検索の準備処理の流れを説明するシーケンス図である。
【図２０】実施例２の部分一致設定入力画面の一例を示す図である。
【図２１】実施例２の部分一致設定結果表示画面の一例を示す図である。
【図２２】実施例２の部分情報生成部が実行する部分情報生成処理の一例を説明するフローチャートである。
【図２３】実施例２の部分一致検索の処理の流れを示すシーケンス図である。
【図２４】実施例２の患者情報取得画面の一例を示す図である。
【図２５】実施例２の患者情報表示画面の一例を示す図である。
【図２６】実施例２の部分一致検索クエリ生成部が実行する部分一致検索クエリ生成処理の一例を説明するフローチャートである。
【図２７】実施例２の部分一致ＩＤ取得部が実行する部分一致ＩＤ取得処理の一例を説明するフローチャートである。
【図２８】実施例３のユーザ側付加処理部の論理構成を示すブロック図である。
【図２９】実施例３のユーザ側付加情報群のデータ構造の一例を示す図である。
【図３０】実施例３のメモリに一時的に格納されるデータのデータ構造の一例を示す図である。
【図３１】実施例３の暗号化メイン情報群のデータ構造の一例を示す図である。
【図３２】実施例３のデータベース側付加情報群のデータ構造の一例を示す図である。
【図３３】実施例３のメモリに一時的に格納される一時情報のデータ構造の一例を示す図である。
【図３４】実施例３の範囲検索／ソートの準備処理の流れを説明するシーケンス図である。
【図３５】実施例３の範囲検索／ソート設定入力画面の一例を示す図である。
【図３６】実施例３の範囲検索／ソート設定結果表示画面の一例を示す図である。
【図３７】実施例３の対応範囲情報生成部が実行する対応範囲情報生成処理を説明するフローチャートである。
【図３８】実施例３の対応範囲ラベル情報生成部が実行する対応範囲ラベル情報生成処理を説明するフローチャートである。
【図３９】実施例３の範囲検索／ソート処理の流れを示すシーケンス図である。
【図４０】実施例３の患者情報取得画面の一例を示す図である。
【図４１】実施例３の患者情報表示画面の一例を示す図である。
【図４２】実施例３の範囲検索／ソートクエリ生成部が実行する範囲検索／ソートクエリ生成処理を説明するフローチャートである。
【図４３】実施例３のユーザ端末が実行する結果表示処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００２３】
以下、図面を参照して本発明の実施例を説明する。
【実施例１】
【００２４】
（１−１）実施例１の計算機システムの構成【００２５】
図１は、実施例１の秘匿化データベースシステム１の構成例を示すブロック図である。【００２６】
秘匿化データベースシステム１は、ユーザシステムを構成するユーザ端末２、並びに、データセンタシステムを構成するアプリケーションサーバ３及びデータベースサーバ４から構成される。図１の秘匿化データベースシステム１に含まれるユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４はそれぞれ１つずつであるが、秘匿化データベースシステム１は、各構成を２つ以上含んでもよい。【００２７】
秘匿化データベースシステム１は、以下の機能を提供するシステムである。１つの機能は、ユーザ端末２を操作するユーザが管理するデータを暗号化し、アプリケーションサーバ３を介してデータベースサーバ４に暗号化データ（暗号文）を保存する機能である。また、もう１つの機能は、アプリケーションサーバ３及びデータベースサーバ４が連携して、データベースサーバ４に格納される暗号化データに対する検索機能及び分析機能である。【００２８】
実施例１の秘匿化データベースシステム１は、検索機能の１つとして、結合情報取得処理を実現するための機能を提供する。結合情報取得処理は、２つの異なるテーブルに含まれるレコードを結合し、結合した情報を取得するための処理である。【００２９】
ユーザ端末２及びアプリケーションサーバ３は、ユーザ内部ネットワーク５、外部ネットワーク６、及びクラウド内部ネットワーク７を介して互いに接続する。また、アプリケーションサーバ３及びデータベースサーバ４は、クラウド内部ネットワーク７を介して互いに接続する。【００３０】
ユーザ内部ネットワーク５は、ユーザの事業所内のローカルエリアネットワーク等を含むネットワークである。外部ネットワーク６は、インターネット及びキャリアが提供するワイドエリアネットワーク等を含むネットワークである。クラウド内部ネットワーク７は、データセンタ内のローカルエリアネットワーク等を含むネットワークである。なお、本発明は、各構成を接続するネットワークの種別に限定されない。【００３１】
ユーザ端末２は、ユーザが使用するパーソナルコンピュータ、タブレット端末、及びスマートフォン等の装置である。ユーザ端末２は、ユーザによって入力された取得要求の要求等を暗号化し、アプリケーションサーバ３に暗号化された要求を送信し、また、当該要求に対する暗号化された処理結果を受信する。また、ユーザ端末２は、暗号化された処理結果を受信した場合、当該処理結果を復号化し、復号化された処理結果の取捨選択又は整形等の処理を実行する。また、ユーザ端末２は、処理結果を表示し、また、処理結果を記憶する。【００３２】
ユーザ端末２は、ハードウェア構成として、メモリ２１０、表示装置２２０、入力装置２３０、ＣＰＵ２４０、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）２５０、及び記憶装置２６０を有する。なお、ユーザ端末２は、他のハードウェアを有してもよい。【００３３】
ＣＰＵ２４０は、メモリ２１０に格納されるプログラムを実行する。ＣＰＵ２４０がプログラムを実行することによって、ユーザ端末２が有する機能を実現できる。以下の説明では、機能部を主語に処理を説明する場合、ＣＰＵ２４０が当該機能部を実現するプログラムを実行していることを示す。【００３４】
メモリ２１０は、ＣＰＵ２４０によって実行されるプログラム及び当該プログラムの実行に使用される情報を格納する。また、メモリ２１０は、ワークエリア等を含む。メモリ２１０に格納されるプログラムの詳細は後述する。なお、メモリ２１０に格納されるプログラムは、記憶装置２６０又は外部の記憶装置に格納されてもよい。この場合、ＣＰＵ２４０は、記憶装置２６０又は外部の記憶装置からプログラムを読み出し、読み出されたプログラムをメモリ２１０に展開する。【００３５】
記憶装置２６０は、データを永続的に格納する不揮発性の記憶装置である。記憶装置２６０は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及びＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等が考えられる。記憶装置２６０に格納されるデータの詳細は後述する。【００３６】
表示装置２２０は、ユーザに対して各種情報を表示するための装置である。表示装置２２０は、例えば、ディスプレイ等が考えられる。入力装置２３０は、ユーザがユーザ端末２に対して各種情報を入力するための装置である。入力装置２３０は、例えば、キーボード、マウス、及びタッチパネル等が考えられる。【００３７】
ここで、メモリ２１０に格納されるプログラムについて説明する。メモリ２１０は、ブラウザ２１１、暗号化部２１２、復号化部２１３、暗号化検索クエリ生成部２１４、鍵管理部２１５、及びユーザ側付加処理部２１６を実現するプログラムを格納する。【００３８】
ブラウザ２１１は、表示装置２２０に、入力装置２３０を介してユーザが要求を入力するための画面、及び要求に対する処理結果を参照するための画面等を表示する。【００３９】
暗号化部２１２は、平文の入力を受け付け、特許文献３に記載の確率的暗号化方式に基づいて平文を暗号化することによって暗号文（暗号化データ）を出力する。【００４０】
ここで、確率的暗号化方式は、暗号化されていないデータ（平文）から、同値関係及び大小関係が秘匿されたランダムな暗号文（暗号化データ）を生成する暗号化のアルゴリズムである。確率的暗号化方式では、平文及び暗号文が一対多の対応関係を有する。【００４１】
特許文献３に記載の確率的暗号化方式では、ハッシュ値と準同形関数の出力値によるマスクを用いた確率的暗号化方式にしたがってデータベースサーバ４に格納するデータが暗号化される。また、特許文献３に記載の確率的暗号化方式では、複数の異なる入力値から同一の値を出力する準同形関数を用いたマスクによる確率的暗号化にしたがって、暗号化データの検索に用いられるクエリが暗号化される。【００４２】
より具体的には、特許文献３には、「確率的暗号化方式により暗号化された登録データを記憶するＤＢサーバと、検索クライアントとを含み、前記検索クライアントから受信した、前記ＤＢサーバが記憶するデータの検索を要求する検索クエリに従い、前記ＤＢサーバが記憶する前記データの暗号化を解除せずに、検索する検索可能暗号処理システムであって、前記確率的暗号化方式は、同一のデータ値の平文から異なるデータ値の暗号文を生成するデータの暗号化方式であり、前記検索クライアントは、前記検索クエリを記憶する記憶部と、前記検索クエリを暗号化する制御部と、暗号化した前記検索クエリを送信する通信部とを備え、前記検索クライアントにおける前記制御部は、第１の乱数を生成する乱数生成部と、前記第１の乱数により前記検索クエリを前記確率的暗号化方式で暗号化する基本演算部と、前記第１の乱数を入力値とする準同型関数の関数値を出力値とする準同型関数部とを備え、前記検索クライアントにおける前記制御部は、前記準同型関数部が出力した前記関数値を変換し、ハッシュ値を出力する圧縮関数部を備え、前記ＤＢサーバは、前記検索クエリを受信する通信部と、暗号化された前記検索クエリと暗号化された前記登録データを記憶する記憶部と、記憶する前記登録データが前記検索クエリに該当するかを決定する制御部とを備え、前記ＤＢサーバにおける前記制御部は、暗号化された前記登録データと暗号化された前記検索クエリとの乱数の相関を導出する全体処理部と、前記相関を入力値とする準同型関数の関数値を出力値とする準同型関数部とを備え、前記検索クライアントが送信する暗号化された前記検索クエリは、前記基本演算部により、前記確率的暗号化方式で暗号化された暗号文と、前記圧縮関数部が出力する前記ハッシュ値から構成されるデータが暗号化されていること」が記載されている。【００４３】
特許文献３に記載の確率的暗号化方式を用いることによって、データベースサーバ４側で暗号化データのみを用いた検索が可能となる。【００４４】
以下の説明では、暗号化データと区別するために、暗号化されていないデータを平文データとも記載する。また、本明細書の確率的暗号化方式は、特許文献３に記載の確率的暗号化方式を示す。【００４５】
復号化部２１３は、暗号文（暗号化データ）の入力を受け付け、確率的暗号化方式の暗号処理とは逆の手順にしたがって暗号文を復号化することによって平文（平文データ）を出力する。【００４６】
暗号化検索クエリ生成部２１４は、平文データの入力を受け付け、暗号一致判定処理に使用される暗号化された検索クエリを出力する。なお、暗号一致判定処理は、暗号一致判定部４１２によって実行される。本明細書では、暗号化された検索クエリを単に検索クエリとも記載する。【００４７】
鍵管理部２１５は、暗号化及び復号化に使用する鍵情報を管理する。鍵管理部２１５は、暗号化部２１２、復号化部２１３、及び暗号化検索クエリ生成部２１４から鍵取得要求を受け付けた場合、各部に処理に必要な鍵情報を送信する。【００４８】
ユーザ側付加処理部２１６は、データベースサーバ４から暗号化データを取得するための処理を実行する。具体的には、以下のような３つの処理が実行される。【００４９】
（１）ユーザ側付加処理部２１６は、データベースサーバ４から要求された暗号化データを検索し、取得するための準備処理を実行する。（２）ユーザ側付加処理部２１６は、ユーザがブラウザ２１１を介して入力したデータの取得要求をアプリケーションサーバ３が解釈できるデータの取得要求に変換し、変換されたデータの取得要求をアプリケーションサーバ３に出力する。（３）ユーザ側付加処理部２１６は、アプリケーションサーバ３から受信したデータの取得要求に対する処理結果の情報を入力として受け付け、データの取得要求にしたがってデータの取捨選択及びデータの整形を行った後、処理結果を出力する。【００５０】
次に、記憶装置２６０に格納される情報について説明する。記憶装置２６０は、メイン情報群２６１及びユーザ側付加情報群２６２を格納する。【００５１】
メイン情報群２６１は、ユーザ端末２を操作するユーザが管理する情報であり、データベースサーバ４に保存される前の平文データを格納する。例えば、メイン情報群２６１には、テーブル形式の情報が複数格納される。なお、メイン情報群２６１に格納されるデータのデータ形式に限定されない。【００５２】
通常、メイン情報群２６１は暗号化されてデータベースサーバ４に格納されるため、ユーザ端末２は、メイン情報群２６１を保持していない。ただし、初めてデータをデータベースサーバ４に登録する場合には、ユーザ端末２が、メイン情報群２６１を保持することが考えられる。【００５３】
ユーザ側付加情報群２６２は、データの取得要求を生成する場合に参照される付加情報を格納する。ユーザ側付加情報群２６２を用いた処理は、実施例２で説明する。【００５４】
アプリケーションサーバ３は、ユーザ端末２からデータの取得要求を受信し、当該データの取得要求を用いて暗号化データに対する処理を行うためのデータベース操作命令を生成し、データベースサーバ４に生成されたデータベース操作命令を送信する。また、アプリケーションサーバ３は、データベース操作命令に対する処理結果をデータベースサーバ４から受信し、当該処理結果をユーザ端末２に送信する。【００５５】
本実施例では、データベース操作命令としてＳＱＬを例に説明する。なお、本実施例は、データベース操作命令の種別に限定されない。【００５６】
アプリケーションサーバ３は、ハードウェア構成として、メモリ３１０、表示装置３２０、入力装置３３０、ＣＰＵ３４０、ＮＩＣ３５０、及び記憶装置３６０を有する。なお、アプリケーションサーバ３は、他のハードウェアを有してもよい。メモリ３１０、表示装置３２０、入力装置３３０、ＣＰＵ３４０、ＮＩＣ３５０、及び記憶装置３６０は、メモリ２１０、表示装置２２０、入力装置２３０、ＣＰＵ２４０、ＮＩＣ２５０、及び記憶装置２６０と同一のものであるため説明を省略する。【００５７】
メモリ３１０に格納されるプログラムについて説明する。メモリ３１０は、アプリケーション部３１１、ＳＱＬ生成部３１２、及びデータベースインタフェース部３１３を実現するプログラムを格納する。【００５８】
アプリケーション部３１１は、ユーザ端末２から受信したデータの取得要求を処理し、データの取得要求に含まれる入力情報をＳＱＬ生成部３１２に送信し、また、データの取得要求に対する処理結果をデータベースサーバ４から受信する。【００５９】
ＳＱＬ生成部３１２は、ＳＱＬ定義情報３６１に基づいて、データの取得要求に含まれる入力情報に対応する暗号化データを含むＳＱＬを生成し、データベースインタフェース部３１３に送信する。また、ＳＱＬ生成部３１２は、当該ＳＱＬの処理結果をデータベースインタフェース部３１３から受信し、当該処理結果をアプリケーション部３１１に送信する。【００６０】
データベースインタフェース部３１３は、ＳＱＬ生成部３１２から受信したＳＱＬをデータベースサーバ４に送信し、データベースサーバ４からＳＱＬの処理結果を受信し、また、ＳＱＬ生成部３１２に当該処理結果を送信する。【００６１】
記憶装置３６０に格納される情報について説明する。記憶装置３６０は、ＳＱＬ定義情報３６１を格納する。【００６２】
ＳＱＬ定義情報３６１は、データの取得要求の種類ごとのＳＱＬの生成パターンを定義した情報を格納する。【００６３】
本実施例では、ＳＱＬ定義情報３６１は記憶装置３６０に格納されるが、メモリ３１０に格納されてもよい。また、ＳＱＬ定義情報３６１は、記憶装置３６０及びメモリ３１０の両方に格納されてもよい。【００６４】
データベースサーバ４は、アプリケーションサーバ３から受信したＳＱＬを実行することによって暗号化データを含む処理結果を生成し、当該処理結果をアプリケーションサーバ３に送信する。【００６５】
データベースサーバ４は、ハードウェア構成として、メモリ４１０、表示装置４２０、入力装置４３０、ＣＰＵ４４０、ＮＩＣ４５０、及び記憶装置４６０を有する。なお、データベースサーバ４は、他のハードウェアを有してもよい。メモリ４１０、表示装置４２０、入力装置４３０、ＣＰＵ４４０、ＮＩＣ４５０、及び記憶装置４６０は、メモリ２１０、表示装置２２０、入力装置２３０、ＣＰＵ２４０、ＮＩＣ２５０、及び記憶装置２６０と同一のものであるため説明を省略する。【００６６】
メモリ４１０に格納されるプログラムについて説明する。メモリ４１０は、データベース制御部４１１、暗号一致判定部４１２、及びデータベース側付加処理部４１３を実現するプログラムを格納する。【００６７】
データベース制御部４１１は、アプリケーションサーバ３からＳＱＬを受信し、暗号一致判定部４１２及びデータベース側付加処理部４１３と連携して暗号化メイン情報群４６１に対してＳＱＬを実行する。また、データベース制御部４１１は、ＳＱＬを実行することによって取得された暗号化データを含む処理結果をアプリケーションサーバ３に送信する。【００６８】
暗号一致判定部４１２は、２つの暗号化データを比較し、各暗号化データの暗号化前の平文データが一致するか否かを判定する。より具体的には、暗号一致判定部４１２は、暗号化部２１２が生成した暗号化データ及び暗号化検索クエリ生成部２１４が生成した検索クエリを入力として受け付け、暗号化データの平文データ及び検索クエリの平文データが一致しているか否かを判定する。暗号一致判定部４１２は、２つの平文データが一致している場合、“ｔｒｕｅ”を出力し、２つの平文データが一致していない場合、“ｆａｌｓｅ”を出力する。【００６９】
暗号一致判定部４１２は、暗号化データを復号化することなく、暗号化データが同一のデータであるか否かを判定できる。【００７０】
データベース側付加処理部４１３は、データを取得するためのデータベース処理のうち、簡便なＳＱＬでは表現が難しい複雑な処理をユーザ定義関数化した機能を有する。より具体的には、データベース側付加処理部４１３は、データベース制御部４１１から暗号化された入力情報を受け付け、データベース側付加情報群４６２等を用いた付加処理を実行し、返り値又は出力値を格納したテーブルを付加処理の処理結果として出力する。【００７１】
記憶装置４６０に格納される情報について説明する。記憶装置４６０は、暗号化メイン情報群４６１及びデータベース側付加情報群４６２を格納する。【００７２】
暗号化メイン情報群４６１は、メイン情報群２６１に対応する暗号化データを格納する。より具体的には、暗号化メイン情報群４６１は、メイン情報群２６１の平文データが確率的暗号化方式に基づいて暗号化された暗号化データを格納する。データベース側付加情報群４６２は、暗号化メイン情報群４６１に対するデータの取得処理を効率化するための情報を格納する。【００７３】
本実施例では、暗号化メイン情報群４６１は、記憶装置４６０に格納されるが、メモリ４１０に格納されてもよい。また、暗号化メイン情報群４６１は、記憶装置４６０及びメモリ４１０の両方に格納されてもよい。【００７４】
図２は、実施例１の暗号化メイン情報群４６１のデータ構造の一例を示す図である。【００７５】
実施例１の暗号化メイン情報群４６１は、暗号化患者情報４６１１及び暗号化診断情報４６１２を含む。【００７６】
暗号化患者情報４６１１は、患者の一覧であり、“ＩＤ”カラム、“患者番号”カラム、及び“名前”カラムを含むレコードを複数含む。図２に示す暗号化患者情報４６１１は、患者番号が“００００００１”から“１００００００”まで、１００万件のレコードを格納する。【００７７】
“ＩＤ”カラムは、暗号化患者情報４６１１のレコードを一意に識別するための識別番号である。“患者番号”カラムは、患者を一意に識別するための識別番号である。“名前”カラムは、患者の氏名である。【００７８】
例えば、暗号化患者情報４６１１の一番上のレコードは、患者番号が“Ｅｎｃ（００００００１）”である患者の名前が“Ｅｎｃ（鈴木）”であることを示す。【００７９】
本明細書において、Ｅｎｃ（Ｘ）は、括弧内の平文データＸが暗号化部２１２によって暗号化された暗号化データであることを示す。【００８０】
暗号化診断情報４６１２は、患者の診断結果に関する情報であり、“ＩＤ”カラム、“患者番号”カラム、及び“病名”カラムから構成されるレコードを複数含む。暗号化診断情報４６１２には、病名が判明した患者のレコードのみが格納される。【００８１】
“ＩＤ”カラムは、暗号化診断情報４６１２のレコードを一意に識別するための識別情報である。“患者番号”カラムは、暗号化患者情報４６１１の“患者番号”カラムと同一のものである。“病名”カラムは、患者の診断結果を示す病名である。【００８２】
例えば、暗号化診断情報４６１２の一番上のレコードは、患者番号が“Ｅｎｃ（００００００２）”である患者の病名が“Ｅｎｃ（高血圧症）”であることを示す。【００８３】
図３は、実施例１のデータベース側付加情報群４６２のデータ構造の一例を示す図である。【００８４】
実施例１のデータベース側付加情報群４６２は、暗号化結合情報４６２１を含む。【００８５】
暗号化結合情報４６２１は、“ＩＤ”カラム、“患者番号”カラム、“患者番号＿クエリ”カラム、及び“病名”カラムを含むレコードを複数含む。“ＩＤ”カラム、“患者番号”カラム、及び“病名”カラムは、暗号化診断情報４６１２に含まれるレコードの“ＩＤ”カラム、“患者番号”カラム、及び“病名”カラムに対応する。【００８６】
“患者番号＿クエリ”カラムは、患者番号から生成された検索クエリである。このように、暗号化結合情報４６２１には、暗号化メイン情報群４６１に含まれる複数の情報（テーブル）を結合する場合に実行される暗号一致判定処理に使用される検索クエリのカラムが含まれる。【００８７】
例えば、暗号化結合情報４６２１の一番上のレコードは、暗号化診断情報４６１２のＩＤが“１”のレコードに対応すること、及び、患者番号が“Ｅｎｃ（００００００２）”である患者の患者番号の検索クエリが“ＥｎｃＱｕｅｒｙ（００００００２）”であり、当該患者の病名が“Ｅｎｃ（高血圧症）”であることを示す。【００８８】
本明細書において、ＥｎｃＱｕｅｒｙ（Ｘ）は、括弧内の平文データＸが暗号化検索クエリ生成部２１４によって暗号化された暗号化データであることを示す。【００８９】
図４は、実施例１のＳＱＬ定義情報３６１のデータ構造の一例を示す図である。【００９０】
ＳＱＬ定義情報３６１は、データの取得要求の種別毎のＳＱＬの生成パターンの定義情報を格納するレコードを複数含む。当該レコードは、定義ＩＤ３６１１、要求処理３６１２、及びＳＱＬ定義３６１３を含む。【００９１】
定義ＩＤ３６１１は、ＳＱＬ定義情報３６１に格納される定義を一意に識別するための識別番号である。要求処理３６１２は、データの取得要求に対応する処理パターン、すなわち、データ取得要求の種別である。ＳＱＬ定義３６１３は、要求処理３６１２に設定された処理パターンに対応するＳＱＬの定義情報である。【００９２】
例えば、ＳＱＬ定義情報３６１の一番上のレコードは、ＩＤが“１”であり、“結合”に対応する処理パターンに対応するＳＱＬの定義情報を格納するレコードであることを示す。当該レコードのＳＱＬ定義３６１３には、暗号化されたテーブルＸ及びテーブルＹを結合するためのＳＱＬが格納される。【００９３】
なお、ＳＱＬ定義３６１３の“暗号一致判定（Ｔａｂｌｅ＿Ｘ．カラムＡ， Ｔａｂｌｅ＿Ｚ．カラムＢ＿クエリ) ＝ ‘ｔｒｕｅ’）；”は、暗号化メイン情報群４６１に含まれるテーブルＸの“Ａ”カラムと、テーブルＹの暗号化結合情報４６２１であるテーブルＺの“検索クエリ”カラムとが一致するか否かを判定するための暗号一致判定処理を定義する命令文である。【００９４】
図５は、実施例１のメモリ４１０に一時的に格納される一時情報４１０１のデータ構造の一例を示す図である。【００９５】
実施例１の一時情報４１０１は、要求処理３６１２が“結合”であるデータの取得要求を実現するＳＱＬの処理結果を格納する。具体的には、一時情報４１０１は、定義ＩＤ３６１１が“１”のＳＱＬ定義３６１３に基づいて、暗号化患者情報４０１１及び暗号化診断情報４６１２のレコードを結合することによって出力された処理結果である。一時情報４１０１に格納されるレコードは、“患者番号”カラム、“名前”カラム、及び“病名”カラムを含む。【００９６】
例えば、一時情報４１０１の一番上のレコードは、患者番号が“Ｅｎｃ（００００００２）”及び名前が“Ｅｎｃ（佐藤）”である患者の病名が“Ｅｎｃ（高血圧症）”であるということを示す。【００９７】
（１−２）結合情報取得処理の準備処理の詳細
次に、図６、図７、図８、及び図９を用いて、結合情報取得処理に必要な設定を行うための結合情報取得処理の準備処理の詳細を説明する。【００９８】
図６は、実施例１の結合情報取得処理の準備処理の流れを説明するシーケンス図である。図７は、実施例１の結合設定入力画面２１１１の一例を示す図である。図８は、実施例１の結合設定結果表示画面２１１２の一例を示す図である。【００９９】
ユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４は、連携して結合情報取得処理の準備処理を実行する。結合情報取得処理の準備処理は、ユーザ端末２がユーザからの入力を受け付けた場合に開始される。【０１００】
まず、ユーザ端末２は、ユーザからの入力を受け付ける（ステップＳ１０１）。【０１０１】
例えば、ユーザは、図７に示すような結合設定入力画面２１１１を用いて、結合対象の情報及び結合対象のカラムを入力する。初期情報の登録作業を行なうクラウドサービス提供会社のシステムエンジニアが、システム構築する場合にユーザ端末２を操作し、病院の事務担当者及び医師等が、更新情報の登録作業を行う場合にユーザ端末２を操作することが想定される。【０１０２】
ここで、結合設定入力画面２１１１について説明する。結合設定入力画面２１１１は、ブラウザ２１１によって表示装置２２０に表示される。【０１０３】
結合設定入力画面２１１１は、結合対象の情報及び結合対象のカラムを指定する複数の入力フォーム（Ｐ１０１）、（Ｐ１０２）、（Ｐ１０３）、（Ｐ１０４）を含む。また、結合設定入力画面２１１１は、ＯＫボタン（Ｐ１０５）及びキャンセルボタン（Ｐ１０６）を含む。【０１０４】
入力フォーム（Ｐ１０１）及び入力フォーム（Ｐ１０２）は、第１の結合対象の情報の名称及びカラムの名称を入力するための入力フォームである。入力フォーム（Ｐ１０３）及び入力フォーム（Ｐ１０４）は、第２の結合対象の情報の名称及び結合対象のカラムの名称を入力するための入力フォームである。【０１０５】
ＯＫボタン（Ｐ１０５）は、各入力フォームに入力した値を確定するための操作ボタンである。キャンセルボタン（Ｐ１０６）は、各入力フォームに入力した値の確定をキャンセルするための操作ボタンである。【０１０６】
例えば、ユーザは、暗号化患者情報４６１１の“患者番号”カラムと暗号化診断情報４６１２の“患者番号”カラムとが結合されたレコードを取得するための結合情報取得処理の準備処理を実行する場合、図７に示すような値を入力する。すなわち、ユーザは、入力フォーム（Ｐ１０１）に“暗号化患者情報”、入力フォーム（Ｐ１０２）に“患者番号”、入力フォーム（Ｐ１０３）に“暗号化診断情報”、入力フォーム（Ｐ１０４）に“患者番号”を入力する。ユーザがＯＫボタン（Ｐ１０５）を押下した場合、ブラウザ２１１は、各入力フォームの値を入力情報としてユーザ側付加処理部２１６に送信する。【０１０７】
以上が結合設定入力画面２１１１の説明である。図６の説明に戻る。【０１０８】
次に、ユーザ端末２は、結合対象の情報の結合対象のカラムの値を取得するためのデータの取得要求を生成する（ステップＳ１０２）。具体的には、以下のような処理が実行される。【０１０９】
まず、ユーザ側付加処理部２１６は、結合対象のカラムの値を読み出す結合対象の情報を決定するために、結合対象カラム決定処理を実行する。【０１１０】
結合対象カラム決定処理では、生成される検索クエリの数が最も少なくなる結合対象の情報が、結合対象のカラムの値を読み出す結合対象の情報として決定される。結合対象カラム決定処理の詳細は、図９を用いて説明する。【０１１１】
ユーザ側付加処理部２１６は、決定された結合対象の情報の名称、当該情報の結合対象のカラムの名称、及び読出命令を入力情報として含むデータの取得要求を生成し、当該データの取得要求をアプリケーションサーバ３に送信する。以上がステップＳ１０２の処理の説明である。【０１１２】
次に、アプリケーションサーバ３は、データの取得要求を受信した場合、決定された結合対象の情報の結合対象のカラムの値を読み出すためのＳＱＬを生成する（ステップＳ１０３）。具体的には、以下のような処理が実行される。【０１１３】
アプリケーション部３１１が、データの取得要求を受信し、ＳＱＬ生成部３１２にデータの取得要求に含まれる要求情報を入力する。【０１１４】
ＳＱＬ生成部３１２は、要求情報に基づいて、決定された結合対象の情報の結合対象のカラムの値を読み出すためのＳＱＬを生成し、生成されたＳＱＬをアプリケーション部３１１に送信する。【０１１５】
アプリケーション部３１１は、ＳＱＬ生成部３１２から出力としてＳＱＬを受信した場合、データベースインタフェース部３１３を介して、データベースサーバ４に当該ＳＱＬを送信する。【０１１６】
例えば、決定された結合対象の情報が暗号化診断情報４６１２、かつ、結合対象のカラムが“患者番号”カラムである場合、以下のようなＳＱＬ（Ａ）が生成される。
ＳＱＬ（Ａ）
SELECT 患者番号FROM 暗号化診断情報【０１１７】
ＳＱＬ（Ａ）は、暗号化診断情報４６１２に含まれる全てのレコードの“患者番号”カラムの値を読み出すことを意味する。以上がステップＳ１０３の処理の説明である。【０１１８】
次に、データベースサーバ４は、アプリケーションサーバ３からＳＱＬを受信した場合、当該ＳＱＬを実行する（ステップＳ１０４）。【０１１９】
具体的には、データベース制御部４１１が、受信したＳＱＬを実行し、処理結果をアプリケーションサーバ３に送信する。当該処理結果は、アプリケーションサーバ３を介してユーザ端末２に送信される。【０１２０】
例えば、データベースサーバ４は、ＳＱＬ（Ａ）を受信した場合、暗号化診断情報４６１２の全レコードの“患者番号”カラムの値を処理結果としてユーザ端末２に送信する。なお、“患者番号”カラムの値は暗号化データである。【０１２１】
次に、ユーザ端末２は、データベースサーバ４から処理結果を受信した場合、当該処理結果を復号化する（ステップＳ１０５）。具体的には、以下のような処理が実行される。【０１２２】
ユーザ側付加処理部２１６は、鍵管理部２１５から鍵情報を取得し、取得された鍵情報及び処理結果に含まれる結合対象のカラムの値を復号化部２１３に入力する。【０１２３】
復号化部２１３は、鍵情報を用いて、結合対象のカラムの値を復号化することによって平文データを取得する。復号化部２１３は、平文データをユーザ側付加処理部２１６に送信する。【０１２４】
例えば、結合対象のカラムの値が“Ｅｎｃ（００００００２）”である場合、復号化部２１３は、“００００００２”を平文データとして取得する。以上がステップＳ１０５の処理の説明である。【０１２５】
次に、ユーザ端末２は、ステップＳ１０５において取得された平文データ及び鍵を用いて検索クエリを生成する（ステップＳ１０６）。具体的には、以下のような処理が実行される。【０１２６】
ユーザ側付加処理部２１６は、鍵管理部２１５から鍵情報を取得し、取得された鍵情報及び復号化部２１３から受信した平文データを暗号化検索クエリ生成部２１４に入力する。【０１２７】
暗号化検索クエリ生成部２１４は、ユーザ側付加処理部２１６から入力を受け付けた場合、結合対象のカラムの値の検索クエリを生成する。暗号化検索クエリ生成部２１４は、生成された検索クエリをユーザ側付加処理部２１６に送信する。【０１２８】
例えば、“００００００２”が平文データとして入力された場合、暗号化検索クエリ生成部２１４は、入力された鍵情報を用いて“ＥｎｃＱｕｅｒｙ（００００００２）”という暗号化データを検索クエリとして生成する。以上が、ステップＳ１０６の処理の説明である。【０１２９】
次に、ユーザ端末２は、暗号化結合情報４６２１を生成するための生成命令を生成する（ステップＳ１０７）。具体的には、以下のような処理が実行される。【０１３０】
ユーザ側付加処理部２１６は、暗号化検索クエリ生成部２１４から検索クエリを受信した後、ステップＳ１０２において決定された結合対象の情報に検索クエリのカラムを挿入して、暗号化結合情報４６２１をデータベース側付加情報群４６２に生成するための生成命令を生成する。具体的には、ユーザ側付加処理部２１６は、使用する情報の名称、挿入するカラムの名称、当該カラムに設定する全ての検索クエリを含む生成命令を生成する。【０１３１】
例えば、使用する情報が“暗号化診断情報４６１２”、新しいカラムの名称が“患者番号＿クエリ”、さらに検索クエリ“ＥｎｃＱｕｅｒｙ（Ｘ）”を新しいカラムに設定するための生成命令が生成される。【０１３２】
ユーザ側付加処理部２１６は、生成された生成命令をアプリケーションサーバ３に送信する。以上がステップＳ１０７の処理の説明である。【０１３３】
次に、アプリケーションサーバ３は、暗号化結合情報４６２１を生成するためのＳＱＬを生成する（ステップＳ１０８）。具体的には、以下のような処理が実行される。【０１３４】
アプリケーション部３１１は、使用する情報の名称、挿入するカラムの名称、及び当該カラムに設定する全ての検索クエリを含む生成命令を受信した場合、生成命令に含まれる各情報をＳＱＬ生成部３１２に入力する。【０１３５】
ＳＱＬ生成部３１２は、使用する情報の名称、挿入するカラムの名称、及び当該カラムに設定する全ての検索クエリに基づいて、暗号化結合情報４６２１を生成するためのＳＱＬを生成する。また、ＳＱＬ生成部３１２は、生成されたＳＱＬをアプリケーション部３１１に送信する。【０１３６】
アプリケーション部３１１は、ＳＱＬを受信した場合、データベースインタフェース部３１３を介して、データベースサーバ４に当該ＳＱＬを送信する。【０１３７】
例えば、使用する情報が“暗号化診断情報４６１２”、新しいカラムの名称が“患者番号＿クエリ”、さらに検索クエリ“ＥｎｃＱｕｅｒｙ（Ｘ）”である場合、以下のようなＳＱＬ（Ｂ）及びＳＱＬ（Ｃ）が生成される。
ＳＱＬ（Ｂ）
ALTER TABLE 暗号化診断情報  ADD 患者番号＿クエリ  BLOB;
ＳＱＬ（Ｃ）
INSERT INTO 暗号化診断情報  ( 患者番号＿クエリ )
VALUES（  EncQuery（００００００２）,
EncQuery（００００００４）,
・・・・・・・
EncQuery（１００００００））；【０１３８】
ＳＱＬ（Ｂ）は、暗号化診断情報４６１２に、“患者番号＿クエリ”カラムを追加することを意味する。ＳＱＬ（Ｃ）は、各レコードの“患者番号＿クエリ”カラムに検索クエリを設定することを意味する。以上が、ステップＳ１０８の処理の説明である。【０１３９】
次に、データベースサーバ４は、アプリケーションサーバ３からＳＱＬを受信した場合、当該ＳＱＬを実行する（ステップＳ１０９）。具体的には、以下のような処理が実行される。【０１４０】
データベース制御部４１１は、受信したＳＱＬを実行することによって暗号化結合情報４６２１を生成する。データベース制御部４１１は、暗号化結合情報４６２１に識別情報を付与する。結合する情報の組合せに応じて、複数の暗号化結合情報４６２１が生成されるためである。【０１４１】
データベース制御部４１１は、暗号化結合情報４６２１に関する情報を含む処理結果をアプリケーションサーバ３に送信する。当該処理結果は、アプリケーションサーバ３を介してユーザ端末２に送信される。【０１４２】
例えば、データベースサーバ４がＳＱＬ（Ｂ）及びＳＱＬ（Ｃ）を受信した場合、データベース制御部４１１は、暗号化診断情報４６１２をデータベース側付加情報群４６２にコピーし、暗号化診断情報４６１２に“患者番号＿クエリ”カラムを追加し、当該カラムに値を設定することによって暗号化結合情報４６２１を生成する。データベースサーバ４は、暗号化結合情報４６２１の生成が成功した旨を示す結果ステータス、“患者番号＿クエリ”カラムに値が設定された件数、及び暗号化結合情報４６２１の生成に要した所要時間等を含む処理結果をアプリケーションサーバ３に送信する。【０１４３】
このとき、アプリケーションサーバ３のアプリケーション部３１１は、受信した処理結果、並びに、ステップＳ１０２及びステップＳ１０７で受信した情報に基づいて、結果表示情報を生成し、結果表示情報をユーザ端末２に送信する。以上が、ステップＳ１０９の処理の説明である。【０１４４】
次に、ユーザ端末２は、一連の処理の結果をユーザに対して表示する（ステップＳ１１０）。【０１４５】
具体的には、ユーザ端末２のブラウザ２１１は、結果表示情報を受信した場合、当該結果表示情報に基づいて、図８に示すような結合設定結果表示画面２１１２を表示装置２２０に表示する。【０１４６】
ここで、結合設定結果表示画面２１１２について説明する。結合設定結果表示画面２１１２は、ブラウザ２１１によって表示装置２２０に表示される。【０１４７】
結合設定結果表示画面２１１２は、結合設定入力画面２１１１を用いて入力された値、ＳＱＬの実行結果を示す複数の表示フォーム（Ｐ２０１）、（Ｐ２０２）、（Ｐ２０３）、（Ｐ２０４）、（Ｐ２０５）、（Ｐ２０６）、（Ｐ２０７）、（Ｐ２０８）を含む。また、結合設定結果表示画面２１１２は、ＯＫボタン（Ｐ２０９）を含む。【０１４８】
表示フォーム（Ｐ２０１）及び表示フォーム（Ｐ２０３）は、結合設定入力画面２１１１を用いて入力された第１の結合対象の情報の名称及び第２の結合対象の情報の名称を表示する表示フォームである。表示フォーム（Ｐ２０２）及び表示フォーム（Ｐ２０４）は、第１の結合対象の情報のレコード数及び第２の結合対象の情報のレコード数を表示する表示フォームである。【０１４９】
表示フォーム（Ｐ２０５）は、検索クエリのカラムが挿入された情報の名称を表示する表示フォームである。表示フォーム（Ｐ２０６）は、挿入される検索クエリのカラムの名称を表示する表示フォームである。【０１５０】
表示フォーム（Ｐ２０７）は、暗号化結合情報４６２１の生成に要した時間を表示する表示フォームである。表示フォーム（Ｐ２０８）は、暗号化結合情報４６２１の生成結果を表示する表示フォームである。表示フォーム（Ｐ２０８）には、“成功”又は“失敗”のいずれかが表示される。【０１５１】
ＯＫボタン（Ｐ２０９）は、表示の終了を指示するための操作ボタンである。【０１５２】
例えば、図７に示すような値が入力された場合、表示フォーム（Ｐ２０１）には“暗号化患者情報”、表示フォーム（Ｐ２０２）には“１００００００”、表示フォーム（Ｐ２０３）には“暗号化診断情報”、表示フォーム（Ｐ２０４）には“３０００”が表示される。また、ＳＱＬ（Ｂ）及びＳＱＬ（Ｃ）に基づいて暗号化結合情報４６２１が生成された場合、表示フォーム（Ｐ２０５）には“暗号化診断情報”、表示フォーム（Ｐ２０６）には“患者番号＿クエリ”が表示される。また、表示フォーム（Ｐ２０７）には、“１００ｍｓ”、表示フォーム（Ｐ２０８）には“成功”が表示される。ユーザがＯＫボタン（Ｐ２０９）を押下した場合、結合設定結果表示画面２１１２の表示が終了する。【０１５３】
以上が結合設定結果表示画面２１１２の説明である。図６の説明に戻る。【０１５４】
ユーザ端末２は、必要に応じて処理結果をユーザ側付加情報群２６２に格納してもよいし、また、アプリケーションサーバ３又はデータベースサーバ４に送信してもよい。なお、当該処理結果には、暗号化結合情報４６２１と、暗号化結合情報４６２１の生成に用いた情報との対応関係、及び検索クエリと、暗号化結合情報４６２１の生成に用いた情報のカラムとの対応関係等が含まれる。【０１５５】
なお、ユーザ端末２がメイン情報群２６１を保持する場合、ステップＳ１０２からステップＳ１０５までの処理を省略できる。以上が結合準備処理の流れの説明である。【０１５６】
図９は、実施例１のユーザ側付加処理部２１６が実行する結合対象カラム決定処理の一例を説明するフローチャートである。【０１５７】
ユーザ側付加処理部２１６は、結合対象の情報の名称等を受信した場合、以下で説明する結合対象カラム決定処理を開始する。【０１５８】
まず、ユーザ側付加処理部２１６は、第１の結合対象の情報及び第２の結合対象の情報のレコード数を取得する（ステップＦ１０１）。【０１５９】
具体的には、ユーザ側付加処理部２１６は、ユーザ側付加情報群２６２から各結合対象の情報のレコード数に関する情報を読み出す。【０１６０】
なお、ユーザ側付加情報群２６２に結合対象の情報のレコード数に関する情報が存在しない場合、ユーザ側付加処理部２１６は、アプリケーションサーバ３に各結合対象の情報のレコード数の取得要求を送信する。これによって、各結合対象の情報のレコード数をカウントするためＳＱＬがデータベースサーバ４に送信される。ユーザ側付加処理部２１６は、データベースサーバ４からＳＱＬの処理結果を受信することによって各結合対象の情報のレコード数を取得できる。【０１６１】
次に、ユーザ側付加処理部２１６は、レコード数が少ない結合対象の情報を、結合対象のカラムの値を読み出す結合対象の情報に決定する（ステップＦ１０２）。【０１６２】
暗号化患者情報４６１１及び暗号化診断情報４６１２が結合対象の情報である場合、暗号化診断情報４６１２のレコード数は暗号化患者情報４６１１のレコード数より小さい。したがって、ユーザ側付加処理部２１６は、暗号化診断情報４６１２を、結合対象のカラムの値を読み出す結合対象の情報に決定する。なお、結合対象のカラムは、“患者番号”カラムである。【０１６３】
結合対象カラム決定処理が実行されることによって、検索クエリの生成数及び追加数を必要最小限にできる。したがって、結合準備処理及び図１０を用いて説明する結合情報取得処理の処理時間を短縮できる。【０１６４】
以上が結合情報取得処理の準備処理の説明である。【０１６５】
（１−３）結合情報取得処理の詳細
次に、図１０、図１１、及び図１２を用いて、結合情報取得処理の詳細を説明する。【０１６６】
図１０は、実施例１の結合情報取得処理の流れを示すシーケンス図である。図１１は、実施例１の患者情報取得画面２１１３の一例を示す図である。図１２は、実施例１の患者病名一覧表示画面２１１４の一例を示す図である。【０１６７】
ユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４は、連携して結合情報取得処理を実行する。結合情報取得処理は、ユーザ端末２がユーザからの入力を受け付けた場合に開始される。【０１６８】
まず、ユーザ端末２は、ユーザからの入力を受け付ける（ステップＳ２０１）。【０１６９】
例えば、ユーザは、図１１に示すような患者情報取得画面２１１３を用いて、結合情報を取得するために必要な情報を入力する。機微な情報を保存した医師が、患者の基本情報を示すマスタ情報と、最近の患者の診断結果とを突き合わせたデータとを表示する場合、ユーザ端末２を操作することが想定される。【０１７０】
ここで、患者情報取得画面２１１３について説明する。患者情報取得画面２１１３は、ブラウザ２１１によって表示装置２２０に表示される。【０１７１】
患者情報取得画面２１１３は、取得する情報を選択するための複数のラジオボタン（Ｐ３０１）、（Ｐ３０２）を含む。また、患者情報取得画面２１１３は、ＯＫボタン（Ｐ３０３）及びキャンセルボタン（Ｐ３０４）を含む。【０１７２】
ラジオボタン（Ｐ３０１）は、各患者の病名の一覧を表示するためのラジオボタンである。ラジオボタン（Ｐ３０２）は、診断書の一覧を表示するためのラジオボタンである。【０１７３】
ＯＫボタン（Ｐ３０３）は、選択されたラジオボタンの入力を確定するための操作ボタンである。キャンセルボタン（Ｐ３０４）は、選択されたラジオボタンの入力の確定をキャンセルするための操作ボタンである。【０１７４】
例えば、ユーザは、ラジオボタン（Ｐ３０１）を選択し、ＯＫボタン（Ｐ１０５）を押下する。【０１７５】
以上が患者情報取得画面２１１３の説明である。図１０の説明に戻る。【０１７６】
次に、ユーザ端末２は、結合情報を取得するためのデータの取得要求を生成する（ステップＳ２０２）。具体的には、以下のような処理が実行される。【０１７７】
ユーザ側付加処理部２１６は、要求された情報を取得するために必要な操作の種別を特定する。ユーザ側付加処理部２１６は、要求された情報に必要なカラムを特定し、また、特定されたカラムを含む情報を特定する。さらに、ユーザ側付加処理部２１６は、暗号一致判定処理に使用する検索クエリを格納する暗号化結合情報４６２１を特定する。【０１７８】
例えば、操作の種別、必要なカラム、及び暗号化結合情報４６２１を、予め操作画面に対応付けておくことが考えられる。また、メイン情報群２６１に含まれる情報のデータ構造を示す定義情報を、予め、ユーザ側付加情報群２６２に格納することが考えられる。【０１７９】
ユーザ側付加処理部２１６は、操作の種別、対象の情報の名称、対象のカラムの名称、暗号化結合情報４６２１の識別情報、及び読出命令を含むデータの取得要求を生成する。ユーザ側付加処理部２１６は、生成されたデータの取得要求をアプリケーションサーバ３に送信する。【０１８０】
例えば、ラジオボタン（Ｐ３０１）が選択された場合、患者番号、名前、及び病名が要求された情報に必要なカラムとして特定され、暗号化患者情報４６１１及び暗号化診断情報４６１２が要求された情報に必要な情報として特定される。また、患者番号＿クエリを含む暗号化結合情報４６２１が、暗号一致判定処理に使用する検索クエリを格納する暗号化結合情報４６２１として特定される。【０１８１】
なお、要求された情報を取得するために必要な操作の種別及び検索クエリを格納する暗号化結合情報４６２１は、アプリケーションサーバ３が特定してもよい。この場合、アプリケーションサーバ３又はデータベースサーバ４が、特定するために必要な情報を保持する。以上がステップＳ２０２の処理の説明である。【０１８２】
次に、アプリケーションサーバ３は、２つの情報を結合された結合情報を取得するためのＳＱＬを生成する（ステップＳ２０３）。具体的には、以下のような処理が実行される。【０１８３】
アプリケーション部３１１は、データの取得要求を受信した場合、データの取得要求をＳＱＬ生成部３１２に送信する。【０１８４】
ＳＱＬ生成部３１２は、ＳＱＬ定義情報３６１を参照して、要求処理３６１２がデータの取得要求に含まれる処理の種別に一致するレコードを特定する。この場合、定義ＩＤ３６１１が“１”のレコードが特定される。【０１８５】
ＳＱＬ生成部３１２は、データの取得要求に含まれるカラムの名称、情報の名称、及び検索クエリを含む暗号化結合情報４６２１の識別情報、並びに特定されたレコードのＳＱＬ定義３６１３に基づいて、ＳＱＬを生成する。ＳＱＬ生成部３１２は、生成されたＳＱＬをアプリケーション部３１１に送信する。【０１８６】
アプリケーション部３１１は、データベースインタフェース部３１３を介して、ＳＱＬをデータベースサーバ４に送信する。【０１８７】
例えば、ラジオボタン（Ｐ３０１）が選択された場合、ＳＱＬ生成部３１２は以下のようなＳＱＬ（Ｄ）を生成する。
ＳＱＬ（Ｄ）
SELECT 患者番号, 名前, 病名 FROM 暗号化患者情報  Ｘ
JOIN 暗号化結合情報  Ｙ
ON （
暗号一致判定（Ｘ.患者番号, Ｙ．患者番号＿クエリ）＝‘true’）；【０１８８】
ＳＱＬ（Ｄ）は、暗号化患者情報４６１１の“患者番号”カラムの値と、暗号化結合情報４６２１の“患者番号＿クエリ”カラムの値とが一致した場合、一致する各情報のレコードを結合し、結合結果から“患者番号”カラム、“名前”カラム、及び“病名”カラムの値を読み出すことを意味する。以上がステップＳ２０３の処理の説明である。【０１８９】
次に、データベースサーバ４は、アプリケーションサーバ３からＳＱＬを受信した場合、当該ＳＱＬを実行する（ステップＳ２０４）。【０１９０】
具体的には、データベース制御部４１１が、受信したＳＱＬを実行し、処理結果をアプリケーションサーバ３に送信する。当該処理結果は、アプリケーションサーバ３を介してユーザ端末２に送信される。【０１９１】
例えば、データベース制御部４１１は、ＳＱＬ（Ｄ）を受信した場合、暗号一致判定部４１２を呼び出す。暗号一致判定部４１２は、暗号化患者情報４６１１に含まれる１つのレコードの“患者番号”カラムの値と、暗号化結合情報４６２１に含まれる１つのレコードの“患者番号＿クエリ”カラムの値とが一致するか否か判定する。データベース制御部４１１は、暗号一致判定部４１２の判定結果に基づいて、“患者番号＿クエリ”カラムの値が“患者番号”カラムの値に一致するレコードを取得し、一時情報４１０１に格納する。【０１９２】
ＳＱＬ（Ｄ）が実行された場合、図５に示すような一時情報４１０１がメモリ４１０上に出力される。データベース制御部４１１は、当該一時情報４１０１を含む処理結果をアプリケーションサーバ３に送信する。【０１９３】
なお、特許文献３の確率的暗号化方式を用いることによって、暗号化された情報のカラムの値と、検索クエリの値とが一致するか否かを判定することができる。具体的な判定方法は、特許文献３に記載されているため詳細な説明は省略する。【０１９４】
次に、ユーザ端末２は、処理結果を受信した場合、当該処理結果を復号化する（ステップＳ２０５）。【０１９５】
具体的には、ユーザ側付加処理部２１６は、一時情報４１０１を含む処理結果を受信した場合、鍵管理部２１５から鍵情報を取得し、一時情報４１０４及び当該鍵情報を復号化部２１３に送信する。復号化部２１３は、鍵情報を用いて、一時情報４１０４を復号化することによって平文データを取得する。復号化部２１３は、平文データをユーザ側付加処理部２１６に送信する。ユーザ側付加処理部２１６は、平文データをブラウザ２１１に送信する。【０１９６】
次に、ユーザ端末２は、一連の処理の結果をユーザに対して表示する（ステップＳ２０６）。【０１９７】
具体的には、ブラウザ２１１は、平文データを含む処理結果を表示するための表示情報を生成し、当該表示情報に基づいて、図１２に示すような患者病名一覧表示画面２１１４を表示装置２２０に表示する。【０１９８】
ここで、患者病名一覧表示画面２１１４について説明する。患者病名一覧表示画面２１１４は、ブラウザ２１１によって表示装置２２０に表示される。【０１９９】
患者病名一覧表示画面２１１４は、平文データである結合結果（Ｐ４０１）を含む。また、患者病名一覧表示画面２１１４は、ＯＫボタン（Ｐ４０２）を含む。【０２００】
図１２に示す結合結果は、“患者番号”カラム、“名前”カラム、及び“病名”カラムを含むレコードを複数含む。一番上のレコードは、患者番号が“００００００２”かつ名前が“佐藤”である患者が、高血圧症という診断結果を受けたことを示す。ＯＫボタン（Ｐ４０２）は、表示の終了を指示するための操作ボタンである。【０２０１】
以上が患者病名一覧表示画面２１１４の説明である。また、以上が結合情報取得処理の説明である。【０２０２】
なお、実施例１では、結合する２つの情報のいずれかを用いて暗号化結合情報４６２１が生成されているが、これに限定されない。第１情報及び第２情報を結合させる場合、第１情報の名称、第１情報の結合対象のカラムの名称、第２情報の名称、第２情報の結合対象のカラムの名称、及び検索クエリを対応付けたレコードを複数含む暗号化結合情報４６２１であってもよい。【０２０３】
前述した暗号化結合情報４６２１の場合、データベース制御部４１１は、第１情報及び第２情報のそれぞれに対して暗号一致判定処理を実行し、検索クエリと一致する第１情報のレコード及び検索クエリと一致する第２情報のレコードを結合する。【０２０４】
（１−４）実施例１の効果
以上に説明したように、実施例１の秘匿化データベースシステム１では、暗号化結合情報４６２１及びＳＱＬ定義情報３６１に基づいて、データベースサーバ４内で暗号化された情報が復号されることなく、２つの暗号化された情報が結合された結合情報がユーザ端末２に送信される。したがって、データの秘匿性を維持しつつ、結合結果を取得するデータベース操作命令を実行可能な秘匿化データベースシステムを実現することができる。
【実施例２】
【０２０５】
実施例２の秘匿化データベースシステム１は、部分一致検索処理を実現するための機能を提供する点が実施例１とは異なる。部分一致検索処理は、部分的なキーワードを検索条件として、任意のテーブルのレコードに含まれるカラムと部分的に一致するレコードを取得するための処理である。以下、実施例１との差異を中心に、実施例２について説明する。【０２０６】
（２−１）実施例２の計算機システムの構成
実施例２の秘匿化データベースシステム１は、実施例１と同一の構成であるため説明を省略する。また、実施例２のユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４のハードウェア構成は実施例１の各ハードウェア構成と同一であるため説明を省略する。【０２０７】
実施例２では、ソフトウェア構成及び各装置が保持する情報の内容が一部異なる。【０２０８】
まず、ユーザ端末２のソフトウェア構成について説明する。実施例２のユーザ端末２のソフトウェア構成は、実施例１のユーザ端末２のソフトウェア構成と同一である。ただし、実施例２のユーザ側付加処理部２１６は、部分一致検索処理を実現するための機能を有する点が実施例１とは異なる。【０２０９】
図１３は、実施例２のユーザ側付加処理部２１６の論理構成を示すブロック図である。【０２１０】
ユーザ側付加処理部２１６は、部分一致検索処理を実現するための機能として、部分情報生成部２１６１及び部分一致検索クエリ生成部２１６２を含む。【０２１１】
部分情報生成部２１６１は、任意の情報のカラムの平文データの入力を受け付け、所定の粒度に平文データを分割することによって部分情報２１０１を生成し、部分情報２１０１を出力する。なお、平文データの分割粒度は、後述する部分一致検索処理の準備処理において決定される。【０２１２】
部分一致検索クエリ生成部２１６２は、平文データである検索語の入力を受け付け、所定の粒度に検索語を分割し、暗号化検索クエリ生成部２１４と連携して分割された検索語が暗号化された部分一致検索クエリ（暗号化された検索クエリ）を生成し、部分一致検索クエリを出力する。なお、検索語の分割粒度は、後述する部分一致検索処理において決定される。【０２１３】
次に、アプリケーションサーバ３のソフトウェア構成について説明する。実施例２のアプリケーションサーバ３のソフトウェア構成は、実施例１のアプリケーションサーバ３のソフトウェア構成と同一である。【０２１４】
実施例２では、アプリケーションサーバ３は、定義ＩＤ３６１１が“２”のＳＱＬ定義３６１３に基づいて、部分一致検索処理を実現するＳＱＬを生成する。ここで、定義ＩＤ３６１１が“２”のＳＱＬ定義３６１３は、以下のようなＳＱＬ（Ｅ）、（Ｆ）となる。
ＳＱＬ（Ｅ）
SELECT 部分一致ID取得(名前＿部分情報,
LikeID情報＿xxx, 部分一致検索クエリ )；
ＳＱＬ（Ｆ）
SELECT 患者番号, 名前 FROM 暗号化患者情報
JOIN LikeID情報＿xxx
ON ( 暗号化患者情報.ID = LikeID情報＿xxx.ID )；【０２１５】
ＳＱＬ（Ｅ）は、部分一致ＩＤ取得部４１３１に部分一致ＩＤ取得処理の実行を指示するＳＱＬであり、暗号化部分情報４６２２から部分一致検索クエリ情報２１０２に一致するＩＤを抽出し、ＬｉｋｅＩＤ情報＿ｘｘｘ４６２３に出力することを意味する。ＳＱＬ（Ｆ）は、暗号化患者情報４６１３及びＬｉｋｅＩＤ情報＿ｘｘｘ４６２３を“ＩＤ”カラムで結合し、一致したレコードの“患者番号”カラム及び“名前”カラムの値を読み出すことを意味する。【０２１６】
次に、データベースサーバ４のソフトウェア構成について説明する。実施例２のデータベースサーバ４のソフトウェア構成は、実施例１のデータベースサーバ４のソフトウェア構成と同一である。ただし、実施例２のデータベース側付加処理部４１３は、部分一致検索処理を実現するための機能を有する点が実施例１とは異なる。【０２１７】
図１４は、実施例２のデータベース側付加処理部４１３の論理構成を示すブロック図である。【０２１８】
データベース側付加処理部４１３は、部分一致検索処理を実現するための機能として、部分一致ＩＤ取得部４１３１を含む。【０２１９】
部分一致ＩＤ取得部４１３１は、部分一致検索クエリ及び部分一致したレコードのＩＤを格納する出力テーブル名を入力として受け付け、暗号一致判定部４１２を用いて部分一致するＩＤを判定し、当該ＩＤを出力テーブルに出力する。【０２２０】
次に、実施例２の各構成が有する情報について説明する。【０２２１】
図１５は、実施例２のメモリ２１０に一時的に格納されるデータのデータ構造の一例を示す図である。【０２２２】
実施例２のメモリ２１０は、部分情報２１０１及び部分一致検索クエリ情報２１０２を格納する。【０２２３】
部分情報２１０１は、“名前＿部分情報”カラム、“ＩＤ”カラム、及び“ｏｆｆｓｅｔ”カラムを含むレコードを複数含む。【０２２４】
“名前＿部分情報”カラムは、部分一致検索処理の対象となるカラムの値が分割された値である。本実施例では、暗号化患者情報４６１３の“名前”カラムに対する部分一致検索処理が行われるため、部分情報２１０１には、“名前＿部分情報”カラムが含まれる。なお、部分一致検索処理の対象が異なる場合、部分情報２１０１は、“（対象カラムの名称）＿部分情報”カラムが含まれる。【０２２５】
“ＩＤ”カラムは、“名前＿部分情報”カラムに格納される値が分割される前の値を格納するレコードの識別番号である。本実施例の“ＩＤ”カラムは、暗号化患者情報４６１３の“ＩＤ”カラムに対応する。【０２２６】
“ｏｆｆｓｅｔ”カラムは、分割される前の値における“名前＿部分情報”に格納される値の分割位置である。【０２２７】
例えば、部分情報２１０１の一番上のエントリは、“名前＿部分情報”カラムに格納される“鈴木”は、暗号化患者情報４６１３の“ＩＤ”カラムが“１”であるレコードの“名前”カラムの値“鈴木太郎”を分割した値であり、分割位置は“０”であることを示す。【０２２８】
部分一致検索クエリ情報２１０２は、部分一致検索処理に用いる検索語が分割された値から生成された部分一致検索クエリを格納するレコードを複数含む。当該レコードは、“検索クエリ”カラム及び“ｏｆｆｓｅｔ”カラムを含む。【０２２９】
“検索クエリ”カラムは、部分一致検索クエリである。“ｏｆｆｓｅｔ”カラムは、検索語における暗号化前の値の分割位置である。【０２３０】
図１５の部分一致検索クエリ情報２１０２は、検索語“藤原太”から生成される検索クエリを格納することを示す。部分一致検索クエリ情報２１０２の一番上のレコードは、検索クエリが“ＥｎｃＱｕｅｒｙ（藤原）”であり、暗号化前の“藤原”は、検索語の分割位置が“０”であることを示す。【０２３１】
図１６は、実施例２の暗号化メイン情報群４６１のデータ構造の一例を示す図である。【０２３２】
実施例２の暗号化メイン情報群４６１は、暗号化患者情報４６１３を含む。【０２３３】
暗号化患者情報４６１３は、患者の一覧であり、“ＩＤ”カラム、“患者番号”カラム、及び“名前”カラムを含むレコードを複数含む。【０２３４】
“ＩＤ”カラム、“患者番号”カラム、及び“名前”カラムは、実施例１の暗号化患者情報４６１１のＩＤ”カラム、“患者番号”カラム、及び“名前”カラムと同一のものである。【０２３５】
例えば、暗号化患者情報４６１３の一番上のレコードは、ＩＤが“１”のレコードの患者番号が“Ｅｎｃ（００００００１）”、名前が“Ｅｎｃ（鈴木太郎）”であることを示す。【０２３６】
図１７は、実施例２のデータベース側付加情報群４６２のデータ構造の一例を示す図である。【０２３７】
実施例２のデータベース側付加情報群４６２は、部分一致検索処理に使用する暗号化部分情報４６２２及びＬｉｋｅＩＤ情報＿ｘｘｘ４６２３を含む。【０２３８】
暗号化部分情報４６２２は、“名前＿部分情報”カラム、“ＩＤ”カラム、及び“ｏｆｆｓｅｔ”カラムを含むレコードを複数含む。【０２３９】
“名前＿部分情報”カラムは、暗号一致判定処理において部分一致検索クエリと比較される暗号化データである。例えば、暗号化部分情報４６２２の一番上のレコードの“名前＿部分情報”カラムには、“鈴木”が暗号化された“Ｅｎｃ（鈴木）”が格納される。【０２４０】
“ＩＤ”カラム、及び“ｏｆｆｓｅｔ”は、部分情報２１０１の“ＩＤ”カラム、及び“ｏｆｆｓｅｔ”に対応するカラムである。【０２４１】
ＬｉｋｅＩＤ情報＿ｘｘｘ４６２３は、部分一致ＩＤ取得部４１３１によって出力されたＩＤである。ＬｉｋｅＩＤ情報＿ｘｘｘ４６２３は、“ＩＤ”カラムのみから構成される。ＬｉｋｅＩＤ情報＿ｘｘｘ４６２３の“ｘｘｘ”には、部分一致検索処理毎に異なる値が設定される。【０２４２】
図１７に示すＬｉｋｅＩＤ情報＿ｘｘｘ４６２３は、部分一致ＩＤ取得部４１３１から出力されたＩＤが“２”のみであることを示す。【０２４３】
図１８は、実施例２のメモリ４１０に一時的に格納される一時情報４１０２のデータ構造の一例を示す図である。【０２４４】
一時情報４１０２は、ＳＱＬ（Ｆ）の実行結果を格納する。具体的には、一時情報４１０２は、暗号化患者情報４６１３から、部分一致検索処理において部分一致検索クエリと一致したＩＤを含むレコードの“患者番号”カラム及び“名前”カラムの値を格納する。したがって、一時情報４１０２は、“患者番号”カラム及び“名前”カラムを含む１つのレコードを含む。【０２４５】
図１８の一時情報４１０２は、患者番号が“Ｅｎｃ（００００００３）”であり名前が“Ｅｎｃ（藤原太郎）”であるレコードが部分一致検索処理の結果として出力されたことを示す。【０２４６】
（２−２）部分一致検索処理の準備処理の詳細
次に、図１９、図２０、図２１、及び図２２を用いて、部分一致検索処理に必要な設定を行うための部分一致検索処理の準備処理の詳細を説明する。【０２４７】
図１９は、実施例２の部分一致検索処理の準備処理の流れを説明するシーケンス図である。図２０は、実施例２の部分一致設定入力画面２１１５の一例を示す図である。図２１は、実施例２の部分一致設定結果表示画面２１１６の一例を示す図である。【０２４８】
ユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４は、連携して部分一致検索処理の準備処理を実行する。【０２４９】
ステップＳ１０１からＳ１０５までの処理の流れは実施例１の処理の流れと同一である。ただし、各ステップの処理内容が一部異なる。【０２５０】
実施例２のステップＳ１０１では、ユーザが入力する情報が実施例１とは異なる。実施例２では、ユーザは、図２０に示すような部分一致設定入力画面２１１５を用いて、部分一致検索処理の対象の情報及びカラムを入力する。【０２５１】
ここで、部分一致設定入力画面２１１５について説明する。部分一致設定入力画面２１１５は、ブラウザ２１１によって表示装置２２０に表示される。【０２５２】
部分一致設定入力画面２１１５は、部分一致検索処理に必要な情報を入力する複数の入力フォーム（Ｐ５０１）、（Ｐ５０２）、（Ｐ５０３）を含む。また、部分一致設定入力画面２１１５は、ＯＫボタン（Ｐ５０４）及びキャンセルボタン（Ｐ５０５）を含む。【０２５３】
入力フォーム（Ｐ５０１）は、部分一致検索処理の対象となる情報の名称を入力するための入力フォームである。入力フォーム（Ｐ５０２）は、部分一致検索処理の対象となるカラムの名称を入力するための入力フォームである。入力フォーム（Ｐ５０３）は、部分一致検索処理の処理結果に基づいて、カラムの値を読み出すレコードを指定するカラムの名称を入力するための入力フォームである。【０２５４】
ＯＫボタン（Ｐ５０４）は、各入力フォームに入力した値を確定するための操作ボタンである。キャンセルボタン（Ｐ５０５）は、各入力フォームに入力した値の確定をキャンセルするための操作ボタンである。【０２５５】
図２０では、部分一致検索処理の対象となる情報として“暗号化患者情報”が入力され、部分一致検索処理の対象となるカラムとして“名前”カラムが入力され、また、カラムの値を読み出すレコードを指定するカラムとして “ＩＤ”カラムが入力される。【０２５６】
以上が部分一致設定入力画面２１１５の説明である。図１９の説明に戻る。【０２５７】
実施例２のステップＳ１０２では、結合対象カラム決定処理は実行されない。【０２５８】
実施例２のステップＳ１０３では、ＳＱＬ生成部３１２は、部分一致設定入力画面２１１５に入力された値に基づいて、データの取得要求に含まれる対象のカラムの値を読み出すためのＳＱＬを生成する。【０２５９】
実施例２のステップＳ１０４及びステップＳ１０５の処理の内容は、実施例１と同一である。【０２６０】
ユーザ端末２は、ステップＳ１０５において復号化された平文データを用いて、部分情報２１０１を生成する（ステップＳ３０１）。図２０に示すような値が部分一致設定入力画面２１１５に入力されている場合、以下のような処理が実行される。【０２６１】
ユーザ側付加処理部２１６は、部分情報生成部２１６１を呼び出す。このとき、ユーザ側付加処理部２１６は、“暗号化患者情報４６１３”の“ＩＤ”カラム及び“名前”カラムの値のペアを部分情報生成部２１６１に入力する。【０２６２】
部分情報生成部２１６１は、入力された値に基づいて部分情報生成処理を実行する。これによって、図１５に示す部分情報２１０１が生成される。部分情報生成処理の詳細は、図２２を用いて説明する。以上がステップＳ３０１の処理の説明である。【０２６３】
次に、ユーザ端末２は、部分情報２１０１の部分一致検索処理の対象となるカラムの値を暗号化する（ステップＳ３０２）。具体的には、以下のような処理が実行される。【０２６４】
ユーザ側付加処理部２１６は、鍵管理部２１５から鍵情報を取得し、鍵情報及び部分情報生成部２１６１を暗号化部２１２に送信する。【０２６５】
暗号化部２１２は、部分情報２１０１に含まれるカラムのうち、部分一致検索処理の対象となるカラムの値を鍵情報を用いて暗号化する。復号化部２１３は、部分一致検索処理の対象となるカラムの値が暗号化された部分情報２１０１をユーザ側付加処理部２１６に送信する。以上がステップＳ３０２の処理の説明である。【０２６６】
次に、ユーザ端末２は、暗号化部分情報４６２２を生成するための生成命令を生成する（ステップＳ３０３）。【０２６７】
具体的には、ユーザ側付加処理部２１６は、暗号化部２１２から受信した暗号化された部分情報２１０１を暗号化部分情報４６２２として登録するための生成命令を生成し、当該命令をアプリケーションサーバ３に送信する。【０２６８】
ステップＳ３０３の処理の後、ステップＳ１０８からステップＳ１１０までの処理が実行される。ステップＳ１０８からステップＳ１１０までの処理の流れは実施例１の処理の流れと同一である。ただし、各ステップにおける処理内容が一部異なる。【０２６９】
実施例２のステップＳ１０８では、ＳＱＬ生成部３１２は、生成命令に含まれる各情報を用いて、暗号化部分情報４６２２を生成するためのＳＱＬを生成する。【０２７０】
実施例２のステップＳ１０９では、データベース制御部４１１は、受信したＳＱＬを実行することによってデータベース側付加情報群４６２に暗号化部分情報４６２２を生成する。【０２７１】
実施例２のステップＳ１１０では、ブラウザ２１１は、結果表示情報に基づいて、図２１に示すような部分一致設定結果表示画面２１１６を表示装置２２０に表示する。【０２７２】
ここで、部分一致設定結果表示画面２１１６について説明する。部分一致設定結果表示画面２１１６は、ブラウザ２１１によって表示装置２２０に表示される。【０２７３】
部分一致設定結果表示画面２１１６は、部分一致設定入力画面２１１５に入力された値、ＳＱＬの実行結果を示す表示フォーム（Ｐ６０１）、（Ｐ６０２）、（Ｐ６０３）、（Ｐ６０４）、（Ｐ６０５）を含む。また、部分一致設定結果表示画面２１１６は、ＯＫボタン（Ｐ６０６）を含む。【０２７４】
表示フォーム（Ｐ６０１）は、部分一致設定入力画面２１１５に入力された部分一致検索処理の対象となる情報の名称を表示する表示フォームである。表示フォーム（Ｐ６０２）は、部分一致設定入力画面２１１５に入力された部分一致検索処理の対象となるカラムの名称を表示する表示フォームである。【０２７５】
表示フォーム（Ｐ６０３）は、暗号化部分情報４６２２の名称を表示する表示フォームである。表示フォーム（Ｐ６０４）は、暗号化部分情報４６２２に含まれるレコードの数を表示する表示フォームである。表示フォーム（Ｐ６０５）は、暗号化部分情報４６２２の生成結果を示す表示フォームである。表示フォーム（Ｐ６０５）には、“成功”又は“失敗”のいずれかが表示される。【０２７６】
ＯＫボタン（Ｐ６０６）は、表示の終了を指示するための操作ボタンである。【０２７７】
例えば、図２０に示すような値が入力された場合、表示フォーム（Ｐ６０１）には“暗号化患者情報”、表示フォーム（Ｐ６０２）には“名前”、表示フォーム（Ｐ６０３）には、“名前＿部分情報”、表示フォーム（Ｐ６０４）には、“８０００”、表示フォーム（Ｐ６０５）には“成功”が表示される。ユーザはＯＫボタン（Ｐ６０６）を押下した場合、部分一致設定結果表示画面２１１６の表示が終了する。【０２７８】
以上が部分一致設定結果表示画面２１１６の説明である。図１９の説明に戻る。【０２７９】
ユーザ端末２は、必要に応じて処理結果をユーザ側付加情報群２６２に格納してもよいし、また、アプリケーションサーバ３又はデータベースサーバ４に送信してもよい。なお、当該処理結果には、暗号化部分情報４６２２と部分情報２１０１との対応関係等が含まれる。以上が部分一致検索処理の準備処理の流れの説明である。【０２８０】
図２２は、実施例２の部分情報生成部２１６１が実行する部分情報生成処理の一例を説明するフローチャートである。【０２８１】
部分情報生成部２１６１は、ユーザ側付加処理部２１６から呼び出された場合、以下で説明する部分情報生成処理を開始する。なお、部分情報生成部２１６１には、平文データである“ＩＤ”カラムの値、及び部分一致検索処理の対象となるカラムの値のペアが入力される。【０２８２】
まず、部分情報生成部２１６１は、ペアを１つ読み出す（ステップＦ２０１）。【０２８３】
例えば、部分情報生成部２１６１は、ＩＤの値の昇順にペアを１つ読み出す。暗号化患者情報４６１３の“ＩＤ”カラム及び“名前”カラムの値のペアが入力された場合、部分情報生成部２１６１は、ＩＤ“１”かつ名前が“鈴木太郎”であるペアを読み出す。【０２８４】
次に、部分情報生成部２１６１は、Ｎ−ｇｒａｍ方式を用いて、部分一致検索処理の対象となるカラムの値を分割する（ステップＦ２０２）。【０２８５】
例えば、Ｎ＝２のＮ−ｇｒａｍ方式を用いた場合、名前“鈴木太郎”の値は、“鈴木”、“木太”、及び“太郎”の３つに分割される。【０２８６】
次に、部分情報生成部２１６１は、分割された各値について、分割前の値の先頭からの分割位置を示すｏｆｆｓｅｔを割り当てる（ステップＦ２０３）。【０２８７】
例えば、“鈴木”にはｏｆｆｓｅｔ“０”が割り当てられ、“木太”にはｏｆｆｓｅｔ“１”が割り当てられ、“太郎”にはｏｆｆｓｅｔ“２”が割り当てられる。【０２８８】
次に、部分情報生成部２１６１は、分割された値、ＩＤ、及びｏｆｆｓｅｔを含むレコードを部分情報２１０１に追加する（ステップＦ２０４）。【０２８９】
例えば、分割された値が“鈴木”、“木太”、及び“太郎”である場合、以下の３つのレコードが部分情報２１０１に追加される。
部分情報    ＩＤ    offset値
レコード１：    鈴木        １      ０
レコード２：    木太        １      １
レコード３：    太郎        １      ２【０２９０】
次に、部分情報生成部２１６１は、全てのペアに対して処理が完了したか否かを判定する（ステップＦ２０５）。【０２９１】
全てのペアに対して処理が完了していないと判定された場合、部分情報生成部２１６１は、ステップＦ２０１に戻り、同様の処理を実行する。【０２９２】
全てのペアに対して処理が完了したと判定された場合、部分情報生成部２１６１は、処理を終了する。以上の処理によって図１５に示すような部分情報２１０１が生成される。【０２９３】
ＩＤを含めた部分一致検索処理を実行するための情報を予め用意することによって、部分一致検索処理において、ユーザ端末２は、部分一致するＩＤを絞り込み、ＩＤに対応する暗号化データを取得できる。以上が部分一致検索処理の準備処理の説明である。【０２９４】
（２−３）部分一致検索処理の詳細
次に、図２３、図２４、図２５、図２６、及び図２７を用いて、部分一致検索処理の詳細を説明する。【０２９５】
図２３は、実施例２の部分一致検索処理の流れを示すシーケンス図である。図２４は、実施例２の患者情報取得画面２１１７の一例を示す図である。図２５は、実施例２の患者情報表示画面２１１８の一例を示す図である。【０２９６】
ユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４は、連携して部分一致検索の処理を実行する。部分一致検索の処理は、ユーザ端末２がユーザからの入力を受け付けた場合に開始される。【０２９７】
まず、ユーザ端末２は、ユーザからの入力を受け付ける（ステップＳ４０１）。【０２９８】
例えば、ユーザは、図２４に示すような患者情報取得画面２１１７を用いて、検索語として、名前の一部を入力する。機微な情報を保存した医師が、患者の名前の一部を検索語とし、該当する患者情報の表示を要求する場合、ユーザ端末２を操作することが想定される。【０２９９】
ここで、患者情報取得画面２１１７について説明する。患者情報取得画面２１１７は、ブラウザ２１１によって表示装置２２０に表示される。【０３００】
患者情報取得画面２１１７は、ラジオボタン（Ｐ７０１）、及び入力フォーム（Ｐ７０２）を含む。また、患者情報取得画面２１１７は、ＯＫボタン（Ｐ７０３）及びキャンセルボタン（Ｐ７０４）を含む。【０３０１】
ラジオボタン（Ｐ７０１）は、表示するデータの形式を選択するためのラジオボタンである。入力フォーム（Ｐ７０２）は、検索語を入力するための入力フォームである。【０３０２】
ＯＫボタン（Ｐ７０３）は、入力を確定するための操作ボタンである。キャンセルボタン（Ｐ７０４）は、入力の確定をキャンセルするための操作ボタンである。【０３０３】
例えば、ユーザは、ラジオボタン（Ｐ３０１）を操作し、入力フォーム（Ｐ３０２）に検索語を入力し、ＯＫボタン（Ｐ７０３）を押下する。【０３０４】
以上が患者情報取得画面２１１７の説明である。図２３の説明に戻る。【０３０５】
次に、ユーザ端末２は、検索語に一致する情報を取得するためのデータの取得要求を生成する（ステップＳ４０２）。具体的には、以下のような処理が実行される。【０３０６】
ユーザ側付加処理部２１６は、要求された情報を取得するために必要な操作の種別を特定する。ユーザ側付加処理部２１６は、対象の情報及び対象のカラムの名称を特定する。また、ユーザ側付加処理部２１６は、暗号一致判定処理に使用する検索クエリを格納する暗号化部分情報４６２２を特定する。ユーザ側付加処理部２１６は、入力された検索語を部分一致検索クエリ生成部２１６２に入力し、部分一致検索クエリ生成処理の実行を指示する。【０３０７】
部分一致検索クエリ生成部２１６２は、部分一致検索クエリ生成処理を実行することによって部分一致検索クエリ情報２１０２を生成する。例えば、検索語“藤原太”が入力された場合、図１５に示すような部分一致検索クエリ情報２１０２が生成される。なお、部分一致検索クエリ生成処理の詳細は、図２６を用いて説明する。【０３０８】
部分一致検索クエリ生成部２１６２は、部分一致検索クエリ情報２１０２をユーザ側付加処理部２１６に送信する。【０３０９】
ユーザ側付加処理部２１６は、操作の種別、対象の情報の名称、対象のカラムの名称、暗号化部分情報４６２２の識別情報、部分一致検索クエリ情報２１０２、及び読出命令を含むデータの取得要求を生成し、アプリケーションサーバ３に送信する。以上がステップＳ４０２の処理の説明である。【０３１０】
次に、アプリケーションサーバ３は、暗号化データに対する部分一致検索処理を実行するためのＳＱＬを生成する（ステップＳ４０３）。具体的には、以下のような処理が実行される。【０３１１】
アプリケーション部３１１は、データの取得要求を受信した場合、データの取得要求をＳＱＬ生成部３１２に送信する。【０３１２】
ＳＱＬ生成部３１２は、ＳＱＬ定義情報３６１を参照し、要求処理３６１２がデータの取得要求に含まれる操作の種別に一致するレコードを特定する。この場合、定義ＩＤ３６１１が“２”のレコードが特定される。【０３１３】
ＳＱＬ生成部３１２は、データの取得要求に含まれるカラムの名称、情報の名称、部分一致検索クエリ情報２１０２、並びに特定されたレコードのＳＱＬ定義３６１３に基づいて、ＳＱＬを生成する。本実施例では、部分一致ＩＤ取得処理のＳＱＬ及び部分一致対象カラム取得処理のＳＱＬが生成される。ＳＱＬ生成部３１２は、生成されたＳＱＬをアプリケーション部３１１に送信する。【０３１４】
アプリケーション部３１１は、データベースインタフェース部３１３を介して、ＳＱＬをデータベースサーバ４に送信する。【０３１５】
図２４に示すような情報が入力された場合、ＳＱＬ生成部３１２は以下のようなＳＱＬ（Ｇ）、（Ｈ）を生成する。
ＳＱＬ（Ｇ）
SELECT 部分一致ID取得(名前＿部分情報,
LikeID情報＿001, 部分一致検索クエリＥＱ )；
ＳＱＬ（Ｈ）
SELECT 患者番号, 名前 FROM 暗号化患者情報
JOIN LikeID情報＿001
ON ( 暗号化患者情報.ID = LikeID情報＿001.ID )；【０３１６】
ＳＱＬ（Ｇ）は、部分一致ＩＤ取得処理のＳＱＬである。ＳＱＬ（Ｇ）は、部分一致ＩＤ取得部４１３１に部分一致ＩＤ取得処理の実行を指示することによって、暗号化部分情報４６２２から部分一致検索クエリに一致するＩＤをＬｉｋｅＩＤ情報＿００１に出力することを意味する。【０３１７】
ＳＱＬ（Ｈ）は、部分一致対象カラム取得処理のＳＱＬである。ＳＱＬ（Ｈ）は、暗号化患者情報４６１３とＬｉｋｅＩＤ情報＿００１を結合することによってレコードを出力し、当該レコードの“患者番号”カラム及び“名前”カラムの値を読み出すことを意味する。以上がステップＳ４０３の説明である。【０３１８】
次に、データベースサーバ４は、アプリケーションサーバ３からＳＱＬを受信した場合、当該ＳＱＬにしたがって、部分一致ＩＤ取得処理及び部分一致対象カラム取得処理を実行する（ステップＳ４０４、ステップＳ４０５）。具体的には、以下のような処理が実行される。【０３１９】
データベース制御部４１１は、部分一致ＩＤ取得処理のＳＱＬを実行し、部分一致対象カラム取得処理のＳＱＬを実行する。【０３２０】
ここで、受信したＳＱＬがＳＱＬ（Ｇ）、（Ｈ）である場合を例に説明する。【０３２１】
まず、データベース制御部４１１は、ＳＱＬ（Ｇ）に基づいて、データベース側付加処理部４１３の部分一致ＩＤ取得部４１３１に部分一致ＩＤ取得処理の実行を指示する。これによって、ＬｉｋｅＩＤ情報＿ｘｘｘ４６２３にＩＤが格納される。部分一致ＩＤ取得処理の詳細は、図２７を用いて説明する。【０３２２】
データベース制御部４１１は、ＳＱＬ（Ｈ）に基づいて、暗号化患者情報４６１３から、“ＩＤ”カラムがＬｉｋｅＩＤ情報＿ｘｘｘ４６２３に格納されるＩＤと一致するレコードを出力し、当該レコードの“患者番号”カラム及び“名前”カラムの値を取得する。データベース制御部４１１は、メモリ４１０に一時情報４１０２として取得結果を格納する。【０３２３】
データベース制御部４１１は、一時情報４１０２を含む処理結果をアプリケーションサーバ３に送信する。以上がステップＳ４０４、ステップＳ４０５の処理の説明である。【０３２４】
次に、ユーザ端末２は、処理結果を受信した場合、当該処理結果を復号化する（ステップＳ４０６）。【０３２５】
具体的には、ユーザ側付加処理部２１６は、一時情報４１０２を含む処理結果を受信した場合、鍵管理部２１５から鍵情報を取得し、一時情報４１０２及び鍵情報を復号化部２１３に送信する。復号化部２１３は、鍵情報を用いて、一時情報４１０２に含まれるカラムの値を復号化することによって平文データを取得する。復号化部２１３は、平文データをユーザ側付加処理部２１６に送信する。ユーザ側付加処理部２１６は、平文データをブラウザ２１１に送信する。【０３２６】
次に、ユーザ端末２は、一連の処理の結果をユーザに対して表示する（ステップＳ４０７）。【０３２７】
具体的には、ブラウザ２１１は、平文データを含む処理結果を表示するための表示情報を生成し、当該表示情報に基づいて、図２５に示すような患者情報表示画面２１１８を表示装置２２０に表示する。【０３２８】
ここで、患者情報表示画面２１１８について説明する。患者情報表示画面２１１８は、ブラウザ２１１によって表示装置２２０に表示される。【０３２９】
患者情報表示画面２１１８は、検索結果の一覧（Ｐ８０１）を含む。また、患者情報表示画面２１１８は、ＯＫボタン（Ｐ８０２）を含む。【０３３０】
図２５に示す検索結果の一覧（Ｐ８０１）は、“患者”カラム、及び“名前”カラムを含むレコードを１つ含む。当該レコードは、患者番号が“００００００２”、名前が“藤原太郎”という患者であることを示す。ＯＫボタン（Ｐ８０２）は、表示の終了を指示するための操作ボタンである。【０３３１】
以上が患者情報表示画面２１１８の説明である。また、以上が部分一致検索処理の流れの説明である。【０３３２】
図２６は、実施例２の部分一致検索クエリ生成部２１６２が実行する部分一致検索クエリ生成処理の一例を説明するフローチャートである。【０３３３】
部分一致検索クエリ生成部２１６２は、検索語が入力された場合、以下で説明する部分一致検索クエリ生成処理を開始する。【０３３４】
まず、部分一致検索クエリ生成部２１６２は、Ｎ−ｇｒａｍ方式を用いて、検索語を分割する（ステップＦ３０１）。【０３３５】
Ｎ＝２のＮ−ｇｒａｍ方式を用いた場合、検索語“藤原太”は、“藤原”及び“原太”の２つに分割される。【０３３６】
次に、部分一致検索クエリ生成部２１６２は、分割された各値について、分割前の値の先頭からの分割位置を示すｏｆｆｓｅｔを割り当てる（ステップＦ３０２）。【０３３７】
例えば、検索語が“藤原太”である場合、“藤原”にはｏｆｆｓｅｔ“０”が割り当てられ、“原太”にｏｆｆｓｅｔ“１”を割り当てられる。【０３３８】
次に、部分一致検索クエリ生成部２１６２は、検索クエリを生成する（ステップＦ３０３）。【０３３９】
具体的には、部分一致検索クエリ生成部２１６２は、鍵管理部２１５から鍵情報を取得し、分割された各値及び鍵情報を暗号化検索クエリ生成部２１４に送信する。暗号化検索クエリ生成部２１４は、鍵情報を用いて、分割された各値を暗号化することによって検索クエリを生成し、当該検索クエリを部分一致検索クエリ生成部２１６２に送信する。【０３４０】
例えば、“藤原”及び“原太”から、“ＥｎｃＱｕｅｒｙ（藤原）”及び“ＥｎｃＱｕｅｒｙ（原太）”が生成される。【０３４１】
次に、部分一致検索クエリ生成部２１６２は、部分一致検索クエリ情報２１０２を生成する（ステップＦ３０４）。【０３４２】
具体的には、部分一致検索クエリ生成部２１６２は、分割された値、分割された値のｏｆｆｓｅｔ、及び分割された値の検索クエリを含むレコードを複数含む部分一致検索クエリ情報２１０２を生成する。【０３４３】
例えば、検索語“藤原太”が入力された場合、以下の２つのレコードを含む部分一致検索クエリ情報２１０２が生成される。
部分一致検索クエリ    offset
レコード１：  EncQuery(藤原)        0
レコード２：  EncQuery(原太)        1【０３４４】
以上の処理によって、図１５に示すような部分一致検索クエリ情報２１０２がメモリ２１０に格納される。【０３４５】
図２７は、実施例２の部分一致ＩＤ取得部４１３１が実行する部分一致ＩＤ取得処理の一例を説明するフローチャートである。【０３４６】
部分一致ＩＤ取得部４１３１は、データベース側付加処理部４１３から読み出された場合、以下で説明する部分一致ＩＤ取得処理を実行する。なお、部分一致ＩＤ取得部４１３１には、暗号化部分情報４６２２の名称、ＬｉｋｅＩＤ情報＿ｘｘｘ４６２３の名称、及び部分一致検索クエリが入力される。【０３４７】
まず、部分一致ＩＤ取得部４１３１は、現在の位置情報を示す変数ｏｆｆｓｅｔ＿ｎｏｗ、及びカウントを示す変数ｎに初期値として“０”を設定する（ステップＦ４０１）。【０３４８】
次に、部分一致ＩＤ取得部４１３１は、対象の部分一致検索クエリを示す変数ｑｕｅｒｙ＿ｎｏｗを設定する（ステップＦ４０２）。【０３４９】
具体的には、部分一致ＩＤ取得部４１３１は、部分一致検索クエリ情報２１０２から、“ｏｆｆｓｅｔ”カラムの値がｏｆｆｓｅｔ＿ｎｏｗに一致する部分一致検索クエリを検索する。部分一致ＩＤ取得部４１３１は、検索された部分一致検索クエリをｑｕｅｒｙ＿ｎｏｗに設定する。【０３５０】
例えば、ｏｆｆｓｅｔ＿ｎｏｗが“０”の場合、“ｏｆｆｓｅｔ”カラムが“０”であるレコードの部分一致検索クエリ“ＥｎｃＱｕｅｒｙ（藤原）”が、ｑｕｅｒｙ＿ｎｏｗに設定される。【０３５１】
次に、部分一致ＩＤ取得部４１３１は、Ｐｏｓｉｔｉｏｎ＿Ｔａｂｌｅを生成する（ステップＦ４０３）。具体的には、以下のような処理が実行される。【０３５２】
部分一致ＩＤ取得部４１３１は、暗号一致判定部４１２を呼び出し、暗号化部分情報４６２２から、“部分情報”カラムの値がｑｕｅｒｙ＿ｎｏｗと一致するレコードを検索する。【０３５３】
部分一致ＩＤ取得部４１３１は、検索されたレコードの“ＩＤ”カラムの値、及び“ｏｆｆｓｅｔ”カラムの値に“１”を加えた値を格納するカラムを含むレコードから構成されるＰｏｓｉｔｉｏｎ＿Ｔａｂｌｅを生成する。部分一致ＩＤ取得部４１３１は、メモリ４１０にＰｏｓｉｔｉｏｎ＿Ｔａｂｌｅ格納する。【０３５４】
例えば、暗号化部分情報４６２２が図１７に示す暗号化部分情報４６２２であり、かつ、ｑｕｅｒｙ＿ｎｏｗが“ＥｎｃＱｕｅｒｙ（藤原）”である場合、“ＩＤ”カラムの値が“２”であり、“ｏｆｆｓｅｔ”カラムの値に“１”を加えた値が“１”であるレコードを含むＰｏｓｉｔｉｏｎ＿Ｔａｂｌｅが生成される。具体的には、Ｐｏｓｉｔｉｏｎ＿Ｔａｂｌｅは以下のようなレコードを含む。以上がステップＦ４０３の処理の説明である。
（Position_Table ）
ID    offset
レコード１：  ２    １【０３５５】
次に、部分一致ＩＤ取得部４１３１は、ｏｆｆｓｅｔ＿ｎｏｗを更新する（ステップＦ４０４）。【０３５６】
具体的には、部分一致ＩＤ取得部４１３１は、現在のｏｆｆｓｅｔ＿ｎｏｗに“１”を加算する。【０３５７】
次に、部分一致ＩＤ取得部４１３１は、部分一致検索クエリ情報２１０２に、“ｏｆｆｓｅｔ”カラムの値がｏｆｆｓｅｔ＿ｎｏｗに一致する部分一致検索クエリが存在するか否かを判定する（ステップＦ４０５）。【０３５８】
具体的には、部分一致ＩＤ取得部４１３１は、部分一致検索クエリ情報２１０２を参照し、“ｏｆｆｓｅｔ”カラムの値がｏｆｆｓｅｔ＿ｎｏｗに一致する部分一致検索クエリが存在するか否かを判定する。【０３５９】
“ｏｆｆｓｅｔ”カラムの値がｏｆｆｓｅｔ＿ｎｏｗに一致する部分一致検索クエリが存在すると判定された場合、部分一致ＩＤ取得部４１３１は、ｑｕｅｒｙ＿ｎｏｗを更新する（ステップＦ４０６）。【０３６０】
具体的には、部分一致ＩＤ取得部４１３１は、検索された部分一致検索クエリをｑｕｅｒｙ＿ｎｏｗに設定する。例えば、更新前のｑｕｅｒｙ＿ｎｏｗに“ＥｎｃＱｕｅｒｙ（藤原）”が設定されている場合、ステップＦ４０４においてｏｆｆｓｅｔ＿ｎｏｗは“１”に更新される。したがって、ｑｕｅｒｙ＿ｎｏｗには“ＥｎｃＱｕｅｒｙ（原太）”が設定される。【０３６１】
次に、部分一致ＩＤ取得部４１３１は、ｎを更新する（ステップＦ４０７）。【０３６２】
具体的には、部分一致ＩＤ取得部４１３１は、現在のｎに“１”を加算する。【０３６３】
次に、部分一致ＩＤ取得部４１３１は、暗号化部分情報４６２２から条件に一致するレコードを検索する（ステップＦ４０８）。具体的には、以下のような処理が実行される。【０３６４】
部分一致ＩＤ取得部４１３１は、暗号化部分情報４６２２の“ＩＤ”カラム及び“ｏｆｆｓｅｔ”カラムの値が、Ｐｏｓｉｔｉｏｎ＿Ｔａｂｌｅのｎ番目のレコードの“ＩＤ”カラム及び“ｏｆｆｓｅｔ”カラムの値と一致し、かつ、暗号化部分情報４６２２の“部分情報”カラムの値が、ｑｕｅｒｙ＿ｎｏｗに一致するレコードを検索する。なお、暗号化部分情報４６２２の“部分情報”カラムの値とｑｕｅｒｙ＿ｎｏｗとの間の一致判定は、暗号一致判定部４１２によって行われる。【０３６５】
例えば、ｎが“１”である場合、Ｐｏｓｉｔｉｏｎ＿ＴａｂｌｅにはステップＦ４０３において例示したレコードが含まれる。この場合、部分一致ＩＤ取得部４１３１は、“ＩＤ”カラムの値が“２”、“ｏｆｆｓｅｔ”カラムの値が“１”であり、“名前＿部分情報”カラムが“ＥｎｃＱｕｅｒｙ（原太）”と一致するレコードを検索する。部分一致ＩＤ取得部４１３１は、以下のようなレコードを検索結果として取得する。以上がステップＦ４０８の処理の説明である。
（検索結果）
名前＿部分情報  ID  offset
レコード１： “Enc(原太)”  ２  １【０３６６】
次に、部分一致ＩＤ取得部４１３１は、検索結果に基づいて、条件に一致するレコードが存在するか否かを判定する（ステップＦ４０９）。【０３６７】
条件に一致するレコードが存在すると判定された場合、部分一致ＩＤ取得部４１３１はＰｏｓｉｔｉｏｎ＿Ｔａｂｌｅのｎ番目のレコードの“ｏｆｆｓｅｔ”カラムの値を“１”加算する（ステップＦ４１０）。その後、部分一致ＩＤ取得部４１３１は、ステップＦ４１２に進む。【０３６８】
例えば、ｎが“１”である場合、ステップＦ４０３において例示したＰｏｓｉｔｉｏｎ＿Ｔａｂｌｅの１番目のレコード１の“ｏｆｆｓｅｔ”カラムの値は“２”となる。【０３６９】
条件に一致するレコードが存在しないと判定された場合、部分一致ＩＤ取得部４１３１は、Ｐｏｓｉｔｉｏｎ＿Ｔａｂｌｅのｎ番目のレコードを削除する（ステップＦ４１０）。その後、部分一致ＩＤ取得部４１３１は、ステップＦ４１２に進む。【０３７０】
次に、部分一致ＩＤ取得部４１３１は、Ｐｏｓｉｔｉｏｎ＿Ｔａｂｌｅに（ｎ＋１）番目のレコードが存在するか否かを判定する（ステップＦ４１２）。【０３７１】
Ｐｏｓｉｔｉｏｎ＿Ｔａｂｌｅに（ｎ＋１）番目のレコードが存在すると判定された場合、部分一致ＩＤ取得部４１３１は、ステップＦ４０７に戻り、同様の処理を実行する。【０３７２】
Ｐｏｓｉｔｉｏｎ＿Ｔａｂｌｅに（ｎ＋１）番目のレコードが存在しないと判定された場合、部分一致ＩＤ取得部４１３１は、ステップＦ４０４に戻り、同様の処理を実行する。【０３７３】
ステップＦ４０５において、“ｏｆｆｓｅｔ”カラムの値がｏｆｆｓｅｔ＿ｎｏｗに一致する部分一致検索クエリが存在しないと判定された場合、部分一致ＩＤ取得部４１３１は、ＬｉｋｅＩＤ情報＿ｘｘｘ４６２３を生成する（ステップＦ４１３）。その後、部分一致ＩＤ取得部４１３１は、部分一致ＩＤ取得処理を終了する。【０３７４】
具体的には、部分一致ＩＤ取得部４１３１は、Ｐｏｓｉｔｉｏｎ＿Ｔａｂｌｅの“ＩＤ”カラムの値を重複排除し、ＩＤ群のみからなるＬｉｋｅＩＤ情報＿ｘｘｘ４６２３を生成する。部分一致ＩＤ取得部４１３１は、生成されたＬｉｋｅＩＤ情報＿ｘｘｘ４６２３をデータベース側付加情報群４６２に格納する。【０３７５】
例えば、各ステップにおいて例示したレコードを処理した結果、以下のレコードを含む持つＬｉｋｅＩＤ情報＿ｘｘｘ４６２３が生成される。
（LikeID情報＿xxx）
ID
レコード１：  ２【０３７６】
以上が部分一致検索処理の説明である。【０３７７】
（２−４）実施例２の効果
以上で説明したように、実施例２の秘匿化データベースシステム１では、暗号化結合情報４６２１及びＳＱＬ定義情報３６１に基づいて、名前の一部等の部分的な検索条件を受け付けた場合、暗号化された情報が復号されることなく、部分的に一致した情報を含む検索結果がユーザ端末２に送信される。したがって、データの秘匿性を維持しつつ、任意のテーブルのレコードに含まれるカラムと部分的に一致するレコードを取得するデータベース操作命令を実行可能な秘匿化データベースシステムを実現することができる。
【実施例３】
【０３７８】
実施例３の秘匿化データベースシステム１は、範囲検索処理及びソート処理を実現するための機能を提供する点が実施例１とは異なる。範囲検索処理は、指定された範囲に含まれるレコードを取得するための処理であり、ソート処理は任意の条件にしたがってレコードを並び替えるための処理である。以下、実施例１との差異を中心に、実施例３について説明する。【０３７９】
（３−１）実施例３の計算機システムの構成
実施例３の秘匿化データベースシステム１は、実施例１と同一の構成であるため説明を省略する。また、実施例３のユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４のハードウェア構成は実施例１の各ハードウェア構成と同一であるため説明を省略する。【０３８０】
実施例３では、ソフトウェア構成及び各装置が保持する情報の内容が一部異なる。【０３８１】
まず、ユーザ端末２のソフトウェア構成について説明する。実施例２のユーザ端末２のソフトウェア構成は、実施例１のユーザ端末２のソフトウェア構成と同一である。ただし、実施例２のユーザ側付加処理部２１６は、範囲検索処理及びソート処理を実現するための機能を有する点が実施例１とは異なる。【０３８２】
図２８は、実施例３のユーザ側付加処理部２１６の論理構成を示すブロック図である。【０３８３】
ユーザ側付加処理部２１６は、対応範囲情報生成部２１６３、対応範囲ラベル情報生成部２１６４、範囲検索／ソートクエリ生成部２１６５、範囲外データ削除部２１６６、及び制限付きソート処理部２１６７を含む。【０３８４】
対応範囲情報生成部２１６３は、平文データである範囲検索処理／ソート処理の対象カラムの情報を受け付け、対象カラムの値域を分割した複数の区分に範囲ラベルを割り当て、各区分の頻度を計測することによって対応範囲情報２６２１を生成し、対応範囲情報２６２１を出力する。【０３８５】
対応範囲ラベル情報生成部２１６４は、対応範囲情報２６２１の名称及び対象のカラムの値の入力を受け付け、対応範囲情報２６２１からカラムの値に対応する範囲ラベルを取得し、取得した範囲ラベルを出力する。【０３８６】
範囲検索／ソートクエリ生成部２１６５は、平文データである範囲検索処理／ソート処理の条件の入力を受け付け、当該条件に対応する範囲ラベルの検索クエリを出力する。【０３８７】
範囲外データ削除部２１６６は、範囲検索処理／ソート処理の処理結果から、範囲検索処理／ソート処理の条件に該当しないレコードを削除し、当該条件に該当するレコードのみを出力する。【０３８８】
制限付きソート処理部２１６７は、範囲検索処理／ソート処理の処理結果又は範囲外データ削除部２１６６によって処理された範囲検索処理／ソート処理の処理結果を入力として受け付け、指定された順番に並び替えられた所定の数のレコードを出力する。なお、出力されるレコードの数（Ｌｉｍｉｔ数）は、ユーザによって予め指定される。【０３８９】
次に、アプリケーションサーバ３のソフトウェア構成について説明する。実施例３のアプリケーションサーバ３のソフトウェア構成は、実施例１のアプリケーションサーバ３のソフトウェア構成と同一である。【０３９０】
実施例３では、アプリケーションサーバ３は、定義ＩＤ３６１１が“３”のＳＱＬ定義３６１３に基づいて、範囲検索処理／ソート処理を実現するＳＱＬを生成する。ここで、定義ＩＤ３６１１が“３”のＳＱＬ定義３６１３は、以下のようなＳＱＬ（Ｉ）となる。
ＳＱＬ（Ｉ）
SELECT 患者番号、名前、年齢 FROM 範囲情報
WHERE 暗号一致判定（年齢＿範囲ラベル，EncQuery(300)）＝‘true’
OR 暗号一致判定（年齢＿範囲ラベル，EncQuery(400)）＝‘true’；【０３９１】
ＳＱＬ（Ｉ）は、暗号化対応範囲情報４６２４から、“年齢＿範囲ラベル”カラムが検索クエリ“ＥｎｃＱｕｅｒｙ（３００）”、又は検索クエリ“ＥｎｃＱｕｅｒｙ（４００）”と一致するレコード群から“患者番号”カラム、“名前”カラム及び“年齢”カラムの値を読み出すことを意味する。【０３９２】
次に、データベースサーバ４のソフトウェア構成について説明する。実施例３のデータベースサーバ４のソフトウェア構成は、実施例１のデータベースサーバ４のソフトウェア構成と同一である。【０３９３】
次に、実施例３の各構成が有する情報について説明する。【０３９４】
図２９は、実施例３のユーザ側付加情報群２６２のデータ構造の一例を示す図である。【０３９５】
実施例２のユーザ側付加情報群２６２は、対応範囲情報２６２１を含む。【０３９６】
対応範囲情報２６２１は、“対応範囲”カラム、“範囲ラベル”カラム、及び“頻度”カラムを含むレコードを複数含む。【０３９７】
“対応範囲”カラムは、範囲検索処理／ソート処理の対象となるカラムの値域が分割された区分である。本実施例では、年齢の範囲を指定した範囲検索処理を想定しているため、対応範囲情報２６２１には、“年齢＿対応範囲”カラムが含まれる。【０３９８】
“範囲ラベル”カラムは、区分に割り当てられる範囲ラベルである。“頻度”カラムは、“年齢＿対応範囲”カラムに対応するカラムの値が区分に含まれるレコードの数である。【０３９９】
例えば、対応範囲情報２６２１の一番上のレコードは、年齢が“０歳から９歳の区分”であり、範囲ラベルは“１００”、レコードの“年齢”カラムの値が当該区分に含まれるレコードの数が“２”であることを示す。【０４００】
図３０は、実施例３のメモリ２１０に一時的に格納されるデータのデータ構造の一例を示す図である。【０４０１】
実施例３のメモリ２１０は、範囲検索クエリ情報２１０３を含む。【０４０２】
範囲検索クエリ情報２１０３は、範囲検索処理／ソート処理の条件に基づいて生成された検索クエリを格納するレコードを複数含む。当該レコードは、“検索クエリ”カラムを含む。本実施例の検索クエリは、範囲検索処理において実行される暗号一致判定処理に用いられる。【０４０３】
図３０に示す範囲検索クエリ情報２１０３には、検索クエリ“ＥｎｃＱｕｅｒｙ（３００）”のレコード、及び検索クエリ“ＥｎｃＱｕｅｒｙ（４００）”のレコードが含まれる。【０４０４】
図３１は、実施例３の暗号化メイン情報群４６１のデータ構造の一例を示す図である。【０４０５】
実施例３の暗号化メイン情報群４６１は、暗号化患者情報４６１４を含む。【０４０６】
暗号化患者情報４６１４は、患者の一覧であり、“ＩＤ”カラム、“患者番号”カラム、“名前”カラム、及び“年齢”カラムを含むレコードを複数含む。【０４０７】
“ＩＤ”カラム、“患者番号”カラム、及び“名前”カラムは、実施例１の暗号化患者情報４６１１のＩＤ”カラム、“患者番号”カラム、及び“名前”カラムと同一のものである。“年齢”カラムは、患者の年齢である。【０４０８】
例えば、暗号化患者情報４６１４の一番上のレコードは、患者番号が“Ｅｎｃ（００００００１）”である患者であり、名前が“Ｅｎｃ（鈴木）”、年齢が“Ｅｎｃ（４）”であることを示す。【０４０９】
図３２は、実施例３のデータベース側付加情報群４６２のデータ構造の一例を示す図である。【０４１０】
実施例３のデータベース側付加情報群４６２は、範囲検索処理／ソート処理に使用する暗号化対応範囲情報４６２４を含む。【０４１１】
暗号化対応範囲情報４６２４は、“ＩＤ”カラム、“患者番号”カラム、“名前”カラム、“年齢”カラム、及び“年齢＿範囲ラベル”カラムを含むレコードを複数含む。【０４１２】
“年齢＿範囲ラベル”カラムは、暗号一致判定処理において検索クエリと比較される暗号化データである。例えば、暗号化対応範囲情報４６２４の一番上のレコードの“年齢＿範囲ラベル”カラムには、 “４”歳を含む区分の範囲ラベル“１００”が暗号化された“Ｅｎｃ（１００）”が格納される。【０４１３】
“ＩＤ”カラム、“患者番号”カラム、“名前”カラム、及び“年齢”カラムは、暗号化患者情報４６１４の“ＩＤ”カラム、“患者番号”カラム、“名前”カラム、及び“年齢”カラムに対応するカラムである。【０４１４】
図３３は、実施例３のメモリ４１０に一時的に格納される一時情報４１０３のデータ構造の一例を示す図である。【０４１５】
一時情報４１０３は、ＳＱＬ（Ｉ）の実行結果を格納する。具体的には、一時情報４１０３は、暗号化患者情報４６１４から、検索クエリに一致するレコードの“患者番号”カラム、“名前”カラム、及び“年齢”カラムの値を格納する。したがって、一時情報４１０３は、“患者番号”カラム、“名前”カラム、及び“年齢”カラムを含むレコードを１つ以上含む。【０４１６】
図３３に示す一時情報４１０３の一番上のレコードは、患者番号が“Ｅｎｃ（００００００５）”であり、名前が“Ｅｎｃ（藤原）”であり、年齢が“Ｅｎｃ（２３）”である患者のレコードであることを示す。【０４１７】
（３−２）範囲検索処理／ソート処理の準備処理の詳細
次に、図３４、図３５、図３６、図３７、及び図３８を用いて、暗号化された情報に対する範囲検索処理／ソート処理に必要な設定を行うための範囲検索処理／ソート処理の準備処理の詳細を説明する。【０４１８】
図３４は、実施例３の範囲検索処理／ソート処理の準備処理の流れを説明するシーケンス図である。図３５は、実施例３の範囲検索処理／ソート処理設定入力画面２１１９の一例を示す図である。図３６は、実施例３の範囲検索処理／ソート処理設定結果表示画面２１２０の一例を示す図である。【０４１９】
ユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４は、連携して範囲検索処理／ソート処理の準備処理を実行する。【０４２０】
ステップＳ１０１からＳ１０５までの処理の流れは実施例１の処理の流れと同一である。ただし、各ステップの処理内容が一部異なる。【０４２１】
実施例３のステップＳ１０１では、ユーザが入力する情報が実施例１と異なる。実施例３では、ユーザは、図３５に示すような範囲検索処理／ソート処理設定入力画面２１１９を用いて、範囲検索処理／ソート処理の対象となる情報、カラム、値域、及び頻度平準化の基準値を入力する。【０４２２】
ここで、範囲検索処理／ソート処理設定入力画面２１１９について説明する。範囲検索処理／ソート処理設定入力画面２１１９は、ブラウザ２１１によって表示装置２２０に表示される。【０４２３】
範囲検索処理／ソート処理設定入力画面２１１９は、範囲検索処理及びソート処理に必要な情報を入力する複数の入力フォーム（Ｐ９０１）、（Ｐ９０２）、（Ｐ９０３）、（Ｐ９０４）、（Ｐ９０５）を含む。また、範囲検索処理／ソート処理設定入力画面２１１９は、ＯＫボタン（Ｐ９０６）及びキャンセルボタン（Ｐ９０７）を含む。【０４２４】
入力フォーム（Ｐ９０１）は、範囲検索処理／ソート処理の対象となる情報の名称を入力するための入力フォームである。入力フォーム（Ｐ９０２）は、範囲検索処理／ソート処理の対象となるカラムの名称を入力するための入力フォームである。【０４２５】
入力フォーム（Ｐ９０３）は、対象のカラムの値域の下限値を入力する入力フォームであり、入力フォーム（Ｐ９０４）は、対象のカラムの値域の上限値を入力する入力フォームである。入力フォーム（Ｐ９０５）は、各区分に含まれるレコードの数を平準化するための基準値を入力するための入力フォームである。【０４２６】
ＯＫボタン（Ｐ９０６）は、各入力フォームに入力した値を確定するための操作ボタンである。キャンセルボタン（Ｐ９０７）は、各入力フォームに入力した値の確定をキャンセルするための操作ボタンである。【０４２７】
図３５では、範囲検索処理／ソート処理の対象となる情報及びカラムとして“暗号化患者情報”及び“年齢”が入力され、値域が“０”から“２００”と入力され、頻度平準化基準値が“２”と入力される。【０４２８】
以上が範囲検索処理／ソート処理設定入力画面２１１９の説明である。図３４の説明に戻る。【０４２９】
実施例３のステップＳ１０２では、結合対象カラム決定処理は実行されない。【０４３０】
実施例３のステップＳ１０３では、ＳＱＬ生成部３１２は、範囲検索処理／ソート処理設定入力画面２１１９に入力された値に基づいて、データの取得要求に含まれる対象のカラムの値を読み出すためのＳＱＬを生成する。【０４３１】
実施例３のステップＳ１０４及びステップＳ１０５の処理の内容は、実施例１と同一である。ステップＳ１０５の処理が完了した時点では、メモリ２１０には、暗号化患者情報４６１４の“年齢”カラムの値が復号化された状態で格納される。【０４３２】
ユーザ端末２は、ステップＳ１０５において復号化された平文データを用いて対応範囲情報２６２１を生成する（ステップＳ５０１）。【０４３３】
具体的には、ユーザ側付加処理部２１６は、対応範囲情報生成部２１６３を呼び出す。このとき、ユーザ側付加処理部２１６は、対象のカラムの値、対象のカラムの値域、頻度平準化基準値を対応範囲情報生成部２１６３に入力する。対応範囲情報生成部２１６３は、入力された値に基づいて対応範囲情報生成処理を実行する。これによって、図２９に示す対応範囲情報２６２１が生成される。対応範囲情報生成処理の詳細は、図３７を用いて説明する。【０４３４】
次に、ユーザ端末２は、対応範囲情報２６２１を暗号化する（ステップＳ５０２）。具体的には、以下のような処理が実行される。【０４３５】
ユーザ側付加処理部２１６は、鍵管理部２１５から鍵情報を取得し、対応範囲情報２６２１及び鍵情報を暗号化部２１２に送信する。暗号化部２１２は、鍵情報を用いて対応範囲情報２６２１を暗号化し、暗号化された対応範囲情報２６２１をユーザ側付加処理部２１６に送信する。ユーザ側付加処理部２１６は、暗号化された対応範囲情報２６２１を生成するための生成命令を生成する。【０４３６】
次に、ユーザ端末２は、対応範囲ラベルを生成する（ステップＳ５０３）。【０４３７】
具体的には、ユーザ側付加処理部２１６は、対応範囲ラベル情報生成部２１６４を呼び出す。このとき、ユーザ側付加処理部２１６は、対象のカラムの平文データ及び暗号化前の対応範囲情報２６２１の名称を入力する。対応範囲ラベル情報生成部２１６４は、入力された値に基づいて対応範囲ラベル情報生成処理を実行する。これによって、対象カラムの各区分に対応する範囲ラベルが生成される。対応範囲ラベル情報生成処理の詳細は、図３８を用いて説明する。【０４３８】
次に、ユーザ端末２は、暗号化対応範囲情報４６２４を生成するための生成命令を生成する（ステップＳ５０４）。具体的には、以下のような処理が実行される。【０４３９】
ユーザ側付加処理部２１６は、鍵管理部２１５から鍵情報を取得し、ステップＳ５０３において生成された範囲ラベル及び鍵情報を暗号化検索クエリ生成部２１４に入力する。暗号化検索クエリ生成部２１４は、範囲ラベルの検索クエリを生成し、ユーザ側付加処理部２１６に生成された検索クエリを送信する。【０４４０】
ユーザ側付加処理部２１６は、暗号化された対応範囲情報２６２１に検索クエリのカラムを追加するための追加命令を生成する。【０４４１】
ユーザ側付加処理部２１６は、暗号化された対応範囲情報２６２１の情報、情報暗号化された対応範囲情報２６２１の生成命令、範囲ラベルの検索クエリ、及び“検索クエリ”カラムの追加命令を含む生成命令を生成する。ユーザ側付加処理部２１６は、生成された生成命令をアプリケーションサーバ３に送信する。以上がステップＳ５０４の処理の説明である。【０４４２】
ステップＳ５０４の処理の後、ステップＳ１０８からステップＳ１１０までの処理が実行される。ステップＳ１０８からステップＳ１１０までの処理の流れは実施例１の処理の流れと同一である。ただし、各ステップにおける処理内容が一部異なる。【０４４３】
実施例３のステップＳ１０８では、ＳＱＬ生成部３１２は、生成命令に含まれる各情報を用いて、暗号化対応範囲情報４６２４を生成するためのＳＱＬを生成する。【０４４４】
実施例３のステップＳ１０９では、データベース制御部４１１は、受信したＳＱＬを実行することによってデータベース側付加情報群４６２に暗号化対応範囲情報４６２４を生成する。【０４４５】
実施例３のステップＳ１１０では、ブラウザ２１１は、結果表示情報に基づいて、図３６に示すような範囲検索処理／ソート処理設定結果表示画面２１２０を表示装置２２０に表示する。【０４４６】
ここで、範囲検索処理／ソート処理設定結果表示画面２１２０について説明する。範囲検索処理／ソート処理設定結果表示画面２１２０は、ブラウザ２１１によって表示装置２２０に表示される。【０４４７】
範囲検索処理／ソート処理設定結果表示画面２１２０は、範囲検索処理／ソート処理設定入力画面２１１９に入力された情報、及びＳＱＬの実行結果を示す表示フォーム（Ｐ１００１）、（Ｐ１００２）、（Ｐ１００３）、（Ｐ１００４）、（Ｐ１００５）、（Ｐ１００６）を含む。また、範囲検索処理／ソート処理設定結果表示画面２１２０は、ＯＫボタン（Ｐ１００７）を含む。【０４４８】
表示フォーム（Ｐ１００１）は、範囲検索処理／ソート処理設定入力画面２１１９に入力された対象の情報の名称を表示する表示フォームである。表示フォーム（Ｐ１００２）は、範囲検索処理／ソート処理設定入力画面２１１９に入力された対象のカラムの名称を表示する表示フォームである。【０４４９】
表示フォーム（Ｐ１００３）は、対応範囲情報２６２１の名称を表示する表示フォームである。表示フォーム（Ｐ１００４）は、暗号化対応範囲情報４６２４の名称を表示する表示フォームである。表示フォーム（Ｐ１００５）は、検索クエリとして追加された対応範囲情報２６２１のカラムの名称を表示する表示フォームである。【０４５０】
表示フォーム（Ｐ１００６）は、暗号化対応範囲情報４６２４の生成結果を表示する表示フォームである。表示フォーム（Ｐ１００６）には、“成功”又は“失敗”のいずれかが表示される。【０４５１】
ＯＫボタン（Ｐ１００７）は、表示の終了を指示するための操作ボタンである。【０４５２】
以上が範囲検索処理／ソート処理設定結果表示画面２１２０の説明である。図３４の説明に戻る。【０４５３】
ユーザ端末２は、必要に応じて処理結果をユーザ側付加情報群２６２に格納してもよいし、また、アプリケーションサーバ３又はデータベースサーバ４に送信してもよい。なお、当該処理結果には、暗号化対応範囲情報４６２４と対応範囲情報２６２１との対応関係等が含まれる。以上が範囲検索処理／ソート処理の準備処理の流れの説明である。【０４５４】
図３７は、実施例３の対応範囲情報生成部２１６３が実行する対応範囲情報生成処理を説明するフローチャートである。【０４５５】
対応範囲情報生成部２１６３は、ユーザ側付加処理部２１６から呼び出された場合、以下で説明する対応範囲情報生成処理を開始する。なお、対応範囲情報生成部２１６３には、対象のカラムの値、対象のカラムの値域、及び頻度平準化基準値が入力される。【０４５６】
まず、対応範囲情報生成部２１６３は、対象のカラムの値毎の頻度（レコードの数）を算出する（ステップＦ５０１）。【０４５７】
次に、対応範囲情報生成部２１６３は、対象のカラムの値域を複数の区分に分割し、各区分に範囲ラベルを割り当てる（ステップＦ５０２）。このとき、対応範囲情報生成部２１６３は、各区分に含まれる値域の頻度の合計値が頻度平準化基準値を超えないように値域を複数の区分に分割する。【０４５８】
次に、対応範囲情報生成部２１６３は、対応範囲情報２６２１を生成する（ステップＦ５０３）。その後、対応範囲情報生成部２１６３は、処理を終了する。【０４５９】
具体的には、対応範囲情報生成部２１６３は、“対応範囲”カラム、“範囲ラベル”カラム、及び“頻度”カラムを含むレコードを登録することによって対応範囲情報生成部２１６３を生成する。また、対応範囲情報生成部２１６３は、生成された対応範囲情報２６２１をユーザ側付加情報群２６２に格納する。【０４６０】
例えば、図３５に示すような値が入力された場合、対応範囲情報生成部２１６３は、図２９に示すような対応範囲情報２６２１を生成する。【０４６１】
図３８は、実施例３の対応範囲ラベル情報生成部２１６４が実行する対応範囲ラベル情報生成処理を説明するフローチャートである。【０４６２】
対応範囲ラベル情報生成部２１６４は、ユーザ側付加処理部２１６から呼び出された場合、以下で説明する対応範囲ラベル情報生成処理を実行する。なお、対応範囲ラベル情報生成部２１６４には、対象のカラムの平文データ及び暗号化前の対応範囲情報２６２１の名称が入力される。【０４６３】
まず、対応範囲ラベル情報生成部２１６４は、対象のカラムの値を１つ読出し、当該値をＸと設定する（ステップＦ６０１）。【０４６４】
次に、対応範囲ラベル情報生成部２１６４は、Ｘが含まれる区分の範囲ラベルを特定する（ステップＦ６０２）。【０４６５】
具体的には、対応範囲ラベル情報生成部２１６４は、ユーザ側付加処理部２１６から入力された対応範囲情報２６２１の名称に基づいて、対応範囲情報２６２１の“対応範囲”カラムを参照し、Ｘを含む区分に対応するレコードを特定する。対応範囲ラベル情報生成部２１６４は、特定されたレコードの“範囲ラベル”カラムから値を読出し、当該値をＹと設定する。【０４６６】
次に、対応範囲ラベル情報生成部２１６４は、Ｘ及びＹを含むレコードを対応範囲ラベル情報に追加する（ステップＦ６０３）。ここで、対応範囲ラベル情報は、対象のカラムが含まれる範囲ラベルのリストであり、一時的にメモリ２１０に格納される。【０４６７】
次に、対応範囲ラベル情報生成部２１６４は、全ての対象のカラムの値について処理が完了したか否かを判定する（ステップＦ６０４）。【０４６８】
全ての対象のカラムの値について処理が完了していないと判定された場合、対応範囲ラベル情報生成部２１６４は、ステップＦ６０１に戻り、同様の処理を実行する。【０４６９】
全ての対象のカラムの値について処理が完了したと判定された場合、対応範囲ラベル情報生成部２１６４は、対応範囲ラベル情報生成処理を終了する。【０４７０】
以上が範囲検索処理／ソート処理の準備処理の説明である。【０４７１】
（３−３）範囲検索／ソート処理の詳細
次に、図３９、図４０、図４１、図４２、及び図４３を用いて、範囲検索処理／ソート処理の詳細を説明する。【０４７２】
図３９は、実施例３の範囲検索処理／ソート処理の流れを示すシーケンス図である。図４０は、実施例３の患者情報取得画面２１２１の一例を示す図である。図４１は、実施例３の患者情報表示画面２１２２の一例を示す図である。【０４７３】
ユーザ端末２、アプリケーションサーバ３、及びデータベースサーバ４は、連携して範囲検索処理／ソート処理を実行する。範囲検索処理／ソート処理は、ユーザ端末２がユーザからの入力を受け付けた場合に開始される。【０４７４】
まず、ユーザ端末２は、ユーザからの入力を受け付ける（ステップＳ６０１）。【０４７５】
例えば、ユーザは、図４０に示すような患者情報取得画面２１２１を用いて、対象のカラムの値の検索範囲、一画面に表示されるレコードの数（Ｌｉｍｉｔ数）、及び表示されるレコードの表示順番等を入力する。機微な情報を保存した医師が、任意の年齢層に含まれる患者のレコードを一画面中に、年齢の昇順に所定の数だけ表示する場合、ユーザ端末２を操作することが想定される。【０４７６】
ここで、患者情報取得画面２１２１について説明する。患者情報取得画面２１２１は、ブラウザ２１１によって表示装置２２０に表示される。【０４７７】
患者情報取得画面２１２１は、検索条件を入力するための複数の入力フォーム（Ｐ１１０１）、（Ｐ１１０２）、（Ｐ１１０３）、（Ｐ１１０４）、（Ｐ１１０５）、及び複数のラジオボタン（Ｐ１１０６）、（Ｐ１１０７）を含む。また、患者情報取得画面２１２１は、ＯＫボタン（Ｐ１１０８）及びキャンセルボタン（Ｐ１１０９）を含む。【０４７８】
入力フォーム（Ｐ１１０１）は、範囲検索処理の対象となる情報を入力するための入力フォームである。入力フォーム（Ｐ１１０２）は、範囲の下限値を入力するための入力フォームである。入力フォーム（Ｐ１１０３）は、範囲の上限値を入力するための入力フォームである。【０４７９】
入力フォーム（Ｐ１１０４）は、一画面に表示するレコードの数を入力するための入力フォームである。【０４８０】
入力フォーム（Ｐ１１０５）は、レコードのソート処理の対象のカラムを入力するための入力フォームである。ラジオボタン（Ｐ１１０６）は、入力フォーム（Ｐ１１０５）に入力されたカラムの値の昇順にレコードを並び替えるソート処理を選択するためのラジオボタンである。ラジオボタン（Ｐ１１０６）は、入力フォーム（Ｐ１１０５）に入力されたカラムの値の降順にレコードを並び替えるソート処理を選択するためのラジオボタンである。【０４８１】
ＯＫボタン（Ｐ１１０８）は、入力を確定するための操作ボタンである。キャンセルボタン（Ｐ１１０９）は、入力の確定をキャンセルするための操作ボタンである。【０４８２】
ユーザが、入力フォーム（Ｐ１１０１）、（Ｐ１１０２）、（Ｐ１１０３）にのみ値を入力し、ＯＫボタン（Ｐ１１０８）を押下した場合、検索された全てのレコードがランダムに配置された処理結果が出力される。また、ユーザが、入力フォーム（Ｐ１１０４）、（Ｐ１１０５）にのみ値を入力し、また、ラジオボタン（Ｐ１１０６）、（Ｐ１１０７）のいずれかを選択し、ＯＫボタン（Ｐ１１０８）を押下した場合、全ての範囲から検索されたレコードのうち、所定の数のレコードが指定された順番に並び替えられた処理結果が出力される。【０４８３】
以上が患者情報取得画面２１２１の説明である。図３９の説明に戻る。【０４８４】
次に、ユーザ端末２は、範囲ラベル候補情報を生成する（ステップＳ６０２）。具体的には、以下のような処理が実行される。【０４８５】
ユーザ側付加処理部２１６は、対応範囲情報２６２１の“対応範囲”カラムを参照し、患者情報取得画面２１２１を用いて指定された検索範囲と値の範囲が重複する区分群を特定する。【０４８６】
ユーザ側付加処理部２１６は、対応範囲情報２６２１から、特定された区分群に含まれる区分に対応するレコードの“範囲ラベル”カラム及び“頻度”カラムの値を読み出す。さらに、ユーザ側付加処理部２１６は、“範囲ラベル”カラム及び“頻度”カラムの値を対応付けたレコードを、指定された表示順にしたがって範囲ラベル候補情報に追加する。【０４８７】
なお、範囲ラベル候補情報は、メモリ２１０に一時的に格納される情報である。【０４８８】
例えば、ユーザ側付加情報群２６２に図２９に示す対応範囲情報２６２１が格納され、また、患者情報取得画面２１２１に図４０に示すような値が入力された場合、“年齢対応範囲”カラムが“２０−２９”及び“３０−３９”の区分群が特定される。この場合、ユーザ側付加処理部２１６は、最初に、“３００”及び“２”を対応付けたレコードを範囲ラベル候補情報に追加し、次に、“４００”及び“２”を対応付けたレコードを範囲ラベル候補情報に追加する。以上がステップＳ６０２の処理の説明である。【０４８９】
次に、ユーザ端末２は、変数として、Ｔ及び範囲ラベル＿ｎｏｗを設定する（ステップＳ６０３）。【０４９０】
具体的には、ユーザ側付加処理部２１６が、Ｔ及び範囲ラベル＿ｎｏｗを設定する。Ｔは、一画面中に表示されるレコードの数を示す変数である。範囲ラベル＿ｎｏｗは、範囲ラベル候補情報の一番上のレコードに含まれる範囲ラベルの値を示す変数である。【０４９１】
ステップＳ６０２において例示した範囲ラベル候補情報の場合、Ｔには“２”が設定され、範囲ラベル＿ｎｏｗには“３００”が設定される。【０４９２】
次に、ユーザ端末２は、データの取得要求を生成する（ステップＳ６０４）。具体的には、以下のような処理が実行される。【０４９３】
ユーザ側付加処理部２１６は、要求された情報を取得するために必要な操作の種別を特定する。ユーザ側付加処理部２１６は、対象の情報の名称を特定する。ユーザ側付加処理部２１６は、暗号一致判定処理に使用する検索クエリを格納する暗号化対応範囲情報４６２４を特定する。また、ユーザ側付加処理部２１６は、Ｔ及び範囲ラベル＿ｎｏｗ、並びに、範囲ラベル候補情報を範囲検索／ソートクエリ生成部２１６５に入力し、範囲検索／ソートクエリ生成処理の実行を指示する。【０４９４】
範囲検索／ソートクエリ生成部２１６５は、範囲検索／ソートクエリ生成処理を実行することによって範囲検索クエリ情報２１０３を生成する。例えば、Ｔが“２”、範囲ラベル＿ｎｏｗが“３００”であり、ステップＳ６０２において例示した範囲ラベル候補情報が入力された場合、図３０に示す範囲検索クエリ情報２１０３が生成される。なお、範囲検索／ソートクエリ生成処理の詳細は、図４２を用いて説明する。【０４９５】
範囲検索／ソートクエリ生成部２１６５は、範囲検索クエリ情報２１０３をユーザ側付加処理部２１６に送信する。【０４９６】
ユーザ側付加処理部２１６は、操作の種別、対象の情報の名称、暗号化対応範囲情報４６２４の識別情報、範囲検索クエリ情報２１０３、及び読出命令を含むデータの取得要求を生成し、アプリケーションサーバ３に送信する。以上がステップＳ６０４の処理の説明である。【０４９７】
次に、アプリケーションサーバ３は、暗号化データに対する範囲検索処理を実行するためのＳＱＬを生成する（ステップＳ６０５）。具体的には、以下のような処理が実行される。【０４９８】
アプリケーション部３１１は、データの取得要求を受信した場合、データの取得要求をＳＱＬ生成部３１２に送信する。【０４９９】
ＳＱＬ生成部３１２は、ＳＱＬ定義情報３６１を参照し、要求処理３６１２がデータの取得要求に含まれる操作の種別に一致するレコードを特定する。この場合、定義ＩＤ３６１１が“３”のレコードが特定される。【０５００】
ＳＱＬ生成部３１２は、データの取得要求に含まれる範囲検索の対象となる情報の名称及び範囲検索クエリ情報２１０３、並びに特定されたレコードのＳＱＬ定義３６１３に基づいて、ＳＱＬを生成する。ＳＱＬ生成部３１２は、生成されたＳＱＬをアプリケーション部３１１に送信する。【０５０１】
アプリケーション部３１１は、データベースインタフェース部３１３を介して、ＳＱＬをデータベースサーバ４に送信する。【０５０２】
図４０に示すような情報が入力された場合、ＳＱＬ生成部３１２は以下のようなＳＱＬ（Ｊ）を生成する。
ＳＱＬ（Ｊ）
SELECT 患者番号, 名前, 年齢 FROM 暗号化対応範囲情報
WHERE 暗号一致判定（年齢＿範囲ラベル, EncQuery(300)）＝‘true’；【０５０３】
ＳＱＬ（Ｊ）は、暗号一致判定部４１２に処理の実行を指示することによって、暗号化対応範囲情報４６２４から、“年齢＿範囲ラベル”カラムの値が検索クエリ“ＥｎｃＱｕｅｒｙ（３００）”に一致するレコードの“患者番号”カラム、“名前”カラム、及び“年齢”カラムの値を読み出すことを意味する。以上がステップＳ６０５の処理の説明である。【０５０４】
次に、データベースサーバ４は、アプリケーションサーバ３からＳＱＬを受信した場合、当該ＳＱＬにしたがって、範囲検索処理を実行する（ステップＳ６０６）。【０５０５】
具体的には、データベース制御部４１１は、受信したＳＱＬを実行し、実行結果を一時情報４１０３としてメモリ４１０に格納する。データベース制御部４１１は、一時情報４１０３を含む実行結果をアプリケーションサーバ３に送信する。ここで、受信したＳＱＬがＳＱＬ（Ｊ）である場合を例に説明する。【０５０６】
データベース制御部４１１は、ＳＱＬ（Ｊ）に基づいて、暗号一致判定部４１２を呼び出す。暗号一致判定部４１２は、検索クエリ及び暗号化対応範囲情報４６２４の“年齢＿範囲ラベル”カラムの値の暗号一致判定を行い、判定結果をデータベース制御部４１１に出力する。【０５０７】
データベース制御部４１１は、暗号一致判定部４１２から出力された判定結果に基づいて、範囲検索処理の条件に一致するレコードを特定する。データベース制御部４１１は、メモリ４１０に図３３に示す一時情報４１０３を格納する。【０５０８】
データベース制御部４１１は、一時情報４１０３を含む処理結果をアプリケーションサーバ３に送信する。以上がステップＳ６０６の処理の説明である。【０５０９】
次に、ユーザ端末２は、処理結果を受信した場合、当該処理結果を復号化する（ステップＳ６０７）。【０５１０】
具体的には、ユーザ側付加処理部２１６は、一時情報４１０３を含む処理結果を受信した場合、鍵管理部２１５から鍵情報を取得し、一時情報４１０３及び鍵情報を復号化部２１３に送信する。復号化部２１３は、鍵情報を用いて、一時情報４１０３に含まれるカラムの値を復号化することによって平文データを取得する。復号化部２１３は、平文データをユーザ側付加処理部２１６に送信する。【０５１１】
次に、ユーザ端末２は、結果表示処理を実行する（ステップＳ６０８）。【０５１２】
結果表示処理では、ユーザ端末２は、処理結果からユーザに要求されたレコードのみを抽出し、また、抽出されたレコードを指定された順番に並び替える。ユーザ端末２のブラウザ２１１は、並び替えられたレコードを含む処理結果を表示するための表示情報を生成し、当該表示情報に基づいて、図４１に示すような患者情報表示画面２１２２を表示装置２２０に表示する。なお、結果表示処理の詳細は、図４３を用いて説明する。【０５１３】
ここで、患者情報表示画面２１２２について説明する。患者情報表示画面２１２２は、ブラウザ２１１によって表示装置２２０に表示される。【０５１４】
患者情報表示画面２１２２は、検索結果の一覧（Ｐ１２０１）及び操作領域（Ｐ１２０２）を含む。また、患者情報表示画面２１２２は、ＯＫボタン（Ｐ１２０３）を含む。【０５１５】
図４１に示す検索結果の一覧（Ｐ１２０１）は、“患者番号”カラム、“名前”カラム、及び“年齢”カラムを含むレコードを複数含む。図４１に示す検索結果の一覧（Ｐ１２０１）では、レコード年齢の昇順に並び替えられた２つのレコードが表示される。【０５１６】
操作領域（Ｐ１２０２）は、まだ表示されていないレコードを表示するための操作領域である。ＯＫボタン（Ｐ１２０３）は、表示の終了を指示するための操作ボタンである。【０５１７】
以上が患者情報表示画面２１２２の説明である。また、以上が範囲検索処理／ソート処理の流れの説明である。【０５１８】
図４２は、実施例３の範囲検索／ソートクエリ生成部２１６５が実行する範囲検索／ソートクエリ生成処理を説明するフローチャートである。【０５１９】
範囲検索／ソートクエリ生成部２１６５は、ユーザ側付加処理部２１６から呼び出される以下で説明する範囲検索／ソートクエリ生成処理を開始する。なお、範囲検索／ソートクエリ生成部２１６５には、Ｔ及び範囲ラベル＿ｎｏｗ、並びに、範囲ラベル候補情報が入力される。【０５２０】
まず、範囲検索／ソートクエリ生成部２１６５は、変数として、Ｎ＿ｎｏｗ及び範囲ラベル＿ｎｅｘｔを初期化し、また、範囲検索クエリ情報２１０３を初期化する（ステップＦ７０１）。具体的には、以下のような処理が実行される。【０５２１】
範囲検索／ソートクエリ生成部２１６５は、Ｎ＿ｎｏｗに“０”を設定する。また、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル＿ｎｏｗ及び対応範囲情報２６２１を参照して、範囲ラベル＿ｎｏｗに設定された範囲ラベルの次の範囲ラベルが存在するか否かを判定する。範囲ラベル＿ｎｏｗに設定された範囲ラベルの次の範囲ラベルが存在する場合、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル＿ｎｅｘｔに次の範囲ラベルを設定する。範囲ラベル＿ｎｏｗに設定された範囲ラベルの次の範囲ラベルが存在しない場合、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル＿ｎｅｘｔに“ＮＵＬＬ”を設定する。【０５２２】
また、範囲検索／ソートクエリ生成部２１６５は、空の範囲検索クエリ情報２１０３を生成する。以上がステップＦ７０１の処理の説明である。【０５２３】
次に、範囲検索／ソートクエリ生成部２１６５は、Ｎ＿ｎｏｗを更新する（ステップＦ７０２）。【０５２４】
具体的には、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル＿ｎｏｗに対応する範囲ラベル候補情報のレコードの“頻度”カラムの値を、Ｎ＿ｎｏｗに加算する。【０５２５】
次に、範囲検索／ソートクエリ生成部２１６５は、Ｎ＿ｎｏｗがＴ以上であるか否かを判定する（ステップＦ７０３）。【０５２６】
Ｎ＿ｎｏｗがＴ以上であると判定された場合、範囲検索／ソートクエリ生成部２１６５は、ステップＦ７１０に進む。【０５２７】
Ｎ＿ｎｏｗがＴより小さいと判定された場合、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル＿ｎｅｘｔが“ＮＵＬＬ”であるか否かを判定する（ステップＦ７０４）。【０５２８】
範囲ラベル＿ｎｅｘｔが“ＮＵＬＬ”であると判定された場合、範囲検索／ソートクエリ生成部２１６５は、ステップＦ７１０に進む。【０５２９】
範囲ラベル＿ｎｅｘｔが“ＮＵＬＬ”ではないと判定された場合、範囲検索／ソートクエリ生成部２１６５は、範囲検索クエリ情報２１０３に範囲ラベル＿ｎｏｗの値を登録する（ステップＦ７０５）。【０５３０】
次に、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル＿ｎｅｘｔの値を範囲ラベル＿ｎｏｗに設定する（ステップＦ７０６）。【０５３１】
次に、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル候補情報に含まれる全ての範囲ラベルの検索クエリが生成されたか否かを判定する（ステップＦ７０７）。【０５３２】
範囲ラベル候補情報に含まれる全ての範囲ラベルの検索クエリが生成されていないと判定された場合、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル＿ｎｅｘｔを更新する（ステップＦ７０８）。その後、範囲検索／ソートクエリ生成部２１６５は、ステップＦ７０２に戻り、同様の処理を実行する。【０５３３】
具体的には、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル候補情報の中か選択されていない範囲ラベルを選択し、選択された範囲ラベルを範囲ラベル＿ｎｅｘｔに設定する。例えば、範囲ラベル＿ｎｏｗの次のレコードを選択する方法が考えられる。【０５３４】
範囲ラベル候補情報に含まれる全ての範囲ラベルの検索クエリが生成されと判定された場合、範囲検索／ソートクエリ生成部２１６５は、範囲ラベル＿ｎｅｘｔに“ＮＵＬＬ”を設定する（ステップＦ７０９）。その後、範囲検索／ソートクエリ生成部２１６５は、ステップＦ７０２に戻り、同様の処理を実行する。【０５３５】
ステップＦ７０３がＹＥＳ又はステップＦ７０４がＹＥＳである場合、範囲検索／ソートクエリ生成部２１６５は、範囲検索クエリ情報２１０３に登録された各範囲ラベルの検索クエリを生成する（ステップＦ７１０）。その後、範囲検索／ソートクエリ生成部２１６５は、処理を終了する。具体的には、以下のような処理が実行される。【０５３６】
範囲検索／ソートクエリ生成部２１６５は、鍵管理部２１５から鍵情報を取得し、範囲検索クエリ情報２１０３に登録された各範囲ラベル、及び鍵情報を暗号化検索クエリ生成部２１４に送信する。【０５３７】
暗号化検索クエリ生成部２１４は、鍵情報を用いて、各範囲ラベルを暗号化することによって検索クエリを生成し、当該検索クエリを範囲検索／ソートクエリ生成部２１６５に送信する。【０５３８】
範囲検索／ソートクエリ生成部２１６５は、範囲検索クエリ情報２１０３に登録される各範囲ラベルを、検索クエリに置換する。これによって、指定された表示件数以下のレコードを取得するための範囲検索クエリ情報２１０３が生成される。以上がステップＦ７１０の処理の説明である。【０５３９】
図４３は、実施例３のユーザ端末２が実行する結果表示処理の一例を説明するフローチャートである。【０５４０】
まず、ユーザ側付加処理部２１６は、処理結果に含まれるレコードの中から、検索範囲外のレコードを削除する（ステップＦ８０１）。具体的には、以下のような処理が実行される。【０５４１】
ユーザ側付加処理部２１６は、範囲外データ削除部２１６６を呼び出す。このとき、ユーザ側付加処理部２１６は、復号化された平文データ（レコード群）、並びに、対象カラムの検索範囲を示す上限値及び下限値を入力する。【０５４２】
範囲外データ削除部２１６６は、検索範囲に含まれないレコードを削除し、検索範囲内のレコードのみを含む処理結果をユーザ側付加処理部２１６に送信する。以上がステップＦ８０１の処理の説明である。【０５４３】
次に、ユーザ側付加処理部２１６は、処理結果に含まれるレコードに対して制限付きのソート処理を実行する（ステップＦ８０２）。具体的には、以下のような処理が実行される。【０５４４】
ユーザ側付加処理部２１６は、制限付きソート処理部２１６７を呼び出す。このとき、ユーザ側付加処理部２１６は、メモリ２１０に格納される処理結果、表示件数、及び表示順序を制限付きソート処理部２１６７に入力する。【０５４５】
制限付きソート処理部２１６７は、表示順序にしたがって、処理結果に含まれるレコードを並び替える。制限付きソート処理部２１６７は、レコードが並び替えられた処理結果から表示数だけレコードを読み出し、読み出されたレコードをユーザ側付加処理部２１６に送信する。以上がステップＦ８０２の処理の説明である。【０５４６】
次に、ユーザ側付加処理部２１６は、指定された表示件数分のレコードが読み出されたか否かを判定する（ステップＦ８０３）。【０５４７】
指定された表示件数分のレコードが読み出されていないと判定された場合、ユーザ側付加処理部２１６は、変数Ｔを更新する（ステップＦ８０４）。その後、ユーザ側付加処理部２１６は、ステップＳ６０４に戻り、同様の処理を実行する。【０５４８】
具体的には、ユーザ側付加処理部２１６は、指定された表示件数から読み出されたレコードの数を減算することによって算出された値をＴに設定する。【０５４９】
指定された表示件数分のレコードが読み出されたと判定された場合、ユーザ側付加処理部２１６は、処理結果を所定のデータ形式に整形することによって、結果表示情報を生成する（ステップＦ８０５）。【０５５０】
次に、ユーザ側付加処理部２１６は、結果表示情報をブラウザ２１１に送信する（ステップＦ８０６）。ブラウザ２１１は、結果表示情報に基づいて、患者情報表示画面２１２２を表示装置２２０に表示する。【０５５１】
次に、ユーザ側付加処理部２１６は、範囲ラベル候補情報に含まれる全ての範囲ラベルの検索クエリが生成されたか否かを判定する（ステップＦ８０７）。【０５５２】
範囲ラベル候補情報に含まれる全ての範囲ラベルの検索クエリが生成されていないと判定された場合、ユーザ側付加処理部２１６は、ステップＳ６０３に戻り、同様の処理を実行する。【０５５３】
範囲ラベル候補情報に含まれる全ての範囲ラベルの検索クエリが生成されたと判定された場合、ユーザ側付加処理部２１６は、結果表示処理を終了する。【０５５４】
以上が範囲検索／ソート処理の説明である。【０５５５】
（３−４）実施例３の効果
以上に説明したように、実施例３の秘匿化データベースシステム１では、対応範囲情報２６２１、暗号化対応範囲情報４６２６、及びＳＱＬ定義情報３６１に基づいて、任意のカラムの値の範囲を含む検索条件を受け付けた場合、暗号化された情報が復号化されることなく、指定された範囲に含まれる情報を含む検索結果がユーザ端末２に送信される。したがって、データの秘匿性を維持しつつ、任意のテーブルから指定された範囲に含まれるレコードを取得するデータベース操作命令を実行可能な秘匿化データベースシステムを実現することができる。【０５５６】
また、実施例３の秘匿化データベースシステム１では、対応範囲情報２６２１、暗号化対応範囲情報４６２６、及びＳＱＬ定義情報３６１に基づいて、所定数のレコードを処理結果がユーザ端末２に送信され、また、所定の順番に並び替えられたレコードが表示される。したがって、データの秘匿性を維持しつつ、所定のテーブルから、指定された順番にソートされた所定の数のレコードを取得するデータベース操作命令を実行可能な秘匿化データベースシステムを実現することができる。【０５５７】
なお、実施例１及び実施例２の秘匿化データベースシステム１にもソート処理を実現するための構成を追加してもよい。【０５５８】
実施例１から実施例３で示したように、本発明の秘匿化データベースシステム１は、以下のような流れでデータ加工を伴うデータの取得要求の処理を実現する。【０５５９】
ユーザ端末２は、平文データを含むデータの取得要求を受け付けた場合、ユーザ側付加情報群２６２を用いて暗号化データを含むデータの取得要求に変換する。また、ユーザ端末２は、ユーザ内部ネットワーク５及び外部ネットワークを介して、クラウド側のアプリケーションサーバ３に暗号化データを処理するための処理命令を送信する。【０５６０】
アプリケーションサーバ３は、暗号化データを含むデータの取得要求をＳＱＬ定義情報３６１に基づいて、暗号化データに対する操作を含むＳＱＬを生成し、データベースサーバ４に送信する。【０５６１】
データベースサーバ４は、アプリケーションサーバ３からＳＱＬを受信した場合、当該ＳＱＬ及びデータベース側付加情報群４６２に基づいて、暗号化データの取得処理を実行する。データベースサーバ４は、アプリケーションサーバ３を介して、取得された暗号化データを含む処理結果をユーザ端末２に送信する。【０５６２】
ユーザ端末２は、暗号化データを含む処理結果を復号化し、所定の処理を実行することによって、所望する平文データを取得する。【０５６３】
前述したようにクラウド上のアプリケーションサーバ３及びデータベースサーバ４には平文データが送信されないため、データの秘匿性を維持しつつ、ユーザ端末２は、結合情報取得処理の処理結果、部分一致検索の処理結果、範囲検索の処理結果、及びソート処理の処理結果を取得できる。【０５６４】
実施例１から実施例３では、アプリケーションサーバ３及びデータベースサーバ４は、別々の装置であるが、１つの装置に機能をまとめてもよい。【０５６５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。【０５６６】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるＣＰＵが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。【０５６７】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ等の広範囲のプログラム又はスクリプト言語で実装できる。【０５６８】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるＣＰＵが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。【０５６９】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【図１】
2017168535.tif 000003
【図２】
2017168535.tif 000004
【図３】
2017168535.tif 000005
【図４】
2017168535.tif 000006
【図５】
2017168535.tif 000007
【図６】
2017168535.tif 000008
【図７】
2017168535.tif 000009
【図８】
2017168535.tif 000010
【図９】
2017168535.tif 000011
【図１０】
2017168535.tif 000012
【図１１】
2017168535.tif 000013
【図１２】
2017168535.tif 000014
【図１３】
2017168535.tif 000015
【図１４】
2017168535.tif 000016
【図１５】
2017168535.tif 000017
【図１６】
2017168535.tif 000018
【図１７】
2017168535.tif 000019
【図１８】
2017168535.tif 000020
【図１９】
2017168535.tif 000021
【図２０】
2017168535.tif 000022
【図２１】
2017168535.tif 000023
【図２２】
2017168535.tif 000024
【図２３】
2017168535.tif 000025
【図２４】
2017168535.tif 000026
【図２５】
2017168535.tif 000027
【図２６】
2017168535.tif 000028
【図２７】
2017168535.tif 000029
【図２８】
2017168535.tif 000030
【図２９】
2017168535.tif 000031
【図３０】
2017168535.tif 000032
【図３１】
2017168535.tif 000033
【図３２】
2017168535.tif 000034
【図３３】
2017168535.tif 000035
【図３４】
2017168535.tif 000036
【図３５】
2017168535.tif 000037
【図３６】
2017168535.tif 000038
【図３７】
2017168535.tif 000039
【図３８】
2017168535.tif 000040
【図３９】
2017168535.tif 000041
【図４０】
2017168535.tif 000042
【図４１】
2017168535.tif 000043
【図４２】
2017168535.tif 000044
【図４３】
2017168535.tif 000045
【国際調査報告】
2017168535.tif 000046
2017168535.tif 000047
2017168535.tif 000048
2017168535.tif 000049