(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-30
(45)【発行日】2022-12-08
(54)【発明の名称】データ比較装置、データ比較システム、及びデータ比較方法
(51)【国際特許分類】
G09C 1/00 20060101AFI20221201BHJP
【FI】
G09C1/00 660D
(21)【出願番号】P 2019112859
(22)【出願日】2019-06-18
【審査請求日】2022-02-28
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】吉野 雅之
(72)【発明者】
【氏名】長沼 健
(72)【発明者】
【氏名】佐藤 尚宜
【審査官】行田 悦資
(56)【参考文献】
【文献】国際公開第2015/052957(WO,A1)
【文献】米国特許出願公開第2016/0240108(US,A1)
【文献】米国特許出願公開第2005/0147246(US,A1)
【文献】米国特許出願公開第2019/0007390(US,A1)
【文献】古川 潤,2012年 暗号と情報セキュリティシンポジウム予稿集,日本,電子情報通信学会,2012年01月30日,pp.1-7
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
データ比較装置であって、
プロセッサとメモリとを有し、
前記メモリは、第1平文が暗号化された第1暗号化データと、第2平文が暗号化された第2暗号化データと、を保持し、
前記第1暗号化データは、複数のブロックに分割された前記第1平文について、前記複数のブロックごとの暗号化と、前記複数のブロックのシャッフルと、を含む処理が実行されて生成されたデータであり、
前記第2暗号化データは、前記複数のブロックに分割された前記第2平文について、前記複数のブロックごとの暗号化、を含む処理が実行されて生成されたデータであり、
前記第1暗号化データ及び前記第2暗号化データの少なくとも一方に、前記少なくとも一方の平文の値が大小比較結果を示す値として埋め込まれ、
前記プロセッサは、
前記埋め込まれた前記少なくとも一方の平文の値に基づいて、前記第1暗号化データと前記第2暗号化データのシャッフル前の同一位置のブロックを比較して、前記第1平文と前記第2平文との大小関係を判定する、データ比較装置。
【請求項2】
請求項1に記載のデータ比較装置であって、
前記第1暗号化データ又は前記第2暗号化データの少なくとも一方における、前記複数のブロックごとの暗号化において、当該一方の平文の各ブロックの値が異なる値に変換される、データ比較装置。
【請求項3】
請求項2に記載のデータ比較装置であって、
前記第1平文及び前記第2平文は、ビット列であり、
前記第1暗号化データは、
1ビットごとに分割された前記第1平文について、
各ビットの値に対して、当該ビットの値、当該ビットより上位のビットの値、及び秘密鍵が第1関数に入力された値が取得され、前記取得された値と乱数とが第2関数に入力されて得られた値に、前記第1平文における当該ビットの値が埋め込まれる、暗号化と、
前記第1平文の1ビット単位でのシャッフルと、を含む処理が実行されて生成されたデータであり、
前記第1暗号化データは、前記乱数を含み、
前記第2暗号化データは、
1ビットごとに分割された前記第2平文について、
各ビットの値に対して、当該ビットを反転させた値と、当該ビットより上位のビットの値と、前記秘密鍵と、が前記第1関数に入力される暗号化、を含む処理が実行されて生成されたデータである、データ比較装置。
【請求項4】
請求項3に記載のデータ比較装置であって、
前記プロセッサは、
前記第1暗号化データから前記乱数を取得し、
前記第2暗号化データのビットに対して、
当該ビットと前記乱数とを前記第2関数に入力して得た値と、前記第1暗号化データのシャッフル前の同一位置のビットと、の排他的論理和を算出し、
前記算出した排他的論理和に基づいて、前記第1平文と前記第2平文との大小関係を判定する、データ比較装置。
【請求項5】
請求項4に記載のデータ比較装置であって、
前記プロセッサは、
前記算出した排他的論理和が1であれば、第1平文が第2平文より大きいと判定し、
前記算出した排他的論理和が0であれば、第1平文が第2平文より小さいと判定し、
前記算出した排他的論理和が乱数である場合、前記第1平文と前記第2平文が等しいと判定する、データ比較装置。
【請求項6】
請求項2に記載のデータ比較装置であって、
前記第1平文及び前記第2平文は、p進数の数値列であり、
pは3以上の整数であり、
前記第1暗号化データは、
所定数桁ごとに分割された前記第1平文について、
各桁の値に対して、当該桁の値、当該桁より上位の桁の値、及び秘密鍵が第1関数に入力された値が取得され、前記取得された値と第1乱数とが第2関数に入力される、暗号化と、
前記第1平文の前記所定数桁単位でのシャッフルと、を含む処理が実行されて生成されたデータであり、
前記第1暗号化データは、前記第1乱数を含み、
前記第2暗号化データは、
前記所定数桁ごとに分割された前記第2平文について、
各桁の値に対して、当該桁の値、当該桁より上位の桁の値、及び前記秘密鍵が前記第1関数に入力される又は新たに生成された乱数を当該桁の値とされる暗号化、を含む処理が実行されて生成されたデータである、データ比較装置。
【請求項7】
請求項6に記載のデータ比較装置であって、
前記プロセッサは、
前記第1暗号化データから前記第1乱数を取得し、
前記第2暗号化データのビットに対して、
当該ビットと前記乱数とを前記第2関数に入力して得た値と、前記第1暗号化データのシャッフル前の同一の桁と、の排他的論理和を算出し、
前記算出した排他的論理和に基づいて、前記第1平文と前記第2平文との大小関係を判定する、データ比較装置。
【請求項8】
データ比較システムであって、
データ比較装置と、第1平文を暗号化する第1暗号化データ生成装置と、第2平文を暗号化する第2暗号化データ生成装置と、を含み、
前記第1暗号化データ生成装置は、
前記第1平文を複数のブロックに分割し、
前記複数のブロックごとの前記第1平文の暗号化と、前記複数のブロックのシャッフルと、を含む処理を実行して第1暗号化データを生成し、
前記第2暗号化データ生成装置は、
前記第2平文を前記複数のブロックに分割し、
前記複数のブロックごとの前記第2平文の暗号化を含む処理を実行して第2暗号化データを生成し、
前記第1暗号化データ生成装置が、前記第1暗号化データの生成において前記第1平文の値を、大小比較結果を示す値として埋め込む処理と、
前記第2暗号化データ生成装置が、前記第2暗号化データの生成において前記第2平文の値を、大小比較結果を示す値として埋め込む処理と、の少なくとも一方が実行され、
前記第1暗号化データを、前記データ比較装置に送信し、
前記第2暗号化データを、前記データ比較装置に送信し、
前記データ比較装置は、
前記埋め込まれた前記少なくとも一方の平文の値に基づいて、前記第1暗号化データと前記第2暗号化データのシャッフル前の同一位置のブロックを比較して、前記大小比較結果を示す値に基づいて前記第1平文と前記第2平文との大小関係を判定する、データ比較システム。
【請求項9】
データ比較装置によるデータ比較方法であって、
前記データ比較装置は、プロセッサとメモリとを有し、
前記メモリは、第1平文が暗号化された第1暗号化データと、第2平文が暗号化された第2暗号化データと、を保持し、
前記第1暗号化データは、複数のブロックに分割された前記第1平文について、前記複数のブロックごとの暗号化と、前記複数のブロックのシャッフルと、を含む処理が実行されて生成されたデータであり、
前記第2暗号化データは、前記複数のブロックに分割された前記第2平文について、前記複数のブロックごとの暗号化、を含む処理が実行されて生成されたデータであり、
前記第1暗号化データ及び前記第2暗号化データの少なくとも一方に、前記少なくとも一方の平文の値が大小比較結果を示す値として埋め込まれ、
前記データ比較方法は、
前記プロセッサが、前記埋め込まれた前記少なくとも一方の平文の値に基づいて、前記第1暗号化データと前記第2暗号化データのシャッフル前の同一位置のブロックを比較して、前記第1平文と前記第2平文との大小関係を判定する、データ比較方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ比較装置、データ比較システム、及びデータ比較方法に関する
【背景技術】
【0002】
本技術分野の背景技術として、特願2015-541450号公報(特許文献1)がある。この公報には、「本発明の装置は、暗号化された数値の大小比較をすることができると共に、隠匿性を維持して情報の漏洩する機会を大幅に減らす暗号文生成装置である。この暗号文生成装置は、主鍵と文書とに基づいて、導出鍵を生成する導出鍵生成部と、主鍵と文書と導出鍵とに基づいて、補助導出鍵を生成する補助導出鍵生成部と、文書の識別子と導出鍵と補助導出鍵とに基づいて、識別子を暗号化した識別子別暗号文を生成する識別子別暗号文生成部と、識別子記導出鍵とに基づいて、主鍵と文書と導出鍵とから生成された相対値を暗号化した相対値暗号文を生成する相対値暗号文生成部と、を備え、識別子別暗号文と相対値暗号文とを含む文字列を文書に対する暗号文とする。」と記載されている(要約参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載の技術は、データを暗号化し、暗号化データを復号することなく大小比較結果を判定する。しかしながら、特許文献1に記載の技術では、暗号化データ同士の大小比較の判定結果から、暗号化データ同士の類似性が判明するおそれがある。
【0005】
例えば、特許文献1に記載の技術によって、数字3と数字4と数字6を暗号化して比較した場合に、3<4<6という判定結果の他に、3と4は、4と6より近いという類似性が判明する。類似性が判明するということは、大小比較の判定結果以外の過分な情報漏洩が起きていることを意味する。これにより、最終的には暗号化データの不正解読が可能となるおそれがある。
【0006】
そこで、本発明の一態様は、暗号化データの不正解読を防止しつつ、暗号化データを比較することを目的とする。
【課題を解決するための手段】
【0007】
上述の課題を解決するため、本発明の一態様は以下の構成を採用する。データ比較装置は、プロセッサとメモリとを有し、前記メモリは、第1平文が暗号化された第1暗号化データと、前記第1平文との大小比較の判定対象の第2平文が暗号化された第2暗号化データと、を保持し、前記第1暗号化データは、複数のブロックに分割された前記第1平文について、前記複数のブロックごとの暗号化と、前記複数のブロックのシャッフルと、を含む処理が実行されて生成されたデータであり、前記第2暗号化データは、前記複数のブロックに分割された前記第2平文について、前記複数のブロックごとの暗号化、を含む処理が実行されて生成されたデータであり、前記第1暗号化データ及び前記第2暗号化データの少なくとも一方に、前記少なくとも一方の平文の値が大小比較結果を示す値として埋め込まれ、前記プロセッサは、前記埋め込まれた前記少なくとも一方の平文の値に基づいて、前記第1暗号化データと前記第2暗号化データのシャッフル前の同一位置のブロックを比較して、前記第1平文と前記第2平文との大小関係を判定する。
【発明の効果】
【0008】
本発明の一態様によれば、暗号化データの不正解読を防止しつつ、暗号化データを比較することができる。
【0009】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【0010】
【
図1】実施例1における暗号化データ比較システムの構成の概略の一例を示すブロック図である。
【
図2A】実施例1における医療機関が登録機に登録した診療データの一覧の一例である。
【
図2B】実施例1における管理機内で保管される暗号化された診療データの一覧の一例である。
【
図2C】実施例1における管理機内で抽出された暗号化された診療データの一例である。
【
図2D】実施例1における閲覧機内で復号された診療データの一例である。
【
図3A】実施例1における登録機、閲覧機、管理機、及び鍵配布機それぞれを実現する計算機のハードウェア構成例を示すブロック図である。
【
図3B】実施例1における登録機の機能構成例を示すブロック図である。
【
図3C】実施例1における閲覧機の機能構成例を示すブロック図である。
【
図3D】実施例1における管理機の機能構成例を示すブロック図である。
【
図3E】実施例1における鍵配布機の機能構成例を示すブロック図である。
【
図4】実施例1におけるデータ登録処理の一例を示すシーケンス図である。
【
図5】実施例1におけるデータ比較処理の一例を示すシーケンス図である。
【
図6】実施例1における暗号化データ生成処理の一例を示すフローチャートである。
【
図7】実施例1における暗号化データ生成処理の具体例を示す説明図である。
【
図8】実施例1における暗号化クエリ生成処理の一例を示すフローチャートである。
【
図9】実施例1における暗号化クエリ生成処理の具体例を示す説明図である。
【
図10】実施例1における暗号化データと暗号化クエリの比較処理の一例を示すフローチャートである。
【
図11】実施例1における暗号化データと暗号化クエリの比較処理の具体例を示す説明図である。
【
図12】実施例2における暗号化データ生成処理の一例を示すフローチャートである。
【
図13】実施例2における暗号化データ生成処理の具体例を示す説明図である。
【
図14】実施例2における暗号化クエリ生成処理の一例を示すフローチャートである。
【
図15】実施例2における暗号化クエリ生成処理の具体例を示すフローチャートである。
【
図16】実施例2における暗号化データと暗号化クエリとの比較処理の一例を示すフローチャートである。
【
図17】実施例2における暗号化データと暗号化クエリとの比較処理の具体例を示す説明図である。
【発明を実施するための形態】
【0011】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、これにより本発明が限定されるものではない。実施の形態において、同一の部材には原則として同一の符号を付け、繰り返しの説明は省略する。まず、本実施形態で使用する用語を定義する。
【0012】
(1)ハッシュ関数
任意長の入力されたデータから固定長のデータを出力する圧縮関数である。出力されたデータをハッシュ値と呼ぶ。特に、本実施形態では、出力されたデータから入力されたデータを求める不可逆性、かつ同じハッシュ値を持つ任意の入力データを見つけることが困難な衝突困難性、を有する暗号学的ハッシュ関数が用られる。SHA-256、SHA-3などは、いずれもこのようなハッシュ関数の一例である。
【0013】
(2)秘密鍵
本実施形態では、ハッシュ関数に入力する秘密鍵と、シャッフルのための置換用の秘密鍵、及び暗号化データ復号用の秘密鍵が用いられる。以下、ハッシュ関数に入力する秘密鍵をhk(hash key)、置換用の秘密鍵をsk(shuffule key)、復号用の秘密鍵をdk(decryption key)と表記する。
【0014】
(3)データ
暗号化対象のデータを平文データまたは単にデータとも呼ぶ。暗号化後は、暗号化データとも呼ぶ。
【0015】
(4)クエリ
本実施形態では、データとの比較対象をクエリとも呼ぶ。暗号化前のクエリを平文クエリまたは単にクエリとも呼ぶ。暗号化後は、暗号化クエリとも呼ぶ。
【0016】
(5)排他的論理和
二つのビットの排他的論理和をxorと書く。ビット値は0または1であるので、ビット値に対する排他的論理和は、0 xor 0=0、0 xor 1=1、1 xor 0=1、1 xor 1=0、のいずれかである。本実施形態では、この排他的論理和をxor算とも呼ぶ。
【0017】
(6)剰余加算
2つの整数を加算し、整数pで割った余りを求める計算をmod pと書く。例えば、0以上3未満の整数は0、1、2のいずれかであるので、pが3の時、0+0 mod 3=0、0+1 mod 3=1、0+2 mod 3=2、1+0 mod 3=1、1+1 mod 3=2、1+2 mod 3=0、2+0 mod 3=2、2+1 mod 3=0、2+2 mod 3=1のいずれかの計算を行う。本実施形態では、この剰余加算をmod算とも呼ぶ。
【実施例1】
【0018】
図1は、暗号化データ比較システムの構成の概略の一例を示すブロック図である。暗号化データ比較システムは例えば、鍵管理局が所有する鍵配布機400、例えば、1以上の事業主体A(1~n)それぞれが所有する登録機100と、事業主体Bが所有する管理機300と、事業主体Cが所有する閲覧機200と、を含み、各装置が互いにインターネット等のネットワーク600を介して接続されている。
【0019】
本実施例の健康診断事業への適用例を説明する。以下、事業主体A(1~n)が「医療機関」、事業主体Bが「クラウドサービス提供者」、事業主体Cが「医療研究者」であると想定する。
【0020】
医療研究者は、自社の情報システムをクラウドサービス提供者の管理機300に預託する運用をしている。故に、医療機関から取得する診療データが、管理機300に預託されている。診療データは医療機関が有する個人情報であるため、他者に漏洩しないよう慎重に取り扱われる必要がある。診療データの詳細は、
図2Aを用いて後述する。
【0021】
そのため、登録機100は、入力された診療データにおいて医療機関によって指定された項目のデータを、鍵管理局の鍵配布機400が発行する暗号化鍵で暗号化した上で、クラウドサービス提供者の管理機300に預託する。すなわち、クラウドサービス提供者には、診療データにおいて暗号化された項目の内容が開示されない。
【0022】
医療研究者は診療データを必要としているので、診療データを格納するクラウドサービス提供者に診療データを要求する。詳細は、
図2Dを用いて後述する。クラウドサービス提供者の管理機300は、診療データを暗号化した状態で管理する。暗号化された診療データの詳細は、
図2Bを用いて後述する。クラウドサービス提供者の管理機300は、暗号化データを比較し、その比較結果に基づいた暗号化データを抽出する。抽出された暗号化データの詳細は、
図2Cを用いて後述する。
【0023】
図2A~
図2Dは、本実施例で取り扱われるデータの具体例である。
図2Aは医療機関が登録機100に登録した診療データの一覧の一例である。
図2Bは管理機300内で保管される暗号化された診療データの一覧の一例である。
図2Cは管理機300内で抽出された暗号化された診療データの一例である。
図2Dは閲覧機200内で復号された診療データの一例である。
【0024】
図2Aの各行のデータを「個々の診療データ」とも呼ぶ。鍵管理局の鍵配布機400は、指定された項目毎に暗号化鍵を発行し、医療機関の登録機100は、発行された暗号化鍵を用いて個々の診療データを暗号化する。
【0025】
図2Bの各行のデータを「暗号化された個々の診療データ」とも呼ぶ。E(x)はある値xが暗号化された値を示す。
図2Cは、指定された項目において、比較判定により抽出された診療データの一部である。この例では、比較判定によって生年月日が1980年以降又は入院日数が20日以上のレコードが選択され、当該レコードの疾病コード、生年月日、医療機関コード、及び入院日数が抽出された。
【0026】
図2Dは、
図2Cの抽出結果を復号したデータである。このデータは医療研究者に提供され、閲覧機200を用いて閲覧することができる。なお、上記の診療データはあくまで一例である。必要に応じて複数の暗号文を組み合わせてよい。例えば、項目ごとにブロック暗号、検索可能暗号、及び公開鍵暗号等の異なる方式で暗号化されてもよい。
【0027】
図3Aは、登録機100、閲覧機200、管理機300、及び鍵配布機400それぞれを実現する計算機のハードウェア構成例を示すブロック図である。計算機500は、例えば、CPU(Central Processing Unit)501、メモリ502、補助記憶装置503、通信装置504、入力装置505、出力装置506、及び読み書き装置507を有し、これらが互いにバス等の内部通信線で接続されている。
【0028】
CPU501はプロセッサを含み、プロセッサがメモリ502に格納されたプログラムを実行する。メモリ502は、不揮発性の記憶素子であるROM及び揮発性の記憶素子であるRAMを含む。ROMは、不変のプログラム(例えば、BIOS)などを格納する。RAMは、DRAM(Dynamic Random Access Memory)のような高速かつ揮発性の記憶素子であり、CPU501が実行するプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。
【0029】
補助記憶装置503は、例えば、磁気記憶装置(HDD)、フラッシュメモリ(SSD)等の大容量かつ不揮発性の記憶装置であり、CPU501が実行するプログラム及びプログラムの実行時に使用されるデータを格納する。すなわち、プログラムは、補助記憶装置503から読み出されて、メモリ502にロードされて、CPU501によって実行される。
【0030】
入力装置505は、キーボードやマウスなどの、オペレータからの入力を受ける装置である。出力装置506は、ディスプレイ装置やプリンタなどの、プログラムの実行結果をオペレータが視認可能な形式で出力する装置である。
【0031】
通信装置504は、所定のプロトコルに従って、他の装置との通信を制御するネットワークインターフェース装置である。また、通信インターフェース104は、例えば、USB等のシリアルインターフェースを含む。
【0032】
読み書き装置507は、リムーバブルメディア(CD-ROM、フラッシュメモリなど)からデータを読み込み、またリムーバブルメディアにデータを書き込む。CPU501が実行するプログラムは、リムーバブルメディア又はネットワーク600を介して計算機500に提供され、非一時的記憶媒体である不揮発性の補助記憶装置503に格納される。
【0033】
登録機100、閲覧機200、管理機300、及び鍵配布機400は、それぞれ、物理的に一つの計算機500上で、又は、論理的又は物理的に構成された複数の計算機500上で構成される計算機システムであり、同一の計算機500上で別個のスレッドで動作してもよく、複数の物理的計算機資源上に構築された仮想計算機上で動作してもよい。
【0034】
なお、本実施形態において、暗号化データ比較判定システムが使用する情報は、データ構造に依存せずどのようなデータ構造で表現されていてもよい。例えば、テーブル、リスト、データベース又はキューから適切に選択したデータ構造体が、情報を格納することができる。
【0035】
図3Bは、登録機100の機能構成例を示すブロック図である。登録機100は、例えば、暗号化鍵管理部101及び暗号化データ生成部102を含む。暗号化鍵管理部101及び暗号化データ生成部102は、登録機100のCPU501のプロセッサに含まれる。
【0036】
プロセッサは、メモリ502にロードされた暗号化鍵管理プログラムに従って動作することで、暗号化鍵管理部101として機能し、メモリ502にロードされた暗号化データ生成プログラムに従って動作することで、暗号化データ生成部102として機能する。暗号化データ比較システムに含まれる他の装置の機能部と、プロセッサと、の関係も同様である。暗号化鍵管理部101は、データを暗号化するための暗号化鍵を管理する。暗号化データ生成部102は、平文のデータから暗号化データを生成する。
【0037】
登録機100は、例えば、診療データ111及び暗号化鍵データベース112を保持する。診療データ111及び暗号化鍵データベース112は、登録機100のメモリ502及び/又は補助記憶装置503に格納されている。診療データ111は、暗号化対象の平文のデータを含む。暗号化鍵データベース112は、鍵配布機400から受信した暗号化鍵を保持する。
【0038】
図3Cは、閲覧機200の機能構成例を示すブロック図である。閲覧機200は、例えば、暗号化鍵管理部201、暗号化クエリ生成部202、及び復号処理部203を含む。暗号化鍵管理部201、暗号化クエリ生成部202、及び復号処理部203は、閲覧機200のCPU501のプロセッサに含まれる。
【0039】
暗号化鍵管理部201は、暗号化鍵を管理する。暗号化クエリ生成部202は、暗号化データと比較するための暗号化クエリを生成する。復号処理部203は、管理機300から受信した暗号化データと暗号化クエリとの比較結果を示す暗号文を復号する。
【0040】
閲覧機200は、例えば、暗号化鍵データベース211を保持する。暗号化鍵データベース211は、閲覧機200のメモリ502及び/又は補助記憶装置503に格納されている。暗号化鍵データベース211は、鍵配布機400から受信した暗号化鍵を保持する。
【0041】
図3Dは、管理機300の機能構成例を示すブロック図である。管理機300は、例えば、暗号文管理部301及びデータ比較部302を含む。暗号文管理部301及びデータ比較部302は、管理機300のCPU501のプロセッサに含まれる。暗号文管理部301は、登録機100から受信した暗号化データを管理する。データ比較部302は、登録機100から受信した暗号化データと、閲覧機200から受信した暗号化クエリと、を比較する。
【0042】
管理機300は、例えば暗号文データベース311を保持する。暗号文データベース311は、管理機300のメモリ502及び/又は補助記憶装置503に格納されている。暗号文データベース311は、登録機100から受信した暗号化データを保持する。
【0043】
図3Eは、鍵配布機400の機能構成例を示すブロック図である。鍵配布機400は、例えば、暗号化鍵管理部401を含む。暗号化鍵管理部401は、鍵配布機400のCPU501のプロセッサに含まれる。暗号化鍵管理部401は、暗号化データ生成処理、暗号化クエリ生成処理、及び暗号化データと暗号化クエリとの比較処理に用いられる暗号化鍵を管理する。
【0044】
鍵配布機400は、暗号化鍵データベース411を保持する。暗号化鍵データベース411は、鍵配布機400のメモリ502及び/又は補助記憶装置503に格納されている。暗号化鍵データベース411は、暗号化鍵を保持する。
以下、暗号化データ比較判定システムによる処理の一例を説明する。当該処理は、データ登録処理と、データ比較判定処理と、を含む。
【0045】
図4は、データ登録処理の一例を示すシーケンス図である。登録機100の暗号化鍵管理部101は、鍵配布機400に対して暗号化鍵の送信を要求する(S110)。鍵配布機400の暗号化鍵管理部401は、暗号化鍵データベース411に格納された暗号化鍵を登録機100に送付し、登録機100の暗号化鍵管理部101は受信した暗号化鍵を暗号化鍵データベース112に格納する(S410)。
【0046】
登録機100の暗号化データ生成部102は、暗号化する診療データ111の項目を指定する(S120)。具体的には、例えば、暗号化データ生成部102は、登録機100のユーザの入力に従って、項目を指定する。前述した
図2Aの例では、暗号化データ生成部102は、例えば「生年月日」や「入院日数」等の項目を指定する。
【0047】
登録機100の暗号化データ生成部102は、ステップS110で送付された暗号化鍵を用いて、暗号化データを生成する(S130)。暗号化データ生成処理の詳細は、
図6と
図7を用いて後述する。
【0048】
暗号化データ生成部102は、ステップS130で生成した暗号化データを管理機300に送付する(S140)。管理機300の暗号文管理部301は、ステップS140で送付された暗号文を暗号文データベース311に登録する(S310)。暗号文管理部301は、ステップS310における登録処理の結果を登録機100に送付する(S320)。
【0049】
なお、上述の処理手順はあくまで一例であり、必要に応じて処理順序や処理内容が変更されてもよい。例えば、登録機100と鍵配布機400が同一の主体に属している場合には、鍵配布機400が登録機100に暗号化鍵を送付することなく、登録機100が予め暗号化鍵を有している等、一部の処理を省いてもよい。
【0050】
図5は、データ比較処理の一例を示すシーケンス図である。閲覧機200の暗号化鍵管理部201は、鍵配布機400に対して暗号化鍵を要求する(S210)。鍵配布機400の暗号化鍵管理部401は、暗号化鍵データベース411に格納された暗号化鍵を閲覧機200に送付し、閲覧機200の暗号化鍵管理部201は受信した暗号化鍵を暗号化鍵データベース211に格納する(S460)。
【0051】
閲覧機200の暗号化クエリ生成部202は、暗号化された診療データの範囲及び/又は項目を指定する(S220)。具体的には、例えば、暗号化クエリ生成部202は、閲覧機200のユーザの入力に従って、範囲及び/又は項目を指定する。前述した
図2Aの例では、暗号化クエリ生成部202は、例えば「生年月日」や「入院日数」等の項目を指定する。また、暗号化クエリ生成部202は、例えば、入院日数が「20日以上」や、生年月日が「1970年以降」のように、値の範囲を指定する。
【0052】
暗号化クエリ生成部202は、ステップS220で指定された項目と範囲を要求するデータを作成し、ステップS460で送付された暗号化鍵を用いてこれを暗号化する(S230)。暗号化クエリ生成処理の詳細は、
図8と
図9を用いて後述する。以下、この要求データをクエリと呼び、暗号化されたクエリを暗号化クエリと呼ぶ。暗号化クエリ生成部202は、ステップS240で作成した暗号化クエリを管理機300に送付する(S240)。
【0053】
管理機300のデータ比較部302は、暗号化クエリにおいて指定された項目を暗号文データベース311に格納された暗号化データから探し出す(S360)。例えば、
図2Aの例において、「生年月日」や「入院日数」等の項目が指定された場合、データ比較部302は、「生年月日」や「入院日数」に関係する暗号化データを、暗号化クエリの比較対象として抽出する。
【0054】
データ比較部302は、暗号化クエリで指定された診療データの項目において、暗号化データと暗号化クエリを比較し、その結果から、暗号化データを抽出する(S370)。例えば、
図2Aの例において、データ比較部302は、入院日数が「20日以上」または生年月日が「1970年以降」を満たす暗号化クエリと暗号化データを比較し、それらの条件を満たす暗号化データを
図2Cの例のように抽出する。データ比較処理の詳細は、
図10と
図11を用いて後述する。
【0055】
データ比較部302は、抽出した暗号化データを閲覧機200へ送付する(S380)。閲覧機200の復号処理部203は、ステップS460で送付された暗号化鍵を用いて、送付された暗号化データを復号する(S250)。以上の処理により、管理機300へ診療データの平文を明かすことなく、閲覧機200は所望する暗号化データを取得することができる。
【0056】
なお、上述の処理手順はあくまで一例であり、必要に応じて処理順序や処理内容が変更されてもよい。例えば、閲覧機200と鍵配布機400が同一の主体に属している場合には、鍵配布機400が閲覧機200に暗号化鍵を送付することなく、閲覧機200が予め暗号化鍵を有している等、一部の処理を省いてもよい
【0057】
図6は、ステップS130における暗号化データ生成処理の一例を示すフローチャートである。まず、データはnビットのデータとし、記号(m
nm
n-1…m
1)で表す。m
nを最上位ビット、m
1を最下位ビットとする。各ビットの値は0又は1である。なお、データのビット数がnビットに満たない場合は、暗号化データ生成部102は、例えば、予め所定のパディング操作を施すことにより、当該データをnビットのデータへと変換しておく。
【0058】
暗号化データ生成部102は、変数iの値をnに初期化する(S1300)。暗号化データ生成部102は、乱数r(例えば128ビット程度)を生成する(S1301)。暗号化データ生成部102は、データのmnからmiまでを取り出す(S1302)。
【0059】
暗号化データ生成部102は、mnmn-1…mi(=mi’)と、ステップS410において鍵配布機400から受信した秘密鍵sk1と、を連結し、そのハッシュ値を求める(S1303)。なお、ステップS1302~ステップS1309の処理はループして1回以上行われるが、各ループにおいて実行されるステップS1303のハッシュ関数は同じ関数が用いられる。
【0060】
暗号化データ生成部102は、ステップS1303で求めたハッシュ値と乱数rとを連結し、そのハッシュ値を求める(S1304)。なお、ステップS1302~ステップS1309の処理はループして1回以上行われるが、各ループにおいて実行されるステップS1304のハッシュ関数は同じ関数が用いられる。なお、ステップS1303及びステップS1304において用いられるハッシュ関数は同じであってもよいし、異なってもよい。暗号化データ生成部102は、ステップS1304で求めたハッシュ値とmiとのxor算を行い(つまり平文データと平文クエリとの大小比較の結果をあらかじめ暗号化データに埋め込む)、その演算結果を保存する(S1305)。
【0061】
暗号化データ生成部102は、データmiの平文におけるビット位置iの関係を隠すため、例えばステップS410において鍵配布機400から受信した秘密鍵sk2を用いて、ステップS1305で求めた値の位置iのシャッフルを行う(S1306)。なお、本実施形態におけるシャッフルにおいてシャッフル後の位置は重複しないものとする。
【0062】
具体的には、例えば、暗号化データ生成部102は、変数iの値を1以上n以下の値に置換する。この置換は、前述した通り秘密鍵sk2を用いた疑似ランダム関数を用いてもよい。また、暗号化データ生成部102は、変数iの置換前と置換後の2列の値からなる置換表を用いて、変数iの値を置換してもよい。この場合、置換表そのものが秘密鍵sk2である。暗号化データ生成部102は、置換された変数iの値を変数jに保存する。なお、秘密鍵sk1と秘密鍵sk2が同じであってもよいが、異なる秘密鍵とした方が暗号化データの安全性が高まる。
【0063】
暗号化データ生成部102は、ステップS1305における出力値をcjとして保存する(S1307)。暗号化データ生成部102は、変数iの値を1減らす(S1308)。暗号化データ生成部102は、デクリメント後の変数iの値が1未満であるか否かを判定する(S1309)。
【0064】
暗号化データ生成部102は、デクリメント後の変数iの値が1以上とあると判定した場合(ステップS1309:No)、ステップS1301に戻る。暗号化データ生成部102は、デクリメント後の変数iの値が1未満であると判定した場合(S1309:Yes)、乱数rと作成したn個のcjを暗号化データ(rcncn-1…c1)として出力し(S1310)、暗号化データ生成処理を終了する。
【0065】
図7は、
図6で説明した暗号化データ生成処理の具体例を示す説明図である。10進数の整数10の暗号化データを生成する処理の例を説明する。10進数の整数10は4ビットのデータとして(1011)で表せる。また、ステップS1306におけるシャッフルで用いられる秘密鍵sk
2は、4を3に、3を2に、2を4に、1を1に、それぞれ置換する。
【0066】
なお、以下、複数回のループ処理が行われる場合において、例えば、1回目のステップS1302をステップS1302a、2回目のステップS1302をステップS1302b、3回目のステップS1302をステップS1302c、4回目のステップS1302をステップS1302d、のように記載する。
【0067】
まず、暗号化データ生成部102は、変数iを4に初期化する(S1300)暗号化データ生成部102は、乱数rを生成する(S1301)。以下、最上位のビットから順にステップS1302~ステップS1309の処理が実行される。
【0068】
暗号化データ生成部102は、データからm4の値である1を取り出す(S1302a)。暗号化データ生成部102は、m4の値1と秘密鍵sk1を連結し、そのハッシュ値Hsk1(1)を求める(S1303a)。暗号化データ生成部102は、ステップS1303で求めたハッシュ値Hsk1(1)と乱数rを連結し、そのハッシュ値Hr(Hsk1(1))を求める(S1304a)。
【0069】
暗号化データ生成部102は、ステップS1304aで求めたハッシュ値と、m4の値1とのxor算を行い、Hr(Hsk1(1)) xor 1を求める(S1305a)。暗号化データ生成部102は、変数iの値を4から3に置換し、変数jとして保存する(S1306a)。暗号化データ生成部102は、ステップS1305aで求めた値をc3として保存する(S1307a)。暗号化データ生成部102は、変数iの値を4から1減らし、3にする(S1308a)。デクリメント後の値が1以上なのでS1302bへ遷移する(S1308)。
【0070】
暗号化データ生成部102は、データからm4の値である1、m3の値である0を取り出す(S1302b)暗号化データ生成部102は、m4の値1とm3の値0、秘密鍵sk1を連結し、そのハッシュ値Hsk1(10)を求める(S1303b)。暗号化データ生成部102は、ステップS1303で求めたハッシュ値Hsk1(10)と乱数rを連結し、そのハッシュ値Hr(Hsk1(10))を求める(S1304b)。
【0071】
暗号化データ生成部102は、ステップS1304bで求めたハッシュ値と、m3の値0とのxor算を行い、Hr(Hsk1(10)) xor 0=Hr(Hsk1(10))を求める(S1305b)。暗号化データ生成部102は、変数iの値を3から2に置換し、変数jとして保存する(S1306b)。暗号化データ生成部102は、ステップS1305aで求めた値をc2として保存する(S1307b)。暗号化データ生成部102は、変数iの値を3から1減らし、2にする(S1308b)。デクリメント後の値が1以上なのでS1302cへ遷移する。
【0072】
暗号化データ生成部102は、データからm4の値である1、m3の値である0、m2の値である1を取り出す(S1302c)。暗号化データ生成部102は、m4の値1、m3の値0、m2の値1、及び秘密鍵sk1を連結し、そのハッシュ値Hsk1(101)を求める(S1303c)。暗号化データ生成部102は、ステップS1303で求めたハッシュ値Hsk1(101)と乱数rを連結し、そのハッシュ値Hr(Hsk1(101))を求める(S1304c)。
【0073】
暗号化データ生成部102は、ステップS1304cで求めたハッシュ値とm2の値1とのxor算を行い、Hr(Hsk1(101)) xor 1を求める(S1305c)。暗号化データ生成部102は、変数iの値を2から4に置換し、変数jとして保存する(S1306c)。暗号化データ生成部102は、ステップS1305aで求めた値をc4として保存する(S1307c)。暗号化データ生成部102は、変数iの値を2から1減らし、1にする(S1308c)。デクリメント後の値が1以上なのでS1302bへ進む。
【0074】
暗号化データ生成部102は、データからm4の値である1、m3の値である0、m2の値である1、m1の値1を取り出す(S1302d)。暗号化データ生成部102は、m4の値1、m3の値0、m2の値1、m1の値1、及び秘密鍵hkを連結し、そのハッシュ値Hsk1(1011)を求める(S1303d)。暗号化データ生成部102は、ステップS1303で求めたハッシュ値Hsk1(1011)と乱数rを連結し、そのハッシュ値Hr(Hsk1(1011))を求める(S1304d)。
【0075】
暗号化データ生成部102は、ステップS1304dで求めたハッシュ値と、m1の値1とのxor算を行い、Hr(Hsk1(1011)) xor 1を求める(S1305d)。暗号化データ生成部102は、変数iの値を1から1に置換し、変数jとして保存する(S1306d)。暗号化データ生成部102は、ステップS1305aで求めた値をc1として保存する(S1307d)。
【0076】
暗号化データ生成部102は、変数iの値を1から1減らし、0にする。デクリメント後の値が1未満なのでステップS1309へ進む。暗号化データ生成部102は、暗号化データとして(rc4c3c2c1)を出力する(S1310)。
【0077】
図8は、ステップS230における暗号化クエリ生成処理の一例を示すフローチャートである。クエリはnビットのデータとし、記号(w
nw
n-1…w
1)で表す。w
nを最上位ビット、w
1を最下位ビットとする。各ビットの値は0又は1である。なお、クエリのビット数がnビットに満たない場合は、暗号化クエリ生成部202は、例えば、予め所定のパディング操作を施すことにより、当該データをnビットのデータへと変換しておく。
【0078】
暗号化クエリ生成部202は、変数iの値をnに初期化する(S2400)。暗号化クエリ生成部202は、クエリのwnからwiまでを取り出す(S2401)。暗号化クエリ生成部202は、wi xor 1を計算し(つまりビットが反転され、元のwiと異なる値に変化する)、wi’として保存する(S2402)。
【0079】
暗号化クエリ生成部202は、wnwn-1…wi+1wi’と、ステップS460で鍵配布機400から受信した秘密鍵sk1と、を連結し、そのハッシュ値を求める(S2403)。なお、ステップS1303とステップS2403で用いられる秘密鍵は同じである。また、ステップS2403で用いられるハッシュ関数は、ステップS1303で用いられるハッシュ関数と同じである。
【0080】
暗号化クエリ生成部202は、データwiの平文におけるビット位置iの関係を隠すため、例えば、ステップS460で鍵配布機400から受信した秘密鍵sk2を用いて、ステップS2403で求めた値の位置iのシャッフルを行う(S2404)。そして、暗号化クエリ生成部202は、置換された変数iの値を変数jに保存する。なお、ステップS2403におけるシャッフルの方法及びシャッフルに用いられる秘密鍵は、ステップS1306と同じである。
【0081】
暗号化クエリ生成部202は、ステップS2403で求めたハッシュ値をqjとして保存する(S2405)。暗号化クエリ生成部202は、変数iの値を1減らす(S2406)。暗号化クエリ生成部202は、デクリメント後の変数iの値が1以下であるか否かを判定する(S2407)。
【0082】
暗号化クエリ生成部202は、デクリメント後の値が1以上であると判定した場合(S2407:No)、ステップS2401に戻る。暗号化クエリ生成部202は、デクリメント後の値が1未満であると判定した場合(S2407:Yes)、作成したn個のqjを暗号化クエリ(qnqn-1…q1)として出力すし(S2408)、暗号化クエリ生成処理を終了する。
【0083】
図9は、
図8で説明した暗号化クエリ生成処理の具体例を示す説明図である。10進数の整数10の暗号化クエリの作成処理の一例を説明する。10進数の整数10は4ビットのクエリとして(1010)で表せる。
【0084】
また、ステップS2404におけるシャッフルで用いられる秘密鍵sk2は、4を3に、3を2に、2を4に、1を1に、それぞれ置換する。まず、暗号化クエリ生成部202は変数iを4に初期化する(S2400)。以下、最上位のビットから順にステップS2401~ステップS2407の処理が実行される。
【0085】
暗号化クエリ生成部202は、クエリからw4の値である1を取り出す(S2401a)暗号化クエリ生成部202は、w4 xor 1(=0)を計算し、w4’として0を保存する(S2402a)暗号化クエリ生成部202は、w4’の値0と秘密鍵sk1とを連結し、そのハッシュ値Hsk1(0)を求める(S2403a)。
【0086】
暗号化クエリ生成部202は、変数iの値を4から3に置換し、変数jとして保存する(S2404a)。暗号化クエリ生成部202は、ステップS2403aで求めたハッシュ値Hsk1(0)をq3として保存する(S2405a)。暗号化クエリ生成部202は、変数iの値を4から1減らし(S2406a)、3にする。デクリメント後の値が1以上なのでステップS2401bへ遷移する。
【0087】
暗号化クエリ生成部202は、クエリからw4の値である1、w3の値である0を取り出す(S2401b)。暗号化クエリ生成部202は、w3 xor 1(=1)を計算し、w3’として1を保存する(S2402b)。暗号化クエリ生成部202は、w4w3’の値11と秘密鍵sk1とを連結し、そのハッシュ値Hsk1(11)を求める(S2403b)。暗号化クエリ生成部202は、変数iの値を3から2に置換し、変数jとして保存する(S2404b)。
【0088】
暗号化クエリ生成部202は、ステップS2403bで求めたハッシュ値Hsk1(11)をq2として保存する(S2405b)。暗号化クエリ生成部202は、変数iの値を3から1減らし、2にする(S2406c)。デクリメント後の値が1以上なのでステップS2401cへ遷移する。
【0089】
暗号化クエリ生成部202は、クエリからw4の値である1、w3の値である0、w2の値である1を取り出す(S2401c)。暗号化クエリ生成部202は、w2 xor 1(=0)を計算し、w2’として0を保存する(S2402c)。暗号化クエリ生成部202は、w4w3w2’の値100と秘密鍵sk1を連結し、そのハッシュ値Hsk1(100)を求める(S2403c)。暗号化クエリ生成部202は、変数iの値を2から4に置換し、変数jとして保存する(S2404c)。
【0090】
暗号化クエリ生成部202は、ステップS2404cで求めたハッシュ値Hsk1(100)をq4として保存する(S2405c)。暗号化クエリ生成部202は、変数iの値を2から1減らし、1にする(S2406c)。デクリメント後の値が1以上なのでステップS2401dへ遷移する。暗号化クエリ生成部202は、クエリからw4の値である1、w3の値である0、w2の値である1、w1の値である0を取り出す(S2401d)。
【0091】
暗号化クエリ生成部202は、w1 xor 1(=1)を計算し、w1’として1を保存する(S2402d)。暗号化クエリ生成部202は、w4w3w2w1’の値1011と秘密鍵hkを連結し、そのハッシュ値Hsk1(1011)を求める(S2403d)。暗号化クエリ生成部202は、変数iの値を1から1に置換し、変数jとして保存する(S2404d)。
【0092】
暗号化クエリ生成部202は、ステップS2404dで求めたハッシュ値Hsk1(1011)をq1として保存する(S2405d)。暗号化クエリ生成部202は、変数iの値を1から1減らし、0にする。デクリメント後の値が1未満なので、暗号化クエリ生成部202は、暗号化クエリとしてq4q3q2q1を出力する(S2407a)。
【0093】
図10は、ステップS370における暗号化データと暗号化クエリの比較処理の一例を示すフローチャートである。データ比較部302は、変数iの値をnに初期化する(S3700)。データ比較部302は、暗号化データから乱数rを取り出す(S3701)データ比較部302は、暗号化データからc
iを、暗号化クエリからq
iを取り出す(S3702)。
【0094】
データ比較部302は、qiと乱数rを連結し、そのハッシュ値Hr(qi)を求める(S3703)。データ比較部302は、ステップS1305で求めたハッシュ値を整数とみなし、その整数とciとの排他的論理和を求める(S3704)。なお、ステップS3704において用いられるハッシュ関数は、ステップS1304で用いられるハッシュ関数と同じである。
【0095】
データ比較部302は、ステップS3074で求めた値が1又は0であるかを判定する(S3075)。データ比較部302は、ステップS3074で求めた値が1又は0のいずれかであるかを判定した場合(S3075:Yes)、ステップS3704で求めた値に応じた比較処理結果を出力し(S3708)、データ比較処理を終了する。
【0096】
データ比較部302は、ステップS3074で求めた値が1又は0のいずれでもないと判定した場合(S3705:No)、変数iの値を1減らす(S3706)。データ比較部302は、デクリメント後の変数iの値が1未満であるか否かを判定する(S3707)。データ比較部302は、デクリメント後の変数iの値が1以上であると判定した場合(S3706:No)、ステップS3702に戻る。データ比較部302は、デクリメント後の変数iの値が1未満であると判定した場合(S3706:Yes)、ステップS3708の処理を実行して、データ比較処理を終了する。
【0097】
なお、ステップS3708において、データ比較部302は、ステップS3704で求めた値が1ならば、平文はクエリより大きいと判定し、当該値が0ならば、平文はクエリより小さいと判定し、当該値がそれ以外の値(即ち乱数が出現)ならば、平文はクエリと等しいと判定とする。
【0098】
図11は、
図10で説明した暗号化データと暗号化クエリの比較処理の具体例を示す説明図である。
図7では、データ(1011)の暗号化処理を示し、
図9では、クエリ(1010)の暗号化処理を示した。
図11は、この暗号化データとこの暗号化クエリを比較する処理の一例を示すなお、1011>1010なので、
図11の例では、最終的にはデータがクエリより大きいと判断された比較結果が出力される。
【0099】
まず、データ比較部302は変数iを4に初期化する(S3700)。データ比較部302は暗号化データから乱数rを取り出す(S3701)。以下、最上位のビットから順にステップS3701~ステップS3707の処理が実行される。
【0100】
データ比較部302は暗号化クエリからq4を取り出す(S3702a)。q4はハッシュ値Hsk1(100)である。データ比較部302はq4の値Hsk1(100)と乱数rを連結し、そのハッシュ値Hr(Hsk1(100))を求める(S3703a)。
【0101】
データ比較部302は、暗号化データからc4を取り出し、その値Hr(Hsk1(101)) xor 1と、ステップS3703aで求めたハッシュ値Hr(Hsk1(100))と、のxor算を行う(S3704a)。ここで、値(101)のハッシュ値と値(100)のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このxor算の結果は二つの異なるハッシュ値をxor算した、乱数が出力される。
【0102】
従って、データ比較部302は、ステップS3704aで出力された値が1又は0のいずれでもないと判定する(S3705a)。データ比較部302は、変数iの値を4から1減らし(S3706a)、3にする。デクリメント後の値が1以上なので、S3702bへ遷移する。
【0103】
データ比較部302は、暗号化クエリからq3を取り出す(S3702b)。q3はハッシュ値Hsk1(0)である。データ比較部302は、q3の値Hsk1(0)と乱数rとを連結し、そのハッシュ値Hr(Hsk1(0))を求める(S3703b)。
【0104】
データ比較部302は、暗号化データからc3を取り出し、その値Hr(Hsk1(1)) xor 1と、ステップS3703bで求めたハッシュ値Hr(Hsk1(0))と、のxor算を行う(S3704b)。ハッシュ関数に入力された値が(0)と(1)で異なるので、適切なハッシュ関数を使う限り、このxor算は乱数を出力する。
【0105】
従って、データ比較部302は、ステップS3704bで出力された値が1又は0のいずれでもないと判定する(S3705b)。データ比較部302は、変数iの値を3から1減らし(S3706b)、2にする。デクリメント後の値が1以上なので、ステップS3702cへ遷移する。
【0106】
データ比較部302は、暗号化クエリからq2を取り出す(S3702c)。q2はハッシュ値Hsk1(11)である。データ比較部302はq2の値Hsk1(11)と乱数rとを連結し、そのハッシュ値Hr(Hsk1(11))を求める(S3703b)。
【0107】
データ比較部302は、暗号化データからc2を取り出し、その値Hr(Hsk1(10))と、ステップS3703cで求めたハッシュ値Hr(Hsk1(11))と、のxor算を行う(S3704c)。ハッシュ関数に入力された値が(10)と(11)で異なるので、適切なハッシュ関数を使う限り、このxor算は乱数を出力する。
【0108】
従って、データ比較部302は、ステップS3704cで出力された値が1又は0のいずれでもないと判定する(S3705c)。データ比較部302は、変数iの値を2から1減らし、1にする(S3706c)。デクリメント後の値が1以上なので、ステップS3702dへ遷移する。
【0109】
データ比較部302は、暗号化クエリからq1を取り出す(S3702d)。q1はハッシュ値Hsk1(1011)である。データ比較部302はq1の値Hsk1(1011)と乱数rとを連結し、そのハッシュ値Hr(Hsk1(1011))を求める(S3703b)。
【0110】
データ比較部302は、暗号化データからc1を取り出し、その値Hr(Hsk1(1011)) xor 1と、ステップS3703bで求めたハッシュ値Hr(Hsk1(11))と、のxor算を行う(S3704d)。ハッシュ関数に入力された値が(1011)と(1011)で等しいので、ハッシュ値も同じであり、このxor算では1が出力される。
【0111】
データ比較部302は、ステップS3704dで出力された値が1であるので、ステップS3708へ進む(S3705d)。データ比較部302は、ステップS3704dで出力された値が1であるので、暗号化データが暗号化クエリより大きい、という比較結果を出力する(S3708)。
【0112】
このように、データ比較部302は、データ(1011)がクエリ(1010)より大きいとする大小関係を、暗号化データと暗号化クエリを暗号化したまま比較することにより得ることができる。
【0113】
この例が示すように、本実施例では、ステップS3705において1ビット単位での大小比較が行われ、大小が判明するまではステップS3704において乱数が出力され、1又は0が出現することにより大小比較結果が判明する。従って、データ比較部302は、暗号化データと暗号化クエリの元の値の類似性を隠したまま大小比較の結果を得ることができる。
【0114】
また、本実施例の暗号化データ比較システムは、ビット位置をシャッフルして暗号化を実行するため、暗号化データのどのブロック(C4やC3など)が、元のデータどのビット位置(上位ビットや下位ビット)に該当するかを隠すことができる。
【0115】
なお、上述した例では、データ比較部302は、上位ビットから順に暗号化データと暗号化クエリとの比較を行ったが、どのビットから順に比較を行ってもよい。
【0116】
また、上述した例では、暗号化データ生成と暗号化クエリ生成において同じ秘密鍵sk2を用いてシャッフル(即ち同じ置換)が行われていたが、暗号化クエリ生成部202は秘密鍵sk2を用いたシャッフルを実行しなくてもよい。この場合、例えば、暗号化クエリ生成部202は、全てのシャッフルパターンの暗号化クエリを生成しておき、データ比較部302は、暗号化データと、全てのシャッフルパターンの暗号化クエリデータそれぞれと、を比較すれば、暗号化データと暗号化クエリの同一の桁の値を比較することができる。
【0117】
また、このような場合において、暗号化データ生成部102は、秘密鍵を用いずにシャッフルを行ってもよい。具体的には、例えば、暗号化データ生成部102は、ステップS1304においてに出力されるハッシュ値の大きいビットほど上位ビットになるようシャッフルを実行してもよい。
【実施例2】
【0118】
実施例1では、1ビット単位での大小比較において、暗号化データに比較結果をあらかじめ埋め込み、大小が判明するまではその比較結果を出力せずに乱数を出力し、大小が判明した場合にのみ、比較結果(1又は0)を出力することにより、暗号化データと暗号化クエリの元の値の類似性を隠しながら、比較結果のみを出力することを示した。
【0119】
実施例2では、データを1ビットよりも大きなビット数で暗号化しても比較結果を評価可能であること、そして暗号化データに比較結果を埋め込む代わりに、暗号化クエリに比較結果を埋め込んでも、暗号化データと暗号化クエリの元の値の類似性を隠しながら、比較結果のみを出力することを示す。
【0120】
実施例2の手法は、暗号化するデータのビット数に制限はないが、簡単のため、具体例としてデータが1ビットで表現可能な0と1の2進数ではなく、0と1と2の3進数で暗号化する例を示す。実施例2の暗号化データ比較判定システム及び暗号化データ比較判定システムに含まれる各装置の構成例は、実施例1と同様である。以下では、実施例1と異なる処理について説明する。
【0121】
図12は、ステップS130における暗号化データ生成処理の一例を示すフローチャートである。本実施例では、データはn個の3進数で表され、記号(m
nm
n-1…m
1)で表される。m
nは最上位ブロック、m
1を最下位ブロックであり、各ブロックの値は0、1、又は2である。
【0122】
図12におけるデータ暗号化処理は、以下の点を除いて、実施例1におけるデータ暗号化処理(
図6)と同様である。本実施例のデータ暗号化処理においては、ステップS1305の処理(暗号化データへの比較結果の埋め込み)が実行されない。また、ステップS1307の処理の代わりに、暗号化データ生成部102は、ステップS1304で求めたハッシュ値をc
jとして保存する処理を実行する(S1407)。
【0123】
図13は、暗号化データ生成処理の具体例を示す説明図である。10進数の整数5の暗号化データの生成処理を説明する。3進数を用いた場合、10進数の整数5は2ブロックのデータ(12)で表せる。
【0124】
暗号化データ生成部102は、変数iをブロック数の2に初期化する(S1300a)。暗号化データ生成部102は、乱数rを生成する(S1301a)。暗号化データ生成部102は、データからm2の値である1を取り出す(S1302a)。暗号化データ生成部102は、m2の値1と秘密鍵sk1を連結し、そのハッシュ値Hsk1(1)を求める(S1303a)。
【0125】
暗号化データ生成部102は、ステップsS1303で求めたハッシュ値H
sk1(1)と乱数rとを連結し、そのハッシュ値H
r(H
sk1(1))を求める(S1304a)。暗号化データ生成部102は、変数iの値2を1以上3未満の値(すなわち、1か2)に置換し、変数jに保存する(S1306a)。
図13の例では、秘密鍵sk
2によって変数iの値2が2に(たまたま同じ値に)置換される。
【0126】
暗号化データ生成部102は、ステップS1304aで求めた値をc1として保存する(S1407a)。暗号化データ生成部102は、変数iの値を2から1減らし、1にする(S1308a)。デクリメント後の値が1以上なのでステップS1302bへ遷移する。
【0127】
暗号化データ生成部102は、データからm2の値である1、m1の値である2を取り出す(S1302b)。暗号化データ生成部102は、m2の値1、m1の値2、及び秘密鍵sk1を連結し、そのハッシュ値Hsk1(10)を求める(S1303b)。
【0128】
暗号化データ生成部102は、S1303で求めたハッシュ値H
sk1(12)と乱数rとを連結し、そのハッシュ値H
r(H
sk1(12))を求める(S1304b)。暗号化データ生成部102は、変数iの値を1から1以上3未満の値(すなわち、1か2)に置換し、変数jに保存する(S1306b)。
図13の例では、秘密鍵sk
2によって変数iの値が1から1に(たまたま同じ値に)置換した変数jとして保存する。
【0129】
暗号化データ生成部102は、ステップS1304bで求めた値をc2として保存する(S1407b)。暗号化データ生成部102は、変数iの値を2から1減らし、0にする。デクリメント後の値が1未満なので、暗号化データ生成部102は、暗号化データとして(rc2c1)を出力する(S1309)。
【0130】
図14は、ステップS230における暗号化クエリ生成処理の一例を示すフローチャートである。まず、クエリはnブロックのp進数のデータとし、記号(w
nw
n-1…w
1)で表す。w
nを最上位ブロック、w
1を最下位ブロックとする。各ブロックの値は0,1,2、・・・又は(p-1)のいずれかである。
【0131】
暗号化クエリ生成部202は、変数iの値をnに初期化する(S2500)。暗号化クエリ生成部202は、変数sの値を1に初期化する(S2501)。暗号化クエリ生成部202は、クエリのwnからwiまでを取り出す(S2502)。暗号化クエリ生成部202は、wi+s(mod p)を計算し、w’(i,s)として保存する(つまりwiを異なる値に変換している)(S2503)。
【0132】
暗号化クエリ生成部202は、sとp、wiとw’(i,s)をそれぞれ整数とみなして大小比較する(S2504)。暗号化クエリ生成部202は、ステップS2504において、s<pかつwi<w’(i,s)、又はs>pかつwi>w’(i,s)であると判定した場合、暗号化クエリ生成部202は、wn・・・wi+1w’(i,s)と秘密鍵sk1とを連結し、そのハッシュ値を新たなw’(i,s)として保存し(S2505)、ステップS2507へ進む。
【0133】
暗号化クエリ生成部202は、ステップS2504において、s<pかつwi>w’(i,s)、又はs>pかつwi<w’(i,s)であると判定した場合、乱数を生成し、生成した乱数を新たなw’(i,s)として保存し(S2506)、ステップS2507へ進む。
【0134】
暗号化クエリ生成部202は、変数sが1以上p未満なら、変数sを1以上p未満の整数値に置換した値を変数tに保存し、変数sがp+1以上2p未満なら、変数sを(p+1)以上2p未満の整数値に置換した値を変数tに保存する(S2507)。このとき、暗号化クエリ生成部202は、w’(i,s)の値をq(i,t)に保存する。
【0135】
暗号化クエリ生成部202は、変数sの値を1増やす(S2508)。暗号化クエリ生成部202は、変数sの値と、pと、を比較する(S2509)。暗号化クエリ生成部202は、ステップS2509において変数sの値がpでなく、かつ2pでないと判定した場合、ステップS2503へ戻る。
【0136】
暗号化クエリ生成部202は、ステップS2509において変数sの値がpであると判定した場合、暗号化クエリ生成部202は、q(i,s)の値を1とし(クエリの平文の値を大小比較結果として埋め込み)、(S2510)、変数sをp+1に設定し(S2511)、ステップS2503に戻る。
【0137】
暗号化クエリ生成部202は、ステップS2509において変数sの値が2pであると判定した場合、q(i,s)の値を0とし(クエリの平文の値を大小比較結果として埋め込み)(S2512)、q(i,1),q(i,2),・・・q(i,2p)をまとめて暗号化クエリqiとし(S2513)、ステップS2514に進む。
【0138】
暗号化クエリ生成部202は、変数iの値を1減らす(S2514)。暗号化クエリ生成部202は、iが1未満であるかを判定する(S2515)。暗号化クエリ生成部202は、iが1以上であると判定した場合(S2515:No)、ステップS2501へ戻る。
【0139】
暗号化クエリ生成部202は、iが1未満であると判定した場合(S2515:Yes)、データwiのブロック位置iの関係を隠すため、暗号化クエリq1・・・qnの各ブロックをシャッフルする(S2516)。暗号化クエリ生成処理を終了する。置換の方法は、例えば実施例1と同様である。暗号化クエリ生成部202は、暗号化クエリとして、(qnqn-1・・・q1)を出力するし(S2517)、暗号化クエリ生成処理を終了する。
【0140】
図15は、暗号化クエリ生成処理の具体例を示す説明図である。整数3の暗号化クエリの生成処理の例を説明する。3進数を用いた場合、整数3は2ブロックのデータ(10)で表される。
【0141】
まず、クエリはnブロックの3進数のデータとし、記号(wn,wn-1……w1)で表す。wnを最上位ブロック、w1を最下位ブロックとする。各ブロックは0または1または2の値をもつ。
【0142】
暗号化クエリ生成部202は、変数iをブロック数の2に初期化する。また、pの値を3に設定する(S2500)。暗号化クエリ生成部202は、変数sを1に初期化する(S2501a)。暗号化クエリ生成部202は、ブロックw2の値1を取り出す(S2502a)。暗号化クエリ生成部202は、wi+s=1+1(mod 3)を計算し、その解である2をw’(2,1)として保存する(S2503a)。
【0143】
暗号化クエリ生成部202は、sとp、w2とw’(2,1)を整数とみなして大小比較する(s2504a)。sの値は2、pの値は3であるので、s<pが成り立つ。w2=1、w’(2,1)=2であるので、w2<w’(2,1)が成り立つ。従って、ステップS2505aへ進む。
【0144】
暗号化クエリ生成部202は、w’(2,1)の値2と秘密鍵sk1とを連結し、そのハッシュ値Hsk1(2)を新たなw’(2,1)として保存し(S2505a)、ステップS2507aへ進む。暗号化クエリ生成部202は、変数sが1であるので、変数sを1以上3未満の整数値に置換し、この変数sの値1を置換した値2を変数tに保存し、w’(2,1)をq(2,2)とする(S2507a)。暗号化クエリ生成部202は、変数sの値1を1増やし、2とする(S2508a)。2≠3であるので、s≠pかつs≠2pであり、S2503bへ遷移する。
【0145】
暗号化クエリ生成部202は、wi+s=1+2(mod 3)を計算し、その解である0をw’(2,2)として保存する(S2503b)。暗号化クエリ生成部202は、sとp、w2とw’(2,2)を整数とみなして大小比較する(s2504b)。sの値は2、pの値は3であるので、s<pが成り立つ。w2=1、w’(2,2)=0であるので、w2>w’(2,1)が成り立つ。従って、S2506bへ進む。
【0146】
暗号化クエリ生成部202は、乱数を生成し、生成した乱数を新たなw’(2,2)として保存し(S2506b)、ステップS2507bへ進む。暗号化クエリ生成部202は、変数sが2であるので、変数sを1以上3未満の整数値に置換し、さらにこの変数sの値2を置換した値1を変数tに保存し、w’(2,2)をq(2,1)とする(S2507b)。
【0147】
暗号化クエリ生成部202は、変数sの値2を1増やし、3とする(S2508b)。暗号化クエリ生成部202は、変数sの値3がpの値3と等しいと判断し、S2510bへ進む。暗号化クエリ生成部202は、q(2,3)=1とする(S2510b)。暗号化クエリ生成部202は、変数sの値をp+1=4に設定し(S2511b)、ステップS2503cへ遷移する。
【0148】
暗号化クエリ生成部202は、wi+s=1+4(mod 3)を計算し、その解である2をw’(2,4)として保存する(S2503c)。暗号化クエリ生成部202は、sとp、w2とw’(2,2)を整数とみなして大小比較する(S2504c)。sの値は4、pの値は3であるので、s>pが成り立つ。w2=1、w’(2,4)=2であるので、w2<w’(2,1)が成り立つ。従って、ステップS2506cへ進む。
【0149】
暗号化クエリ生成部202は、乱数を生成し、生成した乱数を新たなw’(2,2)として保存し(S2506c)、ステップS2507cへ進む。暗号化クエリ生成部202は、変数sが4であるので、4以上6未満の整数値に置換し、さらにこの変数sの値4を置換した値4を変数tに保存し、w’(2,4)をq(2,4)とする(S2507c)。暗号化クエリ生成部202は、変数sの値4を1増やし、5とする(S5408c)。5≠3かつ5≠6であるので、s≠pかつs≠2pが成り立ち、ステップS2503dへ遷移する。
【0150】
暗号化クエリ生成部202は、wi+s=1+5(mod 3)を計算し、その解である0をw’(2,5)として保存する(S2503d)。暗号化クエリ生成部202は、sとp、w2とw’(2,5)を整数とみなして大小比較する(s2504d)。sの値は5、pの値は3であるので、s>pが成り立つ。w2=1、w’(2,5)=0であるので、w2>w’(2,1)が成り立つ。従って、ステップS2505dへ遷移する。
【0151】
暗号化クエリ生成部202は、w’(2,5)の値0と秘密鍵sk1とを連結し、そのハッシュ値Hsk1(0)を新たなw’(2,5)として保存し(S2505d)、ステップS2507dへ進む。暗号化クエリ生成部202は、変数sの値が5であるので、4以上6未満の整数値に置換し、さらにこの変数sの値5を置換した値5を変数tに保存し、w’(2,5)をq(2,5)とする(S2507d)。
【0152】
暗号化クエリ生成部202は、変数sの値5を1増やし、6とする(S2508d)。6=2・3であるので、s=2pであり、ステップS2510dへ進む。暗号化クエリ生成部202は、変数sの値6が2pの値6と等しいと判断するため、q(2,6)=0とする(S2512d)。
【0153】
暗号化クエリ生成部202は、q(2,1)、q(2,2)、q(2,3)、q(2,4)、q(2,5)、q(2,6)の組を暗号化クエリq2とする(S2513d)。暗号化クエリ生成部202は、変数iの値2を1減らし、1とする(S2514d)。変数iの値はまだ1以上であるため、ステップS2501eへ遷移する。
【0154】
暗号化クエリ生成部202は、変数sを1に初期化する(S2501e)。暗号化クエリ生成部202は、ブロックw2w1の値10を取り出す(S2502e)。暗号化クエリ生成部202は、10+s=10+1(mod 3)を計算し、その解である11をw’(1,1)として保存する(S2503e)。
【0155】
暗号化クエリ生成部202は、sとp、w1とw’(1,1)を整数とみなして大小比較する(S2504e)。sの値は1、pの値は3であるので、s<pが成り立つ。w1=1、w’(1,1)=2であるので、w1<w’(1,1)が成り立つ。従って、ステップS2505eへ進む。
【0156】
暗号化クエリ生成部202は、w2w’(1,1)の値(11)と秘密鍵sk1とを連結し、そのハッシュ値Hsk1(11)を新たなw’(2,1)として保存し(S2505e)、ステップS2507eへ進む。
【0157】
暗号化クエリ生成部202は、変数sが1であるので、1以上3未満の整数値に置換し、さらにこの変数sの値1を置換した値1を変数tに保存し、w’(1,1)をq(1,1)とする(S2507e)。暗号化クエリ生成部202は、変数sの値1を1増やし、2とする(S2508e)。2≠3であるので、s≠pかつs≠2pであり、ステップS2503fへ遷移する。暗号化クエリ生成部202は、wi+s=0+2(mod 3)を計算し、その解である2をw’(1,2)として保存する(S2503f)。
【0158】
暗号化クエリ生成部202は、sとp、w2とw’(1,2)を整数とみなして大小比較する(S2504f)。sの値は1、pの値は3であるので、s<pが成り立つ。w2=0、w’(1,2)=2であるので、w2<w’(1,2)が成り立つ。従って、ステップS2505fへ進む。
【0159】
暗号化クエリ生成部202は、w2w’(1,2)の値(12)と秘密鍵sk1とを連結し、そのハッシュ値Hsk1(12)を新たなw’(2,2)として保存し(S2505f)、ステップS2507fへ進む。暗号化クエリ生成部202は、変数sが2であるので、1以上3未満の整数値に置換し、さらにこの変数sの値2を置換した値2を変数tに保存し、w’(1,2)をq(1,2)とする(S2507f)。
【0160】
暗号化クエリ生成部202は、変数sの値2を1増やし、3とする(S2508f)。3=3であるので、変数sの値3がpの値3と等しいと判断し、ステップS2510fへ進む。暗号化クエリ生成部202は、q(1,3)=1とする(S2510f)。暗号化クエリ生成部202は、変数sの値をp+1=4に設定し(S2511f)、ステップS2503gへ遷移する。
【0161】
暗号化クエリ生成部202は、wi+s=0+4(mod 3)を計算し、その解である1をw’(1,4)として保存する(S2503g)。暗号化クエリ生成部202は、sとp、w2とw’(1,4)を整数とみなして大小比較する(S2504g)。sの値は4、pの値は3であるので、s>pが成り立つ。w2=0、w’(1,4)=1であるので、w2<w’(1,4)が成り立つ。従って、ステップS2506gへ進む。
【0162】
暗号化クエリ生成部202は、乱数を生成し、その乱数を新たなw’(1,4)として保存し(S2506g)、ステップS2507gへ進む。暗号化クエリ生成部202は、変数sの値が4であるので、4以上6未満の整数値に置換し、さらにこの変数sの値4を置換した値5を変数tに保存し、w’(1,4)をq(1,5)とする(S2507g)。暗号化クエリ生成部202は、変数sの値4を1増やし、5とする(S2508g)。5≠3かつ5≠6であるので、s≠pかつs≠2pが成り立つため、ステップS2503hへ遷移する。
【0163】
暗号化クエリ生成部202は、wi+s=0+5(mod 3)を計算し、その解である2をw’(1,5)として保存する(S2503h)。暗号化クエリ生成部202は、sとp、w2とw’(1,5)を整数とみなして大小比較する(S2504h)。sの値は5、pの値は3であるので、s>pが成り立つ。w1=0、w’(1,5)=0であるので、w2>w’(1,5)が成り立つ。従って、ステップS2506hへ進む。
【0164】
暗号化クエリ生成部202は、乱数を生成し、その乱数を新たなw’(1,2)として保存し(S2506h)、ステップS2507gへ進む。暗号化クエリ生成部202は、変数sの値が5であるので、4以上6未満の整数値に置換し、さらにこの変数sの値5を置換した値4を変数tに保存し、w’(1,5)をq(1,4)とする(S2507h)。
【0165】
暗号化クエリ生成部202は、変数sの値5を1増やし、6とする(S2508h)。6=2・3であるので、変数sの値6が2pの値6と等しいと判断し、ステップS2512hへ進む。暗号化クエリ生成部202は、q(1,6)=0とする(S2512h)。暗号化クエリ生成部202は、q(1,1)、q(1,2)、q(1,3)、q(1,4)、q(1,5)、q(1,6)の組を暗号化クエリq1とする(S2513h)。
【0166】
暗号化クエリ生成部202は、変数iの値1を1減らし、0とする(S2514)。変数iの値が1未満であるため、ステップS2516へ進む。暗号化クエリ生成部202は、q
1とq
2をシャッフルする。
図15では、シャッフルした結果、q
1とq
2がたまたま入れ変わらなかった例を示している(S2516)。暗号化クエリ生成部202は、暗号化クエリとして、(q
2q
1)を出力する(S2517)。
【0167】
図16は、ステップS370における暗号化データと暗号化クエリとの比較処理の一例を示すフローチャートである。データ比較部302は、変数iの値をnに初期化する(S3800)。データ比較部302は、暗号化データから乱数rを取り出す(S3801)。データ比較部302は、暗号化データからc
i、暗号化クエリからq
iを取り出す(S3802)。データ比較部302は、変数sの値を1に初期化する(S3803)。
【0168】
データ比較部302は、qiからq(i,s)を取り出す(S3804)。データ比較部302は、q(i,s)と乱数rを連結し、そのハッシュ値Hr(q(i,s))を求める(S3805)。なお、ステップS3805で用いられるハッシュ関数は、ステップS1304で用いられるハッシュ関数と同じである。データ比較部302は、ステップS3805で求めたハッシュ値とciとの排他的論理和を求める(S3806)。データ比較部302は、ステップS3806で求めた排他的論理和の値が0であるかを判定する(S3807)。
【0169】
データ比較部302は、ステップS3806で求めた値が0であると判定した場合(S3807:Yes)、後述するステップS3813へ進む。データ比較部302は、ステップS3806で求めた値が0でないと判定した場合(S3807:No)、変数sの値を1増やす(S3808)。
【0170】
データ比較部302は、sとpとを比較する(S3809)。データ比較部302は、ステップS3809においてs=p又はs=2pのいずれでもないと判定した場合、ステップS3804に戻る。データ比較部302は、ステップS3809においてs=pであると判定した場合、変数sの値を1増やし(S3810)、ステップS3802に戻る。
【0171】
データ比較部302は、ステップS3809においてs=2pであると判定した場合、変数iの値を1減らし(S3811)、iが1未満であるかを判定する(S3812)。データ比較部302は、iが1以上であると判定した場合(S3811:No)、ステップS3804に戻る。データ比較部302は、iが1未満であると判定した場合(S3811:Yes)、ステップS3813へ進む。
【0172】
ステップS3813において、データ比較部302は、変数iの値がpより小さいと判定すれば「平文がクエリより大きい」ことを意味するq(i,p)、変数iの値がpより大いと判定すれば「暗号文がクエリより小さい」ことを意味するq(i,2p)、それ以外であると判定すれば「平文とクエリは等しい」ことを意味する出力を返す(S3813)。
【0173】
図17は、暗号化データと暗号化クエリとの比較処理の具体例を示す説明図である。
図17は、
図13の例で生成されたデータ(12)の暗号化データと、
図15の例で生成されたクエリ(10)の暗号化クエリと、を比較する例を説明する。なお、12>10なので、
図17の例では、最終的にはデータがクエリより大きいと判断された比較結果が出力される。
【0174】
データ比較部302は、変数iをブロック数2に初期化する(S3800)。データ比較部302は、暗号化データから乱数rを取り出す(S3801)。データ比較部302は、暗号化クエリからq2を取り出す(S3802)。
【0175】
データ比較部302は、変数sを1に初期化する(S3803a)。データ比較部302はq2からq(2,1)を取り出す(S3804a)。なお、q(2,1)には乱数R(2,2)が入力されている。データ比較部302は、q(2,1)の値であるR(2,2)と、乱数rと、を連結し、そのハッシュ値Hr(R(2,2))を求める(S3805a)。
【0176】
データ比較部302は、暗号化データからc2を取り出し、その値Hr(Hsk1(1))と、ステップS3703aで求めたハッシュ値Hr(R(2,2))と、のxor算を行う(S3806a)。値(1)のハッシュ値と乱数(R(2,2))のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このxor算の結果は2つの異なるハッシュ値をxor算した、乱数が出力される。
【0177】
データ比較部302は、ステップS3806aで出力された値が0でないことを確認するため(S3807a)、変数sの値を1増やし、2にする(S3808a)。インクリメント後の値が3(=p)でも6(=2p)でもないので、ステップS3804bへ遷移する。
【0178】
データ比較部302は、q2からq(2,2)を取り出す(S3804b)。q(2,2)にはハッシュ値Hsk1(2)が入力されている。データ比較部302は、q(2,2)の値Hsk1(2)と、乱数rと、を連結し、そのハッシュ値Hr(Hsk1(2))を求める(S3805b)。
【0179】
データ比較部302は、暗号化データからc2を取り出し、その値Hr(Hsk1(1))と、(S3703a)で求めたハッシュ値Hr(Hsk1(2))と、のxor算を行う(S3806b)。ハッシュ値(Hsk1(2))のハッシュ値と乱数(R(2,2))のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このxor算の結果は2つの異なるハッシュ値をxor算した、乱数が出力される。
【0180】
データ比較部302は、ステップS3706bで出力された値が0でないことを確認するため(S3807b)、変数sの値を1増やし、3にする(S3808b)。インクリメント後の値が3なので、データ比較部302は、変数sの値を1増やし、4にして(S3810)、ステップS3804cへ遷移する。
【0181】
データ比較部302は、q2からq(2,4)を取り出す(S3804c)。q(2,4)には乱数R(2,1)が入力されている。データ比較部302は、q(2,1)の値R(2,1)と、乱数rと、を連結し、そのハッシュ値Hr(R(2,1))を求める(S3805c)。
【0182】
データ比較部302は、暗号化データからc2を取り出し、その値Hr(Hsk1(1))と、ステップS3703cで求めたハッシュ値Hr(R(2,1))と、のxor算を行う(S3806c)。値(1)のハッシュ値と乱数(R(2,1))のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このxor算の結果は2つの異なるハッシュ値をxor算した、乱数が出力される。
【0183】
データ比較部302は、ステップS3706cで出力された値が0でないことを確認するため(S3807c)、変数sの値を1増やし、5にする(S3808c)。インクリメント後の値が3でも6でもないので、ステップS3804dへ遷移する。
【0184】
データ比較部302は、q2からq(2,5)を取り出す(S3804d)。q(2,5)にはハッシュ値Hsk1(0)が入力されている。データ比較部302は、q(2,5)の値Hsk1(0)と、乱数rと、を連結し、そのハッシュ値Hr(Hsk1(0))を求める(S3805d)。
【0185】
データ比較部302は、暗号化データからc2を取り出し、その値Hr(Hsk1(1))と、ステップS3703aで求めたハッシュ値Hr(Hsk1(0))と、のxor算を行う(S3706d)。ハッシュ値(Hsk1(1))のハッシュ値とハッシュ値(Hsk1(0))のハッシュ値は、適切なハッシュ関数を使う限り、値が重複する可能性は無視できるため、このxor算の結果は2つの異なるハッシュ値をxor算した、乱数が出力される。
【0186】
データ比較部302は、ステップS3706dで出力された値が0でないことを確認するため(S3807d)、変数sの値を1増やし、3にする(S3808)。インクリメント後の値が6なので、データ比較部302は、変数iの値を1減らし、0にして(S3810d)、ステップS3702eへ遷移する。
【0187】
データ比較部302は、暗号化クエリからq1を取り出す(S3802e)。データ比較部302は、変数sを1に初期化する(S3803e)。データ比較部302は、q1からq(1,1)を取り出す(S3804e)。q(1,1)にはハッシュ値Hsk1(12)が入力されている。
データ比較部302は、q(1,1)の値Hsk1(12)と、乱数rと、を連結し、そのハッシュ値Hr(Hsk1(12))を求める(S3805e)。
【0188】
データ比較部302は、暗号化データからc1を取り出し、その値Hr(Hsk1(12))と、ステップS3703eで求めたハッシュ値Hr(Hsk1(12))と、のxor算を行う(S3806e)。ハッシュ関数への入力値が同じため、ハッシュ値も同じである。従って、このxor算は0を出力する。
【0189】
データ比較部302は、ステップS3706aで出力された値が0であることを確認するため(S3807)、ステップS3813へ進む。データ比較部302は、変数iの値1がpの値3より小さいことを確認するため、「暗号化データが暗号化クエリより大きい」という比較結果を意味するq(1,3)を出力する(S3813)。
【0190】
このように、データ比較部302は、データ(12)がクエリ(10)より大きいとする大小関係を、暗号化データと暗号化クエリを暗号化したまま比較することにより得ることができる。
なお、前述した実施形態において、例えば、データの値は整数に限定されるものではなく、実数としてもよい。
【0191】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることも可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0192】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0193】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0194】
100 登録機、102 暗号化データ生成部、111 診療データ、112 暗号化鍵データベース、200 閲覧機、202 暗号化クエリ生成部202、211 暗号化鍵データベース、300 管理機、302 データ比較部、311 暗号文データベース、500 計算機、501 CPU、502 メモリ、503 補助記憶装置、504 通信装置、505 入力装置、506 出力装置