(57)【要約】  登録装置（５００）は、利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒを生成する。また、登録装置は、平文Ｍと属性情報Ｂとを受け付ける。登録装置は、前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である暗号文Ｃ＿｛Ｌ＋１｝とを含んだ暗号化データＣを生成する。そして、登録装置は、前記暗号化データＣをデータ管理装置（７００）に登録する。
2019142651.tif 000002
【特許請求の範囲】
【請求項１】
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒを生成する乱数生成部と、
平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である暗号文Ｃ＿｛Ｌ＋１｝とを含んだ暗号化データＣを生成する暗号化データ生成部と、
前記暗号化データＣをデータ管理装置に登録する登録部と
を備える登録装置。
【請求項２】
前記関数Ｆ＿２と前記関数Ｆ＿３とのそれぞれが擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数であり、前記関数Ｆ＿４が共通鍵暗号方式の関数である
請求項１に記載の登録装置。
【請求項３】
前記登録装置は、さらに、暗号化タグ生成部を備え、
前記乱数生成部は、前記層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるタグ乱数組Ｒ’を生成し、
前記暗号化タグ生成部は、前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ暗号化タグＣＴを生成し、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する
請求項１または請求項２に記載の登録装置。
【請求項４】
前記関数Ｆ＿５と前記関数Ｆ＿６とのそれぞれが擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数であり、前記関数Ｆ＿７がハッシュ関数である
請求項３に記載の登録装置。
【請求項５】
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱをデータ管理装置へ送信し、前記データ管理装置から暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部と
を備える検索操作装置であって、
前記データ管理装置は、
前記暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
前記検索操作装置から前記検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とする検索操作装置。
【請求項６】
暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
検索操作装置から検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力部と
を備えるデータ管理装置であって、
前記検索操作装置は、
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱを前記データ管理装置へ送信し、前記データ管理装置から前記暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とするデータ管理装置。
【請求項７】
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒを生成する乱数生成処理と、
平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である暗号文Ｃ＿｛Ｌ＋１｝とを含んだ暗号化データＣを生成する暗号化データ生成処理と、
前記暗号化データＣをデータ管理装置に登録する登録処理と
をコンピュータに実行させるための登録プログラム。
【請求項８】
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成処理と、
前記検索クエリＱをデータ管理装置へ送信し、前記データ管理装置から暗号化データＣを受信する要求処理と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号処理と
をコンピュータに実行させるための検索操作プログラムであって、
前記データ管理装置は、
前記暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
前記検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１｝と一致する場合に前記暗号化データＣを送信する出力部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とする検索操作プログラム。
【請求項９】
暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録された後、検索操作装置から検索クエリＱを受信する受付処理と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１｝と比較する照合処理と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力処理と
をコンピュータに実行させるためのデータ管理プログラムであって、
前記検索操作装置は、
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱを送信し、前記暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を登録する登録部とを備える
ことを特徴とするデータ管理プログラム。
【請求項１０】
前記登録装置は、さらに、部分一致キーワード生成部と暗号化タグ生成部とを備え、
前記乱数生成部は、前記層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるタグ乱数組Ｒ’を生成し、
前記部分一致キーワード生成部は、登録キーワードの一部である部分一致キーワードを生成し、
前記暗号化タグ生成部は、前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ暗号化タグＣＴを生成し、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する
請求項１または請求項２に記載の登録装置。
【請求項１１】
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱをデータ管理装置へ送信し、前記データ管理装置から暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部と
を備える検索操作装置であって、
前記データ管理装置は、
前記暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
前記検索操作装置から前記検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とする検索操作装置。
【請求項１２】
暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
検索操作装置から検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力部と
を備えるデータ管理装置であって、
前記検索操作装置は、
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱを前記データ管理装置へ送信し、前記データ管理装置から前記暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とするデータ管理装置。
【請求項１３】
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成処理と、
平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である暗号文Ｃ＿｛Ｌ＋１｝とを含んだ暗号化データＣを生成する暗号化データ生成処理と、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ暗号化タグＣＴを生成する暗号化タグ生成処理と、
前記暗号化データＣと前記暗号化タグＣＴとの組をデータ管理装置に登録する登録処理と
をコンピュータに実行させるための登録プログラム。
【請求項１４】
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成処理と、
前記検索クエリＱをデータ管理装置へ送信し、前記データ管理装置から暗号化データＣを受信する要求処理と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号処理と
をコンピュータに実行させるための検索操作プログラムであって、
前記データ管理装置は、
前記暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
前記検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と一致する場合に前記暗号化データＣを送信する出力部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とする検索操作プログラム。
【請求項１５】
暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録された後、検索操作装置から検索クエリＱを受信する受付処理と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と比較する照合処理と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力処理と
をコンピュータに実行させるためのデータ管理プログラムであって、
前記検索操作装置は、
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱを送信し、前記暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を登録する登録部とを備える
ことを特徴とするデータ管理プログラム。
【請求項１６】
前記登録装置は、さらに、汎化数値生成部と暗号化タグ生成部とを備え、
前記乱数生成部は、前記層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるタグ乱数組Ｒ’を生成し、
前記汎化数値生成部は、登録数値を汎化して汎化数値を生成し、
前記暗号化タグ生成部は、前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ暗号化タグＣＴを生成し、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する
請求項１または請求項２に記載の登録装置。
【請求項１７】
検索範囲の数数値を汎化して汎化数値を生成する数値列挙部と、
前記汎化数値を入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱをデータ管理装置へ送信し、前記データ管理装置から暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部と
を備える検索操作装置であって、
前記データ管理装置は、
前記暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
前記検索操作装置から前記検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とする検索操作装置。
【請求項１８】
暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
検索操作装置から検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力部と
を備えるデータ管理装置であって、
前記検索操作装置は、
検索範囲の数数値を汎化して汎化数値を生成する数値列挙部と、
前記汎化数値を入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱを前記データ管理装置へ送信し、前記データ管理装置から前記暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とするデータ管理装置。
【請求項１９】
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成処理と、
平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である暗号文Ｃ＿｛Ｌ＋１｝とを含んだ暗号化データＣを生成する暗号化データ生成処理と、
登録数値を汎化して汎化数値を生成する汎化数値生成処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ暗号化タグＣＴを生成する暗号化タグ生成処理と、
前記暗号化データＣと前記暗号化タグＣＴとの組をデータ管理装置に登録する登録処理と
をコンピュータに実行させるための登録プログラム。
【請求項２０】
検索範囲の数数値を汎化して汎化数値を生成する数値列挙処理と、
前記汎化数値を入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成処理と、
前記検索クエリＱをデータ管理装置へ送信し、前記データ管理装置から暗号化データＣを受信する要求処理と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号処理と
をコンピュータに実行させるための検索操作プログラムであって、
前記データ管理装置は、
前記暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録される記憶部と、
前記検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と一致する場合に前記暗号化データＣを送信する出力部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を前記データ管理装置に登録する登録部とを備える
ことを特徴とする検索操作プログラム。
【請求項２１】
暗号化データＣと暗号化タグＣＴとの組が登録装置によって登録された後、検索操作装置から検索クエリＱを受信する受付処理と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴに含まれる判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と比較する照合処理と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力処理と
をコンピュータに実行させるためのデータ管理プログラムであって、
前記検索操作装置は、
検索範囲の数数値を汎化して汎化数値を生成する数値列挙部と、
前記汎化数値を入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱを送信し、前記暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ前記暗号化タグＣＴを生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴとの組を登録する登録部とを備える
ことを特徴とするデータ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘匿検索技術に関するものである。
【背景技術】
【０００２】
秘匿検索とは、暗号化データを暗号化したまま検索する技術である。
つまり、秘匿検索は、暗号化データを復号せずに検索する技術である。【０００３】
近年、秘匿検索は、クラウドサービスにおいてサーバ管理者による盗聴から機密情報を守るためのセキュリティ技術として注目されている。つまり、秘匿検索は、インターネットにおいてデータを管理する際のセキュリティ技術として注目されている。【０００４】
秘匿検索における処理として、登録者と検索者とデータセンタ装置とのそれぞれの処理を説明する。
登録者は暗号化データを登録するユーザであり、検索者は暗号化データを検索するユーザである。【０００５】
登録者による処理の基本的な流れは以下の通りである。
まず、登録者は、データを暗号化して暗号化データを生成する。
次に、登録者は、暗号化データを検索するためのキーワードを暗号化する。暗号化されたキーワードを暗号化タグという。暗号化タグからキーワードが漏洩することはない。
次に、登録者は、暗号化タグを暗号化データに関連付ける。暗号化タグの数は１つである必要はなく、複数の暗号化タグを暗号化データに関連付けることができる。
そして、登録者は、暗号化データと暗号化タグとをデータセンタ装置に登録する。【０００６】
検索者による処理の基本的な流れは以下の通りである。
まず、検索者は、検索したいキーワードを選ぶ。
次に、検索者は、自身の秘密鍵を用いてキーワードをランダム化する。ランダム化されたキーワードを検索クエリという。検索クエリから秘密鍵を類推することは困難である。
次に、検索者は、検索クエリをデータセンタ装置に送信することによって、データセンタ装置に検索を要求する。
そして、検索者は、検索クエリに対応する暗号化データをデータセンタ装置から受け取る。【０００７】
データセンタ装置による処理の基本的な流れは以下の通りである。
データセンタ装置には、暗号化データと暗号化タグとの組が複数登録されている。
まず、データセンタ装置は、検索クエリを受け取る。
次に、データセンタ装置は、特殊な演算によって、検索クエリに対応する暗号化タグを選択する。特殊な演算において、暗号化タグを復号せずに、検索クエリのキーワードを各暗号化タグのキーワードと比較することができる。
そして、データセンタ装置は、選択した暗号化タグに関連付けられた暗号化データを送信する。【０００８】
秘匿検索には、共通鍵方式と公開鍵方式との２種類が存在する。
共通鍵方式では、共通暗号鍵技術が利用され、登録者および検索者が限定される。
公開鍵方式では、公開鍵暗号技術が利用され、検索者は限定されるが登録者は限定されない。【０００９】
共通鍵方式において、通常、登録者と検索者とが互いに同じ秘密情報を共有する。
非特許文献１は、秘密情報の共有コストと秘密情報の漏洩時の影響度とを下げるため、登録者と検索者とが同じ秘密情報を共有しない共通鍵方式を開示している。【００１０】
さらに、非特許文献１は、マルチユーザ型共有鍵方式を開示している。
マルチユーザ型共有鍵方式では、検索が許可されるユーザと検索が許可されないユーザとを設定することができる。つまり、マルチユーザ型共有鍵方式では、互いに異なる秘密情報を持っている複数のユーザが同じキーワードで検索した場合にあるユーザの検索ではヒットするが別のユーザの検索ではヒットしない暗号化データを生成することが可能である。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特許第６０３８４２７号公報
【特許文献２】国際公開第２０１１／０８６６８７号
【非特許文献】
【００１２】
【非特許文献１】Ｒ．Ａ．Ｐｏｐａ，Ｎ．Ｚｅｌｄｏｖｉｃｈ、“Ｍｕｌｔｉ−Ｋｅｙ  Ｓｅａｒｃｈａｂｌｅ  Ｅｎｃｒｙｐｔｉｏｎ”、ＩＡＣＲ  Ｃｒｙｐｔｏｌｏｇｙ  ｅＰｒｉｎｔ  Ａｒｃｈｉｖｅ：Ｒｅｐｏｒｔ  ２０１３／５０８．
【非特許文献２】Ｓ．Ｐａｔｒａｎａｂｉｓ，Ｄ．Ｍｕｋｈｏｐａｄｈｙａｙ、“Ｌｉｇｈｔｗｅｉｇｈｔ  Ｓｙｍｍｅｔｒｉｃ−Ｋｅｙ  Ｈｉｄｄｅｎ  Ｖｅｃｔｏｒ  Ｅｎｃｒｙｐｔｉｏｎ  ｗｉｔｈｏｕｔ  Ｐａｉｒｉｎｇｓ”、ＩＡＣＲ  Ｃｒｙｐｔｏｌｏｇｙ  ｅＰｒｉｎｔ  Ａｒｃｈｉｖｅ：Ｒｅｐｏｒｔ  ２０１７／７９６．
【非特許文献３】ＭＥＮＥＺＥＳ，Ａ．Ｊ．，ＶＡＮ  ＯＯＲＳＣＨＯＴ，Ｐ．Ｃ．  ａｎｄ  ＶＡＮＳＴＯＮＥ，Ｓ．Ａ．，ＨＡＮＤＢＯＯＫ  ｏｆ  ＡＰＰＬＩＥＤ  ＣＲＹＰＴＯＧＲＡＰＨＹ，ＣＲＣ  Ｐｒｅｓｓ，１９９７，ｐ．２３４，２３５
【発明の概要】
【発明が解決しようとする課題】
【００１３】
非特許文献１は、よく知られたマルチユーザ化を行うと検索クエリのサイズが大きくなることに注目し、代理人再暗号化技術を用いて検索クエリのサイズを抑える方式を開示している。
代理人再暗号化技術は、あるユーザの暗号化データを復号することなく、あるユーザの暗号化データを別のユーザが復号できる暗号化データに変換する技術である。
しかし、代理人再暗号化技術が公開鍵暗号技術を利用するため、非特許文献１の方式には検索速度の課題がある。【００１４】
非特許文献１の方式では、完全一致検索はできるが部分一致検索ができない。つまり、検索時のキーワードが登録時のキーワードと完全に一致しているかどうかを判定することはできるが、検索時のキーワードが登録時のキーワードの中に部分文字列として含まれているかを判定することはできない。
さらに、非特許文献１の方式では、範囲検索もできない。つまり、登録時のキーワードが数値であり、検索時のキーワードが数値の区間である場合、登録時の数値が検索時の数値の区間に入っているかどうかを判定することはできない。【００１５】
特許文献１には、部分一致対応の秘匿検索方式が開示されている。この方式では、検索時のキーワードが登録時のキーワードの中に部分文字列として含まれているかを暗号化したまま判定することができる。
しかし、この方式はマルチユーザに対応していないため、この方式をマルチユーザ型共通鍵方式に拡張することは困難である。【００１６】
非特許文献２は、秘匿検索技術ではないが、アクセス制御機能付き暗号化方式を開示している。
本方式により、各ユーザの属性情報に基づいて、あるユーザは復号できるが別のユーザは復号できない暗号化データを生成することができる。
本方式では、共通鍵暗号技術が利用される。そのため、登録者および検索者が限定されるが、本方式の効率は良い。
しかし、本方式をマルチユーザ型共通鍵方式に拡張することは困難である。【００１７】
本発明は、マルチユーザ型の共通鍵暗号方式で秘匿検索を可能とすることを目的とする。
【課題を解決するための手段】
【００１８】
本発明の登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒを生成する乱数生成部と、
平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である暗号文Ｃ＿｛Ｌ＋１｝とを含んだ暗号化データＣを生成する暗号化データ生成部と、
前記暗号化データＣをデータ管理装置に登録する登録部とを備える。
【発明の効果】
【００１９】
本発明によれば、関数を多重に用いて生成される暗号化データＣが登録される。これにより、マルチユーザ型の共通鍵暗号方式で秘匿検索が可能となる。
【図面の簡単な説明】
【００２０】
【図１】実施の形態１における秘匿検索システム１００の構成図。
【図２】実施の形態１におけるマスター鍵装置２００の構成図。
【図３】実施の形態１における登録鍵装置３００の構成図。
【図４】実施の形態１におけるユーザ鍵装置４００の構成図。
【図５】実施の形態１における生成部４２０の構成図。
【図６】実施の形態１における登録装置５００の構成図。
【図７】実施の形態１における生成部５２０の構成図。
【図８】実施の形態１における検索操作装置６００の構成図。
【図９】実施の形態１における生成部６２０の構成図。
【図１０】実施の形態１におけるデータ管理装置７００の構成図。
【図１１】実施の形態１における検索部７２０の構成図。
【図１２】実施の形態１におけるマスター鍵生成（Ｓ１１０）のフローチャート。
【図１３】実施の形態１における登録鍵生成（Ｓ１２０）のフローチャート。
【図１４】実施の形態１におけるユーザ鍵生成（Ｓ１３０）のフローチャート。
【図１５】実施の形態１における属性情報の一例を示す図。
【図１６】実施の形態１におけるデータ登録（Ｓ１４０）のフローチャート。
【図１７】実施の形態１における登録データベース７９２を示す図。
【図１８】実施の形態１における検索操作（Ｓ１５０）のフローチャート。
【図１９】実施の形態１におけるデータ検索（Ｓ１６０）のフローチャート。
【図２０】実施の形態１におけるデータ削除（Ｓ１７０）のフローチャート。
【図２１】実施の形態２における生成部５２０の構成図。
【図２２】実施の形態２における検索部７２０の構成図。
【図２３】実施の形態２におけるデータ登録（Ｓ２４０）のフローチャート。
【図２４】実施の形態２におけるデータ検索（Ｓ２６０）のフローチャート。
【図２５】実施の形態３における生成部５２０の構成図。
【図２６】実施の形態３における生成部６２０の構成図。
【図２７】実施の形態３における検索部７２０の構成図。
【図２８】実施の形態３におけるデータ登録（Ｓ３４０）のフローチャート。
【図２９】実施の形態３における検索操作（Ｓ３５０）のフローチャート。
【図３０】実施の形態３におけるデータ検索（Ｓ３６０）のフローチャート。
【図３１】実施の形態におけるマスター鍵装置２００のハードウェア構成図。
【図３２】実施の形態における登録鍵装置３００のハードウェア構成図。
【図３３】実施の形態におけるユーザ鍵装置４００のハードウェア構成図。
【図３４】実施の形態における登録装置５００のハードウェア構成図。
【図３５】実施の形態における検索操作装置６００のハードウェア構成図。
【図３６】実施の形態におけるデータ管理装置７００ハードウェア構成図。
【発明を実施するための形態】
【００２１】
実施の形態および図面において、同じ要素および対応する要素には同じ符号を付している。同じ符号が付された要素の説明は適宜に省略または簡略化する。図中の矢印はデータの流れ又は処理の流れを主に示している。
【００２２】
実施の形態１．
マルチユーザ型の共通鍵暗号方式で秘匿検索を行う形態について、図１から図２０に基づいて説明する。
【００２３】
＊＊＊構成の説明＊＊＊
図１に基づいて、秘匿検索システム１００の構成を説明する。
秘匿検索システム１００は、マスター鍵装置２００と登録鍵装置３００とユーザ鍵装置４００と登録装置５００と検索操作装置６００とデータ管理装置７００とを備える。
秘匿検索システム１００の各装置は、ネットワーク１０１を介して互いに通信を行う。
【００２４】
図２に基づいて、マスター鍵装置２００の構成を説明する。
マスター鍵装置２００は、プロセッサ２０１とメモリ２０２と補助記憶装置２０３と入出力インタフェース２０４と通信装置２０５といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００２５】
プロセッサ２０１は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）であり、他のハードウェアを制御する。例えば、プロセッサ９０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、またはＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
メモリ２０２は揮発性の記憶装置である。メモリ２０２は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ２０２はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。メモリ２０２に記憶されたデータは必要に応じて補助記憶装置２０３に保存される。
補助記憶装置２０３は不揮発性の記憶装置である。例えば、補助記憶装置２０３は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、またはフラッシュメモリである。補助記憶装置２０３に記憶されたデータは必要に応じてメモリ２０２にロードされる。
【００２６】
入出力インタフェース２０４は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース２０４はＵＳＢ端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。ＵＳＢはＵｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓの略称である。
通信装置２０５はレシーバ及びトランスミッタである。例えば、通信装置２０５は通信チップまたはＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。
【００２７】
マスター鍵装置２００は、受付部２１０と生成部２２０と出力部２３０といった要素を備える。これらの要素はソフトウェアで実現される。
【００２８】
補助記憶装置２０３には、受付部２１０と生成部２２０と出力部２３０と記憶部２９１としてコンピュータを機能させるためのマスター鍵プログラムが記憶されている。マスター鍵プログラムは、メモリ２０２にロードされて、プロセッサ２０１によって実行される。
さらに、補助記憶装置２０３にはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が記憶されている。ＯＳの少なくとも一部は、メモリ２０２にロードされて、プロセッサ２０１によって実行される。
つまり、プロセッサ２０１は、ＯＳを実行しながら、マスター鍵プログラムを実行する。
マスター鍵プログラムを実行して得られるデータは、メモリ２０２、補助記憶装置２０３、プロセッサ２０１内のレジスタまたはプロセッサ２０１内のキャッシュメモリといった記憶装置に記憶される。
【００２９】
補助記憶装置２０３は記憶部２９１として機能する。但し、他の記憶装置が、補助記憶装置２０３の代わりに、又は、補助記憶装置２０３と共に、記憶部２９１として機能してもよい。
【００３０】
マスター鍵装置２００は、プロセッサ２０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ２０１の役割を分担する。
【００３１】
マスター鍵プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータで読み取り可能に記録（格納）することができる。
【００３２】
図３に基づいて、登録鍵装置３００の構成を説明する。
登録鍵装置３００は、受付部３１０と生成部３２０と出力部３３０といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００３３】
プロセッサ３０１は、演算処理を行うＩＣであり、他のハードウェアを制御する。例えば、プロセッサ３０１はＣＰＵ、ＤＳＰまたはＧＰＵである。
メモリ３０２は揮発性の記憶装置である。メモリ３０２は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ３０２はＲＡＭである。メモリ３０２に記憶されたデータは必要に応じて補助記憶装置３０３に保存される。
補助記憶装置３０３は不揮発性の記憶装置である。例えば、補助記憶装置３０３は、ＲＯＭ、ＨＤＤまたはフラッシュメモリである。補助記憶装置３０３に記憶されたデータは必要に応じてメモリ３０２にロードされる。
【００３４】
入出力インタフェース３０４は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース３０４はＵＳＢ端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置３０５はレシーバ及びトランスミッタである。例えば、通信装置３０５は通信チップまたはＮＩＣである。
【００３５】
登録鍵装置３００は、受付部３１０と生成部３２０と出力部３３０といった要素を備える。これらの要素はソフトウェアで実現される。
【００３６】
補助記憶装置３０３には、受付部３１０と生成部３２０と出力部３３０と記憶部３９１としてコンピュータを機能させるための登録鍵プログラムが記憶されている。登録鍵プログラムは、メモリ３０２にロードされて、プロセッサ３０１によって実行される。
さらに、補助記憶装置３０３にはＯＳが記憶されている。ＯＳの少なくとも一部は、メモリ３０２にロードされて、プロセッサ３０１によって実行される。
つまり、プロセッサ３０１は、ＯＳを実行しながら、登録鍵プログラムを実行する。
登録鍵プログラムを実行して得られるデータは、メモリ３０２、補助記憶装置３０３、プロセッサ３０１内のレジスタまたはプロセッサ３０１内のキャッシュメモリといった記憶装置に記憶される。
【００３７】
補助記憶装置３０３は記憶部３９１として機能する。但し、他の記憶装置が、補助記憶装置３０３の代わりに、又は、補助記憶装置３０３と共に、記憶部３９１として機能してもよい。
【００３８】
登録鍵装置３００は、プロセッサ３０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ３０１の役割を分担する。
【００３９】
登録鍵プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータで読み取り可能に記録（格納）することができる。
【００４０】
図４に基づいて、ユーザ鍵装置４００の構成を説明する。
ユーザ鍵装置４００は、プロセッサ４０１とメモリ４０２と補助記憶装置４０３と入出力インタフェース４０４と通信装置４０５といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００４１】
プロセッサ４０１は、演算処理を行うＩＣであり、他のハードウェアを制御する。例えば、プロセッサ４０１はＣＰＵ、ＤＳＰまたはＧＰＵである。
メモリ４０２は揮発性の記憶装置である。メモリ４０２は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ４０２はＲＡＭである。メモリ４０２に記憶されたデータは必要に応じて補助記憶装置４０３に保存される。
補助記憶装置４０３は不揮発性の記憶装置である。例えば、補助記憶装置４０３は、ＲＯＭ、ＨＤＤまたはフラッシュメモリである。補助記憶装置４０３に記憶されたデータは必要に応じてメモリ４０２にロードされる。
【００４２】
入出力インタフェース４０４は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース４０４はＵＳＢ端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置４０５はレシーバ及びトランスミッタである。例えば、通信装置４０５は通信チップまたはＮＩＣである。
【００４３】
ユーザ鍵装置４００は、受付部４１０と生成部４２０と出力部４３０といった要素を備える。これらの要素はソフトウェアで実現される。
【００４４】
補助記憶装置４０３には、受付部４１０と生成部４２０と出力部４３０と記憶部４９１としてコンピュータを機能させるためのユーザ鍵プログラムが記憶されている。ユーザ鍵プログラムは、メモリ４０２にロードされて、プロセッサ４０１によって実行される。
さらに、補助記憶装置４０３にはＯＳが記憶されている。ＯＳの少なくとも一部は、メモリ４０２にロードされて、プロセッサ４０１によって実行される。
つまり、プロセッサ４０１は、ＯＳを実行しながら、ユーザ鍵プログラムを実行する。
ユーザ鍵プログラムを実行して得られるデータは、メモリ４０２、補助記憶装置４０３、プロセッサ４０１内のレジスタまたはプロセッサ４０１内のキャッシュメモリといった記憶装置に記憶される。
【００４５】
補助記憶装置４０３は記憶部４９１として機能する。但し、他の記憶装置が、補助記憶装置４０３の代わりに、又は、補助記憶装置４０３と共に、記憶部４９１として機能してもよい。
【００４６】
ユーザ鍵装置４００は、プロセッサ４０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ４０１の役割を分担する。
【００４７】
ユーザ鍵プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータで読み取り可能に記録（格納）することができる。
【００４８】
図５に基づいて、生成部４２０の構成を説明する。
生成部４２０は、属性鍵生成部４２２とを備える。
【００４９】
図６に基づいて、登録装置５００の構成を説明する。
登録装置５００は、プロセッサ５０１とメモリ５０２と補助記憶装置５０３と入出力インタフェース５０４と通信装置５０５といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００５０】
プロセッサ５０１は、演算処理を行うＩＣであり、他のハードウェアを制御する。例えば、プロセッサ５０１は、ＣＰＵ、ＤＳＰまたはＧＰＵである。
メモリ５０２は揮発性の記憶装置である。メモリ５０２は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ５０２はＲＡＭである。メモリ５０２に記憶されたデータは必要に応じて補助記憶装置５０３に保存される。
補助記憶装置５０３は不揮発性の記憶装置である。例えば、補助記憶装置５０３は、ＲＯＭ、ＨＤＤまたはフラッシュメモリである。補助記憶装置５０３に記憶されたデータは必要に応じてメモリ５０２にロードされる。
【００５１】
入出力インタフェース５０４は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース５０４はＵＳＢ端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置５０５はレシーバ及びトランスミッタである。例えば、通信装置５０５は通信チップまたはＮＩＣである。
【００５２】
登録装置５００は、受付部５１０と生成部５２０と登録部５３０といった要素を備える。これらの要素はソフトウェアで実現される。
【００５３】
補助記憶装置５０３には、受付部５１０と生成部５２０と登録部５３０と記憶部５９１としてコンピュータを機能させるための登録プログラムが記憶されている。登録プログラムは、メモリ５０２にロードされて、プロセッサ５０１によって実行される。
さらに、補助記憶装置５０３にはＯＳが記憶されている。ＯＳの少なくとも一部は、メモリ５０２にロードされて、プロセッサ５０１によって実行される。
つまり、プロセッサ５０１は、ＯＳを実行しながら、登録プログラムを実行する。
登録プログラムを実行して得られるデータは、メモリ５０２、補助記憶装置５０３、プロセッサ５０１内のレジスタまたはプロセッサ５０１内のキャッシュメモリといった記憶装置に記憶される。
【００５４】
補助記憶装置５０３は記憶部５９１として機能する。但し、他の記憶装置が、補助記憶装置５０３の代わりに、又は、補助記憶装置５０３と共に、記憶部５９１として機能してもよい。
【００５５】
登録装置５００は、プロセッサ５０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ５０１の役割を分担する。
【００５６】
登録プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータで読み取り可能に記録（格納）することができる。
【００５７】
図７に基づいて、生成部５２０の構成を説明する。
生成部５２０は、乱数生成部５２１と暗号化データ生成部５２２とキーワード取得部５２３と暗号化タグ生成部５２４とを備える。
【００５８】
図８に基づいて、検索操作装置６００の構成を説明する。
検索操作装置６００は、プロセッサ６０１とメモリ６０２と補助記憶装置６０３と入出力インタフェース６０４と通信装置６０５といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００５９】
プロセッサ６０１は、演算処理を行うＩＣであり、他のハードウェアを制御する。例えば、プロセッサ６０１はＣＰＵ、ＤＳＰまたはＧＰＵである。
メモリ６０２は揮発性の記憶装置である。メモリ６０２は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ６０２はＲＡＭである。メモリ６０２に記憶されたデータは必要に応じて補助記憶装置６０３に保存される。
補助記憶装置６０３は不揮発性の記憶装置である。例えば、補助記憶装置６０３は、ＲＯＭ、ＨＤＤまたはフラッシュメモリである。補助記憶装置６０３に記憶されたデータは必要に応じてメモリ６０２にロードされる。
【００６０】
入出力インタフェース６０４は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース６０４はＵＳＢ端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置６０５はレシーバ及びトランスミッタである。例えば、通信装置６０５は通信チップまたはＮＩＣである。
【００６１】
検索操作装置６００は、受付部６１０と生成部６２０と要求部６３０と復号部６４０と出力部６５０といった要素を備える。これらの要素はソフトウェアで実現される。
【００６２】
補助記憶装置６０３には、受付部６１０と生成部６２０と要求部６３０と復号部６４０と出力部６５０と記憶部６９１としてコンピュータを機能させるための検索操作プログラムが記憶されている。検索操作プログラムは、メモリ６０２にロードされて、プロセッサ６０１によって実行される。
さらに、補助記憶装置６０３にはＯＳが記憶されている。ＯＳの少なくとも一部は、メモリ６０２にロードされて、プロセッサ６０１によって実行される。
つまり、プロセッサ６０１は、ＯＳを実行しながら、検索操作プログラムを実行する。
検索操作プログラムを実行して得られるデータは、メモリ６０２、補助記憶装置６０３、プロセッサ６０１内のレジスタまたはプロセッサ６０１内のキャッシュメモリといった記憶装置に記憶される。
【００６３】
補助記憶装置６０３は記憶部６９１として機能する。但し、他の記憶装置が、補助記憶装置６０３の代わりに、又は、補助記憶装置６０３と共に、記憶部６９１として機能してもよい。
【００６４】
検索操作装置６００は、プロセッサ６０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ６０１の役割を分担する。
【００６５】
検索操作プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータで読み取り可能に記録（格納）することができる。
【００６６】
図９に基づいて、生成部６２０の構成を説明する。
生成部６２０は、検索クエリ生成部６２２を備える。
【００６７】
図１０に基づいて、データ管理装置７００の構成を説明する。
データ管理装置７００は、プロセッサ７０１とメモリ７０２と補助記憶装置７０３と入出力インタフェース７０４と通信装置７０５といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００６８】
プロセッサ７０１は、演算処理を行うＩＣであり、他のハードウェアを制御する。例えば、プロセッサ９０１は、ＣＰＵ、ＤＳＰまたはＧＰＵである。
メモリ７０２は揮発性の記憶装置である。メモリ７０２は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ７０２はＲＡＭである。メモリ７０２に記憶されたデータは必要に応じて補助記憶装置７０３に保存される。
補助記憶装置７０３は不揮発性の記憶装置である。例えば、補助記憶装置７０３は、ＲＯＭ、ＨＤＤまたはフラッシュメモリである。補助記憶装置７０３に記憶されたデータは必要に応じてメモリ７０２にロードされる。
【００６９】
入出力インタフェース７０４は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース７０４はＵＳＢ端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。
通信装置７０５はレシーバ及びトランスミッタである。例えば、通信装置７０５は通信チップまたはＮＩＣである。
【００７０】
データ管理装置７００は、受付部７１０と照合部７２１と出力部７３０といった要素を備える。これらの要素はソフトウェアで実現される。
【００７１】
補助記憶装置７０３には、受付部７１０と照合部７２１と出力部７３０と記憶部７９１としてコンピュータを機能させるためのデータ管理プログラムが記憶されている。データ管理プログラムは、メモリ７０２にロードされて、プロセッサ７０１によって実行される。
さらに、補助記憶装置７０３にはＯＳが記憶されている。ＯＳの少なくとも一部は、メモリ７０２にロードされて、プロセッサ７０１によって実行される。
つまり、プロセッサ７０１は、ＯＳを実行しながら、データ管理プログラムを実行する。
データ管理プログラムを実行して得られるデータは、メモリ７０２、補助記憶装置７０３、プロセッサ７０１内のレジスタまたはプロセッサ７０１内のキャッシュメモリといった記憶装置に記憶される。
【００７２】
補助記憶装置７０３は記憶部７９１として機能する。但し、他の記憶装置が、補助記憶装置７０３の代わりに、又は、補助記憶装置７０３と共に、記憶部７９１として機能してもよい。
【００７３】
データ管理装置７００は、プロセッサ７０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ７０１の役割を分担する。
【００７４】
データ管理プログラムは、光ディスクまたはフラッシュメモリ等の不揮発性の記録媒体にコンピュータで読み取り可能に記録（格納）することができる。
【００７５】
＊＊＊動作の説明＊＊＊
秘匿検索システム１００の動作は秘匿検索方法に相当する。
秘匿検索方法として、秘匿検索システム１００の各装置の処理を説明する。
【００７６】
図１２に基づいて、マスター鍵生成（Ｓ１１０）を説明する。
マスター鍵生成（Ｓ１１０）は、マスター鍵装置２００によって実行される処理である。
【００７７】
ステップＳ１１１において、受付部２１０は、鍵長ＢＩＴ（ｉ）と世代番号ｉとを受け付ける。
具体的には、受付部２１０は、マスター鍵装置２００に入力された鍵長ＢＩＴ（ｉ）と世代番号ｉとを入出力インタフェース２０４を介して受け付ける。但し、受付部２１０は、鍵長ＢＩＴ（ｉ）と世代番号ｉとをアプリケーションプログラムから受け付けてもよい。
【００７８】
鍵長ＢＩＴ（ｉ）は、マスター鍵ＭＫ（ｉ）のビット長さである。
【００７９】
世代番号ｉは、マスター鍵ＭＫ（ｉ）の世代番号であり、過去の世代番号とは重複していない。
例えば、世代番号ｉは、通し番号または日時である。
【００８０】
マスター鍵ＭＫ（ｉ）は、世代番号ｉのマスター鍵ＭＫである。
【００８１】
ステップＳ１１２において、生成部２２０は、マスター鍵ＭＫ（ｉ）を生成する。
具体的には、生成部２２０は、鍵長ＢＩＴ（ｉ）と同じ長さを有するランダムなビット列を生成する。生成されるビット列がマスター鍵ＭＫ（ｉ）である。
例えば、鍵長ＢＩＴ（ｉ）が２５６ビットである場合、生成部２２０は、２５６ビットのランダムなビット列を生成する。これにより、２５６ビットのマスター鍵ＭＫ（ｉ）が得られる。
【００８２】
ステップＳ１１３において、生成部２２０は、マスター鍵データＭＳＫ（ｉ）を記憶部２９１に記憶する。そして、マスター鍵データＭＳＫ（ｉ）が記憶部２９１に保管される。
【００８３】
マスター鍵データＭＳＫ（ｉ）は、マスター鍵ＭＫ（ｉ）と世代番号ｉとの組であり、世代番号ｉのマスター鍵データＭＳＫと呼ばれる。
【００８４】
マスター鍵データＭＳＫ（ｉ）は次のように表すことができる。
ＭＳＫ（ｉ）＝（ｉ，ＭＫ（ｉ））
【００８５】
ステップＳ１１４において、出力部２３０はマスター鍵データＭＳＫ（ｉ）を出力する。
例えば、出力部２３０は、通信装置２０５を用いて、マスター鍵データＭＳＫ（ｉ）を登録鍵装置３００へ送信する。
【００８６】
図１３に基づいて、登録鍵生成（Ｓ１２０）を説明する。
登録鍵生成（Ｓ１２０）は、登録鍵装置３００によって実行される処理である。
【００８７】
ステップＳ１２１において、受付部３１０は、マスター鍵データＭＳＫ（ｉ）を受け付ける。
例えば、受付部３１０は、通信装置３０５を用いて、マスター鍵装置２００からマスター鍵データＭＳＫ（ｉ）を受信する。但し、受付部３１０は、登録鍵装置３００に入力されたマスター鍵データＭＳＫ（ｉ）を入出力インタフェース３０４を介して受け付けてもよい。
【００８８】
ステップＳ１２２において、生成部３２０は、マスター鍵データＭＳＫ（ｉ）に含まれるマスター鍵ＭＫ（ｉ）を用いて、データ鍵ＤＫ（ｉ）とタグ鍵ＴＫ（ｉ）とを生成する。
【００８９】
具体的には、生成部３２０は、マスター鍵ＭＫ（ｉ）を入力として関数Ｆ＿１を実行することによって、２つの乱数を生成する。各乱数はランダムなビット列である。
【００９０】
関数Ｆ＿１の一例は擬似ランダム関数である。疑似ランダム関数は、暗号学的な関数であり、鍵が決まると入力値に応じて確定的に乱数を返す。また、ＳＨＡ−１のような暗号学的なハッシュ関数またはＡＥＳのような共通鍵暗号方式の関数が関数Ｆ＿１として用いられてもよい。
【００９１】
一方の乱数がデータ鍵ＤＫ（ｉ）である。データ鍵ＤＫ（ｉ）は次のように表すことができる。
ＤＫ（ｉ）  ＝  Ｆ＿１（ＭＫ（ｉ），１）
【００９２】
他方の乱数がタグ鍵ＴＫ（ｉ）である。タグ鍵ＴＫ（ｉ）は次のように表すことができる。
ＴＫ（ｉ）  ＝  Ｆ＿１（ＭＫ（ｉ），２）
【００９３】
ステップＳ１２３において、生成部３２０は、登録鍵ＥＫ（ｉ）を記憶部３９１に記憶する。そして、登録鍵ＥＫ（ｉ）が記憶部３９１に保管される。
登録鍵ＥＫ（ｉ）は、世代番号ｉとデータ鍵ＤＫ（ｉ）とタグ鍵ＴＫ（ｉ）との組であり、世代番号ｉの登録鍵ＥＫと呼ばれる。
【００９４】
登録鍵ＥＫ（ｉ）は次のように表すことができる。
ＥＫ（ｉ）  ＝  （ｉ，ＤＫ（ｉ），ＴＫ（ｉ））
【００９５】
ステップＳ１２４において、出力部３３０は登録鍵ＥＫ（ｉ）を出力する。
例えば、出力部３３０は、通信装置３０５を用いて、登録鍵ＥＫ（ｉ）をユーザ鍵装置４００と登録装置５００とのそれぞれに送信する。
【００９６】
図１４に基づいて、ユーザ鍵生成（Ｓ１３０）を説明する。
ユーザ鍵生成（Ｓ１３０）は、ユーザ鍵装置４００によって実行される処理である。
【００９７】
ステップＳ１３１において、受付部４１０は登録鍵ＥＫ（ｉ）を受け付ける。
例えば、受付部４１０は、通信装置４０５を用いて、登録鍵装置３００から登録鍵ＥＫ（ｉ）を受信する。但し、受付部４１０は、ユーザ鍵装置４００に入力された登録鍵ＥＫ（ｉ）を入出力インタフェース４０４を介して受け付けてもよい。
【００９８】
さらに、受付部４１０は、登録鍵ＥＫ（ｉ）を記憶部４９１に記憶する。そして、登録鍵ＥＫ（ｉ）は記憶部４９１に保管される。
【００９９】
登録鍵ＥＫ（ｉ）が記憶部４９１に既に保管されている場合、ステップＳ１３１は不要である。
【０１００】
登録鍵ＥＫ（ｉ）は、世代番号ｉとデータ鍵ＤＫ（ｉ）とタグ鍵ＴＫ（ｉ）とを含んでいる。
【０１０１】
ステップＳ１３２において、受付部４１０は属性情報Ａを受け付ける。
具体的には、受付部４１０は、ユーザ鍵装置４００に入力された属性情報Ａを入出力インタフェース４０４を介して受け付ける。但し、受付部４１０は、属性情報Ａをアプリケーションプログラムから受け付けてもよい。
【０１０２】
属性情報Ａは、検索者の属性情報である。また、属性情報Ａは、検索および復号の権限制御に関わる。
検索者は、検索する利用者である。つまり、検索者は、検索操作装置６００の利用者である。
利用者の属性は階層を成す。
属性情報は、利用者の各層の属性値を示す。つまり、属性情報Ａは、検索者の各層の属性値を示す。
【０１０３】
図１５に基づいて、属性情報の例を説明する。
利用者の属性は階層を成す。図１５において、利用者の属性は４階層を成している。
第１層の属性（第１属性）は事業部を示す。
第２層の属性（第２属性）は部を示す。
第３層の属性（第３属性）は課を示す。
第４層の属性（第４属性）は氏名を示す。
【０１０４】
第１の属性情報は、Ｎｅさんの属性情報である。Ｎｅさんは、Ｄｉ事業部のＤｅ部のＳｃ課に所属する。
第２の属性情報は、Ｎｆさんの属性情報である。Ｎｆさんは、Ｄｉ事業部のＤｅ部のＳｄ課に所属する。
第３の属性情報は、Ｓｃ課員の属性情報である。Ｓｃ課員は、Ｄｉ事業部のＤｅ部のＳｃ課に所属する。第４属性がワイルドカード「＊」であるため、氏名は限定されない。
第４の属性情報は、Ｄｅ部員の属性情報である。Ｄｅ部員は、Ｄｉ事業部のＤｅ部に所属する。第３属性および第４属性がワイルドカード「＊」であるため、課および氏名は限定されない。
【０１０５】
実施の形態１において、利用者の属性はＬ層を成し、属性情報はＬ個の属性値を有する。Ｌは２以上の整数である。
【０１０６】
属性情報Ａは次のように表すことができる。
Ａ  ＝  （Ａ＿１，・・・，Ａ＿Ｌ）
【０１０７】
図１４に戻り、ステップＳ１３３から説明を続ける。
ステップＳ１３３において、属性鍵生成部４２２は、データ鍵ＤＫ（ｉ）と属性情報Ａとを用いて、データ属性鍵データＤＡＫ（ｉ）を生成する。データ属性鍵データＤＡＫ（ｉ）は、世代番号ｉのデータ属性鍵データＤＡＫである。
【０１０８】
データ属性鍵データＤＡＫ（ｉ）は、データ属性鍵ＤＡＫ＿ｊとフラグ値Ｄｂ＿ｊとを有する。ｊは１以上Ｌ以下の整数である。
【０１０９】
属性鍵生成部４２２は、データ属性鍵ＤＡＫ＿ｊを以下のように算出する。
まず、属性鍵生成部４２２は、属性値Ａ＿ｊと番号ｊとを連結する。得られるビット列が表す値を連結値（Ａ＿ｊ）と呼ぶ。
次に、属性鍵生成部４２２は、データ鍵ＤＫ（ｉ）と連結値（Ａ＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値がデータ属性鍵ＤＡＫ＿ｊである。
【０１１０】
関数Ｆ＿２は、関数Ｆ＿１と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
【０１１１】
属性鍵生成部４２２は、フラグ値Ｄｂ＿ｊを以下のように算出する。
属性鍵生成部４２２は、属性値Ａ＿ｊがワイルドカード「＊」であるか判定する。
属性値Ａ＿ｊがワイルドカード「＊」である場合、フラグ値Ｄｂ＿ｊは１である。
属性値Ａ＿ｊがワイルドカード「＊」でない場合、フラグ値Ｄｂ＿ｊは０である。
【０１１２】
データ属性鍵データＤＡＫ（ｉ）は次のように表すことができる。
ＤＡＫ（ｉ）  ＝  （（Ｄｂ＿１，ＤＡＫ＿１），・・・，（Ｄｂ＿Ｌ，ＤＡＫ＿Ｌ））
Ａ＿ｊ＝＊である場合、Ｄｂ＿ｊ  ＝  １
Ａ＿ｊ≠＊である場合、Ｄｂ＿ｊ  ＝  ０
ＤＡＫ＿ｊ  ＝  Ｆ＿２（ＤＫ（ｉ），Ａ＿ｊ｜｜ｊ）
但し、「ｘ｜｜ｙ」はデータｘとデータｙとの連結を意味する。
【０１１３】
さらに、属性鍵生成部４２２は、タグ鍵ＴＫ（ｉ）と属性情報Ａとを用いて、タグ属性鍵データＴＡＫ（ｉ）を生成する。タグ属性鍵データＴＡＫ（ｉ）は、世代番号ｉのタグ属性鍵データＴＡＫである。
【０１１４】
タグ属性鍵データＴＡＫ（ｉ）は、タグ属性鍵ＴＡＫ＿ｊとフラグ値Ｔｂ＿ｊとを有する。
【０１１５】
属性鍵生成部４２２は、タグ属性鍵ＴＡＫ＿ｊを以下のように算出する。
まず、属性鍵生成部４２２は、属性値Ａ＿ｊと番号ｊとを連結する。得られるビット列が表す値を連結値（Ａ＿ｊ）と呼ぶ。
次に、属性鍵生成部４２２は、タグ鍵ＴＫ（ｉ）と連結値（Ａ＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値がタグ属性鍵ＴＡＫ＿ｊである。
【０１１６】
フラグ値Ｔｂ＿ｊは、属性値Ａ＿ｊがワイルドカード「＊」であるか否かを示す。
属性値Ａ＿ｊがワイルドカード「＊」である場合、フラグ値Ｔｂ＿ｊは１である。
属性値Ａ＿ｊがワイルドカード「＊」でない場合、フラグ値Ｔｂ＿ｊは０である。
【０１１７】
タグ属性鍵データＴＡＫ（ｉ）は次のように表すことができる。
ＴＡＫ（ｉ）  ＝  （（Ｔｂ＿１，ＴＡＫ＿１），・・・，（Ｔｂ＿Ｌ，ＴＡＫ＿Ｌ））
Ａ＿ｊ＝＊である場合、Ｔｂ＿ｊ  ＝  １
Ａ＿ｊ≠＊である場合、Ｔｂ＿ｊ  ＝  ０
ＴＡＫ＿ｊ  ＝  Ｆ＿２（ＴＫ（ｉ），Ａ＿ｊ｜｜ｊ）
【０１１８】
ステップＳ１３４において、生成部４２０は、ユーザ鍵ＵＫ（ｉ）を記憶部４９１に記憶する。そして、ユーザ鍵ＵＫ（ｉ）が記憶部４９１に保管される。
【０１１９】
ユーザ鍵ＵＫ（ｉ）は、世代番号ｉとデータ属性鍵データＤＡＫ（ｉ）とタグ属性鍵データＴＡＫ（ｉ）との組である。
ユーザ鍵ＵＫ（ｉ）は、属性情報Ａに対する世代番号ｉのユーザ鍵ＵＫである。
【０１２０】
ユーザ鍵ＵＫ（ｉ）は次のように表すことができる。
ＵＫ（ｉ）＝（ｉ，ＤＡＫ（ｉ），ＴＡＫ（ｉ））
【０１２１】
ステップＳ１３５において、出力部４３０はユーザ鍵ＵＫ（ｉ）を出力する。
例えば、出力部４３０は、通信装置４０５を用いて、ユーザ鍵ＵＫ（ｉ）を検索操作装置６００へ送信する。
【０１２２】
図１６に基づいて、データ登録（Ｓ１４０）を説明する。
データ登録（Ｓ１４０）は、登録装置５００によって実行される処理である。
【０１２３】
ステップＳ１４１において、受付部５１０は登録鍵ＥＫ（ｉ）を受け付ける。
例えば、受付部５１０は、通信装置５０５を用いて、登録鍵装置３００から登録鍵ＥＫ（ｉ）を受信する。但し、受付部５１０は、登録装置５００に入力された登録鍵ＥＫ（ｉ）を入出力インタフェース５０４を介して受け付けてもよい。
【０１２４】
さらに、受付部５１０は、登録鍵ＥＫ（ｉ）を記憶部５９１に記憶する。そして、登録鍵ＥＫ（ｉ）は記憶部５９１に記憶される。
【０１２５】
登録鍵ＥＫ（ｉ）が記憶部５９１に既に保管されている場合、ステップＳ１４１は不要である。
【０１２６】
登録鍵ＥＫ（ｉ）は、世代番号ｉとデータ鍵ＤＫ（ｉ）とタグ鍵ＴＫ（ｉ）とを含んでいる。
【０１２７】
さらに、受付部５１０は、登録鍵ＥＫ（ｉ）を記憶部５９１に記憶する。そして、登録鍵ＥＫ（ｉ）は記憶部５９１に保管される。
【０１２８】
ステップＳ１４２において、受付部５１０は、平文Ｍと属性情報Ｂとを受け付ける。
具体的には、受付部５１０は、登録装置５００に入力された平文Ｍと属性情報Ｂとを入出力インタフェース５０４を介して受け付ける。但し、受付部５１０は、平文Ｍと属性情報Ｂとをアプリケーションプログラムから受け付けてもよい。
【０１２９】
平文Ｍは、暗号化されていないデータである。
平文Ｍには、ファイル名Ｆｉｌｅ（Ｍ）がメタデータとして含まれる。
【０１３０】
属性情報Ｂは、権限者の属性情報であり、権限者の各層の属性値を示す。また、属性情報Ｂは、属性情報Ａと同様に、検索および復号の権限制御に関わる。
権限者は、平文Ｍを参照する権限を有する利用者である。つまり、権限者は、検索操作装置６００の利用者の一部である。
【０１３１】
属性情報Ｂは以下のように表すことができる。
Ｂ  ＝  （Ｂ＿１，・・・，Ｂ＿Ｌ）
【０１３２】
ステップＳ１４３において、乱数生成部５２１は、３つのデータ乱数組（Ｒ、ｓ、Ｓ）と３つのタグ乱数組（Ｒ’、ｓ’、Ｓ’）とを生成する。
【０１３３】
それぞれのデータ乱数組（Ｒ、ｓ、Ｓ）は、属性の層数Ｌと同じ個数の乱数の組である。つまり、データ乱数組Ｒとデータ乱数組ｓとデータ乱数組ＳとのそれぞれはＬ個の乱数の組である。それぞれのデータ乱数組のＬ個の乱数は一様ランダムに生成される。
【０１３４】
３つのデータ乱数組（Ｒ、ｓ、Ｓ）は次のように表すことができる。
Ｒ  ＝  （Ｒ＿１，・・・，Ｒ＿Ｌ）
ｓ  ＝  （ｓ＿１，・・・，ｓ＿Ｌ）
Ｓ  ＝  （Ｓ＿１，・・・，Ｓ＿Ｌ）
【０１３５】
それぞれのタグ乱数組（Ｒ’、ｓ’、Ｓ’）は、属性の層数Ｌと同じ個数の乱数である。つまり、タグ乱数組Ｒ’とタグ乱数組ｓ’とタグ乱数組Ｓ’とのそれぞれはＬ個の乱数である。それぞれのタグ乱数組のＬ個の乱数は一様ランダムに生成される。
【０１３６】
３つのタグ乱数組（Ｒ’、ｓ’、Ｓ’）は次のように表すことができる。
Ｒ’  ＝  （Ｒ’＿１，・・・，Ｒ’＿Ｌ）
ｓ’  ＝  （ｓ’＿１，・・・，ｓ’＿Ｌ）
Ｓ’  ＝  （Ｓ’＿１，・・・，Ｓ’＿Ｌ）
【０１３７】
ステップＳ１４４において、暗号化データ生成部５２２は、データ鍵ＤＫ（ｉ）と平文Ｍと属性情報Ｂと３つのデータ乱数組（Ｒ、ｓ、Ｓ）とを用いて、暗号化データＣを生成する。
【０１３８】
暗号化データＣは、属性要素Ｃ＿｛ｊ，０，０｝と属性要素Ｃ＿｛ｊ，０，１｝とワイルドカード要素Ｃ＿｛ｊ，１，０｝とワイルドカード要素Ｃ＿｛ｊ，１，１｝とを有する。
ｊは、１以上Ｌ以下の整数であり、層の番号を示す。
【０１３９】
暗号化データＣは、さらに、暗号文Ｃ＿｛Ｌ＋１｝を有する。
【０１４０】
暗号化データＣには、ファイル名Ｆｉｌｅ（Ｍ）が平文Ｍのメタデータとして含まれる。ファイル名Ｆｉｌｅ（Ｍ）は暗号化されてもよい。
【０１４１】
暗号化データ生成部５２２は、属性要素Ｃ＿｛ｊ，０，０｝を以下のように算出する。
まず、暗号化データ生成部５２２は、属性値Ｂ＿ｊと番号ｊとを連結する。得られるビット列が表す値を連結値（Ｂ＿ｊ）と呼ぶ。
次に、暗号化データ生成部５２２は、データ鍵ＤＫ（ｉ）と連結値（Ｂ＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値を関数値（Ｂ＿ｊ’）と呼ぶ。
更に、暗号化データ生成部５２２は、関数値（Ｂ＿ｊ’）と乱数ｓ＿ｊとを入力として関数Ｆ＿３を実行する。得られる値を関数値（Ｂ＿ｊ’’）と呼ぶ。
そして、暗号化データ生成部５２２は、関数値（Ｂ＿ｊ’’）と乱数Ｒ＿ｊとの排他的論理和を算出する。得られる値が属性要素Ｃ＿｛ｊ，０，０｝である。
【０１４２】
関数Ｆ＿３は、関数Ｆ＿１と関数Ｆ＿２と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
【０１４３】
暗号化データ生成部５２２は、属性要素Ｃ＿｛ｊ，０，１｝に乱数ｓ＿ｊを設定する。
【０１４４】
暗号化データ生成部５２２は、ワイルドカード要素Ｃ＿｛ｊ，１，０｝を以下のように算出する。
まず、暗号化データ生成部５２２は、ワイルドカード「＊」と番号ｊとを連結する。得られるビット列が表す値を連結値（＊＿ｊ）という。
次に、暗号化データ生成部５２２は、データ鍵ＤＫ（ｉ）と連結値（＊＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値を関数値（＊＿ｊ’）と呼ぶ。
更に、暗号化データ生成部５２２は、関数値（＊＿ｊ’）と乱数Ｓ＿ｊとを入力として関数Ｆ＿３を実行する。得られる値を関数値（＊＿ｊ’’）と呼ぶ。
そして、暗号化データ生成部５２２は、関数値（＊＿ｊ’’）と乱数Ｒ＿ｊとの排他的論理和を算出する。得られる値がワイルドカード要素Ｃ＿｛ｊ，１，０｝である。
【０１４５】
暗号化データ生成部５２２は、ワイルドカード要素Ｃ＿｛ｊ，１，１｝に乱数Ｓ＿ｊを設定する。
【０１４６】
暗号化データ生成部５２２は、暗号文Ｃ＿｛Ｌ＋１｝を以下のように算出する。
まず、暗号化データ生成部５２２は、データ乱数組ＲのＬ個の乱数の排他的論理和を算出する。得られる値を演算値（Ｒ＋）と呼ぶ。
そして、暗号化データ生成部５２２は、演算値（Ｒ＋）と平文Ｍとを入力として関数Ｆ＿４を実行する。得られる値が暗号文Ｃ＿｛Ｌ＋１｝である。
【０１４７】
関数Ｆ＿４の一例は、ＡＥＳのような共通鍵暗号方式の関数である。
【０１４８】
暗号化データＣは以下のように表すことができる。但し、実施の形態１において「＋」は排他的論理和（ＸＯＲ）を意味する。
Ｃ  ＝  （（Ｃ＿｛１，０，０｝，Ｃ＿｛１，０，１｝，Ｃ＿｛１，１，０｝，Ｃ＿｛１，１，１｝），・・・，（Ｃ＿｛Ｌ，０，０｝，Ｃ＿｛Ｌ，０，１｝，Ｃ＿｛Ｌ，１，０｝，Ｃ＿｛Ｌ，１，１｝），Ｃ＿｛Ｌ＋１｝）
Ｃ＿｛ｊ，０，０｝  ＝  Ｆ＿３（Ｆ＿２（ＤＫ（ｉ），Ｂ＿ｊ｜｜ｊ），ｓ＿ｊ）＋Ｒ＿ｊ
Ｃ＿｛ｊ，０，１｝  ＝  ｓ＿ｊ
Ｃ＿｛ｊ，１，０｝  ＝  Ｆ＿３（Ｆ＿２（ＤＫ（ｉ），＊｜｜ｊ），Ｓ＿ｊ）＋Ｒ＿ｊ
Ｃ＿｛ｊ，１，１｝  ＝  Ｓ＿ｊ
Ｃ＿｛Ｌ＋１｝  ＝  Ｆ＿４（Ｒ＋，Ｍ）
Ｒ＋  ＝  Ｒ＿１＋・・・＋Ｒ＿Ｌ
【０１４９】
ステップＳ１４５において、キーワード取得部５２３は、平文Ｍに関するキーワード群を取得する。キーワード群は１つ以上のキーワードである。
【０１５０】
具体的には、キーワード取得部５２３は、平文Ｍに対して形態素解析または自然言語処理などを行うことによって、平文Ｍからキーワード群を抽出する。
但し、キーワード取得部５２３は、登録装置５００に入力されたキーワード群を入出力インタフェース５０４を介して受け付けてもよい。また、キーワード取得部５２３は、アプリケーションプログラムからキーワード群を受け付けてもよい。
【０１５１】
取得されたキーワード群を登録キーワード群Ｗと呼ぶ。
【０１５２】
実施の形態１において、登録キーワード群ＷがＮ個の登録キーワードであるものとする。
Ｎは２以上の整数である。
【０１５３】
登録キーワード群Ｗは以下のように表すことができる。
Ｗ  ＝  （Ｗ＿１，・・・，Ｗ＿Ｎ）
【０１５４】
ステップＳ１４６において、暗号化タグ生成部５２４は、タグ鍵ＴＫ（ｉ）と属性情報Ｂとタグ乱数組Ｓ’と登録キーワード群Ｗとを用いて、暗号化タグ群ＣＴ＿Ｗを生成する。
【０１５５】
暗号化タグ群ＣＴ＿Ｗは、複数の登録キーワードＷ＿ｎに対応する複数の暗号化タグＣＴ＿｛Ｗ＿ｎ｝である。
ｎは、１以上Ｎ以下の整数であり、登録キーワードの番号を示す。
【０１５６】
暗号化タグＣＴ＿｛Ｗ＿ｎ｝は、属性要素ＣＴ＿｛ｊ，０，０，Ｗ＿ｎ｝と属性要素ＣＴ＿｛ｊ，０，１，Ｗ＿ｎ｝とワイルドカード要素ＣＴ＿｛ｊ，１，０，Ｗ＿ｎ｝とワイルドカード要素ＣＴ＿｛ｊ，１，１，Ｗ＿ｎ｝とを有する。
さらに、暗号化タグＣＴ＿｛Ｗ＿ｎ｝は、判定要素ＣＴ＿｛Ｌ＋１，Ｗ＿ｎ｝を有する。
【０１５７】
暗号化タグ生成部５２４は、属性要素ＣＴ＿｛ｊ，０，０，Ｗ＿ｎ｝を以下のように算出する。
まず、暗号化タグ生成部５２４は、属性値Ｂ＿ｊと番号ｊとを連結する。得られるビット列が表す値を連結値（Ｂ＿ｊ）と呼ぶ。
次に、暗号化タグ生成部５２４は、タグ鍵ＴＫ（ｉ）と連結値（Ｂ＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値を関数値（Ｂ＿ｊ＾）という。
更に、暗号化タグ生成部５２４は、関数値（Ｂ＿ｊ＾）と登録キーワードＷ＿ｎとを入力として関数Ｆ＿５を実行する。得られる値を関数値（Ｂ＿ｊＷ＿ｎ＾＾）と呼ぶ。
更に、暗号化タグ生成部５２４は、関数値（Ｂ＿ｊＷ＿ｎ＾＾）と乱数ｓ’＿ｊとを入力として関数Ｆ＿６を実行する。得られる値を関数値（Ｂ＿ｊＷ＿ｎ＾＾＾）と呼ぶ。
そして、暗号化タグ生成部５２４は、関数値（Ｂ＿ｊＷ＿ｎ＾＾＾）と乱数Ｒ’＿ｊとの排他的論理和を算出する。得られる値が属性要素ＣＴ＿｛ｊ，０，０，Ｗ＿ｎ｝である。
【０１５８】
関数Ｆ＿５と関数Ｆ＿６とのそれぞれは、関数Ｆ＿１と関数Ｆ＿２と関数Ｆ＿３と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
【０１５９】
暗号化タグ生成部５２４は、属性要素ＣＴ＿｛ｊ，０，１，Ｗ＿ｎ｝に乱数ｓ’＿ｊを設定する。
【０１６０】
暗号化タグ生成部５２４は、ワイルドカード要素ＣＴ＿｛ｊ，１，０，Ｗ＿ｎ｝を以下のように算出する。
まず、暗号化タグ生成部５２４は、ワールドカード「＊」と番号ｊとを連結する。得られるビット列が表す値を連結値（＊＿ｊ）と呼ぶ。
次に、暗号化タグ生成部５２４は、タグ鍵ＴＫ（ｉ）と連結値（＊＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値を関数値（＊＿ｊ＾）と呼ぶ。
更に、暗号化タグ生成部５２４は、関数値（＊＿ｊ＾）と登録キーワードＷ＿ｎとを入力として関数Ｆ＿５を実行する。得られる値を関数値（＊＿ｊＷ＿ｎ＾＾）と呼ぶ。
更に、暗号化タグ生成部５２４は、関数値（＊＿ｊＷ＿ｎ＾＾）と乱数Ｓ’＿ｊとを入力として関数Ｆ＿６を実行する。得られる値を関数値（＊＿ｊＷ＿ｎ＾＾＾）と呼ぶ。
そして、暗号化タグ生成部５２４は、関数値（＊＿ｊＷ＿ｎ＾＾＾）と乱数Ｒ’＿ｊとの排他的論理和を算出する。得られる値がワイルドカード要素ＣＴ＿｛ｊ，１，０，Ｗ＿ｎ｝である。
【０１６１】
暗号化タグ生成部５２４は、ワイルドカード要素ＣＴ＿｛ｊ，１，１，Ｗ＿ｎ｝を乱数Ｓ’＿ｊとする。
【０１６２】
暗号化タグ生成部５２４は、判定要素ＣＴ＿｛Ｌ＋１，Ｗ＿ｎ｝を以下のように算出する。
まず、暗号化タグ生成部５２４は、タグ乱数組Ｒ’のＬ個の乱数の排他的論理和を算出する。得られる値を演算値（Ｒ’＋）と呼ぶ。
そして、暗号化タグ生成部５２４は、演算値（Ｒ’＋）を入力として関数Ｆ＿７を実行する。得られる値が判定要素ＣＴ＿｛Ｌ＋１，Ｗ＿ｎ｝である。
【０１６３】
関数Ｆ＿７の一例は、ＳＨＡ−１のようなハッシュ関数である。
【０１６４】
暗号化タグ群ＣＴ＿Ｗは以下のように表すことができる。
ＣＴ＿Ｗ  ＝  ｛ＣＴ＿｛Ｗ＿１｝，・・・，ＣＴ＿｛Ｗ＿Ｎ｝｝
【０１６５】
ＣＴ＿｛Ｗ＿ｎ｝  ＝  （（ＣＴ＿｛１，０，０，Ｗ＿ｎ｝，ＣＴ＿｛１，０，１，Ｗ＿ｎ｝，ＣＴ＿｛１，１，０，Ｗ＿ｎ｝，ＣＴ＿｛１，１，１，Ｗ＿ｎ｝），・・・，（ＣＴ＿｛Ｌ，０，０，Ｗ＿ｎ｝，ＣＴ＿｛Ｌ，０，１，Ｗ＿ｎ｝，ＣＴ＿｛Ｌ，１，０，Ｗ＿ｎ｝，ＣＴ＿｛Ｌ，１，１，Ｗ＿ｎ｝），ＣＴ＿｛Ｌ＋１，Ｗ＿ｎ｝）
ｎは１以上Ｎ以下の整数である。
【０１６６】
ＣＴ＿｛ｊ，０，０，Ｗ＿ｎ｝  ＝  Ｆ＿６（Ｆ＿５（Ｆ＿２（ＴＫ（ｉ），Ｂ＿ｊ｜｜ｊ），Ｗ＿ｎ），ｓ＿ｊ）＋Ｒ’＿ｊ
ＣＴ＿｛ｊ，０，１，Ｗ＿ｎ｝  ＝  ｓ’＿ｊ
ＣＴ＿｛ｊ，１，０，Ｗ＿ｎ｝  ＝  Ｆ＿６（Ｆ＿５（Ｆ＿２（ＴＫ（ｉ），＊｜｜ｊ），Ｗ＿ｎ），Ｓ’＿ｊ）＋Ｒ’＿ｊ
ＣＴ＿｛ｊ，１，１，Ｗ＿ｎ｝  ＝  Ｓ’＿ｊ
ｊは１以上Ｌ以下の整数である。
【０１６７】
Ｒ’＋  ＝  Ｒ’＿１＋・・・＋Ｒ’＿Ｌ
ＣＴ＿｛Ｌ＋１，Ｗ＿ｎ｝  ＝  Ｆ＿７（Ｒ’＋）
【０１６８】
登録キーワードＷ＿ｎを特定しない場合、「Ｗ＿ｎ」は省略される。
例えば、暗号化タグＣＴ＿｛Ｗ＿ｎ｝は暗号化タグＣＴと略される。
【０１６９】
ステップＳ１４７は、登録部５３０は、暗号化データＣと暗号化タグ群ＣＴ＿Ｗとの組をデータ管理装置７００に登録する。
具体的には、登録部５３０は、暗号化データＣと暗号化タグ群ＣＴ＿Ｗとの組をデータ管理装置７００に送信する。データ管理装置７００において、受付部７１０は、暗号化データＣと暗号化タグ群ＣＴ＿Ｗとの組を受信し、受信した組を記憶部７９１に記憶する。つまり、受付部７１０は、暗号化データＣと暗号化タグ群ＣＴ＿Ｗとを互いに対応付けて記憶部７９１に記憶する。そして、暗号化データＣと暗号化タグ群ＣＴ＿Ｗとの組が記憶部７９１に保管される。
【０１７０】
図１７に基づいて、登録データベース７９２を説明する。
データ管理装置７００は、識別番号とファイル名と暗号化データＣと暗号化タグ群ＣＴ＿Ｗとを互いに対応付けて登録データベース７９２に登録する。
登録データベース７９２は、記憶部７９１に記憶されている。
【０１７１】
図１８に基づいて、検索操作（Ｓ１５０）を説明する。
検索操作（Ｓ１５０）は、検索操作装置６００によって実行される処理である。
【０１７２】
ステップＳ１５１において、受付部６１０は、ユーザ鍵ＵＫ（ｉ）を受け付ける。
例えば、受付部６１０は、通信装置６０５を用いて、ユーザ鍵装置４００からユーザ鍵ＵＫ（ｉ）を受信する。但し、受付部６１０は、検索操作装置６００に入力されたユーザ鍵ＵＫ（ｉ）を入出力インタフェース６０４を介して受け付けてもよい。
【０１７３】
さらに、受付部６１０は、ユーザ鍵ＵＫ（ｉ）を記憶部６９１に記憶する。そして、ユーザ鍵ＵＫ（ｉ）は記憶部６９１に保管される。
【０１７４】
ユーザ鍵ＵＫ（ｉ）が記憶部６９１に既に保管されている場合、ステップＳ１５１は不要である。
【０１７５】
ユーザ鍵ＵＫ（ｉ）は、世代番号ｉとデータ属性鍵データＤＡＫ（ｉ）とタグ属性鍵データＴＡＫ（ｉ）と検索鍵ＳＫ（ｉ）とを含んでいる。
【０１７６】
ステップＳ１５２において、受付部６１０は、検索キーワードｗを受け付ける。
具体的には、受付部６１０は、検索操作装置６００に入力された検索キーワードｗを入出力インタフェース６０４を介して受け付ける。但し、受付部６１０は、検索キーワードｗをアプリケーションプログラムから受け付けてもよい。
【０１７７】
ステップＳ１５３において、検索クエリ生成部６２２は、タグ属性鍵データＴＡＫ（ｉ）と検索キーワードｗとを用いて、検索クエリＱを生成する。
【０１７８】
検索クエリＱは、フラグ要素Ｑｂ＿ｊと属性キーワード要素Ｑ＿ｊとを有する。
【０１７９】
検索クエリ生成部６２２は、フラグ要素Ｑｂ＿ｊを以下のように算出する。
検索クエリ生成部６２２は、タグ属性鍵データＴＡＫ（ｉ）からフラグ値Ｔｂ＿ｊを抽出する。フラグ要素Ｑｂ＿ｊはフラグ値Ｔｂ＿ｊと同じ値である。
【０１８０】
検索クエリ生成部６２２は、属性キーワード要素Ｑ＿ｊを以下のように算出する。
まず、検索クエリ生成部６２２は、タグ属性鍵データＴＡＫ（ｉ）からタグ属性鍵ＴＡＫ＿ｊを抽出する。
そして、検索クエリ生成部６２２は、タグ属性鍵ＴＡＫ＿ｊと検索キーワードｗとを入力として関数Ｆ＿５を実行する。得られる値が属性キーワード要素Ｑ＿ｊである。
【０１８１】
検索クエリＱは以下のように表すことができる。
Ｑ  ＝  （（Ｑｂ＿１，Ｑ＿１），・・・，（Ｑｂ＿Ｌ，Ｑ＿Ｌ））
Ｑｂ＿ｊ  ＝  Ｔｂ＿ｊ
Ｑ＿ｊ  ＝  Ｆ＿５（ＴＡＫ＿ｊ，ｗ）
【０１８２】
ステップＳ１５４において、要求部６３０は、通信装置６０５を用いて、検索クエリＱをデータ管理装置７００へ送信する。
【０１８３】
ステップＳ１５５において、要求部６３０は、通信装置６０５を用いて、検索結果｛Ｃ｝をデータ管理装置７００から受信する。
検索結果｛Ｃ｝は、検索にヒットした暗号化データＣの集合である。
【０１８４】
ステップＳ１５６において、復号部６４０は、データ属性鍵データＤＡＫ（ｉ）を用いて、各暗号化データＣから平文Ｍを復号する。
【０１８５】
具体的には、復号部６４０は暗号化データＣから平文Ｍを以下のように復号する。
まず、復号部６４０は演算値Ｕを算出する。演算値Ｕについて後述する。
次に、復号部６４０は、暗号化データＣから暗号文Ｃ＿｛Ｌ＋１｝を抽出する。
そして、復号部６４０は、演算値Ｕと暗号文Ｃ＿｛Ｌ＋１｝とを入力として、復号関数Ｆ＿４｛−１｝を実行する。得られる値が平文Ｍである。
【０１８６】
復号関数Ｆ＿４｛−１｝は、関数Ｆ＿４の復号関数である。
【０１８７】
復号部６４０は、演算値Ｕを以下のように算出する。
まず、復号部６４０は、データ属性鍵データＤＡＫ（ｉ）からフラグ値Ｄｂ＿ｊを抽出する。
次に、復号部６４０は、抽出したフラグ値Ｄｂ＿ｊに基づいて、暗号化データＣから属性要素の組（Ｃ＿｛ｊ，０，０｝、Ｃ＿｛ｊ，０，１｝）またはワイルドカード要素の組（Ｃ＿｛ｊ，１，０｝、Ｃ＿｛ｊ，１，１｝）を選択する。選択される組を選択要素の組（Ｃｊ０、Ｃｊ１）という。
次に、復号部６４０は、データ属性鍵データＤＡＫ（ｉ）からデータ属性鍵ＤＡＫ＿ｊを抽出する。
次に、復号部６４０は、データ属性鍵ＤＡＫ＿ｊと選択要素Ｃｊ１とを入力として関数Ｆ＿３を実行する。得られる値を関数値（Ｃｊ＾）と呼ぶ。
次に、復号部６４０は、関数値（Ｃｊ＾）と選択要素Ｃｊ０との排他的論理和を算出する。得られる値を抽出乱数（Ｒｊ＾）と呼ぶ。
そして、復号部６４０は、全ての階層の抽出乱数（Ｒｊ＾）の排他的論理和を算出する。得られる値が演算値Ｕである。
【０１８８】
平文Ｍは以下のように表すことができる。
Ｍ  ＝  Ｆ＿４｛−１｝（Ｕ，Ｃ＿｛Ｌ＋１｝）
Ｕ  ＝  （Ｆ＿３（ＤＡＫ＿１，Ｃ＿｛１，Ｄｂ＿１，１｝）＋Ｃ＿｛１，Ｄｂ＿１，０｝）＋・・・＋（Ｆ＿３（ＤＡＫ＿Ｌ，Ｃ＿｛Ｌ，Ｄｂ＿Ｌ，１｝）＋Ｃ＿｛Ｌ，Ｄｂ＿Ｌ，０｝）
【０１８９】
全ての階層ｊ（１≦ｊ≦Ｌ）において、属性値Ｂ＿ｊが属性値Ａ＿ｊと一致するか、または、属性値Ａ＿ｊがワイルドカード「＊」である場合を「Ｂ≧Ａ」と記す。
【０１９０】
Ｂ≧Ａを満たす場合、演算値Ｕは次のように展開することができる。
Ｕ  ＝  Ｒ＿１＋・・・＋Ｒ＿Ｌ
【０１９１】
したがって、Ｂ≧Ａを満たす場合、Ｆ＿４｛−１｝（Ｕ，Ｃ＿｛Ｌ＋１｝）を計算することによって、平文Ｍを算出することができる。
【０１９２】
なお、Ｂ≧Ａを満たさない場合、ある階層ｊについて次の２つの式がいずれも成り立たない。
Ｆ＿２（ＤＫ（ｉ），Ｂ＿ｊ｜｜ｊ）＝Ｆ＿２（ＤＫ（ｉ），Ａ＿ｊ｜｜ｊ）
Ｆ＿２（ＤＫ（ｉ），＊｜｜ｊ）＝Ｆ＿２（ＤＫ（ｉ），Ａ＿ｊ｜｜ｊ）
この場合、演算値Ｕの計算においていずれかの乱数Ｒ＿ｊが復元できないため、暗号化データＣから平文Ｍを復号することができない。
【０１９３】
検索結果｛Ｃ｝に暗号化データＣが含まれない場合、つまり、検索にヒットした暗号化データＣが無い場合、ステップＳ１５６は不要である。
【０１９４】
ステップＳ１５６で得られた平文Ｍの集合を検索結果｛Ｍ｝と呼ぶ。
【０１９５】
ステップＳ１５７において、出力部６５０は検索結果｛Ｍ｝を出力する。
具体的には、出力部６５０は、入出力インタフェース６０４を介して、ディスプレイに検索結果｛Ｍ｝を表示する。
検索結果｛Ｍ｝が得られなかった場合、つまり、検索にヒットした暗号化データＣが無い場合、出力部６５０は、検索にヒットした平文Ｍが無い旨のメッセージを表示する。
【０１９６】
図１９に基づいて、データ検索（Ｓ１６０）を説明する。
データ検索（Ｓ１６０）は、データ管理装置７００によって実行される処理である。
【０１９７】
ステップＳ１６１において、受付部７１０は、通信装置７０５を用いて、検索クエリＱを検索操作装置６００から受信する。
【０１９８】
ステップＳ１６２において、照合部７２１は、検索クエリＱを各暗号化タグＣＴと照合することによって、検索クエリＱに合致する暗号化タグＣＴを選択する。
暗号化タグＣＴについて登録キーワードの記号｛Ｗ＿ｎ｝は省略する。
【０１９９】
具体的には、照合部７２１は検索クエリＱを各暗号化タグＣＴと以下のように照合する。
まず、照合部７２１は、演算値Ｖ＿１を算出する。演算値Ｖ＿１については後述する。
照合部７２１は、演算値Ｖ＿１を入力として関数Ｆ＿７を実行する。得られる値を照合値Ｖ＿２と呼ぶ。
そして、照合部７２１は、照合値Ｖ＿２を判定要素ＣＴ＿｛Ｌ＋１｝と比較する。
照合値Ｖ＿２が判定要素ＣＴ＿｛Ｌ＋１｝と一致している場合、暗号化タグＣＴは検索クエリＱに合致している。
【０２００】
照合部７２１は、演算値Ｖ＿１を以下のように算出する。
まず、照合部７２１は、検索クエリＱからフラグ要素Ｑｂ＿ｊを抽出する。
次に、照合部７２１は、抽出したフラグ要素Ｑｂ＿ｊに基づいて、暗号化タグＣＴから属性要素の組（ＣＴ＿｛ｊ，０，０｝、ＣＴ＿｛ｊ，０，１｝）またはワイルドカード要素の組（ＣＴ＿｛ｊ，１，０｝、ＣＴ＿｛ｊ，１，１｝）を選択する。選択される組を選択要素（ＣＴｊ０、ＣＴｊ１）という。
次に、照合部７２１は、検索クエリＱから属性キーワード要素Ｑ＿ｊを抽出する。
次に、照合部７２１は、属性キーワード要素Ｑ＿ｊと選択要素（ＣＴｊ１）とを入力として関数Ｆ＿６を実行する。得られる値を関数値（ＣＴｊ＾）と呼ぶ。
次に、照合部７２１は、関数値（ＣＴｊ＾）と選択要素（ＣＴｊ０）との排他的論理和を算出する。得られる値を抽出乱数（Ｒ’ｊ＾）と呼ぶ。
そして、照合部７２１は、全ての階層の抽出乱数（Ｒ’ｊ＾）の排他的論理和を算出する。得られる値が演算値Ｖ＿１である。
【０２０１】
照合値Ｖ＿２は以下のように表すことができる。
Ｖ＿１  ＝  （Ｆ＿６（Ｑ＿１，ＣＴ＿｛１，Ｑｂ＿１，１｝）＋ＣＴ＿｛１，Ｑｂ＿１，０｝）＋・・・＋（Ｆ＿６（Ｑ＿Ｌ，ＣＴ＿｛Ｌ，Ｑｂ＿Ｌ，１｝）＋ＣＴ＿｛Ｌ，Ｑｂ＿Ｌ，０｝）
Ｖ＿２  ＝  Ｆ＿７（Ｖ＿１）
【０２０２】
Ｂ≧ＡとＷ＿ｎ＝ｗとを満たす場合、演算値Ｖ＿１は次のように展開することができる。
Ｖ＿１  ＝  Ｒ＿１＋・・・＋Ｒ’＿Ｌ
【０２０３】
その結果、次の式が成り立つ。
Ｖ＿２  ＝  Ｆ＿７（Ｖ＿１）＝  Ｆ＿７（Ｒ’＿１＋・・・＋Ｒ’＿Ｌ）＝  ＣＴ＿｛Ｌ＋１｝
【０２０４】
もし、Ｂ≧Ａを満たすがＷ＿ｎ＝ｗ’を満たさない場合、もしくは、Ｗ＿ｎ＝ｗは満たすがＢ≧Ａを満たさない場合、いずれかの乱数Ｒ’＿ｊが正しく復元できず、Ｒ’＿１＋・・・＋Ｒ’＿Ｌを計算できない。
そのため、通常、照合値Ｖ＿２（＝Ｆ＿７（Ｖ＿１））と判定要素Ｃ＿｛Ｌ＋１｝（＝Ｆ＿７（Ｒ’＿１＋・・・＋Ｒ’＿Ｌ））とが一致する確率は非常に低い。
【０２０５】
ステップＳ１６２で選択された暗号化タグＣＴ、つまり、検索クエリＱに合致した暗号化タグＣＴを該当暗号化タグＣＴと呼ぶ。
【０２０６】
ステップＳ１６３において、抽出部７２２は、該当暗号化タグＣＴに対応する暗号化データＣを抽出する。抽出される暗号化データＣを該当暗号化データＣと呼ぶ。
【０２０７】
ステップＳ１６４において、出力部７３０は、通信装置７０５を用いて、暗号結果｛Ｃ｝を検索操作装置６００へ送信する。
暗号結果｛Ｃ｝は該当暗号化データＣの集合である。
【０２０８】
図２０に基づいて、データ削除（Ｓ１７０）を説明する。
データ削除（Ｓ１７０）は、検索操作装置６００とデータ管理装置７００とによって実行される処理である。
【０２０９】
ステップＳ１７１において、検索操作装置６００の受付部６１０は、削除ファイル名を受け付ける。
具体的には、受付部６１０は、検索操作装置６００に入力された削除ファイル名を入出力インタフェース６０４を介して受け付ける。但し、受付部６１０は、削除ファイル名をアプリケーションプログラムから受け付けてもよい。
例えば、削除ファイル名は検索操作（Ｓ１５０）によって得られる。
【０２１０】
ステップＳ１７２において、検索操作装置６００の出力部６５０は、通信装置６０５を用いて、削除ファイル名をデータ管理装置７００へ送信する。
【０２１１】
ステップＳ１７３において、データ管理装置７００の受付部７１０は、通信装置７０５を用いて、検索操作装置６００から削除ファイル名を受信する。
【０２１２】
ステップＳ１７４において、データ管理装置７００の受付部７１０は、削除ファイル名に対応する暗号化データＣと暗号化タグＣＴ＿Ｗとを記憶部７９１から削除する。
【０２１３】
＊＊＊実施の形態１の効果＊＊＊
マルチユーザ型の秘匿検索を公開鍵暗号技術を用いずに共通鍵暗号技術を用いて実現することができる。そして、公開鍵暗号技術が使用されないため、データの登録および検索を高速に行うことができる。
秘匿検索において、検索キーワードが登録キーワードと完全に一致した場合に検索がヒットする。
【０２１４】
実施の形態２．
部分一致検索が可能なマルチユーザ型の共通鍵方式について、主に実施の形態１と異なる点を図２１から図２４に基づいて説明する。
【０２１５】
＊＊＊構成の説明＊＊＊
図２１に基づいて、生成部５２０の構成を説明する。
生成部５２０は、乱数生成部５２５と暗号化データ生成部５２２とキーワード取得部５２３と部分一致キーワード生成部５２６と暗号化タグ生成部５２７とを備える。
【０２１６】
図２２に基づいて、検索部７２０の構成を説明する。
検索部７２０は、照合部７２３と抽出部７２２とを備える。
【０２１７】
＊＊＊動作の説明＊＊＊
マスター鍵生成（Ｓ１１０）は、実施の形態１で説明した通りである（図１２参照）。
マスター鍵生成（Ｓ１１０）において、マスター鍵装置２００は、マスター鍵データＭＳＫ（ｉ）を生成する。
マスター鍵データＭＳＫ（ｉ）は、マスター鍵ＭＫ（ｉ）と世代番号ｉとの組である。
【０２１８】
登録鍵生成（Ｓ１２０）は、実施の形態１で説明した通りである（図１３参照）。
登録鍵生成（Ｓ１２０）において、登録鍵装置３００は、登録鍵ＥＫ（ｉ）を生成する。
登録鍵ＥＫ（ｉ）は、世代番号ｉとデータ鍵ＤＫ（ｉ）とタグ鍵ＴＫ（ｉ）との組である。
データ鍵ＤＫ（ｉ）は、マスター鍵データＭＳＫ（ｉ）に含まれるマスター鍵ＭＫ（ｉ）を用いて生成される。
タグ鍵ＴＫ（ｉ）は、マスター鍵データＭＳＫ（ｉ）に含まれるマスター鍵ＭＫ（ｉ）を用いて生成される。
【０２１９】
ユーザ鍵生成（Ｓ１３０）は、実施の形態１で説明した通りである（図１４参照）。
ユーザ鍵生成（Ｓ１３０）において、ユーザ鍵装置４００は、ユーザ鍵ＵＫ（ｉ）を生成する。
ユーザ鍵ＵＫ（ｉ）は、世代番号ｉとデータ属性鍵データＤＡＫ（ｉ）とタグ属性鍵データＴＡＫ（ｉ）との組である。
データ属性鍵ＤＡＫ（ｉ）は、属性情報Ａと登録鍵ＥＫ（ｉ）に含まれるデータ鍵ＤＫ（ｉ）とを用いて生成される。
タグ属性鍵データＴＡＫ（ｉ）は、属性情報Ａと登録鍵ＥＫ（ｉ）に含まれるタグ鍵ＴＫ（ｉ）とを用いて生成される。
【０２２０】
図２３に基づいて、データ登録（Ｓ２４０）を説明する。
データ登録（Ｓ２４０）において、登録装置５００は、暗号文Ｃと暗号化タグ群ＣＴ＿ＰＭＷとの組をデータ管理装置７００に登録する。
【０２２１】
ステップＳ２４１において、受付部５１０は、登録鍵ＥＫ（ｉ）を受け付ける。
ステップＳ２４１は、実施の形態１におけるステップＳ１４１と同じである（図１６参照）。
【０２２２】
ステップＳ２４２において、受付部５１０は、平文Ｍと属性情報Ｂとを受け付ける。
ステップＳ２４２は、実施の形態１におけるステップＳ１４２と同じである（図１６参照）。
【０２２３】
ステップＳ２４３において、乱数生成部５２５は、３つのデータ乱数組（Ｒ、ｓ、Ｓ）と１つのタグ乱数組Ｒ’と１つのタグ乱数Ｓ’とを生成する。
３つのデータ乱数組（Ｒ、ｓ、Ｓ）は、実施の形態１で説明した通りである（図１６のステップＳ１４３を参照）。
【０２２４】
タグ乱数組Ｒ’は、属性の層数Ｌと同じ個数の乱数である。つまり、タグ乱数組Ｒ’はＬ個の乱数である。それぞれの乱数は一様ランダムに生成される。
タグ乱数組Ｒ’は次のように表すことができる。
Ｒ’＝（Ｒ’＿１，・・・，Ｒ’＿Ｌ）
【０２２５】
タグ乱数Ｓ’は、一様ランダムに生成される１個の乱数である。
【０２２６】
ステップＳ２４４において、暗号化データ生成部５２２は、データ鍵ＤＫ（ｉ）と平文Ｍと属性情報Ｂと３つのデータ乱数組（Ｒ、ｓ、Ｓ）とを用いて、暗号化データＣを生成する。
ステップＳ２４４は、実施の形態１におけるステップＳ１４４と同じである（図１６参照）。
【０２２７】
ステップＳ２４５において、キーワード取得部５２３は、登録キーワード群Ｗを取得する。
ステップＳ２４５は、実施の形態１におけるステップＳ１４５と同じである（図１６参照）。
登録キーワード群Ｗは、Ｎ個の登録キーワードＷ＿ｎである。Ｎは１以上の整数である。ｎは１以上Ｎ以下の整数である。
【０２２８】
ステップＳ２４６において、部分一致キーワード生成部５２６は、登録キーワードＷ＿ｎごとに部分一致キーワード群ＰＭ（Ｗ＿ｎ）を生成することによって、登録キーワード群Ｗに対する部分一致キーワード群ＰＭＷを生成する。
【０２２９】
部分一致キーワード群ＰＭＷは次のように表すことができる。
ＰＭＷ＝（ＰＭ（Ｗ＿１），・・・，ＰＭ（Ｗ＿Ｎ））
【０２３０】
部分一致キーワード群ＰＭ（Ｗ＿ｎ）は、Ｋ個の部分一致キーワードＰＭ（Ｗ＿ｎ［ｋ］）である。Ｋは１以上の整数である。ｋは１以上のＫ以下の整数である。
【０２３１】
部分一致キーワード群ＰＭ（Ｗ＿ｎ）は次のように表すことができる。
ＰＭ（Ｗ＿ｎ）＝（ＰＭ（Ｗ＿ｎ）［１］，・・・，ＰＭ（Ｗ＿ｎ）［Ｋ］）
【０２３２】
部分一致キーワードＰＭ（Ｗ＿ｎ［ｋ］）は、部分一致キーワードと開始位置番号との組である。開始位置番号は、登録キーワードにおいて部分一致キーワードが何文字目から始まるかを示す。
【０２３３】
部分一致キーワードＰＭ（Ｗ＿ｎ）［ｋ］は次のように表すことができる。
ＰＭ（Ｗ＿ｎ）［ｋ］＝（部分一致キーワード，開始位置番号）
ＰＭ（Ｗ＿ｎ）［ｋ］［０］＝部分一致キーワード
ＰＭ（Ｗ＿ｎ）［ｋ］［１］＝開始位置番号
【０２３４】
部分一致キーワード生成部５２６は、登録キーワードＷ＿ｎに対する部分一致キーワード群ＰＭ（Ｗ＿ｎ）を以下のように生成する。
まず、部分一致キーワード生成部５２６は、登録キーワードＷ＿ｎを１文字ごとに分割する。分割後のそれぞれの文字（部分キーワード）が部分一致キーワードの先頭文字となる。例えば、登録キーワードＷ＿ｎ「東京都」は「東」「京」「都」に分割される。「東」「京」「都」のそれぞれが部分一致キーワードの先頭文字となる。
次に、部分一致キーワード生成部５２６は、登録キーワードＷ＿ｎにおいて分割後のそれぞれの文字から始まる全ての文字列を列挙する。列挙される文字列のそれぞれが部分一致キーワードとなる。例えば、登録キーワードＷ＿ｎ「東京都」において１文字目の「東」から始まる「東」「東京」「東京都」が列挙される。「東」は１文字目から１文字目までの文字列である。「東京」は１文字目から２文字目までの文字列である。「東京都」は１文字目から３文字目までの文字列である。さらに、登録キーワードＷ＿ｎ「東京都」において２文字目の「京」から始まる「京」「京都」が列挙される。「京」は２文字目から２文字目までの文字列である。「京都」は２文字目から３文字目までの文字列である。さらに、登録キーワードＷ＿ｎ「東京都」において３文字目の「都」から始まる「都」が列挙される。「都」は３文字目から３文字目までの文字列である。「東」「東京」「東京都」「京」「京都」「都」のそれぞれが部分一致キーワードとなる。
そして、部分一致キーワード生成部５２６は、列挙された文字列ごとに部分一致キーワードＰＷ（Ｗ＿ｎ［ｋ］）を生成する。
例えば、登録キーワードＷ＿ｎ「東京都」に対する６つの部分一致キーワードＰＷ（Ｗ＿ｎ［ｋ］）が生成される。
ＰＷ（Ｗ＿ｎ）［１］＝（東，１）
ＰＷ（Ｗ＿ｎ）［２］＝（東京，１）
ＰＷ（Ｗ＿ｎ）［３］＝（東京都，１）
ＰＷ（Ｗ＿ｎ）［４］＝（京，２）
ＰＷ（Ｗ＿ｎ）［５］＝（京都，２）
ＰＷ（Ｗ＿ｎ）［６］＝（都，３）
【０２３５】
一般に、登録キーワードＷ＿ｎを分割して得られる部分キーワードの数が「Ｘ」である場合、部分一致キーワード群ＰＷ（Ｗ＿ｎ）の長さ「Ｋ」、すなわち、部分一致キーワードＰＷ（Ｗ＿ｎ［ｋ］）の数「Ｋ」は、次のように表すことができる。
Ｋ＝Ｘ（Ｘ＋１）÷２
【０２３６】
但し、部分一致キーワード生成部５２６は、登録キーワードＷ＿ｎをフレーズ毎に分割してもよい。
例えば、登録キーワードＷ＿ｎ「東京都」は「東京」「都」に分割される。この場合、登録キーワードＷ＿ｎ「東京都」において１フレーズ目の「東京」から始まる「東京」「東京都」が列挙される。「東京」は１フレーズ目から１フレーズ目までの文字列である。「東京都」は１フレーズ目から２フレーズ目までの文字列である。さらに、登録キーワードＷ＿ｎ「東京都」において２フレーズ目の「都」から始まる「都」が列挙される。「都」は、２フレーズ目から２フレーズ目までの文字列である。そして、３つの部分一致キーワードＰＷ（Ｗ＿ｎ［ｋ］）が生成される。
ＰＷ（Ｗ＿ｎ）［１］＝（東京，１）
ＰＷ（Ｗ＿ｎ）［２］＝（東京都，１）
ＰＷ（Ｗ＿ｎ）［３］＝（都，３）
【０２３７】
また、部分一致キーワード生成部５２６は、登録キーワードＷ＿ｎを１文字と１フレーズとは別の単位で分割してもよい。
【０２３８】
部分一致キーワード生成部５２６は、登録キーワードＷ＿ｎによって分割単位を変えてもよい。
また、部分一致キーワード生成部５２６は、登録キーワードＷ＿ｎによっては分割しなくてもよい。登録キーワードＷ＿ｎが分割されない場合、登録キーワードＷ＿ｎは、完全一致検索の対象にはなるが、部分一致検索の対象にはならない。
【０２３９】
ステップＳ２４７において、暗号化タグ生成部５２７は、タグ鍵ＴＫ（ｉ）と属性情報Ｂとタグ乱数組Ｒ’とタグ乱数Ｓ’と部分一致キーワード群ＰＭＷとを用いて、暗号化タグ群ＣＴ＿ＰＭＷを生成する。
暗号化タグ群ＣＴ＿ＰＭＷは、複数の登録キーワードＷ＿ｎに対応する複数の暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝である。ｎは、１以上のＮ以下の整数であり、登録キーワードＷ＿ｎの番号を示す。
【０２４０】
暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝は、乱数要素ＣＴ＿｛０，ＰＭ（Ｗ＿ｎ）｝を有する。
【０２４１】
暗号化タグ生成部５２７は、乱数要素ＣＴ＿｛０，ＰＭ（Ｗ＿ｎ）｝にタグ乱数Ｓ’を設定する。
【０２４２】
乱数要素ＣＴ＿｛０，ＰＭ（Ｗ＿ｎ）｝は次のように表すことができる。
ＣＴ＿｛０，ＰＭ（Ｗ＿ｎ）｝＝Ｓ’
【０２４３】
暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝は、さらに、属性要素ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）｝を有する。ｊは、１以上Ｌ以下の整数であり、属性値Ｂ＿ｊの番号を示す。
【０２４４】
属性要素ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）｝は次のように表すことができる。
ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）｝＝（ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）［Ｋ］｝）
【０２４５】
暗号化タグ生成部５２７は、属性要素ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）［ｋ］｝を以下のように算出する。ｋは１以上Ｋ以下の整数である。
まず、暗号化タグ生成部５２７は、属性値Ｂ＿ｊと番号ｊとを連結する。得られるビット列が表す値を連結値（Ｂ＿ｊ）と呼ぶ。
次に、暗号化タグ生成部５２７は、タグ鍵ＴＫ（ｉ）の値と連結値（Ｂ＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値を関数値（Ｂ＿ｊ＾）と呼ぶ。
次に、暗号化タグ生成部５２７は、関数値（Ｂ＿ｊ＾）と部分一致キーワードＰＭ（Ｗ＿ｎ）［ｋ］［０］とを入力として関数Ｆ＿５を実行する。得られる値を関数値（Ｂ＿ｊＰＭ（Ｗ＿ｎ）［ｋ］＾＾）と呼ぶ。
次に、暗号化タグ生成部５２７は、関数値（Ｂ＿ｊＰＭ（Ｗ＿ｎ）［ｋ］＾＾）と開始位置番号ＰＭ（Ｗ＿ｎ）［ｋ］［０］と乱数要素ＣＴ＿｛０，ＰＭ（Ｗ＿ｎ）｝とを入力として関数Ｆ＿６を実行する。得られる値を関数値（Ｂ＿ｊＰＭ（Ｗ＿ｎ）［ｋ］＾＾＾）と呼ぶ。
そして、暗号化タグ生成部５２７は、関数値（Ｂ＿ｊＰＭ（Ｗ＿ｎ）［ｋ］＾＾＾）とタグ乱数Ｒ’＿ｊとの排他的論理和を算出する。得られる値が属性要素ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）［ｋ］｝である。
【０２４６】
関数Ｆ＿５と関数Ｆ＿６とのそれぞれは、関数Ｆ＿１と関数Ｆ＿２と関数Ｆ＿３と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
【０２４７】
暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝は、さらに、ワイルドカード要素ＣＴ＿｛ｊ，１，ＰＭ（Ｗ＿ｎ）｝を有する。ｊは、１以上Ｌ以下の整数であり、属性値Ｂ＿ｊの番号を示す。
【０２４８】
属性要素ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）｝は次のように表すことができる。
ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）｝＝（ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）［Ｋ］｝）
【０２４９】
ワイルドカード要素ＣＴ＿｛ｊ，１，ＰＭ（Ｗ＿ｎ）｝は次のように表すことができる。
ＣＴ＿｛ｊ，１，ＰＭ（Ｗ＿ｎ）｝＝（ＣＴ＿｛ｊ，１，ＰＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛ｊ，１，ＰＭ（Ｗ＿ｎ）［Ｋ］｝）
【０２５０】
暗号化タグ生成部５２７は、ワイルドカード要素ＣＴ＿｛ｊ，１，ＰＭ（Ｗ＿ｎ）［ｋ］｝を以下のように算出する。ｋは１以上Ｋ以下の整数である。
まず、暗号化タグ生成部５２７は、ワールドカード「＊」と番号ｊとを連結する。得られるビット列が表す値を連結値（＊＿ｊ）と呼ぶ。
次に、暗号化タグ生成部５２７は、タグ鍵ＴＫ（ｉ）の値と連結値（＊＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値を関数値（＊＿ｊ＾）という。
次に、暗号化タグ生成部５２７は、関数値（＊＿ｊ＾）と部分一致キーワードＰＭ（Ｗ＿ｎ）［ｋ］［０］とを入力として関数Ｆ＿５を実行する。得られる値を関数値（＊＿ｊＰＭ（Ｗ＿ｎ）［ｋ］＾＾）と呼ぶ。
次に、暗号化タグ生成部５２７は、関数値（＊＿ｊＰＭ（Ｗ＿ｎ）［ｋ］＾＾）と開始位置番号ＰＭ（Ｗ＿ｎ）［ｋ］［１］と乱数要素ＣＴ＿｛０，ＰＭ（Ｗ＿ｎ）｝とを入力として関数Ｆ＿６を実行する。得られる値を関数値（＊＿ｊＰＭ（Ｗ＿ｎ）［ｋ］＾＾＾）と呼ぶ。
そして、暗号化タグ生成部５２７は、関数値（＊＿ｊＰＭ（Ｗ＿ｎ）［ｋ］＾＾＾）と乱数Ｒ’＿ｊとの排他的論理和を算出する。得られる値がワイルド要素ＣＴ＿｛ｊ，１，ＰＭ（Ｗ＿ｎ）［ｋ］｝である。
【０２５１】
暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝は、さらに、判定要素ＣＴ＿｛Ｌ＋１，ＰＭ（Ｗ＿ｎ）｝を有する。
【０２５２】
暗号化タグ生成部５２７は、判定要素ＣＴ＿｛Ｌ＋１，ＰＭ（Ｗ＿ｎ）｝を以下のように算出する。
まず、暗号化タグ生成部５２７は、タグ乱数組Ｒ’のＬ個の乱数の排他的論理和を算出する。得られる値を演算値（Ｒ’＋）と呼ぶ。
そして、暗号化タグ生成部５２７は、演算値（Ｒ’＋）を入力として関数Ｆ＿７を実行する。得られる値が判定要素ＣＴ＿｛Ｌ＋１，ＰＭ（Ｗ＿ｎ）｝である。
【０２５３】
関数Ｆ＿７の一例は、ＳＨＡ−１のようなハッシュ関数である。
【０２５４】
暗号化タグ群ＣＴ＿ＰＭＷは以下のように表すことができる。
ＣＴ＿ＰＭＷ＝｛ＣＴ＿｛ＰＭ（Ｗ＿１）｝，・・・，ＣＴ＿｛ＰＭ（Ｗ＿Ｎ）｝｝
【０２５５】
ＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝＝（ＣＴ＿｛０，ＰＭ（Ｗ＿ｎ）｝，ＣＴ＿｛１，０，ＰＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛Ｌ，０，ＰＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛１，０，ＰＭ（Ｗ＿ｎ）［Ｋ］｝，・・・，ＣＴ＿｛Ｌ，０，ＰＭ（Ｗ＿ｎ）［Ｋ］｝，ＣＴ＿｛１，１，ＰＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛Ｌ，１，ＰＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛１，１，ＰＭ（Ｗ＿ｎ）［Ｋ］｝，・・・，ＣＴ＿｛Ｌ，１，ＰＭ（Ｗ＿ｎ）［Ｋ］｝，ＣＴ＿｛Ｌ＋１，ＰＭ（Ｗ＿ｎ）｝）
ｎは１以上Ｎ以下の整数である。
【０２５６】
ＣＴ＿｛０，ＰＭ（Ｗ＿ｎ）｝  ＝  Ｓ’
ＣＴ＿｛ｊ，０，ＰＭ（Ｗ＿ｎ）［ｋ］｝  ＝  Ｆ＿６（Ｆ＿５（Ｆ＿２（ＴＫ（ｉ），Ｂ＿ｊ｜｜ｊ），ＰＭ（Ｗ＿ｎ）［ｋ］［０］），ＰＭ（Ｗ＿ｎ）［ｋ］［１］，Ｓ’）＋Ｒ’＿ｊ
ＣＴ＿｛ｊ，１，ＰＭ（Ｗ＿ｎ）［ｋ］｝  ＝  Ｆ＿６（Ｆ＿５（Ｆ＿２（ＴＫ（ｉ），＊｜｜ｊ），ＰＭ（Ｗ＿ｎ）［ｋ］［０］），ＰＭ（Ｗ＿ｎ［ｋ］［１］），Ｓ’）＋Ｒ’＿ｊ
ｊは１以上Ｌ以下の整数、ｋは１以上Ｋ以下の整数である。
【０２５７】
Ｒ’＋  ＝  Ｒ’＿１＋・・・＋Ｒ’＿Ｌ
ＣＴ＿｛Ｌ＋１，ＰＭ（Ｗ＿ｎ）｝  ＝  Ｆ＿７（Ｒ’＋）
【０２５８】
登録キーワードＷ＿ｎを特定しない場合、「ＰＭ（Ｗ＿ｎ）」は省略される。その場合、暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝は暗号化タグＣＴと記される。
暗号化タグＣＴは以下のように表すことができる。ｎは１以上Ｎ以下の整数である。
ＣＴ  ＝  （ＣＴ＿０，ＣＴ＿｛１，０，［１］｝，・・・，ＣＴ＿｛Ｌ，０，［１］｝，・・・，ＣＴ＿｛１，０，  ［Ｋ］｝，・・・，ＣＴ＿｛Ｌ，０，  ［Ｋ］｝，ＣＴ＿｛１，１，  ［１］｝，・・・，ＣＴ＿｛Ｌ，１，  ［１］｝，・・・，ＣＴ＿｛１，１，  ［Ｋ］｝，・・・，ＣＴ＿｛Ｌ，１，  ［Ｋ］｝，ＣＴ＿｛Ｌ＋１｝）
【０２５９】
ステップＳ２４８において、登録部５３０は、暗号化データＣと暗号化タグ群ＣＴ＿ＰＭＷとの組をデータ管理装置７００に登録する。
具体的には、登録部５３０は、暗号化データＣと暗号化タグ群ＣＴ＿ＰＭＷとの組をデータ管理装置７００に送信する。データ管理装置７００において、受付部７１０は、暗号化データＣと暗号化タグ群ＣＴ＿ＰＭＷとの組を受信し、受信した組を記憶部７９１に記憶する。つまり、受付部７１０は、暗号化データＣと暗号化タグ群ＣＴ＿ＰＭＷとを互いに対応付けて記憶部７９１に記憶する。そして、暗号化データＣと暗号化タグ群ＣＴ＿ＰＭＷとの組が記憶部７９１に保管される。
【０２６０】
データ登録（Ｓ２４０）において、実施の形態１と同様に登録キーワード群ＷがＮ個の登録キーワードを含んでいる場合、登録装置５００は以下のように動作する。
ステップＳ２４３において、乱数生成部５２５は、Ｎ個のタグ乱数組Ｒ’とＮ個のタグ乱数Ｓ’とを生成する。
ステップＳ２４７において、暗号化タグ生成部５２７は、登録キーワードＷ＿ｎごとに異なるタグ乱数組Ｒ’とタグ乱数Ｓ’とを用いて、登録キーワードＷ＿ｎに対応する暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝を生成する。
【０２６１】
検索操作（Ｓ１５０）は、実施の形態１で説明した通りである（図１８参照）。
検索操作（Ｓ１５０）において、検索操作装置６００は、ユーザ鍵ＵＫ（ｉ）と検索キーワードＷとを受け付け、検索結果｛Ｍ｝を出力する。
【０２６２】
図２４に基づいて、データ検索（Ｓ２６０）を説明する。
データ検索（Ｓ２６０）において、データ管理装置７００は、検索クエリＱを受信し、暗号結果｛Ｃ｝を送信する。
【０２６３】
ステップＳ２６１において、受付部７１０は、検索クエリＱを検索操作装置６００から受信する。
ステップＳ２６１は、実施の形態１におけるステップＳ１６１と同じである（図１９参照）。
【０２６４】
ステップＳ２６２において、照合部７２３は、検索クエリＱを各暗号化タグＣＴと照合することによって、検索クエリＱに合致する暗号化タグＣＴを選択する。
【０２６５】
具体的には、照合部７２３は、以下のように検索クエリＱを各暗号化タグＣＴと照合する。暗号化タグＣＴについて登録キーワードの記号｛ＰＭ（Ｗ＿ｎ）｝は省略する。
まず、照合部７２３は、暗号化タグＣＴの要素数に基づいて部分一致キーワードの数Ｋを算出し、部分一致キーワードの数Ｋに基づいて登録時のキーワードの文字数Ｘを算出する。登録時のキーワードが「東京都」である場合、暗号化タグＣＴの要素数は「１４」である。暗号化タグＣＴの要素数が「１４」である場合、部分一致キーワードの数Ｋは「６」である。照合部７２３は、Ｋ＝Ｘ（Ｘ＋１）÷２を計算することにより、登録時のキーワード「東京都」の文字数Ｘは「３」と算出する。
次に、照合部７２３は、演算値Ｖ＿１［ｘ，ｋ］を算出する。ｘは１以上Ｘ以下の整数である。ｋは１以上Ｋ以下の整数である。演算値Ｖ＿１［ｘ，ｋ］については後述する。
次に、照合部７２３は、演算値Ｖ＿１［ｘ，ｋ］を入力として関数Ｆ＿７を実行する。得られる値を照合値Ｖ＿２［ｘ，ｋ］と呼ぶ。
そして、照合部７２３は、照合値Ｖ＿２［ｘ，ｋ］を暗号化タグＣＴの判定要素ＣＴ＿｛Ｌ＋１｝と比較する。
照合値Ｖ＿２［ｘ，ｋ］が判定要素ＣＴ＿｛Ｌ＋１｝と一致している場合、暗号化タグＣＴは検索クエリＱに合致している。
【０２６６】
照合部７２３は、演算値Ｖ＿１［ｘ，ｋ］を以下のように算出する。
まず、照合部７２３は、検索クエリＱからフラグ要素Ｑｂ＿ｊを抽出する。ｊは１以上Ｌ以下の整数である。
次に、照合部７２３は、抽出したフラグ要素Ｑｂ＿ｊに基づいて、暗号化タグＣＴから属性要素の組ＣＴｊ０またはワイルドカード要素の組ＣＴｊ１を選択する。属性要素の組ＣＴｊ０とワイルドカード要素の組ＣＴＪ１とのそれぞれは次のように表される。
ＣＴｊ０＝（ＣＴ＿｛ｊ，０，［１］｝，・・・，ＣＴ＿｛ｊ，０，［Ｋ］｝）
ＣＴｊ１＝（ＣＴ＿｛ｊ，１，［１］｝、ＣＴ＿｛ｊ，１，［Ｋ］｝）
照合部７２３は、属性要素の組ＣＴｊ０またはワイルドカード要素の組ＣＴｊ１を次のように選択する。
フラグ要素Ｑｂ＿ｊが「０」である場合、照合部７２３は属性要素の組ＣＲｊ０を選択する。フラグ要素Ｑｂ＿ｊが「１」である場合、照合部７２３はワイルドカード要素の組ＣＲｊ１を選択する。
選択される組を選択要素ＣＴｊと呼ぶ。
次に、照合部７２３は、検索クエリＱから属性キーワード要素Ｑ＿ｊを抽出する。
次に、照合部７２３は、属性キーワード要素Ｑ＿ｊと値ｘと乱数要素ＣＴ＿０とを入力として関数Ｆ＿６を実行する。得られる値を関数値（ＣＴｊ［ｘ］＾）と呼ぶ。ｘは１以上Ｘ以下の整数である。
次に、照合部７２３は、各関数値（ＣＴｊ［ｘ］＾）と選択要素（ＣＴｊ［ｋ］）との排他的論理和を算出する。得られる値を抽出乱数（Ｒ’ｊ［ｘ，ｋ］＾）と呼ぶ。
そして、照合部７２３は、全ての階層の抽出乱数（Ｒ’ｊ［ｘ，ｋ］＾）の排他的論理和を算出する。得られる値が演算値Ｖ＿１［ｘ，ｋ］である。
【０２６７】
演算値Ｖ＿１［ｘ，ｋ］と照合値Ｖ＿２［ｘ，ｋ］とのそれぞれは、以下のように表すことができる。
Ｖ＿１［ｘ，ｋ］  ＝  （Ｆ＿６（Ｑ＿１，ｘ，ＣＴ＿｛０｝）＋ＣＴ＿｛１，Ｑｂ＿１，［ｋ］｝）＋・・・＋（Ｆ＿６（Ｑ＿Ｌ，ｘ，ＣＴ＿｛０｝）＋ＣＴ＿｛Ｌ，Ｑｂ＿Ｌ，［ｋ］｝）
Ｖ＿２［ｘ，ｋ］  ＝  Ｆ＿７（Ｖ＿１［ｘ，ｋ］）
【０２６８】
Ｂ≧Ａを満たし、かつ、検索キーワードｗが部分一致キーワードとして登録キーワードＷ＿ｎに含まれる場合、次のような演算値Ｖ＿１［ｘ，ｋ］を満たす整数の組（ｘ，ｋ）が存在する。
Ｖ＿１［ｘ，ｋ］  ＝  Ｒ＿１＋・・・＋Ｒ’＿Ｌ
【０２６９】
その結果、整数の組（ｘ，ｋ）に対して次の式が成り立つ。
Ｖ＿２［ｘ，ｋ］  ＝  Ｆ＿７（Ｖ＿１［ｘ，ｋ］）＝  Ｆ＿７（Ｒ’＿１＋・・・＋Ｒ’＿Ｌ）＝  ＣＴ＿｛Ｌ＋１｝
【０２７０】
登録時のキーワードが「東京都」であり、検索時のキーワードが「東京」である場合、整数ｘは「１」であり、整数ｋは「２」である。
登録時のキーワードが「東京都」であり、検索時のキーワードが「都」の場合、整数ｘは「３」であり、整数ｋは「６」である。
【０２７１】
Ｂ≧Ａを満たし、検索キーワードｗが部分一致キーワードとして登録キーワードＷ＿ｎに含まれない場合、乱数Ｒ’＿ｊが正しく復元されず、演算値Ｖ＿１［ｘ，ｋ］を得ることができない。
Ｂ≧Ａを満たさず、検索キーワードｗが部分一致キーワードとして登録キーワードＷ＿ｎに含まれる場合、乱数Ｒ’＿ｊが正しく復元されず、演算値Ｖ＿１［ｘ，ｋ］を得ることができない。
そのため、どのような整数の組（ｘ，ｋ）に対しても、照合値Ｖ＿２［ｘ，ｋ］（＝Ｆ＿７（Ｖ＿１［ｘ，ｋ］））が判定要素Ｃ＿｛Ｌ＋１｝（＝Ｆ＿７（Ｒ’＿１＋・・・＋Ｒ’＿Ｌ））と一致する確率は非常に低い。
【０２７２】
ステップＳ２６２で選択された暗号化タグＣＴ、つまり、検索クエリＱに合致した暗号化タグＣＴを該当暗号化タグＣＴと呼ぶ。
【０２７３】
ステップＳ２６３において、抽出部７２２は、該当暗号化タグＣＴに対応する暗号化データＣを抽出する。抽出される暗号化データＣを該当暗号化データＣと呼ぶ
ステップＳ２６３は、実施の形態１におけるステップＳ１６３と同じである。（図１９参照）。
【０２７４】
ステップＳ２６４において、出力部７３０は、暗号結果｛Ｃ｝を検索操作装置６００へ送信する。暗号結果｛Ｃ｝は該当暗号化データＣの集合である。
ステップＳ２６４は、実施の形態１におけるステップＳ１６４と同じである（図１９参照）。
【０２７５】
データ削除（Ｓ１７０）は、実施の形態１で説明した通りである（図２０参照）。
データ削除（Ｓ１７０）において、データ管理装置７００は、削除ファイル名に対応する暗号化データＣと暗号化タグＣＴ＿Ｗとの組を削除する。
【０２７６】
＊＊＊実施の形態２の効果＊＊＊
実施の形態２により、検索キーワードが登録キーワードに含まれる場合に、つまり、検索キーワードが登録キーワードと部分一致した場合に、検索がヒットする。
【０２７７】
実施の形態３．
範囲検索が可能なマルチユーザ型の共通鍵方式について、主に実施の形態１および実施の形態２と異なる点を図２５から図３０に基づいて説明する。
【０２７８】
範囲検索は、検索範囲に含まれる登録数値を見つける検索である。
例えば、検索範囲が［７８，１１１］である場合、７８≦Ｘ≦１１１を満たす登録数値Ｘを見つけるための範囲検索が行われる。
【０２７９】
＊＊＊構成の説明＊＊＊
図２５に基づいて、生成部５２０の構成を説明する。
生成部５２０は、乱数生成部５２５と暗号化データ生成部５２２とキーワード取得部５２３と汎化数値生成部５２８と暗号化タグ生成部５２７とを備える。
【０２８０】
図２６に基づいて、生成部６２０の構成を説明する。
生成部６２０は、数値列挙部６２３と検索クエリ生成部６２４とを備える。
【０２８１】
図２７に基づいて、検索部７２０の構成を説明する。
検索部７２０は、照合部７２４と抽出部７２２とを備える。
＊＊＊動作の説明＊＊＊
マスター鍵生成（Ｓ１１０）は、実施の形態１で説明した通りである（図１２参照）。
マスター鍵生成（Ｓ１１０）において、マスター鍵装置２００は、マスター鍵データＭＳＫ（ｉ）を生成する。
マスター鍵データＭＳＫ（ｉ）は、マスター鍵ＭＫ（ｉ）と世代番号ｉとの組である。
【０２８２】
登録鍵生成（Ｓ１２０）は、実施の形態１で説明した通りである（図１３参照）。
登録鍵生成（Ｓ１２０）において、登録鍵装置３００は、登録鍵ＥＫ（ｉ）を生成する。
登録鍵ＥＫ（ｉ）は、世代番号ｉとデータ鍵ＤＫ（ｉ）とタグ鍵ＴＫ（ｉ）との組である。
データ鍵ＤＫ（ｉ）は、マスター鍵データＭＳＫ（ｉ）に含まれるマスター鍵ＭＫ（ｉ）を用いて生成される。
タグ鍵ＴＫ（ｉ）は、マスター鍵データＭＳＫ（ｉ）に含まれるマスター鍵ＭＫ（ｉ）を用いて生成される。
【０２８３】
ユーザ鍵生成（Ｓ１３０）は、実施の形態１で説明した通りである（図１４参照）。
ユーザ鍵生成（Ｓ１３０）において、ユーザ鍵装置４００は、ユーザ鍵ＵＫ（ｉ）を生成する。
ユーザ鍵ＵＫ（ｉ）は、世代番号ｉとデータ属性鍵データＤＡＫ（ｉ）とタグ属性鍵データＴＡＫ（ｉ）との組である。
データ属性鍵ＤＡＫ（ｉ）は、属性情報Ａと登録鍵ＥＫ（ｉ）に含まれるデータ鍵ＤＫ（ｉ）とを用いて生成される。
タグ属性鍵データＴＡＫ（ｉ）は、属性情報Ａと登録鍵ＥＫ（ｉ）に含まれるタグ鍵ＴＫ（ｉ）とを用いて生成される。
【０２８４】
図２８に基づいて、データ登録（Ｓ３４０）を説明する。
データ登録（Ｓ３４０）において、登録装置５００は、暗号文Ｃと暗号化タグ群ＣＴ＿ＧＮＵＭとの組をデータ管理装置７００に登録する。
【０２８５】
ステップＳ３４１において、受付部５１０は、登録鍵ＥＫ（ｉ）を受け付ける。
ステップＳ３４１は、実施の形態１におけるステップＳ１４１と同じである（図１６参照）。
【０２８６】
ステップＳ３４２において、受付部５１０は、平文Ｍと属性情報Ｂとを受け付ける。
ステップＳ３４２は、実施の形態１におけるステップＳ１４２と同じである（図１６参照）。
【０２８７】
ステップＳ３４３において、乱数生成部５２５は、３つのデータ乱数組（Ｒ、ｓ、Ｓ）と１つのタグ乱数組Ｒ’と１つのタグ乱数Ｓ’とを生成する。
ステップＳ３４３は、実施の形態２におけるステップＳ２４３と同じである（図２３参照）。
【０２８８】
タグ乱数組Ｒ’は、属性の層数Ｌと同じ個数の乱数である。つまり、タグ乱数組Ｒ’はＬ個の乱数である。それぞれの乱数は一様ランダムに生成される。
タグ乱数組Ｒ’は次のように表すことができる。
Ｒ’＝（Ｒ’＿１，・・・，Ｒ’＿Ｌ）
【０２８９】
タグ乱数Ｓ’は、一様ランダムに生成される１個の乱数である。
【０２９０】
ステップＳ３４４において、暗号化データ生成部５２２は、データ鍵ＤＫ（ｉ）と平文Ｍと属性情報Ｂと３つのデータ乱数組（Ｒ、ｓ、Ｓ）とを用いて、暗号化データＣを生成する。
ステップＳ３４４は、実施の形態１におけるステップＳ１４４と同じである（図１６参照）。
【０２９１】
ステップＳ３４５において、キーワード取得部５２３は、登録数値群ＮＵＭを取得する。
登録数値群ＮＵＭは、１つ以上の登録数値である。登録数値群ＮＵＭは登録キーワード群Ｗに相当する。登録数値は登録キーワードに相当する。
【０２９２】
登録数値群ＮＵＭは次のように表すことができる。Ｎは１以上の整数である。
ＮＵＭ＝（Ｗ＿１，・・・，Ｗ＿Ｎ）
【０２９３】
ステップＳ３４６において、汎化数値生成部５２８は、登録数値群ＮＵＭに対応する汎化数値群ＧＮＵＭを生成する。
汎化数値群ＧＮＵＭは次のように表すことができる。
ＧＮＵＭ＝（ＧＮＵＭ（Ｗ＿１），・・・，ＧＮＵＭ（Ｗ＿Ｎ））
【０２９４】
汎化数値生成部５２８は、登録数値Ｗ＿ｎを文字列とみなして登録数値Ｗ＿ｎと前方一致するキーワードを全て列挙することによって、汎化数値群ＧＮＵＭを生成する。ｎは１以上Ｎ以下の整数である。
【０２９５】
登録数値Ｗ＿ｎが「８７」である場合、汎化数値生成部５２８は「８７」「８？」を列挙する。「？」は一文字のワイルドカードを表しており、ここでは０から９の数を全て表すことを意味する。
登録数値Ｗ＿ｎが「９９９」である場合、汎化数値生成部５２８は「９９９」「９９？」「９？？」を列挙する。
【０２９６】
汎化数値ＧＮＵＭ（Ｗ＿ｎ）は、以下のように表すことができる。Ｋは１以上の整数である。
ＧＮＵＭ（Ｗ＿ｎ）＝（ＧＮＵＭ（Ｗ＿ｎ）［１］，・・・，ＧＮＵＭ（Ｗ＿ｎ）［Ｋ］）
例えば、登録数値Ｗ＿ｎが「８７」である場合、汎化数値ＧＮＵＭ（Ｗ＿ｎ）の要素数Ｋは「２」である。
ＧＮＵＭ（Ｗ＿ｎ）［１］  ＝  ８７
ＧＮＵＭ（Ｗ＿ｎ）［２］  ＝  ８？
【０２９７】
汎化数値ＧＮＵＭ（Ｗ＿ｎ）の長さ、すなわち、汎化数値ＧＮＵＭ（Ｗ＿ｎ）の要素数Ｋは、登録数値Ｗ＿ｎの桁数と一致する。
登録数値Ｗ＿ｎの桁数が「２」である場合、汎化数値ＧＮＵＭ（Ｗ＿ｎ）の要素数Ｋは「２」である。
登録数値Ｗ＿ｎの桁数が「３」である場合、汎化数値ＧＮＵＭ（Ｗ＿ｎ）の要素数Ｋは「３」である。
【０２９８】
ステップＳ３４７において、暗号化タグ生成部５２７は、タグ鍵ＴＫ（ｉ）と属性情報Ｂとタグ乱数組Ｒ’とタグ乱数Ｓ’と汎化数値群ＧＮＵＭとを用いて、暗号化タグ群ＣＴ＿ＧＮＵＭを生成する。
【０２９９】
暗号化タグ群ＣＴ＿ＧＮＵＭは、複数の暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝である。ｎは、１以上Ｎ以下の整数であり、登録数値Ｗ＿ｎの番号を示す。
【０３００】
暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝は、乱数要素ＣＴ＿｛０，ＧＮＵＭ（Ｗ＿ｎ）｝を有する。
【０３０１】
暗号化タグ生成部５２７は、乱数要素ＣＴ＿｛０，ＧＮＵＭ（Ｗ＿ｎ）｝にタグ乱数Ｓ’を設定する。
【０３０２】
暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝は、さらに、属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ（Ｗ＿ｎ）｝を有する。ｊは１以上Ｌ以下の整数である。
【０３０３】
属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ（Ｗ＿ｎ）｝は次のように表すことができる。
ＣＴ＿｛ｊ，０，ＧＮＵＭ（Ｗ＿ｎ）｝＝（ＣＴ＿｛ｊ，０，ＧＮＵＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛ｊ，０，ＧＮＵＭ（Ｗ＿ｎ）［Ｋ］｝
【０３０４】
暗号化タグ生成部５２７は、属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ（Ｗ＿ｎ）｝を以下のように算出する。ｋは１以上Ｋ以下の整数である。
まず、暗号化タグ生成部５２７は、属性値Ｂ＿ｊと番号ｊとを連結する。得られるビット列が表す値を連結値（Ｂ＿ｊ）と呼ぶ。
次に、暗号化タグ生成部５２７は、タグ鍵ＴＫ（ｉ）の値と連結値（Ｂ＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値を関数値（Ｂ＿ｊ＾）という。
次に、暗号化タグ生成部５２７は、関数値（Ｂ＿ｊ＾）と汎化数値ＧＮＵＭ（Ｗ＿ｎ）［ｋ］とを入力として関数Ｆ＿５を実行する。得られる値を関数値（Ｂ＿ｊＧＮＵＭ（Ｗ＿ｎ）［ｋ］＾＾）と呼ぶ。
次に、暗号化タグ生成部５２７は、関数値（Ｂ＿ｊＧＮＵＭ（Ｗ＿ｎ）［ｋ］＾＾）と乱数要素ＣＴ＿｛０，ＧＮＵＭ（Ｗ＿ｎ）｝とを入力として関数Ｆ＿６を実行する。得られる値を関数値（Ｂ＿ｊＧＮＵＭ（Ｗ＿ｎ）［ｋ］＾＾＾）と呼ぶ。
そして、暗号化タグ生成部５２７は、関数値（Ｂ＿ｊＧＮＵＭ（Ｗ＿ｎ）［ｋ］＾＾＾）とタグ乱数Ｒ’＿ｊとの排他的論理和を算出する。得られる値が属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ（Ｗ＿ｎ）［ｋ］｝である。
【０３０５】
関数Ｆ＿５と関数Ｆ＿６とのそれぞれは、関数Ｆ＿１と関数Ｆ＿２と関数Ｆ＿３と同様に、擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数である。
【０３０６】
暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝は、ワイルドカード要素ＣＴ＿｛ｊ，１，ＧＮＵＭ（Ｗ＿ｎ）｝を有する。
ワイルドカード要素ＣＴ＿｛ｊ，１，ＧＮＵＭ（Ｗ＿ｎ）｝は次のように表すことができる。
ＣＴ＿｛ｊ，１，ＧＮＵＭ（Ｗ＿ｎ）｝＝（ＣＴ＿｛ｊ，１，ＧＮＵＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛ｊ，１，ＧＮＵＭ（Ｗ＿ｎ）［Ｋ］｝
【０３０７】
暗号化タグ生成部５２７は、ワイルドカード要素ＣＴ＿｛ｊ，１，ＧＮＵＭ（Ｗ＿ｎ）｝を以下のように算出する。ｋは１以上Ｋ以下の整数である。
まず、暗号化タグ生成部５２７は、ワールドカード「＊」と番号ｊとを連結する。得られるビット列が表す値を連結値（＊＿ｊ）と呼ぶ。
次に、暗号化タグ生成部５２７は、タグ鍵ＴＫ（ｉ）の値と連結値（＊＿ｊ）とを入力として関数Ｆ＿２を実行する。得られる値を関数値（＊＿ｊ＾）という。
次に、暗号化タグ生成部５２７は、関数値（＊＿ｊ＾）と汎化数値ＧＮＵＭ（Ｗ＿ｎ）［ｋ］とを入力として関数Ｆ＿５を実行する。得られる値を関数値（＊＿ｊＧＮＵＭ（Ｗ＿ｎ）［ｋ］＾＾）と呼ぶ。
次に、暗号化タグ生成部５２７は、関数値（＊＿ｊＧＮＵＭ（Ｗ＿ｎ）［ｋ］＾＾）と乱数要素ＣＴ＿｛０，ＧＮＵＭ（Ｗ＿ｎ）｝とを入力として関数Ｆ＿６を実行する。得られる値を関数値（＊＿ｊＧＮＵＭ（Ｗ＿ｎ）［ｋ］＾＾＾）と呼ぶ。
そして、暗号化タグ生成部５２７は、関数値（＊＿ｊＧＮＵＭ（Ｗ＿ｎ）［ｋ］＾＾＾）とタグ乱数Ｒ’＿ｊとの排他的論理和を算出する。得られる値がワイルドカード要素ＣＴ＿｛ｊ，１，ＧＮＵＭ（Ｗ＿ｎ）［ｋ］｝である。
【０３０８】
暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝は、さらに、判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ（Ｗ＿ｎ）｝を有する。
【０３０９】
暗号化タグ生成部５２７は、判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ（Ｗ＿ｎ）｝を以下のように算出する。
まず、暗号化タグ生成部５２７は、タグ乱数組Ｒ’のＬ個の乱数の排他的論理和を算出する。得られる値を演算値（Ｒ’＋）と呼ぶ。
そして、暗号化タグ生成部５２７は、演算値（Ｒ’＋）を入力として関数Ｆ＿７を実行する。得られる値が判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ（Ｗ＿ｎ）｝である。
【０３１０】
関数Ｆ＿７の一例は、ＳＨＡ−１のようなハッシュ関数である。
【０３１１】
暗号化タグ群ＣＴ＿ＧＮＵＭは以下のように表すことができる。
ＣＴ＿ＧＮＵＭ  ＝  ｛ＣＴ＿｛ＧＮＵＭ（Ｗ＿１）｝，・・・，ＣＴ＿｛ＧＮＵＭ（Ｗ＿Ｎ）｝｝
【０３１２】
ＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝  ＝  （ＣＴ＿｛０，ＧＮＵＭ（Ｗ＿ｎ）｝，ＣＴ＿｛１，０，ＧＮＵＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛Ｌ，０，ＧＮＵＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛１，０，ＧＮＵＭ（Ｗ＿ｎ）［Ｋ］｝，・・・，ＣＴ＿｛Ｌ，０，ＧＮＵＭ（Ｗ＿ｎ）［Ｋ］｝，ＣＴ＿｛１，１，ＧＮＵＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛Ｌ，１，ＧＮＵＭ（Ｗ＿ｎ）［１］｝，・・・，ＣＴ＿｛１，１，ＧＮＵＭ（Ｗ＿ｎ）［Ｋ］｝，・・・，ＣＴ＿｛Ｌ，１，ＧＮＵＭ（Ｗ＿ｎ）［Ｋ］｝，ＣＴ＿｛Ｌ＋１，ＧＮＵＭ（Ｗ＿ｎ）｝）
ｎは１以上Ｎ以下の整数である。
【０３１３】
ＣＴ＿｛０，ＧＮＵＭ（Ｗ＿ｎ）｝  ＝  Ｓ’
ＣＴ＿｛ｊ，０，ＧＮＵＭ（Ｗ＿ｎ）［ｋ］｝  ＝  Ｆ＿６（Ｆ＿５（Ｆ＿２（ＴＫ（ｉ），Ｂ＿ｊ｜｜ｊ），ＧＮＵＭ（Ｗ＿ｎ）［ｋ］），Ｓ’）＋Ｒ’＿ｊ
ＣＴ＿｛ｊ，１，ＧＮＵＭ（Ｗ＿ｎ）［ｋ］｝  ＝  Ｆ＿６（Ｆ＿５（Ｆ＿２（ＴＫ（ｉ），＊｜｜ｊ），ＰＭ（Ｗ＿ｎ）［ｋ］），Ｓ’）＋Ｒ’＿ｊ
ｊは１以上Ｌ以下の整数、ｋは１以上Ｋ以下の整数である。
【０３１４】
Ｒ’＋  ＝  Ｒ’＿１＋・・・＋Ｒ’＿Ｌ
ＣＴ＿｛Ｌ＋１，ＧＮＵＭ（Ｗ＿ｎ）｝  ＝  Ｆ＿７（Ｒ’＋）
【０３１５】
登録キーワードＷ＿ｎを特定しない場合、「ＧＮＵＭ（Ｗ＿ｎ）」は省略される。その場合、暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝は暗号化タグＣＴと記される。
【０３１６】
ステップＳ３４８において、登録部５３０は、暗号化データＣと暗号化タグ群ＣＴ＿ＧＮＵＭとの組をデータ管理装置７００に登録する。
具体的には、登録部５３０は、暗号化データＣと暗号化タグ群ＣＴ＿ＧＮＵＭとの組をデータ管理装置７００に送信する。データ管理装置７００において、受付部７１０は、暗号化データＣと暗号化タグ群ＣＴ＿ＧＮＵＭとの組を受信し、受信した組を記憶部７９１に記憶する。つまり、受付部７１０は、暗号化データＣと暗号化タグ群ＣＴ＿ＧＮＵＭとを互いに対応付けて記憶部７９１に記憶する。そして、暗号化データＣと暗号化タグ群ＣＴ＿ＧＮＵＭとの組が記憶部７９１に保管される。
【０３１７】
図２９に基づいて、検索操作（Ｓ３５０）を説明する。
検索操作（Ｓ３５０）において、検索操作装置６００は、ユーザ鍵ＵＫ（ｉ）と検索範囲［ＦＲＯＭ，ＴＯ］を受け付け、検索結果｛Ｍ｝を出力する。
【０３１８】
ステップＳ３５１において、受付部６１０は、ユーザ鍵ＵＫ（ｉ）を受け付ける。
ステップＳ３５１は、実施の形態１におけるステップＳ１５１と同じである（図１８参照）。
【０３１９】
ステップＳ３５２において、受付部６１０は、検索範囲［ＦＲＯＭ，ＴＯ］を受け付ける。
「ＦＲＯＭ」は、検索範囲の下限値を意味する。
「ＴＯ」は、検索範囲の上限値を意味する。
［ＦＲＯＭ，ＴＯ］は、「ＦＲＯＭ」以上「ＴＯ」以下の数値を意味する。
【０３２０】
具体的には、受付部６１０は、検索操作装置６００に入力された検索範囲［ＦＲＯＭ，ＴＯ］を入出力インタフェース６０４を介して受け付ける。但し、受付部６１０は、検索範囲［ＦＲＯＭ，ＴＯ］をアプリケーションプログラムから受け付けてもよい。
【０３２１】
ステップＳ３５３において、数値列挙部６２３は、検索範囲［ＦＲＯＭ，ＴＯ］に対する数集合ＲＡＮＧＥを生成する。
数集合ＲＡＮＧＥは、「ＦＲＯＭ」から「ＴＯ」までの数値を全て含む集合である。
【０３２２】
まず、数値列挙部６２３は、［ＦＲＯＭ，ＴＯ］に含まれる数値を全て列挙する。
そして、数値列挙部６２３は、列挙された数値を汎化する。
【０３２３】
具体的には、列挙される数値は整数である。
検索範囲が［７８，１１１］である場合、数値列挙部６２３は、７８から１１１までの３４個の整数を列挙する。そして、数値列挙部６２３は、８０から８９までの整数を「８？」に置き換え、９０から９９までの整数を「９？」に置き換え、１００から１０９までの整数を「１０？」に置き換える。その結果、「７８」「７９」「８？」「９？」「１０？」「１１０」「１１１」の７個の汎化数値が得られる。
【０３２４】
数集合ＲＡＮＧＥは次のように表すことができる。Ｙは１以上の整数である。
ＲＡＮＧＥ＝（ＲＡＮＧＥ［１］，・・・，ＲＡＮＧＥ［Ｙ］）
【０３２５】
検索範囲が［７８，１１１］である場合、汎化数値ＲＡＮＧＥ［ｙ］は以下の通りである。ｙは１以上Ｙ以下の整数である。
ＲＡＮＧＥ  ［１］  ＝  ７８
ＲＡＮＧＥ  ［２］  ＝  ７９
ＲＡＮＧＥ  ［３］  ＝  ８？
ＲＡＮＧＥ  ［４］  ＝  ９？
ＲＡＮＧＥ  ［５］  ＝  １０？
ＲＡＮＧＥ  ［６］  ＝  １１０
ＲＡＮＧＥ  ［７］  ＝  １１１
【０３２６】
但し、列挙される数値に小数が含まれてもよい。その場合、小数第何位までの数値が列挙するかを事前に定めるとよい。
【０３２７】
ステップＳ３５４において、検索クエリ生成部６２４は、タグ属性鍵データＴＡＫ（ｉ）と数集合ＲＡＮＧＥとを用いて、検索クエリＱを生成する。
【０３２８】
検索クエリＱは、フラグ要素Ｑｂ＿ｊを有する。
【０３２９】
検索クエリ生成部６２４は、フラグ要素Ｑｂ＿ｊを以下のように算出する。
まず、検索クエリ生成部６２４は、タグ属性鍵データＴＡＫ（ｉ）からフラグ値Ｔｂ＿ｊを抽出する。
そして、検索クエリ生成部６２４は、フラグ値Ｔｂ＿ｊをフラグ要素Ｑｂ＿ｊに設定する。つまり、フラグ要素Ｑｂ＿ｊはフラグ値Ｔｂ＿ｊと同じである。
【０３３０】
検索クエリＱは、さらに、属性キーワード要素Ｑ＿ｊ［ｙ］を有する。
属性キーワード要素Ｑ＿ｊ［ｙ］は次のように表すことができる。ｙは１以上Ｙ以下の整数である。
Ｑ＿ｊ＝（Ｑ＿ｊ［１］，・・・，Ｑ＿ｊ［Ｙ］）
【０３３１】
検索クエリ生成部６２４は、属性キーワード要素Ｑ＿ｊ［ｙ］を以下のように算出する。
まず、検索クエリ生成部６２４は、タグ属性鍵データＴＡＫ（ｉ）からタグ属性鍵ＴＡＫ＿ｊを抽出する。
そして、検索クエリ生成部６２４は、タグ属性鍵ＴＡＫ＿ｊと汎化数値ＲＡＮＧＥ［ｙ］とを入力として関数Ｆ＿５を実行する。得られる値が属性キーワード要素Ｑ＿ｊ［ｙ］である。
【０３３２】
検索クエリＱは以下のように表すことができる。ｙは１以上Ｙ以下の整数である。
Ｑ  ＝  （（Ｑｂ＿１，Ｑ＿１［１］，・・・，Ｑ＿１［Ｙ］），・・・，（Ｑｂ＿Ｌ，Ｑ＿Ｌ［１］，・・・，Ｑ＿Ｌ［Ｙ］））
Ｑｂ＿ｊ  ＝  Ｔｂ＿ｊ
Ｑ＿ｊ［ｙ］  ＝  Ｆ＿５（ＴＡＫ＿ｊ，ＲＡＮＧＥ［ｙ］）
【０３３３】
ステップＳ３５５において、要求部６３０は、検索クエリＱをデータ管理装置７００へ送信する。
ステップＳ３５５は、実施の形態１におけるステップＳ１５４と同じである（図１８参照）。
【０３３４】
ステップＳ３５６において、要求部６３０は、検索結果｛Ｃ｝をデータ管理装置７００から受信する。検索結果｛Ｃ｝は、検索にヒットした暗号化データＣの集合である。
ステップＳ３５６は、実施の形態１におけるステップＳ１５５と同じである。
【０３３５】
ステップＳ３５７において、復号部６４０は、データ属性鍵データＤＡＫ（ｉ）を用いて、各暗号化データＣから平文Ｍを復号する。平文Ｍの集合を検索結果｛Ｍ｝と呼ぶ。
ステップＳ３５７は、実施の形態１におけるステップＳ１５６と同じである。
【０３３６】
ステップＳ３５８において、出力部６５０は、検索結果｛Ｍ｝を出力する。
ステップＳ３５８は、実施の形態１におけるステップＳ１５７と同じである。
【０３３７】
図３０に基づいて、データ検索（Ｓ３６０）を説明する。
データ検索（Ｓ３６０）において、データ管理装置７００は、検索クエリＱを受信し、暗号結果｛Ｃ｝を送信する。
【０３３８】
ステップＳ３６１において、受付部７１０は、検索クエリＱを検索操作装置６００から受信する。
ステップＳ３６１は、実施の形態１におけるステップＳ１６１と同じである（図１９参照）。
【０３３９】
ステップＳ３６２において、照合部７２４は、検索クエリＱを各暗号化タグＣＴと照合することによって、検索クエリＱに合致する暗号化タグＣＴを選択する。
暗号化タグＣＴについて登録キーワードの記号｛ＧＮＵＭ（Ｗ＿ｎ）｝は省略する。
【０３４０】
具体的には、照合部７２４は、以下のように検索クエリＱを各暗号化タグＣＴと照合する。ｙは１以上Ｙ以下の整数である。ｋは１以上Ｋ以下の整数である。
まず、照合部７２４は、演算値Ｖ＿１［ｙ，ｋ］を算出する。演算値Ｖ＿１［ｙ，ｋ］については後述する。
次に、照合部７２４は、演算値Ｖ＿１［ｙ，ｋ］を入力として関数Ｆ＿７を実行する。得られる値を照合値Ｖ＿２［ｙ，ｋ］と呼ぶ。
そして、照合部７２４は、照合値Ｖ＿２［ｙ，ｋ］を判定要素ＣＴ＿｛Ｌ＋１｝と比較する。
照合値Ｖ＿２［ｙ，ｋ］が判定要素ＣＴ＿｛Ｌ＋１｝と一致している場合、暗号化タグＣＴは検索クエリＱに合致している。つまり、暗号化タグＣＴに対応する登録数値は検索範囲に含まれる。
【０３４１】
照合部７２４は、演算値Ｖ＿１［ｙ，ｋ］を以下のように算出する。
まず、照合部７２４は、検索クエリＱからフラグ要素Ｑｂ＿ｊを抽出する。ｊは１以上Ｌ以下の整数である。
次に、照合部７２４は、抽出したフラグ要素Ｑｂ＿ｊに基づいて、暗号化タグＣＴから属性要素の組ＣＴｊ０またはワイルドカード要素の組ＣＴｊ１を選択する。
属性要素の組ＣＴｊ０とワイルドカード要素の組ＣＴｊ１とのそれぞれは次のように表される。
ＣＴｊ０＝（ＣＴ＿｛ｊ，０，［１］｝，・・・，ＣＴ＿｛ｊ，０，［Ｋ］｝）
ＣＴｊ１＝（ＣＴ＿｛ｊ，１，［１］｝、ＣＴ＿｛ｊ，１，［Ｋ］｝）
照合部７２４は、属性要素の組ＣＴｊ０またはワイルドカード要素の組ＣＴｊ１を次のように選択する。
フラグ要素Ｑｂ＿ｊが「０」である場合、照合部７２４は属性要素の組ＣＲｊ０を選択する。フラグ要素Ｑｂ＿ｊが「１」である場合、照合部７２４はワイルドカード要素の組ＣＲｊ１を選択する。
選択される組を選択要素ＣＴｊと呼ぶ。
次に、照合部７２４は、検索クエリＱから属性キーワード要素Ｑ＿ｊを抽出する。
次に、照合部７２４は、属性キーワード要素Ｑ＿ｊ［ｙ］と乱数要素ＣＴ＿０とを入力として関数Ｆ＿６を実行する。得られる値を関数値（ＣＴｊ［ｙ］＾）と呼ぶ。
次に、照合部７２４は、各関数値（ＣＴｊ［ｙ］＾）と選択要素（ＣＴｊ［ｋ］）との排他的論理和を算出する。得られる値を抽出乱数（Ｒ’ｊ［ｙ，ｋ］＾）と呼ぶ。
そして、照合部７２４は、全ての階層の抽出乱数（Ｒ’ｊ［ｙ，ｋ］＾）の排他的論理和を算出する。得られる値が演算値Ｖ＿１［ｙ，ｋ］である。
【０３４２】
演算値Ｖ＿１［ｙ，ｋ］と照合値Ｖ＿２［ｙ，ｋ］とのそれぞれは、以下のように表すことができる。
Ｖ＿１［ｙ，ｋ］  ＝  （Ｆ＿６（Ｑ＿１［ｙ］，ＣＴ＿｛０｝）＋ＣＴ＿｛１，Ｑｂ＿１，［ｋ］｝）＋・・・＋（Ｆ＿６（Ｑ＿Ｌ［ｙ］，ＣＴ＿｛０｝）＋ＣＴ＿｛Ｌ，Ｑｂ＿Ｌ，［ｋ］｝）
Ｖ＿２［ｙ，ｋ］  ＝  Ｆ＿７（Ｖ＿１［ｙ，ｋ］）
【０３４３】
Ｂ≧Ａを満たし、かつ、登録数値Ｗ＿ｎが検索範囲［ＦＲＯＭ，ＴＯ］に含まれる場合、次のような演算値Ｖ＿１［ｙ，ｋ］を満たすある整数の組（ｙ，ｋ）が存在する。
Ｖ＿１［ｙ，ｋ］  ＝  Ｒ’＿１＋・・・＋Ｒ’＿Ｌ
【０３４４】
その結果、その整数の組（ｙ，ｋ）に対して次の式が成り立つ。
Ｖ＿２［ｙ，ｋ］  ＝  Ｆ＿７（Ｖ＿１［ｙ，ｋ］）＝  Ｆ＿７（Ｒ’＿１＋・・・＋Ｒ’＿Ｌ）＝  ＣＴ＿｛Ｌ＋１｝
【０３４５】
登録時の数値が「８７」であり、検索範囲が［７８，１１１］である場合、整数ｙは「３」であり、整数ｋは「２」である。
【０３４６】
Ｂ≧Ａを満たし、登録数値Ｗ＿ｎが検索範囲［ＦＲＯＭ，ＴＯ］に含まれない場合、乱数Ｒ’＿ｊが正しく復元できず、演算値Ｖ＿１［ｙ，ｋ］を得ることができない。
Ｂ≧Ａを満たさず、登録数値Ｗ＿ｎが検索範囲［ＦＲＯＭ，ＴＯ］に含まれる場合、乱数Ｒ’＿ｊが正しく復元できず、演算値Ｖ＿１［ｙ，ｋ］を得ることができない。
そのため、どのような整数の組（ｙ，ｋ）に対しても、照合値Ｖ＿２［ｙ，ｋ］（＝Ｆ＿７（Ｖ＿１［ｙ，ｋ］））が判定要素Ｃ＿｛Ｌ＋１｝（＝Ｆ＿７（Ｒ’＿１＋・・・＋Ｒ’＿Ｌ））とが一致する確率は非常に低い。
【０３４７】
ステップＳ３６２で選択された暗号化タグＣＴ、つまり、検索クエリＱに合致した暗号化タグＣＴを該当暗号化タグＣＴと呼ぶ。
【０３４８】
ステップＳ３６３において、抽出部７２２は、該当暗号化タグＣＴに対応する暗号化データＣを抽出する。抽出される暗号化データＣを該当暗号化データＣと呼ぶ
ステップＳ３６３は、実施の形態１におけるステップＳ１６３と同じである。（図１９参照）。
【０３４９】
ステップＳ３６４において、出力部７３０は、暗号結果｛Ｃ｝を検索操作装置６００へ送信する。暗号結果｛Ｃ｝は該当暗号化データＣの集合である。
ステップＳ３６４は、実施の形態１におけるステップＳ１６４と同じである（図１９参照）。
【０３５０】
データ削除（Ｓ１７０）は、実施の形態１で説明した通りである（図２０参照）。
データ削除（Ｓ１７０）において、データ管理装置７００は、削除ファイル名に対応する暗号化データＣと暗号化タグＣＴ＿Ｗとの組を削除する。
【０３５１】
＊＊＊実施の形態３の効果＊＊＊
実施の形態３により、登録数値が検索範囲に含まれる場合に検索がヒットする。
汎化した数値が使われることにより、検索クエリのサイズが削減される。
【０３５２】
＊＊＊実施の形態のまとめ＊＊＊
実施の形態１により、完全一致検索対応のマルチユーザ秘匿検索が可能となる。
実施の形態２により、部分一致検索対応のマルチユーザ秘匿検索が可能となる。
実施の形態３により、範囲検索対応のマルチユーザ秘匿検索が可能となる。
【０３５３】
＊＊＊実施の形態の補足＊＊＊
図３１に基づいて、マスター鍵装置２００のハードウェア構成を説明する。
マスター鍵装置２００は処理回路２０９を備える。
処理回路２０９は、受付部２１０と生成部２２０と出力部２３０と記憶部２９１とを実現するハードウェアである。
処理回路２０９は、専用のハードウェアであってもよいし、メモリ２０２に格納されるプログラムを実行するプロセッサ２０１であってもよい。
【０３５４】
処理回路２０９が専用のハードウェアである場合、処理回路２０９は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。
ＡＳＩＣはＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略称であり、ＦＰＧＡはＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略称である。
マスター鍵装置２００は、処理回路２０９を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路２０９の役割を分担する。
【０３５５】
マスター鍵装置２００において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【０３５６】
このように、処理回路２０９はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【０３５７】
図３２に基づいて、登録鍵装置３００のハードウェア構成を説明する。
登録鍵装置３００は処理回路３０９を備える。
処理回路３０９は、受付部３１０と生成部３２０と出力部３３０と記憶部３９１とを実現するハードウェアである。
処理回路３０９は、専用のハードウェアであってもよいし、メモリ３０２に格納されるプログラムを実行するプロセッサ３０１であってもよい。
【０３５８】
処理回路３０９が専用のハードウェアである場合、処理回路３０９は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。
登録鍵装置３００は、処理回路３０９を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路３０９の役割を分担する。
【０３５９】
登録鍵装置３００において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【０３６０】
このように、処理回路３０９はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【０３６１】
図３３に基づいて、ユーザ鍵装置４００のハードウェア構成を説明する。
ユーザ鍵装置４００は処理回路４０９を備える。
処理回路４０９は、受付部４１０と生成部４２０と出力部４３０と記憶部４９１とを実現するハードウェアである。
処理回路４０９は、専用のハードウェアであってもよいし、メモリ４０２に格納されるプログラムを実行するプロセッサ４０１であってもよい。
【０３６２】
処理回路４０９が専用のハードウェアである場合、処理回路４０９は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。
ユーザ鍵装置４００は、処理回路４０９を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路４０９の役割を分担する。
【０３６３】
ユーザ鍵装置４００において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【０３６４】
このように、処理回路４０９はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【０３６５】
図３４に基づいて、登録装置５００のハードウェア構成を説明する。
登録装置５００は処理回路５０９を備える。
処理回路５０９は、受付部５１０と生成部５２０と登録部５３０と記憶部５９１とを実現するハードウェアである。
処理回路５０９は、専用のハードウェアであってもよいし、メモリ５０２に格納されるプログラムを実行するプロセッサ５０１であってもよい。
【０３６６】
処理回路５０９が専用のハードウェアである場合、処理回路５０９は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。
登録装置５００は、処理回路５０９を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路５０９の役割を分担する。
【０３６７】
登録装置５００において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【０３６８】
このように、処理回路５０９はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【０３６９】
図３５に基づいて、検索操作装置６００のハードウェア構成を説明する。
検索操作装置６００は処理回路６０９を備える。
処理回路６０９は、受付部６１０と生成部６２０と要求部６３０と復号部６４０と出力部６５０と記憶部６９１とを実現するハードウェアである。
処理回路６０９は、専用のハードウェアであってもよいし、メモリ６０２に格納されるプログラムを実行するプロセッサ６０１であってもよい。
【０３７０】
処理回路６０９が専用のハードウェアである場合、処理回路６０９は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。
検索操作装置６００は、処理回路６０９を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路６０９の役割を分担する。
【０３７１】
検索操作装置６００において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【０３７２】
このように、処理回路６０９はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【０３７３】
図３６に基づいて、データ管理装置７００のハードウェア構成を説明する。
データ管理装置７００は処理回路７０９を備える。
処理回路７０９は、受付部７１０と検索部７２０と出力部７３０と記憶部７９１とを実現するハードウェアである。
処理回路７０９は、専用のハードウェアであってもよいし、メモリ７０２に格納されるプログラムを実行するプロセッサ７０１であってもよい。
【０３７４】
処理回路７０９が専用のハードウェアである場合、処理回路７０９は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。
データ管理装置７００は、処理回路７０９を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路７０９の役割を分担する。
【０３７５】
データ管理装置７００において、一部の機能が専用のハードウェアで実現されて、残りの機能がソフトウェアまたはファームウェアで実現されてもよい。
【０３７６】
このように、処理回路７０９はハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現することができる。
【０３７７】
実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
【符号の説明】
【０３７８】
１００  秘匿検索システム、１０１  ネットワーク、２００  マスター鍵装置、２０１  プロセッサ、２０２  メモリ、２０３  補助記憶装置、２０４  入出力インタフェース、２０５  通信装置、２０９  処理回路、２１０  受付部、２２０  生成部、２３０  出力部、２９１  記憶部、３００  登録鍵装置、３０１  プロセッサ、３０２  メモリ、３０３  補助記憶装置、３０４  入出力インタフェース、３０５  通信装置、３０９  処理回路、３１０  受付部、３２０  生成部、３３０  出力部、３９１  記憶部、４００  ユーザ鍵装置、４０１  プロセッサ、４０２  メモリ、４０３  補助記憶装置、４０４  入出力インタフェース、４０５  通信装置、４０９  処理回路、４１０  受付部、４２０  生成部、４２２  属性鍵生成部、４３０  出力部、４９１  記憶部、５００  登録装置、５０１  プロセッサ、５０２  メモリ、５０３  補助記憶装置、５０４  入出力インタフェース、５０５  通信装置、５０９  処理回路、５１０  受付部、５２０  生成部、５２１  乱数生成部、５２２  暗号化データ生成部、５２３  キーワード取得部、５２４  暗号化タグ生成部、５２５  乱数生成部、５２６  部分一致キーワード生成部、５２７  暗号化タグ生成部、５２８  汎化数値生成部、５３０  登録部、５９１  記憶部、６００  検索操作装置、６０１  プロセッサ、６０２  メモリ、６０３  補助記憶装置、６０４  入出力インタフェース、６０５  通信装置、６０９  処理回路、６１０  受付部、６２０  生成部、６２２  検索クエリ生成部、６２３  数値列挙部、６２４  検索クエリ生成部、６３０  要求部、６４０  復号部、６５０  出力部、６９１  記憶部、７００  データ管理装置、７０１  プロセッサ、７０２  メモリ、７０３  補助記憶装置、７０４  入出力インタフェース、７０５  通信装置、７０９  処理回路、７１０  受付部、７２０  検索部、７２１  照合部、７２２  抽出部、７２３  照合部、７２４  照合部、７３０  出力部、７９１  記憶部、７９２  登録データベース。
【図１】
2019142651.tif 000003
【図２】
2019142651.tif 000004
【図３】
2019142651.tif 000005
【図４】
2019142651.tif 000006
【図５】
2019142651.tif 000007
【図６】
2019142651.tif 000008
【図７】
2019142651.tif 000009
【図８】
2019142651.tif 000010
【図９】
2019142651.tif 000011
【図１０】
2019142651.tif 000012
【図１１】
2019142651.tif 000013
【図１２】
2019142651.tif 000014
【図１３】
2019142651.tif 000015
【図１４】
2019142651.tif 000016
【図１５】
2019142651.tif 000017
【図１６】
2019142651.tif 000018
【図１７】
2019142651.tif 000019
【図１８】
2019142651.tif 000020
【図１９】
2019142651.tif 000021
【図２０】
2019142651.tif 000022
【図２１】
2019142651.tif 000023
【図２２】
2019142651.tif 000024
【図２３】
2019142651.tif 000025
【図２４】
2019142651.tif 000026
【図２５】
2019142651.tif 000027
【図２６】
2019142651.tif 000028
【図２７】
2019142651.tif 000029
【図２８】
2019142651.tif 000030
【図２９】
2019142651.tif 000031
【図３０】
2019142651.tif 000032
【図３１】
2019142651.tif 000033
【図３２】
2019142651.tif 000034
【図３３】
2019142651.tif 000035
【図３４】
2019142651.tif 000036
【図３５】
2019142651.tif 000037
【図３６】
2019142651.tif 000038
【手続補正書】
【提出日】令和2年3月10日(2020.3.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒと、前記層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるタグ乱数組Ｒ’と、を生成する乱数生成部と、
平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である暗号文Ｃ＿｛Ｌ＋１｝とを含んだ暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ暗号化タグＣＴ＿｛Ｗ＿ｎ｝を生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組をデータ管理装置に登録する登録部と
を備える登録装置。
【請求項２】
前記関数Ｆ＿２と前記関数Ｆ＿３とのそれぞれが擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数であり、前記関数Ｆ＿４が共通鍵暗号方式の関数である
請求項１に記載の登録装置。
【請求項３】
前記関数Ｆ＿５と前記関数Ｆ＿６とのそれぞれが擬似ランダム関数、ハッシュ関数または共通鍵暗号方式の関数であり、前記関数Ｆ＿７がハッシュ関数である
請求項１または請求項２に記載の登録装置。
【請求項４】
前記登録装置は、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝を生成する部分一致検索用の暗号化タグ生成部と、
を備え、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する
請求項１または請求項２に記載の登録装置。
【請求項５】
前記登録装置は、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成部と、
を備え、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する
請求項１または請求項２に記載の登録装置。
【請求項６】
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱをデータ管理装置へ送信し、前記データ管理装置から暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部と
を備える検索操作装置であって、
前記データ管理装置は、
前記暗号化データＣと暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組が登録装置によって登録される記憶部と、
前記検索操作装置から前記検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝に含まれる判定要素ＣＴ＿｛Ｌ＋１｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝を生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組を前記データ管理装置に登録する登録部とを備える
ことを特徴とする検索操作装置。
【請求項７】
前記記憶部は、前記暗号化データＣと暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組が登録装置によって登録され、
前記照合部は、前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝に含まれる判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と比較し、
前記出力部は、前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信し、
前記登録装置は、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成部と、
を備え、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する
ことを特徴とする請求項６に記載の検索操作装置。
【請求項８】
前記検索操作装置は、
検索範囲の数数値を汎化して汎化数値を生成する数値列挙部と、
前記汎化数値を入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成部と、
を備え、
前記記憶部は、前記暗号化データＣと暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組が登録装置によって登録され、
前記照合部は、前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝に含まれる判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と比較し、
前記出力部は、前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信し、
前記登録装置は、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成部と、
を備え、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する
ことを特徴とする請求項６に記載の検索操作装置。
【請求項９】
暗号化データＣと暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組が登録装置によって登録される記憶部と、
検索操作装置から検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝に含まれる判定要素ＣＴ＿｛Ｌ＋１｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力部と
を備えるデータ管理装置であって、
前記検索操作装置は、
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱを前記データ管理装置へ送信し、前記データ管理装置から前記暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝を生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組を前記データ管理装置に登録する登録部とを備える
ことを特徴とするデータ管理装置。
【請求項１０】
前記記憶部は、暗号化データＣと暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組が登録装置によって登録され、
前記照合部は、前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝に含まれる判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と比較し、
前記出力部は、前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信し、
前記登録装置は、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部
を備え、
前記暗号化タグ生成部は、前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝を生成し、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する
請求項９に記載のデータ管理装置。
【請求項１１】
前記記憶部は、暗号化データＣと暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組が登録装置によって登録され、
前記照合部は、前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝に含まれる判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と比較し、
前記出力部は、前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信し、
前記検索操作装置は、
検索範囲の数数値を汎化して汎化数値を生成する数値列挙部と、
前記汎化数値を入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
を備え、
前記登録装置は、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成部と、
を備え、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する
請求項９に記載のデータ管理装置。
【請求項１２】
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒと、前記層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるタグ乱数組Ｒ’と、を生成する乱数生成処理と、
平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である暗号文Ｃ＿｛Ｌ＋１｝とを含んだ暗号化データＣを生成する暗号化データ生成処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ暗号化タグＣＴ＿｛Ｗ＿ｎ｝を生成する暗号化タグ生成処理と、
前記暗号化データＣと前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組をデータ管理装置に登録する登録処理と
をコンピュータに実行させるための登録プログラム。
【請求項１３】
前記登録プログラムは、さらに、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成処理と、
前記暗号化データＣと前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する登録処理と
をコンピュータに実行させる
請求項１２に記載の登録プログラム。
【請求項１４】
前記登録プログラムは、さらに、
登録数値を汎化して汎化数値を生成する汎化数値生成処理と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成処理と、
前記暗号化データＣと前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する登録処理と
をコンピュータに実行させる
請求項１２に記載の登録プログラム。
【請求項１５】
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成処理と、
前記検索クエリＱをデータ管理装置へ送信し、前記データ管理装置から暗号化データＣを受信する要求処理と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号処理と
をコンピュータに実行させるための検索操作プログラムであって、
前記データ管理装置は、
前記暗号化データＣと暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組が登録装置によって登録される記憶部と、
前記検索クエリＱを受信する受付部と、
前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝に含まれる判定要素ＣＴ＿｛Ｌ＋１｝と比較する照合部と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１｝と一致する場合に前記暗号化データＣを送信する出力部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝を生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組を前記データ管理装置に登録する登録部とを備える
ことを特徴とする検索操作プログラム。
【請求項１６】
前記記憶部は、前記暗号化データＣと暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組が登録装置によって登録され、
前記照合部は、前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝に含まれる判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と比較し、
前記出力部は、前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と一致する場合に前記暗号化データＣを送信し、
前記登録装置は、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成部と、
を備え、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する
ことを特徴とする請求項１５に記載の検索操作プログラム。
【請求項１７】
前記検索操作プログラムは、さらに、
検索範囲の数数値を汎化して汎化数値を生成する数値列挙処理と、
前記汎化数値を入力として関数Ｆ＿５を実行することによって得られる値である属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ検索クエリＱを生成する検索クエリ生成処理と、
をコンピュータに実行させ、
前記記憶部は、前記暗号化データＣと暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組が登録装置によって登録され、
前記照合部は、前記検索クエリＱに含まれる前記属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝に含まれる判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と比較し、
前記出力部は、前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と一致する場合に前記暗号化データＣを送信し、
前記登録装置は、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成部と、
を備え、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組を前記データ管理装置に登録する
ことを特徴とする請求項１５に記載の検索操作プログラム。
【請求項１８】
暗号化データＣと暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組が登録装置によって登録された後、検索操作装置から検索クエリＱを受信する受付処理と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝に含まれる判定要素ＣＴ＿｛Ｌ＋１｝と比較する照合処理と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力処理と
をコンピュータに実行させるためのデータ管理プログラムであって、
前記検索操作装置は、
検索キーワードｗを入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
前記検索クエリＱを送信し、前記暗号化データＣを受信する要求部と、
前記暗号化データＣに含まれる暗号文Ｃ＿｛Ｌ＋１｝を入力として関数Ｆ＿４の復号関数を実行することによって、平文Ｍを復号する復号部とを備え、
前記登録装置は、
利用者の属性が成す階層の層数Ｌと同じ個数の乱数の組であって一様ランダムな乱数の組であるデータ乱数組Ｒとタグ乱数組Ｒ’とを生成する乱数生成部と、
前記平文Ｍと、前記平文Ｍの参照が許可される利用者の各層の属性値を示す属性情報Ｂとを受け付ける受付部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値を入力として関数Ｆ＿３を実行し、前記関数Ｆ＿３の関数値と前記データ乱数組Ｒのｊ番の乱数との排他的論理和である属性要素Ｃ＿｛ｊ，０，０｝を算出し、前記平文Ｍと前記データ乱数組Ｒの排他的論理和とを入力として前記関数Ｆ＿４を実行し、前記属性要素Ｃ＿｛ｊ，０，０｝と前記関数Ｆ＿４の関数値である前記暗号文Ｃ＿｛Ｌ＋１｝とを含んだ前記暗号化データＣを生成する暗号化データ生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と登録キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，０｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，０｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１｝とを含んだ前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝を生成する暗号化タグ生成部と、
前記暗号化データＣと前記暗号化タグＣＴ＿｛Ｗ＿ｎ｝との組を登録する登録部とを備える
ことを特徴とするデータ管理プログラム。
【請求項１９】
前記データ管理プログラムは、さらに、
暗号化データＣと暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組が登録装置によって登録された後、検索操作装置から検索クエリＱを受信する受付処理と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝に含まれる判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と比較する照合処理と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力処理と
をコンピュータに実行させ、
前記登録装置は、
登録キーワードの一部である部分一致キーワードを生成する部分一致キーワード生成部
を備え、
前記暗号化タグ生成部は、前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記部分一致キーワードとを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値と前記登録キーワードにおける前記部分一致キーワードの開始位置を示す開始位置番号とを入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＰＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＰＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＰＭ｝とを含んだ前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝を生成し、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＰＭ（Ｗ＿ｎ）｝との組を登録する
ことを特徴とする請求項１８に記載のデータ管理プログラム。
【請求項２０】
前記データ管理プログラムは、さらに、
暗号化データＣと暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組が登録装置によって登録された後、検索操作装置から検索クエリＱを受信する受付処理と、
前記検索クエリＱに含まれる属性キーワード要素Ｑ＿ｊを入力として関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値に基づく演算値Ｖ＿１を入力として関数Ｆ＿７を実行し、得られる値である照合値Ｖ＿２を前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝に含まれる判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と比較する照合処理と、
前記照合値Ｖ＿２が前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝と一致する場合に前記暗号化データＣを前記検索操作装置に送信する出力処理と
をコンピュータに実行させ、
前記検索操作装置は、
検索範囲の数数値を汎化して汎化数値を生成する数値列挙部と、
前記汎化数値を入力として関数Ｆ＿５を実行することによって得られる値である前記属性キーワード要素Ｑ＿ｊを算出し、前記属性キーワード要素Ｑ＿ｊを含んだ前記検索クエリＱを生成する検索クエリ生成部と、
を備え、
前記登録装置は、
登録数値を汎化して汎化数値を生成する汎化数値生成部と、
前記属性情報Ｂの各層ｊの属性値と各層ｊの番号との連結値を入力として前記関数Ｆ＿２を実行し、前記関数Ｆ＿２の関数値と前記汎化数値とを入力として前記関数Ｆ＿５を実行し、前記関数Ｆ＿５の関数値を入力として前記関数Ｆ＿６を実行し、前記関数Ｆ＿６の関数値と前記タグ乱数組Ｒ’のｊ番の乱数との排他的論理和である属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝を算出し、前記タグ乱数組Ｒ’の排他的論理和を入力として前記関数Ｆ＿７を実行し、前記属性要素ＣＴ＿｛ｊ，０，ＧＮＵＭ｝と前記関数Ｆ＿７の関数値である前記判定要素ＣＴ＿｛Ｌ＋１，ＧＮＵＭ｝とを含んだ前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝を生成する暗号化タグ生成部と、
を備え、
前記登録部は、前記暗号化データＣと前記暗号化タグＣＴ＿｛ＧＮＵＭ（Ｗ＿ｎ）｝との組を登録する
ことを特徴とする請求項１８に記載のデータ管理プログラム。
【国際調査報告】
2019142651.tif 000039
2019142651.tif 000040
2019142651.tif 000041
2019142651.tif 000042
2019142651.tif 000043
2019142651.tif 000044