(58)【調査した分野】(Int.Cl.,DB名)
平文と、前記平文を参照する権限を有する利用者の複数の属性を識別する複数の属性値を示す属性情報と、検索クエリを生成するためのユーザ鍵の生成時に使用される鍵と同じ登録鍵と、を受け付ける受付部と、
前記属性情報に含まれる複数の属性値を集約することによって、それぞれに1つ以上の属性値で構成される1つ以上の集約値を示す集約情報を生成する集約情報生成部と、
前記集約情報に含まれる各集約値に対して集約値の中のゼロ個以上の属性値を代替するゼロ個以上のワイルドカードと集約値の中の残りの属性値とで構成される汎化値を複数生成し、前記集約情報に含まれる各集約値に対する複数の汎化値を示す汎化情報を生成する汎化情報生成部と、
前記平文と前記属性情報と前記汎化情報と前記登録鍵とを用いて、暗号化された前記平文を含んだ暗号文データを生成する暗号文データ生成部と、
前記平文に関するキーワードと前記属性情報と前記汎化情報と前記登録鍵とを用いて、暗号化された前記キーワードを含んだ暗号化タグを生成する暗号化タグ生成部と、
前記暗号文データと前記暗号化タグとの組をデータベースに登録する登録部と、
を備える登録装置。
平文と、前記平文を参照する権限を有する利用者の複数の属性を識別する複数の属性値を示す属性情報と、検索クエリを生成するためのユーザ鍵の生成時に使用される鍵と同じ登録鍵と、を受け付ける受付処理と、
前記属性情報に含まれる複数の属性値を集約することによって、それぞれに1つ以上の属性値で構成される1つ以上の集約値を示す集約情報を生成する集約情報生成処理と、
前記集約情報に含まれる各集約値に対して集約値の中のゼロ個以上の属性値を代替するゼロ個以上のワイルドカードと集約値の中の残りの属性値とで構成される汎化値を複数生成し、前記集約情報に含まれる各集約値に対する複数の汎化値を示す汎化情報を生成する汎化情報生成処理と、
前記平文と前記属性情報と前記汎化情報と前記登録鍵とを用いて、暗号化された前記平文を含んだ暗号文データを生成する暗号文データ生成処理と、
前記平文に関するキーワードと前記属性情報と前記汎化情報と前記登録鍵とを用いて、暗号化された前記キーワードを含んだ暗号化タグを生成する暗号化タグ生成処理と、
前記暗号文データと前記暗号化タグとの組をデータベースに登録する登録処理と、
をコンピュータに実行させるための登録プログラム。
【発明を実施するための形態】
【0012】
実施の形態および図面において、同じ要素または対応する要素には同じ符号を付している。説明した要素と同じ符号が付された要素の説明は適宜に省略または簡略化する。図中の矢印はデータの流れ又は処理の流れを主に示している。
【0013】
実施の形態1.
マルチユーザ型の共通鍵方式で秘匿検索を行う形態について、
図1から
図26に基づいて説明する。
【0014】
***構成の説明***
図1に基づいて、秘匿検索システム100の構成を説明する。
秘匿検索システム100は、マスター鍵装置200と、登録鍵装置300と、ユーザ鍵装置400と、登録装置500と、検索操作装置600と、データ管理装置700と、を備える。
秘匿検索システム100の各装置は、ネットワーク101を介して互いに通信を行う。
【0015】
図2に基づいて、マスター鍵装置200の構成を説明する。
マスター鍵装置200は、プロセッサ201とメモリ202と補助記憶装置203と入出力インタフェース204と通信装置205といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【0016】
プロセッサ201は、演算処理を行うICであり、他のハードウェアを制御する。例えば、プロセッサ201は、CPU、DSPまたはGPUである。
ICは、Integrated Circuitの略称である。
CPUは、Central Processing Unitの略称である。
DSPは、Digital Signal Processorの略称である。
GPUは、Graphics Processing Unitの略称である。
【0017】
メモリ202は揮発性または不揮発性の記憶装置である。メモリ202は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ202はRAMである。メモリ202に記憶されたデータは必要に応じて補助記憶装置203に保存される。
RAMは、Random Access Memoryの略称である。
【0018】
補助記憶装置203は不揮発性の記憶装置である。例えば、補助記憶装置203は、ROM、HDDまたはフラッシュメモリである。補助記憶装置203に記憶されたデータは必要に応じてメモリ202にロードされる。
ROMは、Read Only Memoryの略称である。
HDDは、Hard Disk Driveの略称である。
【0019】
入出力インタフェース204は、入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース204はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
USBは、Universal Serial Busの略称である。
【0020】
通信装置205はレシーバ及びトランスミッタである。例えば、通信装置205は通信チップまたはNICである。
NICは、Network Interface Cardの略称である。
【0021】
マスター鍵装置200は、受付部210と生成部220と出力部230といった要素を備える。これらの要素はソフトウェアで実現される。
【0022】
補助記憶装置203には、受付部210と生成部220と出力部230としてコンピュータを機能させるためのマスター鍵プログラムが記憶されている。マスター鍵プログラムは、メモリ202にロードされて、プロセッサ201によって実行される。
補助記憶装置203には、さらに、OSが記憶されている。OSの少なくとも一部は、メモリ202にロードされて、プロセッサ201によって実行される。
プロセッサ201は、OSを実行しながら、マスター鍵プログラムを実行する。
OSは、Operating Systemの略称である。
【0023】
マスター鍵プログラムの入出力データは記憶部290に記憶される。
補助記憶装置203は記憶部290として機能する。但し、メモリ202、プロセッサ201内のレジスタおよびプロセッサ201内のキャッシュメモリなどの記憶装置が、補助記憶装置203の代わりに、又は、補助記憶装置203と共に、記憶部290として機能してもよい。
【0024】
マスター鍵装置200は、プロセッサ201を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ201の機能を分担する。
【0025】
マスター鍵プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータ読み取り可能に記録(格納)することができる。
【0026】
図3に基づいて、登録鍵装置300の構成を説明する。
登録鍵装置300は、プロセッサ301とメモリ302と補助記憶装置303と入出力インタフェース304と通信装置305といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【0027】
プロセッサ301は、演算処理を行うICであり、他のハードウェアを制御する。例えば、プロセッサ301はCPU、DSPまたはGPUである。
メモリ302は揮発性または不揮発性の記憶装置である。メモリ302は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ302はRAMである。メモリ302に記憶されたデータは必要に応じて補助記憶装置303に保存される。
補助記憶装置303は不揮発性の記憶装置である。例えば、補助記憶装置303は、ROM、HDDまたはフラッシュメモリである。補助記憶装置303に記憶されたデータは必要に応じてメモリ302にロードされる。
入出力インタフェース304は、入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース304はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置305はレシーバ及びトランスミッタである。例えば、通信装置305は通信チップまたはNICである。
【0028】
登録鍵装置300は、受付部310と生成部320と出力部330といった要素を備える。これらの要素はソフトウェアで実現される。
【0029】
補助記憶装置303には、受付部310と生成部320と出力部330としてコンピュータを機能させるための登録鍵プログラムが記憶されている。登録鍵プログラムは、メモリ302にロードされて、プロセッサ301によって実行される。
補助記憶装置303には、さらに、OSが記憶されている。OSの少なくとも一部は、メモリ302にロードされて、プロセッサ301によって実行される。
プロセッサ301は、OSを実行しながら、登録鍵プログラムを実行する。
【0030】
登録鍵プログラムの入出力データは記憶部390に記憶される。
補助記憶装置303は記憶部390として機能する。但し、メモリ302、プロセッサ301内のレジスタおよびプロセッサ301内のキャッシュメモリなどの記憶装置が、補助記憶装置303の代わりに、又は、補助記憶装置303と共に、記憶部390として機能してもよい。
【0031】
登録鍵装置300は、プロセッサ301を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ301の機能を分担する。
【0032】
登録鍵プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータ読み取り可能に記録(格納)することができる。
【0033】
図4に基づいて、ユーザ鍵装置400の構成を説明する。
ユーザ鍵装置400は、プロセッサ401とメモリ402と補助記憶装置403と入出力インタフェース404と通信装置405といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【0034】
プロセッサ401は、演算処理を行うICであり、他のハードウェアを制御する。例えば、プロセッサ401はCPU、DSPまたはGPUである。
メモリ402は揮発性または不揮発性の記憶装置である。メモリ402は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ402はRAMである。メモリ402に記憶されたデータは必要に応じて補助記憶装置403に保存される。
補助記憶装置403は不揮発性の記憶装置である。例えば、補助記憶装置403は、ROM、HDDまたはフラッシュメモリである。補助記憶装置403に記憶されたデータは必要に応じてメモリ402にロードされる。
入出力インタフェース404は、入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース404はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置405はレシーバ及びトランスミッタである。例えば、通信装置405は通信チップまたはNICである。
【0035】
ユーザ鍵装置400は、受付部410と生成部420と出力部430といった要素を備える。
生成部420は、集約情報生成部421とユーザ鍵生成部422といった要素を備える。
これらの要素はソフトウェアで実現される。
【0036】
補助記憶装置403には、受付部410と生成部420と出力部430としてコンピュータを機能させるためのユーザ鍵プログラムが記憶されている。ユーザ鍵プログラムは、メモリ402にロードされて、プロセッサ401によって実行される。
補助記憶装置403には、さらに、OSが記憶されている。OSの少なくとも一部は、メモリ402にロードされて、プロセッサ401によって実行される。
プロセッサ401は、OSを実行しながら、ユーザ鍵プログラムを実行する。
【0037】
ユーザ鍵プログラムの入出力データは記憶部490に記憶される。
補助記憶装置403は記憶部490として機能する。但し、メモリ402、プロセッサ401内のレジスタおよびプロセッサ401内のキャッシュメモリなどの記憶装置が、メモリ402の代わりに、又は、メモリ402と共に、記憶部490として機能してもよい。
【0038】
ユーザ鍵装置400は、プロセッサ401を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ401の機能を分担する。
【0039】
ユーザ鍵プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータ読み取り可能に記録(格納)することができる。
【0040】
図5に基づいて、登録装置500の構成を説明する。
登録装置500は、プロセッサ501とメモリ502と補助記憶装置503と入出力インタフェース504と通信装置505といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【0041】
プロセッサ501は、演算処理を行うICであり、他のハードウェアを制御する。例えば、プロセッサ501はCPU、DSPまたはGPUである。
メモリ502は揮発性または不揮発性の記憶装置である。メモリ502は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ502はRAMである。メモリ502に記憶されたデータは必要に応じて補助記憶装置503に保存される。
補助記憶装置503は不揮発性の記憶装置である。例えば、補助記憶装置503は、ROM、HDDまたはフラッシュメモリである。補助記憶装置503に記憶されたデータは必要に応じてメモリ502にロードされる。
入出力インタフェース504は、入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース504はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置505はレシーバ及びトランスミッタである。例えば、通信装置505は通信チップまたはNICである。
【0042】
登録装置500は、受付部510と生成部520と登録部530といった要素を備える。
生成部520は、乱数生成部521と集約情報生成部522と汎化情報生成部523と暗号文データ生成部524とキーワード生成部525と暗号化タグ生成部526といった要素を備える。
これらの要素はソフトウェアで実現される。
【0043】
補助記憶装置503には、受付部510と生成部520と登録部530としてコンピュータを機能させるための登録プログラムが記憶されている。登録プログラムは、メモリ502にロードされて、プロセッサ501によって実行される。
補助記憶装置503には、さらに、OSが記憶されている。OSの少なくとも一部は、メモリ502にロードされて、プロセッサ501によって実行される。
プロセッサ501は、OSを実行しながら、登録プログラムを実行する。
【0044】
登録プログラムの入出力データは記憶部590に記憶される。
補助記憶装置503は記憶部590として機能する。但し、メモリ502、プロセッサ501内のレジスタおよびプロセッサ501内のキャッシュメモリなどの記憶装置が、メモリ502の代わりに、又は、メモリ502と共に、記憶部590として機能してもよい。
【0045】
登録装置500は、プロセッサ501を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ501の機能を分担する。
【0046】
登録プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータ読み取り可能に記録(格納)することができる。
【0047】
図6に基づいて、検索操作装置600の構成を説明する。
検索操作装置600は、プロセッサ601とメモリ602と補助記憶装置603と入出力インタフェース604と通信装置605といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【0048】
プロセッサ601は、演算処理を行うICであり、他のハードウェアを制御する。例えば、プロセッサ601はCPU、DSPまたはGPUである。
メモリ602は揮発性または不揮発性の記憶装置である。メモリ602は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ602はRAMである。メモリ602に記憶されたデータは必要に応じて補助記憶装置603に保存される。
補助記憶装置603は不揮発性の記憶装置である。例えば、補助記憶装置603は、ROM、HDDまたはフラッシュメモリである。補助記憶装置603に記憶されたデータは必要に応じてメモリ602にロードされる。
入出力インタフェース604は、入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース604はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置605はレシーバ及びトランスミッタである。例えば、通信装置605は通信チップまたはNICである。
【0049】
検索操作装置600は、受付部610と生成部620と要求部630と復号部640と出力部650といった要素を備える。
生成部620は、集約フラグ生成部621と位置情報生成部622と検索クエリ生成部623といった要素を備える。
復号部640は、集約フラグ生成部641と位置情報生成部642と検索結果復号部643といった要素を備える。
これらの要素はソフトウェアで実現される。
【0050】
補助記憶装置603には、受付部610と生成部620と要求部630と復号部640と出力部650としてコンピュータを機能させるための検索操作プログラムが記憶されている。検索操作プログラムは、メモリ602にロードされて、プロセッサ601によって実行される。
補助記憶装置603には、さらに、OSが記憶されている。OSの少なくとも一部は、メモリ602にロードされて、プロセッサ601によって実行される。
プロセッサ601は、OSを実行しながら、検索操作プログラムを実行する。
【0051】
検索操作プログラムの入出力データは記憶部690に記憶される。
補助記憶装置603は記憶部690として機能する。但し、メモリ602、プロセッサ601内のレジスタおよびプロセッサ601内のキャッシュメモリなどの記憶装置が、補助記憶装置603の代わりに、又は、補助記憶装置603と共に、記憶部690として機能してもよい。
【0052】
検索操作装置600は、プロセッサ601を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ601の機能を分担する。
【0053】
検索操作プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータ読み取り可能に記録(格納)することができる。
【0054】
図7に基づいて、データ管理装置700の構成を説明する。
データ管理装置700は、プロセッサ701とメモリ702と補助記憶装置703と入出力インタフェース704と通信装置705といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【0055】
プロセッサ701は、演算処理を行うICであり、他のハードウェアを制御する。例えば、プロセッサ701はCPU、DSPまたはGPUである。
メモリ702は揮発性または不揮発性の記憶装置である。メモリ702は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ702はRAMである。メモリ702に記憶されたデータは必要に応じて補助記憶装置703に保存される。
補助記憶装置703は不揮発性の記憶装置である。例えば、補助記憶装置703は、ROM、HDDまたはフラッシュメモリである。補助記憶装置703に記憶されたデータは必要に応じてメモリ702にロードされる。
入出力インタフェース704は、入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース704はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置705はレシーバ及びトランスミッタである。例えば、通信装置705?は通信チップまたはNICである。
【0056】
データ管理装置700は、受付部710と検索部720と出力部730と管理部740といった要素を備える。
検索部720は、照合部721と抽出部722といった要素を備える。
これらの要素はソフトウェアで実現される。
【0057】
補助記憶装置703には、受付部710と検索部720と出力部730としてコンピュータを機能させるためのデータ管理プログラムが記憶されている。データ管理プログラムは、メモリ702にロードされて、プロセッサ701によって実行される。
補助記憶装置703には、さらに、OSが記憶されている。OSの少なくとも一部は、メモリ702にロードされて、プロセッサ701によって実行される。
プロセッサ701は、OSを実行しながら、データ管理プログラムを実行する。
【0058】
データ管理プログラムの入出力データは記憶部790に記憶される。
補助記憶装置703は記憶部790として機能する。但し、メモリ702、プロセッサ701内のレジスタおよびプロセッサ701内のキャッシュメモリなどの記憶装置が、補助記憶装置703の代わりに、又は、補助記憶装置703と共に、記憶部790として機能してもよい。
【0059】
データ管理装置700は、プロセッサ701を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ701の機能を分担する。
【0060】
データ管理プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータ読み取り可能に記録(格納)することができる。
【0061】
***動作の説明***
秘匿検索システム100の動作の手順は秘匿検索方法に相当する。
【0062】
図8に基づいて、秘匿検索方法の概要を説明する。
ステップS101において、マスター鍵装置200はマスター鍵MKを生成する。
【0063】
ステップS102において、登録鍵装置300はマスター鍵MKを用いて登録鍵EKを生成する。
【0064】
ステップS103において、ユーザ鍵装置400は登録鍵EKを用いてユーザ鍵UKを生成する。
【0065】
ステップS111において、登録装置500は、登録鍵EKを用いて暗号文データCと暗号化タグCTとの組を生成し、生成した組をデータベースに登録する。
暗号文データCは、平文Mを暗号化することによって生成される。
暗号化タグCTは、暗号文データCを検索するためのキーワードを暗号化することによって生成される。暗号化タグCTからキーワードが漏洩することはない。
データベースには、暗号文データCと暗号化タグCTとの組が複数登録される。
【0066】
ステップS112において、検索操作装置600はユーザ鍵UKを用いて検索クエリSQを生成する。
検索クエリSQは、ユーザ鍵UKを用いて、指定されたキーワードをランダム化することによって生成される。
【0067】
ステップS113において、検索操作装置600は、検索クエリSQをデータ管理装置700へ送信することによって検索を要求する。
データ管理装置700は、検索クエリSQを受信し、検索クエリSQに合致する暗号化タグCTを特殊な演算によって検索する。
特殊な演算において、各暗号化タグCTが復号されずに、検索クエリSQのキーワードが各暗号化タグCTのキーワードと比較される。
【0068】
ステップS114において、データ管理装置700は、検索クエリSQに合致する暗号化タグCTに対応する暗号文データCを検索操作装置600へ送信することによって、検索結果を応答する。
検索操作装置600は、暗号文データCを受信し、ユーザ鍵UKを用いて暗号文データCから平文Mを復号する。
【0069】
図9に基づいて、マスター鍵生成(S120)を説明する。
マスター鍵生成(S120)は、マスター鍵装置200によって実行される処理である。
【0070】
ステップS121において、受付部210は鍵長BITを受け付ける。
例えば、受付部210は、マスター鍵装置200に入力される鍵長BITを入出力インタフェース204を介して受け付ける。受付部210は、マスター鍵装置200において実行されるアプリケーションプログラムから、鍵長BITを受け付けてもよい。
【0071】
鍵長BITは、マスター鍵MKのビット長さである。
【0072】
ステップS122において、生成部220はマスター鍵MKを生成する。
具体的には、生成部220は、鍵長BITと同じ長さを有するランダムなビット列を生成する。生成されるビット列がマスター鍵MKである。
例えば、鍵長BITが256ビットである場合、生成部220は、256ビットのランダムなビット列を生成する。これにより、256ビットのマスター鍵MKが得られる。
【0073】
ステップS123において、生成部220はマスター鍵MKを記憶部290に記憶する。これにより、マスター鍵MKが記憶部290に保管される。
【0074】
ステップS124において、出力部230はマスター鍵MKを出力する。
例えば、出力部230は、通信装置205を用いて、マスター鍵MKを登録鍵装置300へ送信する。
【0075】
図10に基づいて、登録鍵生成(S130)を説明する。
登録鍵生成(S130)は、登録鍵装置300によって実行される処理である。
【0076】
ステップS131において、受付部310はマスター鍵MKを受け付ける。
例えば、受付部310は、通信装置305を用いて、マスター鍵装置200からマスター鍵MKを受信する。受付部310は、登録鍵装置300に入力されるマスター鍵MKを入出力インタフェース304を介して受け付けてもよい。
【0077】
ステップS132において、生成部320は、マスター鍵MKを用いて、データ鍵DKとタグ鍵TKとを生成する。
【0078】
具体的には、生成部320は、マスター鍵MKを入力として関数F_1を実行することによって、2つの乱数を生成する。各乱数はランダムなビット列である。
関数F_1の一例は、擬似ランダム関数である。
擬似ランダム関数は、暗号学的な関数であり、鍵が決まると入力値に応じて確定的に乱数を返す。
関数F_1は、SHA−1のような暗号学的なハッシュ関数またはAESのような共通鍵暗号方式の関数であってもよい。
【0079】
関数F_1によって生成される2つの乱数のうちの一方の乱数がデータ鍵DKである。データ鍵DKは次のように表すことができる。
DK = F_1(MK,1)
【0080】
関数F_1によって生成される2つの乱数のうちの他方の乱数がタグ鍵TKである。タグ鍵TKは次のように表すことができる。
TK = F_1(MK,2)
【0081】
データ鍵DKとタグ鍵TKとの組を「登録鍵EK」と呼ぶ。登録鍵EKは次のように表すことができる。
EK = (DK,TK)
【0082】
ステップS133において、生成部320は登録鍵EKを記憶部390に記憶する。これにより、登録鍵EKが記憶部390に保管される。
【0083】
ステップS134において、出力部330は登録鍵EKを出力する。
例えば、出力部330は、通信装置305を用いて、登録鍵EKをユーザ鍵装置400と登録装置500とのそれぞれに送信する。
【0084】
図11に基づいて、ユーザ鍵生成(S140)を説明する。
ユーザ鍵生成(S140)は、ユーザ鍵装置400によって実行される処理である。
【0085】
ステップS141において、受付部410は登録鍵EKを受け付ける。
例えば、受付部410は、通信装置405を用いて、登録鍵装置300から登録鍵EKを受信する。受付部410は、ユーザ鍵装置400に入力される登録鍵EKを入出力インタフェース404を介して受け付けてもよい。
【0086】
そして、受付部410は、登録鍵EKを記憶部490に記憶する。これにより、登録鍵EKが記憶部490に保管される。
【0087】
登録鍵EKが記憶部490に既に保管されている場合、ステップS141は不要である。
【0088】
登録鍵EKは、データ鍵DKとタグ鍵TKとを有する。
【0089】
ステップS142において、受付部410は属性情報Aを受け付ける。
例えば、受付部410は、ユーザ鍵装置400に入力される属性情報Aを入出力インタフェース404を介して受け付ける。受付部410は、ユーザ鍵装置400において実行されるアプリケーションプログラムから、属性情報Aを受け付けてもよい。
【0090】
属性情報Aは、検索者の属性情報である。
検索者は、検索操作装置600の利用者であり、暗号文C′を検索する。
利用者は、階層を成す複数の属性を有する。
属性情報は、複数の属性に対応する複数の属性値を示す。
各属性値は、各層における利用者の属性を識別する。
【0091】
図12に基づいて、属性情報の例を説明する。
属性情報は、4つの層に対応する4つの属性値を示している。
第1層の属性(第1属性)は事業部である。
第2層の属性(第2属性)は部である。
第3層の属性(第3属性)は課である。
第4層の属性(第4属性)は氏名である。
【0092】
1番の属性情報は、Neさんの属性情報である。Neさんは、Di事業部のDe部のSc課に所属する。
2番の属性情報は、Nfさんの属性情報である。Nfさんは、Di事業部のDe部のSd課に所属する。
3番の属性情報は、Sc課員の属性情報である。Sc課員は、Di事業部のDe部のSc課に所属する。第4属性値がワイルドカード「*」であるため、氏名は限定されない。
4番の属性情報は、De部員の属性情報である。De部員は、Di事業部のDe部に所属する。第3属性値および第4属性値がワイルドカード「*」であるため、課および氏名は限定されない。
【0093】
図11に戻り、ステップS142の説明を続ける。
利用者の属性を表現するための階層の層数を「L」と記す。Lは2以上の整数である。
属性情報はL個の属性値を示す。
【0094】
属性情報Aは次のように表すことができる。
A = (A_1,・・・,A_L)
【0095】
属性情報Aは、検索および復号の権限制御に関わる。
具体的には、属性情報Aに基づくデータを用いて、検索権限および復号権限が設定される。
属性情報Aは、検索権限用の属性情報と復号権限用の属性情報との2つの属性情報であってもよい。
【0096】
ステップS143において、集約情報生成部421は、属性情報Aに含まれる複数の属性値を1組以上のブロックに集約する。これにより、集約情報A′が生成される。
集約情報A′は、集約後の属性情報Aである。
集約情報A′の各ブロックは、1つ以上の属性値で構成される。
集約情報A′の各ブロックが示す値を集約値と呼ぶ。
【0097】
図13に基づいて、属性情報(
図12参照)を集約して得られる集約情報の例を説明する。「|」は連結を意味する記号である。
集約情報の第1要素は、第1属性と第2属性とを連結したものである。
集約情報の第2要素は、第3属性と第4属性とを連結したものである。
【0098】
1番の集約情報は、Neさんの集約情報である。
Neさんの属性情報(
図12参照)は(Di,De,Sc,Ne)である。
Neさんの集約情報(
図13参照)は(Di|De,Sc|Ne)である。
第1属性値Diと第2属性値Deは、連結されることによって1つの文字列Di|Deに集約されている。
第3属性値Scと第4属性値Neは、連結されることによって1つの文字列Sc|Neに集約されている。
他の集約情報も1番の集約情報と同様に表現される。
【0099】
図11に戻り、ステップS142の説明を続ける。
利用者の属性を表現するための階層の集約後の層数を「k」と記す。kは1以上の整数である。
集約情報はk個の集約値を示す。
集約値は、1つ以上の属性値を集約して得られる値である。具体的には、集約値は、1つ以上の属性値を連結して得られる文字列である。
【0100】
集約情報A′は次のように表すことができる。mは1以上の整数である。i_1,・・・,i_mは正の整数である。
A′ = (A′_1,・・・,A′_k)
A′_i = A_(i_1)|A_(i_2)|・・・|A_(i_m)
i_1<・・・<i_m、及び、i_1+1=i_2,i_2+1=i_3,・・・,i_(m−1)+1=i_m、i_m+1=(i+1)_1が成り立つ。
【0101】
ここで、
図12における1番の属性情報を属性情報Aと呼ぶ。
また、
図13における1番の集約情報を集約情報A1′と呼ぶ。
集約情報A1′は次のように表すことができる。
A1′=(A1′_1,A1′_2)=(A1_1|A1_2,A1_3|A1_4)=(Di|De,Sc|Ne)
【0102】
集約方法に対する制約はない。但し、秘匿検索システム100において、1つの集約方法が使用される。つまり、ユーザ鍵装置400と他の装置は同じ集約方法を使用する。
【0103】
ステップS144において、ユーザ鍵生成部422は、データ鍵DKと属性情報Aと集約情報A′とを用いて、ユーザデータ鍵UDKを生成する。データ鍵DKは登録鍵EKに含まれる。
【0104】
ユーザデータ鍵UDKは、データ属性鍵UDK_iとフラグ値Db_jとを有する。
iは1以上k以下の整数である。jは1以上L以下の整数である。
【0105】
ユーザ鍵生成部422は、データ属性鍵UDK_iを以下のように算出する。
まず、ユーザ鍵生成部422は、集約値A′_iと番号iとを連結する。得られるビット列が表す値を連結値A′_i|iと呼ぶ。
そして、ユーザ鍵生成部422は、データ鍵DKと連結値A′_i|iとを入力として関数F_2を実行する。得られる値がデータ属性鍵UDK_iである。
関数F_2は、関数F_1と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
【0106】
ユーザ鍵生成部422は、フラグ値Db_jを以下のように決定する。
ユーザ鍵生成部422は、属性値A_jがワイルドカード「*」であるか判定する。
属性値A_jがワイルドカード「*」である場合、フラグ値Db_jは1である。
属性値A_jがワイルドカード「*」でない場合、フラグ値Db_jは0である。
フラグ値Db_jは、属性値A_jがワイルドカード「*」であるか否かを示す。
【0107】
ユーザデータ鍵UDKは次のように表すことができる。iは1以上k以下の整数である。jは1以上L以下の整数である。
UDK = (UDK_1,・・・,UDK_k,Db_1,・・・,Db_L)
A_j=*である場合、Db_j = 1
A_j≠*である場合、Db_j = 0
UDK_i = F_2(DK,A′_i|i)
【0108】
ステップS145において、ユーザ鍵生成部422は、タグ鍵TKと属性情報Aと集約情報A′とを用いて、ユーザタグ鍵UTKを生成する。タグ鍵TKは登録鍵EKに含まれる。
【0109】
ユーザタグ鍵UTKは、タグ属性鍵UTK_iとフラグ値Tb_jとを有する。
iは1以上k以下の整数である。jは1以上L以下の整数である。
【0110】
ユーザ鍵生成部422は、タグ属性鍵UTK_iを以下のように算出する。
まず、ユーザ鍵生成部422は、集約値A′_iと番号iとを連結する。得られるビット列が表す値を連結値A′_i|iと呼ぶ。
そして、ユーザ鍵生成部422は、タグ鍵TKと連結値A′_i|iとを入力として関数F_2を実行する。得られる値がタグ属性鍵UTK_iである。
【0111】
ユーザ鍵生成部422は、フラグ値Tb_jを以下のように決定する。
ユーザ鍵生成部422は、属性値A_jがワイルドカード「*」であるか判定する。
属性値A_jがワイルドカード「*」である場合、フラグ値Tb_jは1である。
属性値A_jがワイルドカード「*」でない場合、フラグ値Tb_jは0である。
フラグ値Tb_jは、属性値A_jがワイルドカード「*」であるか否かを示す。
【0112】
ユーザタグ鍵UTKは次のように表すことができる。iは1以上k以下の整数である。jは1以上L以下の整数である。
UTK = (UTK_1,・・・,UTK_k,Tb_1,・・・,Tb_L)
A_j=*である場合、Tb_j = 1
A_j≠*である場合、Tb_j = 0
UTK_i = F_2(TK,A′_i|i)
【0113】
ユーザデータ鍵UDKとユーザタグ鍵UTKとの組を「ユーザ鍵UK」と呼ぶ。ユーザ鍵UKは次のように表すことができる。
UK = (UDK,UTK)
【0114】
ステップS146において、生成部420はユーザ鍵UKを記憶部490に記憶する。これにより、ユーザ鍵UKが記憶部490に保管される。
【0115】
ステップS147において、出力部430はユーザ鍵UKを出力する。
例えば、出力部430は、通信装置405を用いて、ユーザ鍵UKを検索操作装置600へ送信する。
【0116】
図14に基づいて、データ登録(S150)を説明する。
データ登録(S150)は、登録装置500によって実行される処理である。
【0117】
ステップS151において、受付部510は登録鍵EKを受け付ける。
例えば、受付部510は、通信装置505を用いて、登録鍵装置300から登録鍵EKを受信する。受付部510は、登録装置500に入力される登録鍵EKを入出力インタフェース504を介して受け付けてもよい。
【0118】
そして、受付部510は、登録鍵EKを記憶部590に記憶する。これにより、登録鍵EKが記憶部590に保管される。
【0119】
登録鍵EKが記憶部590に既に保管されている場合、ステップS151は不要である。
【0120】
登録鍵EKは、データ鍵DKとタグ鍵TKとを有する。
【0121】
ステップS152において、受付部510は、平文Mと属性情報Bとを受け付ける。
例えば、受付部510は、登録装置500に入力される平文Mと属性情報Bとを入出力インタフェース504を介して受け付ける。受付部510は、登録装置500において実行されるアプリケーションプログラムから、平文Mと属性情報Bとを受け付けてもよい。
【0122】
平文Mは、暗号化されていないデータである。
平文Mには、ファイル名File(M)がメタデータとして含まれる。
【0123】
属性情報Bは、権限者の属性情報である。
権限者は、検索操作装置600の利用者の一部であり、平文Mを参照する権限を有する。
例えば、属性情報Bは
図12に示された属性情報である。
【0124】
属性情報Bは次のように表すことができる。
B = (B_1,・・・,B_L)
【0125】
属性情報Bは、属性情報Aと同様に、検索および復号の権限制御に関わる。
【0126】
ステップS153において、乱数生成部521は、データ乱数群r=(r_1,・・・,r_k,rs)とタグ乱数群R=(R_1,・・・,R_k,RS)とを生成する。
データ乱数群rとタグ乱数群Rはそれぞれ(k+1)個の乱数からなる。各乱数は一様ランダムに生成される。
【0127】
ステップS154において、集約情報生成部522は、属性情報Bに含まれる複数の属性値を1組以上のブロックに集約する。これにより、集約情報B′が生成される。
集約情報B′は、集約後の属性情報Bである。
集約情報B′の各ブロックは、1つ以上の属性値で構成される。
集約情報B′の各ブロックが示す値を集約値と呼ぶ。
集約情報B′のための集約方法は、集約情報A′のための集約方法(
図11のステップS143を参照)と同じである。
例えば、集約情報B′は
図13に示された集約情報である。
【0128】
集約情報B′は以下のように表すことができる。mは1以上の整数である。i_1,・・・,i_mは正の整数である。
B′ = (B′_1,・・・,B′_k)
B′_i = B_(i_1)|B_(i_2)|・・・|B_(i_m)
i_1<・・・<i_m、及び、i_1+1=i_2,i_2+1=i_3,・・・,i_(m−1)+1=i_m、i_m+1=(i+1)_1が成り立つ。
【0129】
ステップS155において、汎化情報生成部523は、集約情報B′に含まれる各集約値をワイルドカードを用いて汎化する。これにより、汎化情報B^が生成される。
汎化情報B^は、各集約値に対する複数の汎化値を示す。
汎化値は、集約値の中のゼロ個以上の属性値を代替するゼロ個以上のワイルドカードと集約値の中の残りの属性値とで構成される。
【0130】
具体的には、汎化情報生成部523は、集約情報B′に含まれるi番目の集約値B′_iに対して、Ii個の汎化値B′_i^を以下のように生成する。
B′_i^0 = B′_i
= B_(i_1)|B_(i_2)|・・・|B_(i_m)
B′_i^1 = *|B_(i_2)|・・・|B_(i_m)
B′_i^2 = B_(i_1)|*|B_(i_3)|・・・|B_(i_m)
B′_i^3 = *|*|B_(i_3)|・・・|B_(i_m)
B′_i^4 = B_(i_1)|B_(i_2)|*|B_(i_4)|・・・|B_(i_m)
・・・
B′_i^Ii = *|*|・・・|*
Ii = 2
((i_m)−(i_1)+1)
【0131】
ここで、
図13における1番の集約情報を集約情報B′と呼ぶ。
また、集約情報B′に含まれる第1集約値を集約値B′_1と呼ぶ。
集約値B′_1に対して以下の4つの汎化値B′_1^が生成される。
B′_1^0 = B′_1 = Di|De
B′_1^1 = *|De
B′_1^2 = Di|*
B′_1^3 = *|*
【0132】
ここで、集約情報B′に含まれる第2集約値を集約値B′_2と呼ぶ。
集約値B′_2に対して以下の4つの汎化値B′_2^が生成される。
B′_2^0 = B′_2 = Sc|Ne
B′_2^1 = *|Ne
B′_2^2 = Sc|*
B′_2^3 = *|*
【0133】
図14に戻り、ステップS156から説明を続ける。
ステップS156において、暗号文データ生成部524は、データ鍵DKと平文Mと属性情報Bと汎化情報B^とデータ乱数群rとを用いて、暗号文データCを生成する。データ鍵DKは登録鍵EKに含まれる。
【0134】
暗号文データCは、属性要素C_{i,h}と乱数要素C_rsと暗号文C′を有する。
iは1以上k以下の整数である。hは0以上2
((i_m)−(i_1)+1)−1以下の整数である。
【0135】
暗号文データ生成部524は、属性要素C_{i,h}を以下のように算出する。
まず、暗号文データ生成部524は、汎化情報B^に含まれる汎化値B′_i^hと番号iとを連結する。得られるビット列が表す値を連結値B′_i^h|iと呼ぶ。
次に、暗号文データ生成部524は、データ鍵DKと連結値B′_i^h|iとを入力として関数F_2を実行する。得られる値を関数値(DK,B′_i^h|i)と呼ぶ。
次に、暗号文データ生成部524は、関数値(DK,B′_i^h|i)とデータ乱数群rに含まれる乱数rsとを入力として関数F_3を実行する。得られる値を関数値(DK,B′_i^h|i,rs)と呼ぶ。
関数F_3は、関数F_1と関数F_2と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
そして、暗号文データ生成部524は、関数値(DK,B′_i^h|i,rs)とデータ乱数群rに含まれる乱数r_iとの排他的論理和を算出する。得られる値が属性要素C_{i,j}である。
【0136】
暗号文データ生成部524は、データ乱数群rに含まれる乱数rsを乱数要素C_rsに設定する。
【0137】
暗号文データ生成部524は、暗号文C′を以下のように算出する。
まず、暗号文データ生成部524は、データ乱数群rに含まれるk個の乱数(r_1,・・・,r_k)の排他的論理和を算出する。得られる値を乱数和r+と呼ぶ。
次に、暗号文データ生成部524は、乱数和r+を入力として関数F_4を実行する。得られる値を関数値(r+)と呼ぶ。
関数F_4は、関数F_3と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
そして、暗号文データ生成部524は、関数値(r+)と平文Mとの排他的論理和を算出する。得られる値が暗号文C′である。
暗号文C′は、暗号化された平文Mである。
【0138】
暗号文データCは以下のように表すことができる。但し、実施の形態1において(+)は排他的論理和(XOR)を意味する。iは1以上k以下の整数である。mは1以上の整数である。
C = ((C_{1,0},C_{1,1},・・・,C_{1,I1}),(C_{2,0},C_{2,1},・・・,C_{2,I2}),・・・,(C_{k,0},C_{k,1},・・・,C_{k,Ik}),C_rs,C′)
C_{i,h} = F_3(F_2(DK,B′_i^h|i),rs)(+)r_i
C_rs = rs
C′ = F_4(r_1(+)・・・(+)r_k)(+)M
Ii = 2
((i_m)−(i_1)+1)
【0139】
ステップS157において、キーワード生成部525は、平文Mに関するキーワードを生成する。
具体的には、キーワード生成部525は、平文Mに対して形態素解析または自然言語処理などを行うことによって、平文Mからキーワードを抽出する。
但し、キーワード生成部525は、登録装置500に入力されるキーワードを入出力インタフェース504を介して受け付けてもよい。また、キーワード生成部525は、登録装置500において実行されるアプリケーションプログラムから、平文Mに関するキーワードを受け付けてもよい。
【0140】
平文Mに関するキーワードを「登録キーワードW」と呼ぶ。
登録キーワードWは複数あってもよい。複数の登録キーワードWがある場合、各登録キーワードWに対して暗号化タグCTが生成される。
【0141】
ステップS158において、暗号化タグ生成部526は、タグ鍵TKと属性情報Bと汎化情報B^とタグ乱数群Rと登録キーワードWとを用いて、暗号化タグCTを生成する。タグ鍵TKは登録鍵EKに含まれる。
【0142】
暗号化タグCTは、属性要素CT_{i,h}と乱数要素CT_RSと検証要素CT_Vとを有する。
iは1以上k以下の整数である。hは0以上2
((i_m)−(i_1)+1)−1以下の整数である。
【0143】
暗号化タグ生成部526は、属性要素CT_{i,h}を以下のように算出する。
まず、暗号化タグ生成部526は、汎化情報B^に含まれる汎化値B′_i^hと番号iとを連結する。得られるビット列が表す値を連結値B′_i^h|iと呼ぶ。
次に、暗号化タグ生成部526は、タグ鍵TKと連結値B′_i^h|iとを入力として関数F_2を実行する。得られる値を関数値(TK,B′_i^h|i)と呼ぶ。
次に、暗号化タグ生成部526は、関数値(TK,B′_i^h|i)と登録キーワードWとを入力として関数F_5を実行する。得られる値を関数値(TK,B′_i^h|i,W)と呼ぶ。
関数F_5は、関数F_1と関数F_2と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
次に、暗号化タグ生成部526は、関数値(TK,B′_i^h|i,W)とタグ乱数群Rに含まれる乱数RSとを入力として関数F_6を実行する。得られる値を関数値(TK,B′_i^h|i,W,RS)と呼ぶ。
関数F_6は、関数F_5と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
そして、暗号化タグ生成部526は、関数値(TK,B′_i^h|i,W,RS)とタグ乱数群Rに含まれる乱数R_iとの排他的論理和を算出する。得られる値が属性要素CT_{i,h}である。
【0144】
暗号化タグ生成部526は、タグ乱数群Rに含まれる乱数RSを乱数要素CT_RSに設定する。
【0145】
暗号化タグ生成部526は、検証要素CT_Vを以下のように算出する。
まず、暗号化タグ生成部526は、タグ乱数群Rに含まれるk個の乱数(R_1,・・・,R_k)の排他的論理和を算出する。得られる値を乱数和R+と呼ぶ。
そして、暗号化タグ生成部526は、乱数和R+を入力として関数F_6を実行する。得られる値が検証要素CT_Vである。
関数F_7は、関数F_6と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
【0146】
暗号化タグCTは以下のように表すことができる。但し、実施の形態1において(+)は排他的論理和(XOR)を意味する。iは1以上k以下の整数である。mは1以上の整数である。
CT = ((CT_{1,0},CT_{1,1},・・・,CT_{1,I1}),(CT_{2,0},CT_{2,1},・・・,CT_{2,I2}),・・・,(CT_{k,0},CT_{k,1},・・・,CT_{k,Ik}),CT_RS,CT_V)
CT_{i,h} = F_6(F_5(F_2(TK,B′_i^h|i),W),RS)(+)R_i
CT_RS = RS
CT_V = F_7(R_1(+)・・・(+)R_k)
Ii = 2
((i_m)−(i_1)+1)
【0147】
ステップS159において、登録部530は、ファイル名File(M)と暗号文データCと暗号化タグCTとの組をデータ管理装置700の登録データベース791に登録する。
ファイル名File(M)と暗号文データCと暗号化タグCTとの組を「秘匿検索データ」と呼ぶ。
【0148】
図15に基づいて、登録データベース791を説明する。
登録データベース791は、検索のためのデータベースであり、データ管理装置700の記憶部790に記憶される。
登録データベース791には、ファイル名File(M)と暗号文データCと暗号化タグCTとの組(秘匿検索データ)が登録される。
【0149】
図14に戻り、ステップS159の説明を続ける。
秘匿検索データは以下のように登録される。
登録部530は、通信装置505を用いて、秘匿検索データをデータ管理装置700へ送信する。データ管理装置700において、受付部710が秘匿検索データを受信し、管理部740が秘匿検索データを登録データベース791に登録する。
これにより、ファイル名File(M)と暗号文データCと暗号化タグCTとが互いに対応付けて保管される。
【0150】
図16に基づいて、検索操作(S160)を説明する。
検索操作(S160)は、検索操作装置600によって実行される処理である。
【0151】
ステップS161において、受付部610はユーザ鍵UKを受け付ける。
例えば、受付部610は、通信装置605を用いて、ユーザ鍵装置400からユーザ鍵UKを受信する。受付部610は、検索操作装置600に入力されるユーザ鍵UKを入出力インタフェース604を介して受け付けてもよい。
【0152】
そして、受付部610は、ユーザ鍵UKを記憶部690に記憶する。これにより、ユーザ鍵UKが記憶部690に保管される。
【0153】
ユーザ鍵UKが記憶部690に既に保管されている場合、ステップS161は不要である。
【0154】
ユーザ鍵UKは、ユーザデータ鍵UDKとユーザタグ鍵UTKとを有する。
【0155】
ステップS162において、受付部610は検索キーワードwを受け付ける。
例えば、受付部610は、検索操作装置600に入力される検索キーワードwを入出力インタフェース604を介して受け付ける。受付部610は、検索操作装置600において実行されるアプリケーションプログラムから、検索キーワードwを受け付けてもよい。
【0156】
ステップS163において、生成部620は、ユーザタグ鍵UTKと検索キーワードwとを用いて、検索クエリSQを生成する。ユーザタグ鍵UTKはユーザ鍵UKに含まれる。
【0157】
ユーザタグ鍵UTKは、以下のようにk個のタグ属性鍵{UTK_1,・・・,UTK_k}とL個のフラグ値{Tb_1,・・・,Tb_L}を有する。
UTK = (UTK_1,・・・,UTK_k,Tb_1,・・・,Tb_L)
L個のフラグ値{Tb_1,・・・,Tb_L}をフラグ情報Tbと呼ぶ。
【0158】
図17に基づいて、ステップS163の手順を説明する。
ステップS1631において、集約フラグ生成部621は、フラグ情報Tbに含まれる複数のフラグ値を1組以上のブロックに集約する。これにより、集約フラグTb′が生成される。
集約フラグTb′は、集約後のフラグ情報Tbである。
集約フラグTb′の各ブロックは、1つ以上のフラグ値で構成される。
集約フラグTb′の各ブロックが示す値を集約値と呼ぶ。
集約フラグTb′のための集約方法は、集約情報A′(
図11のステップS143を参照)と集約情報B′(
図14のステップS154を参照)のための集約方法と同じである。
【0159】
集約フラグTb′は以下のように表すことができる。mは1以上の整数である。i_1,・・・,i_mは正の整数である。
Tb′ = (Tb′_1,・・・,Tb′_k)
Tb′_i = (Tb_(i_1)|Tb_(i_2)|・・・|Tb_(i_m)
i_1<・・・<i_m、及び、i_1+1=i_2,i_2+1=i_3,・・・,i_(m−1)+1=i_m、i_m+1=(i+1)_1が成り立つ。
【0160】
集約フラグTb′は、k個の集約値Tb′_iを有する。
【0161】
例えば、1番の集約情報(
図13参照)に対応する集約フラグTb1′は以下のように表すことができる。
Tb1′=(Tb1′_1,Tb1′_2)=(Tb1_1|Tb1_2,Tb1_3|Tb1_4)=(0|0,0|0)
【0162】
例えば、3番の集約情報(
図13参照)に対応する集約フラグTb3′は以下のように表すことができる。
Tb3′=(Tb3′_1,Tb3′_2)=(Tb3_1|Tb3_2,Tb3_3|Tb3_4)=(0|0,0|1)
【0163】
例えば、4番の集約情報(
図13参照)に対応する集約フラグTb4′は以下のように表すことができる。
Tb4′=(Tb4′_1,Tb4′_2)=(Tb4_1|Tb4_2,Tb4_3|Tb4_4)=(0|0,1|1)
【0164】
ステップS1632において、位置情報生成部622は、集約フラグTb′を用いて、検索位置情報SPを生成する。
【0165】
検索位置情報SPは、暗号化タグCTに含まれる複数の属性要素CT_のうち検索時に使用される1つ以上の属性要素CT_{i,h}を特定する情報である。
具体的には、検索位置情報SPは1組以上の整数(i,h)を示す。
【0166】
検索位置情報SPは以下のように表すことができる。
SP = ((1,SP1),・・・,(k,SPk))
SP_i = Tb′_(i_1)×2
0+Tb′_(i_2)×2
1+・・・+Tb′_(i_m)×2
(i_m)−(i_1)+1
【0167】
例えば、1番の集約情報(
図13参照)に対応する集約フラグTb1′は以下のように表すことができる。
Tb1′=(Tb1′_1,Tb1′_2)=(Tb1_1|Tb1_2,Tb1_3|Tb1_4)=(0|0,0|0)
この場合、集約フラグTb1′に対応する検索位置情報SP1は以下のように表すことができる。
SP1 = (SP1_1,SP1_2)
SP1_1 = 0×2
0+0×2
1 = 0
SP1_2 = 0×2
0+0×2
1 = 0
【0168】
例えば、3番の集約情報(
図13参照)に対応する集約フラグTb3′は以下のように表すことができる。
Tb3′=(Tb3′_1,Tb3′_2)=(Tb3_1|Tb3_2,Tb3_3|Tb3_4)=(0|0,0|1)
この場合、集約フラグTb3′に対応する検索位置情報SP3は以下のように表すことができる。
SP3 = (SP3_1,SP3_2)
SP3_1 = 0×2
0+0×2
1 = 0
SP3_2 = 0×2
0+1×2
1 = 2
【0169】
例えば、4番の集約情報(
図13参照)に対応する集約フラグTb4′は以下のように表すことができる。
Tb4′=(Tb4′_1,Tb4′_2)=(Tb4_1|Tb4_2,Tb4_3|Tb4_4)=(0|0,1|1)
この場合、集約フラグTb4′に対応する検索位置情報SP4は以下のように表すことができる。
SP4 = (SP4_1,SP4_2)
SP4_1 = 0×2
0+0×2
1 = 0
SP4_2 = 1×2
0+1×2
1 = 3
【0170】
ステップS1633において、検索クエリ生成部623は、タグ属性鍵UTK_iと検索キーワードwと検索位置情報SPとを用いて、検索クエリSQを生成する。
【0171】
検索クエリSQは、属性キーワード要素SQ_iと検索位置要素SQP_iとを有する。
【0172】
検索クエリ生成部623は、属性キーワード要素SQ_iを以下のように算出する。
検索クエリ生成部623は、タグ属性鍵UTK_iと検索キーワードwとを入力として関数F_5を実行する。得られる値が属性キーワード要素SQ_iである。
属性キーワード要素SQ_iは、暗号化された検索キーワードw(暗号化キーワード)である。
【0173】
検索クエリ生成部623は、検索位置要素SQP_iを以下のように算出する。
検索クエリ生成部623は、検索位置情報SPからi番目の要素SP_iを抽出する。抽出される要素SP_iが検索位置要素SQP_iである。
【0174】
検索クエリSQは以下のように表すことができる。iは1以上k以下の整数である。
SQ = ((SQ_1,SQP_1),・・・,(SQ_k,SQP_k))
SQ_i = F_5(UTK_i,w)
SQP_i = SP_i
【0175】
図16に戻り、ステップS164から説明を続ける。
ステップS164において、要求部630は、通信装置605を用いて、検索クエリSQをデータ管理装置700へ送信する。
【0176】
ステップS165において、要求部630は、通信装置605を用いて、暗号化検索結果{C}をデータ管理装置700から受信する。
暗号化検索結果{C}は、検索クエリSQに合致する暗号文データCの集合である。
【0177】
暗号化検索結果{C}が暗号文データCを有しない場合、つまり、検索クエリSQを用いた検索でヒットした暗号文データCが無い場合、ステップS166は不要である。
【0178】
ステップS166において、復号部640は、ユーザデータ鍵UDKを用いて、暗号化検索結果{C}から検索結果{M}を復号する。ユーザデータ鍵UDKはユーザ鍵UKに含まれる。
検索結果{M}は、検索クエリSQに合致する平文Mの集合である。
【0179】
ユーザデータ鍵UDKは、以下のようにk個のデータ属性鍵{UDK_1,・・・,UDK_k}とL個のフラグ値{Db_1,・・・,Db_L}を有する。
UDK = (UDK_1,・・・,UDK_k,Db_1,・・・,Db_L)
L個のフラグ値{Db_1,・・・,Db_L}をフラグ情報Dbと呼ぶ。
【0180】
図18に基づいて、ステップS166の手順を説明する。
ステップS1661において、集約フラグ生成部641は、フラグ情報Dbに含まれる複数のフラグ値を1組以上のブロックに集約する。これにより、集約フラグDb′が生成される。
集約フラグDb′は、集約後のフラグ情報Dbである。
集約フラグDb′の各ブロックは、1つ以上のフラグ値で構成される。
集約フラグDb′の各ブロックが示す値を集約値と呼ぶ。
集約フラグDb′のための集約方法は、集約フラグTb′(
図17のステップS1631を参照)と同じである。
【0181】
集約フラグDb′は以下のように表すことができる。mは1以上の整数である。i_1,・・・,i_mは正の整数である。
Db′ = (Db′_1,・・・,Db′_k)
Db′_i = (Db_(i_1)|Db_(i_2)|・・・|Db_(i_m)
i_1<・・・<i_m、及び、i_1+1=i_2,i_2+1=i_3,・・・,i_(m−1)+1=i_m、i_m+1=(i+1)_1が成り立つ
【0182】
集約フラグDb′は、k個の集約値Db′_iを有する。
【0183】
ステップS1662において、位置情報生成部642は、集約フラグDb′を用いて、復号位置情報DPを生成する。
【0184】
復号位置情報DPは、暗号文データCに含まれる複数の属性要素C_のうち復号時に使用される属性要素C_{i,h}を特定する情報である。
具体的には、復号位置情報DPは1組以上の整数(i,h)を示す。
【0185】
復号位置情報DPは以下のように表すことができる。
DP = ((1,DP_1),・・・,(k,DP_k))
DP_i = Db′_(i_1)×2
0+Db′_(i_2)×2
1+・・・+Db′_(i_m)×2
(i_m)−(i_1)+1
【0186】
ステップS1663において、検索結果復号部643は、ユーザデータ鍵UDKと復号位置情報DPとを用いて、暗号化検索結果{C}から検索結果{M}を復号する。
具体的には、検索結果復号部643は、暗号化検索結果{C}の各暗号文データCから平文Mを復号する。
【0187】
復号部640は、各暗号文データCから平文Mを以下のように復号する。
まず、復号部640は、ユーザデータ鍵UDKに含まれるデータ属性鍵UDK_iと暗号文データCに含まれる乱数要素C_rsとを入力として関数F_3を実行する。得られる値を関数値(UDK_i,C_rs)と呼ぶ。
次に、復号部640は、暗号文データCからk個の属性要素(C_{1,DP_1},・・・,C_{k,DP_k})を選択する。DP_iは復号位置情報DPに含まれる値である。
次に、復号部640は、関数値(UDK_i,C_rs)と属性要素C_{i,DP_i}との排他的論理和を算出する。得られる値を抽出乱数r_i^と呼ぶ。
次に、復号部640は、k個の抽出乱数(r_1^,・・・,r_k^)の排他的論理和を算出する。得られる値を乱数和r^+と呼ぶ。
次に、復号部640は、乱数和r^+を入力として関数F_4を実行する。得られる値を関数値(r^+)と呼ぶ。
そして、復号部640は、関数値(r^+)と暗号文データCに含まれる暗号文C′との排他的論理和を算出する。得られる値が平文Mである。
【0188】
平文Mは以下のように表すことができる。iは1以上k以下の整数である。
M = F_4(r_1^(+)・・・(+)r_k^)(+)C′
r_i^ = F_3(UDK_i,C_rs)(+)C_{i,DP_i}
【0189】
図16に戻り、ステップS167を説明する。
ステップS167において、出力部650は検索結果{M}を出力する。
例えば、出力部650は、入出力インタフェース604を介して、検索結果{M}をディスプレイに表示する。
【0190】
暗号化検索結果{C}が暗号文データCを有しないためステップS166が実行されなかった場合、検索結果{M}は得られない。
検索結果{M}が得られなかった場合、出力部650は、検索結果{M}の代わりに、検索エラーメッセージを出力する。
検索エラーメッセージは、秘匿検索でヒットした平文Mが無いことを示す。
【0191】
図19に基づいて、データ検索(S170)を説明する。
データ検索(S170)は、データ管理装置700によって実行される処理である。
【0192】
ステップS171において、受付部710は、通信装置705を用いて、検索クエリSQを検索操作装置600から受信する。
【0193】
ステップS172において、照合部721は、検索クエリSQを各暗号化タグCTと照合することによって、検索クエリSQに合致する暗号化タグCTを選択する。
検索クエリSQに合致する各暗号化タグCTを「該当暗号化タグCT」と呼ぶ。
【0194】
具体的には、照合部721は、検索クエリSQを各暗号化タグCTと以下のように照合する。
まず、照合部721は、暗号化タグCTからk個の属性要素(CT_{1,SQP_1},・・・,CT_{k,SQP_k})を選択する。SQP_iは検索クエリSQに含まれる要素である。
次に、照合部721は、検索クエリSQに含まれる属性キーワード要素SQ_iと暗号化タグCTに含まれる乱数要素CT_RSとを入力として関数F_6を実行する。得られる値を関数値(SQ_i,CT_RS)と呼ぶ。
次に、照合部721は、関数値(SQ_i,CT_RS)と属性要素CT_{i,SQP_i}との排他的論理和を算出する。得られる値を抽出乱数R_i^と呼ぶ。
次に、照合部721は、k個の抽出乱数(R_1^,・・・,R_k^)の排他的論理和を算出する。得られる値を乱数和R^+と呼ぶ。
次に、照合部721は、乱数和R^+を入力として関数F_7を実行する。得られる値を関数値(R^+)と呼ぶ。
そして、照合部721は、関数値(R^+)を暗号化タグCTに含まれる検証要素CT_Vと比較する。
関数値(R^+)と検証要素CT_Vの一致は、暗号化タグCTに埋め込まれた登録キーワードWが属性情報Aと一致して、且つ、検索クエリSQに埋め込まれた検索キーワードwが属性情報Bと一致することを意味する。
関数値(R^+)と一致する検証要素CT_Vを有する暗号化タグCTが該当暗号化タグCTである。
【0195】
検証式は以下のように表すことができる。iは1以上k以下の整数である。
CT_V = F_7(R_1^(+)・・・(+)R_k^)
R_i^ = F_6(SQ_i,CT_RS)(+)CT_{i,SQP_i}
【0196】
ステップS173において、抽出部722は、各該当暗号化タグCTに対応する暗号文データCを抽出する。抽出される暗号文データCを該当暗号文データCと呼ぶ。
【0197】
ステップS174において、出力部730は、通信装置705を用いて、暗号化検索結果{C}を検索操作装置600へ送信する。
暗号化検索結果{C}は、該当暗号文データCの集合である。
【0198】
図20に基づいて、データ削除(S180)を説明する。
データ削除(S180)は、登録装置500とデータ管理装置700とによって実行される処理である。但し、登録装置500の代わりに検索操作装置600が動作してもよい。
【0199】
ステップS181において、登録装置500の受付部510は削除ファイル名を受け付ける。例えば、検索操作(S160)によって得られる平文Mの中のファイル名File(M)が削除ファイル名として使用される。
例えば、受付部510は、登録装置500に入力される削除ファイル名を入出力インタフェース504を介して受け付ける。受付部510は、登録装置500において実行されるアプリケーションプログラムから、削除ファイル名を受け付けてもよい。
但し、検索操作装置600の受付部610が削除ファイル名を受け付けてもよい。
【0200】
ステップS182において、登録装置500の登録部550は、通信装置505を用いて、削除ファイル名をデータ管理装置700へ送信する。
但し、検索操作装置600の出力部650が通信装置605を用いて削除ファイル名をデータ管理装置700へ送信してもよい。
【0201】
ステップS183において、データ管理装置700の受付部710は、通信装置705を用いて、削除ファイル名を受信する。
【0202】
ステップS184において、データ管理装置700の管理部740は、削除ファイル名に対応する秘匿検索データを登録データベース791から削除する。
削除ファイル名に対応する秘匿検索データは、削除ファイル名と同じファイル名File(M)を有する。
【0203】
***実施の形態1の効果***
実施の形態1によって以下のような効果を奏する。
暗号文を復号することなくキーワード検索ができる。
利用者の属性情報毎に異なる鍵を生成できる。そのため、マルチユーザ型の共通鍵方式を構成できる。
利用者の鍵を用いて暗号文の復号権限を制御できる。鍵に含まれる属性情報を分離しにくいため、複数の正規ユーザによる結託攻撃に対する耐性を向上できる。つまり、マルチユーザ型の共通鍵方式の安全性を向上できる。
属性情報の中の複数の属性値がいくつかのブロックに集約された後に鍵が生成される。これにより、鍵の長さを属性情報に比例しないように抑えることができる。
検索位置情報および復号位置情報を生成することによって、検索および復号を効率化することができる。
【0204】
実施の形態1によって以下のような効果を奏する。
ユーザ鍵装置400は、属性情報をいくつかの部分にまとめてベクトル化したデータ(集約情報、汎化情報)を不可逆変換してユーザ鍵を生成する。
登録装置500は、このユーザ鍵を用いて暗号文データおよび暗号化タグを生成する。
検索操作装置600は、このユーザ鍵を用いて検索クエリを生成する。
これにより、結託攻撃に対してマルチユーザ型の共通鍵方式の安全性が向上する。
【0205】
***実施の形態の補足***
図21に基づいて、マスター鍵装置200のハードウェア構成を説明する。
マスター鍵装置200は処理回路209を備える。
処理回路209は、受付部210と生成部220と出力部230とを実現するハードウェアである。
処理回路209は、専用のハードウェアであってもよいし、メモリ202に格納されるプログラムを実行するプロセッサ201であってもよい。
【0206】
処理回路209が専用のハードウェアである場合、処理回路209は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC、FPGAまたはこれらの組み合わせである。
ASICは、Application Specific Integrated Circuitの略称である。
FPGAは、Field Programmable Gate Arrayの略称である。
【0207】
マスター鍵装置200は、処理回路209を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路209の機能を分担する。
【0208】
処理回路209において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【0209】
このように、マスター鍵装置200の機能はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【0210】
図22に基づいて、登録鍵装置300のハードウェア構成を説明する。
登録鍵装置300は処理回路309を備える。
処理回路309は、受付部310と生成部320と出力部330とを実現するハードウェアである。
処理回路309は、専用のハードウェアであってもよいし、メモリ302に格納されるプログラムを実行するプロセッサ301であってもよい。
【0211】
処理回路309が専用のハードウェアである場合、処理回路309は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC、FPGAまたはこれらの組み合わせである。
【0212】
登録鍵装置300は、処理回路309を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路309の機能を分担する。
【0213】
処理回路309において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【0214】
このように、登録鍵装置300の機能はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【0215】
図23に基づいて、ユーザ鍵装置400のハードウェア構成を説明する。
ユーザ鍵装置400は処理回路409を備える。
処理回路409は、受付部410と生成部420と出力部430とを実現するハードウェアである。
処理回路409は、専用のハードウェアであってもよいし、メモリ402に格納されるプログラムを実行するプロセッサ401であってもよい。
【0216】
処理回路409が専用のハードウェアである場合、処理回路409は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC、FPGAまたはこれらの組み合わせである。
【0217】
ユーザ鍵装置400は、処理回路309を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路409の機能を分担する。
【0218】
処理回路409において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【0219】
このように、ユーザ鍵装置400の機能はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【0220】
図24に基づいて、登録装置500のハードウェア構成を説明する。
登録装置500は処理回路509を備える。
処理回路509は、受付部510と生成部520と登録部530とを実現するハードウェアである。
処理回路509は、専用のハードウェアであってもよいし、メモリ502に格納されるプログラムを実行するプロセッサ501であってもよい。
【0221】
処理回路509が専用のハードウェアである場合、処理回路509は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC、FPGAまたはこれらの組み合わせである。
【0222】
登録装置500は、処理回路509を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路509の機能を分担する。
【0223】
処理回路509において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【0224】
このように、登録装置500の機能はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【0225】
図25に基づいて、検索操作装置600のハードウェア構成を説明する。
検索操作装置600は処理回路609を備える。
処理回路609は、受付部610と生成部620と要求部630と復号部640と出力部650とを実現するハードウェアである。
処理回路609は、専用のハードウェアであってもよいし、メモリ602に格納されるプログラムを実行するプロセッサ601であってもよい。
【0226】
処理回路609が専用のハードウェアである場合、処理回路609は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC、FPGAまたはこれらの組み合わせである。
【0227】
検索操作装置600は、処理回路609を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路609の機能を分担する。
【0228】
処理回路609において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【0229】
このように、検索操作装置600の機能はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【0230】
図26に基づいて、データ管理装置700のハードウェア構成を説明する。
データ管理装置700は処理回路709を備える。
処理回路709は、受付部710と検索部720と出力部730と管理部740とを実現するハードウェアである。
処理回路709は、専用のハードウェアであってもよいし、メモリ702に格納されるプログラムを実行するプロセッサ701であってもよい。
【0231】
処理回路709が専用のハードウェアである場合、処理回路709は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC、FPGAまたはこれらの組み合わせである。
【0232】
データ管理装置700は、処理回路709を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路709の機能を分担する。
【0233】
処理回路709において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【0234】
このように、データ管理装置700の機能はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【0235】
各実施の形態は、好ましい形態の例示であり、本開示の技術的範囲を制限することを意図するものではない。各実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
【0236】
実施の形態で説明された各装置の要素である「部」は、「処理」または「工程」と読み替えてもよい。
登録装置(500)は、平文と、前記平文を参照する権限を有する利用者の属性情報と、検索クエリを生成するためのユーザ鍵の生成時に使用される登録鍵と、を受け付ける。前記登録装置は、前記属性情報に含まれる複数の属性値を集約することによって、1つ以上の集約値を示す集約情報を生成する。前記登録装置は、前記集約情報に含まれる各集約値を汎化することによって、各集約値に対する複数の汎化値を示す汎化情報を生成する。前記登録装置は、前記平文と前記属性情報と前記汎化情報と前記登録鍵とを用いて、暗号化された前記平文を含んだ暗号文データを生成する。前記登録装置は、前記暗号文データをデータベースに登録する。