従来技術では、特定のユーザからのデータベースへのアクセスを制限するためには、秘密鍵が漏洩した場合と同様に、新たに秘密鍵を生成し、特定のユーザ以外のユーザに再度秘密鍵を配布する必要がある。また、新たな秘密鍵に対応したデータに変換する必要がある。
従来技術では、DBサーバにデータを登録する場合、DBサーバは、受信した秘匿データが正しい秘密鍵を用いて生成されたデータであるか否かを判定できない。そのため、秘密鍵の設定ミスに起因して、検索不可能な秘匿データがデータ管理サーバに登録される可能性がある。このような秘匿データが登録された場合、検索クライアントがデータを取得できず、また、データ管理サーバの記憶領域の使用量の増大及びデータ検索速度の低下の原因となる。
また、従来技術では、DBサーバは、不正な秘匿検索キーワードを受信した場合、検索を行うことができないためエラーを通知する。この場合、検索クライアントは、該当する秘匿データが存在しないと判定する可能性がある。
図1は、実施例1の検索可能暗号システムの構成例を示す図である。
検索可能暗号システムは、登録クライアント101、検索クライアント102、データ管理サーバ103、鍵管理サーバ104、及び管理クライアント105から構成される。システムを構成する各装置は、ネットワーク110を介して情報を送受信できるよう接続される。なお、ネットワーク110の種類としては、WAN(Wide Area Network)及びLAN(Local Area Network)等が考えられる。また、ネットワーク110の接続方式は、有線又は無線のいずれでもよい。
登録クライアント101は、確率的暗号化方式にしたがって平文データから出力用の秘匿データを生成し、データ管理サーバ103に秘匿データ(管理用の秘匿データ)を登録する。ここで、確率的暗号化方式は、平文データから、同値関係及び大小関係が秘匿されたランダムな暗号化データを生成する暗号化のアルゴリズムである。確率的暗号化方式では、平文及び暗号文が一対多の対応関係を有する。
検索クライアント102は、確率的暗号化方式にしたがって検索キーワード(平文データ)から出力用の秘匿検索キーワードを生成し、出力用の秘匿検索キーワードを含む検索要求をデータ管理サーバ103に送信する。
データ管理サーバ103は、秘匿データ532(図5参照)を格納し、また、検索要求に対応する秘匿データ532を検索する。
本実施例のデータ管理サーバ103は、任意の秘密鍵を用いて生成された暗号化データを別の秘密鍵を用いて生成された暗号化データに変換する機能を有する。具体的には、データ管理サーバ103は、登録クライアント101から受信した出力用の秘匿データを秘匿データ532に変換し、データベース503(図5参照)に格納する。また、データ管理サーバ103は、データベース503に格納された秘匿データ532を出力用の秘匿データに変換し、検索クライアント102に送信する。また、データ管理サーバ103は、出力用の秘匿検索キーワードを、データベース503を検索可能な秘匿検索キーワード(管理用の秘匿検索キーワード)に変換する。
鍵管理サーバ104は、本システムにおいて使用する秘密鍵を生成し、各装置に生成した秘密鍵を送信する。
管理クライアント105は、鍵管理サーバ104に、ユーザの追加、ユーザの失効、及び秘密鍵の更新等の要求を送信する。なお、鍵管理サーバ104が管理クライアント105の機能を有してもよい。
ここで、登録クライアント101、検索クライアント102、データ管理サーバ103、鍵管理サーバ104、及び管理クライアント105のハードウェア構成について説明する。図2は、実施例1の検索可能暗号システムを構成する計算機のハードウェア構成の一例を示す図である。
計算機200は、CPU201、メモリ202、記憶装置203、ネットワークインタフェース204、及び入出力インタフェース205を有する。計算機200を構成する各ハードウェアは、システムバス等の内部通信線を介して互いに接続される。なお、計算機200は、CD及びDVD等の非一時的記憶媒体に対する読出処理及び書込処理を行えるドライブを有してもよい。
CPU201は、メモリ202に格納されるプログラムを実行する。CPU201がプログラムにしたがって処理を実行することによって、所定の機能を有するモジュールとして動作する。以下の説明では、モジュールを主語に説明する場合、CPU201が当該モジュールを実現するプログラムを実行していることを示す。
メモリ202は、CPU201が実行するプログラム及び当該プログラムによって用いられる情報を格納する。また、メモリ202は、プログラムが一時的に使用するワークエリア等の一時記憶領域を含む。
記憶装置203は、データを永続的に格納する。記憶装置203は、例えば、HDD(Hard Disk Drive)及びSSD(Solid State Drive)等が考えられる。
ネットワークインタフェース204は、ネットワークを介して他の装置と接続するためのインタフェースである。
入出力インタフェース205は、入力装置206及び出力装置207と接続するためのインタフェースである。なお、入力装置206は、キーボード、マウス、及びタッチパネル等を含み、出力装置207は、ディスプレイ及びタッチパネル等を含む。
なお、メモリ202に格納されるプログラム及び情報は、記憶装置203に格納されてもよい。この場合、CPU201が、記憶装置203からプログラム及び情報を読み出し、メモリ202に格納し、メモリ202に格納されたプログラムを実行する。また、メモリ202に格納されるプログラムは、非一時的記憶媒体又はネットワークを介してインストールしてもよい。
図3は、実施例1の登録クライアント101の機能構成の一例を示す図である。
登録クライアント101は、通信モジュール300及び制御モジュール301を有し、また、暗号化コンテキスト302、共通秘密鍵303、ユーザ秘密鍵304、及び平文データ305を保持する。
暗号化コンテキスト302は、暗号処理及び復号処理に用いる情報であり、暗号化アルゴリズム321、初期ベクトル322、及び検索タグ長323を含む。なお、出力用の秘匿データのソースとなるデータが128ビット以下に固定されている場合、初期ベクトル322は処理に用いなくてもよい。この場合、暗号化コンテキスト302には、初期ベクトル322が含まれなくてもよい。
共通秘密鍵303は、登録クライアント101及び検索クライアント102が共有し、暗号化処理及び復号処理に使用する秘密鍵である。共通秘密鍵303は、乱数マスク生成鍵331及びデータ暗号化鍵332を含む。本実施例では、共通秘密鍵303は更新されない。登録クライアント101は、一つの共通秘密鍵303を保持する。
ユーザ秘密鍵304は、登録クライアント101を使用するユーザに対して設定される秘密鍵であり、鍵マスク生成鍵341及び鍵マスク用ノンス342を含む。ユーザ秘密鍵304は、追加、削除、及び更新が可能な秘密鍵である。ユーザ秘密鍵304は登録クライアント101を使用するユーザに対して割り当てられる秘密鍵であるため、登録クライアント101は、一つ以上のユーザ秘密鍵304を保持する。
また、ユーザ秘密鍵304は、他のユーザ秘密鍵304と異なる値である。すなわち、各ユーザ秘密鍵304に含まれる鍵マスク生成鍵341及び鍵マスク用ノンス342の少なくともいずれか一方の値が異なる。また、ユーザ秘密鍵304に含まれる鍵マスク生成鍵341及び鍵マスク用ノンス342の少なくともいずれかの値は、ユーザ秘密鍵404(図4参照)に含まれる鍵マスク生成鍵441及び鍵マスク用ノンス442と異なる。
平文データ305は、入力装置206を介して入力されたデータであり、出力用の秘匿データのソースとなるデータである。なお、出力用の秘匿データは、ユーザ秘密鍵304を用いて生成されたデータであり、初期ベクトル322、暗号文本体、及び検索タグから構成される。
通信モジュール300は、データの通信を制御する。
制御モジュール301は、全体処理モジュール311、暗号化モジュール312、擬似乱数生成モジュール314、不可逆変換モジュール315、準同型関数演算モジュール316、及び基本演算モジュール317を含む。
全体処理モジュール311は、登録クライアント101全体を制御する。具体的には、全体処理モジュール311は、データの入出力を制御し、また、暗号化処理及び復号処理を制御する。例えば、以下のような制御が行われる。
全体処理モジュール311は、入力装置206を介して受け付けた平文データをメモリ202の一時記憶領域に平文データ305として格納し、また、出力装置207を介して平文データ305を表示する。全体処理モジュール311は、出力用の秘匿データの生成及び送信を行うために、各種モジュールを制御する。
暗号化モジュール312は、暗号化処理を実行することによって、平文データ305から暗号化データを生成する。例えば、暗号化モジュール312は、全体処理モジュール311によって平文データ305及びデータ暗号化鍵332が入力された場合、暗号化データを生成する。なお、暗号化モジュール312は、標準的な暗号化アルゴリズムにしたがった暗号化処理を実行する。
擬似乱数生成モジュール314は、標準的な擬似乱数生成アルゴリズムにしたがって、擬似乱数を生成する。例えば、擬似乱数生成モジュール314は、温度、時間、及び電力量等の物理量から乱数を生成する。本実施例では、擬似乱数生成モジュール314は、全体処理モジュール311から入力された乱数マスク生成鍵331及び初期ベクトル322を用いて、擬似乱数を生成する。なお、乱数マスク生成鍵331及び初期ベクトル322の少なくともいずれか一方の値を変更することによって、異なる擬似乱数を生成できる。
不可逆変換モジュール315は、不可逆変換処理を実行して、入力されたデータを変換する。例えば、不可逆変換モジュール315は、全体処理モジュール311から入力されたデータを固定長が異なるデータに変換する。不可逆変換モジュール315は、標準的な暗号ハッシュ関数アルゴリズムであるSHA−256関数にしたがって、任意の長さの入力データを256ビットのデータに変換する。
準同型関数演算モジュール316は、準同型関数にデータを入力し、演算結果を出力する。ここで、準同型関数Fは、入力変数X、Yに対して式(1)を満たす。
ここで、ドット及びアスタリスクは、加算、乗算、及び排他的論理和等の演算を表す記号である。
排他的論理和に対応する演算記号xorを用いると、式(1)は式(2)のように表される。
基本演算モジュール317は、加算、減算、比較演算、AND演算、OR演算、XOR演算等の基本的な演算処理を実行する。例えば、基本演算モジュール317は、全体処理モジュール311から入力された二つのデータのビット毎のXOR演算、又は、二つのデータの一致又は大小関係を判定する比較演算を実行する。
本実施例では、暗号化モジュール312、擬似乱数生成モジュール314、不可逆変換モジュール315、準同型関数演算モジュール316、及び基本演算モジュール317を用いることによって、確率的暗号化方式の暗号化処理を実現している。
図4は、実施例1の検索クライアント102の機能構成の一例を示す図である。
検索クライアント102は、通信モジュール400及び制御モジュール401を有し、また、暗号化コンテキスト402、共通秘密鍵403、ユーザ秘密鍵404、及び平文検索キーワード405を保持する。
暗号化コンテキスト402は、暗号処理及び復号処理に用いる情報であり、暗号化アルゴリズム421、初期ベクトル422、検索タグ長423、及び指定ブロック424を含む。なお、出力用の秘匿検索キーワードのソースとなるデータが128ビット以下に固定されている場合、初期ベクトル422は処理に用いなくてもよい。この場合、暗号化コンテキスト402には、初期ベクトル422が含まれなくてもよい。
共通秘密鍵403は、共通秘密鍵303と同一のものであり、乱数マスク生成鍵431及びデータ暗号化鍵432を含む。検索クライアント102は、一つの共通秘密鍵403を保持する。
ユーザ秘密鍵404は、検索クライアント102を使用するユーザに対して設定される秘密鍵であり、鍵マスク生成鍵441、鍵マスク用ノンス442、及び検索鍵443を含む。ユーザ秘密鍵404は、追加、削除、及び更新が可能な秘密鍵である。ユーザ秘密鍵404は検索クライアント102を使用するユーザに対して割り当てられる秘密鍵であるため、検索クライアント102は、一つ以上のユーザ秘密鍵404を保持する。
また、ユーザ秘密鍵404は、他のユーザ秘密鍵404と異なる値である。すなわち、各ユーザ秘密鍵404に含まれる鍵マスク生成鍵441及び鍵マスク用ノンス442の少なくともいずれか一方の値が異なり、また、各ユーザ秘密鍵404に含まれる検索鍵443は全て異なる。また、ユーザ秘密鍵404に含まれる鍵マスク生成鍵441及び鍵マスク用ノンス442の少なくともいずれかの値は、ユーザ秘密鍵304に含まれるに鍵マスク生成鍵341及び鍵マスク用ノンス342と異なる。
平文検索キーワード405は、入力装置206を介して入力されたデータであり、出力用の秘匿検索キーワードのソースとなるデータである。なお、出力用の秘匿検索キーワードは、ユーザ秘密鍵404を用いて生成されたデータであり、暗号文本体及び検索タグから構成される。
通信モジュール400は、通信モジュール300と同一のものである。
制御モジュール401は、全体処理モジュール411、暗号化モジュール412、復号モジュール413、擬似乱数生成モジュール414、不可逆変換モジュール415、準同型関数演算モジュール416、及び基本演算モジュール417を含む。
擬似乱数生成モジュール414、不可逆変換モジュール415、準同型関数演算モジュール416、及び基本演算モジュール417は、擬似乱数生成モジュール314、不可逆変換モジュール315、準同型関数演算モジュール316、及び基本演算モジュール317と同一のものである。
全体処理モジュール411は、検索クライアント102全体を制御する。具体的には、全体処理モジュール411は、データの入出力を制御し、また、暗号化処理及び復号処理を制御する。例えば、以下のような制御が行われる。
全体処理モジュール411は、入力装置206を介して受け付けた平文検索キーワードをメモリ202の一時記憶領域に平文検索キーワード405として格納し、また、出力装置207を介して平文検索キーワード405を表示する。全体処理モジュール411は、出力用の秘匿検索キーワードの生成及び送信を行うために、各種モジュールを制御する。全体処理モジュール311は、データ管理サーバ103から受信した平文データ531及び秘匿データ532をメモリ202の一時記憶領域に格納する。また、全体処理モジュール311は、秘匿データ532を復号するために、各種モジュールを制御し、また、出力装置207を介して復号された平文データを表示する。
暗号化モジュール412は、暗号化処理を実行することによって、平文検索キーワード405から出力用の秘匿検索キーワードを生成する。なお、暗号化モジュール412が実行する処理は、暗号化モジュール312と同様の処理である。
復号モジュール413は、復号処理を実行することによって、暗号化データから平文データを生成する。例えば、復号モジュール413は、全体処理モジュール411から秘匿データ532及びデータ暗号化鍵432が入力された場合、復号処理を実行し、平文データを生成する。
本実施例では、暗号化モジュール412、復号モジュール413、擬似乱数生成モジュール414、不可逆変換モジュール415、準同型関数演算モジュール416、及び基本演算モジュール417を用いることによって、確率的暗号化方式の暗号化処理及び復号処理を実現している。
図5は、実施例1のデータ管理サーバ103の機能構成の一例を示す図である。
データ管理サーバ103は、通信モジュール500及び制御モジュール501を有し、また、暗号化コンテキスト502、データベース503、及び鍵管理情報505を保持する。
暗号化コンテキスト502は、暗号処理及び復号処理に用いる情報であり、暗号化アルゴリズム521、初期ベクトル522、検索タグ長523、及び指定ブロック524を含む。
データベース503は、登録クライアント101によって登録されたデータを格納する。本実施例のデータベース503には、平文データ531及び秘匿データ532が格納される。データベース503は、RDB(Relational Database)及びKVS(Key Value Store)等が考えられる。データベース503がRDBの場合、一つのレコードに一つのデータ(平文データ531及び秘匿データ532)が格納される。なお、データベース503には、秘匿データ532のみが格納されてもよい。
データベース503に格納される秘匿データ532は、マスタ秘密鍵606(図6参照)を用いて暗号化されたデータに対応する。本実施例では、データ管理サーバ103がマスタ秘密鍵606を保持することなく、出力用の秘匿データと秘匿データ532との間の変換を実現する。
鍵管理情報505は、各ユーザ秘密鍵304、404に関する情報である。鍵管理情報505の詳細は図7を用いて説明する。
通信モジュール500は、通信モジュール300と同一のものである。
制御モジュール501は、全体処理モジュール511、復号モジュール513、不可逆変換モジュール515、準同型関数演算モジュール516、基本演算モジュール517、及びユーザ認証モジュール518を含む。
不可逆変換モジュール515、準同型関数演算モジュール516、及び基本演算モジュール517は、不可逆変換モジュール315、準同型関数演算モジュール316、及び基本演算モジュール317と同一のものである。また、復号モジュール513は、復号モジュール413と同一のものである。
全体処理モジュール511は、データ管理サーバ103全体を制御する。具体的には、全体処理モジュール511は、データの入出力を制御し、また、データの検索を制御する。例えば、以下のような制御が行われる。
全体処理モジュール511は、通信モジュール400を介して受け付けた平文データ及び出力用の秘匿データをデータベース503に格納する。全体処理モジュール511は、出力用の秘匿検索キーワードの受信及びデータの検索を行うために、各種モジュールを制御する。全体処理モジュール311は、通信モジュール400を介して受け付けた情報をメモリ202の一時記憶領域に格納し、また、出力装置207を介してデータを表示する。
ユーザ認証モジュール518は、ユーザの認証処理を実行する。例えば、ユーザ認証モジュール518は、ユーザID及びパスワードに基づく認証処理、又は生体認証方式の認証処理等を実行する。なお、本発明は、認証処理に限定されない。
図6は、実施例1の鍵管理サーバ104の機能構成の一例を示す図である。
鍵管理サーバ104は、通信モジュール600及び制御モジュール601を有し、また、共通秘密鍵603、マスタ秘密鍵606、及び鍵管理情報605を保持する。
共通秘密鍵603は、共通秘密鍵303と同一のものであり、乱数マスク生成鍵631及びデータ暗号化鍵632を含む。
マスタ秘密鍵606は、データ管理サーバ103が管理する秘匿データ532の生成時の暗号化処理に使用する秘密鍵であり、鍵マスク生成鍵661及び鍵マスク用ノンス662を含む。本実施例では、秘匿データ532は、共通秘密鍵403及びマスタ秘密鍵606を用いて生成される。また、マスタ秘密鍵606は、ユーザ秘密鍵304、404と異なる値である。すなわち、マスタ秘密鍵606に含まれる鍵マスク生成鍵661及び鍵マスク用ノンス662の少なくともいずれかの値は、ユーザ秘密鍵304、404に含まれる鍵マスク生成鍵341、441及び鍵マスク用ノンス342、442と異なる。
鍵管理情報605は、各ユーザの秘密鍵に関する情報である。鍵管理情報605の詳細は図8を用いて説明する。
通信モジュール600は、通信モジュール300と同一のものである。
制御モジュール601は、全体処理モジュール611、擬似乱数生成モジュール614、不可逆変換モジュール615、基本演算モジュール417、ユーザ認証モジュール618、及び鍵生成モジュール619を含む。
擬似乱数生成モジュール614、不可逆変換モジュール615、及び基本演算モジュール417は、擬似乱数生成モジュール314、不可逆変換モジュール315、基本演算モジュール317と同一のものである。また、ユーザ認証モジュール618は、ユーザ認証モジュール518と同一のものである。
全体処理モジュール611は、鍵管理サーバ104全体を制御する。具体的には、全体処理モジュール611は、データの入出力を制御し、また、鍵の生成、削除、及び更新を制御する。例えば、以下のような制御が行われる。
全体処理モジュール611は、通信モジュール600を介して各種要求を受け付ける。全体処理モジュール611は、鍵の生成、削除、更新、及び送信を行うために、各種モジュールを制御する。
鍵生成モジュール619は、標準的な鍵の生成アルゴリズムに基づいて、共通秘密鍵303、403、ユーザ秘密鍵304、404、及びマスタ秘密鍵606等の各種秘密鍵を生成する。なお、鍵生成モジュール619の代わりに、擬似乱数生成モジュール614が秘密鍵を生成してもよい。
図7は、実施例1のデータ管理サーバ103が保持する鍵管理情報505の一例を示す図である。
鍵管理情報505は、ユーザID701、差分鍵マスク702、検索鍵703、及び鍵バージョン704から構成されるレコードを含む。一つのレコードが一人のユーザに対応する。
ユーザID701は、ユーザを一意に識別するための識別情報を格納するカラムである。
差分鍵マスク702は、ユーザ秘密鍵304、404及びマスタ秘密鍵606から生成された差分鍵マスクを格納するカラムである。
検索鍵703は、ユーザ秘密鍵404に含まれる検索鍵443を格納するカラムである。なお、ユーザ秘密鍵304には検索鍵443が含まれていないため、ユーザ秘密鍵304に対応するレコードの検索鍵703は空欄となる。
鍵バージョン704は、ユーザ秘密鍵304、404のバージョンを示す鍵バージョンを格納するカラムである。本実施例では、鍵バージョンは、ユーザ秘密鍵304、404が有効なものであるか否かを判定するための鍵照合情報として用いられる。
図8は、実施例1の鍵管理サーバ104が保持する鍵管理情報605の一例を示す図である。
鍵管理情報605は、ユーザID801、鍵マスク生成鍵802、鍵マスク用ノンス803、及び検索鍵804から構成されるレコードを含む。一つのレコードが一人のユーザに対応する。
ユーザID801及び検索鍵804は、ユーザID701及び検索鍵703と同一のものである。なお、ユーザ秘密鍵304に対応するレコードの検索鍵804は、空欄となる。
鍵マスク生成鍵802は、ユーザ秘密鍵304、404に含まれる鍵マスク生成鍵341、441を格納するカラムである。
鍵マスク用ノンス803は、ユーザ秘密鍵304、404に含まれる鍵マスク用ノンス342、442を格納するカラムである。
図9A、図9B、及び図9Cは、実施例1の出力装置207に表示される画面の一例を示す図である。
図9Aは、管理クライアント105の出力装置207に表示される管理画面900の一例を示す。管理画面900は、選択欄901、ユーザID入力欄902、及び実行ボタン903を含む。
選択欄901は、鍵管理サーバ104に要求する処理の種別を選択するための欄である。選択欄901には、「ユーザ追加」、「ユーザ失効」、「ユーザ秘密鍵更新」、及び「マスタ秘密鍵更新」のいずれかを選択するためのラジオボタンを含む。
なお、「ユーザ追加」は、登録クライアント101又は検索クライアント102を使用するユーザを追加するための処理であり、「ユーザ失効」は、ユーザを削除するための処理である。また、「ユーザ秘密鍵更新」は、特定のユーザ秘密鍵304、404を更新するための処理であり、「マスタ秘密鍵更新」はマスタ秘密鍵606を更新するための処理である。
ユーザID入力欄902は、処理対象のユーザの識別情報を入力するための欄である。なお、「マスタ秘密鍵更新」を選択する場合、ユーザID入力欄902への入力は必要ない。
実行ボタン903は、選択欄901に対応する処理の実行要求を送信するための操作ボタンである。
管理クライアント105を使用する管理者は、入力装置206を用いて、選択欄901及びユーザID入力欄902を操作し、また、実行ボタン903を操作する。管理クライアント105は、実行ボタン903が操作された場合、選択欄901に対応する処理の実行要求を鍵管理サーバ104に送信する。
図9Bは、登録クライアント101の出力装置207に表示される登録画面910の一例を示す。登録画面910は、入力欄911及び登録ボタン912を含む。
入力欄911は、データ管理サーバ103に登録するデータに含める項目を設定するための欄である。本実施例の入力欄911には、氏名、生年月日、住所、及びメールアドレスを設定する入力欄を含む。
登録ボタン912は、入力欄911に設定された項目を含むデータを登録するための操作ボタンである。
登録クライアント101を使用するユーザは、入力装置206を用いて、入力欄911を操作し、また、登録ボタン912を操作する。登録クライアント101は、登録ボタン912が操作された場合、入力欄911の値を含む平文データ305を暗号化することによって出力用の秘匿データを生成し、生成された出力用の秘匿データを含む登録要求をデータ管理サーバ103に送信する。
図9Cは、検索クライアント102の出力装置207に表示される検索画面920の一例を示す。検索画面920は、入力欄921及び検索ボタン922を含む。
入力欄921は、データ管理サーバ103に登録されたデータを検索するための検索条件を設定するための欄である。本実施例の入力欄921には、氏名、生年月日、住所、及びメールアドレスを設定する入力欄を含む。ユーザは、少なくとも一つの入力欄に値を設定する。
検索ボタン922は、入力欄921に設定された検索条件に一致するデータを検索するための操作ボタンである。
検索クライアント102を使用するユーザは、入力装置206を用いて、入力欄921を操作し、また、検索ボタン922を操作する。検索クライアント102は、検索ボタン922が操作された場合、入力欄921の値を含む平文検索キーワード405を暗号化することによって出力用の秘匿検索キーワードを生成し、出力用の秘匿検索キーワードを含む検索要求をデータ管理サーバ103に送信する。なお、検索対象が平文データ531である場合、検索クライアント102は、平文検索キーワード405を含む検索要求をデータ管理サーバ103に送信する。
次に、システム内で実行される処理について説明する。
<ユーザ追加処理>
図10は、実施例1のシステム内で実行されるユーザ追加処理の流れを示すシーケンス図である。ここでは、検索クライアント102及びユーザを追加する場合を一例として処理を説明する。
管理クライアント105と鍵管理サーバ104との間で認証処理が完了した後、管理者は、管理画面900を参照し、選択欄901の「ユーザ追加」のラジオボタンを操作し、また、ユーザID入力欄902に値を設定した後、実行ボタン903を操作する。
管理クライアント105は、管理画面900を介して管理者からユーザ追加指示を受け付けた場合、ユーザIDを含むユーザ追加要求を鍵管理サーバ104に送信する(ステップS1001)。
鍵管理サーバ104は、ユーザ追加要求を受信した場合、新規ユーザに割り当てるユーザ秘密鍵404を生成する(ステップS1002)。具体的には、以下のような処理が実行される。
全体処理モジュール611は、鍵生成モジュール619にユーザ秘密鍵404の生成を指示する。
鍵生成モジュール619は、鍵マスク生成鍵441、鍵マスク用ノンス442、及び検索鍵443を生成することによって、ユーザ秘密鍵404を生成する。
鍵生成モジュール619は、鍵管理情報605にレコードを追加し、追加されたレコードのユーザID801にユーザ追加要求に含まれるユーザIDを設定する。また、鍵生成モジュール619は、追加されたレコードの鍵マスク生成鍵802、鍵マスク用ノンス803、及び検索鍵804に、生成された鍵マスク生成鍵441、鍵マスク用ノンス442、及び検索鍵443を設定する。以上がステップS1002の処理の説明である。
鍵管理サーバ104は、鍵バージョン生成処理を実行し(ステップS1003)、また、ユーザ秘密鍵404及びマスタ秘密鍵606を用いて、差分鍵マスク生成処理を実行する(ステップS1004)。
鍵バージョン生成処理の詳細は図11を用いて説明する。また、差分鍵マスク生成処理の詳細は図12を用いて説明する。
鍵管理サーバ104は、ユーザID、鍵バージョン、差分鍵マスク、及び検索鍵443を含むユーザ追加要求をデータ管理サーバ103に送信する(ステップS1005)。
データ管理サーバ103は、ユーザ追加要求を受信した場合、鍵管理情報505を更新する(ステップS1006)。
具体的には、全体処理モジュール511は、鍵管理情報505にレコードを追加し、追加されたレコードのユーザID701、差分鍵マスク702、検索鍵703、及び鍵バージョン704に、ユーザ追加要求に含まれるユーザID、差分鍵マスク、検索鍵443、及び鍵バージョンを設定する。
データ管理サーバ103は、鍵管理情報505の更新処理の成否を示す値を含む処理結果を鍵管理サーバ104に送信する(ステップS1007)。
鍵管理サーバ104は、鍵管理情報505の更新処理の失敗を示す値を含む処理結果を受信した場合、ステップS1008の処理を実行せずに、ステップS1011に進む。ステップS1011では、鍵管理情報505の更新処理の失敗を示す値を含む処理結果が送信される。
鍵管理サーバ104は、鍵管理情報505の更新処理の成功を示す値を含む処理結果を受信した場合、ユーザを追加する検索クライアント102に鍵設定要求を送信する(ステップS1008)。なお、鍵管理サーバ104は、ユーザを追加する検索クライアント102を予め把握しているものとする。
本実施例では、検索クライアント102も新規に追加されるため、全体処理モジュール611は、ユーザID、共通秘密鍵603、及びユーザ秘密鍵404を含む鍵設定要求を、検索クライアント102に送信する。なお、既存の検索クライアント102にユーザを追加する場合、共通秘密鍵603を送信する必要はないため、鍵設定要求には、共通秘密鍵603は含まれない。
検索クライアント102は、鍵設定要求を受信した場合、鍵設定要求に含まれる秘密鍵を設定する(ステップS1009)。
具体的には、全体処理モジュール411は、メモリ202に共通秘密鍵403を格納する。また、全体処理モジュール411は、メモリ202にユーザIDとユーザ秘密鍵404を対応付けて格納する。
検索クライアント102は、鍵の設定処理の成否を示す値を含む処理結果を鍵管理サーバ104に送信する(ステップS1010)。
鍵管理サーバ104は、検索クライアント102から処理結果を受信した場合、管理クライアント105に処理結果を送信する(ステップS1011)。
管理クライアント105は、出力装置207を介して処理結果を管理者に表示する(ステップS1012)。
なお、登録クライアント101にユーザを登録する場合、ステップS1602では、検索鍵443を含まないユーザ秘密鍵304が生成される。この場合、鍵バージョン生成処理では、検索鍵443を含まないユーザ秘密鍵304を用いて処理が行われる。
図10で説明したように、本実施例では、ユーザ毎にユーザ秘密鍵304、404が生成される。後述するように、平文データ305はユーザ秘密鍵304を用いて暗号化され、平文検索キーワード405はユーザ秘密鍵404を用いて暗号化され、また、データ管理サーバ103から取得した秘匿データ532はユーザ秘密鍵404を用いて復号される。ユーザ毎に暗号化処理及び復号処理に用いる秘密鍵を割り当てることによって、ユーザ単位でデータ管理サーバ103へのアクセスを管理できる。これによって、秘密鍵の漏洩に伴うリスクを低減でき、また、秘密鍵が漏洩した場合に迅速な対応が可能となる。
ここで、鍵バージョン生成処理及び差分鍵マスク生成処理について説明する。
<鍵バージョン生成処理>
図11は、実施例1の鍵管理サーバ104が実行する鍵バージョン生成処理の一例を説明するフローチャートである。
まず、鍵バージョンについて説明する。鍵バージョンは、データの暗号化に使用されたユーザ秘密鍵及びノンスの集合から生成される値である。後述するように、データ管理サーバ103は、鍵バージョンを用いて、有効なユーザ秘密鍵304、404を用いて生成された秘匿データ及び秘匿検索キーワードであるか否かを判定する。すなわち、データ管理サーバ103は、ユーザ秘密鍵304、404そのものを取得することなく、ユーザ秘密鍵304、404が有効なものであるか否かを判定できる。
全体処理モジュール611は、共通秘密鍵603及びユーザ秘密鍵304、404を連結したデータを不可逆変換モジュール615に入力し、鍵バージョンの生成を指示する(ステップS1101)。
不可逆変換モジュール615は、全体処理モジュール611によって入力されたデータを変換することによって、鍵バージョンを生成する。
<差分鍵マスク生成処理>
図12は、実施例1の鍵管理サーバ104が実行する差分鍵マスク生成処理の一例を説明するフローチャートである。
まず、差分鍵マスクについて説明する。差分鍵マスクは、二つの秘密鍵から独立に生成された二種類の乱数ストリームの差分を示す値である。後述するように、データ管理サーバ103は、第1の秘密鍵及び第2の秘密鍵から生成された差分鍵マスクを用いて、第1の秘密鍵を用いて生成された暗号化データと第2の秘密鍵を用いて生成された暗号化データとの間の変換を制御する。
本実施例では、差分鍵マスク生成処理によって、マスタ秘密鍵606及びユーザ秘密鍵304、404から生成される変換用差分鍵マスクと、古いマスタ秘密鍵606及び新しいマスタ秘密鍵606から生成される更新用差分鍵マスクが算出される。
例えば、変換用差分鍵マスクを用いることによって以下のような暗号化データの変換が可能となる。データ管理サーバ103は、出力用の秘匿データ及び出力用の秘匿検索キーワードを、マスタ秘密鍵606に対応した秘匿データ532及び秘匿検索キーワードに変換できる。また、データ管理サーバ103は、マスタ秘密鍵606に対応する秘匿データ532及び秘匿検索キーワードを、出力用の秘匿データ及び出力用の秘匿検索キーワードに変換できる。
例えば、更新用差分鍵マスクを用いることによって以下のような暗号化データの変換が可能となる。データ管理サーバ103は、古いマスタ秘密鍵606に対応する秘匿データ532を新しいマスタ秘密鍵606に対応する秘匿データ532に変換できる。また、データ管理サーバ103は、古いマスタ秘密鍵606に対応する変換用差分鍵マスクを新しいマスタ秘密鍵606に対応する変換用差分鍵マスクに変換できる。
図12では、マスタ秘密鍵606及びユーザ秘密鍵304から生成される変換用差分鍵マスクの生成方法について説明する。
全体処理モジュール611は、ユーザ秘密鍵304に含まれる鍵マスク生成鍵341及び鍵マスク用ノンス342を擬似乱数生成モジュール614に入力し、ユーザ秘密鍵304に対応する第1の鍵ストリームの生成を指示する(ステップS1201)。
擬似乱数生成モジュール614は、出力用の秘匿データの生成時に生成される中間暗号文と同一サイズの第1の鍵ストリームを生成する。
全体処理モジュール611は、マスタ秘密鍵606に含まれる鍵マスク生成鍵661及び鍵マスク用ノンス662を擬似乱数生成モジュール614に入力し、マスタ秘密鍵606に対応する第2の鍵ストリームの生成を指示する(ステップS1202)。
擬似乱数生成モジュール614は、出力用の秘匿データの生成時に生成される中間暗号文と同一サイズの第2の鍵ストリームを生成する。
全体処理モジュール611は、第1の鍵ストリーム及び第2の鍵ストリームを基本演算モジュール616に入力し、第1の鍵ストリーム及び第2の鍵ストリームの排他的論理和の演算を指示する(ステップS1203)。
基本演算モジュール616は、式(3)にしたがって、第1の鍵ストリーム及び第2の鍵ストリームの排他的論理和を、変換用差分鍵マスクとして算出する。
ここで、T(A)は、ユーザ秘密鍵304「A」から生成された第1の鍵ストリームを示し、T(M)は、マスタ秘密鍵606「M」から生成された第2の鍵ストリームを示し、KD(M,A)は変換用差分鍵マスクを示す。
なお、ステップS1201及びステップS1202の処理の順番は入れ替えてもよい。また、更新用差分鍵マスクは、古いマスタ秘密鍵606に対応する第1の鍵ストリームT(M)及び新しいマスタ秘密鍵606に対応する第2の鍵ストリームT(M’)の排他的論理和から算出される。
<ユーザ失効処理>
図13は、実施例1のシステム内で実行されるユーザ失効処理の流れを示すシーケンス図である。
管理クライアント105と鍵管理サーバ104との間で認証処理が完了した後、管理者は、管理画面900を参照し、選択欄901の「ユーザ失効」のラジオボタンを操作し、また、ユーザID入力欄902に値を設定した後、実行ボタン903を操作する。
管理クライアント105は、管理画面900を介して管理者からユーザ失効指示を受け付けた場合、ユーザIDを含むユーザ失効要求を鍵管理サーバ104に送信する(ステップS1301)。
鍵管理サーバ104は、ユーザ失効要求を受信した場合、当該ユーザ失効要求をデータ管理サーバ103に転送する(ステップS1302)。このとき、鍵管理サーバ104は、メモリの一時記憶領域にユーザ失効要求に含まれるユーザIDを格納する。
データ管理サーバ103は、ユーザ失効要求を受信した場合、鍵管理情報505を更新し(ステップS1303)、鍵管理情報505の更新処理の成否を示す値を含む処理結果を鍵管理サーバ104に送信する(ステップS1304)。具体的には、以下のような処理が実行される。
全体処理モジュール511は、鍵管理情報505を参照して、ユーザID701がユーザ失効要求に含まれるユーザIDに一致するレコードを検索する。
レコードが存在する場合、全体処理モジュール511は、鍵管理情報505から検索されたレコードを削除する。また、全体処理モジュール511は、鍵管理情報505の更新処理の成功を示す値を含む処理結果を鍵管理サーバ104に送信する。
レコードが存在しない場合、全体処理モジュール511は、鍵管理情報505の更新処理の失敗を示す値を含む処理結果を鍵管理サーバ104に送信する。以上がステップS1303及びステップS1304の処理の説明である。
鍵管理サーバ104は、鍵管理情報505の更新処理の失敗を示す値を含む処理結果を受信した場合、ステップS1305の処理を実行せずに、ステップS1306に進む。ステップS1306では、鍵管理情報505の更新処理の失敗を示す値を含む処理結果が送信される。
鍵管理サーバ104は、鍵管理情報505の更新処理の成功を示す値を含む処理結果を受信した場合、鍵管理情報605を更新する(ステップS1305)。
全体処理モジュール611は、鍵管理情報605を参照して、ユーザID801が一時記憶領域に格納されるユーザIDに一致するレコードを検索し、検索されたレコードを削除する。
鍵管理サーバ104は、鍵管理情報605の更新処理の成否を示す値を含む処理結果を管理クライアント105に送信する(ステップS1306)。
管理クライアント105は、鍵管理サーバ104から処理結果を受信した場合、出力装置207を介して処理結果を管理者に表示する(ステップS1307)。
図13で説明したように、鍵管理情報505から特定のユーザのレコードを削除することによって、当該ユーザの操作権限を失効できる。このとき、他のユーザには影響を与えない。
<秘匿データの登録処理>
図14は、実施例1のシステム内で実行される秘匿データの登録処理の流れを示すシーケンス図である。
登録クライアント101と鍵管理サーバ104との間で認証処理が完了した後、ユーザは、登録画面910を参照し、入力欄911を操作した後、登録ボタン912を操作する。
登録クライアント101は、登録画面910を介してユーザからデータの登録指示を受け付けた場合、出力用の秘匿データを生成する(ステップS1401)。具体的には、以下のような処理が実行される。
全体処理モジュール311は、平文データ305、暗号化コンテキスト302に含まれる初期ベクトル322、及び共通秘密鍵303に含まれるデータ暗号化鍵332を暗号化モジュール312に入力し、中間暗号文の生成を指示する。
暗号化モジュール312は、初期ベクトル322及びデータ暗号化鍵332を用いて平文データ305を暗号化することによって、中間暗号文を生成する。
全体処理モジュール311は、暗号化コンテキスト302に含まれる初期ベクトル322及び共通秘密鍵303に含まれる乱数マスク生成鍵331を擬似乱数生成モジュール314に入力し、乱数マスクの生成を指示する。
擬似乱数生成モジュール314は、初期ベクトル322及び乱数マスク生成鍵331を用いて、乱数マスクを生成する。
全体処理モジュール311は、ユーザ秘密鍵304に含まれる鍵マスク生成鍵341及び鍵マスク用ノンス342を擬似乱数生成モジュール314に入力し、鍵マスクの生成を指示する。
擬似乱数生成モジュール314は、鍵マスク生成鍵341及び鍵マスク用ノンス342を用いて鍵マスクを生成する。
全体処理モジュール311は、中間暗号文、乱数マスク、及び鍵マスクを基本演算モジュール317に入力し、排他的論理和の演算を指示する。
基本演算モジュール317は、式(4)に示すように、中間暗号文、乱数マスク、及び鍵マスクの排他的論理和を算出することによって、暗号文本体を生成する。
ここで、D(A)は、ユーザ秘密鍵304「A」を用いて生成された暗号文本体を示し、Cは中間暗号文を示し、Rは乱数マスクを示し、T(A)はユーザ秘密鍵304「A」を用いて生成された鍵マスク(鍵ストリーム)を示す。
全体処理モジュール311は、乱数マスクを準同型関数演算モジュール316に入力し、準同型関数の演算を指示する。
準同型関数演算モジュール316は、乱数マスクを入力した準同型関数から第1の演算結果を出力する。
全体処理モジュール311は、第1の演算結果を不可逆変換モジュール315に入力し、演算を指示する。
不可逆変換モジュール315は、第1の演算結果を変換することによって第2の演算結果を出力する。
全体処理モジュール311は、第2の演算結果から、暗号化コンテキスト302に含まれる検索タグ長323に示すビット長のデータを検索タグとして抽出する。
全体処理モジュール311は、初期ベクトル322、暗号文本体、及び検索タグを結合することによって、出力用の秘匿データを生成する。以上がステップS1401の処理の説明である。
次に、登録クライアント101は、鍵バージョン生成処理を実行する(ステップS1402)。
登録クライアント101は、ユーザID、出力用の秘匿データ、及び鍵バージョンを含むデータ登録要求をデータ管理サーバ103に送信する(ステップS1403)。
データ管理サーバ103は、データ登録要求を受信した場合、鍵管理情報505を用いて照合処理を実行する(ステップS1404)。具体的には、以下のような処理を実行する。
全体処理モジュール511は、データ登録要求に含まれるユーザID、出力用の秘匿データ、及び鍵バージョンをメモリ202の一時記憶領域に格納する。全体処理モジュール511は、鍵管理情報505を参照して、ユーザID701がデータ登録要求に含まれるユーザIDに一致するレコードを検索する。
レコードが存在しない場合、全体処理モジュール511は、照合失敗と判定し、照合失敗を示す値をメモリ202の一時記憶領域に格納し、ステップS1405及びステップS1406の処理を実行することなくステップS1407に進む。ステップS1407では、照合失敗を示す値を含む処理結果が送信される。
レコードが存在する場合、全体処理モジュール511は、検索されたレコードの鍵バージョン704と、データ登録要求に含まれる鍵バージョンとが一致するか否かを判定する。
検索されたレコードの鍵バージョン704と、データ登録要求に含まれる鍵バージョンとが一致しない場合、全体処理モジュール511は、照合失敗と判定し、照合失敗を示す値をメモリ202の一時記憶領域に格納し、ステップS1405及びステップS1406の処理を実行することなくステップS1407に進む。ステップS1407では、照合失敗を示す値を含む処理結果が送信される。
検索されたレコードの鍵バージョン704と、データ登録要求に含まれる鍵バージョンとが一致する場合、全体処理モジュール511は、照合成功と判定し、検索されたレコードの差分鍵マスク702及び検索鍵703の値を取得する。以上がステップS1404の処理の説明である。
データ管理サーバ103は、マスタ秘密鍵606を用いて、出力用の秘匿データを秘匿データ532に変換する再暗号化処理を実行する(ステップS1405)。具体的には、以下のような処理が実行される。
全体処理モジュール511は、出力用の秘匿データから暗号文本体を取得する。全体処理モジュール511は、暗号文本体及び差分鍵マスク702を基本演算モジュール517に入力し、排他的論理和の演算を指示する。
基本演算モジュール517は、式(5)に示すように、暗号文本体及び差分鍵マスクの排他的論理和を算出することによって、新たな暗号文本体を生成する。
ここで、D(M)はマスタ秘密鍵606を用いて生成された暗号文本体を示し、KD(M,A)は変換用差分鍵マスクを示す。
式(5)は、式(3)及び式(4)を用いて式(6)のように変形できる。
式(6)は、式(4)のT(A)をマスタ秘密鍵606「M」を用いて生成された鍵マスクT(M)に置き換えた式である。したがって、出力用の秘匿データの暗号文本体が共通秘密鍵303及びマスタ秘密鍵606を用いて生成された暗号文本体に変換されていることが分かる。
全体処理モジュール511は、初期ベクトル322、新たな暗号文本体、及び検索タグを結合することによって、秘匿データ532を生成する。以上がステップS1405の処理の説明である。
次に、データ管理サーバ103は、データベース503に秘匿データ532を格納し(ステップS1406)、登録クライアント101に処理結果を送信する(ステップS1407)。
処理結果には、通常、成功を示す値が含まれる。ただし、照合処理が失敗した場合、データベース503に秘匿データ532を登録できない場合、又は、再暗号化処理が失敗した場合、処理結果には各処理の失敗を示す値が含まれる。
登録クライアント101は、データ管理サーバ103から処理結果を受信した場合、出力装置207を介して処理結果をユーザに表示する(ステップS1408)。
鍵管理情報505に登録されていないユーザが登録クライアント101を操作した場合、データ管理サーバ103は、出力用の秘匿データの登録を行わない。また、秘匿データ532の再暗号化処理では、データ管理サーバ103は、ユーザ秘密鍵304を用いて生成された出力用の秘匿データを復号することなく、マスタ秘密鍵606を用いた生成された秘匿データ532に変換できる。また、再暗号化処理では、共通秘密鍵303、ユーザ秘密鍵304、及びマスタ秘密鍵606はデータ管理サーバ103に知らされないため、データ管理サーバ103は秘匿データ532を平文データに復号できない。したがって、セキュリティの問題は発生しない。
<秘匿データの検索処理>
図15は、実施例1のシステム内で実行される秘匿データ532の検索処理の流れを示すシーケンス図である。
検索クライアント102と鍵管理サーバ104との間で認証処理が完了した後、ユーザは、検索画面920を参照し、入力欄921を操作した後、検索ボタン922を操作する。
検索クライアント102は、検索画面920を介してユーザからデータの検索指示を受け付けた場合、出力用の秘匿検索キーワードを生成する(ステップS1501)。具体的には、以下のような処理が実行される。
全体処理モジュール411は、平文検索キーワード405、暗号化コンテキスト402に含まれる初期ベクトル422、及び共通秘密鍵403に含まれるデータ暗号化鍵432を暗号化モジュール412に入力し、中間暗号文の生成を指示する。
暗号化モジュール412は、データ暗号化鍵432及び初期ベクトル422を用いて平文検索キーワード405を暗号化することによって、中間暗号文を生成する。
全体処理モジュール411は、暗号化コンテキスト402に含まれる初期ベクトル422及び共通秘密鍵403に含まれる乱数マスク生成鍵431を擬似乱数生成モジュール414に入力し、乱数マスクの生成を指示する。
擬似乱数生成モジュール414は、初期ベクトル422及び乱数マスク生成鍵431を用いて、乱数マスクを生成する。
全体処理モジュール411は、ユーザ秘密鍵404に含まれる鍵マスク生成鍵441及び鍵マスク用ノンス442を擬似乱数生成モジュール414に入力し、鍵マスクの生成を指示する。
擬似乱数生成モジュール314は、鍵マスク生成鍵441及び鍵マスク用ノンス442を用いて鍵マスクを生成する。
全体処理モジュール311は、中間暗号文、乱数マスク、及び鍵マスクを基本演算モジュール417に入力し、排他的論理和の演算を指示する。
基本演算モジュール417は、式(7)に示すように、中間暗号文、乱数マスク、及び鍵マスクの排他的論理和を算出することによって、暗号文本体を生成する。
ここで、W(B)は、ユーザ秘密鍵404「B」を用いて生成された暗号文本体を示し、R’は乱数マスクを示し、T(B)はユーザ秘密鍵404「B」を用いて生成された鍵マスクを示す。なお、検索クライアント102が生成する乱数マスクは、登録クライアント101が生成する乱数マスクとは異なる値であるため、R’と記載している。
全体処理モジュール411は、乱数マスクを準同型関数演算モジュール416に入力し、準同型関数の演算を指示する。
準同型関数演算モジュール416は、乱数マスクを入力した準同型関数から第3の演算結果を出力する。
全体処理モジュール311は、第3の演算結果、暗号化コンテキスト402に含まれる初期ベクトル422、及びユーザ秘密鍵404に含まれる検索鍵443を暗号化モジュール412に入力し、演算を指示する。
暗号化モジュール412は、第3の演算結果、初期ベクトル422、及び検索鍵443を用いた暗号化処理を実行し、実行結果を検索タグとして出力する。
全体処理モジュール411は、暗号文本体及び検索タグを結合することによって、出力用の秘匿検索キーワードを生成する。以上がステップS1501の処理の説明である。
次に、検索クライアント102は、鍵バージョン生成処理を実行する(ステップS1502)。
検索クライアント102は、ユーザID、出力用の秘匿検索キーワード、及び鍵バージョンを含むデータ検索要求をデータ管理サーバ103に送信する(ステップS1503)。
データ管理サーバ103は、データ検索要求を受信した場合、鍵管理情報505を用いて、照合処理を実行する(ステップS1504)。具体的には、以下のような処理を実行する。
全体処理モジュール511は、データ検索要求に含まれるユーザID、出力用の秘匿検索キーワード、及び鍵バージョンをメモリ202の一時記憶領域に格納する。全体処理モジュール511は、鍵管理情報505を参照して、ユーザID701がデータ検索要求に含まれるユーザIDに一致するレコードを検索する。
レコードが存在しない場合、全体処理モジュール511は、照合処理の失敗と判定し、照合処理の失敗を示す値をメモリ202の一時記憶領域に格納し、ステップS1505からステップS1507の処理を実行することなくステップS1508に進む。ステップS1508では、照合処理の失敗を示す値を含む処理結果が送信される。
レコードが存在する場合、全体処理モジュール511は、検索されたレコードの鍵バージョン704と、データ検索要求に含まれる鍵バージョンとが一致するか否かを判定する。
検索されたレコードの鍵バージョン704と、データ検索要求に含まれる鍵バージョンとが一致しない場合、全体処理モジュール511は、照合処理の失敗と判定し、照合処理の失敗を示す値をメモリ202の一時記憶領域に格納し、ステップS1505からステップS1507の処理を実行することなくステップS1508に進む。ステップS1508では、照合処理の失敗を示す値を含む処理結果が送信される。
検索されたレコードの鍵バージョン704と、データ検索要求に含まれる鍵バージョンとが一致する場合、全体処理モジュール511は、照合処理の成功と判定し、検索されたレコードの差分鍵マスク702及び検索鍵703の値を取得する。以上がステップS1504の処理の説明である。
データ管理サーバ103は、出力用の秘匿検索キーワードをマスタ秘密鍵606を用いて生成された秘匿検索キーワードに変換する再暗号化処理を実行する(ステップS1505)。具体的には、以下のような処理が実行される。
全体処理モジュール511は、出力用の秘匿検索キーワードから暗号文本体を取得する。全体処理モジュール511は、暗号文本体及び差分鍵マスク702を基本演算モジュール517に入力し、排他的論理和の演算を指示する。
基本演算モジュール517は、式(8)に示すように、暗号文本体及び変換用差分鍵マスクの排他的論理和を算出することによって、新たな暗号文本体を生成する。
ここで、W(M)はマスタ秘密鍵606「M」を用いて生成された暗号文本体を示し、KD(M,B)は変換用差分鍵マスクを示す。
式(8)は、式(3)及び式(7)を用いて式(9)のように変形できる。
式(9)は、式(7)のT(B)をマスタ秘密鍵606「M」を用いて生成された鍵マスクT(M)に置き換えた式である。したがって、出力用の秘匿検索キーワードの暗号文本体が共通秘密鍵403及びマスタ秘密鍵606を用いて生成された暗号文本体に変換されていることが分かる。
全体処理モジュール511は、検索鍵703及び検索タグを復号モジュール513に入力し、復号を指示する。
復号モジュール513は、検索鍵703を用いて検索タグを復号する。
全体処理モジュール511は、新たな暗号文本体及び復号された検索タグを結合することによって、秘匿検索キーワードを生成する。以上がステップS1505の処理の説明である。
次に、データ管理サーバ103は、生成された秘匿検索キーワードを用いて、データベース503に格納される秘匿データ532を検索する(ステップS1506)。具体的には、以下のような処理が実行される。
全体処理モジュール511は、ターゲット秘匿データ532を一つ選択する。
全体処理モジュール511は、ターゲット秘匿データ532の暗号文本体及び秘匿検索キーワードの暗号文本体を基本演算モジュール517に入力し、排他的論理和の演算を指示する。
基本演算モジュール517は、ターゲット秘匿データ532の暗号文本体及び暗号化キーワードの暗号文本体の排他的論理和R’’を算出する。当該排他的論理和は、式(6)及び式(9)から、乱数マスクR及び乱数マスクR’の排他的論理和となる。
全体処理モジュール511は、排他的論理和R’’を準同型関数演算モジュール316に入力し、準同型関数の演算を指示する。
準同型関数は式(2)の関係を満たすことから、準同型関数演算モジュール316は、乱数マスクRを入力した準同型関数の演算結果(第1の演算結果)と、乱数マスクR’ を入力した準同型関数の演算結果(第3の演算結果)との排他的論理和F’’を、R’’の準同型関数の演算結果として算出する。排他的論理和F’’とステップS1505において生成された検索タグとの排他的論理和の演算結果として、第1の演算結果が出力される。
全体処理モジュール511は、第1の演算結果を不可逆変換モジュール515に入力し、演算を指示する。
不可逆変換モジュール315は、第1の演算結果を変換することによって第4の演算結果を出力する。全体処理モジュール511は、第4の演算結果から、暗号化コンテキスト502に含まれる検索タグ長523に示すビット長のデータを抽出する。
全体処理モジュール511は、抽出されたデータ及びターゲット秘匿データ532の検索タグが一致するか否かを判定する。
抽出されたデータ及びターゲット秘匿データ532の検索タグが一致した場合、全体処理モジュール511は、検索結果としてターゲット秘匿データ532をメモリ202の一時記憶領域に格納する。
抽出されたデータ及びターゲット秘匿データ532の検索タグが一致しない場合、全体処理モジュール511は、別の秘匿データ532をターゲット秘匿データ532に選択し、同様の処理を実行する。
なお、秘匿検索キーワードに一致する秘匿データ532が存在しない場合、全体処理モジュール511は、メモリ202の一時領域に検索処理の失敗を示す値を格納し、ステップS1506及びステップS1507の処理を実行せずに、ステップS1508に進む。ステップS1508では、検索処理に失敗を示す値を含む処理結果が送信される。以上がステップS1506の処理の説明である。
次に、データ管理サーバ103は、検索された秘匿データ532をユーザ秘密鍵404を用いて生成された出力用の秘匿データに変換するための再暗号化処理を実行する(ステップS1507)。具体的には、以下のような処理が実行される。
全体処理モジュール511は、検索された秘匿データ532から暗号文本体を取得する。全体処理モジュール511は、差分鍵マスク702及び暗号文本体を基本演算モジュール517に入力し、排他的論理和の演算を指示する。
基本演算モジュール517は、式(10)に示すように、暗号文本体及び差分鍵マスク702の排他的論理和を算出することによって、新たな暗号文本体を生成する。
式(10)は、式(3)及び式(4)を用いて式(11)のように変形できる。
式(11)に示すように、マスタ秘密鍵606から生成された暗号文本体が共通秘密鍵403及びユーザ秘密鍵404を用いて生成された出力用の秘匿データに変換されていることが分かる。
全体処理モジュール511は、初期ベクトル322、新たな暗号文本体、及び検索タグを結合することによって、出力用の秘匿データを生成する。全体処理モジュール511は、出力用の秘匿データを検索結果としてメモリ202に格納する。以上がステップS1507の処理の説明である。
次に、データ管理サーバ103は、処理結果を検索クライアント102に送信する(ステップS1508)。
検索クライアント102は、受信した処理結果が各処理の失敗を示す値を含む場合、ステップS1509の処理を実行せずに、ステップS1510に進む。
検索クライアント102は、受信した検索結果が出力用の秘匿データを含む場合、出力用の秘匿データの復号処理を実行する(ステップS1509)。具体的には、以下のような処理が実行される。
全体処理モジュール411は、出力用の秘匿データを、初期ベクトル322、暗号文本体、及び検索タグに分解する。
全体処理モジュール411は、出力用の秘匿データに含まれる初期ベクトル322及び暗号文本体、並びに、共通秘密鍵403に含まれる乱数マスク生成鍵431を擬似乱数生成モジュール414に入力し、乱数マスクの生成を指示する。
擬似乱数生成モジュール314は、乱数マスク生成鍵431及び初期ベクトル322を用いて、乱数マスクを生成する。
全体処理モジュール411は、ユーザ秘密鍵404に含まれる鍵マスク生成鍵441及び鍵マスク用ノンス442を擬似乱数生成モジュール414に入力し、鍵マスクの生成を指示する。
擬似乱数生成モジュール414は、鍵マスク生成鍵441及び鍵マスク用ノンス442を用いて鍵マスクを生成する。
全体処理モジュール411は、暗号文本体、乱数マスク、及び鍵マスクを基本演算モジュール417に入力し、排他的論理和の演算を指示する。
基本演算モジュール417は、暗号文本体、乱数マスク、及び鍵マスクの排他的論理和を算出することによって、中間暗号文を生成する。
全体処理モジュール411は、中間暗号文、出力用の秘匿データに含まれる初期ベクトル322、及び共通秘密鍵403に含まれるデータ暗号化鍵432を復号モジュール413に入力し、中間暗号文の復号を指示する。
復号モジュール413は、初期ベクトル322及びデータ暗号化鍵432を用いて中間暗号文を復号することによって、平文データ305を取得する。以上が、ステップS1509の処理の説明である。
検索クライアント102は、出力装置207を介して処理結果をユーザに表示する(ステップS1510)。
鍵管理情報505に登録されていないユーザが検索クライアント102を操作した場合、データ管理サーバ103は、秘匿データ532の検索を行わない。また、秘匿検索キーワードの再暗号化処理では、データ管理サーバ103は、ユーザ秘密鍵404を用いて生成された出力用の秘匿検索キーワードを復号することなく、マスタ秘密鍵606を用いた生成された秘匿検索キーワードに変換できる。これによって、どのユーザ秘密鍵304を用いてもデータベース503の検索が可能となる。また、秘匿検索キーワード及び秘匿データの再暗号化処理では、共通秘密鍵403、ユーザ秘密鍵404、及びマスタ秘密鍵606はデータ管理サーバ103に知らされないため、データ管理サーバ103は秘匿検索キーワード及び秘匿データ532を平文データに復号できない。したがって、セキュリティの問題は発生しない。
<ユーザ秘密鍵の更新処理>
図16は、実施例1のシステム内で実行されるユーザ秘密鍵の更新処理の流れを示すシーケンス図である。ここでは、登録クライアント101のユーザ秘密鍵304を更新する場合を一例として処理を説明する。
管理クライアント105と鍵管理サーバ104との間で認証処理が完了した後、管理者は、管理画面900を参照し、選択欄901の「ユーザ秘密鍵更新」のラジオボタンを操作し、また、ユーザID入力欄902に値を設定した後、実行ボタン903を操作する。
管理クライアント105は、管理画面900を介して管理者からユーザ秘密鍵の更新指示を受け付けた場合、ユーザIDを含むユーザ秘密鍵の更新要求を鍵管理サーバ104に送信する(ステップS1601)。
鍵管理サーバ104は、ユーザ秘密鍵の更新要求を受信した場合、新たなユーザ秘密鍵304を生成する(ステップS1602)。ステップS1602の処理は、ステップS1002の処理と同様であるため説明を省略する。
鍵管理サーバ104は、鍵バージョン生成処理を実行し(ステップS1603)、また、新たなユーザ秘密鍵304及びマスタ秘密鍵606を用いて、差分鍵マスク生成処理を実行する(ステップS1604)。ここでは、変換用差分鍵マスクが生成される。なお、ステップS1603及びステップS1604の処理は、ステップS1003及びステップS1004の処理と同様であるため説明を省略する。
鍵管理サーバ104は、ユーザID、鍵バージョン、差分鍵マスク、及び検索鍵を含むユーザ秘密鍵の更新要求をデータ管理サーバ103に送信する(ステップS1605)。
データ管理サーバ103は、ユーザ秘密鍵の更新要求を受信した場合、鍵管理情報505を更新する(ステップS1606)。
具体的には、全体処理モジュール511は、鍵管理情報505を参照して、ユーザID701がユーザ秘密鍵の更新要求に含まれるユーザIDに一致するレコードを検索する。全体処理モジュール511は、検索されたレコードの差分鍵マスク702、検索鍵703、及び鍵バージョン704に、ユーザ秘密鍵の更新要求に含まれる差分鍵マスク、検索鍵、及び鍵バージョンを設定する。
データ管理サーバ103は、鍵管理情報505の更新処理の成否を示す値を含む処理結果を鍵管理サーバ104に送信する(ステップS1607)。
鍵管理サーバ104は、鍵管理情報505の更新処理の失敗を示す値を含む処理結果を受信した場合、ステップS1608の処理を実行せずに、ステップS1611に進む。ステップS1611では、鍵管理情報505の更新処理の失敗を示す値を含む処理結果が送信される。
鍵管理サーバ104は、鍵管理情報505の更新処理の成功を示す値を含む処理結果を受信した場合、新たなユーザ秘密鍵304を含む鍵更新要求を登録クライアント101に送信する(ステップS1608)。
登録クライアント101は、鍵更新要求を受信した場合、現在のユーザ秘密鍵304を新たなユーザ秘密鍵304に更新し(ステップS1609)、鍵管理サーバ104に処理結果を送信する(ステップS1610)。
鍵管理サーバ104は、登録クライアント101から処理結果を受信した場合、管理クライアント105に処理結果を送信する(ステップS1611)。
管理クライアント105は、出力装置207を用いて処理結果を管理者に表示する(ステップS1612)。
なお、検索クライアント102のユーザ秘密鍵404を更新する場合も同様の処理が実行される。
なお、図16では、管理クライアント105からのユーザ秘密鍵の更新要求を送信を契機に、ユーザ秘密鍵の更新処理が開始されているが、実行契機はこれに限定されない。例えば、ユーザ秘密鍵304、404に有効期限を示す値を付加し、登録クライアント101及び検索クライアント102が、有効期限を経過したユーザ秘密鍵304、404の更新要求を鍵管理サーバ104に送信する。
暗号化処理及び復号処理に使用するユーザ秘密鍵304、404を更新する場合、特定のユーザが使用するユーザ秘密鍵304、404のみが更新される。すなわち、共通秘密鍵303、403は更新されず、また、他のユーザ秘密鍵304、404も更新されない。また、データベース503には、マスタ秘密鍵606を用いて生成された秘匿データ532が格納されるため、ユーザ秘密鍵304、404の更新に伴って、データベース503に格納される秘匿データ532を更新する必要がない。したがって、秘密鍵の更新コストを削減できる。
<マスタ秘密鍵の更新処理>
図17は、実施例1のシステム内で実行されるマスタ秘密鍵の更新処理の流れを示すシーケンス図である。
管理クライアント105と鍵管理サーバ104との間で認証処理が完了した後、管理者は、管理画面900を参照し、選択欄901の「マスタ秘密鍵更新」のラジオボタンを操作した後、実行ボタン903を操作する。
管理クライアント105は、管理画面900を介して管理者からマスタ秘密鍵の更新指示を受け付けた場合、マスタ秘密鍵の更新要求を鍵管理サーバ104に送信する(ステップS1701)。
鍵管理サーバ104は、マスタ秘密鍵の更新要求を受信した場合、新たなマスタ秘密鍵606を生成し、古いマスタ秘密鍵606を新たなマスタ秘密鍵606に更新する(ステップS1702)。このとき、鍵管理サーバ104は、メモリ202の一時記憶領域に古いマスタ秘密鍵606を格納する。
鍵管理サーバ104は、新しいマスタ秘密鍵606及び古いマスタ秘密鍵606を用いて、差分鍵マスク生成処理を実行する(ステップS1703)。ここでは、更新用差分鍵マスクが生成される。
鍵管理サーバ104は、データ管理サーバ103に、更新用差分鍵マスクを含む秘匿データの更新要求を送信する(ステップS1704)。
データ管理サーバ103は、秘匿データの更新要求を受信した場合、秘匿データの更新要求に含まれる更新用差分鍵マスクを用いてデータベース503に格納される秘匿データ532の再暗号化処理を実行する(ステップS1705)。具体的には、以下のような処理が実行される。
全体処理モジュール511は、ターゲット秘匿データ532を一つ選択する。全体処理モジュール511は、ターゲット秘匿データ532の暗号文本体を取得する。
全体処理モジュール511は、暗号文本体及び更新用差分鍵マスクを基本演算モジュール517に入力し、排他的論理和の演算を指示する。
基本演算モジュール517は、式(12)に示すように、暗号文本体及び更新用差分鍵マスクの排他的論理和を算出する。
ここで、D(M’)は新たなマスタ秘密鍵606「M’」に対応する暗号文本体を示し、KD(M,M’)はステップS1703において生成された更新用差分鍵マスクを示す。
式(12)は、式(3)及び式(4)を用いて式(13)のように変形できる。
全体処理モジュール511は、初期ベクトル322、新たな暗号文本体、及び検索タグを結合することによって、新たな秘匿データ532を生成する。
全体処理モジュール511は、データベース503に格納される全ての秘匿データ532に対して同様の処理を実行する。以上がステップS1705の処理の説明である。
データ管理サーバ103は、鍵管理情報505の各レコードの差分鍵マスク702を更新する(ステップS1706)。具体的には、以下のような処理が実行される。
全体処理モジュール511は、鍵管理情報505のレコードの中からターゲットレコードを一つ選択する。
全体処理モジュール511は、更新用差分鍵マスク及びターゲットレコードの差分鍵マスク702を基本演算モジュール517に入力し、排他的論理和の演算を指示する。
基本演算モジュール517は、式(14)に示すように、更新用差分鍵マスク及びターゲットレコードの差分鍵マスク702の排他的論理和を算出する。
式(14)は、式(3)を用いて式(15)のように変形できる。
次に、データ管理サーバ103は、鍵管理サーバ104に処理結果を送信する(ステップS1707)。
鍵管理サーバ104は、データ管理サーバ103から処理結果を受信し、当該処理結果を管理クライアント105に送信する(ステップS1708)。
鍵管理サーバ104は、鍵管理サーバ104から処理結果を受信した場合、出力装置207を用いて処理結果を管理者に表示する(ステップS1709)。
マスタ秘密鍵606を更新する場合、鍵管理サーバ104及びデータ管理サーバ103間でのみデータの送受信が行われる。また、データ管理サーバ103は、秘匿データ532を復号することなく、新たなマスタ秘密鍵606に対応する秘匿データ532を生成できる。したがって、秘密鍵の更新コストを削減できる。
<鍵回復処理>
図18は、実施例1のシステム内で実行される鍵回復処理の流れを示すシーケンス図である。
鍵回復処理は、鍵管理サーバ104に格納される鍵管理情報605が破損又は削除された場合に実行される処理である。なお、鍵管理サーバ104は、更新前のマスタ秘密鍵606を保持する。当該マスタ秘密鍵606は、記憶装置203に格納されたバックアップデータ等から取得してもよいし、管理者が入力装置206を介して入力してもよい。
鍵管理サーバ104は、登録クライアント101にユーザ秘密鍵の取得要求を送信する(ステップS1801)。なお、登録クライアント101が複数存在する場合、鍵管理サーバ104は、各登録クライアント101にユーザ秘密鍵の取得要求を送信する。
登録クライアント101は、ユーザ秘密鍵の取得要求を受信した場合、登録クライアント101が保持する共通秘密鍵303及びユーザ秘密鍵304を鍵管理サーバ104に送信する(ステップS1802)。なお、登録クライアント101は、ユーザ秘密鍵304に対応するユーザIDも合わせて送信する。
鍵管理サーバ104は、共通秘密鍵303、並びに、ユーザID及びユーザ秘密鍵304を受信した場合、データ管理サーバ103にユーザIDを含む差分鍵マスクの取得要求を送信する(ステップS1803)。
データ管理サーバ103は、差分鍵マスクの取得要求を受信した場合、鍵管理情報505から差分鍵マスクを取得し、取得した差分鍵マスクを含む処理結果を送信する(ステップS1804)。
具体的には、全体処理モジュール511は、鍵管理情報505を参照し、ユーザID701が当該取得要求に含まれるユーザIDに一致するレコードを検索する。全体処理モジュール511は、検索されたレコードの差分鍵マスク702の値を含む検索結果を鍵管理サーバ104に送信する。
鍵管理サーバ104は、データ管理サーバ103から処理結果を受信した場合、新たにマスタ秘密鍵606を生成する(ステップS1805)。
鍵管理サーバ104は、取得したユーザ秘密鍵304及び新たなマスタ秘密鍵606を用いて、差分鍵マスク生成処理を実行する(ステップS1806)。ここでは、式(16)に示すような変換用差分鍵マスクが生成される。
ここで、T(M’)は、新たなマスタ秘密鍵606「M’」から生成される鍵マスク(鍵ストリーム)を示し、KD(M’,A)は新たに生成される変換用差分鍵マスクを示す。
鍵管理サーバ104は、古いマスタ秘密鍵606及び新たなマスタ秘密鍵606を用いて、差分鍵マスク生成処理を実行する(ステップS1807)。ここでは、式(17)に示すような更新用差分鍵マスクが生成される。
式(15)は、式(3)及び式(16)を用いて式(18)のように変形できる。
鍵管理サーバ104は、算出された更新用差分鍵マスクを含む秘匿データの更新要求をデータ管理サーバ103に送信する(ステップS1808)。
データ管理サーバ103は、秘匿データの更新要求を受信した場合、秘匿データの更新要求に含まれる更新用差分鍵マスクを用いてデータベース503に格納される秘匿データ532の再暗号化処理を実行する(ステップS1809)。ステップS1809の処理は、ステップS1706の処理と同様の処理であるため説明を省略する。
データ管理サーバ103は、鍵管理情報505の各レコードの差分鍵マスク702を更新する(ステップS1810)。ステップS1810の処理は、ステップS1706の処理と同様の処理であるため説明を省略する。
データ管理サーバ103は、処理結果を鍵管理サーバ104に送信する(ステップS1811)。
本発明では、各ユーザに設定されたユーザ秘密鍵304、404に基づいて、データベース503の操作を制御できる。これによって、高いセキュリティを実現できる。
また、ユーザを登録又は削除する場合にはデータベース503を更新する必要がなく、また、他のユーザのユーザ秘密鍵304、404に影響を与えない。また、特定のユーザ秘密鍵304、404を更新する場合、データベース504及び他のユーザ秘密鍵304、404を更新する必要がない。また、マスタ秘密鍵606を更新する場合、ユーザ秘密鍵304、404を更新する必要がない。したがって、鍵の追加、削除、及び更新等の運用コストを削減できるため、迅速に秘密鍵の漏洩に伴う対策を行うことができる。また、柔軟の運用が可能となる。
また、秘匿データ及び秘匿検索キーワードの変換処理では、データ管理サーバ103に共通秘密鍵303、403、ユーザ秘密鍵304、404、及びマスタ秘密鍵606を開示する必要がないため、高いセキュリティを実現できる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるCPUが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD−RW、CD−R等の記憶媒体に格納し、コンピュータが備えるCPUが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。