(57)【要約】      （修正有）【課題】第１平文と第２平文のそれぞれの暗号化データから第１平文と第２平文の大小関係を判定するデータ比較装置を提供する。【解決手段】データ比較装置は、第１平文が暗号化された第１暗号化データと、第２平文が暗号化された第２暗号化データと、を保持する。第１暗号化データは、複数のブロックに分割された第１平文について、複数のブロックごとの暗号化と、複数のブロックのシャッフルと、が実行されて生成される。第２暗号化データは、複数のブロックに分割された第２平文について、複数のブロックごとの暗号化が実行されて生成される。第１暗号化データ及び第２暗号化データの少なくとも一方に、平文の値が大小比較結果を示す値として埋め込まれ、データ比較装置は、埋め込まれた値に基づいて、第１暗号化データと第２暗号化データのシャッフル前の同一位置のブロックを比較して、第１平文と第２平文との大小関係を判定する。【選択図】図１１
2020204731.tif 000002
【特許請求の範囲】
【請求項１】
データ比較装置であって、
プロセッサとメモリとを有し、
前記メモリは、第１平文が暗号化された第１暗号化データと、第２平文が暗号化された第２暗号化データと、を保持し、
前記第１暗号化データは、複数のブロックに分割された前記第１平文について、前記複数のブロックごとの暗号化と、前記複数のブロックのシャッフルと、を含む処理が実行されて生成されたデータであり、
前記第２暗号化データは、前記複数のブロックに分割された前記第２平文について、前記複数のブロックごとの暗号化、を含む処理が実行されて生成されたデータであり、
前記第１暗号化データ及び前記第２暗号化データの少なくとも一方に、前記少なくとも一方の平文の値が大小比較結果を示す値として埋め込まれ、
前記プロセッサは、
前記埋め込まれた前記少なくとも一方の平文の値に基づいて、前記第１暗号化データと前記第２暗号化データのシャッフル前の同一位置のブロックを比較して、前記第１平文と前記第２平文との大小関係を判定する、データ比較装置。
【請求項２】
請求項１に記載のデータ比較装置であって、
前記第１暗号化データ又は前記第２暗号化データの少なくとも一方における、前記複数のブロックごとの暗号化において、当該一方の平文の各ブロックの値が異なる値に変換される、データ比較装置。
【請求項３】
請求項２に記載のデータ比較装置であって、
前記第１平文及び前記第２平文は、ビット列であり、
前記第１暗号化データは、
１ビットごとに分割された前記第１平文について、
各ビットの値に対して、当該ビットの値、当該ビットより上位のビットの値、及び秘密鍵が第１関数に入力された値が取得され、前記取得された値と乱数とが第２関数に入力されて得られた値に、前記第１平文における当該ビットの値が埋め込まれる、暗号化と、
前記第１平文の１ビット単位でのシャッフルと、を含む処理が実行されて生成されたデータであり、
前記第１暗号化データは、前記乱数を含み、
前記第２暗号化データは、
１ビットごとに分割された前記第２平文について、
各ビットの値に対して、当該ビットを反転させた値と、当該ビットより上位のビットの値と、前記秘密鍵と、が前記第１関数に入力される暗号化、を含む処理が実行されて生成されたデータである、データ比較装置。
【請求項４】
請求項３に記載のデータ比較装置であって、
前記プロセッサは、
前記第１暗号化データから前記乱数を取得し、
前記第２暗号化データのビットに対して、
当該ビットと前記乱数とを前記第２関数に入力して得た値と、前記第１暗号化データのシャッフル前の同一位置のビットと、の排他的論理和を算出し、
前記算出した排他的論理和に基づいて、前記第１平文と前記第２平文との大小関係を判定する、データ比較装置。
【請求項５】
請求項４に記載のデータ比較装置であって、
前記プロセッサは、
前記算出した排他的論理和が１であれば、第１平文が第２平文より大きいと判定し、
前記算出した排他的論理和が０であれば、第１平文が第２平文より小さいと判定し、
前記算出した排他的論理和が乱数である場合、前記第１平文と前記第２平文が等しいと判定する、データ比較装置。
【請求項６】
請求項２に記載のデータ比較装置であって、
前記第１平文及び前記第２平文は、ｐ進数の数値列であり、
ｐは３以上の整数であり、
前記第１暗号化データは、
所定数桁ごとに分割された前記第１平文について、
各桁の値に対して、当該桁の値、当該桁より上位の桁の値、及び秘密鍵が第１関数に入力された値が取得され、前記取得された値と第１乱数とが第２関数に入力される、暗号化と、
前記第１平文の前記所定数桁単位でのシャッフルと、を含む処理が実行されて生成されたデータであり、
前記第１暗号化データは、前記第１乱数を含み、
前記第２暗号化データは、
前記所定数桁ごとに分割された前記第２平文について、
各桁の値に対して、当該桁の値、当該桁より上位の桁の値、及び前記秘密鍵が前記第１関数に入力される又は新たに生成された乱数を当該桁の値とされる暗号化、を含む処理が実行されて生成されたデータである、データ比較装置。
【請求項７】
請求項６に記載のデータ比較装置であって、
前記プロセッサは、
前記第１暗号化データから前記第１乱数を取得し、
前記第２暗号化データのビットに対して、
当該ビットと前記乱数とを前記第２関数に入力して得た値と、前記第１暗号化データのシャッフル前の同一の桁と、の排他的論理和を算出し、
前記算出した排他的論理和に基づいて、前記第１平文と前記第２平文との大小関係を判定する、データ比較装置。
【請求項８】
データ比較システムであって、
データ比較装置と、第１平文を暗号化する第１暗号化データ生成装置と、第２平文を暗号化する第２暗号化データ生成装置と、を含み、
前記第１暗号化データ生成装置は、
前記第１平文を複数のブロックに分割し、
前記複数のブロックごとの前記第１平文の暗号化と、前記複数のブロックのシャッフルと、を含む処理を実行して第１暗号化データを生成し、
前記第２暗号化データ生成装置は、
前記第２平文を前記複数のブロックに分割し、
前記複数のブロックごとの前記第２平文の暗号化を含む処理を実行して第２暗号化データを生成し、
前記第１暗号化データ生成装置が、前記第１暗号化データの生成において前記第１平文の値を、大小比較結果を示す値として埋め込む処理と、
前記第２暗号化データ生成装置が、前記第２暗号化データの生成において前記第２平文の値を、大小比較結果を示す値として埋め込む処理と、の少なくとも一方が実行され、
前記第１暗号化データを、前記データ比較装置に送信し、
前記第２暗号化データを、前記データ比較装置に送信し、
前記データ比較装置は、
前記埋め込まれた前記少なくとも一方の平文の値に基づいて、前記第１暗号化データと前記第２暗号化データのシャッフル前の同一位置のブロックを比較して、前記大小比較結果を示す値に基づいて前記第１平文と前記第２平文との大小関係を判定する、データ比較システム。
【請求項９】
データ比較装置によるデータ比較方法であって、
前記データ比較装置は、プロセッサとメモリとを有し、
前記メモリは、第１平文が暗号化された第１暗号化データと、第２平文が暗号化された第２暗号化データと、を保持し、
前記第１暗号化データは、複数のブロックに分割された前記第１平文について、前記複数のブロックごとの暗号化と、前記複数のブロックのシャッフルと、を含む処理が実行されて生成されたデータであり、
前記第２暗号化データは、前記複数のブロックに分割された前記第２平文について、前記複数のブロックごとの暗号化、を含む処理が実行されて生成されたデータであり、
前記第１暗号化データ及び前記第２暗号化データの少なくとも一方に、前記少なくとも一方の平文の値が大小比較結果を示す値として埋め込まれ、
前記データ比較方法は、
前記プロセッサが、前記埋め込まれた前記少なくとも一方の平文の値に基づいて、前記第１暗号化データと前記第２暗号化データのシャッフル前の同一位置のブロックを比較して、前記第１平文と前記第２平文との大小関係を判定する、データ比較方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ比較装置、データ比較システム、及びデータ比較方法に関する
【背景技術】
【０００２】
本技術分野の背景技術として、特願２０１５−５４１４５０号公報（特許文献１）がある。この公報には、「本発明の装置は、暗号化された数値の大小比較をすることができると共に、隠匿性を維持して情報の漏洩する機会を大幅に減らす暗号文生成装置である。この暗号文生成装置は、主鍵と文書とに基づいて、導出鍵を生成する導出鍵生成部と、主鍵と文書と導出鍵とに基づいて、補助導出鍵を生成する補助導出鍵生成部と、文書の識別子と導出鍵と補助導出鍵とに基づいて、識別子を暗号化した識別子別暗号文を生成する識別子別暗号文生成部と、識別子記導出鍵とに基づいて、主鍵と文書と導出鍵とから生成された相対値を暗号化した相対値暗号文を生成する相対値暗号文生成部と、を備え、識別子別暗号文と相対値暗号文とを含む文字列を文書に対する暗号文とする。」と記載されている（要約参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１５／０５２９５７号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載の技術は、データを暗号化し、暗号化データを復号することなく大小比較結果を判定する。しかしながら、特許文献１に記載の技術では、暗号化データ同士の大小比較の判定結果から、暗号化データ同士の類似性が判明するおそれがある。
【０００５】
例えば、特許文献１に記載の技術によって、数字３と数字４と数字６を暗号化して比較した場合に、３＜４＜６という判定結果の他に、３と４は、４と６より近いという類似性が判明する。類似性が判明するということは、大小比較の判定結果以外の過分な情報漏洩が起きていることを意味する。これにより、最終的には暗号化データの不正解読が可能となるおそれがある。
【０００６】
そこで、本発明の一態様は、暗号化データの不正解読を防止しつつ、暗号化データを比較することを目的とする。
【課題を解決するための手段】
【０００７】
上述の課題を解決するため、本発明の一態様は以下の構成を採用する。データ比較装置は、プロセッサとメモリとを有し、前記メモリは、第１平文が暗号化された第１暗号化データと、前記第１平文との大小比較の判定対象の第２平文が暗号化された第２暗号化データと、を保持し、前記第１暗号化データは、複数のブロックに分割された前記第１平文について、前記複数のブロックごとの暗号化と、前記複数のブロックのシャッフルと、を含む処理が実行されて生成されたデータであり、前記第２暗号化データは、前記複数のブロックに分割された前記第２平文について、前記複数のブロックごとの暗号化、を含む処理が実行されて生成されたデータであり、前記第１暗号化データ及び前記第２暗号化データの少なくとも一方に、前記少なくとも一方の平文の値が大小比較結果を示す値として埋め込まれ、前記プロセッサは、前記埋め込まれた前記少なくとも一方の平文の値に基づいて、前記第１暗号化データと前記第２暗号化データのシャッフル前の同一位置のブロックを比較して、前記第１平文と前記第２平文との大小関係を判定する。
【発明の効果】
【０００８】
本発明の一態様によれば、暗号化データの不正解読を防止しつつ、暗号化データを比較することができる。
【０００９】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】実施例１における暗号化データ比較システムの構成の概略の一例を示すブロック図である。
【図２Ａ】実施例１における医療機関が登録機に登録した診療データの一覧の一例である。
【図２Ｂ】実施例１における管理機内で保管される暗号化された診療データの一覧の一例である。
【図２Ｃ】実施例１における管理機内で抽出された暗号化された診療データの一例である。
【図２Ｄ】実施例１における閲覧機内で復号された診療データの一例である。
【図３Ａ】実施例１における登録機、閲覧機、管理機、及び鍵配布機それぞれを実現する計算機のハードウェア構成例を示すブロック図である。
【図３Ｂ】実施例１における登録機の機能構成例を示すブロック図である。
【図３Ｃ】実施例１における閲覧機の機能構成例を示すブロック図である。
【図３Ｄ】実施例１における管理機の機能構成例を示すブロック図である。
【図３Ｅ】実施例１における鍵配布機の機能構成例を示すブロック図である。
【図４】実施例１におけるデータ登録処理の一例を示すシーケンス図である。
【図５】実施例１におけるデータ比較処理の一例を示すシーケンス図である。
【図６】実施例１における暗号化データ生成処理の一例を示すフローチャートである。
【図７】実施例１における暗号化データ生成処理の具体例を示す説明図である。
【図８】実施例１における暗号化クエリ生成処理の一例を示すフローチャートである。
【図９】実施例１における暗号化クエリ生成処理の具体例を示す説明図である。
【図１０】実施例１における暗号化データと暗号化クエリの比較処理の一例を示すフローチャートである。
【図１１】実施例１における暗号化データと暗号化クエリの比較処理の具体例を示す説明図である。
【図１２】実施例２における暗号化データ生成処理の一例を示すフローチャートである。
【図１３】実施例２における暗号化データ生成処理の具体例を示す説明図である。
【図１４】実施例２における暗号化クエリ生成処理の一例を示すフローチャートである。
【図１５】実施例２における暗号化クエリ生成処理の具体例を示すフローチャートである。
【図１６】実施例２における暗号化データと暗号化クエリとの比較処理の一例を示すフローチャートである。
【図１７】実施例２における暗号化データと暗号化クエリとの比較処理の具体例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、これにより本発明が限定されるものではない。実施の形態において、同一の部材には原則として同一の符号を付け、繰り返しの説明は省略する。まず、本実施形態で使用する用語を定義する。
【００１２】
（１）ハッシュ関数
任意長の入力されたデータから固定長のデータを出力する圧縮関数である。出力されたデータをハッシュ値と呼ぶ。特に、本実施形態では、出力されたデータから入力されたデータを求める不可逆性、かつ同じハッシュ値を持つ任意の入力データを見つけることが困難な衝突困難性、を有する暗号学的ハッシュ関数が用られる。ＳＨＡ−２５６、ＳＨＡ−３などは、いずれもこのようなハッシュ関数の一例である。
【００１３】
（２）秘密鍵
本実施形態では、ハッシュ関数に入力する秘密鍵と、シャッフルのための置換用の秘密鍵、及び暗号化データ復号用の秘密鍵が用いられる。以下、ハッシュ関数に入力する秘密鍵をｈｋ（ｈａｓｈ  ｋｅｙ）、置換用の秘密鍵をｓｋ（ｓｈｕｆｆｕｌｅ  ｋｅｙ）、復号用の秘密鍵をｄｋ（ｄｅｃｒｙｐｔｉｏｎ  ｋｅｙ）と表記する。
【００１４】
（３）データ
暗号化対象のデータを平文データまたは単にデータとも呼ぶ。暗号化後は、暗号化データとも呼ぶ。
【００１５】
（４）クエリ
本実施形態では、データとの比較対象をクエリとも呼ぶ。暗号化前のクエリを平文クエリまたは単にクエリとも呼ぶ。暗号化後は、暗号化クエリとも呼ぶ。
【００１６】
（５）排他的論理和
二つのビットの排他的論理和をｘｏｒと書く。ビット値は０または１であるので、ビット値に対する排他的論理和は、０  ｘｏｒ  ０＝０、０  ｘｏｒ  １＝１、１  ｘｏｒ  ０＝１、１  ｘｏｒ  １＝０、のいずれかである。本実施形態では、この排他的論理和をｘｏｒ算とも呼ぶ。
【００１７】
（６）剰余加算
２つの整数を加算し、整数ｐで割った余りを求める計算をｍｏｄ  ｐと書く。例えば、０以上３未満の整数は０、１、２のいずれかであるので、ｐが３の時、０＋０  ｍｏｄ  ３＝０、０＋１  ｍｏｄ  ３＝１、０＋２  ｍｏｄ  ３＝２、１＋０  ｍｏｄ  ３＝１、１＋１  ｍｏｄ  ３＝２、１＋２  ｍｏｄ  ３＝０、２＋０  ｍｏｄ  ３＝２、２＋１  ｍｏｄ  ３＝０、２＋２  ｍｏｄ  ３＝１のいずれかの計算を行う。本実施形態では、この剰余加算をｍｏｄ算とも呼ぶ。
【実施例１】
【００１８】
図１は、暗号化データ比較システムの構成の概略の一例を示すブロック図である。暗号化データ比較システムは例えば、鍵管理局が所有する鍵配布機４００、例えば、１以上の事業主体Ａ（１〜ｎ）それぞれが所有する登録機１００と、事業主体Ｂが所有する管理機３００と、事業主体Ｃが所有する閲覧機２００と、を含み、各装置が互いにインターネット等のネットワーク６００を介して接続されている。
【００１９】
本実施例の健康診断事業への適用例を説明する。以下、事業主体Ａ（１〜ｎ）が「医療機関」、事業主体Ｂが「クラウドサービス提供者」、事業主体Ｃが「医療研究者」であると想定する。
【００２０】
医療研究者は、自社の情報システムをクラウドサービス提供者の管理機３００に預託する運用をしている。故に、医療機関から取得する診療データが、管理機３００に預託されている。診療データは医療機関が有する個人情報であるため、他者に漏洩しないよう慎重に取り扱われる必要がある。診療データの詳細は、図２Ａを用いて後述する。
【００２１】
そのため、登録機１００は、入力された診療データにおいて医療機関によって指定された項目のデータを、鍵管理局の鍵配布機４００が発行する暗号化鍵で暗号化した上で、クラウドサービス提供者の管理機３００に預託する。すなわち、クラウドサービス提供者には、診療データにおいて暗号化された項目の内容が開示されない。
【００２２】
医療研究者は診療データを必要としているので、診療データを格納するクラウドサービス提供者に診療データを要求する。詳細は、図２Ｄを用いて後述する。クラウドサービス提供者の管理機３００は、診療データを暗号化した状態で管理する。暗号化された診療データの詳細は、図２Ｂを用いて後述する。クラウドサービス提供者の管理機３００は、暗号化データを比較し、その比較結果に基づいた暗号化データを抽出する。抽出された暗号化データの詳細は、図２Ｃを用いて後述する。
【００２３】
図２Ａ〜図２Ｄは、本実施例で取り扱われるデータの具体例である。図２Ａは医療機関が登録機１００に登録した診療データの一覧の一例である。図２Ｂは管理機３００内で保管される暗号化された診療データの一覧の一例である。図２Ｃは管理機３００内で抽出された暗号化された診療データの一例である。図２Ｄは閲覧機２００内で復号された診療データの一例である。
【００２４】
図２Ａの各行のデータを「個々の診療データ」とも呼ぶ。鍵管理局の鍵配布機４００は、指定された項目毎に暗号化鍵を発行し、医療機関の登録機１００は、発行された暗号化鍵を用いて個々の診療データを暗号化する。
【００２５】
図２Ｂの各行のデータを「暗号化された個々の診療データ」とも呼ぶ。Ｅ（ｘ）はある値ｘが暗号化された値を示す。図２Ｃは、指定された項目において、比較判定により抽出された診療データの一部である。この例では、比較判定によって生年月日が１９８０年以降又は入院日数が２０日以上のレコードが選択され、当該レコードの疾病コード、生年月日、医療機関コード、及び入院日数が抽出された。
【００２６】
図２Ｄは、図２Ｃの抽出結果を復号したデータである。このデータは医療研究者に提供され、閲覧機２００を用いて閲覧することができる。なお、上記の診療データはあくまで一例である。必要に応じて複数の暗号文を組み合わせてよい。例えば、項目ごとにブロック暗号、検索可能暗号、及び公開鍵暗号等の異なる方式で暗号化されてもよい。
【００２７】
図３Ａは、登録機１００、閲覧機２００、管理機３００、及び鍵配布機４００それぞれを実現する計算機のハードウェア構成例を示すブロック図である。計算機５００は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５０１、メモリ５０２、補助記憶装置５０３、通信装置５０４、入力装置５０５、出力装置５０６、及び読み書き装置５０７を有し、これらが互いにバス等の内部通信線で接続されている。
【００２８】
ＣＰＵ５０１はプロセッサを含み、プロセッサがメモリ５０２に格納されたプログラムを実行する。メモリ５０２は、不揮発性の記憶素子であるＲＯＭ及び揮発性の記憶素子であるＲＡＭを含む。ＲＯＭは、不変のプログラム（例えば、ＢＩＯＳ）などを格納する。ＲＡＭは、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような高速かつ揮発性の記憶素子であり、ＣＰＵ５０１が実行するプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。
【００２９】
補助記憶装置５０３は、例えば、磁気記憶装置（ＨＤＤ）、フラッシュメモリ（ＳＳＤ）等の大容量かつ不揮発性の記憶装置であり、ＣＰＵ５０１が実行するプログラム及びプログラムの実行時に使用されるデータを格納する。すなわち、プログラムは、補助記憶装置５０３から読み出されて、メモリ５０２にロードされて、ＣＰＵ５０１によって実行される。
【００３０】
入力装置５０５は、キーボードやマウスなどの、オペレータからの入力を受ける装置である。出力装置５０６は、ディスプレイ装置やプリンタなどの、プログラムの実行結果をオペレータが視認可能な形式で出力する装置である。
【００３１】
通信装置５０４は、所定のプロトコルに従って、他の装置との通信を制御するネットワークインターフェース装置である。また、通信インターフェース１０４は、例えば、ＵＳＢ等のシリアルインターフェースを含む。
【００３２】
読み書き装置５０７は、リムーバブルメディア（ＣＤ−ＲＯＭ、フラッシュメモリなど）からデータを読み込み、またリムーバブルメディアにデータを書き込む。ＣＰＵ５０１が実行するプログラムは、リムーバブルメディア又はネットワーク６００を介して計算機５００に提供され、非一時的記憶媒体である不揮発性の補助記憶装置５０３に格納される。
【００３３】
登録機１００、閲覧機２００、管理機３００、及び鍵配布機４００は、それぞれ、物理的に一つの計算機５００上で、又は、論理的又は物理的に構成された複数の計算機５００上で構成される計算機システムであり、同一の計算機５００上で別個のスレッドで動作してもよく、複数の物理的計算機資源上に構築された仮想計算機上で動作してもよい。
【００３４】
なお、本実施形態において、暗号化データ比較判定システムが使用する情報は、データ構造に依存せずどのようなデータ構造で表現されていてもよい。例えば、テーブル、リスト、データベース又はキューから適切に選択したデータ構造体が、情報を格納することができる。
【００３５】
図３Ｂは、登録機１００の機能構成例を示すブロック図である。登録機１００は、例えば、暗号化鍵管理部１０１及び暗号化データ生成部１０２を含む。暗号化鍵管理部１０１及び暗号化データ生成部１０２は、登録機１００のＣＰＵ５０１のプロセッサに含まれる。
【００３６】
プロセッサは、メモリ５０２にロードされた暗号化鍵管理プログラムに従って動作することで、暗号化鍵管理部１０１として機能し、メモリ５０２にロードされた暗号化データ生成プログラムに従って動作することで、暗号化データ生成部１０２として機能する。暗号化データ比較システムに含まれる他の装置の機能部と、プロセッサと、の関係も同様である。暗号化鍵管理部１０１は、データを暗号化するための暗号化鍵を管理する。暗号化データ生成部１０２は、平文のデータから暗号化データを生成する。
【００３７】
登録機１００は、例えば、診療データ１１１及び暗号化鍵データベース１１２を保持する。診療データ１１１及び暗号化鍵データベース１１２は、登録機１００のメモリ５０２及び／又は補助記憶装置５０３に格納されている。診療データ１１１は、暗号化対象の平文のデータを含む。暗号化鍵データベース１１２は、鍵配布機４００から受信した暗号化鍵を保持する。
【００３８】
図３Ｃは、閲覧機２００の機能構成例を示すブロック図である。閲覧機２００は、例えば、暗号化鍵管理部２０１、暗号化クエリ生成部２０２、及び復号処理部２０３を含む。暗号化鍵管理部２０１、暗号化クエリ生成部２０２、及び復号処理部２０３は、閲覧機２００のＣＰＵ５０１のプロセッサに含まれる。
【００３９】
暗号化鍵管理部２０１は、暗号化鍵を管理する。暗号化クエリ生成部２０２は、暗号化データと比較するための暗号化クエリを生成する。復号処理部２０３は、管理機３００から受信した暗号化データと暗号化クエリとの比較結果を示す暗号文を復号する。
【００４０】
閲覧機２００は、例えば、暗号化鍵データベース２１１を保持する。暗号化鍵データベース２１１は、閲覧機２００のメモリ５０２及び／又は補助記憶装置５０３に格納されている。暗号化鍵データベース２１１は、鍵配布機４００から受信した暗号化鍵を保持する。
【００４１】
図３Ｄは、管理機３００の機能構成例を示すブロック図である。管理機３００は、例えば、暗号文管理部３０１及びデータ比較部３０２を含む。暗号文管理部３０１及びデータ比較部３０２は、管理機３００のＣＰＵ５０１のプロセッサに含まれる。暗号文管理部３０１は、登録機１００から受信した暗号化データを管理する。データ比較部３０２は、登録機１００から受信した暗号化データと、閲覧機２００から受信した暗号化クエリと、を比較する。
【００４２】
管理機３００は、例えば暗号文データベース３１１を保持する。暗号文データベース３１１は、管理機３００のメモリ５０２及び／又は補助記憶装置５０３に格納されている。暗号文データベース３１１は、登録機１００から受信した暗号化データを保持する。
【００４３】
図３Ｅは、鍵配布機４００の機能構成例を示すブロック図である。鍵配布機４００は、例えば、暗号化鍵管理部４０１を含む。暗号化鍵管理部４０１は、鍵配布機４００のＣＰＵ５０１のプロセッサに含まれる。暗号化鍵管理部４０１は、暗号化データ生成処理、暗号化クエリ生成処理、及び暗号化データと暗号化クエリとの比較処理に用いられる暗号化鍵を管理する。
【００４４】
鍵配布機４００は、暗号化鍵データベース４１１を保持する。暗号化鍵データベース４１１は、鍵配布機４００のメモリ５０２及び／又は補助記憶装置５０３に格納されている。暗号化鍵データベース４１１は、暗号化鍵を保持する。
以下、暗号化データ比較判定システムによる処理の一例を説明する。当該処理は、データ登録処理と、データ比較判定処理と、を含む。
【００４５】
図４は、データ登録処理の一例を示すシーケンス図である。登録機１００の暗号化鍵管理部１０１は、鍵配布機４００に対して暗号化鍵の送信を要求する（Ｓ１１０）。鍵配布機４００の暗号化鍵管理部４０１は、暗号化鍵データベース４１１に格納された暗号化鍵を登録機１００に送付し、登録機１００の暗号化鍵管理部１０１は受信した暗号化鍵を暗号化鍵データベース１１２に格納する（Ｓ４１０）。
【００４６】
登録機１００の暗号化データ生成部１０２は、暗号化する診療データ１１１の項目を指定する（Ｓ１２０）。具体的には、例えば、暗号化データ生成部１０２は、登録機１００のユーザの入力に従って、項目を指定する。前述した図２Ａの例では、暗号化データ生成部１０２は、例えば「生年月日」や「入院日数」等の項目を指定する。
【００４７】
登録機１００の暗号化データ生成部１０２は、ステップＳ１１０で送付された暗号化鍵を用いて、暗号化データを生成する（Ｓ１３０）。暗号化データ生成処理の詳細は、図６と図７を用いて後述する。
【００４８】
暗号化データ生成部１０２は、ステップＳ１３０で生成した暗号化データを管理機３００に送付する（Ｓ１４０）。管理機３００の暗号文管理部３０１は、ステップＳ１４０で送付された暗号文を暗号文データベース３１１に登録する（Ｓ３１０）。暗号文管理部３０１は、ステップＳ３１０における登録処理の結果を登録機１００に送付する（Ｓ３２０）。
【００４９】
なお、上述の処理手順はあくまで一例であり、必要に応じて処理順序や処理内容が変更されてもよい。例えば、登録機１００と鍵配布機４００が同一の主体に属している場合には、鍵配布機４００が登録機１００に暗号化鍵を送付することなく、登録機１００が予め暗号化鍵を有している等、一部の処理を省いてもよい。
【００５０】
図５は、データ比較処理の一例を示すシーケンス図である。閲覧機２００の暗号化鍵管理部２０１は、鍵配布機４００に対して暗号化鍵を要求する（Ｓ２１０）。鍵配布機４００の暗号化鍵管理部４０１は、暗号化鍵データベース４１１に格納された暗号化鍵を閲覧機２００に送付し、閲覧機２００の暗号化鍵管理部２０１は受信した暗号化鍵を暗号化鍵データベース２１１に格納する（Ｓ４６０）。
【００５１】
閲覧機２００の暗号化クエリ生成部２０２は、暗号化された診療データの範囲及び／又は項目を指定する（Ｓ２２０）。具体的には、例えば、暗号化クエリ生成部２０２は、閲覧機２００のユーザの入力に従って、範囲及び／又は項目を指定する。前述した図２Ａの例では、暗号化クエリ生成部２０２は、例えば「生年月日」や「入院日数」等の項目を指定する。また、暗号化クエリ生成部２０２は、例えば、入院日数が「２０日以上」や、生年月日が「１９７０年以降」のように、値の範囲を指定する。
【００５２】
暗号化クエリ生成部２０２は、ステップＳ２２０で指定された項目と範囲を要求するデータを作成し、ステップＳ４６０で送付された暗号化鍵を用いてこれを暗号化する（Ｓ２３０）。暗号化クエリ生成処理の詳細は、図８と図９を用いて後述する。以下、この要求データをクエリと呼び、暗号化されたクエリを暗号化クエリと呼ぶ。暗号化クエリ生成部２０２は、ステップＳ２４０で作成した暗号化クエリを管理機３００に送付する（Ｓ２４０）。
【００５３】
管理機３００のデータ比較部３０２は、暗号化クエリにおいて指定された項目を暗号文データベース３１１に格納された暗号化データから探し出す（Ｓ３６０）。例えば、図２Ａの例において、「生年月日」や「入院日数」等の項目が指定された場合、データ比較部３０２は、「生年月日」や「入院日数」に関係する暗号化データを、暗号化クエリの比較対象として抽出する。
【００５４】
データ比較部３０２は、暗号化クエリで指定された診療データの項目において、暗号化データと暗号化クエリを比較し、その結果から、暗号化データを抽出する（Ｓ３７０）。例えば、図２Ａの例において、データ比較部３０２は、入院日数が「２０日以上」または生年月日が「１９７０年以降」を満たす暗号化クエリと暗号化データを比較し、それらの条件を満たす暗号化データを図２Ｃの例のように抽出する。データ比較処理の詳細は、図１０と図１１を用いて後述する。
【００５５】
データ比較部３０２は、抽出した暗号化データを閲覧機２００へ送付する（Ｓ３８０）。閲覧機２００の復号処理部２０３は、ステップＳ４６０で送付された暗号化鍵を用いて、送付された暗号化データを復号する（Ｓ２５０）。以上の処理により、管理機３００へ診療データの平文を明かすことなく、閲覧機２００は所望する暗号化データを取得することができる。
【００５６】
なお、上述の処理手順はあくまで一例であり、必要に応じて処理順序や処理内容が変更されてもよい。例えば、閲覧機２００と鍵配布機４００が同一の主体に属している場合には、鍵配布機４００が閲覧機２００に暗号化鍵を送付することなく、閲覧機２００が予め暗号化鍵を有している等、一部の処理を省いてもよい
【００５７】
図６は、ステップＳ１３０における暗号化データ生成処理の一例を示すフローチャートである。まず、データはｎビットのデータとし、記号（ｍｎｍｎ−１…ｍ１）で表す。ｍｎを最上位ビット、ｍ１を最下位ビットとする。各ビットの値は０又は１である。なお、データのビット数がｎビットに満たない場合は、暗号化データ生成部１０２は、例えば、予め所定のパディング操作を施すことにより、当該データをｎビットのデータへと変換しておく。
【００５８】
暗号化データ生成部１０２は、変数ｉの値をｎに初期化する（Ｓ１３００）。暗号化データ生成部１０２は、乱数ｒ（例えば１２８ビット程度）を生成する（Ｓ１３０１）。暗号化データ生成部１０２は、データのｍｎからｍｉまでを取り出す（Ｓ１３０２）。
【００５９】
暗号化データ生成部１０２は、ｍｎｍｎ−１…ｍｉ（＝ｍｉ’）と、ステップＳ４１０において鍵配布機４００から受信した秘密鍵ｓｋ１と、を連結し、そのハッシュ値を求める（Ｓ１３０３）。なお、ステップＳ１３０２〜ステップＳ１３０９の処理はループして１回以上行われるが、各ループにおいて実行されるステップＳ１３０３のハッシュ関数は同じ関数が用いられる。
【００６０】
暗号化データ生成部１０２は、ステップＳ１３０３で求めたハッシュ値と乱数ｒとを連結し、そのハッシュ値を求める（Ｓ１３０４）。なお、ステップＳ１３０２〜ステップＳ１３０９の処理はループして１回以上行われるが、各ループにおいて実行されるステップＳ１３０４のハッシュ関数は同じ関数が用いられる。なお、ステップＳ１３０３及びステップＳ１３０４において用いられるハッシュ関数は同じであってもよいし、異なってもよい。暗号化データ生成部１０２は、ステップＳ１３０４で求めたハッシュ値とｍｉとのｘｏｒ算を行い（つまり平文データと平文クエリとの大小比較の結果をあらかじめ暗号化データに埋め込む）、その演算結果を保存する（Ｓ１３０５）。
【００６１】
暗号化データ生成部１０２は、データｍｉの平文におけるビット位置ｉの関係を隠すため、例えばステップＳ４１０において鍵配布機４００から受信した秘密鍵ｓｋ２を用いて、ステップＳ１３０５で求めた値の位置ｉのシャッフルを行う（Ｓ１３０６）。なお、本実施形態におけるシャッフルにおいてシャッフル後の位置は重複しないものとする。
【００６２】
具体的には、例えば、暗号化データ生成部１０２は、変数ｉの値を１以上ｎ以下の値に置換する。この置換は、前述した通り秘密鍵ｓｋ２を用いた疑似ランダム関数を用いてもよい。また、暗号化データ生成部１０２は、変数ｉの置換前と置換後の２列の値からなる置換表を用いて、変数ｉの値を置換してもよい。この場合、置換表そのものが秘密鍵ｓｋ２である。暗号化データ生成部１０２は、置換された変数ｉの値を変数ｊに保存する。なお、秘密鍵ｓｋ１と秘密鍵ｓｋ２が同じであってもよいが、異なる秘密鍵とした方が暗号化データの安全性が高まる。
【００６３】
暗号化データ生成部１０２は、ステップＳ１３０５における出力値をｃｊとして保存する（Ｓ１３０７）。暗号化データ生成部１０２は、変数ｉの値を１減らす（Ｓ１３０８）。暗号化データ生成部１０２は、デクリメント後の変数ｉの値が１未満であるか否かを判定する（Ｓ１３０９）。
【００６４】
暗号化データ生成部１０２は、デクリメント後の変数ｉの値が１以上とあると判定した場合（ステップＳ１３０９：Ｎｏ）、ステップＳ１３０１に戻る。暗号化データ生成部１０２は、デクリメント後の変数ｉの値が１未満であると判定した場合（Ｓ１３０９：Ｙｅｓ）、乱数ｒと作成したｎ個のｃｊを暗号化データ（ｒｃｎｃｎ−１…ｃ１）として出力し（Ｓ１３１０）、暗号化データ生成処理を終了する。
【００６５】
図７は、図６で説明した暗号化データ生成処理の具体例を示す説明図である。１０進数の整数１０の暗号化データを生成する処理の例を説明する。１０進数の整数１０は４ビットのデータとして（１０１１）で表せる。また、ステップＳ１３０６におけるシャッフルで用いられる秘密鍵ｓｋ２は、４を３に、３を２に、２を４に、１を１に、それぞれ置換する。
【００６６】
なお、以下、複数回のループ処理が行われる場合において、例えば、１回目のステップＳ１３０２をステップＳ１３０２ａ、２回目のステップＳ１３０２をステップＳ１３０２ｂ、３回目のステップＳ１３０２をステップＳ１３０２ｃ、４回目のステップＳ１３０２をステップＳ１３０２ｄ、のように記載する。
【００６７】
まず、暗号化データ生成部１０２は、変数ｉを４に初期化する（Ｓ１３００）暗号化データ生成部１０２は、乱数ｒを生成する（Ｓ１３０１）。以下、最上位のビットから順にステップＳ１３０２〜ステップＳ１３０９の処理が実行される。
【００６８】
暗号化データ生成部１０２は、データからｍ４の値である１を取り出す（Ｓ１３０２ａ）。暗号化データ生成部１０２は、ｍ４の値１と秘密鍵ｓｋ１を連結し、そのハッシュ値Ｈｓｋ１（１）を求める（Ｓ１３０３ａ）。暗号化データ生成部１０２は、ステップＳ１３０３で求めたハッシュ値Ｈｓｋ１（１）と乱数ｒを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１））を求める（Ｓ１３０４ａ）。
【００６９】
暗号化データ生成部１０２は、ステップＳ１３０４ａで求めたハッシュ値と、ｍ４の値１とのｘｏｒ算を行い、Ｈｒ（Ｈｓｋ１（１））  ｘｏｒ  １を求める（Ｓ１３０５ａ）。暗号化データ生成部１０２は、変数ｉの値を４から３に置換し、変数ｊとして保存する（Ｓ１３０６ａ）。暗号化データ生成部１０２は、ステップＳ１３０５ａで求めた値をｃ３として保存する（Ｓ１３０７ａ）。暗号化データ生成部１０２は、変数ｉの値を４から１減らし、３にする（Ｓ１３０８ａ）。デクリメント後の値が１以上なのでＳ１３０２ｂへ遷移する（Ｓ１３０８）。
【００７０】
暗号化データ生成部１０２は、データからｍ４の値である１、ｍ３の値である０を取り出す（Ｓ１３０２ｂ）暗号化データ生成部１０２は、ｍ４の値１とｍ３の値０、秘密鍵ｓｋ１を連結し、そのハッシュ値Ｈｓｋ１（１０）を求める（Ｓ１３０３ｂ）。暗号化データ生成部１０２は、ステップＳ１３０３で求めたハッシュ値Ｈｓｋ１（１０）と乱数ｒを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１０））を求める（Ｓ１３０４ｂ）。
【００７１】
暗号化データ生成部１０２は、ステップＳ１３０４ｂで求めたハッシュ値と、ｍ３の値０とのｘｏｒ算を行い、Ｈｒ（Ｈｓｋ１（１０））  ｘｏｒ  ０＝Ｈｒ（Ｈｓｋ１（１０））を求める（Ｓ１３０５ｂ）。暗号化データ生成部１０２は、変数ｉの値を３から２に置換し、変数ｊとして保存する（Ｓ１３０６ｂ）。暗号化データ生成部１０２は、ステップＳ１３０５ａで求めた値をｃ２として保存する（Ｓ１３０７ｂ）。暗号化データ生成部１０２は、変数ｉの値を３から１減らし、２にする（Ｓ１３０８ｂ）。デクリメント後の値が１以上なのでＳ１３０２ｃへ遷移する。
【００７２】
暗号化データ生成部１０２は、データからｍ４の値である１、ｍ３の値である０、ｍ２の値である１を取り出す（Ｓ１３０２ｃ）。暗号化データ生成部１０２は、ｍ４の値１、ｍ３の値０、ｍ２の値１、及び秘密鍵ｓｋ１を連結し、そのハッシュ値Ｈｓｋ１（１０１）を求める（Ｓ１３０３ｃ）。暗号化データ生成部１０２は、ステップＳ１３０３で求めたハッシュ値Ｈｓｋ１（１０１）と乱数ｒを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１０１））を求める（Ｓ１３０４ｃ）。
【００７３】
暗号化データ生成部１０２は、ステップＳ１３０４ｃで求めたハッシュ値とｍ２の値１とのｘｏｒ算を行い、Ｈｒ（Ｈｓｋ１（１０１））  ｘｏｒ  １を求める（Ｓ１３０５ｃ）。暗号化データ生成部１０２は、変数ｉの値を２から４に置換し、変数ｊとして保存する（Ｓ１３０６ｃ）。暗号化データ生成部１０２は、ステップＳ１３０５ａで求めた値をｃ４として保存する（Ｓ１３０７ｃ）。暗号化データ生成部１０２は、変数ｉの値を２から１減らし、１にする（Ｓ１３０８ｃ）。デクリメント後の値が１以上なのでＳ１３０２ｂへ進む。
【００７４】
暗号化データ生成部１０２は、データからｍ４の値である１、ｍ３の値である０、ｍ２の値である１、ｍ１の値１を取り出す（Ｓ１３０２ｄ）。暗号化データ生成部１０２は、ｍ４の値１、ｍ３の値０、ｍ２の値１、ｍ１の値１、及び秘密鍵ｈｋを連結し、そのハッシュ値Ｈｓｋ１（１０１１）を求める（Ｓ１３０３ｄ）。暗号化データ生成部１０２は、ステップＳ１３０３で求めたハッシュ値Ｈｓｋ１（１０１１）と乱数ｒを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１０１１））を求める（Ｓ１３０４ｄ）。
【００７５】
暗号化データ生成部１０２は、ステップＳ１３０４ｄで求めたハッシュ値と、ｍ１の値１とのｘｏｒ算を行い、Ｈｒ（Ｈｓｋ１（１０１１））  ｘｏｒ  １を求める（Ｓ１３０５ｄ）。暗号化データ生成部１０２は、変数ｉの値を１から１に置換し、変数ｊとして保存する（Ｓ１３０６ｄ）。暗号化データ生成部１０２は、ステップＳ１３０５ａで求めた値をｃ１として保存する（Ｓ１３０７ｄ）。
【００７６】
暗号化データ生成部１０２は、変数ｉの値を１から１減らし、０にする。デクリメント後の値が１未満なのでステップＳ１３０９へ進む。暗号化データ生成部１０２は、暗号化データとして（ｒｃ４ｃ３ｃ２ｃ１）を出力する（Ｓ１３１０）。
【００７７】
図８は、ステップＳ２３０における暗号化クエリ生成処理の一例を示すフローチャートである。クエリはｎビットのデータとし、記号（ｗｎｗｎ−１…ｗ１）で表す。ｗｎを最上位ビット、ｗ１を最下位ビットとする。各ビットの値は０又は１である。なお、クエリのビット数がｎビットに満たない場合は、暗号化クエリ生成部２０２は、例えば、予め所定のパディング操作を施すことにより、当該データをｎビットのデータへと変換しておく。
【００７８】
暗号化クエリ生成部２０２は、変数ｉの値をｎに初期化する（Ｓ２４００）。暗号化クエリ生成部２０２は、クエリのｗｎからｗｉまでを取り出す（Ｓ２４０１）。暗号化クエリ生成部２０２は、ｗｉ  ｘｏｒ  １を計算し（つまりビットが反転され、元のｗｉと異なる値に変化する）、ｗｉ’として保存する（Ｓ２４０２）。
【００７９】
暗号化クエリ生成部２０２は、ｗｎｗｎ−１…ｗｉ＋１ｗｉ’と、ステップＳ４６０で鍵配布機４００から受信した秘密鍵ｓｋ１と、を連結し、そのハッシュ値を求める（Ｓ２４０３）。なお、ステップＳ１３０３とステップＳ２４０３で用いられる秘密鍵は同じである。また、ステップＳ２４０３で用いられるハッシュ関数は、ステップＳ１３０３で用いられるハッシュ関数と同じである。
【００８０】
暗号化クエリ生成部２０２は、データｗｉの平文におけるビット位置ｉの関係を隠すため、例えば、ステップＳ４６０で鍵配布機４００から受信した秘密鍵ｓｋ２を用いて、ステップＳ２４０３で求めた値の位置ｉのシャッフルを行う（Ｓ２４０４）。そして、暗号化クエリ生成部２０２は、置換された変数ｉの値を変数ｊに保存する。なお、ステップＳ２４０３におけるシャッフルの方法及びシャッフルに用いられる秘密鍵は、ステップＳ１３０６と同じである。
【００８１】
暗号化クエリ生成部２０２は、ステップＳ２４０３で求めたハッシュ値をｑｊとして保存する（Ｓ２４０５）。暗号化クエリ生成部２０２は、変数ｉの値を１減らす（Ｓ２４０６）。暗号化クエリ生成部２０２は、デクリメント後の変数ｉの値が１以下であるか否かを判定する（Ｓ２４０７）。
【００８２】
暗号化クエリ生成部２０２は、デクリメント後の値が１以上であると判定した場合（Ｓ２４０７：Ｎｏ）、ステップＳ２４０１に戻る。暗号化クエリ生成部２０２は、デクリメント後の値が１未満であると判定した場合（Ｓ２４０７：Ｙｅｓ）、作成したｎ個のｑｊを暗号化クエリ（ｑｎｑｎ−１…ｑ１）として出力すし（Ｓ２４０８）、暗号化クエリ生成処理を終了する。
【００８３】
図９は、図８で説明した暗号化クエリ生成処理の具体例を示す説明図である。１０進数の整数１０の暗号化クエリの作成処理の一例を説明する。１０進数の整数１０は４ビットのクエリとして（１０１０）で表せる。
【００８４】
また、ステップＳ２４０４におけるシャッフルで用いられる秘密鍵ｓｋ２は、４を３に、３を２に、２を４に、１を１に、それぞれ置換する。まず、暗号化クエリ生成部２０２は変数ｉを４に初期化する（Ｓ２４００）。以下、最上位のビットから順にステップＳ２４０１〜ステップＳ２４０７の処理が実行される。
【００８５】
暗号化クエリ生成部２０２は、クエリからｗ４の値である１を取り出す（Ｓ２４０１ａ）暗号化クエリ生成部２０２は、ｗ４  ｘｏｒ  １（＝０）を計算し、ｗ４’として０を保存する（Ｓ２４０２ａ）暗号化クエリ生成部２０２は、ｗ４’の値０と秘密鍵ｓｋ１とを連結し、そのハッシュ値Ｈｓｋ１（０）を求める（Ｓ２４０３ａ）。
【００８６】
暗号化クエリ生成部２０２は、変数ｉの値を４から３に置換し、変数ｊとして保存する（Ｓ２４０４ａ）。暗号化クエリ生成部２０２は、ステップＳ２４０３ａで求めたハッシュ値Ｈｓｋ１（０）をｑ３として保存する（Ｓ２４０５ａ）。暗号化クエリ生成部２０２は、変数ｉの値を４から１減らし（Ｓ２４０６ａ）、３にする。デクリメント後の値が１以上なのでステップＳ２４０１ｂへ遷移する。
【００８７】
暗号化クエリ生成部２０２は、クエリからｗ４の値である１、ｗ３の値である０を取り出す（Ｓ２４０１ｂ）。暗号化クエリ生成部２０２は、ｗ３  ｘｏｒ  １（＝１）を計算し、ｗ３’として１を保存する（Ｓ２４０２ｂ）。暗号化クエリ生成部２０２は、ｗ４ｗ３’の値１１と秘密鍵ｓｋ１とを連結し、そのハッシュ値Ｈｓｋ１（１１）を求める（Ｓ２４０３ｂ）。暗号化クエリ生成部２０２は、変数ｉの値を３から２に置換し、変数ｊとして保存する（Ｓ２４０４ｂ）。
【００８８】
暗号化クエリ生成部２０２は、ステップＳ２４０３ｂで求めたハッシュ値Ｈｓｋ１（１１）をｑ２として保存する（Ｓ２４０５ｂ）。暗号化クエリ生成部２０２は、変数ｉの値を３から１減らし、２にする（Ｓ２４０６ｃ）。デクリメント後の値が１以上なのでステップＳ２４０１ｃへ遷移する。
【００８９】
暗号化クエリ生成部２０２は、クエリからｗ４の値である１、ｗ３の値である０、ｗ２の値である１を取り出す（Ｓ２４０１ｃ）。暗号化クエリ生成部２０２は、ｗ２  ｘｏｒ  １（＝０）を計算し、ｗ２’として０を保存する（Ｓ２４０２ｃ）。暗号化クエリ生成部２０２は、ｗ４ｗ３ｗ２’の値１００と秘密鍵ｓｋ１を連結し、そのハッシュ値Ｈｓｋ１（１００）を求める（Ｓ２４０３ｃ）。暗号化クエリ生成部２０２は、変数ｉの値を２から４に置換し、変数ｊとして保存する（Ｓ２４０４ｃ）。
【００９０】
暗号化クエリ生成部２０２は、ステップＳ２４０４ｃで求めたハッシュ値Ｈｓｋ１（１００）をｑ４として保存する（Ｓ２４０５ｃ）。暗号化クエリ生成部２０２は、変数ｉの値を２から１減らし、１にする（Ｓ２４０６ｃ）。デクリメント後の値が１以上なのでステップＳ２４０１ｄへ遷移する。暗号化クエリ生成部２０２は、クエリからｗ４の値である１、ｗ３の値である０、ｗ２の値である１、ｗ１の値である０を取り出す（Ｓ２４０１ｄ）。
【００９１】
暗号化クエリ生成部２０２は、ｗ１  ｘｏｒ  １（＝１）を計算し、ｗ１’として１を保存する（Ｓ２４０２ｄ）。暗号化クエリ生成部２０２は、ｗ４ｗ３ｗ２ｗ１’の値１０１１と秘密鍵ｈｋを連結し、そのハッシュ値Ｈｓｋ１（１０１１）を求める（Ｓ２４０３ｄ）。暗号化クエリ生成部２０２は、変数ｉの値を１から１に置換し、変数ｊとして保存する（Ｓ２４０４ｄ）。
【００９２】
暗号化クエリ生成部２０２は、ステップＳ２４０４ｄで求めたハッシュ値Ｈｓｋ１（１０１１）をｑ１として保存する（Ｓ２４０５ｄ）。暗号化クエリ生成部２０２は、変数ｉの値を１から１減らし、０にする。デクリメント後の値が１未満なので、暗号化クエリ生成部２０２は、暗号化クエリとしてｑ４ｑ３ｑ２ｑ１を出力する（Ｓ２４０７ａ）。
【００９３】
図１０は、ステップＳ３７０における暗号化データと暗号化クエリの比較処理の一例を示すフローチャートである。データ比較部３０２は、変数ｉの値をｎに初期化する（Ｓ３７００）。データ比較部３０２は、暗号化データから乱数ｒを取り出す（Ｓ３７０１）データ比較部３０２は、暗号化データからｃｉを、暗号化クエリからｑｉを取り出す（Ｓ３７０２）。
【００９４】
データ比較部３０２は、ｑｉと乱数ｒを連結し、そのハッシュ値Ｈｒ（ｑｉ）を求める（Ｓ３７０３）。データ比較部３０２は、ステップＳ１３０５で求めたハッシュ値を整数とみなし、その整数とｃｉとの排他的論理和を求める（Ｓ３７０４）。なお、ステップＳ３７０４において用いられるハッシュ関数は、ステップＳ１３０４で用いられるハッシュ関数と同じである。
【００９５】
データ比較部３０２は、ステップＳ３０７４で求めた値が１又は０であるかを判定する（Ｓ３０７５）。データ比較部３０２は、ステップＳ３０７４で求めた値が１又は０のいずれかであるかを判定した場合（Ｓ３０７５：Ｙｅｓ）、ステップＳ３７０４で求めた値に応じた比較処理結果を出力し（Ｓ３７０８）、データ比較処理を終了する。
【００９６】
データ比較部３０２は、ステップＳ３０７４で求めた値が１又は０のいずれでもないと判定した場合（Ｓ３７０５：Ｎｏ）、変数ｉの値を１減らす（Ｓ３７０６）。データ比較部３０２は、デクリメント後の変数ｉの値が１未満であるか否かを判定する（Ｓ３７０７）。データ比較部３０２は、デクリメント後の変数ｉの値が１以上であると判定した場合（Ｓ３７０６：Ｎｏ）、ステップＳ３７０２に戻る。データ比較部３０２は、デクリメント後の変数ｉの値が１未満であると判定した場合（Ｓ３７０６：Ｙｅｓ）、ステップＳ３７０８の処理を実行して、データ比較処理を終了する。
【００９７】
なお、ステップＳ３７０８において、データ比較部３０２は、ステップＳ３７０４で求めた値が１ならば、平文はクエリより大きいと判定し、当該値が０ならば、平文はクエリより小さいと判定し、当該値がそれ以外の値（即ち乱数が出現）ならば、平文はクエリと等しいと判定とする。
【００９８】
図１１は、図１０で説明した暗号化データと暗号化クエリの比較処理の具体例を示す説明図である。図７では、データ（１０１１）の暗号化処理を示し、図９では、クエリ（１０１０）の暗号化処理を示した。図１１は、この暗号化データとこの暗号化クエリを比較する処理の一例を示すなお、１０１１＞１０１０なので、図１１の例では、最終的にはデータがクエリより大きいと判断された比較結果が出力される。
【００９９】
まず、データ比較部３０２は変数ｉを４に初期化する（Ｓ３７００）。データ比較部３０２は暗号化データから乱数ｒを取り出す（Ｓ３７０１）。以下、最上位のビットから順にステップＳ３７０１〜ステップＳ３７０７の処理が実行される。
【０１００】
データ比較部３０２は暗号化クエリからｑ４を取り出す（Ｓ３７０２ａ）。ｑ４はハッシュ値Ｈｓｋ１（１００）である。データ比較部３０２はｑ４の値Ｈｓｋ１（１００）と乱数ｒを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１００））を求める（Ｓ３７０３ａ）。
【０１０１】
データ比較部３０２は、暗号化データからｃ４を取り出し、その値Ｈｒ（Ｈｓｋ１（１０１））  ｘｏｒ  １と、ステップＳ３７０３ａで求めたハッシュ値Ｈｒ（Ｈｓｋ１（１００））と、のｘｏｒ算を行う（Ｓ３７０４ａ）。ここで、値（１０１）のハッシュ値と値（１００）のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このｘｏｒ算の結果は二つの異なるハッシュ値をｘｏｒ算した、乱数が出力される。
【０１０２】
従って、データ比較部３０２は、ステップＳ３７０４ａで出力された値が１又は０のいずれでもないと判定する（Ｓ３７０５ａ）。データ比較部３０２は、変数ｉの値を４から１減らし（Ｓ３７０６ａ）、３にする。デクリメント後の値が１以上なので、Ｓ３７０２ｂへ遷移する。
【０１０３】
データ比較部３０２は、暗号化クエリからｑ３を取り出す（Ｓ３７０２ｂ）。ｑ３はハッシュ値Ｈｓｋ１（０）である。データ比較部３０２は、ｑ３の値Ｈｓｋ１（０）と乱数ｒとを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（０））を求める（Ｓ３７０３ｂ）。
【０１０４】
データ比較部３０２は、暗号化データからｃ３を取り出し、その値Ｈｒ（Ｈｓｋ１（１））  ｘｏｒ  １と、ステップＳ３７０３ｂで求めたハッシュ値Ｈｒ（Ｈｓｋ１（０））と、のｘｏｒ算を行う（Ｓ３７０４ｂ）。ハッシュ関数に入力された値が（０）と（１）で異なるので、適切なハッシュ関数を使う限り、このｘｏｒ算は乱数を出力する。
【０１０５】
従って、データ比較部３０２は、ステップＳ３７０４ｂで出力された値が１又は０のいずれでもないと判定する（Ｓ３７０５ｂ）。データ比較部３０２は、変数ｉの値を３から１減らし（Ｓ３７０６ｂ）、２にする。デクリメント後の値が１以上なので、ステップＳ３７０２ｃへ遷移する。
【０１０６】
データ比較部３０２は、暗号化クエリからｑ２を取り出す（Ｓ３７０２ｃ）。ｑ２はハッシュ値Ｈｓｋ１（１１）である。データ比較部３０２はｑ２の値Ｈｓｋ１（１１）と乱数ｒとを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１１））を求める（Ｓ３７０３ｂ）。
【０１０７】
データ比較部３０２は、暗号化データからｃ２を取り出し、その値Ｈｒ（Ｈｓｋ１（１０））と、ステップＳ３７０３ｃで求めたハッシュ値Ｈｒ（Ｈｓｋ１（１１））と、のｘｏｒ算を行う（Ｓ３７０４ｃ）。ハッシュ関数に入力された値が（１０）と（１１）で異なるので、適切なハッシュ関数を使う限り、このｘｏｒ算は乱数を出力する。
【０１０８】
従って、データ比較部３０２は、ステップＳ３７０４ｃで出力された値が１又は０のいずれでもないと判定する（Ｓ３７０５ｃ）。データ比較部３０２は、変数ｉの値を２から１減らし、１にする（Ｓ３７０６ｃ）。デクリメント後の値が１以上なので、ステップＳ３７０２ｄへ遷移する。
【０１０９】
データ比較部３０２は、暗号化クエリからｑ１を取り出す（Ｓ３７０２ｄ）。ｑ１はハッシュ値Ｈｓｋ１（１０１１）である。データ比較部３０２はｑ１の値Ｈｓｋ１（１０１１）と乱数ｒとを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１０１１））を求める（Ｓ３７０３ｂ）。
【０１１０】
データ比較部３０２は、暗号化データからｃ１を取り出し、その値Ｈｒ（Ｈｓｋ１（１０１１））  ｘｏｒ  １と、ステップＳ３７０３ｂで求めたハッシュ値Ｈｒ（Ｈｓｋ１（１１））と、のｘｏｒ算を行う（Ｓ３７０４ｄ）。ハッシュ関数に入力された値が（１０１１）と（１０１１）で等しいので、ハッシュ値も同じであり、このｘｏｒ算では１が出力される。
【０１１１】
データ比較部３０２は、ステップＳ３７０４ｄで出力された値が１であるので、ステップＳ３７０８へ進む（Ｓ３７０５ｄ）。データ比較部３０２は、ステップＳ３７０４ｄで出力された値が１であるので、暗号化データが暗号化クエリより大きい、という比較結果を出力する（Ｓ３７０８）。
【０１１２】
このように、データ比較部３０２は、データ（１０１１）がクエリ（１０１０）より大きいとする大小関係を、暗号化データと暗号化クエリを暗号化したまま比較することにより得ることができる。
【０１１３】
この例が示すように、本実施例では、ステップＳ３７０５において１ビット単位での大小比較が行われ、大小が判明するまではステップＳ３７０４において乱数が出力され、１又は０が出現することにより大小比較結果が判明する。従って、データ比較部３０２は、暗号化データと暗号化クエリの元の値の類似性を隠したまま大小比較の結果を得ることができる。
【０１１４】
また、本実施例の暗号化データ比較システムは、ビット位置をシャッフルして暗号化を実行するため、暗号化データのどのブロック（Ｃ４やＣ３など）が、元のデータどのビット位置（上位ビットや下位ビット）に該当するかを隠すことができる。
【０１１５】
なお、上述した例では、データ比較部３０２は、上位ビットから順に暗号化データと暗号化クエリとの比較を行ったが、どのビットから順に比較を行ってもよい。
【０１１６】
また、上述した例では、暗号化データ生成と暗号化クエリ生成において同じ秘密鍵ｓｋ２を用いてシャッフル（即ち同じ置換）が行われていたが、暗号化クエリ生成部２０２は秘密鍵ｓｋ２を用いたシャッフルを実行しなくてもよい。この場合、例えば、暗号化クエリ生成部２０２は、全てのシャッフルパターンの暗号化クエリを生成しておき、データ比較部３０２は、暗号化データと、全てのシャッフルパターンの暗号化クエリデータそれぞれと、を比較すれば、暗号化データと暗号化クエリの同一の桁の値を比較することができる。
【０１１７】
また、このような場合において、暗号化データ生成部１０２は、秘密鍵を用いずにシャッフルを行ってもよい。具体的には、例えば、暗号化データ生成部１０２は、ステップＳ１３０４においてに出力されるハッシュ値の大きいビットほど上位ビットになるようシャッフルを実行してもよい。
【実施例２】
【０１１８】
実施例１では、１ビット単位での大小比較において、暗号化データに比較結果をあらかじめ埋め込み、大小が判明するまではその比較結果を出力せずに乱数を出力し、大小が判明した場合にのみ、比較結果（１又は０）を出力することにより、暗号化データと暗号化クエリの元の値の類似性を隠しながら、比較結果のみを出力することを示した。
【０１１９】
実施例２では、データを１ビットよりも大きなビット数で暗号化しても比較結果を評価可能であること、そして暗号化データに比較結果を埋め込む代わりに、暗号化クエリに比較結果を埋め込んでも、暗号化データと暗号化クエリの元の値の類似性を隠しながら、比較結果のみを出力することを示す。
【０１２０】
実施例２の手法は、暗号化するデータのビット数に制限はないが、簡単のため、具体例としてデータが１ビットで表現可能な０と１の２進数ではなく、０と１と２の３進数で暗号化する例を示す。実施例２の暗号化データ比較判定システム及び暗号化データ比較判定システムに含まれる各装置の構成例は、実施例１と同様である。以下では、実施例１と異なる処理について説明する。
【０１２１】
図１２は、ステップＳ１３０における暗号化データ生成処理の一例を示すフローチャートである。本実施例では、データはｎ個の３進数で表され、記号（ｍｎｍｎ−１…ｍ１）で表される。ｍｎは最上位ブロック、ｍ１を最下位ブロックであり、各ブロックの値は０、１、又は２である。
【０１２２】
図１２におけるデータ暗号化処理は、以下の点を除いて、実施例１におけるデータ暗号化処理（図６）と同様である。本実施例のデータ暗号化処理においては、ステップＳ１３０５の処理（暗号化データへの比較結果の埋め込み）が実行されない。また、ステップＳ１３０７の処理の代わりに、暗号化データ生成部１０２は、ステップＳ１３０４で求めたハッシュ値をｃｊとして保存する処理を実行する（Ｓ１４０７）。
【０１２３】
図１３は、暗号化データ生成処理の具体例を示す説明図である。１０進数の整数５の暗号化データの生成処理を説明する。３進数を用いた場合、１０進数の整数５は２ブロックのデータ（１２）で表せる。
【０１２４】
暗号化データ生成部１０２は、変数ｉをブロック数の２に初期化する（Ｓ１３００ａ）。暗号化データ生成部１０２は、乱数ｒを生成する（Ｓ１３０１ａ）。暗号化データ生成部１０２は、データからｍ２の値である１を取り出す（Ｓ１３０２ａ）。暗号化データ生成部１０２は、ｍ２の値１と秘密鍵ｓｋ１を連結し、そのハッシュ値Ｈｓｋ１（１）を求める（Ｓ１３０３ａ）。
【０１２５】
暗号化データ生成部１０２は、ステップｓＳ１３０３で求めたハッシュ値Ｈｓｋ１（１）と乱数ｒとを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１））を求める（Ｓ１３０４ａ）。暗号化データ生成部１０２は、変数ｉの値２を１以上３未満の値（すなわち、１か２）に置換し、変数ｊに保存する（Ｓ１３０６ａ）。図１３の例では、秘密鍵ｓｋ２によって変数ｉの値２が２に（たまたま同じ値に）置換される。
【０１２６】
暗号化データ生成部１０２は、ステップＳ１３０４ａで求めた値をｃ１として保存する（Ｓ１４０７ａ）。暗号化データ生成部１０２は、変数ｉの値を２から１減らし、１にする（Ｓ１３０８ａ）。デクリメント後の値が１以上なのでステップＳ１３０２ｂへ遷移する。
【０１２７】
暗号化データ生成部１０２は、データからｍ２の値である１、ｍ１の値である２を取り出す（Ｓ１３０２ｂ）。暗号化データ生成部１０２は、ｍ２の値１、ｍ１の値２、及び秘密鍵ｓｋ１を連結し、そのハッシュ値Ｈｓｋ１（１０）を求める（Ｓ１３０３ｂ）。
【０１２８】
暗号化データ生成部１０２は、Ｓ１３０３で求めたハッシュ値Ｈｓｋ１（１２）と乱数ｒとを連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１２））を求める（Ｓ１３０４ｂ）。暗号化データ生成部１０２は、変数ｉの値を１から１以上３未満の値（すなわち、１か２）に置換し、変数ｊに保存する（Ｓ１３０６ｂ）。図１３の例では、秘密鍵ｓｋ２によって変数ｉの値が１から１に（たまたま同じ値に）置換した変数ｊとして保存する。
【０１２９】
暗号化データ生成部１０２は、ステップＳ１３０４ｂで求めた値をｃ２として保存する（Ｓ１４０７ｂ）。暗号化データ生成部１０２は、変数ｉの値を２から１減らし、０にする。デクリメント後の値が１未満なので、暗号化データ生成部１０２は、暗号化データとして（ｒｃ２ｃ１）を出力する（Ｓ１３０９）。
【０１３０】
図１４は、ステップＳ２３０における暗号化クエリ生成処理の一例を示すフローチャートである。まず、クエリはｎブロックのｐ進数のデータとし、記号（ｗｎｗｎ−１…ｗ１）で表す。ｗｎを最上位ブロック、ｗ１を最下位ブロックとする。各ブロックの値は０，１，２、・・・又は（ｐ−１）のいずれかである。
【０１３１】
暗号化クエリ生成部２０２は、変数ｉの値をｎに初期化する（Ｓ２５００）。暗号化クエリ生成部２０２は、変数ｓの値を１に初期化する（Ｓ２５０１）。暗号化クエリ生成部２０２は、クエリのｗｎからｗｉまでを取り出す（Ｓ２５０２）。暗号化クエリ生成部２０２は、ｗｉ＋ｓ（ｍｏｄ  ｐ）を計算し、ｗ’（ｉ，ｓ）として保存する（つまりｗｉを異なる値に変換している）（Ｓ２５０３）。
【０１３２】
暗号化クエリ生成部２０２は、ｓとｐ、ｗｉとｗ’（ｉ，ｓ）をそれぞれ整数とみなして大小比較する（Ｓ２５０４）。暗号化クエリ生成部２０２は、ステップＳ２５０４において、ｓ＜ｐかつｗｉ＜ｗ’（ｉ，ｓ）、又はｓ＞ｐかつｗｉ＞ｗ’（ｉ，ｓ）であると判定した場合、暗号化クエリ生成部２０２は、ｗｎ・・・ｗｉ＋１ｗ’（ｉ，ｓ）と秘密鍵ｓｋ１とを連結し、そのハッシュ値を新たなｗ’（ｉ，ｓ）として保存し（Ｓ２５０５）、ステップＳ２５０７へ進む。
【０１３３】
暗号化クエリ生成部２０２は、ステップＳ２５０４において、ｓ＜ｐかつｗｉ＞ｗ’（ｉ，ｓ）、又はｓ＞ｐかつｗｉ＜ｗ’（ｉ，ｓ）であると判定した場合、乱数を生成し、生成した乱数を新たなｗ’（ｉ，ｓ）として保存し（Ｓ２５０６）、ステップＳ２５０７へ進む。
【０１３４】
暗号化クエリ生成部２０２は、変数ｓが１以上ｐ未満なら、変数ｓを１以上ｐ未満の整数値に置換した値を変数ｔに保存し、変数ｓがｐ＋１以上２ｐ未満なら、変数ｓを（ｐ＋１）以上２ｐ未満の整数値に置換した値を変数ｔに保存する（Ｓ２５０７）。このとき、暗号化クエリ生成部２０２は、ｗ’（ｉ，ｓ）の値をｑ（ｉ，ｔ）に保存する。
【０１３５】
暗号化クエリ生成部２０２は、変数ｓの値を１増やす（Ｓ２５０８）。暗号化クエリ生成部２０２は、変数ｓの値と、ｐと、を比較する（Ｓ２５０９）。暗号化クエリ生成部２０２は、ステップＳ２５０９において変数ｓの値がｐでなく、かつ２ｐでないと判定した場合、ステップＳ２５０３へ戻る。
【０１３６】
暗号化クエリ生成部２０２は、ステップＳ２５０９において変数ｓの値がｐであると判定した場合、暗号化クエリ生成部２０２は、ｑ（ｉ，ｓ）の値を１とし（クエリの平文の値を大小比較結果として埋め込み）、（Ｓ２５１０）、変数ｓをｐ＋１に設定し（Ｓ２５１１）、ステップＳ２５０３に戻る。
【０１３７】
暗号化クエリ生成部２０２は、ステップＳ２５０９において変数ｓの値が２ｐであると判定した場合、ｑ（ｉ，ｓ）の値を０とし（クエリの平文の値を大小比較結果として埋め込み）（Ｓ２５１２）、ｑ（ｉ，１），ｑ（ｉ，２），・・・ｑ（ｉ，２ｐ）をまとめて暗号化クエリｑｉとし（Ｓ２５１３）、ステップＳ２５１４に進む。
【０１３８】
暗号化クエリ生成部２０２は、変数ｉの値を１減らす（Ｓ２５１４）。暗号化クエリ生成部２０２は、ｉが１未満であるかを判定する（Ｓ２５１５）。暗号化クエリ生成部２０２は、ｉが１以上であると判定した場合（Ｓ２５１５：Ｎｏ）、ステップＳ２５０１へ戻る。
【０１３９】
暗号化クエリ生成部２０２は、ｉが１未満であると判定した場合（Ｓ２５１５：Ｙｅｓ）、データｗｉのブロック位置ｉの関係を隠すため、暗号化クエリｑ１・・・ｑnの各ブロックをシャッフルする（Ｓ２５１６）。暗号化クエリ生成処理を終了する。置換の方法は、例えば実施例１と同様である。暗号化クエリ生成部２０２は、暗号化クエリとして、（ｑｎｑｎ−１・・・ｑ１）を出力するし（Ｓ２５１７）、暗号化クエリ生成処理を終了する。
【０１４０】
図１５は、暗号化クエリ生成処理の具体例を示す説明図である。整数３の暗号化クエリの生成処理の例を説明する。３進数を用いた場合、整数３は２ブロックのデータ（１０）で表される。
【０１４１】
まず、クエリはｎブロックの３進数のデータとし、記号（ｗｎ，ｗｎ−１……ｗ１）で表す。ｗｎを最上位ブロック、ｗ１を最下位ブロックとする。各ブロックは０または１または２の値をもつ。
【０１４２】
暗号化クエリ生成部２０２は、変数ｉをブロック数の２に初期化する。また、ｐの値を３に設定する（Ｓ２５００）。暗号化クエリ生成部２０２は、変数ｓを１に初期化する（Ｓ２５０１ａ）。暗号化クエリ生成部２０２は、ブロックｗ２の値１を取り出す（Ｓ２５０２ａ）。暗号化クエリ生成部２０２は、ｗｉ＋ｓ＝１＋１（ｍｏｄ  ３）を計算し、その解である２をｗ’（２，１）として保存する（Ｓ２５０３ａ）。
【０１４３】
暗号化クエリ生成部２０２は、ｓとｐ、ｗ２とｗ’（２，１）を整数とみなして大小比較する（ｓ２５０４ａ）。ｓの値は２、ｐの値は３であるので、ｓ＜ｐが成り立つ。ｗ２＝１、ｗ’（２，１）＝２であるので、ｗ２＜ｗ’（２，１）が成り立つ。従って、ステップＳ２５０５ａへ進む。
【０１４４】
暗号化クエリ生成部２０２は、ｗ’（２，１）の値２と秘密鍵ｓｋ１とを連結し、そのハッシュ値Ｈｓｋ１（２）を新たなｗ’（２，１）として保存し（Ｓ２５０５ａ）、ステップＳ２５０７ａへ進む。暗号化クエリ生成部２０２は、変数ｓが１であるので、変数ｓを１以上３未満の整数値に置換し、この変数ｓの値１を置換した値２を変数ｔに保存し、ｗ’（２，１）をｑ（２，２）とする（Ｓ２５０７ａ）。暗号化クエリ生成部２０２は、変数ｓの値１を１増やし、２とする（Ｓ２５０８ａ）。２≠３であるので、ｓ≠ｐかつｓ≠２ｐであり、Ｓ２５０３ｂへ遷移する。
【０１４５】
暗号化クエリ生成部２０２は、ｗｉ＋ｓ＝１＋２（ｍｏｄ  ３）を計算し、その解である０をｗ’（２，２）として保存する（Ｓ２５０３ｂ）。暗号化クエリ生成部２０２は、ｓとｐ、ｗ２とｗ’（２，２）を整数とみなして大小比較する（ｓ２５０４ｂ）。ｓの値は２、ｐの値は３であるので、ｓ＜ｐが成り立つ。ｗ２＝１、ｗ’（２，２）＝０であるので、ｗ２＞ｗ’（２，１）が成り立つ。従って、Ｓ２５０６ｂへ進む。
【０１４６】
暗号化クエリ生成部２０２は、乱数を生成し、生成した乱数を新たなｗ’（２，２）として保存し（Ｓ２５０６ｂ）、ステップＳ２５０７ｂへ進む。暗号化クエリ生成部２０２は、変数ｓが２であるので、変数ｓを１以上３未満の整数値に置換し、さらにこの変数ｓの値２を置換した値１を変数ｔに保存し、ｗ’（２，２）をｑ（２，１）とする（Ｓ２５０７ｂ）。
【０１４７】
暗号化クエリ生成部２０２は、変数ｓの値２を１増やし、３とする（Ｓ２５０８ｂ）。暗号化クエリ生成部２０２は、変数ｓの値３がｐの値３と等しいと判断し、Ｓ２５１０ｂへ進む。暗号化クエリ生成部２０２は、ｑ（２，３）＝１とする（Ｓ２５１０ｂ）。暗号化クエリ生成部２０２は、変数ｓの値をｐ＋１＝４に設定し（Ｓ２５１１ｂ）、ステップＳ２５０３ｃへ遷移する。
【０１４８】
暗号化クエリ生成部２０２は、ｗｉ＋ｓ＝１＋４（ｍｏｄ  ３）を計算し、その解である２をｗ’（２，４）として保存する（Ｓ２５０３ｃ）。暗号化クエリ生成部２０２は、ｓとｐ、ｗ２とｗ’（２，２）を整数とみなして大小比較する（Ｓ２５０４ｃ）。ｓの値は４、ｐの値は３であるので、ｓ＞ｐが成り立つ。ｗ２＝１、ｗ’（２，４）＝２であるので、ｗ２＜ｗ’（２，１）が成り立つ。従って、ステップＳ２５０６ｃへ進む。
【０１４９】
暗号化クエリ生成部２０２は、乱数を生成し、生成した乱数を新たなｗ’（２，２）として保存し（Ｓ２５０６ｃ）、ステップＳ２５０７ｃへ進む。暗号化クエリ生成部２０２は、変数ｓが４であるので、４以上６未満の整数値に置換し、さらにこの変数ｓの値４を置換した値４を変数ｔに保存し、ｗ’（２，４）をｑ（２，４）とする（Ｓ２５０７ｃ）。暗号化クエリ生成部２０２は、変数ｓの値４を１増やし、５とする（Ｓ５４０８ｃ）。５≠３かつ５≠６であるので、ｓ≠ｐかつｓ≠２ｐが成り立ち、ステップＳ２５０３ｄへ遷移する。
【０１５０】
暗号化クエリ生成部２０２は、ｗｉ＋ｓ＝１＋５（ｍｏｄ  ３）を計算し、その解である０をｗ’（２，５）として保存する（Ｓ２５０３ｄ）。暗号化クエリ生成部２０２は、ｓとｐ、ｗ２とｗ’（２，５）を整数とみなして大小比較する（ｓ２５０４ｄ）。ｓの値は５、ｐの値は３であるので、ｓ＞ｐが成り立つ。ｗ２＝１、ｗ’（２，５）＝０であるので、ｗ２＞ｗ’（２，１）が成り立つ。従って、ステップＳ２５０５ｄへ遷移する。
【０１５１】
暗号化クエリ生成部２０２は、ｗ’（２，５）の値０と秘密鍵ｓｋ１とを連結し、そのハッシュ値Ｈｓｋ１（０）を新たなｗ’（２，５）として保存し（Ｓ２５０５ｄ）、ステップＳ２５０７ｄへ進む。暗号化クエリ生成部２０２は、変数ｓの値が５であるので、４以上６未満の整数値に置換し、さらにこの変数ｓの値５を置換した値５を変数ｔに保存し、ｗ’（２，５）をｑ（２，５）とする（Ｓ２５０７ｄ）。
【０１５２】
暗号化クエリ生成部２０２は、変数ｓの値５を１増やし、６とする（Ｓ２５０８ｄ）。６＝２・３であるので、ｓ＝２ｐであり、ステップＳ２５１０ｄへ進む。暗号化クエリ生成部２０２は、変数ｓの値６が２ｐの値６と等しいと判断するため、ｑ（２，６）＝０とする（Ｓ２５１２ｄ）。
【０１５３】
暗号化クエリ生成部２０２は、ｑ（２，１）、ｑ（２，２）、ｑ（２，３）、ｑ（２，４）、ｑ（２，５）、ｑ（２，６）の組を暗号化クエリｑ２とする（Ｓ２５１３ｄ）。暗号化クエリ生成部２０２は、変数ｉの値２を１減らし、１とする（Ｓ２５１４ｄ）。変数ｉの値はまだ１以上であるため、ステップＳ２５０１ｅへ遷移する。
【０１５４】
暗号化クエリ生成部２０２は、変数ｓを１に初期化する（Ｓ２５０１ｅ）。暗号化クエリ生成部２０２は、ブロックｗ２ｗ１の値１０を取り出す（Ｓ２５０２ｅ）。暗号化クエリ生成部２０２は、１０＋ｓ＝１０＋１（ｍｏｄ  ３）を計算し、その解である１１をｗ’（１，１）として保存する（Ｓ２５０３ｅ）。
【０１５５】
暗号化クエリ生成部２０２は、ｓとｐ、ｗ１とｗ’（１，１）を整数とみなして大小比較する（Ｓ２５０４ｅ）。ｓの値は１、ｐの値は３であるので、ｓ＜ｐが成り立つ。ｗ１＝１、ｗ’（１，１）＝２であるので、ｗ１＜ｗ’（１，１）が成り立つ。従って、ステップＳ２５０５ｅへ進む。
【０１５６】
暗号化クエリ生成部２０２は、ｗ２ｗ’（１，１）の値（１１）と秘密鍵ｓｋ１とを連結し、そのハッシュ値Ｈｓｋ１（１１）を新たなｗ’（２，１）として保存し（Ｓ２５０５ｅ）、ステップＳ２５０７ｅへ進む。
【０１５７】
暗号化クエリ生成部２０２は、変数ｓが１であるので、１以上３未満の整数値に置換し、さらにこの変数ｓの値１を置換した値１を変数ｔに保存し、ｗ’（１，１）をｑ（１，１）とする（Ｓ２５０７ｅ）。暗号化クエリ生成部２０２は、変数ｓの値１を１増やし、２とする（Ｓ２５０８ｅ）。２≠３であるので、ｓ≠ｐかつｓ≠２ｐであり、ステップＳ２５０３ｆへ遷移する。暗号化クエリ生成部２０２は、ｗｉ＋ｓ＝０＋２（ｍｏｄ  ３）を計算し、その解である２をｗ’（１，２）として保存する（Ｓ２５０３ｆ）。
【０１５８】
暗号化クエリ生成部２０２は、ｓとｐ、ｗ２とｗ’（１，２）を整数とみなして大小比較する（Ｓ２５０４ｆ）。ｓの値は１、ｐの値は３であるので、ｓ＜ｐが成り立つ。ｗ２＝０、ｗ’（１，２）＝２であるので、ｗ２＜ｗ’（１，２）が成り立つ。従って、ステップＳ２５０５ｆへ進む。
【０１５９】
暗号化クエリ生成部２０２は、ｗ２ｗ’（１，２）の値（１２）と秘密鍵ｓｋ１とを連結し、そのハッシュ値Ｈｓｋ１（１２）を新たなｗ’（２，２）として保存し（Ｓ２５０５ｆ）、ステップＳ２５０７ｆへ進む。暗号化クエリ生成部２０２は、変数ｓが２であるので、１以上３未満の整数値に置換し、さらにこの変数ｓの値２を置換した値２を変数ｔに保存し、ｗ’（１，２）をｑ（１，２）とする（Ｓ２５０７ｆ）。
【０１６０】
暗号化クエリ生成部２０２は、変数ｓの値２を１増やし、３とする（Ｓ２５０８ｆ）。３＝３であるので、変数ｓの値３がｐの値３と等しいと判断し、ステップＳ２５１０ｆへ進む。暗号化クエリ生成部２０２は、ｑ（１，３）＝１とする（Ｓ２５１０ｆ）。暗号化クエリ生成部２０２は、変数ｓの値をｐ＋１＝４に設定し（Ｓ２５１１ｆ）、ステップＳ２５０３ｇへ遷移する。
【０１６１】
暗号化クエリ生成部２０２は、ｗｉ＋ｓ＝０＋４（ｍｏｄ  ３）を計算し、その解である１をｗ’（１，４）として保存する（Ｓ２５０３ｇ）。暗号化クエリ生成部２０２は、ｓとｐ、ｗ２とｗ’（１，４）を整数とみなして大小比較する（Ｓ２５０４ｇ）。ｓの値は４、ｐの値は３であるので、ｓ＞ｐが成り立つ。ｗ２＝０、ｗ’（１，４）＝１であるので、ｗ２＜ｗ’（１，４）が成り立つ。従って、ステップＳ２５０６ｇへ進む。
【０１６２】
暗号化クエリ生成部２０２は、乱数を生成し、その乱数を新たなｗ’（１，４）として保存し（Ｓ２５０６ｇ）、ステップＳ２５０７ｇへ進む。暗号化クエリ生成部２０２は、変数ｓの値が４であるので、４以上６未満の整数値に置換し、さらにこの変数ｓの値４を置換した値５を変数ｔに保存し、ｗ’（１，４）をｑ（１，５）とする（Ｓ２５０７ｇ）。暗号化クエリ生成部２０２は、変数ｓの値４を１増やし、５とする（Ｓ２５０８ｇ）。５≠３かつ５≠６であるので、ｓ≠ｐかつｓ≠２ｐが成り立つため、ステップＳ２５０３ｈへ遷移する。
【０１６３】
暗号化クエリ生成部２０２は、ｗｉ＋ｓ＝０＋５（ｍｏｄ  ３）を計算し、その解である２をｗ’（１，５）として保存する（Ｓ２５０３ｈ）。暗号化クエリ生成部２０２は、ｓとｐ、ｗ２とｗ’（１，５）を整数とみなして大小比較する（Ｓ２５０４ｈ）。ｓの値は５、ｐの値は３であるので、ｓ＞ｐが成り立つ。ｗ１＝０、ｗ’（１，５）＝０であるので、ｗ２＞ｗ’（１，５）が成り立つ。従って、ステップＳ２５０６ｈへ進む。
【０１６４】
暗号化クエリ生成部２０２は、乱数を生成し、その乱数を新たなｗ’（１，２）として保存し（Ｓ２５０６ｈ）、ステップＳ２５０７ｇへ進む。暗号化クエリ生成部２０２は、変数ｓの値が５であるので、４以上６未満の整数値に置換し、さらにこの変数ｓの値５を置換した値４を変数ｔに保存し、ｗ’（１，５）をｑ（１，４）とする（Ｓ２５０７ｈ）。
【０１６５】
暗号化クエリ生成部２０２は、変数ｓの値５を１増やし、６とする（Ｓ２５０８ｈ）。６＝２・３であるので、変数ｓの値６が２ｐの値６と等しいと判断し、ステップＳ２５１２ｈへ進む。暗号化クエリ生成部２０２は、ｑ（１，６）＝０とする（Ｓ２５１２ｈ）。暗号化クエリ生成部２０２は、ｑ（１，１）、ｑ（１，２）、ｑ（１，３）、ｑ（１，４）、ｑ（１，５）、ｑ（１，６）の組を暗号化クエリｑ１とする（Ｓ２５１３ｈ）。
【０１６６】
暗号化クエリ生成部２０２は、変数ｉの値１を１減らし、０とする（Ｓ２５１４）。変数ｉの値が１未満であるため、ステップＳ２５１６へ進む。暗号化クエリ生成部２０２は、ｑ１とｑ２をシャッフルする。図１５では、シャッフルした結果、ｑ１とｑ２がたまたま入れ変わらなかった例を示している（Ｓ２５１６）。暗号化クエリ生成部２０２は、暗号化クエリとして、（ｑ２ｑ１）を出力する（Ｓ２５１７）。
【０１６７】
図１６は、ステップＳ３７０における暗号化データと暗号化クエリとの比較処理の一例を示すフローチャートである。データ比較部３０２は、変数ｉの値をｎに初期化する（Ｓ３８００）。データ比較部３０２は、暗号化データから乱数ｒを取り出す（Ｓ３８０１）。データ比較部３０２は、暗号化データからｃｉ、暗号化クエリからｑｉを取り出す（Ｓ３８０２）。データ比較部３０２は、変数ｓの値を１に初期化する（Ｓ３８０３）。
【０１６８】
データ比較部３０２は、ｑｉからｑ（ｉ，ｓ）を取り出す（Ｓ３８０４）。データ比較部３０２は、ｑ（ｉ，ｓ）と乱数ｒを連結し、そのハッシュ値Ｈｒ（ｑ（ｉ，ｓ））を求める（Ｓ３８０５）。なお、ステップＳ３８０５で用いられるハッシュ関数は、ステップＳ１３０４で用いられるハッシュ関数と同じである。データ比較部３０２は、ステップＳ３８０５で求めたハッシュ値とｃｉとの排他的論理和を求める（Ｓ３８０６）。データ比較部３０２は、ステップＳ３８０６で求めた排他的論理和の値が０であるかを判定する（Ｓ３８０７）。
【０１６９】
データ比較部３０２は、ステップＳ３８０６で求めた値が０であると判定した場合（Ｓ３８０７：Ｙｅｓ）、後述するステップＳ３８１３へ進む。データ比較部３０２は、ステップＳ３８０６で求めた値が０でないと判定した場合（Ｓ３８０７：Ｎｏ）、変数ｓの値を１増やす（Ｓ３８０８）。
【０１７０】
データ比較部３０２は、ｓとｐとを比較する（Ｓ３８０９）。データ比較部３０２は、ステップＳ３８０９においてｓ＝ｐ又はｓ＝２ｐのいずれでもないと判定した場合、ステップＳ３８０４に戻る。データ比較部３０２は、ステップＳ３８０９においてｓ＝ｐであると判定した場合、変数ｓの値を１増やし（Ｓ３８１０）、ステップＳ３８０２に戻る。
【０１７１】
データ比較部３０２は、ステップＳ３８０９においてｓ＝２ｐであると判定した場合、変数ｉの値を１減らし（Ｓ３８１１）、ｉが１未満であるかを判定する（Ｓ３８１２）。データ比較部３０２は、ｉが１以上であると判定した場合（Ｓ３８１１：Ｎｏ）、ステップＳ３８０４に戻る。データ比較部３０２は、ｉが１未満であると判定した場合（Ｓ３８１１：Ｙｅｓ）、ステップＳ３８１３へ進む。
【０１７２】
ステップＳ３８１３において、データ比較部３０２は、変数ｉの値がｐより小さいと判定すれば「平文がクエリより大きい」ことを意味するｑ（ｉ，ｐ）、変数ｉの値がｐより大いと判定すれば「暗号文がクエリより小さい」ことを意味するｑ（ｉ，２ｐ）、それ以外であると判定すれば「平文とクエリは等しい」ことを意味する出力を返す（Ｓ３８１３）。
【０１７３】
図１７は、暗号化データと暗号化クエリとの比較処理の具体例を示す説明図である。図１７は、図１３の例で生成されたデータ（１２）の暗号化データと、図１５の例で生成されたクエリ（１０）の暗号化クエリと、を比較する例を説明する。なお、１２＞１０なので、図１７の例では、最終的にはデータがクエリより大きいと判断された比較結果が出力される。
【０１７４】
データ比較部３０２は、変数ｉをブロック数２に初期化する（Ｓ３８００）。データ比較部３０２は、暗号化データから乱数ｒを取り出す（Ｓ３８０１）。データ比較部３０２は、暗号化クエリからｑ２を取り出す（Ｓ３８０２）。
【０１７５】
データ比較部３０２は、変数ｓを１に初期化する（Ｓ３８０３ａ）。データ比較部３０２はｑ２からｑ（２，１）を取り出す（Ｓ３８０４ａ）。なお、ｑ（２，１）には乱数Ｒ（２，２）が入力されている。データ比較部３０２は、ｑ（２，１）の値であるＲ（２，２）と、乱数ｒと、を連結し、そのハッシュ値Ｈｒ（Ｒ（２，２））を求める（Ｓ３８０５ａ）。
【０１７６】
データ比較部３０２は、暗号化データからｃ２を取り出し、その値Ｈｒ（Ｈｓｋ１（１））と、ステップＳ３７０３ａで求めたハッシュ値Ｈｒ（Ｒ（２，２））と、のｘｏｒ算を行う（Ｓ３８０６ａ）。値（１）のハッシュ値と乱数（Ｒ（２，２））のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このｘｏｒ算の結果は２つの異なるハッシュ値をｘｏｒ算した、乱数が出力される。
【０１７７】
データ比較部３０２は、ステップＳ３８０６ａで出力された値が０でないことを確認するため（Ｓ３８０７ａ）、変数ｓの値を１増やし、２にする（Ｓ３８０８ａ）。インクリメント後の値が３（＝ｐ）でも６（＝２ｐ）でもないので、ステップＳ３８０４ｂへ遷移する。
【０１７８】
データ比較部３０２は、ｑ２からｑ（２，２）を取り出す（Ｓ３８０４ｂ）。ｑ（２，２）にはハッシュ値Ｈｓｋ１（２）が入力されている。データ比較部３０２は、ｑ（２，２）の値Ｈｓｋ１（２）と、乱数ｒと、を連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（２））を求める（Ｓ３８０５ｂ）。
【０１７９】
データ比較部３０２は、暗号化データからｃ２を取り出し、その値Ｈｒ（Ｈｓｋ１（１））と、（Ｓ３７０３ａ）で求めたハッシュ値Ｈｒ（Ｈｓｋ１（２））と、のｘｏｒ算を行う（Ｓ３８０６ｂ）。ハッシュ値（Ｈｓｋ１（２））のハッシュ値と乱数（Ｒ（２，２））のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このｘｏｒ算の結果は２つの異なるハッシュ値をｘｏｒ算した、乱数が出力される。
【０１８０】
データ比較部３０２は、ステップＳ３７０６ｂで出力された値が０でないことを確認するため（Ｓ３８０７ｂ）、変数ｓの値を１増やし、３にする（Ｓ３８０８ｂ）。インクリメント後の値が３なので、データ比較部３０２は、変数ｓの値を１増やし、４にして（Ｓ３８１０）、ステップＳ３８０４ｃへ遷移する。
【０１８１】
データ比較部３０２は、ｑ２からｑ（２，４）を取り出す（Ｓ３８０４ｃ）。ｑ（２，４）には乱数Ｒ（２，１）が入力されている。データ比較部３０２は、ｑ（２，１）の値Ｒ（２，１）と、乱数ｒと、を連結し、そのハッシュ値Ｈｒ（Ｒ（２，１））を求める（Ｓ３８０５ｃ）。
【０１８２】
データ比較部３０２は、暗号化データからｃ２を取り出し、その値Ｈｒ（Ｈｓｋ１（１））と、ステップＳ３７０３ｃで求めたハッシュ値Ｈｒ（Ｒ（２，１））と、のｘｏｒ算を行う（Ｓ３８０６ｃ）。値（１）のハッシュ値と乱数（Ｒ（２，１））のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このｘｏｒ算の結果は２つの異なるハッシュ値をｘｏｒ算した、乱数が出力される。
【０１８３】
データ比較部３０２は、ステップＳ３７０６ｃで出力された値が０でないことを確認するため（Ｓ３８０７ｃ）、変数ｓの値を１増やし、５にする（Ｓ３８０８ｃ）。インクリメント後の値が３でも６でもないので、ステップＳ３８０４ｄへ遷移する。
【０１８４】
データ比較部３０２は、ｑ２からｑ（２，５）を取り出す（Ｓ３８０４ｄ）。ｑ（２，５）にはハッシュ値Ｈｓｋ１（０）が入力されている。データ比較部３０２は、ｑ（２，５）の値Ｈｓｋ１（０）と、乱数ｒと、を連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（０））を求める（Ｓ３８０５ｄ）。
【０１８５】
データ比較部３０２は、暗号化データからｃ２を取り出し、その値Ｈｒ（Ｈｓｋ１（１））と、ステップＳ３７０３ａで求めたハッシュ値Ｈｒ（Ｈｓｋ１（０））と、のｘｏｒ算を行う（Ｓ３７０６ｄ）。ハッシュ値（Ｈｓｋ１（１））のハッシュ値とハッシュ値（Ｈｓｋ１（０））のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このｘｏｒ算の結果は２つの異なるハッシュ値をｘｏｒ算した、乱数が出力される。
【０１８６】
データ比較部３０２は、ステップＳ３７０６ｄで出力された値が０でないことを確認するため（Ｓ３８０７ｄ）、変数ｓの値を１増やし、３にする（Ｓ３８０８）。インクリメント後の値が６なので、データ比較部３０２は、変数ｉの値を１減らし、０にして（Ｓ３８１０ｄ）、ステップＳ３７０２ｅへ遷移する。
【０１８７】
データ比較部３０２は、暗号化クエリからｑ１を取り出す（Ｓ３８０２ｅ）。データ比較部３０２は、変数ｓを１に初期化する（Ｓ３８０３ｅ）。データ比較部３０２は、ｑ１からｑ（１，１）を取り出す（Ｓ３８０４ｅ）。ｑ（１，１）にはハッシュ値Ｈｓｋ１（１２）が入力されている。
データ比較部３０２は、ｑ（１，１）の値Ｈｓｋ１（１２）と、乱数ｒと、を連結し、そのハッシュ値Ｈｒ（Ｈｓｋ１（１２））を求める（Ｓ３８０５ｅ）。
【０１８８】
データ比較部３０２は、暗号化データからｃ１を取り出し、その値Ｈｒ（Ｈｓｋ１（１２））と、ステップＳ３７０３ｅで求めたハッシュ値Ｈｒ（Ｈｓｋ１（１２））と、のｘｏｒ算を行う（Ｓ３８０６ｅ）。ハッシュ関数への入力値が同じため、ハッシュ値も同じである。従って、このｘｏｒ算は０を出力する。
【０１８９】
データ比較部３０２は、ステップＳ３７０６ａで出力された値が０であることを確認するため（Ｓ３８０７）、ステップＳ３８１３へ進む。データ比較部３０２は、変数ｉの値１がｐの値３より小さいことを確認するため、「暗号化データが暗号化クエリより大きい」という比較結果を意味するｑ（１，３）を出力する（Ｓ３８１３）。
【０１９０】
このように、データ比較部３０２は、データ（１２）がクエリ（１０）より大きいとする大小関係を、暗号化データと暗号化クエリを暗号化したまま比較することにより得ることができる。
なお、前述した実施形態において、例えば、データの値は整数に限定されるものではなく、実数としてもよい。
【０１９１】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることも可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１９２】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１９３】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１９４】
１００  登録機、１０２  暗号化データ生成部、１１１  診療データ、１１２  暗号化鍵データベース、２００  閲覧機、２０２  暗号化クエリ生成部２０２、２１１  暗号化鍵データベース、３００  管理機、３０２  データ比較部、３１１  暗号文データベース、５００  計算機、５０１  ＣＰＵ、５０２  メモリ、５０３  補助記憶装置、５０４  通信装置、５０５  入力装置、５０６  出力装置
【図１】
2020204731.tif 000003
【図２Ａ】
2020204731.tif 000004
【図２Ｂ】
2020204731.tif 000005
【図２Ｃ】
2020204731.tif 000006
【図２Ｄ】
2020204731.tif 000007
【図３Ａ】
2020204731.tif 000008
【図３Ｂ】
2020204731.tif 000009
【図３Ｃ】
2020204731.tif 000010
【図３Ｄ】
2020204731.tif 000011
【図３Ｅ】
2020204731.tif 000012
【図４】
2020204731.tif 000013
【図５】
2020204731.tif 000014
【図６】
2020204731.tif 000015
【図７】
2020204731.tif 000016
【図８】
2020204731.tif 000017
【図９】
2020204731.tif 000018
【図１０】
2020204731.tif 000019
【図１１】
2020204731.tif 000020
【図１２】
2020204731.tif 000021
【図１３】
2020204731.tif 000022
【図１４】
2020204731.tif 000023
【図１５】
2020204731.tif 000024
【図１６】
2020204731.tif 000025
【図１７】
2020204731.tif 000026