(57)【特許請求の範囲】
【請求項１】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムにおいて、
公開パラメータ生成装置と、暗号化装置と、ユーザ秘密鍵生成装置と、クエリ発行装置と、検索装置とを有し、
上記公開パラメータ生成装置は、データを処理する処理装置と、乱数オメガ選択部と、乱数アルファ選択部と、乱数ベータ選択部と、乱数シータ選択部と、公開元オメガ算出部と、公開元エー算出部と、公開元ビー算出部と、秘密元ダブリュー算出部と、秘密元エー算出部と、秘密元ビー算出部と、秘密元ワイ算出部と、公開パラメータ出力部と、マスタ秘密鍵出力部とを有し、
上記乱数オメガ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、１個の整数ωをランダムに選択し、
上記乱数アルファ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数αｎ（ｎは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記乱数ベータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数βｎをランダムに選択し、
上記乱数シータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌ（ｌは０以上Ｄ以下の整数。）をランダムに選択し、
上記公開元エー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ１の生成元ｇ１と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（αｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを算出し、
上記公開元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを算出し、
上記秘密元ダブリュー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ２の生成元ｇ２と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記生成元ｇ２のω乗を計算することにより、上記乗法群Ｇ２の元である１個の元ｗ’を算出し、
上記公開元オメガ算出部は、上記処理装置を用いて、上記乗法群Ｇ１の元と上記乗法群Ｇ２の元との組を位数がｐである乗法群Ｇ３の元へ写像する双線形ペアリングｅにより上記乗法群Ｇ１の生成元ｇ１と上記乗法群Ｇ２の生成元ｇ２との組を写像した上記乗法群Ｇ３の元ｇ３と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記元ｇ３のω乗を計算することにより、上記乗法群Ｇ３の元である１個の元Ωを算出し、
上記秘密元エー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のαｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎを算出し、
上記秘密元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のβｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎを算出し、
上記秘密元ワイ算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ２の（αｎ×βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを算出し、
上記公開パラメータ出力部は、上記処理装置を用いて、上記秘匿検索システムにおける公開パラメータとして、上記公開元オメガ算出部が算出した１個の元Ωと、上記公開元エー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌと、上記公開元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌとを出力し、
上記マスタ秘密鍵出力部は、上記処理装置を用いて、上記秘匿検索システムにおけるマスタ秘密鍵として、上記秘密元ダブリュー算出部が算出した１個の元ｗ’と、上記秘密元エー算出部が算出した（Ｄ＋２）個の元ａ’ｎと、上記秘密元ビー算出部が算出した（Ｄ＋２）個の元ｂ’ｎと、上記秘密元ワイ算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを出力し、
上記暗号化装置は、データを記憶する記憶装置と、データを処理する処理装置と、公開元オメガ記憶部と、公開元エー記憶部と、公開元ビー記憶部と、埋込みキーワード入力部と、権限範囲入力部と、乱数アール選択部と、副乱数アール選択部と、乱数元選択部と、検証元算出部と、暗号元算出部と、暗号元エー算出部と、暗号元ビー算出部と、暗号部分元エー算出部と、暗号部分元ビー算出部と、暗号文出力部とを有し、
上記公開元オメガ記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した１個の元Ωを記憶し、
上記公開元エー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを記憶し、
上記公開元ビー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを記憶し、
上記埋込みキーワード入力部は、上記処理装置を用いて、暗号化するキーワードとして、０以上ｐ未満の１個の整数Ｗ’を入力し、
上記権限範囲入力部は、上記処理装置を用いて、キーワードを検索する権限を持つクエリ発行装置の範囲を指定するデータとして、１個の整数Ｌ’（Ｌ’は１以上Ｄ未満の任意の整数。）と、Ｌ”個の整数Ｉ’ｊ（Ｌ”は０以上Ｌ’以下の任意の整数。ｊは１以上Ｌ’以下の整数のなかから任意に選択したＬ”個の整数。Ｉ’ｊは０以上ｐ未満の整数。）とを入力し、
上記乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、１個の整数ｒをランダムに選択し、
上記副乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ｒｎをランダムに選択し、
上記乱数元選択部は、上記処理装置を用いて、上記乗法群Ｇ３の元のなかから、１個の元Ｒをランダムに選択し、
上記検証元算出部は、上記処理装置を用いて、上記公開元オメガ記憶部が記憶した１個の元Ωと、上記乱数アール選択部が選択した１個の整数ｒと、上記乱数元選択部が選択した１個の元Ｒとに基づいて、上記元Ωの（−ｒ）乗と、上記元Ｒとの積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｅを算出し、
上記暗号元算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数アール選択部が選択した整数ｒとに基づいて、上記生成元ｇ１のｒ乗を計算することにより、上記乗法群Ｇ１の元である１個の元ｃ０を算出し、
上記暗号元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）個の元ｂｎ，０と（Ｄ＋２）×Ｌ”個の元ｂｎ，ｊと（Ｄ＋２）個の元ｂｎ，Λ’（Λ’はＬ’超Ｄ以下の整数のうちから選択した１個の整数。）と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ｂｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，０とＬ”個の元ｂｎ，ｊのＩ’ｊ乗と元ｂｎ，Λ’のＷ’乗との総積ΠＢ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＢ，ｎのｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）を算出し、
上記暗号元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）個の元ａｎ，０と（Ｄ＋２）×Ｌ”個の元ａｎ，ｊと（Ｄ＋２）個の元ａｎ，Λ’と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ａｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，０とＬ”個の元ａｎ，ｊのＩ’ｊ乗と元ａｎ，Λ’のＷ’乗との総積ΠＡ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＡ，ｎの（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ｂ）を算出し、
上記暗号部分元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｂｎ，ｊ’（ｊ’は１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数。）と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ｂｎ，ｊ’のｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）を算出し、
上記暗号部分元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ａｎ，ｊ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ａｎ，ｊ’の（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）を算出し、
上記暗号文出力部は、上記処理装置を用いて、上記整数Ｗ’をキーワードとして埋め込んだ暗号文として、上記乱数元選択部が選択した１個の元Ｒと、上記検証元算出部が算出した１個の元Ｅと、上記暗号元算出部が算出した１個の元ｃ０と、上記暗号元エー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ａ）と、上記暗号元ビー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ｂ）と、上記暗号部分元エー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記暗号部分元ビー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）とを出力し、
上記ユーザ秘密鍵生成装置は、データを記憶する記憶装置と、データを処理する処理装置と、秘密元ダブリュー記憶部と、秘密元エー記憶部と、秘密元ビー記憶部と、秘密元ワイ記憶部と、ユーザ識別子入力部と、乱数ロー選択部と、副乱数ロー選択部と、総積元ワイ算出部と、検索元算出部と、検索元エー算出部と、検索元ビー算出部と、攪乱元算出部と、攪乱元エー算出部と、攪乱元ビー算出部と、委任元算出部と、副委任元算出部と、ユーザ秘密鍵出力部とを有し、
上記秘密元ダブリュー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した１個の元ｗ’を記憶し、
上記秘密元エー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）個の元ａ’ｎを記憶し、
上記秘密元ビー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）個の元ｂ’ｎを記憶し、
上記秘密元ワイ記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを記憶し、
上記ユーザ識別子入力部は、上記処理装置を用いて、上記複数のクエリ発行装置のうちユーザ秘密鍵の生成を要求するクエリ発行装置について、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを入力し、
上記乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ρｎをランダムに選択し、
上記副乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍ（ｍは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記総積元ワイ算出部は、上記処理装置を用いて、上記ユーザ識別子入力部が入力したＬ個の整数Ｉｉと、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，０と（Ｄ＋２）×Ｌ個の元ｙ’ｎ，ｉとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ以下のＬ個の整数ｉとの組である（Ｄ＋２）×Ｌ個の組（ｎ，ｉ）それぞれについて、上記元ｙ’ｎ，ｉのＩｉ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，０と、Ｌ個の元ｙ’ｎ，ｉのＩｉ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ΠＹ，ｎを算出し、
上記検索元算出部は、上記処理装置を用いて、上記秘密元ダブリュー記憶部が記憶した１個の元ｗ’と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ΠＹ，ｎのρｎ乗を計算し、上記元ｗ’と、（Ｄ＋２）個の元ΠＹ，ｎのρｎ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ０を算出し、
上記検索元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）を算出し、
上記検索元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を算出し、
上記攪乱元算出部は、上記処理装置を用いて、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ΠＹ，ｎのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ΠＹ，ｎのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０を算出し、
上記攪乱元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ａ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を算出し、
上記攪乱元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｂ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を算出し、
上記委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λ（ΛはＬ超Ｄ以下の整数のなかから選択した１個の整数。）と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，Λのρｎ乗を計算し、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｈΛを算出し、
上記副委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｙ’ｎ，Λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｈｍ，Λを算出し、
上記ユーザ秘密鍵出力部は、上記処理装置を用いて、上記クエリ発行装置のユーザ秘密鍵として、上記検索元算出部が算出した１個の元ｋ０と、上記検索元エー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部が算出した１個の元ｈΛと、上記副委任元算出部が算出した（Ｄ＋２）個の元ｈｍ，Λとの組を出力し、
上記クエリ発行装置は、データを記憶する記憶装置と、データを処理する処理装置と、ユーザ識別子記憶部と、検索元記憶部と、検索元エー記憶部と、検索元ビー記憶部と、攪乱元記憶部と、攪乱元エー記憶部と、攪乱元ビー記憶部と、委任元記憶部と、副委任元記憶部と、検索キーワード入力部と、乱数パイ選択部と、質問元算出部と、質問元エー算出部と、質問元ビー算出部と、クエリ出力部とを有し、
上記ユーザ識別子記憶部は、上記記憶装置を用いて、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを記憶し、
上記検索元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した１個の元ｋ０を記憶し、
上記検索元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｋｎ，（ａ）（ｎは０以上Ｄ＋１以下の整数。）を記憶し、
上記検索元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｋｎ，（ｂ）を記憶し、
上記攪乱元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｆｍ，０（ｍは０以上Ｄ＋１以下の整数。）を記憶し、
上記攪乱元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を記憶し、
上記攪乱元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を記憶し、
上記委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した１個の元ｈΛを記憶し、
上記副委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｈｍ，Λを記憶し、
上記検索キーワード入力部は、上記処理装置を用いて、検索するキーワードとして、０以上ｐ未満の１個の整数Ｗを入力し、
上記乱数パイ選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数πｍをランダムに選択し、
上記質問元算出部は、上記処理装置を用いて、上記検索元記憶部が記憶した１個の元ｋ０と、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部が記憶した１個の元ｈΛと、上記副委任元記憶部が記憶した（Ｄ＋２）個の元ｈｍ，Λと、上記検索キーワード入力部が入力した１個の整数Ｗと、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Λのπｍ乗を計算し、上記元ｈΛと、（Ｄ＋２）個の元ｈｍ，Λのπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＷ乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＷ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ’０を算出し、
上記質問元エー算出部は、上記処理装置を用いて、上記検索元エー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記攪乱元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ａ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）を算出し、
上記質問元ビー算出部は、上記処理装置を用いて、上記検索元ビー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ｂ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を算出し、
上記クエリ出力部は、上記処理装置を用いて、上記ユーザ識別子記憶部が記憶したＬ個の整数Ｉｉと、上記質問元算出部が算出した１個の元ｋ’０と、上記質問元エー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を、上記整数Ｗをキーワードとして検索するためのクエリとして出力し、
上記検索装置は、データを記憶する記憶装置と、データを処理する処理装置と、暗号文記憶部と、クエリ入力部と、ペアリング元算出部と、ペアリング元エー算出部と、ペアリング元ビー算出部と、比較元算出部と、比較部とを有し、
上記暗号文記憶部は、上記記憶装置を用いて、キーワードが埋め込まれた暗号文として、上記暗号化装置が出力した暗号文に含まれる１個の元Ｒと１個の元Ｅと１個の元ｃ０と（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）との組を記憶し、
上記クエリ入力部は、上記処理装置を用いて、キーワードを検索するクエリとして、上記クエリ発行装置が出力したＬ個の整数Ｉｉと１個の元ｋ’０と（Ｄ＋２）個の元ｋ’ｎ，（ａ）と（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を入力し、
上記ペアリング元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元ｃ０と、上記クエリ入力部が入力したクエリに含まれる１個の元ｋ’０とに基づいて、上記双線形ペアリングｅにより上記元ｃ０と上記元ｋ’０との組を写像することにより、上記乗法群Ｇ３の元である１個の元ｅ０を算出し、
上記ペアリング元エー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ａ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ａ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ａ）とＬＡ個の元ｃｎ，ｉ’，（ａ）のＩｉ’乗との総積ΠＡ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＡ’，ｎと上記元ｋ’ｎ，（ａ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＡ，ｎを算出し、
上記ペアリング元ビー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ｂ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ｂ）とＬＡ個の元ｃｎ，ｉ’，（ｂ）のＩｉ’乗との総積ΠＢ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＢ’，ｎと上記元ｋ’ｎ，（ｂ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＢ，ｎを算出し、
上記比較元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｅと、上記ペアリング元算出部が算出した１個の元ｅ０と、上記ペアリング元エー算出部が算出した（Ｄ＋２）個の元ｅＡ，ｎと、上記ペアリング元ビー算出部が算出した（Ｄ＋２）個の元ｅＢ，ｎとに基づいて、上記元Ｅと、上記元ｅ０と、（Ｄ＋２）個の元ｅＡ，ｎと、（Ｄ＋２）個の元ｅＢ，ｎとの総積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｒ’を算出し、
上記比較部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｒと、上記比較元算出部が算出した１個の元Ｒ’とを比較して、元Ｒと元Ｒ’とが一致する場合に、検索にヒットしたと判定することを特徴とする秘匿検索システム。
【請求項２】
上記委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）×（Ｄ’−Ｌ）個（Ｄ’はＬ超Ｄ以下の整数。）の元ｙ’ｎ，λ（λはＬ超Ｄ’以下の整数。）と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｎ，λ）それぞれについて、上記元ｙ’ｎ，λのρｎ乗を計算し、Ｌ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ’−Ｌ）個の元ｈλを算出し、
上記副委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｙ’ｎ，λと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｎ，ｍ，λ）それぞれについて、上記元ｙ’ｎ，λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｍ，λ）それぞれについて、（Ｄ＋２）個の元ｙ’ｎ，λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを算出し、
上記ユーザ秘密鍵出力部は、上記処理装置を用いて、上記クエリ発行装置のユーザ秘密鍵として、上記検索元算出部が算出した１個の元ｋ０と、上記検索元エー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部が算出した（Ｄ’−Ｌ）個の元ｈλと、上記副委任元算出部が算出した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λとの組を出力し、
上記クエリ発行装置は、更に、子ユーザ識別子入力部と、副乱数パイ選択部と、子検索元算出部と、子攪乱元算出部と、子攪乱元エー算出部と、子攪乱元ビー算出部と、子委任元算出部と、子副委任元算出部と、子ユーザ秘密鍵出力部とを有し、
上記委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ’−Ｌ）個の元ｈλを記憶し、
上記副委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを記憶し、
上記子ユーザ識別子入力部は、上記処理装置を用いて、０以上ｐ未満の１個の整数ＩＬ＋１を入力し、
上記副乱数パイ選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’（ｍ’は０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記子検索元算出部は、上記処理装置を用いて、上記検索元記憶部が記憶した１個の元ｋ０と、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部が記憶した（Ｄ’−Ｌ）個の元ｈλのうち１個の元ｈＬ＋１と、上記副委任元記憶部が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）個の元ｈｍ，Ｌ＋１と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍと、上記子ユーザ識別子入力部が入力した整数ＩＬ＋１とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Ｌ＋１のπｍ乗を計算し、上記元ｈＬ＋１と、（Ｄ＋２）個の元ｈｍ，Ｌ＋１のπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＩＬ＋１乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＩＬ＋１乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ”０を算出し、
上記子攪乱元算出部は、上記処理装置を用いて、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記副委任元記憶部が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）個の元ｈｍ，Ｌ＋１と、上記副乱数パイ選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の組（ｍ，ｍ’）それぞれについて、上記元ｆｍ，０のπｍ，ｍ’乗と、上記元ｈｍ，Ｌ＋１のπｍ，ｍ’乗とを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、（Ｄ＋２）個の元ｈｍ，Ｌ＋１のπｍ，ｍ’乗の総積ΠＨ，ｍ’を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、上記総積ΠＨ，ｍ’のＩＬ＋１乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、（Ｄ＋２）個の元ｆｍ，０のπｍ，ｍ’乗と、上記総積ΠＨ，ｍ’のＩＬ＋１乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆ’ｍ’，０を算出し、
上記子攪乱元エー算出部は、上記処理装置を用いて、上記攪乱元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記副乱数パイ選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ，ｍ’）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ’）それぞれについて、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を算出し、
上記子攪乱元ビー算出部は、上記処理装置を用いて、上記攪乱元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記副乱数パイ選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ，ｍ’）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ’）それぞれについて、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を算出し、
上記子委任元算出部は、上記処理装置を用いて、上記委任元記憶部が記憶した（Ｄ’−Ｌ）個の元ｈλのうち（Ｄ”−Ｌ−１）個（Ｄ”は（Ｌ＋１）超Ｄ’以下の整数。）の元ｈλ’（λ’は（Ｌ＋１）超Ｄ”以下の整数。）と、上記副委任元記憶部が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ，λ’）それぞれについて、上記元ｈｍ，λ’のπｍ乗を計算し、（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’それぞれについて、上記元ｈλ’と、（Ｄ＋２）個の元ｈｍ，λ’のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ”−Ｌ−１）個の元ｈ’λ’を算出し、
上記子副委任元算出部は、上記処理装置を用いて、上記副委任元記憶部が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’と、上記副乱数パイ選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’と（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ，ｍ’，λ’）それぞれについて、上記元ｈｍ，λ’のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’と（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ’，λ’）それぞれについて、（Ｄ＋２）個の元ｈｍ，λ’のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を算出し、
上記子ユーザ秘密鍵出力部は、上記ユーザ識別子記憶部が記憶したＬ個の整数Ｉｉと上記子ユーザ識別子入力部が入力した１個の整数ＩＬ＋１とをユーザ識別子として持つ他のクエリ発行装置のユーザ秘密鍵として、上記子検索元算出部が算出した１個の元ｋ”０と、上記質問元エー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）と、上記子攪乱元算出部が算出した（Ｄ＋２）個の元ｆ’ｍ’，０と、上記子攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）と、上記子攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）と、上記子委任元算出部が算出した（Ｄ”−Ｌ−１）個の元ｈ’λ’と、上記子副委任元算出部が算出した（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’との組を出力することを特徴とする請求項１に記載の秘匿検索システム。
【請求項３】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで使用される公開パラメータとマスタ秘密鍵とを生成する公開パラメータ生成装置において、
データを処理する処理装置と、乱数オメガ選択部と、乱数アルファ選択部と、乱数ベータ選択部と、乱数シータ選択部と、公開元オメガ算出部と、公開元エー算出部と、公開元ビー算出部と、秘密元ダブリュー算出部と、秘密元エー算出部と、秘密元ビー算出部と、秘密元ワイ算出部と、公開パラメータ出力部と、マスタ秘密鍵出力部とを有し、
上記乱数オメガ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、１個の整数ωをランダムに選択し、
上記乱数アルファ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数αｎ（ｎは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記乱数ベータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数βｎをランダムに選択し、
上記乱数シータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌ（ｌは０以上Ｄ以下の整数。）をランダムに選択し、
上記公開元エー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ１の生成元ｇ１と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（αｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを算出し、
上記公開元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを算出し、
上記秘密元ダブリュー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ２の生成元ｇ２と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記生成元ｇ２のω乗を計算することにより、上記乗法群Ｇ２の元である１個の元ｗ’を算出し、
上記公開元オメガ算出部は、上記処理装置を用いて、上記乗法群Ｇ１の元と上記乗法群Ｇ２の元との組を位数がｐである乗法群Ｇ３の元へ写像する双線形ペアリングｅにより上記乗法群Ｇ１の生成元ｇ１と上記乗法群Ｇ２の生成元ｇ２との組を写像した上記乗法群Ｇ３の元ｇ３と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記元ｇ３のω乗を計算することにより、上記乗法群Ｇ３の元である１個の元Ωを算出し、
上記秘密元エー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のαｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎを算出し、
上記秘密元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のβｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎを算出し、
上記秘密元ワイ算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ２の（αｎ×βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを算出し、
上記公開パラメータ出力部は、上記処理装置を用いて、上記秘匿検索システムにおける公開パラメータとして、上記公開元オメガ算出部が算出した１個の元Ωと、上記公開元エー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌと、上記公開元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌとを出力し、
上記マスタ秘密鍵出力部は、上記処理装置を用いて、上記秘匿検索システムにおけるマスタ秘密鍵として、上記秘密元ダブリュー算出部が算出した１個の元ｗ’と、上記秘密元エー算出部が算出した（Ｄ＋２）個の元ａ’ｎと、上記秘密元ビー算出部が算出した（Ｄ＋２）個の元ｂ’ｎと、上記秘密元ワイ算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを出力することを特徴とする公開パラメータ生成装置。
【請求項４】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで、キーワードを暗号化する暗号化装置において、
データを記憶する記憶装置と、データを処理する処理装置と、公開元オメガ記憶部と、公開元エー記憶部と、公開元ビー記憶部と、埋込みキーワード入力部と、権限範囲入力部と、乱数アール選択部と、副乱数アール選択部と、乱数元選択部と、検証元算出部と、暗号元算出部と、暗号元エー算出部と、暗号元ビー算出部と、暗号部分元エー算出部と、暗号部分元ビー算出部と、暗号文出力部とを有し、
上記公開元オメガ記憶部は、上記記憶装置を用いて、位数がｐである乗法群Ｇ３の元である１個の元Ωを記憶し、
上記公開元エー記憶部は、上記記憶装置を用いて、位数がｐである乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌ（ｎは０以上Ｄ＋１以下の整数。ｌは０以上Ｄ以下の整数。）を記憶し、
上記公開元ビー記憶部は、上記記憶装置を用いて、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを記憶し、
上記埋込みキーワード入力部は、上記処理装置を用いて、暗号化するキーワードとして、０以上ｐ未満の１個の整数Ｗ’を入力し、
上記権限範囲入力部は、上記処理装置を用いて、キーワードを検索する権限を持つクエリ発行装置の範囲を指定するデータとして、１個の整数Ｌ’（Ｌ’は１以上Ｄ未満の任意の整数。）と、Ｌ”個の整数Ｉ’ｊ（Ｌ”は０以上Ｌ’以下の任意の整数。ｊは１以上Ｌ’以下の整数のなかから任意に選択したＬ”個の整数。Ｉ’ｊは０以上ｐ未満の整数。）とを入力し、
上記乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、１個の整数ｒをランダムに選択し、
上記副乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ｒｎをランダムに選択し、
上記乱数元選択部は、上記処理装置を用いて、上記乗法群Ｇ３の元のなかから、１個の元Ｒをランダムに選択し、
上記検証元算出部は、上記処理装置を用いて、上記公開元オメガ記憶部が記憶した１個の元Ωと、上記乱数アール選択部が選択した１個の整数ｒと、上記乱数元選択部が選択した１個の元Ｒとに基づいて、上記元Ωの（−ｒ）乗と、上記元Ｒとの積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｅを算出し、
上記暗号元算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数アール選択部が選択した整数ｒとに基づいて、上記生成元ｇ１のｒ乗を計算することにより、上記乗法群Ｇ１の元である１個の元ｃ０を算出し、
上記暗号元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）個の元ｂｎ，０と（Ｄ＋２）×Ｌ”個の元ｂｎ，ｊと（Ｄ＋２）個の元ｂｎ，Λ’（Λ’はＬ’超Ｄ以下の整数のなかから選択した１個の整数。）と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ｂｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，０とＬ”個の元ｂｎ，ｊのＩ’ｊ乗と元ｂｎ，Λ’のＷ’乗との総積ΠＢ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＢ，ｎのｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）を算出し、
上記暗号元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）個の元ａｎ，０と（Ｄ＋２）×Ｌ”個の元ａｎ，ｊと（Ｄ＋２）個の元ａｎ，Λ’と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ａｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，０とＬ”個の元ａｎ，ｊのＩ’ｊ乗と元ａｎ，Λ’のＷ’乗との総積ΠＡ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＡ，ｎの（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ｂ）を算出し、
上記暗号部分元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｂｎ，ｊ’（ｊ’は１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数。）と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ｂｎ，ｊ’のｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）を算出し、
上記暗号部分元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ａｎ，ｊ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ａｎ，ｊ’の（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）を算出し、
上記暗号文出力部は、上記処理装置を用いて、上記整数Ｗ’をキーワードとして埋め込んだ暗号文として、上記乱数元選択部が選択した１個の元Ｒと、上記検証元算出部が算出した１個の元Ｅと、上記暗号元算出部が算出した１個の元ｃ０と、上記暗号元エー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ａ）と、上記暗号元ビー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ｂ）と、上記暗号部分元エー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記暗号部分元ビー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）とを出力することを特徴とする暗号化装置。
【請求項５】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで、上記クエリ発行装置が使用するユーザ秘密鍵を生成するユーザ秘密鍵生成装置において、
データを記憶する記憶装置と、データを処理する処理装置と、秘密元ダブリュー記憶部と、秘密元エー記憶部と、秘密元ビー記憶部と、秘密元ワイ記憶部と、ユーザ識別子入力部と、乱数ロー選択部と、副乱数ロー選択部と、総積元ワイ算出部と、検索元算出部と、検索元エー算出部と、検索元ビー算出部と、攪乱元算出部と、攪乱元エー算出部と、攪乱元ビー算出部と、委任元算出部と、副委任元算出部と、ユーザ秘密鍵出力部とを有し、
上記秘密元ダブリュー記憶部は、上記記憶装置を用いて、上記秘匿検索システムにおけるマスタ秘密鍵の一部として、位数がｐである乗法群Ｇ２の元である１個の元ｗ’を記憶し、
上記秘密元エー記憶部は、上記記憶装置を用いて、上記マスタ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎ（ｎは０以上Ｄ＋１以下の整数。）を記憶し、
上記秘密元ビー記憶部は、上記記憶装置を用いて、上記マスタ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎを記憶し、
上記秘密元ワイ記憶部は、上記記憶装置を用いて、上記マスタ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌ（ｌは０以上Ｄ以下の整数。）を記憶し、
上記ユーザ識別子入力部は、上記処理装置を用いて、上記複数のクエリ発行装置のうちユーザ秘密鍵の生成を要求するクエリ発行装置について、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを入力し、
上記乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ρｎをランダムに選択し、
上記副乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍ（ｍは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記総積元ワイ算出部は、上記処理装置を用いて、上記ユーザ識別子入力部が入力したＬ個の整数Ｉｉと、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，０と（Ｄ＋２）×Ｌ個の元ｙ’ｎ，ｉとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ以下のＬ個の整数ｉとの組である（Ｄ＋２）×Ｌ個の組（ｎ，ｉ）それぞれについて、上記元ｙ’ｎ，ｉのＩｉ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，０と、Ｌ個の元ｙ’ｎ，ｉのＩｉ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ΠＹ，ｎを算出し、
上記検索元算出部は、上記処理装置を用いて、上記秘密元ダブリュー記憶部が記憶した１個の元ｗ’と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ΠＹ，ｎのρｎ乗を計算し、上記元ｗ’と、（Ｄ＋２）個の元ΠＹ，ｎのρｎ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ０を算出し、
上記検索元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）を算出し、
上記検索元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を算出し、
上記攪乱元算出部は、上記処理装置を用いて、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ΠＹ，ｎのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ΠＹ，ｎのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０を算出し、
上記攪乱元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ａ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を算出し、
上記攪乱元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｂ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を算出し、
上記委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λ（ΛはＬ超Ｄ以下の整数のうちから選択した１個の整数。）と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，Λのρｎ乗を計算し、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｈΛを算出し、
上記副委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｙ’ｎ，Λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｈｍ，Λを算出し、
上記ユーザ秘密鍵出力部は、上記処理装置を用いて、上記クエリ発行装置のユーザ秘密鍵として、上記検索元算出部が算出した１個の元ｋ０と、上記検索元エー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部が算出した１個の元ｈΛと、上記副委任元算出部が算出した（Ｄ＋２）個の元ｈｍ，Λとの組を出力することを特徴とするユーザ秘密鍵生成装置。
【請求項６】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで、キーワードを検索するためのクエリを生成するクエリ発行装置において、
データを記憶する記憶装置と、データを処理する処理装置と、ユーザ識別子記憶部と、検索元記憶部と、検索元エー記憶部と、検索元ビー記憶部と、攪乱元記憶部と、攪乱元エー記憶部と、攪乱元ビー記憶部と、委任元記憶部と、副委任元記憶部と、検索キーワード入力部と、乱数パイ選択部と、質問元算出部と、質問元エー算出部と、質問元ビー算出部と、クエリ出力部とを有し、
上記ユーザ識別子記憶部は、上記記憶装置を用いて、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを記憶し、
上記検索元記憶部は、上記記憶装置を用いて、上記クエリ発行装置のユーザ秘密鍵の一部として、位数がｐである乗法群Ｇ２の元である１個の元ｋ０を記憶し、
上記検索元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）（ｎは０以上Ｄ＋１以下の整数。）を記憶し、
上記検索元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を記憶し、
上記攪乱元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０（ｍは０以上Ｄ＋１以下の整数。）を記憶し、
上記攪乱元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を記憶し、
上記攪乱元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を記憶し、
上記委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である１個の元ｈΛ（ΛはＬ超Ｄ以下の整数のうちから選択した１個の整数。）を記憶し、
上記副委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｈｍ，Λを記憶し、
上記検索キーワード入力部は、上記処理装置を用いて、検索するキーワードとして、０以上ｐ未満の１個の整数Ｗを入力し、
上記乱数パイ選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数πｍをランダムに選択し、
上記質問元算出部は、上記処理装置を用いて、上記検索元記憶部が記憶した１個の元ｋ０と、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部が記憶した１個の元ｈΛと、上記副委任元記憶部が記憶した（Ｄ＋２）個の元ｈｍ，Λと、上記検索キーワード入力部が入力した１個の整数Ｗと、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Λのπｍ乗を計算し、上記元ｈΛと、（Ｄ＋２）個の元ｈｍ，Λのπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＷ乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＷ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ’０を算出し、
上記質問元エー算出部は、上記処理装置を用いて、上記検索元エー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記攪乱元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ａ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）を算出し、
上記質問元ビー算出部は、上記処理装置を用いて、上記検索元ビー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ｂ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を算出し、
上記クエリ出力部は、上記処理装置を用いて、上記ユーザ識別子記憶部が記憶したＬ個の整数Ｉｉと、上記質問元算出部が算出した１個の元ｋ’０と、上記質問元エー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を、上記整数Ｗをキーワードとして検索するためのクエリとして出力することを特徴とするクエリ発行装置。
【請求項７】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで、キーワードを検索する検索装置において、
データを記憶する記憶装置と、データを処理する処理装置と、暗号文記憶部と、クエリ入力部と、ペアリング元算出部と、ペアリング元エー算出部と、ペアリング元ビー算出部と、比較元算出部と、比較部とを有し、
上記暗号文記憶部は、上記記憶装置を用いて、キーワードが埋め込まれた暗号文として、位数がｐである乗法群Ｇ３の元である１個の元Ｒと、上記乗法群Ｇ３の元である１個の元Ｅと、位数がｐである乗法群Ｇ１の元である１個の元ｃ０と、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）と、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ｂ）と、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）（Ｌ’は１以上Ｄ未満の任意の整数。Ｌ”は０以上Ｌ’以下の任意の整数。ｊ’は１以上Ｌ’以下の整数のなかから任意に選択した（Ｌ’−Ｌ”）個の整数。）と、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）との組を記憶し、
上記クエリ入力部は、上記処理装置を用いて、キーワードを検索するクエリとして、Ｌ個の整数Ｉｉと、位数がｐである乗法群Ｇ２の元である１個の元ｋ’０と、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を入力し、
上記ペアリング元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元ｃ０と、上記クエリ入力部が入力したクエリに含まれる１個の元ｋ’０とに基づいて、上記乗法群Ｇ１の元と上記乗法群Ｇ２の元との組を上記乗法群Ｇ３の元へ写像する双線形ペアリングｅにより上記元ｃ０と上記元ｋ’０との組を写像することにより、上記乗法群Ｇ３の元である１個の元ｅ０を算出し、
上記ペアリング元エー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ａ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ａ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ａ）とＬＡ個の元ｃｎ，ｉ’，（ａ）のＩｉ’乗との総積ΠＡ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＡ’，ｎと上記元ｋ’ｎ，（ａ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＡ，ｎを算出し、
上記ペアリング元ビー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ｂ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ｂ）とＬＡ個の元ｃｎ，ｉ’，（ｂ）のＩｉ’乗との総積ΠＢ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＢ’，ｎと上記元ｋ’ｎ，（ｂ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＢ，ｎを算出し、
上記比較元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｅと、上記ペアリング元算出部が算出した１個の元ｅ０と、上記ペアリング元エー算出部が算出した（Ｄ＋２）個の元ｅＡ，ｎと、上記ペアリング元ビー算出部が算出した（Ｄ＋２）個の元ｅＢ，ｎとに基づいて、上記元Ｅと、上記元ｅ０と、（Ｄ＋２）個の元ｅＡ，ｎと、（Ｄ＋２）個の元ｅＢ，ｎとの総積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｒ’を算出し、
上記比較部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｒと、上記比較元算出部が算出した１個の元Ｒ’とを比較して、元Ｒと元Ｒ’とが一致する場合に、検索にヒットしたと判定することを特徴とする検索装置。
【請求項８】
データを記憶する記憶装置と、データを処理する処理装置とを有するコンピュータが実行することにより、上記コンピュータが、請求項３に記載の公開パラメータ生成装置と、請求項４に記載の暗号化装置と、請求項５に記載のユーザ秘密鍵生成装置と、請求項６に記載のクエリ発行装置と、請求項７に記載の検索装置とのうち少なくともいずれかとして機能することを特徴とするコンピュータプログラム。
【請求項９】
公開パラメータ生成装置と、暗号化装置と、ユーザ秘密鍵生成装置と、クエリ発行装置と、検索装置とを有する秘匿検索システムが、キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索方法において、
上記公開パラメータ生成装置は、データを処理する処理装置と、乱数オメガ選択部と、乱数アルファ選択部と、乱数ベータ選択部と、乱数シータ選択部と、公開元オメガ算出部と、公開元エー算出部と、公開元ビー算出部と、秘密元ダブリュー算出部と、秘密元エー算出部と、秘密元ビー算出部と、秘密元ワイ算出部と、公開パラメータ出力部と、マスタ秘密鍵出力部とを有し、
上記乱数オメガ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、１個の整数ωをランダムに選択し、
上記乱数アルファ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数αｎ（ｎは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記乱数ベータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数βｎをランダムに選択し、
上記乱数シータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌ（ｌは０以上Ｄ以下の整数。）をランダムに選択し、
上記公開元エー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ１の生成元ｇ１と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（αｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを算出し、
上記公開元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを算出し、
上記秘密元ダブリュー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ２の生成元ｇ２と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記生成元ｇ２のω乗を計算することにより、上記乗法群Ｇ２の元である１個の元ｗ’を算出し、
上記公開元オメガ算出部は、上記処理装置を用いて、上記乗法群Ｇ１の元と上記乗法群Ｇ２の元との組を位数がｐである乗法群Ｇ３の元へ写像する双線形ペアリングｅにより上記乗法群Ｇ１の生成元ｇ１と上記乗法群Ｇ２の生成元ｇ２との組を写像した上記乗法群Ｇ３の元ｇ３と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記元ｇ３のω乗を計算することにより、上記乗法群Ｇ３の元である１個の元Ωを算出し、
上記秘密元エー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のαｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎを算出し、
上記秘密元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のβｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎを算出し、
上記秘密元ワイ算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ２の（αｎ×βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを算出し、
上記公開パラメータ出力部は、上記処理装置を用いて、上記秘匿検索システムにおける公開パラメータとして、上記公開元オメガ算出部が算出した１個の元Ωと、上記公開元エー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌと、上記公開元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌとを出力し、
上記マスタ秘密鍵出力部は、上記処理装置を用いて、上記秘匿検索システムにおけるマスタ秘密鍵として、上記秘密元ダブリュー算出部が算出した１個の元ｗ’と、上記秘密元エー算出部が算出した（Ｄ＋２）個の元ａ’ｎと、上記秘密元ビー算出部が算出した（Ｄ＋２）個の元ｂ’ｎと、上記秘密元ワイ算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを出力し、
上記暗号化装置は、データを記憶する記憶装置と、データを処理する処理装置と、公開元オメガ記憶部と、公開元エー記憶部と、公開元ビー記憶部と、埋込みキーワード入力部と、権限範囲入力部と、乱数アール選択部と、副乱数アール選択部と、乱数元選択部と、検証元算出部と、暗号元算出部と、暗号元エー算出部と、暗号元ビー算出部と、暗号部分元エー算出部と、暗号部分元ビー算出部と、暗号文出力部とを有し、
上記公開元オメガ記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した１個の元Ωを記憶し、
上記公開元エー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを記憶し、
上記公開元ビー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを記憶し、
上記埋込みキーワード入力部は、上記処理装置を用いて、暗号化するキーワードとして、０以上ｐ未満の１個の整数Ｗ’を入力し、
上記権限範囲入力部は、上記処理装置を用いて、キーワードを検索する権限を持つクエリ発行装置の範囲を指定するデータとして、１個の整数Ｌ’（Ｌ’は１以上Ｄ未満の任意の整数。）と、Ｌ”個の整数Ｉ’ｊ（Ｌ”は０以上Ｌ’以下の任意の整数。ｊは１以上Ｌ’以下の整数のなかから任意に選択したＬ”個の整数。Ｉ’ｊは０以上ｐ未満の整数。）とを入力し、
上記乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、１個の整数ｒをランダムに選択し、
上記副乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ｒｎをランダムに選択し、
上記乱数元選択部は、上記処理装置を用いて、上記乗法群Ｇ３の元のなかから、１個の元Ｒをランダムに選択し、
上記検証元算出部は、上記処理装置を用いて、上記公開元オメガ記憶部が記憶した１個の元Ωと、上記乱数アール選択部が選択した１個の整数ｒと、上記乱数元選択部が選択した１個の元Ｒとに基づいて、上記元Ωの（−ｒ）乗と、上記元Ｒとの積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｅを算出し、
上記暗号元算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数アール選択部が選択した整数ｒとに基づいて、上記生成元ｇ１のｒ乗を計算することにより、上記乗法群Ｇ１の元である１個の元ｃ０を算出し、
上記暗号元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）個の元ｂｎ，０と（Ｄ＋２）×Ｌ”個の元ｂｎ，ｊと（Ｄ＋２）個の元ｂｎ，Λ’（Λ’はＬ’超Ｄ以下の整数のうちから選択した１個の整数。）と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ｂｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，０とＬ”個の元ｂｎ，ｊのＩ’ｊ乗と元ｂｎ，Λ’のＷ’乗との総積ΠＢ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＢ，ｎのｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）を算出し、
上記暗号元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）個の元ａｎ，０と（Ｄ＋２）×Ｌ”個の元ａｎ，ｊと（Ｄ＋２）個の元ａｎ，Λ’と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ａｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，０とＬ”個の元ａｎ，ｊのＩ’ｊ乗と元ａｎ，Λ’のＷ’乗との総積ΠＡ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＡ，ｎの（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ｂ）を算出し、
上記暗号部分元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｂｎ，ｊ’（ｊ’は１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数。）と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ｂｎ，ｊ’のｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）を算出し、
上記暗号部分元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ａｎ，ｊ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ａｎ，ｊ’の（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）を算出し、
上記暗号文出力部は、上記処理装置を用いて、上記整数Ｗ’をキーワードとして埋め込んだ暗号文として、上記乱数元選択部が選択した１個の元Ｒと、上記検証元算出部が算出した１個の元Ｅと、上記暗号元算出部が算出した１個の元ｃ０と、上記暗号元エー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ａ）と、上記暗号元ビー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ｂ）と、上記暗号部分元エー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記暗号部分元ビー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）とを出力し、
上記ユーザ秘密鍵生成装置は、データを記憶する記憶装置と、データを処理する処理装置と、秘密元ダブリュー記憶部と、秘密元エー記憶部と、秘密元ビー記憶部と、秘密元ワイ記憶部と、ユーザ識別子入力部と、乱数ロー選択部と、副乱数ロー選択部と、総積元ワイ算出部と、検索元算出部と、検索元エー算出部と、検索元ビー算出部と、攪乱元算出部と、攪乱元エー算出部と、攪乱元ビー算出部と、委任元算出部と、副委任元算出部と、ユーザ秘密鍵出力部とを有し、
上記秘密元ダブリュー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した１個の元ｗ’を記憶し、
上記秘密元エー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）個の元ａ’ｎを記憶し、
上記秘密元ビー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）個の元ｂ’ｎを記憶し、
上記秘密元ワイ記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを記憶し、
上記ユーザ識別子入力部は、上記処理装置を用いて、上記複数のクエリ発行装置のうちユーザ秘密鍵の生成を要求するクエリ発行装置について、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを入力し、
上記乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ρｎをランダムに選択し、
上記副乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍ（ｍは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記総積元ワイ算出部は、上記処理装置を用いて、上記ユーザ識別子入力部が入力したＬ個の整数Ｉｉと、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，０と（Ｄ＋２）×Ｌ個の元ｙ’ｎ，ｉとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ以下のＬ個の整数ｉとの組である（Ｄ＋２）×Ｌ個の組（ｎ，ｉ）それぞれについて、上記元ｙ’ｎ，ｉのＩｉ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，０と、Ｌ個の元ｙ’ｎ，ｉのＩｉ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ΠＹ，ｎを算出し、
上記検索元算出部は、上記処理装置を用いて、上記秘密元ダブリュー記憶部が記憶した１個の元ｗ’と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ΠＹ，ｎのρｎ乗を計算し、上記元ｗ’と、（Ｄ＋２）個の元ΠＹ，ｎのρｎ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ０を算出し、
上記検索元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）を算出し、
上記検索元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を算出し、
上記攪乱元算出部は、上記処理装置を用いて、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ΠＹ，ｎのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ΠＹ，ｎのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０を算出し、
上記攪乱元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ａ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を算出し、
上記攪乱元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｂ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を算出し、
上記委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λ（ΛはＬ超Ｄ以下の整数のなかから選択した１個の整数。）と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，Λのρｎ乗を計算し、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｈΛを算出し、
上記副委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｙ’ｎ，Λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｈｍ，Λを算出し、
上記ユーザ秘密鍵出力部は、上記処理装置を用いて、上記クエリ発行装置のユーザ秘密鍵として、上記検索元算出部が算出した１個の元ｋ０と、上記検索元エー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部が算出した１個の元ｈΛと、上記副委任元算出部が算出した（Ｄ＋２）個の元ｈｍ，Λとの組を出力し、
上記クエリ発行装置は、データを記憶する記憶装置と、データを処理する処理装置と、ユーザ識別子記憶部と、検索元記憶部と、検索元エー記憶部と、検索元ビー記憶部と、攪乱元記憶部と、攪乱元エー記憶部と、攪乱元ビー記憶部と、委任元記憶部と、副委任元記憶部と、検索キーワード入力部と、乱数パイ選択部と、質問元算出部と、質問元エー算出部と、質問元ビー算出部と、クエリ出力部とを有し、
上記ユーザ識別子記憶部は、上記記憶装置を用いて、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを記憶し、
上記検索元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した１個の元ｋ０を記憶し、
上記検索元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｋｎ，（ａ）（ｎは０以上Ｄ＋１以下の整数。）を記憶し、
上記検索元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｋｎ，（ｂ）を記憶し、
上記攪乱元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｆｍ，０（ｍは０以上Ｄ＋１以下の整数。）を記憶し、
上記攪乱元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を記憶し、
上記攪乱元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を記憶し、
上記委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した１個の元ｈΛを記憶し、
上記副委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｈｍ，Λを記憶し、
上記検索キーワード入力部は、上記処理装置を用いて、検索するキーワードとして、０以上ｐ未満の１個の整数Ｗを入力し、
上記乱数パイ選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数πｍをランダムに選択し、
上記質問元算出部は、上記処理装置を用いて、上記検索元記憶部が記憶した１個の元ｋ０と、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部が記憶した１個の元ｈΛと、上記副委任元記憶部が記憶した（Ｄ＋２）個の元ｈｍ，Λと、上記検索キーワード入力部が入力した１個の整数Ｗと、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Λのπｍ乗を計算し、上記元ｈΛと、（Ｄ＋２）個の元ｈｍ，Λのπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＷ乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＷ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ’０を算出し、
上記質問元エー算出部は、上記処理装置を用いて、上記検索元エー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記攪乱元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ａ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）を算出し、
上記質問元ビー算出部は、上記処理装置を用いて、上記検索元ビー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ｂ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を算出し、
上記クエリ出力部は、上記処理装置を用いて、上記ユーザ識別子記憶部が記憶したＬ個の整数Ｉｉと、上記質問元算出部が算出した１個の元ｋ’０と、上記質問元エー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を、上記整数Ｗをキーワードとして検索するためのクエリとして出力し、
上記検索装置は、データを記憶する記憶装置と、データを処理する処理装置と、暗号文記憶部と、クエリ入力部と、ペアリング元算出部と、ペアリング元エー算出部と、ペアリング元ビー算出部と、比較元算出部と、比較部とを有し、
上記暗号文記憶部は、上記記憶装置を用いて、キーワードが埋め込まれた暗号文として、上記暗号化装置が出力した暗号文に含まれる１個の元Ｒと１個の元Ｅと１個の元ｃ０と（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）との組を記憶し、
上記クエリ入力部は、上記処理装置を用いて、キーワードを検索するクエリとして、上記クエリ発行装置が出力したＬ個の整数Ｉｉと１個の元ｋ’０と（Ｄ＋２）個の元ｋ’ｎ，（ａ）と（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を入力し、
上記ペアリング元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元ｃ０と、上記クエリ入力部が入力したクエリに含まれる１個の元ｋ’０とに基づいて、上記双線形ペアリングｅにより上記元ｃ０と上記元ｋ’０との組を写像することにより、上記乗法群Ｇ３の元である１個の元ｅ０を算出し、
上記ペアリング元エー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ａ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ａ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ａ）とＬＡ個の元ｃｎ，ｉ’，（ａ）のＩｉ’乗との総積ΠＡ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＡ’，ｎと上記元ｋ’ｎ，（ａ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＡ，ｎを算出し、
上記ペアリング元ビー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ｂ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ｂ）とＬＡ個の元ｃｎ，ｉ’，（ｂ）のＩｉ’乗との総積ΠＢ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＢ’，ｎと上記元ｋ’ｎ，（ｂ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＢ，ｎを算出し、
上記比較元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｅと、上記ペアリング元算出部が算出した１個の元ｅ０と、上記ペアリング元エー算出部が算出した（Ｄ＋２）個の元ｅＡ，ｎと、上記ペアリング元ビー算出部が算出した（Ｄ＋２）個の元ｅＢ，ｎとに基づいて、上記元Ｅと、上記元ｅ０と、（Ｄ＋２）個の元ｅＡ，ｎと、（Ｄ＋２）個の元ｅＢ，ｎとの総積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｒ’を算出し、
上記比較部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｒと、上記比較元算出部が算出した１個の元Ｒ’とを比較して、元Ｒと元Ｒ’とが一致する場合に、検索にヒットしたと判定することを特徴とする秘匿検索方法。
【請求項１０】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで使用される公開パラメータとマスタ秘密鍵とを公開パラメータ生成装置が生成する公開パラメータ生成方法において、
上記公開パラメータ生成装置は、データを処理する処理装置と、乱数オメガ選択部と、乱数アルファ選択部と、乱数ベータ選択部と、乱数シータ選択部と、公開元オメガ算出部と、公開元エー算出部と、公開元ビー算出部と、秘密元ダブリュー算出部と、秘密元エー算出部と、秘密元ビー算出部と、秘密元ワイ算出部と、公開パラメータ出力部と、マスタ秘密鍵出力部とを有し、
上記乱数オメガ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、１個の整数ωをランダムに選択し、
上記乱数アルファ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数αｎ（ｎは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記乱数ベータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数βｎをランダムに選択し、
上記乱数シータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌ（ｌは０以上Ｄ以下の整数。）をランダムに選択し、
上記公開元エー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ１の生成元ｇ１と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（αｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを算出し、
上記公開元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを算出し、
上記秘密元ダブリュー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ２の生成元ｇ２と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記生成元ｇ２のω乗を計算することにより、上記乗法群Ｇ２の元である１個の元ｗ’を算出し、
上記公開元オメガ算出部は、上記処理装置を用いて、上記乗法群Ｇ１の元と上記乗法群Ｇ２の元との組を位数がｐである乗法群Ｇ３の元へ写像する双線形ペアリングｅにより上記乗法群Ｇ１の生成元ｇ１と上記乗法群Ｇ２の生成元ｇ２との組を写像した上記乗法群Ｇ３の元ｇ３と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記元ｇ３のω乗を計算することにより、上記乗法群Ｇ３の元である１個の元Ωを算出し、
上記秘密元エー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のαｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎを算出し、
上記秘密元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のβｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎを算出し、
上記秘密元ワイ算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ２の（αｎ×βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを算出し、
上記公開パラメータ出力部は、上記処理装置を用いて、上記秘匿検索システムにおける公開パラメータとして、上記公開元オメガ算出部が算出した１個の元Ωと、上記公開元エー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌと、上記公開元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌとを出力し、
上記マスタ秘密鍵出力部は、上記処理装置を用いて、上記秘匿検索システムにおけるマスタ秘密鍵として、上記秘密元ダブリュー算出部が算出した１個の元ｗ’と、上記秘密元エー算出部が算出した（Ｄ＋２）個の元ａ’ｎと、上記秘密元ビー算出部が算出した（Ｄ＋２）個の元ｂ’ｎと、上記秘密元ワイ算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを出力することを特徴とする公開パラメータ生成方法。
【請求項１１】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで、暗号化装置がキーワードを暗号化する暗号化方法において、
上記暗号化装置は、データを記憶する記憶装置と、データを処理する処理装置と、公開元オメガ記憶部と、公開元エー記憶部と、公開元ビー記憶部と、埋込みキーワード入力部と、権限範囲入力部と、乱数アール選択部と、副乱数アール選択部と、乱数元選択部と、検証元算出部と、暗号元算出部と、暗号元エー算出部と、暗号元ビー算出部と、暗号部分元エー算出部と、暗号部分元ビー算出部と、暗号文出力部とを有し、
上記公開元オメガ記憶部は、上記記憶装置を用いて、位数がｐである乗法群Ｇ３の元である１個の元Ωを記憶し、
上記公開元エー記憶部は、上記記憶装置を用いて、位数がｐである乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌ（ｎは０以上Ｄ＋１以下の整数。ｌは０以上Ｄ以下の整数。）を記憶し、
上記公開元ビー記憶部は、上記記憶装置を用いて、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを記憶し、
上記埋込みキーワード入力部は、上記処理装置を用いて、暗号化するキーワードとして、０以上ｐ未満の１個の整数Ｗ’を入力し、
上記権限範囲入力部は、上記処理装置を用いて、キーワードを検索する権限を持つクエリ発行装置の範囲を指定するデータとして、１個の整数Ｌ’（Ｌ’は１以上Ｄ未満の任意の整数。）と、Ｌ”個の整数Ｉ’ｊ（Ｌ”は０以上Ｌ’以下の任意の整数。ｊは１以上Ｌ’以下の整数のなかから任意に選択したＬ”個の整数。Ｉ’ｊは０以上ｐ未満の整数。）とを入力し、
上記乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、１個の整数ｒをランダムに選択し、
上記副乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ｒｎをランダムに選択し、
上記乱数元選択部は、上記処理装置を用いて、上記乗法群Ｇ３の元のなかから、１個の元Ｒをランダムに選択し、
上記検証元算出部は、上記処理装置を用いて、上記公開元オメガ記憶部が記憶した１個の元Ωと、上記乱数アール選択部が選択した１個の整数ｒと、上記乱数元選択部が選択した１個の元Ｒとに基づいて、上記元Ωの（−ｒ）乗と、上記元Ｒとの積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｅを算出し、
上記暗号元算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数アール選択部が選択した整数ｒとに基づいて、上記生成元ｇ１のｒ乗を計算することにより、上記乗法群Ｇ１の元である１個の元ｃ０を算出し、
上記暗号元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）個の元ｂｎ，０と（Ｄ＋２）×Ｌ”個の元ｂｎ，ｊと（Ｄ＋２）個の元ｂｎ，Λ’（Λ’はＬ’超Ｄ以下の整数のなかから選択した１個の整数。）と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ｂｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，０とＬ”個の元ｂｎ，ｊのＩ’ｊ乗と元ｂｎ，Λ’のＷ’乗との総積ΠＢ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＢ，ｎのｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）を算出し、
上記暗号元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）個の元ａｎ，０と（Ｄ＋２）×Ｌ”個の元ａｎ，ｊと（Ｄ＋２）個の元ａｎ，Λ’と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ａｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，０とＬ”個の元ａｎ，ｊのＩ’ｊ乗と元ａｎ，Λ’のＷ’乗との総積ΠＡ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＡ，ｎの（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）を算出し、
上記暗号部分元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｂｎ，ｊ’（ｊ’は１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数。）と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ｂｎ，ｊ’のｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）を算出し、
上記暗号部分元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ａｎ，ｊ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ａｎ，ｊ’の（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）を算出し、
上記暗号文出力部は、上記処理装置を用いて、上記整数Ｗ’をキーワードとして埋め込んだ暗号文として、上記乱数元選択部が選択した１個の元Ｒと、上記検証元算出部が算出した１個の元Ｅと、上記暗号元算出部が算出した１個の元ｃ０と、上記暗号元エー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ａ）と、上記暗号元ビー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ｂ）と、上記暗号部分元エー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記暗号部分元ビー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）とを出力することを特徴とする暗号化方法。
【請求項１２】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで、上記クエリ発行装置が使用するユーザ秘密鍵をユーザ秘密鍵生成装置が生成するユーザ秘密鍵生成方法において、
上記ユーザ秘密鍵生成装置は、データを記憶する記憶装置と、データを処理する処理装置と、秘密元ダブリュー記憶部と、秘密元エー記憶部と、秘密元ビー記憶部と、秘密元ワイ記憶部と、ユーザ識別子入力部と、乱数ロー選択部と、副乱数ロー選択部と、総積元ワイ算出部と、検索元算出部と、検索元エー算出部と、検索元ビー算出部と、攪乱元算出部と、攪乱元エー算出部と、攪乱元ビー算出部と、委任元算出部と、副委任元算出部と、ユーザ秘密鍵出力部とを有し、
上記秘密元ダブリュー記憶部は、上記記憶装置を用いて、上記秘匿検索システムにおけるマスタ秘密鍵の一部として、位数がｐである乗法群Ｇ２の元である１個の元ｗ’を記憶し、
上記秘密元エー記憶部は、上記記憶装置を用いて、上記マスタ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎ（ｎは０以上Ｄ＋１以下の整数。）を記憶し、
上記秘密元ビー記憶部は、上記記憶装置を用いて、上記マスタ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎを記憶し、
上記秘密元ワイ記憶部は、上記記憶装置を用いて、上記マスタ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌ（ｌは０以上Ｄ以下の整数。）を記憶し、
上記ユーザ識別子入力部は、上記処理装置を用いて、上記複数のクエリ発行装置のうちユーザ秘密鍵の生成を要求するクエリ発行装置について、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを入力し、
上記乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ρｎをランダムに選択し、
上記副乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍ（ｍは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記総積元ワイ算出部は、上記処理装置を用いて、上記ユーザ識別子入力部が入力したＬ個の整数Ｉｉと、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，０と（Ｄ＋２）×Ｌ個の元ｙ’ｎ，ｉとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ以下のＬ個の整数ｉとの組である（Ｄ＋２）×Ｌ個の組（ｎ，ｉ）それぞれについて、上記元ｙ’ｎ，ｉのＩｉ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，０と、Ｌ個の元ｙ’ｎ，ｉのＩｉ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ΠＹ，ｎを算出し、
上記検索元算出部は、上記処理装置を用いて、上記秘密元ダブリュー記憶部が記憶した１個の元ｗ’と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ΠＹ，ｎのρｎ乗を計算し、上記元ｗ’と、（Ｄ＋２）個の元ΠＹ，ｎのρｎ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ０を算出し、
上記検索元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）を算出し、
上記検索元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を算出し、
上記攪乱元算出部は、上記処理装置を用いて、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ΠＹ，ｎのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ΠＹ，ｎのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０を算出し、
上記攪乱元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ａ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を算出し、
上記攪乱元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｂ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を算出し、
上記委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λ（ΛはＬ超Ｄ以下の整数のうちから選択した１個の整数。）と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，Λのρｎ乗を計算し、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｈΛを算出し、
上記副委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｙ’ｎ，Λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｈｍ，Λを算出し、
上記ユーザ秘密鍵出力部は、上記処理装置を用いて、上記クエリ発行装置のユーザ秘密鍵として、上記検索元算出部が算出した１個の元ｋ０と、上記検索元エー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部が算出した１個の元ｈΛと、上記副委任元算出部が算出した（Ｄ＋２）個の元ｈｍ，Λとの組を出力することを特徴とするユーザ秘密鍵生成方法。
【請求項１３】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで、キーワードを検索するためのクエリをクエリ発行装置が生成するクエリ発行方法において、
上記クエリ発行装置は、データを記憶する記憶装置と、データを処理する処理装置と、ユーザ識別子記憶部と、検索元記憶部と、検索元エー記憶部と、検索元ビー記憶部と、攪乱元記憶部と、攪乱元エー記憶部と、攪乱元ビー記憶部と、委任元記憶部と、副委任元記憶部と、検索キーワード入力部と、乱数パイ選択部と、質問元算出部と、質問元エー算出部と、質問元ビー算出部と、クエリ出力部とを有し、
上記ユーザ識別子記憶部は、上記記憶装置を用いて、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを記憶し、
上記検索元記憶部は、上記記憶装置を用いて、上記クエリ発行装置のユーザ秘密鍵の一部として、位数がｐである乗法群Ｇ２の元である１個の元ｋ０を記憶し、
上記検索元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）（ｎは０以上Ｄ＋１以下の整数。）を記憶し、
上記検索元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を記憶し、
上記攪乱元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０（ｍは０以上Ｄ＋１以下の整数。）を記憶し、
上記攪乱元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を記憶し、
上記攪乱元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を記憶し、
上記委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である１個の元ｈΛ（ΛはＬ超Ｄ以下の整数のうちから選択した１個
の整数。）を記憶し、
上記副委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵の一部として、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｈｍ，Λを記憶し、
上記検索キーワード入力部は、上記処理装置を用いて、検索するキーワードとして、０以上ｐ未満の１個の整数Ｗを入力し、
上記乱数パイ選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数πｍをランダムに選択し、
上記質問元算出部は、上記処理装置を用いて、上記検索元記憶部が記憶した１個の元ｋ０と、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部が記憶した１個の元ｈΛと、上記副委任元記憶部が記憶した（Ｄ＋２）個の元ｈｍ，Λと、上記検索キーワード入力部が入力した１個の整数Ｗと、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Λのπｍ乗を計算し、上記元ｈΛと、（Ｄ＋２）個の元ｈｍ，Λのπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＷ乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＷ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ’０を算出し、
上記質問元エー算出部は、上記処理装置を用いて、上記検索元エー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記攪乱元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ａ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）を算出し、
上記質問元ビー算出部は、上記処理装置を用いて、上記検索元ビー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ｂ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を算出し、
上記クエリ出力部は、上記処理装置を用いて、上記ユーザ識別子記憶部が記憶したＬ個の整数Ｉｉと、上記質問元算出部が算出した１個の元ｋ’０と、上記質問元エー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を、上記整数Ｗをキーワードとして検索するためのクエリとして出力することを特徴とするクエリ発行方法。
【請求項１４】
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムで、検索装置がキーワードを検索する検索方法において、
上記検索装置は、データを記憶する記憶装置と、データを処理する処理装置と、暗号文記憶部と、クエリ入力部と、ペアリング元算出部と、ペアリング元エー算出部と、ペアリング元ビー算出部と、比較元算出部と、比較部とを有し、
上記暗号文記憶部は、上記記憶装置を用いて、キーワードが埋め込まれた暗号文として、位数がｐである乗法群Ｇ３の元である１個の元Ｒと、上記乗法群Ｇ３の元である１個の元Ｅと、位数がｐである乗法群Ｇ１の元である１個の元ｃ０と、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）と、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ｂ）と、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）（Ｌ’は１以上Ｄ未満の任意の整数。Ｌ”は０以上Ｌ’以下の任意の整数。ｊ’は１以上Ｌ’以下の整数のなかから任意に選択した（Ｌ’−Ｌ”）個の整数。）と、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）との組を記憶し、
上記クエリ入力部は、上記処理装置を用いて、キーワードを検索するクエリとして、Ｌ個の整数Ｉｉと、位数がｐである乗法群Ｇ２の元である１個の元ｋ’０と、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を入力し、
上記ペアリング元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元ｃ０と、上記クエリ入力部が入力したクエリに含まれる１個の元ｋ’０とに基づいて、上記乗法群Ｇ１の元と上記乗法群Ｇ２の元との組を上記乗法群Ｇ３の元へ写像する双線形ペアリングｅにより上記元ｃ０と上記元ｋ’０との組を写像することにより、上記乗法群Ｇ３の元である１個の元ｅ０を算出し、
上記ペアリング元エー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ａ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ａ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ａ）とＬＡ個の元ｃｎ，ｉ’，（ａ）のＩｉ’乗との総積ΠＡ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＡ’，ｎと上記元ｋ’ｎ，（ａ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＡ，ｎを算出し、
上記ペアリング元ビー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ｂ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ｂ）とＬＡ個の元ｃｎ，ｉ’，（ｂ）のＩｉ’乗との総積ΠＢ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＢ’，ｎと上記元ｋ’ｎ，（ｂ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＢ，ｎを算出し、
上記比較元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｅと、上記ペアリング元算出部が算出した１個の元ｅ０と、上記ペアリング元エー算出部が算出した（Ｄ＋２）個の元ｅＡ，ｎと、上記ペアリング元ビー算出部が算出した（Ｄ＋２）個の元ｅＢ，ｎとに基づいて、上記元Ｅと、上記元ｅ０と、（Ｄ＋２）個の元ｅＡ，ｎと、（Ｄ＋２）個の元ｅＢ，ｎとの総積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｒ’を算出し、
上記比較部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｒと、上記比較元算出部が算出した１個の元Ｒ’とを比較して、元Ｒと元Ｒ’とが一致する場合に、検索にヒットしたと判定することを特徴とする検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、検索するキーワードを暗号化したままの状態で検索する秘匿検索システムに関する。
【背景技術】
【０００２】
キーワードを暗号化したままの状態で検索できる検索可能公開鍵暗号技術がある。従来の検索可能公開鍵暗号技術では、ユーザの持つ秘密鍵に対応するユーザの公開鍵を使用して、キーワードを暗号化しておく。
また、ユーザを識別する識別子を公開鍵として使用するＩＤベース公開鍵暗号方式において、ユーザ識別子の一部のみを指定し、暗号文を複数の異なる秘密鍵を持つユーザが解読可能とするワイルドカードＩＤベース公開鍵暗号技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許４４０５８２９号
【非特許文献】
【０００４】
【非特許文献１】Ｄ．Ｂｏｎｅｈ、Ｇ．Ｄ．Ｃｒｅｓｃｅｎｚｏ、Ｒ．Ｏｓｔｒｏｖｓｋｙ、  Ｇ．Ｐｅｒｓｉａｎｏ「Ｐｕｂｌｉｃ  Ｋｅｙ  Ｅｎｃｒｙｐｔｉｏｎ  ｗｉｔｈ  Ｋｅｙｗｏｒｄ  Ｓｅａｒｃｈ」Ｅｕｒｏｃｒｙｐｔ  ２００４、５０６〜５２２ページ、２００４年。
【非特許文献２】Ｙ．Ｈ．Ｈｗａｎｇ、Ｐ．Ｊ．Ｌｅｅ「Ｐｕｂｌｉｃ  Ｋｅｙ  Ｅｎｃｒｙｐｔｉｏｎ  ｗｉｔｈ  Ｃｏｎｊｕｎｃｔｉｖｅ  Ｋｅｙｗｏｒｄ  Ｓｅａｒｃｈ  Ａｎｄ  Ｉｔｓ  Ｅｘｔｅｎｓｉｏｎ  ｔｏ  ａ  Ｍｕｌｔｉ−ｕｓｅｒ  Ｓｙｓｔｅｍ」Ｐａｉｒｉｎｇ  ２００７、２〜２２ページ、２００７年。
【非特許文献３】Ｊ．Ｂｉｒｋｅｔｔ、Ａ．Ｗ．Ｄｅｎｔ、Ｇ．Ｎｅｖｅｎ、Ｊ．Ｃ．Ｎ．Ｓｃｈｕｌｄｔ「Ｅｆｆｉｃｉｅｎｔ  Ｃｈｏｓｅｎ−Ｃｉｐｈｅｒｔｅｘｔ  Ｓｅｃｕｒｅ  Ｉｄｅｎｔｉｔｙ−Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  ｗｉｔｈ  Ｗｉｌｄｃａｒｄｓ」ＡＣＩＳＰ  ２００７、ＬＮＣＳ４５８６、２７４〜２９２ページ、２００７年。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来の検索可能公開鍵暗号技術では、複数のユーザがいる場合、それぞれのユーザの公開鍵を使用して、キーワードを暗号化する必要がある。このため、暗号文のサイズは、検索するユーザの数に比例する。また、新しいユーザを追加するには、そのユーザの公開鍵を使用して、新たに暗号文を生成する必要がある。
この発明は、例えば上記のような課題を解決するためになされたものであり、暗号文のサイズを小さくし、新たなユーザが追加された場合でも、新たな暗号文を生成する必要がなく、ユーザの追加が容易な秘匿検索システムを得ることを目的とする。
【課題を解決するための手段】
【０００６】
この発明にかかる秘匿検索システムは、
キーワードを暗号化し、Ｄ個（Ｄは２以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子として持つ複数のクエリ発行装置のうち少なくともいずれかのクエリ発行装置からの要求に基づいて、暗号化したままのキーワードを検索する秘匿検索システムにおいて、
公開パラメータ生成装置と、暗号化装置と、ユーザ秘密鍵生成装置と、クエリ発行装置と、検索装置とを有し、
上記公開パラメータ生成装置は、データを処理する処理装置と、乱数オメガ選択部と、乱数アルファ選択部と、乱数ベータ選択部と、乱数シータ選択部と、公開元オメガ算出部と、公開元エー算出部と、公開元ビー算出部と、秘密元ダブリュー算出部と、秘密元エー算出部と、秘密元ビー算出部と、秘密元ワイ算出部と、公開パラメータ出力部と、マスタ秘密鍵出力部とを有し、
上記乱数オメガ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、１個の整数ωをランダムに選択し、
上記乱数アルファ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数αｎ（ｎは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記乱数ベータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数βｎをランダムに選択し、
上記乱数シータ選択部は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌ（ｌは０以上Ｄ以下の整数。）をランダムに選択し、
上記公開元エー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ１の生成元ｇ１と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（αｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを算出し、
上記公開元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを算出し、
上記秘密元ダブリュー算出部は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ２の生成元ｇ２と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記生成元ｇ２のω乗を計算することにより、上記乗法群Ｇ２の元である１個の元ｗ’を算出し、
上記公開元オメガ算出部は、上記処理装置を用いて、上記乗法群Ｇ１の元と上記乗法群Ｇ２の元との組を位数がｐである乗法群Ｇ３の元へ写像する双線形ペアリングｅにより上記乗法群Ｇ１の生成元ｇ１と上記乗法群Ｇ２の生成元ｇ２との組を写像した上記乗法群Ｇ３の元ｇ３と、上記乱数オメガ選択部が選択した１個の整数ωとに基づいて、上記元ｇ３のω乗を計算することにより、上記乗法群Ｇ３の元である１個の元Ωを算出し、
上記秘密元エー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のαｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎを算出し、
上記秘密元ビー算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のβｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎを算出し、
上記秘密元ワイ算出部は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部が選択した（Ｄ＋２）個の整数αｎと、上記乱数ベータ選択部が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ２の（αｎ×βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを算出し、
上記公開パラメータ出力部は、上記処理装置を用いて、上記秘匿検索システムにおける公開パラメータとして、上記公開元オメガ算出部が算出した１個の元Ωと、上記公開元エー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌと、上記公開元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌとを出力し、
上記マスタ秘密鍵出力部は、上記処理装置を用いて、上記秘匿検索システムにおけるマスタ秘密鍵として、上記秘密元ダブリュー算出部が算出した１個の元ｗ’と、上記秘密元エー算出部が算出した（Ｄ＋２）個の元ａ’ｎと、上記秘密元ビー算出部が算出した（Ｄ＋２）個の元ｂ’ｎと、上記秘密元ワイ算出部が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを出力し、
上記暗号化装置は、データを記憶する記憶装置と、データを処理する処理装置と、公開元オメガ記憶部と、公開元エー記憶部と、公開元ビー記憶部と、埋込みキーワード入力部と、権限範囲入力部と、乱数アール選択部と、副乱数アール選択部と、乱数元選択部と、検証元算出部と、暗号元算出部と、暗号元エー算出部と、暗号元ビー算出部と、暗号部分元エー算出部と、暗号部分元ビー算出部と、暗号文出力部とを有し、
上記公開元オメガ記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した１個の元Ωを記憶し、
上記公開元エー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを記憶し、
上記公開元ビー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置が公開パラメータとして出力した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを記憶し、
上記埋込みキーワード入力部は、上記処理装置を用いて、暗号化するキーワードとして、０以上ｐ未満の１個の整数Ｗ’を入力し、
上記権限範囲入力部は、上記処理装置を用いて、キーワードを検索する権限を持つクエリ発行装置の範囲を指定するデータとして、１個の整数Ｌ’（Ｌ’は１以上Ｄ未満の任意の整数。）と、Ｌ”個の整数Ｉ’ｊ（Ｌ”は０以上Ｌ’以下の任意の整数。ｊは１以上Ｌ’以下の整数のなかから任意に選択したＬ”個の整数。Ｉ’ｊは０以上ｐ未満の整数。）とを入力し、
上記乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、１個の整数ｒをランダムに選択し、
上記副乱数アール選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ｒｎをランダムに選択し、
上記乱数元選択部は、上記処理装置を用いて、上記乗法群Ｇ３の元のなかから、１個の元Ｒをランダムに選択し、
上記検証元算出部は、上記処理装置を用いて、上記公開元オメガ記憶部が記憶した１個の元Ωと、上記乱数アール選択部が選択した１個の整数ｒと、上記乱数元選択部が選択した１個の元Ｒとに基づいて、上記元Ωの（−ｒ）乗と、上記元Ｒとの積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｅを算出し、
上記暗号元算出部は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数アール選択部が選択した整数ｒとに基づいて、上記生成元ｇ１のｒ乗を計算することにより、上記乗法群Ｇ１の元である１個の元ｃ０を算出し、
上記暗号元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）個の元ｂｎ，０と（Ｄ＋２）×Ｌ”個の元ｂｎ，ｊと（Ｄ＋２）個の元ｂｎ，Λ’（Λ’はＬ’超Ｄ以下の整数のうちから選択した１個の整数。）と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ｂｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，０とＬ”個の元ｂｎ，ｊのＩ’ｊ乗と元ｂｎ，Λ’のＷ’乗との総積ΠＢ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＢ，ｎのｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）を算出し、
上記暗号元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）個の元ａｎ，０と（Ｄ＋２）×Ｌ”個の元ａｎ，ｊと（Ｄ＋２）個の元ａｎ，Λ’と、上記埋込みキーワード入力部が入力した１個の整数Ｗ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ａｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，０とＬ”個の元ａｎ，ｊのＩ’ｊ乗と元ａｎ，Λ’のＷ’乗との総積ΠＡ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＡ，ｎの（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ｂ）を算出し、
上記暗号部分元エー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｂｎ，ｊ’（ｊ’は１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数。）と、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ｂｎ，ｊ’のｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）を算出し、
上記暗号部分元ビー算出部は、上記処理装置を用いて、上記権限範囲入力部が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ａｎ，ｊ’と、上記乱数アール選択部が選択した１個の整数ｒと、上記副乱数アール選択部が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ａｎ，ｊ’の（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）を算出し、
上記暗号文出力部は、上記処理装置を用いて、上記整数Ｗ’をキーワードとして埋め込んだ暗号文として、上記乱数元選択部が選択した１個の元Ｒと、上記検証元算出部が算出した１個の元Ｅと、上記暗号元算出部が算出した１個の元ｃ０と、上記暗号元エー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ａ）と、上記暗号元ビー算出部が算出した（Ｄ＋２）個の元ｃｎ，（ｂ）と、上記暗号部分元エー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記暗号部分元ビー算出部が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）とを出力し、
上記ユーザ秘密鍵生成装置は、データを記憶する記憶装置と、データを処理する処理装置と、秘密元ダブリュー記憶部と、秘密元エー記憶部と、秘密元ビー記憶部と、秘密元ワイ記憶部と、ユーザ識別子入力部と、乱数ロー選択部と、副乱数ロー選択部と、総積元ワイ算出部と、検索元算出部と、検索元エー算出部と、検索元ビー算出部と、攪乱元算出部と、攪乱元エー算出部と、攪乱元ビー算出部と、委任元算出部と、副委任元算出部と、ユーザ秘密鍵出力部とを有し、
上記秘密元ダブリュー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した１個の元ｗ’を記憶し、
上記秘密元エー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）個の元ａ’ｎを記憶し、
上記秘密元ビー記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）個の元ｂ’ｎを記憶し、
上記秘密元ワイ記憶部は、上記記憶装置を用いて、上記公開パラメータ生成装置がマスタ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを記憶し、
上記ユーザ識別子入力部は、上記処理装置を用いて、上記複数のクエリ発行装置のうちユーザ秘密鍵の生成を要求するクエリ発行装置について、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを入力し、
上記乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ρｎをランダムに選択し、
上記副乱数ロー選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍ（ｍは０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記総積元ワイ算出部は、上記処理装置を用いて、上記ユーザ識別子入力部が入力したＬ個の整数Ｉｉと、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，０と（Ｄ＋２）×Ｌ個の元ｙ’ｎ，ｉとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ以下のＬ個の整数ｉとの組である（Ｄ＋２）×Ｌ個の組（ｎ，ｉ）それぞれについて、上記元ｙ’ｎ，ｉのＩｉ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，０と、Ｌ個の元ｙ’ｎ，ｉのＩｉ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ΠＹ，ｎを算出し、
上記検索元算出部は、上記処理装置を用いて、上記秘密元ダブリュー記憶部が記憶した１個の元ｗ’と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ΠＹ，ｎのρｎ乗を計算し、上記元ｗ’と、（Ｄ＋２）個の元ΠＹ，ｎのρｎ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ０を算出し、
上記検索元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）を算出し、
上記検索元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を算出し、
上記攪乱元算出部は、上記処理装置を用いて、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍと、上記総積元ワイ算出部が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ΠＹ，ｎのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ΠＹ，ｎのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０を算出し、
上記攪乱元エー算出部は、上記処理装置を用いて、上記秘密元エー記憶部が記憶した（Ｄ＋２）個の元ａ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ａ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を算出し、
上記攪乱元ビー算出部は、上記処理装置を用いて、上記秘密元ビー記憶部が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｂ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を算出し、
上記委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λ（ΛはＬ超Ｄ以下の整数のなかから選択した１個の整数。）と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，Λのρｎ乗を計算し、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｈΛを算出し、
上記副委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｙ’ｎ，Λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｈｍ，Λを算出し、
上記ユーザ秘密鍵出力部は、上記処理装置を用いて、上記クエリ発行装置のユーザ秘密鍵として、上記検索元算出部が算出した１個の元ｋ０と、上記検索元エー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部が算出した１個の元ｈΛと、上記副委任元算出部が算出した（Ｄ＋２）個の元ｈｍ，Λとの組を出力し、
上記クエリ発行装置は、データを記憶する記憶装置と、データを処理する処理装置と、ユーザ識別子記憶部と、検索元記憶部と、検索元エー記憶部と、検索元ビー記憶部と、攪乱元記憶部と、攪乱元エー記憶部と、攪乱元ビー記憶部と、委任元記憶部と、副委任元記憶部と、検索キーワード入力部と、乱数パイ選択部と、質問元算出部と、質問元エー算出部と、質問元ビー算出部と、クエリ出力部とを有し、
上記ユーザ識別子記憶部は、上記記憶装置を用いて、上記クエリ発行装置のユーザ識別子として、Ｌ個の整数Ｉｉを記憶し、
上記検索元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した１個の元ｋ０を記憶し、
上記検索元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｋｎ，（ａ）（ｎは０以上Ｄ＋１以下の整数。）を記憶し、
上記検索元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｋｎ，（ｂ）を記憶し、
上記攪乱元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｆｍ，０（ｍは０以上Ｄ＋１以下の整数。）を記憶し、
上記攪乱元エー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を記憶し、
上記攪乱元ビー記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を記憶し、
上記委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した１個の元ｈΛを記憶し、
上記副委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｈｍ，Λを記憶し、
上記検索キーワード入力部は、上記処理装置を用いて、検索するキーワードとして、０以上ｐ未満の１個の整数Ｗを入力し、
上記乱数パイ選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数πｍをランダムに選択し、
上記質問元算出部は、上記処理装置を用いて、上記検索元記憶部が記憶した１個の元ｋ０と、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部が記憶した１個の元ｈΛと、上記副委任元記憶部が記憶した（Ｄ＋２）個の元ｈｍ，Λと、上記検索キーワード入力部が入力した１個の整数Ｗと、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Λのπｍ乗を計算し、上記元ｈΛと、（Ｄ＋２）個の元ｈｍ，Λのπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＷ乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＷ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ’０を算出し、
上記質問元エー算出部は、上記処理装置を用いて、上記検索元エー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記攪乱元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ａ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）を算出し、
上記質問元ビー算出部は、上記処理装置を用いて、上記検索元ビー記憶部が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ｂ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を算出し、
上記クエリ出力部は、上記処理装置を用いて、上記ユーザ識別子記憶部が記憶したＬ個の整数Ｉｉと、上記質問元算出部が算出した１個の元ｋ’０と、上記質問元エー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を、上記整数Ｗをキーワードとして検索するためのクエリとして出力し、
上記検索装置は、データを記憶する記憶装置と、データを処理する処理装置と、暗号文記憶部と、クエリ入力部と、ペアリング元算出部と、ペアリング元エー算出部と、ペアリング元ビー算出部と、比較元算出部と、比較部とを有し、
上記暗号文記憶部は、上記記憶装置を用いて、キーワードが埋め込まれた暗号文として、上記暗号化装置が出力した暗号文に含まれる１個の元Ｒと１個の元Ｅと１個の元ｃ０と（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）との組を記憶し、
上記クエリ入力部は、上記処理装置を用いて、キーワードを検索するクエリとして、上記クエリ発行装置が出力したＬ個の整数Ｉｉと１個の元ｋ’０と（Ｄ＋２）個の元ｋ’ｎ，（ａ）と（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を入力し、
上記ペアリング元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元ｃ０と、上記クエリ入力部が入力したクエリに含まれる１個の元ｋ’０とに基づいて、上記双線形ペアリングｅにより上記元ｃ０と上記元ｋ’０との組を写像することにより、上記乗法群Ｇ３の元である１個の元ｅ０を算出し、
上記ペアリング元エー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ａ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ａ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ａ）とＬＡ個の元ｃｎ，ｉ’，（ａ）のＩｉ’乗との総積ΠＡ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＡ’，ｎと上記元ｋ’ｎ，（ａ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＡ，ｎを算出し、
上記ペアリング元ビー算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）と、上記クエリ入力部が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ｂ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ｂ）とＬＡ個の元ｃｎ，ｉ’，（ｂ）のＩｉ’乗との総積ΠＢ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＢ’，ｎと上記元ｋ’ｎ，（ｂ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＢ，ｎを算出し、
上記比較元算出部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｅと、上記ペアリング元算出部が算出した１個の元ｅ０と、上記ペアリング元エー算出部が算出した（Ｄ＋２）個の元ｅＡ，ｎと、上記ペアリング元ビー算出部が算出した（Ｄ＋２）個の元ｅＢ，ｎとに基づいて、上記元Ｅと、上記元ｅ０と、（Ｄ＋２）個の元ｅＡ，ｎと、（Ｄ＋２）個の元ｅＢ，ｎとの総積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｒ’を算出し、
上記比較部は、上記処理装置を用いて、上記暗号文記憶部が記憶した暗号文に含まれる１個の元Ｒと、上記比較元算出部が算出した１個の元Ｒ’とを比較して、元Ｒと元Ｒ’とが一致する場合に、検索にヒットしたと判定することを特徴とする。
【０００７】
この発明にかかる秘匿検索システムは、更に、
上記委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）×（Ｄ’−Ｌ）個（Ｄ’はＬ超Ｄ以下の整数。）の元ｙ’ｎ，λ（λはＬ超Ｄ’以下の整数。）と、上記乱数ロー選択部が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｎ，λ）それぞれについて、上記元ｙ’ｎ，λのρｎ乗を計算し、Ｌ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ’−Ｌ）個の元ｈλを算出し、
上記副委任元算出部は、上記処理装置を用いて、上記秘密元ワイ記憶部が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｙ’ｎ，λと、上記副乱数ロー選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｎ，ｍ，λ）それぞれについて、上記元ｙ’ｎ，λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｍ，λ）それぞれについて、（Ｄ＋２）個の元ｙ’ｎ，λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを算出し、
上記ユーザ秘密鍵出力部は、上記処理装置を用いて、上記クエリ発行装置のユーザ秘密鍵として、上記検索元算出部が算出した１個の元ｋ０と、上記検索元エー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部が算出した（Ｄ’−Ｌ）個の元ｈλと、上記副委任元算出部が算出した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λとの組を出力し、
上記クエリ発行装置は、更に、子ユーザ識別子入力部と、副乱数パイ選択部と、子検索元算出部と、子攪乱元算出部と、子攪乱元エー算出部と、子攪乱元ビー算出部と、子委任元算出部と、子副委任元算出部と、子ユーザ秘密鍵出力部とを有し、
上記委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ’−Ｌ）個の元ｈλを記憶し、
上記副委任元記憶部は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを記憶し、
上記子ユーザ識別子入力部は、上記処理装置を用いて、０以上ｐ未満の１個の整数ＩＬ＋１を入力し、
上記副乱数パイ選択部は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’（ｍ’は０以上Ｄ＋１以下の整数。）をランダムに選択し、
上記子検索元算出部は、上記処理装置を用いて、上記検索元記憶部が記憶した１個の元ｋ０と、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部が記憶した（Ｄ’−Ｌ）個の元ｈλのうち１個の元ｈＬ＋１と、上記副委任元記憶部が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）個の元ｈｍ，Ｌ＋１と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍと、上記子ユーザ識別子入力部が入力した整数ＩＬ＋１とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Ｌ＋１のπｍ乗を計算し、上記元ｈＬ＋１と、（Ｄ＋２）個の元ｈｍ，Ｌ＋１のπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＩＬ＋１乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＩＬ＋１乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ”０を算出し、
上記子攪乱元算出部は、上記処理装置を用いて、上記攪乱元記憶部が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記副委任元記憶部が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）個の元ｈｍ，Ｌ＋１と、上記副乱数パイ選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の組（ｍ，ｍ’）それぞれについて、上記元ｆｍ，０のπｍ，ｍ’乗と、上記元ｈｍ，Ｌ＋１のπｍ，ｍ’乗とを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、（Ｄ＋２）個の元ｈｍ，Ｌ＋１のπｍ，ｍ’乗の総積ΠＨ，ｍ’を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、上記総積ΠＨ，ｍ’のＩＬ＋１乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、（Ｄ＋２）個の元ｆｍ，０のπｍ，ｍ’乗と、上記総積ΠＨ，ｍ’のＩＬ＋１乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆ’ｍ’，０を算出し、
上記子攪乱元エー算出部は、上記処理装置を用いて、上記攪乱元エー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記副乱数パイ選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の（ｎ，ｍ，ｍ’）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の（ｎ，ｍ’）それぞれについて、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を算出し、
上記子攪乱元ビー算出部は、上記処理装置を用いて、上記攪乱元ビー記憶部が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記副乱数パイ選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の（ｎ，ｍ，ｍ’）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の（ｎ，ｍ’）それぞれについて、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を算出し、
上記子委任元算出部は、上記処理装置を用いて、上記委任元記憶部が記憶した（Ｄ’−Ｌ）個の元ｈλのうち（Ｄ”−Ｌ−１）個（Ｄ”は（Ｌ＋１）超Ｄ’以下の整数。）の元ｈλ’（λ’は（Ｌ＋１）超Ｄ”以下の整数。）と、上記副委任元記憶部が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’と、上記乱数パイ選択部が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ，λ’）それぞれについて、上記元ｈｍ，λ’のπｍ乗を計算し、（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’それぞれについて、上記元ｈλ’と、（Ｄ＋２）個の元ｈｍ，λ’のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ”−Ｌ−１）個の元ｈ’λ’を算出し、
上記子副委任元算出部は、上記処理装置を用いて、上記副委任元記憶部が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’と、上記副乱数パイ選択部が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’と（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ，ｍ’，λ’）それぞれについて、上記元ｈｍ，λ’のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’と（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ’，λ’）それぞれについて、（Ｄ＋２）個の元ｈｍ，λ’のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を算出し、
上記子ユーザ秘密鍵出力部は、上記ユーザ識別子記憶部が記憶したＬ個の整数Ｉｉと上記子ユーザ識別子入力部が入力した１個の整数ＩＬ＋１とをユーザ識別子として持つ他のクエリ発行装置のユーザ秘密鍵として、上記子検索元算出部が算出した１個の元ｋ”０と、上記質問元エー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）と、上記子攪乱元算出部が算出した（Ｄ＋２）個の元ｆ’ｍ’，０と、上記子攪乱元エー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）と、上記子攪乱元ビー算出部が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）と、上記子委任元算出部が算出した（Ｄ”−Ｌ−１）個の元ｈ’λ’と、上記子副委任元算出部が算出した（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’との組を出力することを特徴とする。
【発明の効果】
【０００８】
この発明によれば、ユーザ識別子の一部のみを指定した暗号文を生成し、その暗号文を検索できるクエリを、指定された部分が一致する複数のユーザが生成できるので、暗号文のサイズが小さくなり、新たなユーザが追加された場合でも、新たな暗号文を生成する必要がない。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１における秘匿検索システム８００の全体構成の一例を示すシステム構成図。
【図２】実施の形態１におけるユーザＩＤ６００ａ〜６００ｎの一例を示す図。
【図３】実施の形態１における権限範囲６１０の指定方式の一例を示す図。
【図４】実施の形態１における公開パラメータ生成装置１００、ユーザ秘密鍵生成装置２００、クエリ発行装置３００、暗号化装置４００、検索装置５００の外観の一例を示す斜視図。
【図５】実施の形態１における公開パラメータ生成装置１００、ユーザ秘密鍵生成装置２００、クエリ発行装置３００、暗号化装置４００、検索装置５００のハードウェア資源の一例を示す図。
【図６】実施の形態１における公開パラメータ生成装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図７】実施の形態１における公開パラメータ生成処理Ｓ６３０の流れの一例を示すフローチャート図。
【図８】実施の形態１におけるユーザ秘密鍵生成装置２００の機能ブロックの構成の一例を示すブロック構成図。
【図９】実施の形態１におけるユーザ秘密鍵生成処理Ｓ６６０の流れの一例を示すフローチャート図。
【図１０】実施の形態１におけるクエリ発行装置３００の機能ブロックの構成の一例を示すブロック構成図。
【図１１】実施の形態１におけるクエリ発行装置３００のうちユーザ秘密鍵記憶部３２０・共通処理部３３０・クエリ生成部３５０の詳細なブロック構成の一例を示す詳細ブロック図。
【図１２】実施の形態１における共通処理Ｓ７１０の流れの一例を示すフローチャート図。
【図１３】実施の形態１におけるクエリ生成処理Ｓ７３０の流れの一例を示すフローチャート図。
【図１４】実施の形態１におけるクエリ発行装置３００のうち子ユーザ秘密鍵生成部３７０の詳細なブロック構成の一例を示す詳細ブロック図。
【図１５】実施の形態１における子ユーザ秘密鍵生成処理Ｓ７４０の流れの一例を示すフローチャート図。
【図１６】実施の形態１における暗号化装置４００の機能ブロックの構成の一例を示すブロック構成図。
【図１７】実施の形態１における暗号化装置４００のうち、公開パラメータ記憶部４２０、権限範囲記憶部４３０、暗号文生成部４５０の詳細な構成の一例を示す詳細ブロック図。
【図１８】実施の形態１における暗号文生成処理Ｓ８５０の流れの一例を示すフローチャート図。
【図１９】実施の形態１における検索装置５００の機能ブロックの構成の一例を示すブロック構成図。
【図２０】実施の形態１における検索装置５００のうち暗号文記憶部５３０、クエリ記憶部５４０、検索部５５０の詳細な構成の一例を示す詳細ブロック図。
【図２１】実施の形態１における比較元生成処理Ｓ８８０の流れの一例を示すフローチャート図。
【図２２】実施の形態２における秘匿検索システム８００の全体構成の一例を示すシステム構成図。
【図２３】実施の形態２におけるクエリ発行装置３００の機能ブロックの構成の一例を示すブロック構成図。
【図２４】実施の形態２における暗号化装置４００の機能ブロックの構成の一例を示すブロック構成図。
【図２５】実施の形態２における暗号化装置４００のうち、公開パラメータ記憶部４２０、暗号文生成部４５０の詳細な機能ブロックの構成の一例を示す詳細ブロック図。
【図２６】実施の形態２における検索装置５００のうち、暗号文記憶部５３０、クエリ記憶部５４０、検索部５５０の詳細な機能ブロックの構成の一例を示す詳細ブロック図。
【発明を実施するための形態】
【００１０】
実施の形態１．
実施の形態１について、図１〜図２１を用いて説明する。
【００１１】
図１は、この実施の形態における秘匿検索システム８００の全体構成の一例を示すシステム構成図である。
秘匿検索システム８００は、暗号化されているなど内容を直接見ることができないデータを検索するシステムである。秘匿検索システム８００は、データの内容を直接検索する代わりに、データに対応づけられたキーワードを検索する。１つのデータに対応づけられるキーワードは、１つでもよいし、複数でもよい。秘匿検索システム８００は、あらかじめ、キーワードを暗号化して暗号文を生成しておく。利用者は、検索したいキーワードを暗号化してクエリを生成する。秘匿検索システム８００は、暗号文やクエリを復号することなく、暗号文に埋め込まれたキーワードと、利用者が指定したキーワードとが一致するか否かを判定する。したがって、検索の過程において、データに対応づけられたキーワードが何なのか、利用者が検索しているキーワードが何なのかはわからない。
秘匿検索システム８００には、複数の利用者がいる。利用者はそれぞれ異なるユーザ識別子（以下「ユーザＩＤ」と呼ぶ。）を有する。秘匿検索システム８００は、キーワードを暗号化するに当たり、そのキーワードを検索する権限を有する利用者の範囲を限定することができる。クエリが検索権限のない利用者からのクエリである場合、検索したキーワードが、暗号文に埋め込まれたキーワードと一致したとしても、秘匿検索システム８００は、キーワードが一致しないと判定する。
【００１２】
秘匿検索システム８００は、グループ公開鍵生成装置８１０、キーワード記憶装置８２０、クエリ発行装置群８３０、暗号化装置４００、検索装置５００を有する。
グループ公開鍵生成装置８１０は、秘匿検索システム８００で使用する暗号の公開鍵などの公開パラメータや秘密鍵などを生成する。グループ公開鍵生成装置８１０は、公開パラメータ生成装置１００、ユーザ秘密鍵生成装置２００を有する。
キーワード記憶装置８２０は、暗号化すべきキーワードを記憶している。キーワード記憶装置８２０は、キーワードだけでなく、キーワードが対応づけられたデータそのものを記憶していてもよいし、キーワードが対応づけられたデータの所在を表わす情報を記憶していてもよい。
暗号化装置４００は、グループ公開鍵生成装置８１０が生成した公開鍵などの公開パラメータを使用して、キーワード記憶装置８２０が記憶したキーワードを暗号化することにより、暗号文を生成する。
検索装置５００は、暗号化装置４００が生成した暗号文を記憶しておく。検索装置５００は、クエリ発行装置３００からクエリを受け取り、記憶した暗号文を検索して、その結果をクエリ発行装置３００に返す。
なお、秘匿検索システム８００は、暗号化装置４００や検索装置５００を複数有していてもよい。
【００１３】
クエリ発行装置群８３０は、複数のクエリ発行装置３００からなる。複数のクエリ発行装置３００は、階層的にグループ化されている。なお、複数のクエリ発行装置３００を区別するため、アルファベット小文字を添えて「クエリ発行装置３００ａ」「クエリ発行装置３００ｂ」などと呼ぶ場合がある。
各利用者は、自分のクエリ発行装置３００を持っている。一人の利用者が複数のユーザＩＤを有する場合、複数のユーザＩＤに対応して、複数のクエリ発行装置３００を有していてもよい。あるいは、物理的に１台のクエリ発行装置３００をユーザＩＤごとに切り替えて、仮想的に複数のクエリ発行装置３００として使用してもよい。
ユーザＩＤは、複数の部分に分けられる。分節したユーザＩＤの各部分は、利用者の階層的なグループ構造を表わす。以下、ユーザＩＤが分節された部分の数をＬと表わす。Ｌは、１以上の整数である。
ユーザＩＤが分節される部分の数Ｌは、ユーザＩＤごとに異なっていてもよい。ユーザＩＤが分節される部分の数Ｌは、階層構造におけるクエリ発行装置３００の階層を表わす。ユーザＩＤが分節される部分の数Ｌが小さいほど、そのクエリ発行装置３００は、階層構造の上位に位置する。逆に、ユーザＩＤが分節される部分の数が大きいほど、そのクエリ発行装置３００は、階層構造の下位に位置する。
【００１４】
図２は、この実施の形態におけるユーザＩＤ６００ａ〜６００ｎの一例を示す図である。
ユーザＩＤ６００ａは、クエリ発行装置３００ａの利用者のユーザＩＤである。クエリ発行装置３００ａは、階層構造の第１層に位置するので、ユーザＩＤ６００ａは、１つの部分６０１「ＡＢＣ」からなる。
ユーザＩＤ６００ｄは、クエリ発行装置３００ｄの利用者のユーザＩＤである。クエリ発行装置３００ｄは、階層構造の第２層に位置するので、ユーザＩＤ６００ｄは、２つの部分６０１，６０２「ＡＢＣ」「ａｂｃ」に分けられる。また、クエリ発行装置３００ｄは、クエリ発行装置３００ａの下位に位置するので、ユーザＩＤ６００ｄの第一の部分６０１は、ユーザＩＤ６００ａの第一の部分６０１と等しい。
このように、ユーザＩＤが分節される部分の数Ｌは、そのクエリ発行装置３００が階層構造の何層目に位置するかを表わす。また、階層構造の下位に位置するクエリ発行装置３００のユーザＩＤは、上位に位置するクエリ発行装置３００のユーザＩＤをすべて含む。
この例における１４台のクエリ発行装置３００は、大きく分けて３つのグループに分けられる。第一のグループは、ユーザＩＤの第一の部分６０１が「ＡＢＣ」であるグループである。第一のグループには、３台のクエリ発行装置３００ａ，３００ｄ，３００ｅが含まれる。第二のグループは、ユーザＩＤの第一の部分６０１が「ＤＥＦ」であるグループである。第二のグループには、１台のクエリ発行装置３００ｂが含まれる。第三のグループは、ユーザＩＤの第一の部分６０１が「ＧＨＩ」であるグループである。第三のグループには、１０台のクエリ発行装置３００ｃ，３００ｆ〜３００ｎが含まれる。
第三のグループに属する１０台のクエリ発行装置３００ｃ，３００ｆ〜３００ｎは、更に、３つのサブルグループに分けられる。第一のサブグループは、ユーザＩＤの第二の部分６０２が「ａｂｃ」であるグループである。第一のサブグループには、６台のクエリ発行装置３００ｆ，３００ｉ，３００ｊ，３００ｌ〜３００ｎが含まれる。第二のサブグループは、ユーザＩＤの第二の部分６０２が「ｄｅｆ」であるグループである。第二のサブグループには、１台のクエリ発行装置３００ｇが含まれる。第三のサブグループは、ユーザＩＤの第二の部分６０２が「ｇｈｉ」であるグループである。第三のサブグループには、２台のクエリ発行装置３００ｈ，３００ｋが含まれる。
【００１５】
図３は、この実施の形態における権限範囲６１０の指定方式の一例を示す図である。
権限範囲６１０の指定は、ユーザＩＤの全部または一部を指定することによって行う。この例において、「＊」は、ワイルドカードと呼ばれる特殊な値である。ワイルドカードは、ユーザＩＤのその部分がどんな値でもよいことを表わす。
例えば、権限範囲６１０ａは、ユーザＩＤの第一の部分６０１が「ＡＢＣ」であり、ユーザＩＤを分節した部分の数Ｌが２であるクエリ発行装置３００に検索の権限を与えることを意味する。権限範囲６１０ａにより、２台のクエリ発行装置３００ｄ，３００ｅに検索の権限が与えられる。
権限範囲６１０ｂは、ユーザＩＤの第一の部分６０１が「ＡＢＣ」であり、ユーザＩＤを分節した部分の数Ｌが１であるクエリ発行装置３００に検索の権限を与えることを意味する。権限範囲６１０ｂにより、１台のクエリ発行装置３００ａに検索の権限が与えられる。
権限範囲６１０ｃは、ユーザＩＤの第一の部分６０１が「ＧＨＩ」であり、第二の部分６０２が「ａｂｃ」であり、第三の部分６０３が「１２」であり、ユーザＩＤを分節した部分の数Ｌが４であるクエリ発行装置３００に検索の権限を与えることを意味する。権限範囲６１０ｃにより、３台のクエリ発行装置３００ｌ〜３００ｎに検索の権限が与えられる。
権限範囲６１０ｄは、ユーザＩＤの第二の部分６０２が「ｄｅｆ」であり、ユーザＩＤを分節した部分の数Ｌが２であるクエリ発行装置３００に検索の権限を与えることを意味する。権限範囲６１０ｄにより、２台のクエリ発行装置３００ｅ，３００ｇに検索の権限が与えられる。このように、ユーザＩＤの途中の部分だけを指定することにより、グループを横断的に権限を与えることもできる。
権限範囲６１０ｅは、ユーザＩＤの第二の部分６０２が「ａｂｃ」であり、ユーザＩＤを分節した部分の数Ｌが３であるクエリ発行装置３００に検索の権限を与えることを意味する。権限範囲６１０ｅにより、２台のクエリ発行装置３００ｉ，３００ｊに検索の権限を与えられる。
権限範囲６１０ｆは、ユーザＩＤを分節した部分の数Ｌが４であるクエリ発行装置３００に検索の権限を与えることを意味する。権限範囲６１０ｆにより、３台のクエリ発行装置３００ｌ〜３００ｎに検索の権限が与えられる。
権限範囲６１０ｇは、ユーザＩＤを分節した部分の数Ｌが２であるクエリ発行装置３００に検索の権限を与えることを意味する。権限範囲６１０ｇにより、５台のクエリ発行装置３００ｄ〜３００ｈに検索の権限が与えられる。
【００１６】
図４は、この実施の形態における公開パラメータ生成装置１００、ユーザ秘密鍵生成装置２００、クエリ発行装置３００、暗号化装置４００、検索装置５００の外観の一例を示す斜視図である。
公開パラメータ生成装置１００、ユーザ秘密鍵生成装置２００、クエリ発行装置３００、暗号化装置４００、検索装置５００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置９０１、キーボード９０２（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット９１０は、コンピュータであり、ファクシミリ機９３２、電話器９３１とケーブルで接続され、また、ローカルエリアネットワーク９４２（ＬＡＮ）、ゲートウェイ９４１を介してインターネット９４０に接続されている。
【００１７】
図５は、この実施の形態における公開パラメータ生成装置１００、ユーザ秘密鍵生成装置２００、クエリ発行装置３００、暗号化装置４００、検索装置５００のハードウェア資源の一例を示す図である。
公開パラメータ生成装置１００、ユーザ秘密鍵生成装置２００、クエリ発行装置３００、暗号化装置４００、検索装置５００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信装置９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。通信装置９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信装置９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００１８】
通信装置９１５は、ファクシミリ機９３２、電話器９３１、ＬＡＮ９４２等に接続されている。通信装置９１５は、ＬＡＮ９４２に限らず、インターネット９４０、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０或いはＩＳＤＮ等のＷＡＮに接続されている場合、ゲートウェイ９４１は不用となる。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００１９】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００２０】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００２１】
次に、以下の説明で用いる記号・用語について説明する。
【００２２】
ａ以上ｂ以下の整数の集合を「［ａ，ｂ］」と記述する。例えば、「［１，４］」は、「｛１，２，３，４｝」を意味する。また、ａが０の場合を、特に「［ｂ］」と記述する。例えば「［２］」は、「｛０，１，２｝」を意味する。
また、（ｘ＋１）個のＡｉ（ｉは、０以上ｘ以下の整数。）の組（Ａ０，Ａ１，…，Ａｘ）を、「（Ａｉ）ｉ∈［ｘ］」と記述する。
【００２３】
数学的な「群」とは、以下の性質を持つ集合と二項演算との組のことをいう。（１）二項演算は、２つの元の組を１つの元へ写像する。（２）二項演算は、結合法則を満たす。（３）単位元が存在する。（４）すべての元に逆元が存在する。
群の「二項演算」に言及する場合、乗法に関する記号や用語を用いる。例えば、元ａと元ｂとの組を二項演算で写像した結果として得られる元のことを「ａとｂとの積」と呼び、以下のいずれかの記号を用いて記述する。
【数１１】
0005269209.tif 000002
群の単位元のことを「１」と記述する。また、元ａの逆元のことを以下のいずれかの記号を用いて記述する。
【数１２】
0005269209.tif 000003
元ａと元ｂの逆元との組を二項演算で写像した結果として得られる元のことを「ａをｂで割った商」と呼び、以下のいずれかの記号を用いて記述する。
【数１３】
0005269209.tif 000004
ｎ個の同じ元ａを二項演算で繰り返し写像した結果として得られる元のことを「ａのｎ乗」と呼び、以下のいずれかの記号を用いて記述する。
【数１４】
0005269209.tif 000005
例えば、「ａの２乗」は「ａ・ａ」のことを表わし、「ａの４乗」は、「ａ・ａ・ａ・ａ」のことを表わす。
ｎ個の元ａ１〜ａｎを二項演算で繰り返し写像した結果として得られる元のことを「ａｉの総積」と呼び、以下のいずれかの記号を用いて記述する。
【数１５】
0005269209.tif 000006
例えば、「ａ１〜ａ４の総積」は「ａ１・ａ２・ａ３・ａ４」のことを表わす。また、「ａとｂとｃとの総積」または「ａとｂとｃとの積」は「ａ・ｂ・ｃ」のことを表わす。
【００２４】
「乗法群」という用語は、群の二項演算を乗法に関する記号・用語を用いて記述することを強調した呼び方である。「乗法群」は「群」と同義であって、なんら「群」よりも限定した対象を意味するものではない。
【００２５】
「ペアリング」とは、乗法群Ｇ１の元と乗法群Ｇ２の元との組を乗法群Ｇ３の元へ写像する写像のことである。３つの乗法群Ｇ１，Ｇ２，Ｇ３は、互いに異なる群であってもよいし、乗法群Ｇ１，Ｇ２，Ｇ３のうちいずれか２つもしくは全部が同じ群であってもよい。乗法群Ｇ１の元ｇ１と乗法群Ｇ２の元ｇ２とをペアリングにより写像した乗法群Ｇ３の元のことを、「ｇ１とｇ２とのペアリング」と呼ぶ。
【００２６】
「双線形ペアリング」とは、以下の性質を持つペアリングのことである。
（１）双線形性：乗法群Ｇ１の元ｇ１のａ乗と、乗法群Ｇ２の元ｇ２のｂ乗とのペアリングは、元ｇ１と元ｇ２とのペアリングの（ａ×ｂ）乗と等しい。
（２）非縮退性：元ｇ１と元ｇ２とのペアリングが乗法群Ｇ３の単位元であれば、元ｇ１は乗法群Ｇ１の単位元であり、元ｇ２は乗法群Ｇ２の単位元である。
【００２７】
秘匿検索システム８００は、３つの乗法群Ｇ１，Ｇ２，Ｇ３を使用する。３つの乗法群Ｇ１，Ｇ２，Ｇ３の位数は、同じ素数ｐである。素数ｐは、非常に大きく、例えば２の１６０乗より大きい。３つの乗法群Ｇ１，Ｇ２，Ｇ３は、コンピュータが多項式時間内に二項演算を計算可能なアルゴリズムが存在する群を使用する。秘匿検索システム８００は、実用上問題のない時間内に群の二項演算を実際に計算できる。また、安全性を確保するため、３つの乗法群Ｇ１，Ｇ２，Ｇ３は、離散対数問題を解くことが困難な群を使用する。
また、秘匿検索システム８００は、乗法群Ｇ１の元と乗法群Ｇ２の元との組を乗法群Ｇ３の元へ写像する双線形ペアリングｅを使用する。双線形ペアリングｅは、コンピュータが多項式時間内に計算可能なアルゴリズムが存在するペアリングを使用する。秘匿検索システム８００は、実用上問題のない時間内に双線形ペアリングｅを実際に計算できる。また、安全性を確保するため、双線形ペアリングｅは、双線形ディフィー−ヘルマン判定問題（Ｄｅｃｉｓｉｏｎａｌ  Ｂｉｌｉｎｅａｒ  Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ  Ｐｒｏｂｌｅｍ）を解くことが困難なペアリングを使用する。
【００２８】
このような乗法群としては、例えば楕円曲線やその他の代数曲線上の点がなす群などが知られているが、他の群を使ってもよい。また、このような双線形ペアリングとしては、例えばヴェイユペアリングやテイトペアリングなどが知られているが、他のペアリングを使ってもよい。
【００２９】
また、以下の説明において、特に断わりのない限り、整数の四則演算は、素数ｐを法とする剰余類からなる有限体Ｚｐ上での四則演算を意味する。加算・減算・乗算は、通常の整数の加算・減算・乗算と同じ演算をしたのち、ｐを法とする余りを求めることにより計算する。除算は、有限体Ｚｐにおける逆数を乗じたのち、ｐを法とする余りを求めることにより計算する。
【００３０】
図６は、この実施の形態における公開パラメータ生成装置１００の機能ブロックの構成の一例を示すブロック構成図である。
公開パラメータ生成装置１００は、秘匿検索システム８００で使用する公開鍵とマスタ秘密鍵のペアを生成する。公開鍵は、暗号化装置４００がキーワードを暗号化するために使用する。公開鍵は、第三者に知られてもよい情報であり、一般に公開される。マスタ秘密鍵は、ユーザ秘密鍵生成装置２００がユーザ秘密鍵を生成するために使用する。マスタ秘密鍵は、第三者に知られてはならない情報であり、秘密裡に保管される。
公開パラメータ生成装置１００は、第一生成元選択部１１１、第二生成元選択部１１２、乱数ω選択部１２１、乱数α選択部１２２、乱数β選択部１２３、乱数θ選択部１２４、公開元Ω算出部１３１、公開元ａ算出部１３２、公開元ｂ算出部１３３、秘密元ｗ算出部１４１、秘密元ａ算出部１４２、秘密元ｂ算出部１４３、秘密元ｙ算出部１４４、公開パラメータ出力部１５１、マスタ秘密鍵出力部１５２を有する。
【００３１】
第一生成元選択部１１１は、ＣＰＵ９１１を用いて、乗法群Ｇ１の生成元のなかから一様ランダムに生成元を１個選択する。以下、第一生成元選択部１１１が選択した生成元を「ｇ１」と呼ぶ。第一生成元選択部１１１は、ＲＡＭ９１４を用いて、選択した１個の生成元ｇ１を表わすデータを記憶する。
【００３２】
第二生成元選択部１１２は、ＣＰＵ９１１を用いて、乗法群Ｇ２の生成元のなかから一様ランダムに生成元を１個選択する。以下、第二生成元選択部１１２が選択した生成元を「ｇ２」と呼ぶ。第二生成元選択部１１２は、ＲＡＭ９１４を用いて、選択した１個の生成元ｇ２を表わすデータを記憶する。
【００３３】
乱数ω選択部１２１は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから一様ランダムに整数を１個選択する。以下、乱数ω選択部１２１が選択した整数を「ω」と呼ぶ。乱数ω選択部１２１は、ＲＡＭ９１４を用いて、選択した１個の整数ωを表わすデータを記憶する。
【００３４】
乱数α選択部１２２は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから一様ランダムに整数を（Ｄ＋２）個選択する。ここで、Ｄは、ユーザＩＤを分節した数Ｌの最大値に１を加えた整数である。以下、乱数α選択部１２２が選択した（Ｄ＋２）個の整数を「αｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。乱数α選択部１２２は、ＲＡＭ９１４を用いて、選択した（Ｄ＋２）個の整数ａｎを表わすデータを記憶する。
例えば、図２に示したユーザＩＤを使用する場合、ユーザＩＤを分節した数Ｌの最大値は４であるから、Ｄは５である。したがって、乱数α選択部１２２は、７個の整数α０，α１，α２，…，α６を選択する。
【００３５】
乱数β選択部１２３は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから一様ランダムに整数を（Ｄ＋２）個選択する。以下、乱数β選択部１２３が選択した（Ｄ＋２）個の整数を「βｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。乱数β選択部１２３は、ＲＡＭ９１４を用いて、選択した（Ｄ＋２）個の整数ｂｎを表わすデータを記憶する。
【００３６】
乱数θ選択部１２４は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから一様ランダムに整数を（Ｄ＋２）×（Ｄ＋１）個選択する。以下、乱数θ選択部１２４が選択した（Ｄ＋２）×（Ｄ＋１）個の整数を「θｎ，ｌ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｌ（エル）は、０以上Ｄ以下の整数である。例えば、Ｄが５の場合、乱数θ選択部１２４は、７×６＝４２個の整数θ０，０，θ０，１，θ０，２，θ０，３，θ０，４，θ０，５，θ１，０，θ１，１，…，θ６，５を選択する。
【００３７】
公開元Ω算出部１３１は、ＣＰＵ９１１を用いて、第一生成元選択部１１１が記憶した１個の生成元ｇ１を表わすデータと、第二生成元選択部１１２が記憶した１個の生成元ｇ２を表わすデータと、乱数ω選択部１２１が記憶した１個の整数ωを表わすデータとを入力する。公開元Ω算出部１３１は、ＣＰＵ９１１を用いて、双線形ペアリングｅにより、乗法群Ｇ１の生成元ｇ１と乗法群Ｇ２の生成元ｇ２とのペアリングを計算する。以下、公開元Ω算出部１３１が算出したペアリングを「ｇ３」と呼ぶ。ｇ３は、乗法群Ｇ３の生成元である。公開元Ω算出部１３１は、ＣＰＵ９１１を用いて、乗法群Ｇ３の生成元ｇ３のω乗を計算する。以下、公開元Ω算出部１３１が算出した元「ｇ３＾ω」を「Ω」と呼ぶ。Ωは、乗法群Ｇ３の元である。公開元Ω算出部１３１は、ＲＡＭ９１４を用いて、算出した１個の元Ωを表わすデータを記憶する。
【００３８】
公開元ａ算出部１３２は、ＣＰＵ９１１を用いて、第一生成元選択部１１１が記憶した１個の生成元ｇ１を表わすデータと、乱数α選択部１２２が記憶した（Ｄ＋２）個の整数αｎを表わすデータと、乱数θ選択部１２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌを表わすデータとを入力する。
公開元ａ算出部１３２は、ＣＰＵ９１１を用いて、１個の整数αｎにつき、ｎが同じ（Ｄ＋１）個の整数θｎ，ｌそれぞれとの積「αｎ・θｎ，ｌ」を計算する。整数αｎは（Ｄ＋２）個あるから、公開元ａ算出部１３２は、全部で（Ｄ＋２）×（Ｄ＋１）個の積「αｎ・θｎ，ｌ」を算出する。
公開元ａ算出部１３２は、ＣＰＵ９１１を用いて、（Ｄ＋２）×（Ｄ＋１）個の積「αｎ・θｎ，ｌ」それぞれについて、乗法群Ｇ１の生成元ｇ１の「αｎ・θｎ，ｌ」乗を計算する。以下、公開元ａ算出部１３２が算出した元「ｇ１＾（αｎ・θｎ，ｌ）」を「ａｎ，ｌ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｌ（エル）は、０以上Ｄ以下の整数である。ａｎ，ｌは、乗法群Ｇ１の元である。例えば、元ａ０，０は、元「ｇ１＾（α０・θ０，０）」である。元ａ０，１は、元「ｇ１＾（α０・θ０，１）」である。元ａ１，０は、元「ｇ１＾（α１・θ１，０）」である。公開元ａ算出部１３２は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを表わすデータを記憶する。
【００３９】
公開元ｂ算出部１３３は、ＣＰＵ９１１を用いて、第一生成元選択部１１１が記憶した１個の生成元ｇ１を表わすデータと、乱数β選択部１２３が記憶した（Ｄ＋２）個の整数βｎを表わすデータと、乱数θ選択部１２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌを表わすデータとを入力する。
公開元ｂ算出部１３３は、ＣＰＵ９１１を用いて、１個の整数βｎにつき、ｎが同じ（Ｄ＋１）個の整数θｎ，ｌそれぞれとの積「βｎ・θｎ，ｌ」を計算する。公開元ｂ算出部１３３は、全部で（Ｄ＋２）×（Ｄ＋１）個の積「βｎ・θｎ，ｌ」を算出する。
公開元ｂ算出部１３３は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋１）個の積「βｎ・θｎ，ｌ」それぞれについて、乗法群Ｇ１の生成元ｇ１の「βｎ・θｎ，ｌ」乗を計算する。以下、公開元ｂ算出部１３３が算出した元「ｇ１＾（βｎ・θｎ，ｌ）」を「ｂｎ，ｌ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｌ（エル）は、０以上Ｄ以下の整数である。ｂｎ，ｌは、乗法群Ｇ１の元である。公開元ｂ算出部１３３は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを表わすデータを記憶する。
【００４０】
秘密元ｗ算出部１４１は、ＣＰＵ９１１を用いて、第二生成元選択部１１２が記憶した１個の生成元ｇ２を表わすデータと、乱数ω選択部１２１が記憶した１個の整数ωを表わすデータとを入力する。秘密元ｗ算出部１４１は、ＣＰＵ９１１を用いて、乗法群Ｇ２の生成元ｇ２のω乗を計算する。以下、秘密元ｗ算出部１４１が算出した元「ｇ２＾ω」を「ｗ’」と呼ぶ。ｗ’は、乗法群Ｇ２の元である。秘密元ｗ算出部１４１は、ＲＡＭ９１４を用いて、算出した１個の元ｗ’を表わすデータを記憶する。
【００４１】
秘密元ａ算出部１４２は、ＣＰＵ９１１を用いて、第二生成元選択部１１２が記憶した１個の生成元ｇ２を表わすデータと、乱数α選択部１２２が記憶した（Ｄ＋２）個の整数αｎを表わすデータとを入力する。秘密元ａ算出部１４２は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数αｎそれぞれについて、生成元ｇ２のαｎ乗を計算する。以下、秘密元ａ算出部１４２が算出した元「ｇ２＾αｎ」を「ａ’ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。例えば、元ａ’０は、生成元ｇ２のα０乗である。元ａ’１は、生成元ｇ２のα１乗である。秘密元ａ算出部１４２は、（Ｄ＋２）個の元ａ’ｎを算出する。秘密元ａ算出部１４２は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ａ’ｎを表わすデータを記憶する。
【００４２】
秘密元ｂ算出部１４３は、ＣＰＵ９１１を用いて、第二生成元選択部１１２が記憶した１個の生成元ｇ２を表わすデータと、乱数β選択部１２３が記憶した（Ｄ＋２）個の整数βｎを表わすデータとを入力する。秘密元ｂ算出部１４３は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数βｎそれぞれについて、生成元ｇ２のβｎ乗を計算する。以下、秘密元ｂ算出部１４３が算出した元「ｇ２＾βｎ」を「ｂ’ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｂ’ｎは、乗法群Ｇ２の元である。秘密元ｂ算出部１４３は、（Ｄ＋２）個の元ｂ’ｎを算出する。秘密元ｂ算出部１４３は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｂ’ｎを表わすデータを記憶する。
【００４３】
秘密元ｙ算出部１４４は、ＣＰＵ９１１を用いて、第二生成元選択部１１２が記憶した１個の生成元ｇ２を表わすデータと、乱数α選択部１２２が記憶した（Ｄ＋２）個の整数αｎを表わすデータと、乱数β選択部１２３が記憶した（Ｄ＋２）個の整数βｎを表わすデータと、乱数θ選択部１２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌを表わすデータとを入力する。
秘密元ｙ算出部１４４は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数αｎそれぞれについて、ｎが同じ１個の整数βｎとの積「αｎ・βｎ」を計算する。秘密元ｙ算出部１４４は、全部で（Ｄ＋２）個の積「αｎ・βｎ」を算出する。秘密元ｙ算出部１４４は、ＣＰＵ９１１を用いて、１個の積「αｎ・βｎ」につき、ｎが同じ（Ｄ＋１）個の整数θｎ，ｌそれぞれとの積「αｎ・βｎ・θｎ，ｌ」を計算する。秘密元ｙ算出部１４４が算出した積「αｎ・βｎ」は（Ｄ＋２）個あるから、秘密元ｙ算出部１４４は、全部で（Ｄ＋２）×（Ｄ＋１）個の積「αｎ・βｎ・θｎ，ｌ」を算出する。
秘密元ｙ算出部１４４は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋１）個の積「αｎ・βｎ・θｎ，ｌ」それぞれについて、生成元ｇ２の「αｎ・βｎ・θｎ，ｌ」乗を計算する。秘密元ｙ算出部１４４が算出した元「ｇ２＾（αｎ・βｎ・θｎ，ｌ）」を「ｙ’ｎ，ｌ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｌ（エル）は、０以上Ｄ以下の整数である。ｙ’ｎ，ｌは、乗法群Ｇ２の元である。秘密元ｙ算出部１４４は、（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを算出する。秘密元ｙ算出部１４４は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを表わすデータを記憶する。
【００４４】
公開パラメータ出力部１５１は、ＣＰＵ９１１を用いて、第一生成元選択部１１１が記憶した１個の生成元ｇ１を表わすデータと、公開元Ω算出部１３１が記憶した１個の元Ωを表わすデータと、公開元ａ算出部１３２が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを表わすデータと、公開元ｂ算出部１３３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを表わすデータとを入力する。公開パラメータ出力部１５１は、ＣＰＵ９１１を用いて、１個の生成元ｇ１と、１個の元Ωと、（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌと、（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌとを表わすデータを含むデータを、公開パラメータとして出力する。公開パラメータ出力部１５１が出力した公開パラメータは、例えば一般に公開される。
【００４５】
マスタ秘密鍵出力部１５２は、ＣＰＵ９１１を用いて、秘密元ｗ算出部１４１が記憶した１個の元ｗ’を表わすデータと、秘密元ａ算出部１４２が記憶した（Ｄ＋２）個の元ａ’ｎを表わすデータと、秘密元ｂ算出部１４３が記憶した（Ｄ＋２）個の元ｂ’ｎを表わすデータと、秘密元ｙ算出部１４４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを表わすデータとを入力する。マスタ秘密鍵出力部１５２は、ＣＰＵ９１１を用いて、１個の元ｗ’と、（Ｄ＋２）個の元ａ’ｎと、（Ｄ＋２）個の元ｂ’ｎと、（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌとを表わすデータを含むデータを、マスタ秘密鍵として出力する。マスタ秘密鍵出力部１５２は出力したマスタ秘密鍵は、ユーザ秘密鍵生成装置２００に対して秘密裡に通知される。
【００４６】
第一生成元選択部１１１が記憶した生成元ｇ１、第二生成元選択部１１２が記憶した生成元ｇ２、乱数ω選択部１２１が記憶した整数ω、乱数α選択部１２２が記憶した整数αｎ、乱数β選択部１２３が記憶した整数βｎは、公開パラメータ・マスタ秘密鍵の生成が終わったら、その後は使用しないので、消去してよい。特に、整数ω、整数αｎ、整数βｎは、外部に漏れてはいけない情報なので、万一に備えて、完全に消去することが望ましい。
【００４７】
図７は、この実施の形態における公開パラメータ生成処理Ｓ６３０の流れの一例を示すフローチャート図である。
公開パラメータ生成処理Ｓ６３０において、公開パラメータ生成装置１００は、公開鍵とマスタ秘密鍵とのペアを生成する。なお、ここでは、公開鍵やマスタ秘密鍵を算出する特定の手順を説明するが、計算手順は、ここで説明する手順に限らず、数学的に同値な結果が得られる計算手順であれば、ここで説明する手順と異なる手順であってもよい。
【００４８】
公開パラメータ生成処理Ｓ６３０は、第一生成元選択工程Ｓ６３１、第二生成元選択工程Ｓ６３２、乱数ω選択工程Ｓ６３３、公開元Ω算出工程Ｓ６３４、秘密元ｗ算出工程Ｓ６３５、ｎ初期化工程Ｓ６３６、乱数α選択工程Ｓ６３７、乱数β選択工程Ｓ６３８、秘密元ａ算出工程Ｓ６３９、秘密元ｂ算出工程Ｓ６４０、ｌ（エル）初期化工程Ｓ６４１、乱数θ選択工程Ｓ６４２、公開元ａ算出工程Ｓ６４３、公開元ｂ算出工程Ｓ６４４、秘密元ｙ算出工程Ｓ６４５、ｌ（エル）増加工程Ｓ６４６、ｌ（エル）判定工程Ｓ６４７、ｎ増加工程Ｓ６４８、ｎ判定工程Ｓ６４９を有する。
【００４９】
第一生成元選択工程Ｓ６３１において、第一生成元選択部１１１は、ＣＰＵ９１１を用いて、乗法群Ｇ１の生成元のなかから、一様ランダムに生成元ｇ１を１個選択する。
【００５０】
第二生成元選択工程Ｓ６３２において、第二生成元選択部１１２は、ＣＰＵ９１１を用いて、乗法群Ｇ２の生成元のなかから、一様ランダムに生成元ｇ２を１個選択する。
【００５１】
乱数ω選択工程Ｓ６３３において、乱数ω選択部１２１は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから、一様ランダムに整数ωを１個選択する。
【００５２】
公開元Ω算出工程Ｓ６３４において、公開元Ω算出部１３１は、第一生成元選択工程Ｓ６３１で第一生成元選択部１１１が選択した１個の生成元ｇ１と、第二生成元選択工程Ｓ６３２で第二生成元選択部１１２が選択した１個の生成元ｇ２とに基づいて、ＣＰＵ９１１を用いて、双線形ペアリングｅにより、生成元ｇ１と生成元ｇ２とのペアリングを計算して、乗法群Ｇ３の生成元である１個の生成元ｇ３を得る。公開元Ω算出部１３１は、算出した１個の生成元ｇ３と、乱数ω選択工程Ｓ６３３で乱数ω選択部１２１が選択した１個の整数ωとに基づいて、ＣＰＵ９１１を用いて、生成元ｇ３のω乗を計算して、乗法群Ｇ３の元である１個の元Ωを得る。
【００５３】
秘密元ｗ算出工程Ｓ６３５において、秘密元ｗ算出部１４１は、第二生成元選択工程Ｓ６３２で第二生成元選択部１１２が選択した１個の生成元ｇ２と、乱数ω選択工程Ｓ６３３で乱数ω選択部１２１が選択した１個の整数ωとに基づいて、ＣＰＵ９１１を用いて、生成元ｇ２のω乗を計算して、乗法群Ｇ２の元である１個の元ｗ’を得る。
【００５４】
ｎ初期化工程Ｓ６３６において、乱数α選択部１２２は、ＣＰＵ９１１を用いて、変数ｎの値を０に設定する。
【００５５】
乱数α選択工程Ｓ６３７において、乱数α選択部１２２は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから、一様ランダムに整数αｎを１個選択する。
【００５６】
乱数β選択工程Ｓ６３８において、乱数β選択部１２３は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから、一様ランダムに整数βｎを１個選択する。
【００５７】
秘密元ａ算出工程Ｓ６３９において、秘密元ａ算出部１４２は、第二生成元選択工程Ｓ６３２で第二生成元選択部１１２が選択した１個の生成元ｇ２と、乱数α選択工程Ｓ６３７で乱数α選択部１２２が選択した１個の整数αｎとに基づいて、ＣＰＵ９１１を用いて、生成元ｇ２のαｎ乗を計算して、乗法群Ｇ２の元である１個の元ａ’ｎを得る。
【００５８】
秘密元ｂ算出工程Ｓ６４０において、秘密元ｂ算出部１４３は、第二生成元選択工程Ｓ６３２で第二生成元選択部１１２が選択した１個の生成元ｇ２と、乱数β選択工程Ｓ６３８で乱数β選択部１２３が選択した１個の整数βｎとに基づいて、ＣＰＵ９１１を用いて、生成元ｇ２のβｎ乗を計算して、乗法群Ｇ２の元である１個の元ｂ’ｎを得る。
【００５９】
ｌ（エル）初期化工程Ｓ６４１において、乱数θ選択部１２４は、ＣＰＵ９１１を用いて、変数ｌの値を０に設定する。
【００６０】
乱数θ選択工程Ｓ６４２において、乱数θ選択部１２４は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから、一様ランダムに整数θｎ，ｌを１個選択する。
【００６１】
公開元ａ算出工程Ｓ６４３において、公開元ａ算出部１３２は、乱数α選択工程Ｓ６３７で乱数α選択部１２２が選択した１個の整数αｎと、乱数θ選択工程Ｓ６４２で乱数θ選択部１２４が選択した１個の整数θｎ，ｌとに基づいて、ＣＰＵ９１１を用いて、整数αｎと整数θｎ，ｌとの積「αｎ・θｎ，ｌ」を算出する。公開元ａ算出部１３２は、算出した積「αｎ・θｎ，ｌ」と、第一生成元選択工程Ｓ６３１で第一生成元選択部１１１が選択した１個の生成元ｇ１とに基づいて、ＣＰＵ９１１を用いて、生成元ｇ１の「αｎ・θｎ，ｌ」乗を計算して、乗法群Ｇ１の元である１個の元ａｎ，ｌを得る。
【００６２】
公開元ｂ算出工程Ｓ６４４において、公開元ｂ算出部１３３は、乱数β選択工程Ｓ６３８で乱数β選択部１２３が選択した１個の整数βｎと、乱数θ選択工程Ｓ６４２で乱数θ選択部１２４が選択した１個の整数θｎ，ｌとに基づいて、ＣＰＵ９１１を用いて、整数βｎと整数θｎ，ｌとの積「βｎ・θｎ，ｌ」を算出する。公開元ｂ算出部１３３は、算出した積「βｎ・θｎ，ｌ」と、第一生成元選択工程Ｓ６３１で第一生成元選択部１１１が選択した生成元ｇ１とに基づいて、生成元ｇ１の「βｎ・θｎ，ｌ」乗を計算して、乗法群Ｇ１の元である１個の元ｂｎ，ｌを得る。
【００６３】
秘密元ｙ算出工程Ｓ６４５において、秘密元ｙ算出部１４４は、秘密元ａ算出工程Ｓ６３９で秘密元ａ算出部１４２が算出した１個の元ａ’ｎと、公開元ｂ算出工程Ｓ６４４で公開元ｂ算出部１３３が算出した積「βｎ・θｎ，ｌ」とに基づいて、ＣＰＵ９１１を用いて、元ａ’ｎの「βｎ・θｎ，ｌ」乗を計算して、乗法群Ｇ２の元である１個の元ｙ’ｎ，ｌを得る。
【００６４】
ｌ（エル）増加工程Ｓ６４６において、乱数θ選択部１２４は、ＣＰＵ９１１を用いて、変数ｌの値を１増加させる。
【００６５】
ｌ（エル）判定工程Ｓ６４７において、乱数θ選択部１２４は、ＣＰＵ９１１を用いて、変数ｌの値と、整数Ｄとを比較する。
変数ｌの値が整数Ｄ以下である場合、乱数θ選択部１２４は、ＣＰＵ９１１を用いて、乱数θ選択工程Ｓ６４２に戻り、次の整数θｎ，ｌを選択する。
変数ｌの値が整数Ｄより大きい場合、乱数θ選択部１２４は、ＣＰＵ９１１を用いて、ｎ増加工程Ｓ６４８へ進む。
【００６６】
ｎ増加工程Ｓ６４８において、乱数α選択部１２２は、ＣＰＵ９１１を用いて、変数ｎの値を１増加させる。
【００６７】
ｎ判定工程Ｓ６４９において、乱数α選択部１２２は、ＣＰＵ９１１を用いて、変数ｎの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｎの値が値（Ｄ＋１）以下である場合、乱数α選択部１２２は、ＣＰＵ９１１を用いて、乱数α選択工程Ｓ６３７に戻り、次の整数αｎを選択する。
変数ｎの値が値（Ｄ＋１）より大きい場合、乱数α選択部１２２は、公開パラメータ生成処理Ｓ６３０を終了する。
【００６８】
これにより、乱数α選択工程Ｓ６３７からｎ判定工程Ｓ６４９までの工程は、（Ｄ＋２）回繰り返される。したがって、乱数α選択部１２２は、乱数α選択工程Ｓ６３７を（Ｄ＋２）回実行し、（Ｄ＋２）個の整数αｎを選択する。乱数β選択部１２３は、乱数β選択工程Ｓ６３８を（Ｄ＋２）回実行し、（Ｄ＋２）個の整数βｎを選択する。秘密元ａ算出部１４２は、秘密元ａ算出工程Ｓ６３９を（Ｄ＋２）回実行し、（Ｄ＋２）個の元ａ’ｎを算出する。秘密元ｂ算出部１４３は、秘密元ｂ算出工程Ｓ６４０を（Ｄ＋２）回実行し、（Ｄ＋２）個の元ｂ’ｎを算出する。
また、乱数θ選択工程Ｓ６４２からｌ（エル）判定工程Ｓ６４７までの工程は、変数ｎの繰り返し１回につき、（Ｄ＋１）回繰り返される。したがって、公開元ａ算出部１３２は、公開元ａ算出工程Ｓ６４３を（Ｄ＋２）×（Ｄ＋１）回実行し、（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを算出する。公開元ｂ算出部１３３は、公開元ｂ算出工程Ｓ６４４を（Ｄ＋２）×（Ｄ＋１）回実行し、（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを算出する。秘密元ｙ算出部１４４は、秘密元ｙ算出工程Ｓ６４５を（Ｄ＋２）×（Ｄ＋１）回実行し、（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを算出する。
【００６９】
図８は、この実施の形態におけるユーザ秘密鍵生成装置２００の機能ブロックの構成の一例を示すブロック構成図である。
ユーザ秘密鍵生成装置２００は、公開パラメータ生成装置１００が生成したマスタ秘密鍵に基づいて、各クエリ発行装置３００に配布するユーザ秘密鍵を生成する。
ユーザ秘密鍵生成装置２００は、マスタ秘密鍵入力部２１１、秘密元ｗ記憶部２１２、秘密元ａ記憶部２１３、秘密元ｂ記憶部２１４、秘密元ｙ記憶部２１５、ユーザ識別子入力部２２１、識別子記憶部２２２、乱数ρ選択部２３１、副乱数ρ選択部２３２、総積元Ｙ算出部２３３、検索元算出部２４１、検索元ａ算出部２４２、検索元ｂ算出部２４３、攪乱元算出部２５１、攪乱元ａ算出部２５２、攪乱元ｂ算出部２５３、委任元算出部２６１、副委任元算出部２６２、ユーザ秘密鍵出力部２２３を有する。
【００７０】
マスタ秘密鍵入力部２１１は、ＣＰＵ９１１を用いて、公開パラメータ生成装置１００が出力したマスタ秘密鍵を入力する。マスタ秘密鍵には、乗法群Ｇ２の元である１個の元ｗ’と、乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎと、乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎと、乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌとを表わすデータが含まれる。
【００７１】
秘密元ｗ記憶部２１２は、ＣＰＵ９１１を用いて、マスタ秘密鍵入力部２１１が入力したマスタ秘密鍵のうち、１個の元ｗ’を表わすデータを入力する。秘密元ｗ記憶部２１２は、磁気ディスク装置９２０を用いて、１個の元ｗ’を表わすデータを記憶する。
秘密元ａ記憶部２１３は、ＣＰＵ９１１を用いて、マスタ秘密鍵入力部２１１が入力したマスタ秘密鍵のうち、（Ｄ＋２）個の元ａ’ｎを表わすデータを入力する。秘密元ａ記憶部２１３は、磁気ディスク装置９２０を用いて、（Ｄ＋２）個の元ａ’ｎを表わすデータを記憶する。
秘密元ｂ記憶部２１４は、ＣＰＵ９１１を用いて、マスタ秘密鍵入力部２１１が入力したマスタ秘密鍵のうち、（Ｄ＋２）個の元ｂ’ｎを表わすデータを入力する。秘密元ｂ記憶部２１４は、磁気ディスク装置９２０を用いて、（Ｄ＋２）個の元ｂ’ｎを表わすデータを記憶する。
秘密元ｙ記憶部２１５は、ＣＰＵ９１１を用いて、マスタ秘密鍵入力部２１１が入力したマスタ秘密鍵のうち、（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを表わすデータを入力する。秘密元ｙ記憶部２１５は、磁気ディスク装置９２０を用いて、（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを表わすデータを記憶する。
【００７２】
ユーザ識別子入力部２２１は、ＣＰＵ９１１を用いて、ユーザ秘密鍵の生成を要求するクエリ発行装置３００のユーザＩＤとして、Ｌ個の整数Ｉｉを表わすデータを入力する。ｉは、１以上Ｌ以下の整数である。Ｉｉは、０以上ｐ未満の整数である。それぞれの整数Ｉｉは、ユーザＩＤを分節した部分に対応する。整数Ｉ１は、ユーザＩＤをＬ個に分節した最初の部分に対応する。整数Ｉ２は、ユーザＩＤをＬ個に分節した二番目の部分に対応する。整数ＩＬは、ユーザＩＤをＬ個に分節した最後の部分に対応する。
ユーザＩＤが文字列である場合、文字列であるユーザＩＤの各部分を０以上ｐ未満の整数に変換する必要がある。ユーザ識別子入力部２２１は、文字列であるユーザＩＤの各部分をコンピュータ内部で表現するビット列を、整数を表現するビット列として解釈する構成であってもよい。あるいは、任意の長さの文字列を０以上ｐ未満の整数に変換するハッシュ関数を用いて、ユーザ識別子入力部２２１が、ユーザＩＤの各部分を整数に変換する構成であってもよい。
【００７３】
識別子記憶部２２２は、ＲＡＭ９１４を用いて、ユーザ識別子入力部２２１が入力したＬ個の整数Ｉｉを表わすデータを記憶する。
【００７４】
乱数ρ選択部２３１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから一様ランダムに整数を（Ｄ＋２）個選択する。以下、乱数ρ選択部２３１が選択した整数を「ρｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。乱数ρ選択部２３１は、ＲＡＭ９１４を用いて、選択した（Ｄ＋２）個の整数ρｎを表わすデータを記憶する。
【００７５】
副乱数ρ選択部２３２は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから一様ランダムに整数を（Ｄ＋２）×（Ｄ＋２）個選択する。以下、副乱数ρ選択部２３２が選択した整数を「ρｎ，ｍ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｍは、０以上（Ｄ＋１）以下の整数である。
【００７６】
総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、秘密元ｙ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを表わすデータと、識別子記憶部２２２が記憶したＬ個の整数Ｉｉを表わすデータとを入力する。
総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、１個の整数Ｉｉにつき、（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、ｌ（エル）がｉと等しい（Ｄ＋２）個の元ｙ’ｎ，ｉそれぞれのＩｉ乗を計算する。整数ＩｉはＬ個あるから、総積元Ｙ算出部２３３は、全部で（Ｄ＋２）×Ｌ個の元「ｙ’ｎ，ｉ＾Ｉｉ」を算出する。総積元Ｙ算出部２３３が算出した元「ｙ’ｎ，ｉ＾Ｉｉ」は、乗法群Ｇ２の元である。
総積元Ｙ算出部２３３は、（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、ｌ（エル）が０である（Ｄ＋２）個の元ｙ’ｎ，０と、算出した（Ｄ＋２）×Ｌ個の元「ｙ’ｎ，ｉ＾Ｉｉ」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｙ’ｎ，０につき、ｎが同じＬ個の元「ｙ’ｎ，ｉ＾Ｉｉ」とを合わせた全部で（Ｌ＋１）個の元の総積を計算する。以下、総積元Ｙ算出部２３３が算出した総積を「ΠＹ，ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ΠＹ，ｎは、乗法群Ｇ２の元である。元ｙ’ｎ，０は（Ｄ＋２）個あるから、総積元Ｙ算出部２３３は、全部で（Ｄ＋２）個の元ΠＹ，ｎを算出する。総積元Ｙ算出部２３３は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ΠＹ，ｎを表わすデータを記憶する。
【００７７】
検索元算出部２４１は、ＣＰＵ９１１を用いて、秘密元ｗ記憶部２１２が記憶した１個の元ｗ’を表わすデータと、乱数ρ選択部２３１が記憶した（Ｄ＋２）個の整数ρｎを表わすデータと、総積元Ｙ算出部２３３が記憶した（Ｄ＋２）個の元ΠＹ，ｎを表わすデータとを入力する。
検索元算出部２４１は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数ρｎそれぞれについて、ｎが同じ１個の元ΠＹ，ｎのρｎ乗を計算する。検索元算出部２４１が算出した（Ｄ＋２）個の元「ΠＹ，ｎ＾ρｎ」は、乗法群Ｇ２の元である。
検索元算出部２４１は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）個の元「ΠＹ，ｎ＾ρｎ」と、１個の元ｗ’とを合わせた全部で（Ｄ＋３）個の元の総積を計算する。以下、検索元算出部２４１が算出した総積を「ｋ０」と呼ぶ。ｋ０は、乗法群Ｇ２の元である。検索元算出部２４１は、ＲＡＭ９１４を用いて、算出した１個の元ｋ０を表わすデータを記憶する。
【００７８】
検索元ａ算出部２４２は、ＣＰＵ９１１を用いて、秘密元ａ記憶部２１３が記憶した（Ｄ＋２）個の元ａ’ｎを表わすデータと、乱数ρ選択部２３１が記憶した（Ｄ＋２）個の整数ρｎを表わすデータとを入力する。検索元ａ算出部２４２は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数ρｎそれぞれについて、ｎが同じ１個の元ａ’ｎの「−ρｎ」乗を計算する。以下、検索元ａ算出部２４２が算出した元「ａ’ｎ＾（−ρｎ）」を「ｋｎ，（ａ）」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｋｎ，（ａ）は、乗法群Ｇ２の元である。検索元ａ算出部２４２は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｋｎ，（ａ）を表わすデータを記憶する。
【００７９】
検索元ｂ算出部２４３は、ＣＰＵ９１１を用いて、秘密元ｂ記憶部２１４が記憶した（Ｄ＋２）個の元ｂ’ｎを表わすデータと、乱数ρ選択部２３１が記憶した（Ｄ＋２）個の整数ρｎを表わすデータとを入力する。検索元ｂ算出部２４３は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数ρｎそれぞれについて、ｎが同じ１個の元ｂ’ｎの「−ρｎ」乗を計算する。以下、検索元ｂ算出部２４３が算出した元「ｂ’ｎ＾（−ρｎ）」を「ｋｎ，（ｂ）」と呼ぶ、ｎは、０以上（Ｄ＋１）以下の整数である。ｋｎ，（ｂ）は、乗法群Ｇ２の元である。検索元ｂ算出部２４３は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｋｎ，（ｂ）を表わすデータを記憶する。
【００８０】
攪乱元算出部２５１は、ＣＰＵ９１１を用いて、副乱数ρ選択部２３２が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍを表わすデータと、総積元Ｙ算出部２３３が記憶した（Ｄ＋２）個の元ΠＹ，ｎを表わすデータとを入力する。攪乱元算出部２５１は、ＣＰＵ９１１を用いて、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍそれぞれについて、ｎが同じ１個の元ΠＹ，ｎのρｎ，ｍ乗を計算する。攪乱元算出部２５１が算出した（Ｄ＋２）×（Ｄ＋２）個の元「ΠＹ，ｎ＾ρｎ，ｍ」は、乗法群Ｇ２の元である。
攪乱元算出部２５１は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋２）個の元「ΠＹ，ｎ＾ρｎ，ｍ」を、ｍが同じでｎが異なる（Ｄ＋２）個ずつの組に分け、分けられた（Ｄ＋２）個の元「ΠＹ，ｎ＾ρｎ，ｍ」の総積を計算する。以下、攪乱元算出部２５１が算出した総積を「ｆｍ，０」と呼ぶ。ｍは、０以上（Ｄ＋１）以下の整数である。ｆｍ，０は、乗法群Ｇ２の元である。（Ｄ＋２）×（Ｄ＋２）個の元「ΠＹ，ｎ＾ρｎ，ｍ」をｍが同じでｎが異なる（Ｄ＋２）個ずつの組に分けると、（Ｄ＋２）個の組ができるから、攪乱元算出部２５１は、（Ｄ＋２）個の元ｆｍ，０を算出する。攪乱元算出部２５１は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｆｍ，０を表わすデータを記憶する。
【００８１】
攪乱元ａ算出部２５２は、ＣＰＵ９１１を用いて、秘密元ａ記憶部２１３が記憶した（Ｄ＋２）個の元ａ’ｎを表わすデータと、副乱数ρ選択部２３２が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍを表わすデータとを入力する。攪乱元ａ算出部２５２は、ＣＰＵ９１１を用いて、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍそれぞれについて、ｎが同じ１個の元ａ’ｎの「−ρｎ，ｍ」乗を計算する。以下、攪乱元ａ算出部２５２が算出した元「ａ’ｎ＾（−ρｎ，ｍ）」を「ｆｍ，ｎ，（ａ）」と呼ぶ。ｍは、０以上（Ｄ＋１）以下の整数である。ｎは、０以上（Ｄ＋１）以下の整数である。ｆｍ，ｎ，（ａ）は、乗法群Ｇ２の元である。攪乱元ａ算出部２５２は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を表わすデータを記憶する。
【００８２】
攪乱元ｂ算出部２５３は、ＣＰＵ９１１を用いて、秘密元ｂ記憶部２１４が記憶した（Ｄ＋２）個の元ｂ’ｎを表わすデータと、副乱数ρ選択部２３２が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍを表わすデータとを入力する。攪乱元ｂ算出部２５３は、ＣＰＵ９１１を用いて、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍそれぞれについて、ｎが同じ１個の元ｂ’ｎの「−ρｎ，ｍ」乗を計算する。以下、攪乱元ｂ算出部２５３が算出した元「ｂ’ｎ＾（−ρｎ，ｍ）」を「ｆｍ，ｎ，（ｂ）」と呼ぶ。ｍは、０以上（Ｄ＋１）以下の整数である。ｎは、０以上（Ｄ＋１）以下の整数である。ｆｍ，ｎ，（ｂ）は、乗法群Ｇ２の元である。攪乱元ｂ算出部２５３は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を表わすデータを記憶する。
【００８３】
委任元算出部２６１は、ＣＰＵ９１１を用いて、秘密元ｙ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを表わすデータと、乱数ρ選択部２３１が記憶した（Ｄ＋２）個の整数ρｎを表わすデータとを入力する。また、図示していないが、委任元算出部２６１は、ＣＰＵ９１１を用いて、ユーザ識別子入力部２２１が入力したユーザＩＤを持つクエリ発行装置３００に対して付与する権限を表わす整数Ｄ’を表わすデータを入力する。
【００８４】
整数Ｄ’は、（Ｌ＋１）以上Ｄ以下の整数である。整数Ｄ’は、そのクエリ発行装置３００に対して、検索権限のみを与えるのか、配下のグループ内のクエリ発行装置３００のユーザ秘密鍵を生成する権限を与えるのか、ユーザ秘密鍵を生成する権限を与える場合、何レベル分の生成権限を与えるのかを表わす。
整数Ｄ’が（Ｌ＋１）と等しい場合、そのクエリ発行装置３００には、ユーザ秘密鍵を使って検索をすることができる権限だけを与え、配下のクエリ発行装置３００のユーザ秘密鍵を生成する権限は与えないことを意味する。
整数Ｄ’が（Ｌ＋２）と等しい場合、そのクエリ発行装置３００には、ユーザ秘密鍵を使って検索ができる権限だけでなく、配下１レベルのクエリ発行装置３００のユーザ秘密鍵を生成することができる権限を与えることを意味する。配下１レベルのクエリ発行装置３００とは、ユーザＩＤを分節した部分の数が（Ｌ＋１）個であり、そのうち最初の部分からＬ番目の部分までのＬ個の部分が、そのクエリ発行装置３００のユーザＩＤと同じクエリ発行装置３００のことを言う。以下、配下１レベルのクエリ発行装置３００のことを「子クエリ発行装置」と呼ぶ。図１及び図２に示した例でいえば、クエリ発行装置３００ａには、２台の子クエリ発行装置３００ｄ，３００ｅがある。クエリ発行装置３００ｆには、２台の子クエリ発行装置３００ｉ，３００ｊがある。また、子クエリ発行装置のユーザ秘密鍵を「子ユーザ秘密鍵」と呼ぶ。
整数Ｄ’が（Ｌ＋３）と等しい場合、そのクエリ発行装置３００には、検索及び配下２レベルまでのクエリ発行装置３００のユーザ秘密鍵を生成することができる権限を与えることを意味する。配下２レベルのクエリ発行装置３００とは、ユーザＩＤを分節した部分の数が（Ｌ＋２）個であり、そのうち最初の部分からＬ番目の部分までのＬ個の部分が、そのクエリ発行装置３００のユーザＩＤと同じクエリ発行装置３００のことを言う。以下、配下２レベルのクエリ発行装置３００のことを「孫クエリ発行装置」と呼ぶ。図１及び図２に示した例でいえば、クエリ発行装置３００ｃには、３台の孫クエリ発行装置３００ｉ〜３００ｋがある。クエリ発行装置３００ｆには、３台の孫クエリ発行装置３００ｌ〜３００ｎがある。また、孫クエリ発行装置のユーザ秘密鍵を「孫ユーザ秘密鍵」と呼ぶ。
以下同様に、整数Ｄ’が（Ｌ＋ｘ＋１）と等しい場合、配下ｘレベルまでのクエリ発行装置３００のユーザ秘密鍵を生成する権限を与えることを意味する。配下ｘレベルのクエリ発行装置３００とは、ユーザＩＤを分節した部分の数が（Ｌ＋ｘ）個であり、そのうち最初の部分からＬ番目の部分までのＬ個の部分が、そのクエリ発行装置３００のユーザＩＤと同じクエリ発行装置３００のことである。
【００８５】
また、整数Ｄ’が（Ｌ＋２）以上である場合、そのクエリ発行装置が生成するユーザ秘密鍵により、配下のクエリ発行装置３００に対して更にユーザ秘密鍵を生成する権限を与える権限も与えられる。ただし、クエリ発行装置３００は、自分に与えられた権限より強い権限を、配下のクエリ発行装置３００に与えることはできない。例えば、クエリ発行装置３００に子ユーザ秘密鍵と孫ユーザ秘密鍵とを生成する権限が与えられた場合、クエリ発行装置３００は、子クエリ発行装置に対して、子ユーザ秘密鍵（クエリ発行装置３００を基準とすれば孫ユーザ秘密鍵）を生成する権限を与えることができる。しかし、クエリ発行装置３００は、子クエリ発行装置に対して、孫ユーザ秘密鍵（クエリ発行装置３００を基準とすれば曾孫ユーザ秘密鍵）を生成する権限を与えることはできない。
【００８６】
整数Ｄ’は、あらかじめ定められた定数であってもよいし、秘匿検索システム８００の管理者がその都度入力する構成であってもよい。また、あらかじめ定められた規則にしたがって、ユーザ秘密鍵生成装置２００が整数Ｄ’を算出する構成であってもよい。
【００８７】
委任元算出部２６１は、ＣＰＵ９１１を用いて、１個の整数ρｎにつき、ｎが同じ（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、ｌ（エル）が（Ｌ＋１）以上Ｄ’以下の整数λである（Ｄ’−Ｌ）個の元ｙ’ｎ，λそれぞれのρｎ乗を計算する。委任元算出部２６１が算出する元「ｙ’ｎ，λ＾ρｎ」は、乗法群Ｇ２の元である。整数ρｎは（Ｄ＋２）個あるから、委任元算出部２６１は、（Ｄ＋２）×（Ｄ’−Ｌ）個の元「ｙ’ｎ，λ＾ρｎ」を算出する。
委任元算出部２６１は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ’−Ｌ）個の元「ｙ’ｎ，λ＾ρｎ」を、λが同じでｎが異なる（Ｄ＋２）個ずつの組に分け、分けられた（Ｄ＋２）個の元「ｙ’ｎ，λ＾ρｎ」の総積を計算する。以下、委任元算出部２６１が算出した総積を「ｈλ」と呼ぶ。λは、（Ｌ＋１）以上Ｄ’以下の整数である。ｈλは、乗法群Ｇ２の元である。（Ｄ＋２）×（Ｄ’−Ｌ）個の元「ｙ’ｎ，λ＾ρｎ」をλが同じでｎが異なる（Ｄ＋２）個の組に分けると、（Ｄ’−Ｌ）個の組ができるから、委任元算出部２６１は、（Ｄ’−Ｌ）個の元ｈλを算出する。委任元算出部２６１は、ＲＡＭ９１４を用いて、算出した（Ｄ’−Ｌ）個の元ｈλを表わすデータを記憶する。
【００８８】
副委任元算出部２６２は、ＣＰＵ９１１を用いて、整数Ｄ’を表わすデータと、秘密元ｙ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを表わすデータと、副乱数ρ選択部２３２が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍを表わすデータとを入力する。
副委任元算出部２６２は、ＣＰＵ９１１を用いて、１個の整数ρｎ，ｍにつき、ｎが同じ（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、ｌ（エル）が（Ｌ＋１）以上Ｄ’以下の整数λである（Ｄ’−Ｌ）個の元ｙ’ｎ，λそれぞれのρｎ，ｍ乗を計算する。副委任元算出部２６２が算出した元「ｙ’ｎ，λ＾ρｎ，ｍ」は、乗法群Ｇ２の元である。整数ρｎ，ｍは（Ｄ＋２）×（Ｄ＋２）個あるから、副委任元算出部２６２は、全部で（Ｄ＋２）×（Ｄ＋２）×（Ｄ’−Ｌ）個の元「ｙ’ｎ，λ＾ρｎ，ｍ」を算出する。
副委任元算出部２６２は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋２）×（Ｄ’−Ｌ）個の元「ｙ’ｎ，λ＾ρｎ，ｍ」を、ｍ及びλが同じでｎだけが異なる（Ｄ＋２）個ずつの組に分け、分けられた（Ｄ＋２）個の元「ｙ’ｎ，λ＾ρｎ，ｍ」の総積を計算する。以下、副委任元算出部２６２が算出した総積を「ｈｍ，λ」と呼ぶ。ｍは、０以上（Ｄ＋１）以下の整数である。λは、（Ｌ＋１）以上Ｄ’以下の整数である。ｈｍ，λは、乗法群Ｇ２の元である。（Ｄ＋２）×（Ｄ＋２）×（Ｄ’−Ｌ）個の元「ｙ’ｎ，λ＾ρｎ，ｍ」をｍ及びλが同じでｎだけが異なる（Ｄ＋２）個ずつの組に分けると、（Ｄ＋２）×（Ｄ’−Ｌ）個の組ができるから、副委任元算出部２６２は、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを算出する。副委任元算出部２６２は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを表わすデータを記憶する。
【００８９】
ユーザ秘密鍵出力部２２３は、ＣＰＵ９１１を用いて、検索元算出部２４１が記憶した１個の元ｋ０を表わすデータと、検索元ａ算出部２４２が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）を表わすデータと、検索元ｂ算出部２４３が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）を表わすデータとを入力する。また、ユーザ秘密鍵出力部２２３は、ＣＰＵ９１１を用いて、攪乱元算出部２５１が記憶した（Ｄ＋２）個の元ｆｍ，０を表わすデータと、攪乱元ａ算出部２５２が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を表わすデータと、攪乱元ｂ算出部２５３が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を表わすデータとを入力する。また、ユーザ秘密鍵出力部２２３は、ＣＰＵ９１１を用いて、委任元算出部２６１が記憶した（Ｄ’−Ｌ）個の元ｈλを表わすデータと、副委任元算出部２６２が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを表わすデータとを入力する。
ユーザ秘密鍵出力部２２３は、ＣＰＵ９１１を用いて、１個の元ｋ０と、（Ｄ＋２）個の元ｋｎ，（ａ）と、（Ｄ＋２）個の元ｋｎ，（ｂ）と、（Ｄ＋２）個の元ｆｍ，０と、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、（Ｄ’−Ｌ）個の元ｈλと、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λとを表わすデータを含むデータを、ユーザ秘密鍵として出力する。ユーザ秘密鍵出力部２２３が出力したユーザ秘密鍵は、ユーザ識別子入力部２２１が入力したユーザＩＤを持つクエリ発行装置３００に対して、秘密裡に通知される。
【００９０】
乱数ρ選択部２３１が記憶した整数ρｎや、副乱数ρ選択部２３２が記憶した整数ρｎ，ｍは、ユーザ秘密鍵の生成が終わったら、その後は使用しないので、消去してよい。同じクエリ発行装置３００から再びユーザ秘密鍵生成の要求があった場合は、前回選択した整数ρｎや整数ρｎ，ｍとは無関係に新たに整数ρｎや整数ρｎ，ｍを選択すればよい。
【００９１】
図９は、この実施の形態におけるユーザ秘密鍵生成処理Ｓ６６０の流れの一例を示すフローチャート図である。
ユーザ秘密鍵生成処理Ｓ６６０において、ユーザ秘密鍵生成装置２００は、ユーザ秘密鍵を生成する。なお、ここでは、ユーザ秘密鍵を算出する特定の手順を説明するが、計算手順は、ここで説明する手順に限らず、数学的に同値な結果が得られる計算手順であれば、ここで説明する手順と異なる手順であってもよい。
【００９２】
ユーザ秘密鍵生成処理Ｓ６６０は、検索元初期化工程Ｓ６６１、攪乱元初期化工程Ｓ６６２、λ初期化工程Ｓ６６３、委任元初期化工程Ｓ６６４、ｍ初期化工程Ｓ６６５、副委任元初期化工程Ｓ６６６、ｍ増加工程Ｓ６６７、ｍ判定工程Ｓ６６８、λ増加工程Ｓ６６９、λ判定工程Ｓ６７０、ｎ初期化工程Ｓ６７１、総積元Ｙ初期化工程Ｓ６７２、ｉ初期化工程Ｓ６７３、総積元Ｙ計算工程Ｓ６７４、ｉ増加工程Ｓ６７５、ｉ比較工程Ｓ６７６、ρ選択工程Ｓ６７７、検索元ａ算出工程Ｓ６７８、検索元ｂ算出工程Ｓ６７９、検索元計算工程Ｓ６８０、λ初期化工程Ｓ６８１、委任元計算工程Ｓ６８２、λ増加工程Ｓ６８３、λ判定工程Ｓ６８４、ｍ初期化工程Ｓ６８５、副乱数ρ選択工程Ｓ６８６、攪乱元ａ算出工程Ｓ６８７、攪乱元ｂ算出工程Ｓ６８８、攪乱元計算工程Ｓ６８９、λ初期化工程Ｓ６９０、副委任元計算工程Ｓ６９１、λ増加工程Ｓ６９２、λ判定工程Ｓ６９３、ｍ増加工程Ｓ６９４、ｍ判定工程Ｓ６９５、ｎ増加工程Ｓ６９６、ｎ判定工程Ｓ６９７を有する。
【００９３】
検索元初期化工程Ｓ６６１において、検索元算出部２４１は、ＲＡＭ９１４を用いて、秘密元ｗ記憶部２１２が記憶した１個の元ｗ’を、１個の元ｋ０を計算するための最初の値として記憶する。
【００９４】
攪乱元初期化工程Ｓ６６２において、攪乱元算出部２５１は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ｆｍ，０を計算するための最初の値として記憶する。
【００９５】
λ初期化工程Ｓ６６３において、委任元算出部２６１は、ＣＰＵ９１１を用いて、変数λの値を、整数Ｌに１を加えた値（Ｌ＋１）に設定する。
【００９６】
委任元初期化工程Ｓ６６４において、委任元算出部２６１は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ｈλを計算するための最初の値として記憶する。
【００９７】
ｍ初期化工程Ｓ６６５において、副委任元算出部２６２は、ＣＰＵ９１１を用いて、変数ｍの値を０に設定する。
【００９８】
副委任元初期化工程Ｓ６６６において、副委任元算出部２６２は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ｈｍ，λを計算するための最初の値として記憶する。
【００９９】
ｍ増加工程Ｓ６６７において、副委任元算出部２６２は、ＣＰＵ９１１を用いて、変数ｍの値を１増加させる。
【０１００】
ｍ判定工程Ｓ６６８において、副委任元算出部２６２は、ＣＰＵ９１１を用いて、変数ｍの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｍの値が（Ｄ＋１）以下である場合、副委任元算出部２６２は、ＣＰＵ９１１を用いて、副委任元初期化工程Ｓ６６６に戻り、次の元ｈｍ，λを設定する。
変数ｍの値が（Ｄ＋１）より大きい場合、副委任元算出部２６２は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の元ｈｍ，λの設定を終え、λ増加工程Ｓ６６９へ進む。
【０１０１】
λ増加工程Ｓ６６９において、委任元算出部２６１は、ＣＰＵ９１１を用いて、変数λの値を１増加させる。
【０１０２】
λ判定工程Ｓ６７０において、委任元算出部２６１は、ＣＰＵ９１１を用いて、変数λの値と、整数Ｄ’とを比較する。
変数λの値がＤ’以下である場合、委任元算出部２６１は、ＣＰＵ９１１を用いて、委任元初期化工程Ｓ６６４に戻り、次の元ｈλを設定する。
変数λの値がＤ’より大きい場合、委任元算出部２６１は、ＣＰＵ９１１を用いて、（Ｄ’−Ｌ）個の元ｈλ及び（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λの設定を終え、ｎ初期化工程Ｓ６７１へ進む。
【０１０３】
これにより、委任元初期化工程Ｓ６６４からλ判定工程Ｓ６７０までの工程は、（Ｄ’−Ｌ）回繰り返される。したがって、委任元算出部２６１は、委任元初期化工程Ｓ６６４を（Ｄ’−Ｌ）回実行し、（Ｌ＋１）以上Ｄ’以下の（Ｄ’−Ｌ）個の整数λそれぞれについて、１個の元ｈλの最初の値を記憶する。委任元算出部２６１は、全部で（Ｄ’−Ｌ）個の元ｈλを記憶する。
また、副委任元初期化工程Ｓ６６６からｍ判定工程Ｓ６６８までの工程は、変数λの繰り返し１回につき、（Ｄ＋２）回繰り返される。したがって、副委任元算出部２６２は、副委任元初期化工程Ｓ６６６を（Ｄ＋２）×（Ｄ’−Ｌ）回実行し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと、（Ｌ＋１）以上Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｍ，λ）それぞれについて、１個の元ｈｍ，λの最初の値を記憶する。副委任元算出部２６２は、全部で（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを記憶する。
【０１０４】
ｎ初期化工程Ｓ６７１において、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、変数ｎの値を０に設定する。
【０１０５】
総積元Ｙ初期化工程Ｓ６７２において、総積元Ｙ算出部２３３は、ＲＡＭ９１４を用いて、秘密元ｙ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、ｎが変数ｎの値と等しく、ｌ（エル）が０である１個の元ｙ’ｎ，０を、１個の元ΠＹ，ｎを計算するための最初の値として記憶する。
【０１０６】
ｉ初期化工程Ｓ６７３において、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、変数ｉの値を１に設定する。
【０１０７】
総積元Ｙ計算工程Ｓ６７４において、総積元Ｙ算出部２３３は、秘密元ｙ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、ｎが変数ｎの値と等しく、ｌ（エル）が変数ｉの値と等しい１個の元ｙ’ｎ，ｉと、識別子記憶部２２２が記憶したＬ個の整数Ｉｉのうち、ｉが変数ｉの値と等しい１個の整数Ｉｉとに基づいて、ＣＰＵ９１１を用いて、元ｙ’ｎ，ｉのＩｉ乗を計算する。総積元Ｙ算出部２３３は、記憶した１個の元ΠＹ，ｎと、計算した１個の元「ｙ’ｎ，ｉ＾Ｉｉ」とに基づいて、ＣＰＵ９１１を用いて、元ΠＹ，ｎと元「ｙ’ｎ，ｉ＾Ｉｉ」との積「ΠＹ，ｎ・ｙ’ｎ，ｉ＾Ｉｉ」を計算する。総積元Ｙ算出部２３３は、ＲＡＭ９１４を用いて、計算した積「ΠＹ，ｎ・ｙ’ｎ，ｌ＾Ｉｉ」を、１個の元ΠＹ，ｎの新たな値として記憶する。
【０１０８】
ｉ増加工程Ｓ６７５において、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、変数ｉの値を１増加させる。
【０１０９】
ｉ比較工程Ｓ６７６において、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、変数ｉの値と、整数Ｌとを比較する。
変数ｉの値が整数Ｌ以下である場合、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、総積元Ｙ計算工程Ｓ６７４に戻り、１個の元ΠＹ，ｎの計算を続ける。
変数ｉの値が整数Ｌより大きい場合、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、１個の元ΠＹ，ｎの計算を終え、ρ選択工程Ｓ６７７へ進む。
【０１１０】
ρ選択工程Ｓ６７７において、乱数ρ選択部２３１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに整数ρｎを１個選択する。
【０１１１】
検索元ａ算出工程Ｓ６７８において、検索元ａ算出部２４２は、秘密元ａ記憶部２１３が記憶した（Ｄ＋２）個の元ａ’ｎのうち、ｎが変数ｎの値と等しい１個の元ａ’ｎと、ρ選択工程Ｓ６７７で乱数ρ選択部２３１が選択した１個の整数ρｎとに基づいて、ＣＰＵ９１１を用いて、元ａ’ｎの「−ρｎ」乗を計算して、乗法群Ｇ２の元である１個の元ｋｎ，（ａ）を得る。
【０１１２】
検索元ｂ算出工程Ｓ６７９において、検索元ｂ算出部２４３は、秘密元ｂ記憶部２１４が記憶した（Ｄ＋２）個の元ｂ’ｎのうち、ｎが変数ｎの値と等しい１個の元ｂ’ｎと、ρ選択工程Ｓ６７７で乱数ρ選択部２３１が選択した１個の整数ρｎとに基づいて、ＣＰＵ９１１を用いて、元ｂ’ｎの「−ρｎ」乗を計算して、乗法群Ｇ２の元である１個の元ｋｎ，（ｂ）を得る。
【０１１３】
検索元計算工程Ｓ６８０において、検索元算出部２４１は、総積元Ｙ算出部２３３が記憶した１個の元ΠＹ，ｎと、ρ選択工程Ｓ６７７で乱数ρ選択部２３１が選択した１個の整数ρｎとに基づいて、ＣＰＵ９１１を用いて、元ΠＹ，ｎのρｎ乗を計算する。検索元算出部２４１は、ＣＰＵ９１１を用いて、記憶した１個の元ｋ０と、計算した１個の元「ΠＹ，ｎ＾ρｎ」とに基づいて、元ｋ０と、元「ΠＹ，ｎ＾ρｎ」との積を計算する。検索元算出部２４１は、ＲＡＭ９１４を用いて、計算した積「ｋ０・ΠＹ，ｎ＾ρｎ」を、１個の元ｋ０の新たな値として記憶する。
【０１１４】
λ初期化工程Ｓ６８１において、委任元算出部２６１は、ＣＰＵ９１１を用いて、変数λの値を、整数Ｌに１を加えた値（Ｌ＋１）に設定する。
【０１１５】
委任元計算工程Ｓ６８２において、委任元算出部２６１は、秘密元ｙ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が変数λの値に等しい１個の元ｙ’ｎ，λと、ρ選択工程Ｓ６７７で乱数ρ選択部２３１が選択した整数ρｎとに基づいて、ＣＰＵ９１１を用いて、元ｙ’ｎ，λのρｎ乗を計算する。委任元算出部２６１は、記憶した（Ｄ’−Ｌ）個の元ｈλのうち、λが変数λの値に等しい１個の元ｈλと、計算した元「ｙ’ｎ，λ＾ρｎ」とに基づいて、ＣＰＵ９１１を用いて、元ｈλと、元「ｙ’ｎ，λ＾ρｎ」との積を計算する。委任元算出部２６１は、ＲＡＭ９１４を用いて、計算した積「ｈλ・ｙ’ｎ，λ＾ρｎ」を、λが変数λの値に等しい１個の元ｈλの新しい値として記憶する。
【０１１６】
λ増加工程Ｓ６８３において、委任元算出部２６１は、ＣＰＵ９１１を用いて、変数λの値を１増加させる。
【０１１７】
λ判定工程Ｓ６８４において、委任元算出部２６１は、ＣＰＵ９１１を用いて、変数λの値と、整数Ｄ’とを比較する。
変数λの値が整数Ｄ’以下である場合、委任元算出部２６１は、ＣＰＵ９１１を用いて、委任元計算工程Ｓ６８２に戻り、次の元ｈλを計算する。
変数λの値が整数Ｄ’より大きい場合、委任元算出部２６１は、ＣＰＵ９１１を用いて、ｍ初期化工程Ｓ６８５へ進む。
【０１１８】
ｍ初期化工程Ｓ６８５において、副乱数ρ選択部２３２は、ＣＰＵ９１１を用いて、変数ｍの値を０に設定する。
【０１１９】
副乱数ρ選択工程Ｓ６８６において、副乱数ρ選択部２３２は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに１個の整数ρｎ，ｍを選択する。
【０１２０】
攪乱元ａ算出工程Ｓ６８７において、攪乱元ａ算出部２５２は、ＣＰＵ９１１を用いて、秘密元ａ記憶部２１３が記憶した（Ｄ＋２）個の元ａ’ｎのうち、ｎが変数ｎの値に等しい１個の元ａ’ｎと、副乱数ρ選択工程Ｓ６８６で副乱数ρ選択部２３２が選択した１個の整数ρｎ，ｍとに基づいて、元ａ’ｎの「−ρｎ，ｍ」乗を計算して、乗法群Ｇ２の元である１個の元ｆｍ，ｎ，（ａ）を得る。
【０１２１】
攪乱元ｂ算出工程Ｓ６８８において、攪乱元ｂ算出部２５３は、秘密元ｂ記憶部２１４が記憶した（Ｄ＋２）個の元ｂ’ｎのうち、ｎが変数ｎの値に等しい１個の元ｂ’ｎと、副乱数ρ選択工程Ｓ６８６で副乱数ρ選択部２３２が選択した１個の整数ρｎ，ｍとに基づいて、ＣＰＵ９１１を用いて、元ｂ’ｎの「−ρｎ，ｍ」乗を計算して、乗法群Ｇ２の元である１個の元ｆｍ，ｎ，（ｂ）を得る。
【０１２２】
攪乱元計算工程Ｓ６８９において、攪乱元算出部２５１は、総積元Ｙ算出部２３３が記憶した１個の元ΠＹ，ｎと、副乱数ρ選択工程Ｓ６８６で副乱数ρ選択部２３２が選択した１個の整数ρｎ，ｍとに基づいて、ＣＰＵ９１１を用いて、元ΠＹ，ｎのρｎ，ｍ乗を計算する。攪乱元算出部２５１は、記憶した１個の元ｆｍ，０と、計算した元「ΠＹ，ｎ＾ρｎ，ｍ」とに基づいて、ＣＰＵ９１１を用いて、元ｆｍ，０と元「ΠＹ，ｎ＾ρｎ，ｍ」との積を計算する。攪乱元算出部２５１は、ＲＡＭ９１４を用いて、計算した積「ｆｍ，０・ΠＹ，ｎ＾ρｎ，ｍ」を、元ｆｍ，０の新しい値として記憶する。
【０１２３】
λ初期化工程Ｓ６９０において、副委任元算出部２６２は、ＣＰＵ９１１を用いて、変数λの値を、整数Ｌに１を加えた値（Ｌ＋１）に設定する。
【０１２４】
副委任元計算工程Ｓ６９１において、副委任元算出部２６２は、秘密元ｙ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌが変数λの値に等しい１個の元ｙ’ｎ，λと、副乱数ρ選択工程Ｓ６８６で副乱数ρ選択部２３２が選択した１個の整数ρｎ，ｍとに基づいて、ＣＰＵ９１１を用いて、元ｙ’ｎ，λのρｎ，ｍ乗を計算する。副委任元算出部２６２は、記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、ｍが変数ｍの値に等しく、λが変数λの値に等しい１個の元ｈｍ，λと、計算した元「ｙ’ｎ，λ＾ρｎ，ｍ」とに基づいて、ＣＰＵ９１１を用いて、元ｈｍ，λと元「ｙ’ｎ，λ＾ρｎ，ｍ」との積を計算する。副委任元算出部２６２は、ＲＡＭ９１４を用いて、計算した積「ｈｍ，λ・ｙ’ｎ，λ＾ρｎ，ｍ」を、ｍが変数ｍの値に等しく、λが変数λの値に等しい１個の元ｈｍ，λの新しい値として記憶する。
【０１２５】
λ増加工程Ｓ６９２において、副委任元算出部２６２は、ＣＰＵ９１１を用いて、変数λの値を１増加させる。
【０１２６】
λ判定工程Ｓ６９３において、副委任元算出部２６２は、ＣＰＵ９１１を用いて、変数λの値と、整数Ｄ’とを比較する。
変数λの値が整数Ｄ’以下である場合、副委任元算出部２６２は、ＣＰＵ９１１を用いて、副委任元計算工程Ｓ６９１に戻り、次の元ｈｍ，λを計算する。
変数λの値が整数Ｄ’より大きい場合、副委任元算出部２６２は、ＣＰＵ９１１を用いて、ｍ増加工程Ｓ６９４へ進む。
【０１２７】
ｍ増加工程Ｓ６９４において、副乱数ρ選択部２３２は、ＣＰＵ９１１を用いて、変数ｍの値を１増加させる。
【０１２８】
ｍ判定工程Ｓ６９５において、副乱数ρ選択部２３２は、ＣＰＵ９１１を用いて、変数ｍの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｍの値が（Ｄ＋１）以下である場合、副乱数ρ選択部２３２は、ＣＰＵ９１１を用いて、副乱数ρ選択工程Ｓ６８６に戻り、次の整数ρｎ，ｍを選択する。
変数ｍの値が（Ｄ＋１）より大きい場合、副乱数ρ選択部２３２は、ＣＰＵ９１１を用いて、ｎ増加工程Ｓ６９６へ進む。
【０１２９】
ｎ増加工程Ｓ６９６において、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、変数ｎの値を１増加させる。
【０１３０】
ｎ判定工程Ｓ６９７において、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、変数ｎの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｎの値が（Ｄ＋１）以下である場合、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、総積元Ｙ初期化工程Ｓ６７２に戻り、次の元ΠＹ，ｎを算出する。
変数ｎの値が（Ｄ＋１）より大きい場合、総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、ユーザ秘密鍵生成処理Ｓ６６０を終了する。
【０１３１】
これにより、総積元Ｙ初期化工程Ｓ６７２からｎ判定工程Ｓ６９７までの工程は、（Ｄ＋２）回繰り返される。乱数ρ選択部２３１は、ρ選択工程Ｓ６７７を（Ｄ＋２）回実行して、（Ｄ＋２）個の整数ρｎを選択する。検索元ａ算出部２４２は、検索元ａ算出工程Ｓ６７８を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｋｎ，（ａ）を算出する。検索元ｂ算出部２４３は、検索元ｂ算出工程Ｓ６７９を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｋｎ，（ｂ）を算出する。
検索元算出部２４１は、検索元計算工程Ｓ６８０を（Ｄ＋２）回実行して、１個の元ｋ０を算出する。
総積元Ｙ算出部２３３は、変数ｎの繰り返し１回につき、総積元Ｙ計算工程Ｓ６７４からｉ比較工程Ｓ６７６までの工程をＬ回繰り返して、１個の元ΠＹ，ｎを算出する。これを（Ｄ＋２）回繰り返すことにより、総積元Ｙ算出部２３３は、全部で（Ｄ＋２）個の元ΠＹ，ｎを算出する。
委任元算出部２６１は、変数ｎの繰り返し１回につき、委任元計算工程Ｓ６８２からλ判定工程Ｓ６８４までの工程を（Ｄ’−Ｌ）回繰り返して、（Ｄ’−Ｌ）個の元ｈλについて計算を進める。これを（Ｄ＋２）回繰り返すことにより、委任元算出部２６１は、（Ｄ’−Ｌ）個の元ｈλを算出する。
【０１３２】
また、副乱数ρ選択工程Ｓ６８６からｍ判定工程Ｓ６９５までの工程は、変数ｎの繰り返し１回につき、（Ｄ＋２）回繰り返される。攪乱元ａ算出部２５２は、攪乱元ａ算出工程Ｓ６８７を（Ｄ＋２）×（Ｄ＋２）回実行して、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を算出する。攪乱元ｂ算出部２５３は、攪乱元ｂ算出工程Ｓ６８８を（Ｄ＋２）×（Ｄ＋２）回実行して、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を算出する。
攪乱元算出部２５１は、変数ｎの繰り返し１回につき、攪乱元計算工程Ｓ６８９を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｆｍ，０について計算を進める。これを（Ｄ＋２）回繰り返すことにより、攪乱元算出部２５１は、（Ｄ＋２）個の元ｆｍ，０を算出する。
副委任元算出部２６２は、変数ｍの繰り返し１回につき、副委任元計算工程Ｓ６９１からλ判定工程Ｓ６９３までの工程を（Ｄ’−Ｌ）回繰り返して、（Ｄ’−Ｌ）個の元ｈｍ，λについて計算を進める。変数ｎの繰り返し１回につき、これを（Ｄ＋２）回繰り返すことにより、副委任元算出部２６２は、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λについて計算を進める。更にこれを（Ｄ＋２）回繰り返すことにより、副委任元算出部２６２は、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを算出する。
【０１３３】
図１０は、この実施の形態におけるクエリ発行装置３００の機能ブロックの構成の一例を示すブロック構成図である。
クエリ発行装置３００は、クエリ発行装置３００自身のユーザ秘密鍵を使って、検索キーワードを検索するためのクエリを生成する。また、クエリ発行装置３００に子ユーザ秘密鍵を生成する権限がある場合、クエリ発行装置３００は、クエリ発行装置３００自身のユーザ秘密鍵を使って、子ユーザ秘密鍵を生成する。なお、クエリ発行装置３００に孫ユーザ秘密鍵を生成する権限がある場合、クエリ発行装置３００は、クエリ発行装置３００自身のユーザ秘密鍵を使って、子ユーザ秘密鍵を生成し、生成した子ユーザ秘密鍵を使って、孫ユーザ秘密鍵を生成する。クエリ発行装置３００にもっと下位のユーザ秘密鍵を生成する権限がある場合も同様である。
クエリ発行装置３００は、ユーザ識別子記憶部３１１、ユーザ秘密鍵要求出力部３１２、ユーザ秘密鍵入力部３１３、ユーザ秘密鍵記憶部３２０、共通処理部３３０、検索キーワード入力部３４１、検索キーワード記憶部３４２、クエリ出力部３４３、結果入力部３４４、結果出力部３４５、クエリ生成部３５０、子ユーザ識別子入力部３６１、子ユーザ識別子記憶部３６２、子ユーザ秘密鍵出力部３６３、子ユーザ秘密鍵生成部３７０を有する。
【０１３４】
ユーザ識別子記憶部３１１は、磁気ディスク装置９２０を用いて、あらかじめクエリ発行装置３００自身のユーザＩＤを記憶している。ユーザＩＤが文字列である場合、ユーザ識別子記憶部３１１は、ユーザＩＤである文字列あるいはユーザＩＤである文字列を分節したＬ個の部分文字列をそのまま記憶する構成であってもよい。あるいは、ユーザ識別子記憶部３１１は、ユーザＩＤである文字列を分節したＬ個の部分文字列を０以上ｐ未満の整数に変換したＬ個の整数Ｉｉを記憶する構成であってもよい。
【０１３５】
ユーザ秘密鍵要求出力部３１２は、ＣＰＵ９１１を用いて、ユーザ秘密鍵生成装置２００や上位のクエリ発行装置３００に対して、ユーザ秘密鍵の生成を要求するメッセージを生成する。ユーザ秘密鍵要求出力部３１２は、ユーザ識別子記憶部３１１が記憶したユーザＩＤを、メッセージに含めることにより、クエリ発行装置３００自身のユーザＩＤをユーザ秘密鍵生成装置２００や上位のクエリ発行装置３００に通知する。ユーザ秘密鍵要求出力部３１２は、ＣＰＵ９１１を用いて、生成したメッセージを出力する。ユーザ秘密鍵要求出力部３１２が出力したメッセージは、ユーザ秘密鍵生成装置２００もしくは上位のクエリ発行装置３００に対して送信される。
【０１３６】
ユーザ秘密鍵入力部３１３は、ＣＰＵ９１１を用いて、クエリ発行装置３００自身のユーザ秘密鍵を入力する。ユーザ秘密鍵入力部３１３が入力するユーザ秘密鍵は、ユーザ秘密鍵要求出力部３１２が生成したメッセージによる要求などに基づいて、ユーザ秘密鍵生成装置２００または上位のクエリ発行装置３００が生成し、クエリ発行装置３００に対して秘密裡に通知されたものである。ユーザ秘密鍵には、１個の元ｋ０と、（Ｄ＋２）個の元ｋｎ，（ａ）と、（Ｄ＋２）個の元ｋｎ，（ｂ）と、（Ｄ＋２）個の元ｆｍ，０と、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、（Ｄ’−Ｌ）個の元ｈλと、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λとを表わすデータが含まれる。
【０１３７】
ユーザ秘密鍵記憶部３２０は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵入力部３１３が入力したユーザ秘密鍵を記憶する。
【０１３８】
共通処理部３３０は、ＣＰＵ９１１を用いて、ユーザ秘密鍵記憶部３２０が記憶したユーザ秘密鍵に基づいて、クエリを生成する処理と、子ユーザ秘密鍵を生成する処理とに共通する処理を実行する。
【０１３９】
検索キーワード入力部３４１は、ＣＰＵ９１１を用いて、検索したいキーワードとして、１個の整数Ｗを入力する。Ｗは、０以上ｐ未満の整数である。キーワードが文字列である場合、検索キーワード入力部３４１は、文字列であるキーワードをコンピュータ内部で表現するビット列を、整数を表現するビット列として解釈する構成であってもよい。あるいは、任意の長さの文字列を０以上ｐ未満の整数に変換するハッシュ関数を用いて、検索キーワード入力部３４１が、キーワードを整数に変換する構成であってもよい。
【０１４０】
検索キーワード記憶部３４２は、ＲＡＭ９１４を用いて、検索キーワード入力部３４１が入力した１個の整数Ｗを表わすデータを記憶する。
【０１４１】
クエリ生成部３５０は、ユーザ秘密鍵記憶部３２０が記憶したユーザ秘密鍵と、共通処理部３３０が処理した結果と、検索キーワード記憶部３４２が記憶した整数Ｗを表わすデータとに基づいて、ＣＰＵ９１１を用いて、キーワードを検索するクエリを生成する。
【０１４２】
クエリ出力部３４３は、クエリ生成部３５０が生成したクエリを出力する。クエリ出力部３４３が出力したクエリは、検索装置５００に対して通知される。
【０１４３】
結果入力部３４４は、ＣＰＵ９１１を用いて、クエリ出力部３４３が出力したクエリに対する応答として、検索装置５００が検索した結果を表わすメッセージを入力する。
【０１４４】
結果出力部３４５は、ＣＰＵ９１１を用いて、結果入力部３４４が入力したメッセージを出力する。結果出力部３４５が出力したメッセージは、例えば表示装置９０１の画面に表示されるなどして、クエリ発行装置３００の利用者に知らされる。
【０１４５】
子ユーザ識別子入力部３６１は、ＣＰＵ９１１を用いて、子ユーザ秘密鍵の生成を要求する子クエリ発行装置のユーザＩＤとして、クエリ発行装置３００自身のユーザＩＤであるＬ個の整数Ｉｉと同じ整数Ｉｉと、１個の整数ＩＬ＋１とからなる（Ｌ＋１）個の整数を入力する。子ユーザ識別子入力部３６１は、入力した（Ｌ＋１）個の整数のうち、Ｌ個の整数Ｉｉと、ユーザ識別子記憶部３１１が記憶したユーザＩＤとを比較して、子ユーザ秘密鍵の生成を要求したクエリ発行装置が子クエリ発行装置であることを確認する。
ユーザＩＤが文字列である場合、子ユーザ識別子入力部３６１は、文字列であるユーザＩＤを入力する構成であってもよい。その場合、子ユーザ識別子入力部３６１は、入力したユーザＩＤを（Ｌ＋１）個の部分文字列に分節し、分節した（Ｌ＋１）個の部分文字列を整数に変換する。
【０１４６】
子ユーザ識別子記憶部３６２は、ＲＡＭ９１４を用いて、子ユーザ識別子入力部３６１が入力した（Ｌ＋１）個の整数のうち、１個の整数ＩＬ＋１を表わすデータを記憶する。
【０１４７】
子ユーザ秘密鍵生成部３７０は、ＣＰＵ９１１を用いて、ユーザ秘密鍵記憶部３２０が記憶したユーザ秘密鍵と、共通処理部３３０が処理した結果と、子ユーザ識別子記憶部３６２が記憶した整数ＩＬ＋１を表わすデータとに基づいて、子ユーザ秘密鍵を生成する。
【０１４８】
子ユーザ秘密鍵出力部３６３は、ＣＰＵ９１１を用いて、子ユーザ秘密鍵生成部３７０が生成した子ユーザ秘密鍵を出力する。子ユーザ秘密鍵出力部３６３が出力した子ユーザ秘密鍵は、子ユーザ秘密鍵の生成を要求した子クエリ発行装置に対して、秘密裡に通知される。
【０１４９】
図１１は、この実施の形態におけるクエリ発行装置３００のうちユーザ秘密鍵記憶部３２０・共通処理部３３０・クエリ生成部３５０の詳細なブロック構成の一例を示す詳細ブロック図である。
ユーザ秘密鍵記憶部３２０は、検索元記憶部３２１、検索元ａ記憶部３２２、検索元ｂ記憶部３２３、攪乱元記憶部３２４、攪乱元ａ記憶部３２５、攪乱元ｂ記憶部３２６、委任元記憶部３２７、副委任元記憶部３２８を有する。
共通処理部３３０は、乱数π選択部３３１、総積元Ｆ算出部３３２、総積元Ｈ算出部３３３、質問元ａ算出部３３４、質問元ｂ算出部３３５を有する。
クエリ生成部３５０は、質問元算出部３５１を有する。
【０１５０】
検索元記憶部３２１は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である１個の元ｋ０を表わすデータを記憶する。
検索元ａ記憶部３２２は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）を表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。
検索元ｂ記憶部３２３は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。
攪乱元記憶部３２４は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０を表わすデータを記憶する。ｍは、０以上（Ｄ＋１）以下の整数である。
攪乱元ａ記憶部３２５は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を表わすデータを記憶する。ｍは、０以上（Ｄ＋１）以下の整数である。ｎは、０以上（Ｄ＋１）以下の整数である。
攪乱元ｂ記憶部３２６は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を表わすデータを記憶する。ｍは、０以上（Ｄ＋１）以下の整数である。ｎは、０以上（Ｄ＋１）以下の整数である。
委任元記憶部３２７は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である（Ｄ’−Ｌ）個の元ｈλを表わすデータを記憶する。λは、（Ｌ＋１）以上Ｄ’以下の整数である。
副委任元記憶部３２８は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを表わすデータを記憶する。ｍは、０以上（Ｄ＋１）以下の整数である。λは、（Ｌ＋１）以上Ｄ’以下の整数である。
【０１５１】
乱数π選択部３３１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに（Ｄ＋２）個の整数を選択する。以下、乱数π選択部３３１が選択した整数を「πｍ」と呼ぶ。ｍは、０以上（Ｄ＋１）以下の整数である。乱数π選択部３３１は、ＲＡＭ９１４を用いて、選択した（Ｄ＋２）個の整数πｍを表わすデータを記憶する。
【０１５２】
総積元Ｆ算出部３３２は、ＣＰＵ９１１を用いて、攪乱元記憶部３２４が記憶した（Ｄ＋２）個の元ｆｍ，０を表わすデータと、乱数π選択部３３１が記憶した（Ｄ＋２）個の整数πｍを表わすデータとを入力する。
総積元Ｆ算出部３３２は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数πｍそれぞれについて、ｍが同じ１個の元ｆｍ，０のπｍ乗を計算する。総積元Ｆ算出部３３２が算出した元「ｆｍ，０＾πｍ」は、乗法群Ｇ２の元である。総積元Ｆ算出部３３２は、全部で（Ｄ＋２）個の元「ｆｍ，０＾πｍ」を算出する。
総積元Ｆ算出部３３２は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）個の元「ｆｍ，０＾πｍ」の総積を計算する。以下、総積元Ｆ算出部３３２が算出した総積を「ΠＦ」と呼ぶ。ΠＦは、乗法群Ｇ２の元である。総積元Ｆ算出部３３２は、ＲＡＭ９１４を用いて、算出した１個の総積ΠＦを表わすデータを記憶する。
【０１５３】
総積元Ｈ算出部３３３は、ＣＰＵ９１１を用いて、委任元記憶部３２７が記憶した（Ｄ’−Ｌ）個の元ｈλを表わすデータと、副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを表わすデータと、乱数π選択部３３１が記憶した（Ｄ＋２）個の整数πｍを表わすデータとを入力する。
総積元Ｈ算出部３３３は、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、λが（Ｌ＋１）に等しい（Ｄ＋２）個の元ｈｍ，Ｌ＋１と、（Ｄ＋２）個の整数πｍとに基づいて、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数πｍそれぞれについて、ｍが同じ１個の元ｈｍ，Ｌ＋１のπｍ乗を計算する。
総積元Ｈ算出部３３３は、（Ｄ’−Ｌ）個の元ｈλのうち、λが（Ｌ＋１）に等しい１個の元ｈＬ＋１と、算出した（Ｄ＋２）個の元「ｈｍ，Ｌ＋１＾πｍ」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｈＬ＋１と、（Ｄ＋２）個の元「ｈｍ，Ｌ＋１＾πｍ」とを合わせた全部で（Ｄ＋３）個の元の総積を計算する。以下、総積元Ｈ算出部３３３が算出した総積を「ΠＨ」と呼ぶ。ΠＨは、乗法群Ｇ２の元である。総積元Ｈ算出部３３３は、ＲＡＭ９１４を用いて、算出した１個の元ΠＨを表わすデータを記憶する。
【０１５４】
質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、検索元ａ記憶部３２２が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）を表わすデータと、攪乱元ａ記憶部３２５が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を表わすデータと、乱数π選択部３３１が記憶した（Ｄ＋２）個の整数πｍを表わすデータとを入力する。
質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、１個の整数πｍにつき、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のうち、ｍが同じ（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）それぞれのπｍ乗を計算する。質問元ａ算出部３３４が算出した元「ｆｍ，ｎ，（ａ）＾πｍ」は、乗法群Ｇ２の元である。整数πｍは（Ｄ＋２）個あるから、質問元ａ算出部３３４は、（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ａ）＾πｍ」を算出する。
質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、１個の元ｋｎ，（ａ）につき、算出した（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ａ）＾πｍ」のうち、ｎが同じ（Ｄ＋２）個の元「ｆｍ，ｎ，（ａ）＾πｍ」と、１個の元ｋｎ，（ａ）とを合わせた全部で（Ｄ＋３）個の元の総積を計算する。以下、質問元ａ算出部３３４が算出した総積を「ｋ’ｎ，（ａ）」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｋ’ｎ，（ａ）は、乗法群Ｇ２の元である。質問元ａ算出部３３４は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）を表わすデータを記憶する。
【０１５５】
質問元ｂ算出部３３５は、ＣＰＵ９１１を用いて、検索元ｂ記憶部３２３が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）を表わすデータと、攪乱元ｂ記憶部３２６が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を表わすデータと、乱数π選択部３３１が記憶した（Ｄ＋２）個の整数πｍを表わすデータとを入力する。
質問元ｂ算出部３３５は、ＣＰＵ９１１を用いて、１個の整数πｍにつき、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のうち、ｍが同じ（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）それぞれのπｍ乗を計算する。質問元ｂ算出部３３５が算出した元「ｆｍ，ｎ，（ｂ）＾πｍ」は、乗法群Ｇ２の元である。整数πｍは（Ｄ＋２）個あるから、質問元ｂ算出部３３５は、（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ｂ）＾πｍ」を算出する。
質問元ｂ算出部３３５は、ＣＰＵ９１１を用いて、１個の元ｋｎ，（ｂ）につき、算出した（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ｂ）＾πｍ」のうち、ｎが同じ（Ｄ＋２）個の元「ｆｍ，ｎ，（ｂ）＾πｍ」と、１個の元ｋｎ，（ｂ）とを合わせた全部で（Ｄ＋３）個の元の総積を計算する。以下、質問元ｂ算出部３３５が算出した総積を「ｋ’ｎ，（ｂ）」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｋ’ｎ，（ｂ）は、乗法群Ｇ２の元である。質問元ｂ算出部３３５は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を表わすデータを記憶する。
【０１５６】
質問元算出部３５１は、ＣＰＵ９１１を用いて、検索元記憶部３２１が記憶した１個の元ｋ０を表わすデータと、検索キーワード記憶部３４２が記憶した１個の整数Ｗを表わすデータと、総積元Ｆ算出部３３２が記憶した１個の元ΠＦを表わすデータと、総積元Ｈ算出部３３３が記憶した１個の元ΠＨを表わすデータとを入力する。質問元算出部３５１は、ＣＰＵ９１１を用いて、元ΠＨのＷ乗を計算する。質問元算出部３５１が算出した元「ΠＨ＾Ｗ」は、乗法群Ｇ２の元である。質問元算出部３５１は、ＣＰＵ９１１を用いて、１個の元ｋ０と、１個の元ΠＦと、算出した１個の元「ΠＨ＾Ｗ」との積「ｋ０・ΠＦ・ΠＨ＾Ｗ」を計算する。以下、質問元算出部３５１が算出した積「ｋ０・ΠＦ・ΠＨ＾Ｗ」を「ｋ’０」と呼ぶ。ｋ’０は、乗法群Ｇ２の元である。質問元算出部３５１は、ＲＡＭ９１４を用いて、算出した１個の元ｋ’０を表わすデータを記憶する。
【０１５７】
クエリ出力部３４３は、ＣＰＵ９１１を用いて、ユーザ識別子記憶部３１１が記憶したユーザＩＤと、質問元算出部３５１が記憶した１個の元ｋ’０を表わすデータと、質問元ａ算出部３３４が記憶した（Ｄ＋２）個の元ｋ’ｎ，（ａ）を表わすデータと、質問元ｂ算出部３３５が記憶した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を表わすデータとを入力する。クエリ出力部３４３は、ＣＰＵ９１１を用いて、ユーザＩＤと、１個の元ｋ’０と、（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とを表わすデータを含むデータを、クエリとして出力する。
【０１５８】
このように、委任元記憶部３２７が記憶した（Ｄ’−Ｌ）個の元ｈλおよび副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、クエリ生成に使用するのは、λが（Ｌ＋１）に等しい１個の元ｈＬ＋１および（Ｄ＋２）個の元ｈｍ，Ｌ＋１だけである。λは（Ｌ＋１）以上Ｄ’以下の整数であるから、整数Ｄ’が（Ｌ＋１）以上Ｄ以下のいずれの値であっても、クエリ発行装置３００は、クエリを生成することができる。
【０１５９】
図１２は、この実施の形態における共通処理Ｓ７１０の流れの一例を示すフローチャート図である。
共通処理Ｓ７１０において、共通処理部３３０は、クエリ生成と子ユーザ秘密鍵生成とに共通する処理を実行する。
なお、ここでは、クエリを生成しあるいは子ユーザ秘密鍵を算出する特定の手順を説明するが、計算手順は、ここで説明する手順に限らず、数学的に同値な結果が得られる計算手順であれば、ここで説明する手順と異なる手順であってもよい。
【０１６０】
共通処理Ｓ７１０は、総積元Ｆ初期化工程Ｓ７１１、総積元Ｈ初期化工程Ｓ７１２、ｍ初期化工程Ｓ７１３、乱数π選択工程Ｓ７１４、総積元Ｆ計算工程Ｓ７１５、総積元Ｈ計算工程Ｓ７１６、ｍ増加工程Ｓ７１７、ｍ判定工程Ｓ７１８、ｎ初期化工程Ｓ７１９、質問元ａ初期化工程Ｓ７２０、質問元ｂ初期化工程Ｓ７２１、ｍ初期化工程Ｓ７２２、質問元ａ計算工程Ｓ７２３、質問元ｂ計算工程Ｓ７２４、ｍ増加工程Ｓ７２５、ｍ判定工程Ｓ７２６、ｎ増加工程Ｓ７２７、ｎ判定工程Ｓ７２８を有する。
【０１６１】
総積元Ｆ初期化工程Ｓ７１１において、総積元Ｆ算出部３３２は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ΠＦを計算するための最初の値として記憶する。
【０１６２】
総積元Ｈ初期化工程Ｓ７１２において、総積元Ｈ算出部３３３は、ＲＡＭ９１４を用いて、委任元記憶部３２７が記憶した（Ｄ’−Ｌ）個の元ｈλのうち、λが（Ｌ＋１）である１個の元ｈＬ＋１を、１個の元ΠＨを計算するための最初の値として記憶する。
【０１６３】
ｍ初期化工程Ｓ７１３において、乱数π選択部３３１は、ＣＰＵ９１１を用いて、変数ｍの値を０に設定する。
【０１６４】
乱数π選択工程Ｓ７１４において、乱数π選択部３３１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに１個の整数πｍを選択する。
【０１６５】
総積元Ｆ計算工程Ｓ７１５において、総積元Ｆ算出部３３２は、攪乱元記憶部３２４が記憶した（Ｄ＋２）個の元ｆｍ，０のうち、ｍが変数ｍに等しい１個の元ｆｍ，０と、乱数π選択工程Ｓ７１４で乱数π選択部３３１が選択した１個の整数πｍとに基づいて、ＣＰＵ９１１を用いて、元ｆｍ，０のπｍ乗を計算する。総積元Ｆ算出部３３２は、ＣＰＵ９１１を用いて、記憶した１個の元ΠＦと、算出した１個の元「ｆｍ，０＾πｍ」との積「ΠＦ・ｆｍ，０＾πｍ」を計算する。総積元Ｆ算出部３３２は、ＲＡＭ９１４を用いて、算出した１個の積「ΠＦ・ｆｍ，０＾πｍ」を、元ΠＦの新しい値として記憶する。
【０１６６】
総積元Ｈ計算工程Ｓ７１６において、総積元Ｈ算出部３３３は、副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、ｍが変数ｍに等しく、λが（Ｌ＋１）に等しい１個の元ｈｍ，Ｌ＋１と、乱数π選択工程Ｓ７１４で乱数π選択部３３１が選択した整数πｍとに基づいて、ＣＰＵ９１１を用いて、元ｈｍ，Ｌ＋１のπｍ乗を計算する。総積元Ｈ算出部３３３は、ＣＰＵ９１１を用いて、記憶した１個の元ΠＨと、算出した１個の元「ｈｍ，Ｌ＋１＾πｍ」との積「ΠＨ・ｈｍ，Ｌ＋１＾πｍ」を計算する。総積元Ｈ算出部３３３は、ＲＡＭ９１４を用いて、算出した１個の積「ΠＨ・ｈｍ，Ｌ＋１＾πｍ」を、元ΠＨの新しい値として記憶する。
【０１６７】
ｍ増加工程Ｓ７１７において、乱数π選択部３３１は、ＣＰＵ９１１を用いて、変数ｍの値を１増加させる。
【０１６８】
ｍ判定工程Ｓ７１８において、乱数π選択部３３１は、ＣＰＵ９１１を用いて、変数ｍの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｍの値が（Ｄ＋１）以下である場合、乱数π選択部３３１は、ＣＰＵ９１１を用いて、乱数π選択工程Ｓ７１４に戻り、１個の元ΠＦ及び１個の元ΠＨの計算を続ける。
変数ｍの値が（Ｄ＋１）より大きい場合、乱数π選択部３３１は、ＣＰＵ９１１を用いて、１個の元ΠＦ及び１個の元ΠＨの計算を終え、ｎ初期化工程Ｓ７１９へ進む。
【０１６９】
これにより、乱数π選択工程Ｓ７１４からｍ判定工程Ｓ７１８までの工程は、（Ｄ＋２）回繰り返される。乱数π選択部３３１は、乱数π選択工程Ｓ７１４を（Ｄ＋２）回実行して、（Ｄ＋２）個の整数πｍを選択する。
総積元Ｆ算出部３３２は、総積元Ｆ計算工程Ｓ７１５を（Ｄ＋２）回実行して、１個の元ΠＦを算出する。総積元Ｈ算出部３３３は、総積元Ｈ計算工程Ｓ７１６を（Ｄ＋２）回実行して、１個の元ΠＨを算出する。
【０１７０】
ｎ初期化工程Ｓ７１９において、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、変数ｎの値を０に設定する。
【０１７１】
質問元ａ初期化工程Ｓ７２０において、質問元ａ算出部３３４は、ＲＡＭ９１４を用いて、検索元ａ記憶部３２２が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）のうち、ｎが変数ｎの値に等しい１個の元ｋｎ，（ａ）を、元ｋ’ｎ，（ａ）を計算するための最初の値として記憶する。
【０１７２】
質問元ｂ初期化工程Ｓ７２１において、質問元ｂ算出部３３５は、ＲＡＭ９１４を用いて、検索元ｂ記憶部３２３が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）のうち、ｎが変数ｎの値に等しい１個の元ｋｎ，（ｂ）を、元ｋ’ｎ，（ｂ）を計算するための最初の値として記憶する。
【０１７３】
ｍ初期化工程Ｓ７２２において、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、変数ｍの値を０に設定する。
【０１７４】
質問元ａ計算工程Ｓ７２３において、質問元ａ算出部３３４は、攪乱元ａ記憶部３２５が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のうち、ｍが変数ｍの値に等しく、ｎが変数ｎの値に等しい１個の元ｆｍ，ｎ，（ａ）と、（Ｄ＋２）回の乱数π選択工程Ｓ７１４で乱数π選択部３３１が選択した（Ｄ＋２）個の整数πｍのうち、ｍが変数ｍの値に等しい１個の整数πｍとに基づいて、ＣＰＵ９１１を用いて、元ｆｍ，ｎ，（ａ）のπｍ乗を計算する。質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、記憶した１個の元ｋ’ｎ，（ａ）と、算出した１個の元「ｆｍ，ｎ，（ａ）＾πｍ」との積「ｋ’ｎ，（ａ）・ｆｍ，ｎ，（ａ）＾πｍ」を計算する。質問元ａ算出部３３４は、ＲＡＭ９１４を用いて、算出した積「ｋ’ｎ，（ａ）・ｆｍ，ｎ，（ａ）＾πｍ」を、元ｋ’ｎ，（ａ）の新しい値として記憶する。
【０１７５】
質問元ｂ計算工程Ｓ７２４において、質問元ｂ算出部３３５は、攪乱元ｂ記憶部３２６が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のうち、ｍが変数ｍの値に等しく、ｎが変数ｎの値に等しい１個の元ｆｍ，ｎ，（ｂ）と、（Ｄ＋２）回の乱数π選択工程Ｓ７１４で乱数π選択部３３１が選択した（Ｄ＋２）個の整数πｍのうち、ｍが変数ｍの値に等しい１個の整数πｍとに基づいて、ＣＰＵ９１１を用いて、元ｆｍ，ｎ，（ｂ）のπｍ乗を計算する。質問元ｂ算出部３３５は、ＣＰＵ９１１を用いて、記憶した１個の元ｋ’ｎ，（ｂ）と、算出した１個の元「ｆｍ，ｎ，（ｂ）＾πｍ」との積「ｋ’ｎ，（ｂ）・ｆｍ，ｎ，（ｂ）＾πｍ」を計算する。質問元ｂ算出部３３５は、ＲＡＭ９１４を用いて、算出した積「ｋ’ｎ，（ｂ）・ｆｍ，ｎ，（ｂ）＾πｍ」を、元ｋ’ｎ，（ｂ）の新しい値として記憶する。
【０１７６】
ｍ増加工程Ｓ７２５において、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、変数ｍの値を１増加させる。
【０１７７】
ｍ判定工程Ｓ７２６において、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、変数ｍの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｍの値が（Ｄ＋１）以下である場合、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、質問元ａ計算工程Ｓ７２３に戻り、１個の元ｋ’ｎ，（ａ）及び１個の元ｋ’ｎ，（ｂ）の計算を続ける。
変数ｍの値が（Ｄ＋１）より大きい場合、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、１個の元ｋ’ｎ，（ａ）及び１個の元ｋ’ｎ，（ｂ）の計算を終え、ｎ増加工程Ｓ７２７へ進む。
【０１７８】
ｎ増加工程Ｓ７２７において、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、変数ｎの値を１増加させる。
【０１７９】
ｎ判定工程Ｓ７２８において、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、変数ｎの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｎの値が（Ｄ＋１）以下である場合、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、質問元ａ初期化工程Ｓ７２０に戻り、次の元ｋ’ｎ，（ａ）及び次の元ｋ’ｎ，（ｂ）を計算する。
変数ｎの値が（Ｄ＋１）より大きい場合、質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、共通処理Ｓ７１０を終了する。
【０１８０】
これにより、質問元ａ初期化工程Ｓ７２０からｎ判定工程Ｓ７２８までの工程は、（Ｄ＋２）回繰り返される。また、変数ｎの繰り返し１回につき、質問元ａ計算工程Ｓ７２３からｍ判定工程Ｓ７２６までの工程は、（Ｄ＋２）回繰り返される。質問元ａ算出部３３４は、変数ｎの繰り返し１回につき、質問元ａ計算工程Ｓ７２３を（Ｄ＋２）回実行して、１個の元ｋ’ｎ，（ａ）を算出する。質問元ａ算出部３３４は、全部で（Ｄ＋２）個の元ｋ’ｎ，（ａ）を算出する。質問元ｂ算出部３３５は、変数ｎの繰り返し１回につき、質問元ｂ計算工程Ｓ７２４を（Ｄ＋２）回実行して、１個の元ｋ’ｎ，（ｂ）を算出する。質問元ｂ算出部３３５は、全部で（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を算出する。
【０１８１】
図１３は、この実施の形態におけるクエリ生成処理Ｓ７３０の流れの一例を示すフローチャート図である。
クエリ生成処理Ｓ７３０において、クエリ生成部３５０は、クエリに含まれる元のうち、共通処理Ｓ７１０で共通処理部３３０が生成した元以外の元を算出する。
クエリ生成処理Ｓ７３０は、質問元算出工程Ｓ７３１を有する。
【０１８２】
質問元算出工程Ｓ７３１において、質問元算出部３５１は、共通処理Ｓ７１０で総積元Ｈ算出部３３３が算出した１個の元ΠＨと、検索キーワード記憶部３４２が記憶した１個の整数Ｗとに基づいて、ＣＰＵ９１１を用いて、元ΠＨのＷ乗を計算する。質問元算出部３５１は、検索元記憶部３２１が記憶した１個の元ｋ０と、共通処理Ｓ７１０で総積元Ｆ算出部３３２が算出した１個の元ΠＦと、算出した元「ΠＨ＾Ｗ」との積を計算して、乗法群Ｇ２の元である１個の元ｋ’０を得る。
【０１８３】
図１４は、この実施の形態におけるクエリ発行装置３００のうち子ユーザ秘密鍵生成部３７０の詳細なブロック構成の一例を示す詳細ブロック図である。
子ユーザ秘密鍵生成部３７０は、副乱数π選択部３７１、子検索元算出部３７２、子総積元Ｆ算出部３７３、子総積元Ｈ算出部３７４、子攪乱元算出部３７５、子攪乱元ａ算出部３７６、子攪乱元ｂ算出部３７７、子委任元算出部３７８、子副委任元算出部３７９を有する。
【０１８４】
副乱数π選択部３７１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに（Ｄ＋２）×（Ｄ＋２）個の整数を選択する。以下、副乱数π選択部３７１が選択した整数を「πｍ，ｍ’」と呼ぶ。ｍは、０以上（Ｄ＋１）以下の整数である。ｍ’は、０以上（Ｄ＋１）以下の整数である。副乱数π選択部３７１は、ＲＡＭ９１４を用いて、選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’を記憶する。
【０１８５】
子検索元算出部３７２は、ＣＰＵ９１１を用いて、検索元記憶部３２１が記憶した１個の元ｋ０を表わすデータと、子ユーザ識別子記憶部３６２が記憶した１個の整数ＩＬ＋１を表わすデータと、総積元Ｆ算出部３３２が記憶した１個の元ΠＦを表わすデータと、総積元Ｈ算出部３３３が記憶した１個の元ΠＨを表わすデータとを入力する。
子検索元算出部３７２は、１個の元ΠＨと、１個の整数ＩＬ＋１とに基づいて、ＣＰＵ９１１を用いて、元ΠＨのＩＬ＋１乗を計算する。子検索元算出部３７２が算出した元「ΠＨ＾ＩＬ＋１」は、乗法群Ｇ２の元である。子検索元算出部３７２は、１個の元「ΠＨ＾ＩＬ＋１」を算出する。
子検索元算出部３７２は、１個の元ｋ０と、１個の元ΠＦと、算出した１個の元「ΠＨ＾ＩＬ＋１」との積「ｋ０・ΠＦ・ΠＨ＾ＩＬ＋１」を計算する。以下、子検索元算出部３７２が算出した積「ｋ０・ΠＦ・ΠＨ＾ＩＬ＋１」を、質問元算出部３５１が算出した元ｋ’０と同じく、「ｋ’０」と呼ぶ。ｋ’０は、乗法群Ｇ２の元である。子検索元算出部３７２は、ＲＡＭ９１４を用いて、算出した１個の元ｋ’０を表わすデータを記憶する。
【０１８６】
子総積元Ｆ算出部３７３は、ＣＰＵ９１１を用いて、攪乱元記憶部３２４が記憶した（Ｄ＋２）個の元ｆｍ，０を表わすデータと、副乱数π選択部３７１が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’を表わすデータとを入力する。
子総積元Ｆ算出部３７３は、（Ｄ＋２）個の元ｆｍ，０と、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’それぞれについて、ｍが同じ１個の元ｆｍ，０のπｍ，ｍ’乗を計算する。子総積元Ｆ算出部３７３が算出した元「ｆｍ，０＾πｍ，ｍ’」は、乗法群Ｇ２の元である。子総積元Ｆ算出部３７３は、（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，０＾πｍ，ｍ’」を算出する。
子総積元Ｆ算出部３７３は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，０＾πｍ，ｍ’」を、ｍが同じでｍ’が異なる（Ｄ＋２）個ずつの組に分け、分けられた（Ｄ＋２）個の元「ｆｍ，０＾πｍ，ｍ’」の総積を計算する。以下、子総積元Ｆ算出部３７３が算出した総積を「ΠＦ，ｍ’」と呼ぶ。ｍ’は、０以上（Ｄ＋１）以下の整数である。ΠＦ，ｍ’は、乗法群Ｇ２の元である。（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，０＾πｍ，ｍ’」をｍが同じでｍ’が異なる（Ｄ＋２）個ずつの組に分けると、（Ｄ＋２）個の組ができるから、子総積元Ｆ算出部３７３は、（Ｄ＋２）個の元ΠＦ，ｍ’を算出する。子総積元Ｆ算出部３７３は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ΠＦ，ｍ’を表わすデータを記憶する。
【０１８７】
子総積元Ｈ算出部３７４は、ＣＰＵ９１１を用いて、副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを表わすデータと、副乱数π選択部３７１が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’を表わすデータとを入力する。
子総積元Ｈ算出部３７４は、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、λが（Ｌ＋１）に等しい（Ｄ＋２）個の元ｈｍ，Ｌ＋１と、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’それぞれについて、ｍが同じ１個の元ｈｍ，Ｌ＋１のπｍ，ｍ’乗を計算する。子総積元Ｈ算出部３７４が算出した元「ｈｍ，Ｌ＋１＾πｍ，ｍ’」は、乗法群Ｇ２の元である。子総積元Ｈ算出部３７４は、（Ｄ＋２）×（Ｄ＋２）個の元「ｈｍ，Ｌ＋１＾πｍ，ｍ’」を算出する。
子総積元Ｈ算出部３７４は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋２）個の元「ｈｍ，Ｌ＋１＾πｍ，ｍ’」を、ｍが同じでｍ’が異なる（Ｄ＋２）個ずつの組に分け、分けられた（Ｄ＋２）個の元「ｈｍ，Ｌ＋１＾πｍ，ｍ’」の総積を計算する。以下、子総積元Ｈ算出部３７４が算出した総積を「ΠＨ，ｍ’」と呼ぶ。ｍ’は、０以上（Ｄ＋１）以下の整数である。ΠＨ，ｍ’は、乗法群Ｇ２の元である。（Ｄ＋２）×（Ｄ＋２）個の元「ｈｍ，Ｌ＋１＾πｍ，ｍ’」をｍが同じでｍ’が異なる（Ｄ＋２）個ずつの組に分けると、（Ｄ＋２）個の組ができるから、子総積元Ｈ算出部３７４は、（Ｄ＋２）個の元ΠＨ，ｍ’を算出する。子総積元Ｈ算出部３７４は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ΠＨ，ｍ’を表わすデータを記憶する。
【０１８８】
子攪乱元算出部３７５は、ＣＰＵ９１１を用いて、子ユーザ識別子記憶部３６２が記憶した１個の整数ＩＬ＋１を表わすデータと、子総積元Ｆ算出部３７３が記憶した（Ｄ＋２）個の元ΠＦ，ｍ’を表わすデータと、子総積元Ｈ算出部３７４が記憶した（Ｄ＋２）個の元ΠＨ，ｍ’を表わすデータとを入力する。
子攪乱元算出部３７５は、（Ｄ＋２）個の元ΠＨ，ｍ’と、１個の整数ＩＬ＋１とに基づいて、ＣＰＵ９１１を用いて、（Ｄ＋２）個の元ΠＨ，ｍ’それぞれのＩＬ＋１乗を計算する。子攪乱元算出部３７５が算出した元「ΠＨ，ｍ’＾ＩＬ＋１」は、乗法群Ｇ２の元である。子攪乱元算出部３７５は、（Ｄ＋２）個の元「ΠＨ，ｍ’＾ＩＬ＋１」を算出する。
子攪乱元算出部３７５は、（Ｄ＋２）個の元ΠＦ，ｍ’と、算出した（Ｄ＋２）個の元「ΠＨ，ｍ’＾ＩＬ＋１」とに基づいて、ＣＰＵ９１１を用いて、（Ｄ＋２）個の元ΠＦ，ｍ’それぞれについて、ｍ’が同じ１個の元「ΠＨ，ｍ’＾ＩＬ＋１」との積「ΠＦ，ｍ’・ΠＨ，ｍ’＾ＩＬ＋１」を計算する。以下、子攪乱元算出部３７５が算出した積「ΠＦ，ｍ’・ΠＨ，ｍ’＾ＩＬ＋１」を「ｆ’ｍ’，０」と呼ぶ。ｍ’は、０以上（Ｄ＋１）以下の整数である。ｆ’ｍ’，０は、乗法群Ｇ２の元である。子攪乱元算出部３７５は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｆ’ｍ’，０を表わすデータを記憶する。
【０１８９】
子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、攪乱元ａ記憶部３２５が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を表わすデータと、副乱数π選択部３７１が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’を表わすデータとを入力する。
子攪乱元ａ算出部３７６は、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、１個の整数πｍ，ｍ’につき、ｍが同じ（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）それぞれのπｍ，ｍ’乗を計算する。子攪乱元ａ算出部３７６が算出した元「ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」は、乗法群Ｇ２の元である。整数πｍ，ｍ’は（Ｄ＋２）×（Ｄ＋２）個あるから、子攪乱元ａ算出部３７６は、（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」を算出する。
子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」を、ｍ’及びｎが同じでｍだけが異なる（Ｄ＋２）個ずつの組に分け、分けられた（Ｄ＋２）個の元「ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」の総積を計算する。以下、子攪乱元ａ算出部３７６が算出した総積を「ｆ’ｍ’，ｎ，（ａ）」と呼ぶ。ｍ’は、０以上（Ｄ＋１）以下の整数である。ｎは、０以上（Ｄ＋１）以下の整数である。ｆ’ｍ’，ｎ，（ａ）は、乗法群Ｇ２の元である。（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」をｍ’及びｎが同じでｍだけが異なる（Ｄ＋２）個ずつの組に分けると、（Ｄ＋２）×（Ｄ＋２）個の組ができるから、子攪乱元ａ算出部３７６は、（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を算出する。子攪乱元ａ算出部３７６は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を表わすデータを記憶する。
【０１９０】
子攪乱元ｂ算出部３７７は、ＣＰＵ９１１を用いて、攪乱元ｂ記憶部３２６が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を表わすデータと、副乱数π選択部３７１が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’を表わすデータとを入力する。
子攪乱元ｂ算出部３７７は、（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、１個の整数πｍ，ｍ’につき、ｍが同じ（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）それぞれのπｍ，ｍ’乗を計算する。子攪乱元ｂ算出部３７７が算出した元「ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」は、乗法群Ｇ２の元である。整数πｍ，ｍ’は（Ｄ＋２）×（Ｄ＋２）個あるから、子攪乱元ｂ算出部３７７は、（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」を算出する。
子攪乱元ｂ算出部３７７は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」を、ｍ’及びｎが同じでｍだけが異なる（Ｄ＋２）個ずつの組に分け、分けられた（Ｄ＋２）個の元「ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」の総積を計算する。以下、子攪乱元ｂ算出部３７７が算出した総積を「ｆ’ｍ’，ｎ，（ｂ）」と呼ぶ。ｍ’は、０以上（Ｄ＋１）以下の整数である。ｎは、０以上（Ｄ＋１）以下の整数である。ｆ’ｍ’，ｎ，（ｂ）は、乗法群Ｇ２の元である。（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の元「ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」をｍ’及びｎが同じでｍだけが異なる（Ｄ＋２）個ずつの組に分けると、（Ｄ＋２）×（Ｄ＋２）個の組ができるから、子攪乱元ｂ算出部３７７は、（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を算出する。子攪乱元ｂ算出部３７７は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を表わすデータを記憶する。
【０１９１】
子委任元算出部３７８は、ＣＰＵ９１１を用いて、委任元記憶部３２７が記憶した（Ｄ’−Ｌ）個の元ｈλを表わすデータと、副委任元記憶部３２８は記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを表わすデータと、乱数π選択部３３１が記憶した（Ｄ＋２）個の整数πｍを表わすデータとを入力する。また、図示していないが、子委任元算出部３７８は、ＣＰＵ９１１を用いて、子クエリ発行装置に付与する権限を表わす整数Ｄ”を表わすデータを入力する。整数Ｄ”は、（Ｌ＋２）以上Ｄ’以下の整数である。整数Ｄ”の意味は、整数Ｄ’と同じである。
子委任元算出部３７８は、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、λが（Ｌ＋２）以上Ｄ”以下の整数λ’に等しい（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’と、（Ｄ＋２）個の整数πｍとに基づいて、ＣＰＵ９１１を用いて、１個の整数πｍにつき、ｍが同じ（Ｄ”−Ｌ−１）個の元ｈｍ，λ’それぞれのπｍ乗を計算する。子委任元算出部３７８が算出する元「ｈｍ，λ’＾πｍ」は、乗法群Ｇ２の元である。整数πｍは（Ｄ＋２）個あるから、子委任元算出部３７８は、（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元「ｈｍ，λ’＾πｍ」を算出する。
子委任元算出部３７８は、（Ｄ’−Ｌ）個の元ｈλのうち、λが（Ｌ＋２）以上Ｄ”以下の整数λ’である（Ｄ”−Ｌ−１）個の元ｈλ’と、算出した（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元「ｈｍ，λ’＾πｍ」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｈλ’につき、算出した（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元「ｈｍ，λ’＾πｍ」のうち、λ’が同じ（Ｄ＋２）個の元「ｈｍ，λ’＾πｍ」と、１個の元ｈλ’とを合わせた（Ｄ＋３）個の元の総積を計算する。以下、子委任元算出部３７８が算出した総積を「ｈ’λ’」と呼ぶ。λ’は、（Ｌ＋２）以上Ｄ”以下の整数である。ｈ’λ’は、乗法群Ｇ２の元である。元ｈλ’は（Ｄ”−Ｌ−１）個あるので、子委任元算出部３７８は、（Ｄ”−Ｌ−１）個の元ｈ’λ’を算出する。子委任元算出部３７８は、ＲＡＭ９１４を用いて、算出した（Ｄ”−Ｌ−１）個の元ｈ’λ’を表わすデータを記憶する。
【０１９２】
子副委任元算出部３７９は、ＣＰＵ９１１を用いて、整数Ｄ”を表わすデータと、副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを表わすデータと、副乱数π選択部３７１が記憶した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’を表わすデータとを入力する。
子副委任元算出部３７９は、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、λが（Ｌ＋２）以上Ｄ”以下の整数λ’に等しい（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’と、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、１個の整数πｍ，ｍ’につき、（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’のうち、ｍが同じ（Ｄ”−Ｌ−１）個の元ｈｍ，λ’それぞれのπｍ，ｍ’乗を計算する。子副委任元算出部３７９が算出した元「ｈｍ，λ’＾πｍ，ｍ’」は、乗法群Ｇ２の元である。整数πｍ，ｍ’は（Ｄ＋２）×（Ｄ＋２）個あるから、子副委任元算出部３７９は、（Ｄ＋２）×（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元「ｈｍ，λ’＾πｍ，ｍ’」を算出する。
子副委任元算出部３７９は、ＣＰＵ９１１を用いて、算出した（Ｄ＋２）×（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元「ｈｍ，λ’＾πｍ，ｍ’」を、ｍ’及びλ’が同じでｍだけが異なる（Ｄ＋２）個ずつの組に分け、分けられた（Ｄ＋２）個の元「ｈｍ，λ’＾πｍ，ｍ’」の総積を計算する。子副委任元算出部３７９が算出した総積を「ｈ’ｍ’，λ’」と呼ぶ。ｍ’は、０以上（Ｄ＋１）以下の整数である。λ’は、（Ｌ＋２）以上Ｄ”以下の整数である。ｈ’ｍ’，λ’は、乗法群Ｇ２の元である。（Ｄ＋２）×（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元「ｈｍ，λ’＾πｍ，ｍ’」をｍ’及びλ’が同じでｍだけが異なる（Ｄ＋２）個ずつの組に分けると（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組ができるから、子副委任元算出部３７９は、（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を算出する。子副委任元算出部３７９は、ＲＡＭ９１４を用いて、算出した（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を表わすデータを記憶する。
【０１９３】
子ユーザ秘密鍵出力部３６３は、ＣＰＵ９１１を用いて、子検索元算出部３７２が記憶した１個の元ｋ’０を表わすデータと、質問元ａ算出部３３４が記憶した（Ｄ＋２）個の元ｋ’ｎ，（ａ）を表わすデータと、質問元ｂ算出部３３５が記憶した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を表わすデータとを入力する。また、子ユーザ秘密鍵出力部３６３は、ＣＰＵ９１１を用いて、子攪乱元算出部３７５が記憶した（Ｄ＋２）個の元ｆ’ｍ’，０を表わすデータと、子攪乱元ａ算出部３７６が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を表わすデータと、子攪乱元ｂ算出部３７７が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を表わすデータとを入力する。また、子ユーザ秘密鍵出力部３６３は、ＣＰＵ９１１を用いて、子委任元算出部３７８が記憶した（Ｄ”−Ｌ−１）個の元ｈ’λ’を表わすデータと、子副委任元算出部３７９が記憶した（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を表わすデータとを入力する。
子ユーザ秘密鍵出力部３６３は、ＣＰＵ９１１を用いて、１個の元ｋ’０と、（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、（Ｄ＋２）個の元ｋ’ｎ，（ｂ）と、（Ｄ＋２）個の元ｆ’ｍ’，０と、（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）と、（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）と、（Ｄ”−Ｌ−１）個の元ｈλ’と、（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’とを表わすデータを含むデータを、子ユーザ秘密鍵として出力する。子ユーザ秘密鍵出力部３６３が出力した子ユーザ秘密鍵は、子ユーザ識別子入力部３６１が入力したユーザＩＤを持つクエリ発行装置３００に対して、秘密裡に通知される。
【０１９４】
クエリ発行装置３００が生成する子ユーザ秘密鍵のうち、子検索元算出部３７２が算出する１個の元ｋ’０は、ユーザ秘密鍵生成装置２００の検索元算出部２４１が算出する１個の元ｋ０に相当する。質問元ａ算出部３３４が算出する（Ｄ＋２）個の元ｋ’ｎ，（ａ）は、ユーザ秘密鍵生成装置２００の検索元ａ算出部２４２が算出する（Ｄ＋２）個の元ｋｎ，（ａ）に相当する。質問元ｂ算出部３３５が算出する（Ｄ＋２）個の元ｋ’ｎ，（ｂ）は、ユーザ秘密鍵生成装置２００の検索元ｂ算出部２４３が算出する（Ｄ＋２）個の元ｋｎ，（ｂ）に相当する。子攪乱元算出部３７５が算出する（Ｄ＋２）個の元ｆ’ｍ’，０は、ユーザ秘密鍵生成装置２００の攪乱元算出部２５１が算出する（Ｄ＋２）個の元ｆｍ，０に相当する。子攪乱元ａ算出部３７６が算出する（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）は、ユーザ秘密鍵生成装置２００の攪乱元ａ算出部２５２が算出する（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）に相当する。子攪乱元ｂ算出部３７７が算出する（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）は、ユーザ秘密鍵生成装置２００の攪乱元ｂ算出部２５３が算出する（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）に相当する。子委任元算出部３７８が算出する（Ｄ”−Ｌ−１）個の元ｈ’λ’は、ユーザ秘密鍵生成装置２００の委任元算出部２６１が算出する（Ｄ’−Ｌ）個の元ｈλに相当する。子副委任元算出部３７９が算出する（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’は、ユーザ秘密鍵生成装置２００の副委任元算出部２６２が算出する（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λに相当する。
【０１９５】
このように、委任元記憶部３２７が記憶した（Ｄ’−Ｌ）個の元ｈλおよび副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、子ユーザ秘密鍵の生成には、λが（Ｌ＋２）以上Ｄ”以下の整数λ’に等しい（Ｄ”−Ｌ−１）個の元ｈλ’および（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’を使用する。λは（Ｌ＋１）以上Ｄ’以下の整数であるから、整数Ｄ’が整数Ｄ”以上であれば、クエリ発行装置３００は、子ユーザ秘密鍵を生成することができる。
【０１９６】
図１５は、この実施の形態における子ユーザ秘密鍵生成処理Ｓ７４０の流れの一例を示すフローチャート図である。
子ユーザ秘密鍵生成処理Ｓ７４０において、子ユーザ秘密鍵生成部３７０は、子ユーザ秘密鍵に含まれる元のうち、共通処理部３３０が生成した元以外の元を算出する。なお、ここでは、子ユーザ秘密鍵を算出する特定の手順を説明するが、計算手順は、ここで説明する手順に限らず、数学的に同値な結果が得られる計算手順であれば、ここで説明する手順と異なる手順であってもよい。
【０１９７】
子ユーザ秘密鍵生成処理Ｓ７４０は、子検索元算出工程Ｓ７４１、子λ初期化工程Ｓ７４２、子委任元初期化工程Ｓ７４３、ｍ初期化工程Ｓ７４４、子委任元計算工程Ｓ７４５、ｍ増加工程Ｓ７４６、ｍ判定工程Ｓ７４７、子λ増加工程Ｓ７４８、子λ判定工程Ｓ７４９、子ｍ初期化工程Ｓ７５０、子総積元Ｆ初期化工程Ｓ７５１、子総積元Ｈ初期化工程Ｓ７５２、子λ初期化工程Ｓ７５３、子副委任元初期化工程Ｓ７５４、子λ増加工程Ｓ７５５、子λ判定工程Ｓ７５６、ｎ初期化工程Ｓ７５７、子攪乱元ａ初期化工程Ｓ７５８、子攪乱元ｂ初期化工程Ｓ７５９、ｎ増加工程Ｓ７６０、ｎ判定工程Ｓ７６１、ｍ初期化工程Ｓ７６２、副乱数π選択工程Ｓ７６３、子総積元Ｆ計算工程Ｓ７６４、子総積元Ｈ計算工程Ｓ７６５、子λ初期化工程Ｓ７６６、子副委任元計算工程Ｓ７６７、子λ増加工程Ｓ７６８、子λ判定工程Ｓ７６９、ｎ初期化工程Ｓ７７０、子攪乱元ａ計算工程Ｓ７７１、子攪乱元ｂ計算工程Ｓ７７２、ｎ増加工程Ｓ７７３、ｎ判定工程Ｓ７７４、ｍ増加工程Ｓ７７５、ｍ判定工程Ｓ７７６、子攪乱元算出工程Ｓ７７７、子ｍ増加工程Ｓ７７８、子ｍ判定工程Ｓ７７９を有する。
【０１９８】
子検索元算出工程Ｓ７４１において、子検索元算出部３７２は、子ユーザ識別子記憶部３６２が記憶した１個の整数ＩＬ＋１と、共通処理Ｓ７１０で総積元Ｈ算出部３３３が算出した１個の元ΠＨとに基づいて、ＣＰＵ９１１を用いて、元ΠＨのＩＬ＋１乗を計算する。
子検索元算出部３７２は、算出した１個の元「ΠＨ＾ＩＬ＋１」と、検索元記憶部３２１が記憶した１個の元ｋ０と、共通処理Ｓ７１０で総積元Ｆ算出部３３２が算出した１個の元ΠＦとに基づいて、ＣＰＵ９１１を用いて、元ｋ０と元ΠＦと元「ΠＨ＾ＩＬ＋１」との積を計算して、乗法群Ｇ２の元である１個の元ｋ’０を得る。
【０１９９】
子λ初期化工程Ｓ７４２において、子委任元算出部３７８は、ＣＰＵ９１１を用いて、変数λ’の値を、整数Ｌに２を加えた値（Ｌ＋２）に設定する。
【０２００】
子委任元初期化工程Ｓ７４３において、子委任元算出部３７８は、ＲＡＭ９１４を用いて、委任元記憶部３２７が記憶した（Ｄ’−Ｌ）個の元ｈλのうち、λが変数λ’の値に等しい１個の元ｈλ’を、１個の元ｈ’λ’を計算するための最初の値として記憶する。
【０２０１】
ｍ初期化工程Ｓ７４４において、子委任元算出部３７８は、ＣＰＵ９１１を用いて、変数ｍの値を０に設定する。
【０２０２】
子委任元計算工程Ｓ７４５において、子委任元算出部３７８は、副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、ｍが変数ｍの値に等しく、λが変数λ’の値に等しい１個の元ｈｍ，λ’と、乱数π選択部３３１が選択した（Ｄ＋２）個の整数πｍのうち、ｍが変数ｍの値に等しい１個の整数πｍとに基づいて、ＣＰＵ９１１を用いて、元ｈｍ，λ’のπｍ乗を計算する。
子委任元算出部３７８は、記憶した１個の元ｈ’λ’と、算出した１個の元「ｈｍ，λ’＾πｍ」とに基づいて、ＣＰＵ９１１を用いて、元ｈ’λ’と元「ｈｍ，λ’＾πｍ」との積「ｈ’λ’・ｈｍ，λ’＾πｍ」を計算する。子委任元算出部３７８は、ＲＡＭ９１４を用いて、算出した１個の積「ｈ’λ’・ｈｍ，λ’＾πｍ」を、元ｈ’λ’の新しい値として記憶する。
【０２０３】
ｍ増加工程Ｓ７４６において、子委任元算出部３７８は、ＣＰＵ９１１を用いて、変数ｍの値を１増加させる。
【０２０４】
ｍ判定工程Ｓ７４７において、子委任元算出部３７８は、ＣＰＵ９１１を用いて、変数ｍの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｍの値が（Ｄ＋１）以下である場合、子委任元算出部３７８は、ＣＰＵ９１１を用いて、子委任元計算工程Ｓ７４５に戻り、１個の元ｈ’λ’の計算を続ける。
変数ｍの値が（Ｄ＋１）より大きい場合、子委任元算出部３７８は、ＣＰＵ９１１を用いて、１個の元ｈ’λ’の計算を終え、子λ増加工程Ｓ７４８へ進む。
【０２０５】
子λ増加工程Ｓ７４８において、子委任元算出部３７８は、ＣＰＵ９１１を用いて、変数λ’の値を１増加させる。
【０２０６】
子λ判定工程Ｓ７４９において、子委任元算出部３７８は、ＣＰＵ９１１を用いて、変数λ’の値と、整数Ｄ”とを比較する。
変数λ’の値がＤ”以下である場合、子委任元算出部３７８は、ＣＰＵ９１１を用いて、子委任元初期化工程Ｓ７４３に戻り、次の元ｈ’λ’を計算する。
変数λ’の値がＤ”より大きい場合、子委任元算出部３７８は、ＣＰＵ９１１を用いて、（Ｄ”−Ｌ−１）個の元ｈ’λ’の計算を終え、子ｍ初期化工程Ｓ７５０へ進む。
【０２０７】
これにより、子委任元初期化工程Ｓ７４３から子λ判定工程Ｓ７４９までの工程は、（Ｄ”−Ｌ−１）回繰り返される。子委任元算出部３７８は、変数λ’の繰り返し１回につき、子委任元計算工程Ｓ７４５を（Ｄ＋２）回実行して、１個の元ｈ’λ’を算出する。子委任元算出部３７８は、全部で（Ｄ”−Ｌ−１）個の元ｈ’λ’を算出する。
【０２０８】
子ｍ初期化工程Ｓ７５０において、子総積元Ｆ算出部３７３は、ＣＰＵ９１１を用いて、変数ｍ’の値を０に設定する。
【０２０９】
子総積元Ｆ初期化工程Ｓ７５１において、子総積元Ｆ算出部３７３は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ΠＦ，ｍ’を計算するための最初の値として記憶する。
【０２１０】
子総積元Ｈ初期化工程Ｓ７５２において、子総積元Ｈ算出部３７４は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ΠＨ，ｍ’を計算するための最初の値として記憶する。
【０２１１】
子λ初期化工程Ｓ７５３において、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、変数λ’の値を、整数Ｌに２を加えた値（Ｌ＋２）に設定する。
【０２１２】
子副委任元初期化工程Ｓ７５４において、子副委任元算出部３７９は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ｈ’ｍ’，λ’を計算するための最初の値として記憶する。
【０２１３】
子λ増加工程Ｓ７５５において、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、変数λ’の値を１増加させる。
【０２１４】
子λ判定工程Ｓ７５６において、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、変数λ’の値と、整数Ｄ”とを比較する。
変数λ’の値がＤ”以下である場合、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、子副委任元初期化工程Ｓ７５４に戻り、次の元ｈ’ｍ’，λ’を設定する。
変数λ’の値がＤ”より大きい場合、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’の設定を終え、ｎ初期化工程Ｓ７５７へ進む。
【０２１５】
ｎ初期化工程Ｓ７５７において、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、変数ｎの値を０に設定する。
【０２１６】
子攪乱元ａ初期化工程Ｓ７５８において、子攪乱元ａ算出部３７６は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ｆ’ｍ’，ｎ，（ａ）を計算するための最初の値として記憶する。
【０２１７】
子攪乱元ｂ初期化工程Ｓ７５９において、子攪乱元ｂ算出部３７７は、ＲＡＭ９１４を用いて、乗法群Ｇ２の単位元１を、１個の元ｆ’ｍ’，ｎ，（ｂ）を計算するための最初の値として記憶する。
【０２１８】
ｎ増加工程Ｓ７６０において、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、変数ｎの値を１増加させる。
【０２１９】
ｎ判定工程Ｓ７６１において、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、変数ｎの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｎの値が（Ｄ＋１）以下である場合、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、子攪乱元ａ初期化工程Ｓ７５８に戻り、次の元ｆ’ｍ’，ｎ，（ａ）及び次の元ｆ’ｍ’，ｎ，（ｂ）を設定する。
変数ｎの値が（Ｄ＋１）より大きい場合、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）及び（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）の設定を終え、ｍ初期化工程Ｓ７６２へ進む。
【０２２０】
ｍ初期化工程Ｓ７６２において、副乱数π選択部３７１は、ＣＰＵ９１１を用いて、変数ｍの値を０に設定する。
【０２２１】
副乱数π選択工程Ｓ７６３において、副乱数π選択部３７１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに１個の整数πｍ，ｍ’を選択する。
【０２２２】
子総積元Ｆ計算工程Ｓ７６４において、子総積元Ｆ算出部３７３は、攪乱元記憶部３２４が記憶した（Ｄ＋２）個の元ｆｍ，０のうち、ｍが変数ｍの値に等しい１個の元ｆｍ，０と、副乱数π選択工程Ｓ７６３で副乱数π選択部３７１が選択した整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、元ｆｍ，０のπｍ，ｍ’乗を計算する。
子総積元Ｆ算出部３７３は、記憶した１個の元ΠＦ，ｍ’と、算出した１個の元「ｆｍ，０＾πｍ，ｍ’」とに基づいて、ＣＰＵ９１１を用いて、元ΠＦ，ｍ’と元「ｆｍ，０＾πｍ，ｍ’」との積「ΠＦ，ｍ’・ｆｍ，０＾πｍ，ｍ’」を計算する。子総積元Ｆ算出部３７３は、ＲＡＭ９１４を用いて、算出した１個の積「ΠＦ，ｍ’・ｆｍ，０＾πｍ，ｍ’」を、元ΠＦ，ｍ’の新しい値として記憶する。
【０２２３】
子総積元Ｈ計算工程Ｓ７６５において、子総積元Ｈ算出部３７４は、副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、ｍが変数ｍの値に等しく、λが（Ｌ＋１）に等しい１個の元ｈｍ，Ｌ＋１と、副乱数π選択工程Ｓ７６３で副乱数π選択部３７１が選択した１個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、元ｈｍ，Ｌ＋１のπｍ，ｍ’乗を計算する。
子総積元Ｈ算出部３７４は、記憶した１個の元ΠＨ，ｍ’と、算出した１個の元「ｈｍ，Ｌ＋１＾πｍ，ｍ’」とに基づいて、ＣＰＵ９１１を用いて、元ΠＨ，ｍ’と元「ｈｍ，Ｌ＋１＾πｍ，ｍ’」との積「ΠＨ，ｍ’・ｈｍ，Ｌ＋１＾πｍ，ｍ’」を計算する。子総積元Ｈ算出部３７４は、ＲＡＭ９１４を用いて、算出した１個の積「ΠＨ，ｍ’・ｈｍ，Ｌ＋１＾πｍ，ｍ’」を、元ΠＨ，ｍ’の新しい値として記憶する。
【０２２４】
子λ初期化工程Ｓ７６６において、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、変数λ’の値を、整数Ｌに２を加えた値（Ｌ＋２）に設定する。
【０２２５】
子副委任元計算工程Ｓ７６７において、子副委任元算出部３７９は、副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち、ｍが変数ｍの値に等しく、λが変数λ’の値に等しい１個の元ｈｍ，λ’と、副乱数π選択工程Ｓ７６３で副乱数π選択部３７１が選択した１個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、元ｈｍ，λ’のπｍ，ｍ’乗を計算する。
子副委任元算出部３７９は、記憶した（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’のうち、λ’が変数λ’の値に等しい１個の元ｈ’ｍ’，λ’と、算出した１個の元「ｈｍ，λ’＾πｍ，ｍ’」とに基づいて、ＣＰＵ９１１を用いて、元ｈ’ｍ’，λ’と元「ｈｍ，λ’＾πｍ，ｍ’」との積「ｈ’ｍ’，λ’・ｈｍ，λ’＾πｍ，ｍ’」と計算する。子副委任元算出部３７９は、ＲＡＭ９１４を用いて、算出した積「ｈ’ｍ’，λ’・ｈｍ，λ’＾πｍ，ｍ’」を、λ’が変数λ’に等しい元ｈ’ｍ’，λ’の新しい値として記憶する。
【０２２６】
子λ増加工程Ｓ７６８において、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、変数λ’の値を１増加させる。
【０２２７】
子λ判定工程Ｓ７６９において、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、変数λ’の値と、整数Ｄ”とを比較する。
変数λ’の値がＤ”以下である場合、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、子副委任元計算工程Ｓ７６７に戻り、次の元ｈ’ｍ’，λ’を計算する。
変数λ’の値がＤ”より大きい場合、子副委任元算出部３７９は、ＣＰＵ９１１を用いて、ｎ初期化工程Ｓ７７０へ進む。
【０２２８】
ｎ初期化工程Ｓ７７０において、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、変数ｎの値を０に設定する。
【０２２９】
子攪乱元ａ計算工程Ｓ７７１において、子攪乱元ａ算出部３７６は、攪乱元ａ記憶部３２５が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のうち、ｍが変数ｍの値に等しく、ｎが変数ｎの値に等しい１個の元ｆｍ，ｎ，（ａ）と、副乱数π選択工程Ｓ７６３で副乱数π選択部３７１が選択した１個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、元ｆｍ，ｎ，（ａ）のπｍ，ｍ’乗を計算する。
子攪乱元ａ算出部３７６は、記憶した（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）のうち、ｎが変数ｎの値に等しい１個の元ｆ’ｍ’，ｎ，（ａ）と、算出した１個の元「ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」とに基づいて、ＣＰＵ９１１を用いて、元ｆ’ｍ’，ｎ，（ａ）と元「ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」との積「ｆ’ｍ’，ｎ，（ａ）・ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」を計算する。子攪乱元ａ算出部３７６は、ＲＡＭ９１４を用いて、算出した１個の積「ｆ’ｍ’，ｎ，（ａ）・ｆｍ，ｎ，（ａ）＾πｍ，ｍ’」を、ｎが変数ｎの値に等しい元ｆ’ｍ’，ｎ，（ａ）の新しい値として記憶する。
【０２３０】
子攪乱元ｂ計算工程Ｓ７７２において、子攪乱元ｂ算出部３７７は、攪乱元ｂ記憶部３２６が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のうち、ｍが変数ｍの値に等しく、ｎが変数ｎの値に等しい１個の元ｆｍ，ｎ，（ｂ）と、副乱数π選択工程Ｓ７６３で副乱数π選択部３７１が選択した１個の整数πｍ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、元ｆｍ，ｎ，（ｂ）のπｍ，ｍ’乗を計算する。
子攪乱元ｂ算出部３７７は、記憶した（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）のうち、ｎが変数ｎの値に等しい１個の元ｆ’ｍ’，ｎ，（ｂ）と、算出した１個の元「ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」とに基づいて、ＣＰＵ９１１を用いて、元ｆ’ｍ’，ｎ，（ｂ）と元「ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」との積「ｆ’ｍ’，ｎ，（ｂ）・ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」を計算する。子攪乱元ａ算出部３７６は、ＲＡＭ９１４を用いて、算出した１個の積「ｆ’ｍ’，ｎ，（ｂ）・ｆｍ，ｎ，（ｂ）＾πｍ，ｍ’」を、ｎが変数ｎの値に等しい元ｆ’ｍ’，ｎ，（ｂ）の新しい値として記憶する。
【０２３１】
ｎ増加工程Ｓ７７３において、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、変数ｎの値を１増加させる。
【０２３２】
ｎ判定工程Ｓ７７４において、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、変数ｎの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｎの値が（Ｄ＋１）以下である場合、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、子攪乱元ａ計算工程Ｓ７７１に戻り、次の元ｆ’ｍ’，ｎ，（ａ）及び次の元ｆ’ｍ’，ｎ，（ｂ）を計算する。
変数ｎの値が（Ｄ＋１）より大きい場合、子攪乱元ａ算出部３７６は、ＣＰＵ９１１を用いて、ｍ増加工程Ｓ７７５へ進む。
【０２３３】
ｍ増加工程Ｓ７７５において、副乱数π選択部３７１は、ＣＰＵ９１１を用いて、変数ｍの値を１増加させる。
【０２３４】
ｍ判定工程Ｓ７７６において、副乱数π選択部３７１は、ＣＰＵ９１１を用いて、変数ｍの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｍの値が（Ｄ＋１）以下である場合、副乱数π選択部３７１は、ＣＰＵ９１１を用いて、副乱数π選択工程Ｓ７６３に戻り、次の整数πｍ，ｍ’を選択する。
変数ｍの値が（Ｄ＋１）より大きい場合、副乱数π選択部３７１は、ＣＰＵ９１１を用いて、子攪乱元算出工程Ｓ７７７へ進む。
【０２３５】
子攪乱元算出工程Ｓ７７７において、子攪乱元算出部３７５は、子ユーザ識別子記憶部３６２が記憶した１個の整数ＩＬ＋１と、子総積元Ｈ算出部３７４が算出した１個の元ΠＨ，ｍ’とに基づいて、ＣＰＵ９１１を用いて、元ΠＨ，ｍ’のＩＬ＋１乗を計算する。
子攪乱元算出部３７５は、子総積元Ｆ算出部３７３が算出した１個の元ΠＦ，ｍ’と、算出した１個の元「ΠＨ，ｍ’＾ＩＬ＋１」とに基づいて、ＣＰＵ９１１を用いて、元ΠＦ，ｍ’と元「ΠＨ，ｍ’＾ＩＬ＋１」との積を計算して、乗法群Ｇ２の元である１個の元ｆ’ｍ’，０を得る。
【０２３６】
子ｍ増加工程Ｓ７７８において、子総積元Ｆ算出部３７３は、ＣＰＵ９１１を用いて、変数ｍ’の値を１増加させる。
【０２３７】
子ｍ判定工程Ｓ７７９において、子総積元Ｆ算出部３７３は、ＣＰＵ９１１を用いて、変数ｍ’の値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｍ’の値が（Ｄ＋１）以下である場合、子総積元Ｆ算出部３７３は、ＣＰＵ９１１を用いて、子総積元Ｆ初期化工程Ｓ７５１に戻り、次の元ΠＦ，ｍ’を設定する。
変数ｍ’の値が（Ｄ＋１）より大きい場合、子総積元Ｆ算出部３７３は、ＣＰＵ９１１を用いて、子ユーザ秘密鍵生成処理Ｓ７４０を終了する。
【０２３８】
これにより、子総積元Ｆ初期化工程Ｓ７５１から子ｍ判定工程Ｓ７７９までの工程は、（Ｄ＋２）回繰り返される。
変数ｍ’の繰り返し１回につき、副乱数π選択工程Ｓ７６３からｍ判定工程Ｓ７７６までの工程は、（Ｄ＋２）回繰り返される。変数ｍ’の繰り返し１回につき、子総積元Ｆ算出部３７３は、子総積元Ｆ計算工程Ｓ７６４を（Ｄ＋２）回実行して、１個の元ΠＦ，ｍ’を算出する。子総積元Ｆ算出部３７３は、全部で（Ｄ＋２）個の元ΠＦ，ｍ’を算出する。変数ｍ’の繰り返し１回につき、子総積元Ｈ算出部３７４は、子総積元Ｈ計算工程Ｓ７６５を（Ｄ＋２）回実行して、１個の元ΠＨ，ｍ’を算出する。子総積元Ｈ算出部３７４は、全部で（Ｄ＋２）個の元ΠＨ，ｍ’を算出する。
変数ｍの繰り返し１回につき、子副委任元計算工程Ｓ７６７から子λ判定工程Ｓ７６９までの工程は、（Ｄ”−Ｌ−１）回繰り返される。変数ｍの繰り返し１回につき、子副委任元算出部３７９は、子副委任元計算工程Ｓ７６７を（Ｄ”−Ｌ−１）回実行して、（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を計算する。これを（Ｄ＋２）回繰り返すことにより、子副委任元算出部３７９は、（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を算出する。更にこれを（Ｄ＋２）回繰り返すことにより、子副委任元算出部３７９は、全部で（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を算出する。
変数ｍの繰り返し１回につき、子攪乱元ａ計算工程Ｓ７７１からｎ判定工程Ｓ７７４までの工程は、（Ｄ＋２）回繰り返される。変数ｍの繰り返し１回につき、子攪乱元ａ算出部３７６は、子攪乱元ａ計算工程Ｓ７７１を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を計算する。これを（Ｄ＋２）回繰り返すことにより、子攪乱元ａ算出部３７６は、（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を算出する。更にこれを（Ｄ＋２）回繰り返すことにより、子攪乱元ａ算出部３７６は、全部で（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を算出する。変数ｍの繰り返し１回につき、子攪乱元ｂ算出部３７７は、子攪乱元ｂ計算工程Ｓ７７２を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を計算する。これを（Ｄ＋２）回繰り返すことにより、子攪乱元ｂ算出部３７７は、（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を算出する。更にこれを（Ｄ＋２）回繰り返すことにより、子攪乱元ｂ算出部３７７は、全部で（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を算出する。
【０２３９】
ユーザ秘密鍵生成装置２００は、以下の式の右辺を計算することにより、ユーザ秘密鍵に含まれる元を算出する。
【数１６】
0005269209.tif 000007
元ｋ０及び元ｆｍ，０の算出式は、以下のように変形できる。
【数１７】
0005269209.tif 000008
【０２４０】
子検索元算出部３７２は、以下の式の右辺を計算することにより、子ユーザ秘密鍵に含まれる元ｋ’０を算出する。
【数１８】
0005269209.tif 000009
【０２４１】
元ｋ’０の算出式は、以下のように変形できる。
【数１９】
0005269209.tif 000010
ただし、
【数２０】
0005269209.tif 000011
である。ρ’ｎは、０以上ｐ未満の整数である。ｎは、０以上（Ｄ＋１）以下の整数である。
【０２４２】
（Ｄ＋２）個の整数ρｎと、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍと、（Ｄ＋２）個の整数πｍとは、いずれも、０以上ｐ未満の整数のなかで一様ランダムに分布しているので、（Ｄ＋２）個の整数ρ’ｎも、０以上ｐ未満の整数のなかで一様ランダムに分布する。したがって、整数ρ’ｎは、ユーザ秘密鍵生成装置２００の乱数ρ選択部２３１が選択する整数ρｎと等価である。
よって、子検索元算出部３７２が算出する元ｋ’０は、ユーザ秘密鍵生成装置２００の検索元算出部２４１が算出する元ｋ０と等価である。
【０２４３】
質問元ａ算出部３３４は、以下の式の右辺を計算することにより、子ユーザ秘密鍵に含まれる元ｋ’ｎ，（ａ）を算出する。
【数２１】
0005269209.tif 000012
元ｋ’ｎ，（ａ）の算出式は、以下のように変形できる。
【数２２】
0005269209.tif 000013
よって、質問元ａ算出部３３４が算出する元ｋ’ｎ，（ａ）は、ユーザ秘密鍵生成装置２００の検索元ａ算出部２４２が算出する元ｋｎ，（ａ）と等価である。
【０２４４】
質問元ｂ算出部３３５は、以下の式の右辺を計算することにより、子ユーザ秘密鍵に含まれる元ｋ’ｎ，（ｂ）を算出する。
【数２３】
0005269209.tif 000014
元ｋ’ｎ，（ｂ）の算出式は、以下のように変形できる。
【数２４】
0005269209.tif 000015
よって、質問元ｂ算出部３３５が算出する元ｋ’ｎ，（ｂ）は、ユーザ秘密鍵生成装置２００の検索元ｂ算出部２４３が算出する元ｋｎ，（ｂ）と等価である。
【０２４５】
子攪乱元算出部３７５は、以下の式の右辺を計算することにより、子ユーザ秘密鍵に含まれる元ｆ’ｍ’，０を算出する。
【数２５】
0005269209.tif 000016
【０２４６】
元ｆ’ｍ’，０の算出式は、以下のように変形できる。
【数２６】
0005269209.tif 000017
ただし、
【数２７】
0005269209.tif 000018
である。ρ’ｎ，ｍ’は、０以上ｐ未満の整数である。ｎは、０以上（Ｄ＋１）以下の整数である。ｍは、０以上（Ｄ＋１）以下の整数である。
【０２４７】
（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍと、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とは、いずれも、０以上ｐ未満の整数のなかで一様ランダムに分布しているので、（Ｄ＋２）×（Ｄ＋２）個の整数ρ’ｎ，ｍ’も、０以上ｐ未満の整数のなかで一様ランダムに分布する。したがって、整数ρ’ｎ，ｍ’は、ユーザ秘密鍵生成装置２００の副乱数ρ選択部２３２が選択する整数ρｎ，ｍと等価である。
よって、子攪乱元算出部３７５が算出する元ｆ’ｍ’，０は、ユーザ秘密鍵生成装置２００の攪乱元算出部２５１が算出する元ｆｍ，０と等価である。
【０２４８】
子攪乱元ａ算出部３７６は、以下の式の右辺を計算することにより、子ユーザ秘密鍵に含まれる元ｆ’ｍ’，ｎ，（ａ）を算出する。
【数２８】
0005269209.tif 000019
元ｆ’ｍ’，ｎ，（ａ）の算出式は、以下のように変形できる。
【数２９】
0005269209.tif 000020
よって、子攪乱元ａ算出部３７６が算出する元ｆ’ｍ’，ｎ，（ａ）は、ユーザ秘密鍵生成装置２００の攪乱元ａ算出部２５２が算出する元ｆｍ，ｎ，（ａ）と等価である。
【０２４９】
子攪乱元ｂ算出部３７７は、以下の式の右辺を計算することにより、子ユーザ秘密鍵に含まれる元ｆ’ｍ’，ｎ，（ｂ）を算出する。
【数３０】
0005269209.tif 000021
元ｆ’ｍ’，ｎ，（ｂ）の算出式は、以下のように変形できる。
【数３１】
0005269209.tif 000022
よって、子攪乱元ｂ算出部３７７が算出する元ｆ’ｍ’，ｎ，（ｂ）は、ユーザ秘密鍵生成装置２００の攪乱元ｂ算出部２５３が算出する元ｆｍ，ｎ，（ｂ）と等価である。
【０２５０】
子委任元算出部３７８は、以下の式の右辺を計算することにより、子ユーザ秘密鍵に含まれる元ｈ’λ’を算出する。
【数３２】
0005269209.tif 000023
元ｈ’λ’の算出式は、以下のように変形できる。
【数３３】
0005269209.tif 000024
よって、子委任元算出部３７８が算出する元ｈ’λ’は、ユーザ秘密鍵生成装置２００の委任元算出部２６１が算出する元ｈλと等価である。
【０２５１】
子副委任元算出部３７９は、以下の式の右辺を計算することにより、子ユーザ秘密鍵に含まれる元ｈ’ｍ’，λ’を算出する。
【数３４】
0005269209.tif 000025
元ｈ’ｍ’，λ’の算出式は、以下のように変形できる。
【数３５】
0005269209.tif 000026
よって、子副委任元算出部３７９が算出する元ｈ’ｍ’，λ’は、ユーザ秘密鍵生成装置２００の副委任元算出部２６２が算出する元ｈｍ，λと等価である。
【０２５２】
以上のように、子ユーザ秘密鍵に含まれるすべての元が、対応するユーザ秘密鍵に含まれる元と等価なので、クエリ発行装置３００が生成する子ユーザ秘密鍵は、ユーザ秘密鍵生成装置２００が生成するユーザ秘密鍵と等価である。
【０２５３】
図１６は、この実施の形態における暗号化装置４００の機能ブロックの構成の一例を示すブロック構成図である。
暗号化装置４００は、公開パラメータ生成装置１００が生成した公開パラメータを使って、キーワードを埋め込んだ暗号文を生成する。
暗号化装置４００は、公開パラメータ入力部４１１、権限範囲入力部４１２、埋込みキーワード入力部４１３、暗号文出力部４１４、公開パラメータ記憶部４２０、権限範囲記憶部４３０、埋込みキーワード記憶部４４１、暗号文生成部４５０を有する。
【０２５４】
公開パラメータ入力部４１１は、ＣＰＵ９１１を用いて、公開パラメータ生成装置１００が生成した公開パラメータを入力する。公開パラメータには、乗法群Ｇ１の元である１個の生成元ｇ１と、乗法群Ｇ３の元である１個の元Ωと、乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌと、乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌとを表わすデータが含まれる。
【０２５５】
公開パラメータ記憶部４２０は、磁気ディスク装置９２０を用いて、公開パラメータ入力部４１１が入力した公開パラメータを記憶する。
【０２５６】
権限範囲入力部４１２は、ＣＰＵ９１１を用いて、生成する暗号文に埋め込まれたキーワードを検索する権限を与えるクエリ発行装置３００の範囲を指定する権限範囲を表わす１個の整数Ｌ’と、Ｌ”個の整数Ｉ’ｊを入力する。整数Ｌ’は、１以上（Ｄ−１）以下の整数である。Ｌ”は、０以上Ｌ’以下の整数のなかから選択した任意の整数である。整数Ｉ’ｊは、０以上ｐ未満の整数である。ｊは、１以上Ｌ’以下の整数のなかから選択したＬ”個の任意の整数である。
整数Ｌ’は、権限を与えるクエリ発行装置３００のユーザＩＤを分節した数Ｌを表わす。ユーザＩＤを分節した数Ｌが整数Ｌ’と等しくない階層が異なるクエリ発行装置３００には、検索権限を与えないことを意味する。
整数Ｉ’ｊは、クエリ発行装置３００のユーザＩＤであるＬ個の整数Ｉｉのうち、ｊ番目の整数Ｉｊを指定することを表わす。ｊ番目の整数ＩｊがＩ’ｊと一致しないクエリ発行装置３００には、検索権限を与えないことを意味する。
【０２５７】
ユーザＩＤが文字列である場合、権限範囲入力部４１２は、ユーザＩＤのうち指定するＬ”個の部分の文字列を入力する構成であってもよい。その場合、権限範囲入力部４１２は、入力したＬ”個の文字列を整数Ｉ’ｊに変換する。
また、権限範囲入力部４１２は、ユーザＩＤのうち指定しない（Ｌ”−Ｌ’）個の部分を指示するワイルドカードを入力する構成であってもよい。その場合、権限範囲入力部４１２は、入力した整数Ｉ’ｊの数と、入力したワイルドカードの数とを合計して、整数Ｌ’を算出する。
【０２５８】
以下、Ｌ”個の整数ｊを元とする集合を「Ａ’」と呼ぶ。集合Ａ’は、ユーザＩＤのうち、整数Ｉｊが指定された部分を表わす。また、１以上Ｌ’以下のＬ’個の整数のうち、集合Ａ’の元でない（Ｌ’−Ｌ”）個の整数を元とする集合を「Ａ」と呼ぶ。集合Ａは、ユーザＩＤのうち、ワイルドカードが指定された部分を表わす。
例えば、図３に示した権限範囲６１０ａを指示する場合、整数Ｌ’は２、集合Ａ’は｛１｝、集合Ａは｛２｝である。権限範囲６１０ｂを指示する場合、整数Ｌ’は１、集合Ａ’は｛１｝、集合Ａは空集合である。また、権限範囲６１０ｆを指示する場合、整数Ｌ’は４、集合Ａ’は空集合、集合Ａは｛１，２，３，４｝である。
【０２５９】
権限範囲記憶部４３０は、磁気ディスク装置９２０を用いて、権限範囲入力部４１２が入力した権限範囲を記憶する。
【０２６０】
埋込みキーワード入力部４１３は、ＣＰＵ９１１を用いて、生成する暗号文に埋め込むキーワードとして、１個の整数Ｗ’を入力する。整数Ｗ’は、０以上ｐ未満の整数である。なお、埋込みキーワード入力部４１３は、キーワードとして文字列を入力する構成であってもよい。その場合、埋込みキーワード入力部４１３は、入力したキーワードを整数Ｗ’に変換する。
【０２６１】
埋込みキーワード記憶部４４１は、磁気ディスク装置９２０を用いて、埋込みキーワードとして、埋込みキーワード入力部４１３が入力した１個の整数Ｗ’を表わすデータを記憶する。
【０２６２】
暗号文生成部４５０は、公開パラメータ記憶部４２０が記憶した公開パラメータと、権限範囲記憶部４３０が記憶した権限範囲と、埋込みキーワード記憶部４４１が記憶した埋込みキーワードとに基づいて、ＣＰＵ９１１を用いて、暗号文を生成する。
【０２６３】
暗号文出力部４１４は、ＣＰＵ９１１を用いて、暗号文生成部４５０が生成した暗号文を出力する。暗号文出力部４１４が出力した暗号文は、検索装置５００が記憶する。
【０２６４】
図１７は、この実施の形態における暗号化装置４００のうち、公開パラメータ記憶部４２０、権限範囲記憶部４３０、暗号文生成部４５０の詳細な構成の一例を示す詳細ブロック図である。
公開パラメータ記憶部４２０は、第一生成元記憶部４２１、公開元Ω記憶部４２２、公開元ａ記憶部４２３、公開元ｂ記憶部４２４を有する。
権限範囲記憶部４３０は、分節数記憶部４３１、権限識別子記憶部４３２を有する。
暗号文生成部４５０は、乱数ｒ選択部４５１、副乱数ｒ選択部４５２、乱数元選択部４５３、暗号元算出部４５６、検証元算出部４５７、総積元Ａ算出部４６１、総積元Ｂ算出部４６２、暗号元ａ算出部４６３、暗号元ｂ算出部４６４、暗号部分元ａ算出部４６５、暗号部分元ｂ算出部４６６を有する。
【０２６５】
第一生成元記憶部４２１は、磁気ディスク装置９２０を用いて、公開パラメータのうち、乗法群Ｇ１の元である１個の生成元ｇ１を表わすデータを記憶する。
【０２６６】
公開元Ω記憶部４２２は、磁気ディスク装置９２０を用いて、公開パラメータのうち、乗法群Ｇ３の元である１個の元Ωを表わすデータを記憶する。
【０２６７】
公開元ａ記憶部４２３は、磁気ディスク装置９２０を用いて、公開パラメータのうち、乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。ｌは、０以上Ｄ以下の整数である。
【０２６８】
公開元ｂ記憶部４２４は、磁気ディスク装置９２０を用いて、公開パラメータのうち、乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。ｌは、０以上Ｄ以下の整数である。
【０２６９】
分節数記憶部４３１は、磁気ディスク装置９２０を用いて、１個の整数Ｌ’を表わすデータを記憶する。
なお、権限範囲記憶部４３０は、分節数記憶部４３１に代えて、集合Ａあるいは集合Ａ’を表わすデータを記憶する集合記憶部を有する構成であってもよい。
【０２７０】
権限識別子記憶部４３２は、磁気ディスク装置９２０を用いて、Ｌ”個の整数Ｉ’ｊを表わすデータを記憶する。
【０２７１】
乱数ｒ選択部４５１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに１個の整数を選択する。以下、乱数ｒ選択部４５１が選択した整数を「ｒ」と呼ぶ。乱数ｒ選択部４５１は、ＲＡＭ９１４を用いて、選択した１個の整数ｒを表わすデータを記憶する。
【０２７２】
副乱数ｒ選択部４５２は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに（Ｄ＋２）個の整数を選択する。以下、副乱数ｒ選択部４５２が選択した整数を「ｒｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。副乱数ｒ選択部４５２は、ＲＡＭ９１４を用いて、選択した（Ｄ＋２）個の整数ｒｎを表わすデータを記憶する。
【０２７３】
乱数元選択部４５３は、ＣＰＵ９１１を用いて、乗法群Ｇ３の元のなかから、一様ランダムに１個の元を選択する。以下、乱数元選択部４５３が選択した元を「Ｒ」と呼ぶ。乱数元選択部４５３は、ＲＡＭ９１４を用いて、選択した１個の元Ｒを表わすデータを記憶する。
【０２７４】
暗号元算出部４５６は、ＣＰＵ９１１を用いて、第一生成元記憶部４２１が記憶した１個の生成元ｇ１を表わすデータと、乱数ｒ選択部４５１が記憶した１個の整数ｒを表わすデータとを入力する。暗号元算出部４５６は、ＣＰＵ９１１を用いて、生成元ｇ１のｒ乗を計算する。以下、暗号元算出部４５６が算出した元「ｇ１＾ｒ」を「ｃ０」と呼ぶ。ｃ０は、乗法群Ｇ１の元である。暗号元算出部４５６は、ＲＡＭ９１４を用いて、算出した１個の元ｃ０を表わすデータを記憶する。
【０２７５】
検証元算出部４５７は、ＣＰＵ９１１を用いて、公開元Ω記憶部４２２が記憶した１個の元Ωを表わすデータと、乱数ｒ選択部４５１が記憶した１個の整数ｒを表わすデータと、乱数元選択部４５３が記憶した１個の元Ｒを表わすデータとを入力する。
検証元算出部４５７は、ＣＰＵ９１１を用いて、元Ωの（−ｒ）乗を計算する。検証元算出部４５７が算出した１個の元「Ω＾（−ｒ）」は、乗法群Ｇ３の元である。
検証元算出部４５７は、ＣＰＵ９１１を用いて、元Ｒと、算出した元「Ω＾（−ｒ）」との積「Ｒ・Ω＾（−ｒ）」を計算する。以下、検証元算出部４５７が算出した積「Ｒ・Ω＾（−ｒ）」を「Ｅ」と呼ぶ。Ｅは、乗法群Ｇ３の元である。検証元算出部４５７は、ＲＡＭ９１４を用いて、算出した１個の元Ｅを表わすデータを記憶する。
【０２７６】
総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、公開元ａ記憶部４２３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを表わすデータと、分節数記憶部４３１が記憶した１個の整数Ｌ’を表わすデータと、権限識別子記憶部４３２が記憶したＬ”個の整数Ｉ’ｊを表わすデータと、埋込みキーワード記憶部４４１が記憶した１個の整数Ｗ’を表わすデータとを入力する。
総積元Ａ算出部４６１は、１個の整数Ｗ’と、（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち、ｌ（エル）が（Ｌ’＋１）に等しい（Ｄ＋２）個の元ａｎ，Ｌ’＋１とに基づいて、ＣＰＵ９１１を用いて、（Ｄ＋２）個の元ａｎ，Ｌ’＋１それぞれのＷ’乗を計算する。総積元Ａ算出部４６１が算出した（Ｄ＋２）個の元「ａｎ，Ｌ’＋１＾Ｗ’」は、乗法群Ｇ１の元である。
総積元Ａ算出部４６１は、Ｌ”個の整数Ｉ’ｊと、（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち、ｌ（エル）が集合Ａ’の要素であるＬ”個の整数ｊのいずれかに等しい（Ｄ＋２）×Ｌ”個の元ａｎ，ｊとに基づいて、ＣＰＵ９１１を用いて、１個の整数Ｉ’ｊにつき、整数Ｉ’ｊとｊが同じ（Ｄ＋２）個の元ａｎ，ｊそれぞれのＩ’ｊ乗を計算する。総積元Ａ算出部４６１が算出した元「ａｎ，ｊ＾Ｉ’ｊ」は、乗法群Ｇ１の元である。整数Ｉ’ｊはＬ”個あるので、総積元Ａ算出部４６１は、全部で（Ｄ＋２）×Ｌ”個の元「ａｎ，ｊ＾Ｉ’ｊ」を算出する。
総積元Ａ算出部４６１は、（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち、ｌ（エル）が０に等しい（Ｄ＋２）個の元ａｎ，０と、算出した（Ｄ＋２）個の元「ａｎ，Ｌ’＋１＾Ｗ’」と、算出した（Ｄ＋２）×Ｌ”個の元「ａｎ，ｊ＾Ｉ’ｊ」とに基づいて、ＣＰＵ９１１を用いて、１個の元ａｎ，０につき、元ａｎ，０と、（Ｄ＋２）個の元「ａｎ，Ｌ’＋１＾Ｗ’」のうち、元ａｎ，０とｎが同じ１個の元「ａｎ，Ｌ’＋１＾Ｗ’」と、（Ｄ＋２）×Ｌ”個の元「ａｎ，ｊ＾Ｉ’ｊ」のうち、元ａｎ，０とｎが同じＬ”個の元「ａｎ，ｊ＾Ｉ’ｊ」とを合わせた（Ｌ”＋２）個の元の総積を計算する。以下、総積元Ａ算出部４６１が算出した総積を「ΠＡ，ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ΠＡ，ｎは、乗法群Ｇ１の元である。総積元Ａ算出部４６１は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ΠＡ，ｎを表わすデータを記憶する。
【０２７７】
総積元Ｂ算出部４６２は、ＣＰＵ９１１を用いて、公開元ｂ記憶部４２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを表わすデータと、分節数記憶部４３１が記憶した１個の整数Ｌ’を表わすデータと、権限識別子記憶部４３２が記憶したＬ”個の整数Ｉ’ｊを表わすデータと、埋込みキーワード記憶部４４１が記憶した１個の整数Ｗ’を表わすデータとを入力する。
総積元Ｂ算出部４６２は、１個の整数Ｗ’と、（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち、ｌ（エル）が（Ｌ’＋１）に等しい（Ｄ＋２）個の元ｂｎ，Ｌ’＋１とに基づいて、ＣＰＵ９１１を用いて、（Ｄ＋２）個の元ｂｎ，Ｌ’＋１それぞれのＷ’乗を計算する。総積元Ｂ算出部４６２が算出した（Ｄ＋２）個の元「ｂｎ，Ｌ’＋１＾Ｗ’」は、乗法群Ｇ１の元である。
総積元Ｂ算出部４６２は、Ｌ”個の整数Ｉ’ｊと、（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち、ｌ（エル）が集合Ａ’の要素であるＬ”個の整数ｊのいずれかに等しい（Ｄ＋２）×Ｌ”個の元ｂｎ，ｊとに基づいて、ＣＰＵ９１１を用いて、１個の整数Ｉ’ｊにつき、整数Ｉ’ｊとｊが同じ（Ｄ＋２）個の元ｂｎ，ｊそれぞれのＩ’ｊ乗を計算する。総積元Ｂ算出部４６２が算出した元「ｂｎ，ｊ＾Ｉ’ｊ」は、乗法群Ｇ１の元である。整数Ｉ’ｊはＬ”個あるので、総積元Ｂ算出部４６２は、全部で（Ｄ＋２）×Ｌ”個の元「ｂｎ，ｊ＾Ｉ’ｊ」を算出する。
総積元Ｂ算出部４６２は、（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち、ｌ（エル）が０に等しい（Ｄ＋２）個の元ｂｎ，０と、算出した（Ｄ＋２）個の元「ｂｎ，Ｌ’＋１＾Ｗ’」と、算出した（Ｄ＋２）×Ｌ”個の元「ｂｎ，ｊ＾Ｉ’ｊ」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｂｎ，０につき、元ｂｎ，０と、（Ｄ＋２）個の元「ｂｎ，Ｌ’＋１＾Ｗ’」のうち、元ｂｎ，０とｎが同じ１個の元「ｂｎ，Ｌ’＋１＾Ｗ’」と、（Ｄ＋２）×Ｌ”個の元「ｂｎ，ｊ＾Ｉ’ｊ」のうち、元ｂｎ，０とｎが同じＬ”個の元「ｂｎ，ｊ＾Ｉ’ｊ」とを合わせた（Ｌ”＋２）個の元の総積を計算する。以下、総積元Ｂ算出部４６２が算出した総積を「ΠＢ，ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ΠＢ，ｎは、乗法群Ｇ１の元である。総積元Ｂ算出部４６２は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ΠＢ，ｎを表わすデータを記憶する。
【０２７８】
暗号元ａ算出部４６３は、ＣＰＵ９１１を用いて、副乱数ｒ選択部４５２が記憶した（Ｄ＋２）個の整数ｒｎを表わすデータと、総積元Ｂ算出部４６２が記憶した（Ｄ＋２）個の元ΠＢ，ｎを表わすデータとを入力する。暗号元ａ算出部４６３は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数ｒｎそれぞれについて、整数ｒｎとｎが同じ１個の元ΠＢ，ｎのｒｎ乗を計算する。以下、暗号元ａ算出部４６３が算出した元「ΠＢ，ｎ＾ｒｎ」を「ｃｎ，（ａ）」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｃｎ，（ａ）は、乗法群Ｇ１の元である。暗号元ａ算出部４６３は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｃｎ，（ａ）を表わすデータを記憶する。
【０２７９】
暗号元ｂ算出部４６４は、ＣＰＵ９１１を用いて、乱数ｒ選択部４５１が記憶した１個の整数ｒを表わすデータと、副乱数ｒ選択部４５２が記憶した（Ｄ＋２）個の整数ｒｎを表わすデータと、総積元Ａ算出部４６１が記憶した（Ｄ＋２）個の元ΠＡ，ｎを表わすデータとを入力する。暗号元ｂ算出部４６４は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数ｒｎそれぞれについて、整数ｒから整数ｒｎを差し引いた差「ｒ−ｒｎ」を計算する。暗号元ｂ算出部４６４は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数ｒｎそれぞれについて、整数ｒｎとｎが同じ１個の元ΠＡ，ｎの「ｒ−ｒｎ」乗を計算する。以下、暗号元ｂ算出部４６４が算出した元「ΠＡ，ｎ＾（ｒ−ｒｎ）」を「ｃｎ，（ｂ）」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｃｎ，（ｂ）は、乗法群Ｇ１の元である。暗号元ｂ算出部４６４は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｃｎ，（ｂ）を表わすデータを記憶する。
【０２８０】
暗号部分元ａ算出部４６５は、ＣＰＵ９１１を用いて、公開元ｂ記憶部４２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを表わすデータと、副乱数ｒ選択部４５２が記憶した（Ｄ＋２）個の整数ｒｎを表わすデータとを入力する。暗号部分元ａ算出部４６５は、（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち、ｌ（エル）が集合Ａの元である（Ｌ’−Ｌ”）個の整数ｊのいずれかに等しい（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｂｎ，ｊと、（Ｄ＋２）個の整数ｒｎとに基づいて、ＣＰＵ９１１を用いて、１個の整数ｒｎにつき、整数ｒｎとｎが同じ（Ｌ’−Ｌ”）個の元ｂｎ，ｊそれぞれのｒｎ乗を計算する。以下、暗号部分元ａ算出部４６５が算出した元「ｂｎ，ｊ＾ｒｎ」を「ｃｎ，ｊ，（ａ）」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｊは、集合Ａの元であるＬ”個の整数である。ｃｎ，ｊ，（ａ）は、乗法群Ｇ１の元である。整数ｒｎは（Ｄ＋２）個あるから、暗号部分元ａ算出部４６５は、全部で（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）を算出する。暗号部分元ａ算出部４６５は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）を表わすデータを記憶する。
【０２８１】
暗号部分元ｂ算出部４６６は、ＣＰＵ９１１を用いて、公開元ａ記憶部４２３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを表わすデータと、乱数ｒ選択部４５１が記憶した１個の整数ｒを表わすデータと、副乱数ｒ選択部４５２が記憶した（Ｄ＋２）個の整数ｒｎを表わすデータとを入力する。暗号部分元ｂ算出部４６６は、ＣＰＵ９１１を用いて、（Ｄ＋２）個の整数ｒｎそれぞれについて、整数ｒから整数ｒｎを差し引いた差「ｒ−ｒｎ」を計算する。暗号部分元ｂ算出部４６６は、（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち、ｌ（エル）が集合Ａの元である（Ｌ’−Ｌ”）個の整数ｊのいずれかに等しい（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ａｎ，ｊと、算出した（Ｄ＋２）個の差「ｒ−ｒｎ」とに基づいて、ＣＰＵ９１１を用いて、１個の整数ｒｎにつき、整数ｒｎとｎが同じ（Ｌ’−Ｌ”）個の元ａｎ，ｊそれぞれの「ｒ−ｒｎ」乗を計算する。以下、暗号部分元ｂ算出部４６６が算出した元「ａｎ，ｊ＾（ｒ−ｒｎ）」を「ｃｎ，ｊ，（ｂ）」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｊは、集合Ａの元である（Ｌ’−Ｌ”）個の整数である。ｃｎ，ｊ，（ｂ）は、乗法群Ｇ１の元である。整数ｒｎは（Ｄ＋２）個あるから、暗号部分元ｂ算出部４６６は、全部で（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）を算出する。暗号部分元ｂ算出部４６６は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）を表わすデータを記憶する。
【０２８２】
暗号文出力部４１４は、ＣＰＵ９１１を用いて、分節数記憶部４３１が記憶した１個の整数Ｌ’を表わすデータと、乱数元選択部４５３が記憶した１個の元Ｒを表わすデータと、検証元算出部４５７が記憶した１個の元Ｅを表わすデータと、暗号元算出部４５６が記憶した１個の元ｃ０を表わすデータとを入力する。また、暗号文出力部４１４は、ＣＰＵ９１１を用いて、暗号元ａ算出部４６３が記憶した（Ｄ＋２）個の元ｃｎ，（ａ）を表わすデータと、暗号元ｂ算出部４６４が記憶した（Ｄ＋２）個の元ｃｎ，（ｂ）を表わすデータとを入力する。また、暗号文出力部４１４は、ＣＰＵ９１１を用いて、暗号部分元ａ算出部４６５が記憶した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）を表わすデータと、暗号部分元ｂ算出部４６６が記憶した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）を表わすデータとを入力する。
暗号文出力部４１４は、ＣＰＵ９１１を用いて、１個の整数Ｌ’と、１個の元Ｒと、１個の元Ｅと、１個の元ｃ０と、（Ｄ＋２）個の元ｃｎ，（ａ）と、（Ｄ＋２）個の元ｃｎ，（ｂ）と、（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）と、（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）とを表わすデータを含むデータを、暗号文として出力する。
なお、暗号文は、整数Ｌ’を表わすデータに代えて、集合Ａまたは集合Ａ’を表わすデータを含む構成であってもよい。
【０２８３】
図１８は、この実施の形態における暗号文生成処理Ｓ８５０の流れの一例を示すフローチャート図である。
暗号文生成処理Ｓ８５０において、暗号化装置４００は、暗号文に含まれる元を算出する。なお、ここでは、暗号文を生成する特定の手順を説明するが、計算手順は、ここで説明する手順に限らず、数学的に同値な結果が得られる計算手順であれば、ここで説明する手順と異なる手順であってもよい。
【０２８４】
暗号文生成処理Ｓ８５０は、乱数ｒ選択工程Ｓ８５１、乱数元選択工程Ｓ８５２、暗号元算出工程Ｓ８５３、検証元算出工程Ｓ８５４、ｎ初期化工程Ｓ８５５、総積元Ａ初期化工程Ｓ８５６、総積元Ｂ初期化工程Ｓ８５７、副乱数ｒ選択工程Ｓ８５８、ｊ初期化工程Ｓ８５９、ワイルドカード判定工程Ｓ８６０、総積元Ａ計算工程Ｓ８６１、総積元Ｂ計算工程Ｓ８６２、暗号部分元ａ算出工程Ｓ８６３、暗号部分元ｂ算出工程Ｓ８６４、ｊ増加工程Ｓ８６５、ｊ判定工程Ｓ８６６、暗号元ａ算出工程Ｓ８６７、暗号元ｂ算出工程Ｓ８６８、ｎ増加工程Ｓ８６９、ｎ判定工程Ｓ８７０を有する。
【０２８５】
乱数ｒ選択工程Ｓ８５１において、乱数ｒ選択部４５１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに１個の整数ｒを選択する。
【０２８６】
乱数元選択工程Ｓ８５２において、乱数元選択部４５３は、ＣＰＵ９１１を用いて、乗法群Ｇ３の元のなかから、一様ランダムに１個の元Ｒを選択する。
【０２８７】
暗号元算出工程Ｓ８５３において、暗号元算出部４５６は、第一生成元記憶部４２１が記憶した１個の生成元ｇ１と、乱数ｒ選択工程Ｓ８５１で乱数ｒ選択部４５１が選択した１個の整数ｒとに基づいて、ＣＰＵ９１１を用いて、生成元ｇ１のｒ乗を計算して、乗法群Ｇ１の元である１個の元ｃ０を得る。
【０２８８】
検証元算出工程Ｓ８５４において、検証元算出部４５７は、公開元Ω記憶部４２２が記憶した１個の元Ωと、乱数ｒ選択工程Ｓ８５１で乱数ｒ選択部４５１が選択した１個の整数ｒとに基づいて、ＣＰＵ９１１を用いて、元Ωの（−ｒ）乗を計算する。
検証元算出部４５７は、乱数元選択工程Ｓ８５２で乱数元選択部４５３が選択した１個の元Ｒと、算出した１個の元「Ω＾（−ｒ）」とに基づいて、ＣＰＵ９１１を用いて、元Ｒと元「Ω＾（−ｒ）」との積「Ｒ・Ω＾（−ｒ）」を計算して、乗法群Ｇ３の元である１個の元Ｅを得る。
【０２８９】
ｎ初期化工程Ｓ８５５において、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、変数ｎの値を０に設定する。
【０２９０】
総積元Ａ初期化工程Ｓ８５６において、総積元Ａ算出部４６１は、公開元ａ記憶部４２３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が（Ｌ’＋１）に等しい１個の元ａｎ，Ｌ’＋１と、埋込みキーワード記憶部４４１が記憶した１個の整数Ｗ’とに基づいて、ＣＰＵ９１１を用いて、元ａｎ，Ｌ’＋１のＷ’乗を計算する。
総積元Ａ算出部４６１は、公開元ａ記憶部４２３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が０に等しい１個の元ａｎ，０と、算出した１個の元「ａｎ，Ｌ’＋１＾Ｗ’」とに基づいて、ＣＰＵ９１１を用いて、元ａｎ，０と元「ａｎ，Ｌ’＋１＾Ｗ’」との積「ａｎ，０・ａｎ，Ｌ’＋１＾Ｗ’」を計算する。総積元Ａ算出部４６１は、ＲＡＭ９１４を用いて、算出した積「ａｎ，０・ａｎ，Ｌ’＋１＾Ｗ’」を、１個の元ΠＡ，ｎを計算するための最初の値として記憶する。
【０２９１】
総積元Ｂ初期化工程Ｓ８５７において、総積元Ｂ算出部４６２は、公開元ｂ記憶部４２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が（Ｌ’＋１）に等しい１個の元ｂｎ，Ｌ’＋１と、埋込みキーワード記憶部４４１が記憶した１個の整数Ｗ’とに基づいて、ＣＰＵ９１１を用いて、元ｂｎ，Ｌ’＋１のＷ’乗を計算する。
総積元Ｂ算出部４６２は、公開元ｂ記憶部４２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が０に等しい１個の元ｂｎ，０と、算出した１個の元「ｂｎ，Ｌ’＋１＾Ｗ’」とに基づいて、ＣＰＵ９１１を用いて、元ｂｎ，０と元「ｂｎ，Ｌ’＋１＾Ｗ’」との積「ｂｎ，０・ｂｎ，Ｌ’＋１＾Ｗ’」を計算する。総積元Ｂ算出部４６２は、ＲＡＭ９１４を用いて、算出した積「ｂｎ，０・ｂｎ，Ｌ’＋１＾Ｗ’」を、１個の元ΠＢ，ｎを計算するための最初の値として記憶する。
【０２９２】
副乱数ｒ選択工程Ｓ８５８において、副乱数ｒ選択部４５２は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに１個の整数ｒｎを選択する。
【０２９３】
ｊ初期化工程Ｓ８５９において、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、変数ｊの値を１に設定する。
【０２９４】
ワイルドカード判定工程Ｓ８６０において、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、変数ｊの値が集合Ａに含まれる整数に等しいか否かを判定する。
変数ｊの値が集合Ａに含まれる整数に等しくない場合、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、総積元Ａ計算工程Ｓ８６１へ進む。
変数ｊの値が集合Ａに含まれる整数に等しい場合、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、暗号部分元ａ算出工程Ｓ８６３へ進む。
【０２９５】
総積元Ａ計算工程Ｓ８６１において、総積元Ａ算出部４６１は、公開元ａ記憶部４２３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が変数ｊの値に等しい１個の元ａｎ，ｊと、権限識別子記憶部４３２が記憶したＬ”個の整数Ｉ’ｊのうち、ｊが変数ｊの値に等しい１個の整数Ｉ’ｊとに基づいて、ＣＰＵ９１１を用いて、元ａｎ，ｊのＩ’ｊ乗を計算する。
総積元Ａ算出部４６１は、記憶した１個の元ΠＡ，ｎと、算出した１個の元「ａｎ，ｊ＾Ｉ’ｊ」とに基づいて、ＣＰＵ９１１を用いて、元ΠＡ，ｎと元「ａｎ，ｊ＾Ｉ’ｊ」との積「ΠＡ，ｎ・ａｎ，ｊ＾Ｉ’ｊ」を計算する。総積元Ａ算出部４６１は、ＲＡＭ９１４を用いて、算出した積「ΠＡ，ｎ・ａｎ，ｊ＾Ｉ’ｊ」を、元ΠＡ，ｎの新しい値として記憶する。
【０２９６】
総積元Ｂ計算工程Ｓ８６２において、総積元Ｂ算出部４６２は、公開元ｂ記憶部４２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が変数ｊの値に等しい１個の元ｂｎ，ｊと、権限識別子記憶部４３２が記憶したＬ”個の整数Ｉ’ｊのうち、ｊが変数ｊの値に等しい１個の整数Ｉ’ｊとに基づいて、ＣＰＵ９１１を用いて、元ｂｎ，ｊのＩ’ｊ乗を計算する。
総積元Ｂ算出部４６２は、記憶した１個の元ΠＢ，ｎと、算出した１個の元「ｂｎ，ｊ＾Ｉ’ｊ」とに基づいて、ＣＰＵ９１１を用いて、元ΠＢ，ｎと元「ｂｎ，ｊ＾Ｉ’ｊ」との積「ΠＢ，ｎ・ｂｎ，ｊ＾Ｉ’ｊ」を計算する。総積元Ｂ算出部４６２は、ＲＡＭ９１４を用いて、算出した積「ΠＢ，ｎ・ｂｎ，ｊ＾Ｉ’ｊ」を、元ΠＢ，ｎの新しい値として記憶する。
総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、ｊ増加工程Ｓ８６５へ進む。
【０２９７】
暗号部分元ａ算出工程Ｓ８６３において、暗号部分元ａ算出部４６５は、公開元ｂ記憶部４２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が変数ｊの値に等しい１個の元ｂｎ，ｊと、副乱数ｒ選択工程Ｓ８５８で副乱数ｒ選択部４５２が選択した１個の整数ｒｎとに基づいて、ＣＰＵ９１１を用いて、元ｂｎ，ｊのｒｎ乗を計算して、乗法群Ｇ１の元である１個の元ｃｎ，ｊ，（ａ）を得る。
【０２９８】
暗号部分元ｂ算出工程Ｓ８６４において、暗号部分元ｂ算出部４６６は、乱数ｒ選択工程Ｓ８５１で乱数ｒ選択部４５１が選択した１個の整数ｒと、副乱数ｒ選択工程Ｓ８５８で副乱数ｒ選択部４５２が選択した１個の整数ｒｎとに基づいて、ＣＰＵ９１１を用いて、整数ｒから整数ｒｎを差し引いた差「ｒ−ｒｎ」を計算する。
暗号部分元ｂ算出部４６６は、公開元ａ記憶部４２３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち、ｎが変数ｎの値に等しく、ｌ（エル）が変数ｊの値に等しい１個の元ａｎ，ｊと、算出した１個の差「ｒ−ｒｎ」とに基づいて、ＣＰＵ９１１を用いて、元ａｎ，ｊの「ｒ−ｒｎ」乗を計算して、乗法群Ｇ１の元である１個の元ｃｎ，ｊ，（ｂ）を得る。
【０２９９】
ｊ増加工程Ｓ８６５において、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、変数ｊの値を１増加させる。
【０３００】
ｊ判定工程Ｓ８６６において、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、変数ｊの値と、整数Ｌ’とを比較する。
変数ｊの値がＬ’以下である場合、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、ワイルドカード判定工程Ｓ８６０に戻る。
変数ｊの値がＬ’より大きい場合、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、暗号元ａ算出工程Ｓ８６７へ進む。
【０３０１】
暗号元ａ算出工程Ｓ８６７において、暗号元ａ算出部４６３は、総積元Ｂ算出部４６２が記憶した１個の元ΠＢ，ｎと、副乱数ｒ選択工程Ｓ８５８で副乱数ｒ選択部４５２が選択した１個の整数ｒｎとに基づいて、ＣＰＵ９１１を用いて、元ΠＢ，ｎのｒｎ乗を計算して、乗法群Ｇ１の元である１個の元ｃｎ，（ａ）を得る。
【０３０２】
暗号元ｂ算出工程Ｓ８６８において、暗号元ｂ算出部４６４は、乱数ｒ選択工程Ｓ８５１で乱数ｒ選択部４５１が選択した１個の整数ｒと、副乱数ｒ選択工程Ｓ８５８で副乱数ｒ選択部４５２が選択した１個の整数ｒｎとに基づいて、ＣＰＵ９１１を用いて、整数ｒから整数ｒｎを差し引いた差「ｒ−ｒｎ」を計算する。
暗号元ｂ算出部４６４は、総積元Ａ算出部４６１が記憶した１個の元ΠＡ，ｎと、算出した１個の差「ｒ−ｒｎ」とに基づいて、ＣＰＵ９１１を用いて、元ΠＡ，ｎの「ｒ−ｒｎ」乗を計算して、乗法群Ｇ１の元である１個の元ｃｎ，（ｂ）を得る。
【０３０３】
ｎ増加工程Ｓ８６９において、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、変数ｎの値を１増加させる。
【０３０４】
ｎ判定工程Ｓ８７０において、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、変数ｎの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｎの値が（Ｄ＋１）以下である場合、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、総積元Ａ初期化工程Ｓ８５６に戻り、次の元ΠＡ，ｎを設定する。
変数ｎの値が（Ｄ＋１）より大きい場合、総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、暗号文生成処理Ｓ８５０を終了する。
【０３０５】
これにより、総積元Ａ初期化工程Ｓ８５６からｎ判定工程Ｓ８７０までの工程は、（Ｄ＋２）回繰り返される。暗号元ａ算出部４６３は、暗号元ａ算出工程Ｓ８６７を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｃｎ，（ａ）を算出する。暗号元ｂ算出部４６４は、暗号元ｂ算出工程Ｓ８６８を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｃｎ，（ｂ）を算出する。
変数ｎの繰り返し１回につき、ワイルドカード判定工程Ｓ８６０からｊ判定工程Ｓ８６６までの工程は、Ｌ’回繰り返される。そのうち、暗号部分元ａ算出工程Ｓ８６３と暗号部分元ｂ算出工程Ｓ８６４とが実行されるのは、（Ｌ’−Ｌ”）回である。暗号部分元ａ算出部４６５は、暗号部分元ａ算出工程Ｓ８６３を全部で（Ｄ＋２）×（Ｌ’−Ｌ”）回実行して、（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）を算出する。暗号部分元ｂ算出部４６６は、暗号部分元ｂ算出工程Ｓ８６４を全部で（Ｄ＋２）×（Ｌ’−Ｌ”）回実行して、（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）を算出する。
【０３０６】
図１９は、この実施の形態における検索装置５００の機能ブロックの構成の一例を示すブロック構成図である。
検索装置５００は、あらかじめ記憶した１以上の暗号文のなかから、クエリで指定されたキーワードが埋め込まれた暗号文を検索する。ただし、クエリを生成したクエリ発行装置３００にその暗号文を検索する権限がない場合は、暗号文にクエリで指定されたキーワードと同じキーワードが埋め込まれていたとしても、ヒットしない。検索装置５００は、暗号文を復号することなく、検索を行うので、暗号文に埋め込まれたキーワードが何なのかわからない。また、クエリも暗号化されているので、検索装置５００には、検索しているキーワードが何なのかもわからない。
検索装置５００は、暗号文入力部５１１、クエリ入力部５２１、検索結果出力部５２２、暗号文記憶部５３０、クエリ記憶部５４０、検索部５５０を有する。
【０３０７】
暗号文入力部５１１は、ＣＰＵ９１１を用いて、暗号化装置４００が生成した暗号文を入力する。暗号文には、１個の整数Ｌ’と、乗法群Ｇ３の元である１個の元Ｒと、乗法群Ｇ３の元である１個の元Ｅと、乗法群Ｇ１の元である１個の元ｃ０と、乗法群Ｇ１の元である（Ｄ×２）個の元ｃｎ，（ａ）と、乗法群Ｇ１の元である（Ｄ×２）個の元ｃｎ，（ｂ）と、乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）と、乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）とを表わすデータが含まれる。
【０３０８】
暗号文記憶部５３０は、磁気ディスク装置９２０を用いて、暗号文入力部５１１が入力した暗号文を記憶する。
【０３０９】
クエリ入力部５２１は、ＣＰＵ９１１を用いて、クエリ発行装置３００が生成したクエリを入力する。クエリには、Ｌ個の整数Ｉｉと、乗法群Ｇ２の元である１個の元ｋ’０と、乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とを表わすデータが含まれる。
【０３１０】
クエリ記憶部５４０は、ＲＡＭ９１４を用いて、クエリ入力部５２１が入力したクエリを記憶する。
【０３１１】
検索部５５０は、ＣＰＵ９１１を用いて、暗号文記憶部５３０が記憶した暗号文のなかから、暗号文記憶部５３０が記憶したクエリによって指定されるキーワードが埋め込まれた暗号文を検索する。暗号文記憶部５３０が記憶した暗号文が複数ある場合、検索部５５０は、それぞれの暗号文と、クエリとを使った計算により、その暗号文がヒットするか否かを判定する。検索部５５０は、これをすべての暗号文について実行することにより、すべての暗号文のなかから、ヒットする暗号文を抽出する。
【０３１２】
検索結果出力部５２２は、ＣＰＵ９１１を用いて、検索部５５０が検索した結果を表わすメッセージを生成する。検索結果出力部５２２は、例えば、検索にヒットした暗号文が対応づけられたデータ本体を識別するデータや、データ本体の所在を表わすデータを含むメッセージを生成する。検索結果出力部５２２は、ＣＰＵ９１１を用いて、生成したメッセージを出力する。検索結果出力部５２２が出力したメッセージは、クエリを通知してきたクエリ発行装置３００に対して、通知される。
【０３１３】
図２０は、この実施の形態における検索装置５００のうち暗号文記憶部５３０、クエリ記憶部５４０、検索部５５０の詳細な構成の一例を示す詳細ブロック図である。
暗号文記憶部５３０は、分節数記憶部５３１、乱数元記憶部５３２、検証元記憶部５３３、暗号元記憶部５３４、暗号元ａ記憶部５３５、暗号元ｂ記憶部５３６、暗号部分元ａ記憶部５３７、暗号部分元ｂ記憶部５３８を有する。
クエリ記憶部５４０は、質問識別子記憶部５４１、質問元記憶部５４２、質問元ａ記憶部５４３、質問元ｂ記憶部５４４を有する。
検索部５５０は、暗号総積元Ａ算出部５５１、ペアリング元Ａ算出部５５２、暗号総積元Ｂ算出部５５３、ペアリング元Ｂ算出部５５４、ペアリング元算出部５５５、比較元算出部５５６、比較部５５７を有する。
【０３１４】
分節数記憶部５３１は、磁気ディスク装置９２０を用いて、１個の暗号文につき、１個の整数Ｌ’を表わすデータを記憶する。
【０３１５】
乱数元記憶部５３２は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ３の元である１個の元Ｒを表わすデータを記憶する。
【０３１６】
検証元記憶部５３３は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ３の元である１個の元Ｅを表わすデータを記憶する。
【０３１７】
暗号元記憶部５３４は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である１個の元ｃ０を表わすデータを記憶する。
【０３１８】
暗号元ａ記憶部５３５は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）を表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。
【０３１９】
暗号元ｂ記憶部５３６は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ｂ）を表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。
【０３２０】
暗号部分元ａ記憶部５３７は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）を表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。ｊは、１以上Ｌ’以下の整数のうち、集合Ａに含まれるＬ”個の整数である。
【０３２１】
暗号部分元ｂ記憶部５３８は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）を表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。ｊは、１以上Ｌ’以下の整数のうち、集合Ａに含まれるＬ”個の整数である。
【０３２２】
質問識別子記憶部５４１は、ＲＡＭ９１４を用いて、クエリのうち、Ｌ個の整数Ｉｉを表わすデータを記憶する。ｉは、１以上Ｌ以下の整数である。
【０３２３】
質問元記憶部５４２は、ＲＡＭ９１４を用いて、クエリのうち、乗法群Ｇ２の元である１個の元ｋ’０を表わすデータを記憶する。
【０３２４】
質問元ａ記憶部５４３は、ＲＡＭ９１４を用いて、クエリのうち、乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）を表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。
【０３２５】
質問元ｂ記憶部５４４は、ＲＡＭ９１４を用いて、クエリのうち、乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を表わすデータを記憶する。ｎは、０以上（Ｄ＋１）以下の整数である。
【０３２６】
暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、分節数記憶部５３１が記憶した１個の整数Ｌ’を表わすデータと、暗号元ａ記憶部５３５が記憶した（Ｄ＋２）個の元ｃｎ，（ａ）を表わすデータと、暗号部分元ａ記憶部５３７が記憶した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）を表わすデータとを入力する。また、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、質問識別子記憶部５４１が記憶したＬ個の整数Ｉｉを表わすデータを入力する。
暗号総積元Ａ算出部５５１は、（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）のうち、ｊが１以上Ｌ以下の整数ｉである元ｃｎ，ｉ，（ａ）と、Ｌ個の整数Ｉｉのうち、ｉが集合Ａに含まれる整数である整数Ｉｉとに基づいて、１個の整数Ｉｉにつき、整数Ｉｉとｉが同じ（Ｄ＋２）個の元ｃｎ，ｉ，（ａ）それぞれのＩｉ乗を計算する。暗号総積元Ａ算出部５５１が算出する元「ｃｎ，ｉ，（ａ）＾Ｉｉ」は、乗法群Ｇ１の元である。
集合Ａの元は、１以上Ｌ’以下の整数であるから、整数ＬがＬ’以上である場合、１以上Ｌ以下の整数のうち集合Ａに含まれる整数の数は、集合Ａの元の数と同じ（Ｌ’−Ｌ”）個である。整数ＬがＬ’より小さい場合、１以上Ｌ以下の整数のうち集合Ａに含まれる整数の数は、集合Ａの元の数（Ｌ’−Ｌ”）より小さくなる場合がある。以下、１以上Ｌ以下の整数のうち集合Ａに含まれる整数の数を「ＬＡ」と呼ぶ。暗号総積元Ａ算出部５５１は、全部で（Ｄ＋２）×ＬＡ個の元「ｃｎ，ｉ，（ａ）＾Ｉｉ」を算出する。
暗号総積元Ａ算出部５５１は、（Ｄ＋２）個の元ｃｎ，（ａ）と、算出した（Ｄ＋２）×ＬＡ個の元「ｃｎ，ｉ，（ａ）＾Ｉｉ」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｃｎ，（ａ）につき、１個の元ｃｎ，（ａ）と、元ｃｎ，（ａ）とｎが同じＬＡ個の元「ｃｎ，ｉ，（ａ）＾Ｉｉ」とを合わせた全部で（ＬＡ＋１）個の元の総積を計算する。以下、暗号総積元Ａ算出部５５１が算出した総積を「ΠＡ’，ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ΠＡ’，ｎは、乗法群Ｇ１の元である。暗号総積元Ａ算出部５５１は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ΠＡ’，ｎを表わすデータを記憶する。
【０３２７】
暗号総積元Ｂ算出部５５３は、ＣＰＵ９１１を用いて、分節数記憶部５３１が記憶した１個の整数Ｌ’を表わすデータと、暗号元ｂ記憶部５３６が記憶した（Ｄ＋２）個の元ｃｎ，（ｂ）を表わすデータと、暗号部分元ｂ記憶部５３８が記憶した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）を表わすデータとを入力する。また、暗号総積元Ｂ算出部５５３は、ＣＰＵ９１１を用いて、質問識別子記憶部５４１が記憶したＬ個の整数Ｉｉを表わすデータを入力する。
暗号総積元Ｂ算出部５５３は、（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）のうち、ｊが１以上Ｌ以下の整数ｉである（Ｄ＋２）×ＬＡ個の元ｃｎ，ｉ，（ｂ）と、Ｌ個の整数Ｉｉのうち、ｉが集合Ａに含まれる整数であるＬＡ個の整数Ｉｉとに基づいて、１個の整数Ｉｉにつき、整数Ｉｉとｉが同じ（Ｄ＋２）個の元ｃｎ，ｉ，（ｂ）それぞれのＩｉ乗を計算する。暗号総積元Ｂ算出部５５３が算出する元「ｃｎ，ｉ，（ｂ）＾Ｉｉ」は、乗法群Ｇ１の元である。暗号総積元Ｂ算出部５５３は、全部で（Ｄ＋２）×ＬＡ個の元「ｃｎ，ｉ，（ｂ）＾Ｉｉ」を算出する。
暗号総積元Ｂ算出部５５３は、（Ｄ＋２）個の元ｃｎ，（ｂ）と、算出した（Ｄ＋２）×ＬＡ個の元「ｃｎ，ｉ，（ｂ）＾Ｉｉ」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｃｎ，（ｂ）につき、１個の元ｃｎ，（ｂ）と、元ｃｎ，（ｂ）とｎが同じＬＡ個の元「ｃｎ，ｉ，（ｂ）＾Ｉｉ」とを合わせた全部で（ＬＡ＋１）個の元の総積を計算する。以下、暗号総積元Ｂ算出部５５３が算出した総積を「ΠＢ’，ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ΠＢ’，ｎは、乗法群Ｇ１の元である。暗号総積元Ｂ算出部５５３は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ΠＢ’，ｎを表わすデータを記憶する。
【０３２８】
ペアリング元Ａ算出部５５２は、ＣＰＵ９１１を用いて、質問元ａ記憶部５４３が記憶した（Ｄ＋２）個の元ｋ’ｎ，（ａ）を表わすデータと、暗号総積元Ａ算出部５５１が記憶した（Ｄ＋２）個の元ΠＡ’，ｎを表わすデータとを入力する。ペアリング元Ａ算出部５５２は、（Ｄ＋２）個の元ΠＡ’，ｎと、（Ｄ＋２）個の元ｋ’ｎ，（ａ）とに基づいて、ＣＰＵ９１１を用いて、１個の元ΠＡ’，ｎにつき、双線形ペアリングｅにより、１個の元ΠＡ’，ｎと、元ΠＡ’，ｎとｎが同じ１個の元ｋ’ｎ，（ａ）とのペアリングを計算する。以下、ペアリング元Ａ算出部５５２が算出したペアリングを「ｅＡ，ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｅＡ，ｎは、乗法群Ｇ３の元である。ペアリング元Ａ算出部５５２は、（Ｄ＋２）個の元ｅＡ，ｎを算出する。ペアリング元Ａ算出部５５２は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｅＡ，ｎを表わすデータを記憶する。
【０３２９】
ペアリング元Ｂ算出部５５４は、ＣＰＵ９１１を用いて、質問元ｂ記憶部５４４が記憶した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を表わすデータと、暗号総積元Ｂ算出部５５３が記憶した（Ｄ＋２）個の元ΠＢ’，ｎを表わすデータとを入力する。ペアリング元Ｂ算出部５５４は、（Ｄ＋２）個の元ΠＢ’，ｎと、（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とに基づいて、ＣＰＵ９１１を用いて、１個の元ΠＢ’，ｎにつき、双線形ペアリングｅにより、１個の元ΠＢ’，ｎと、元ΠＢ’，ｎとｎが同じ１個の元ｋ’ｎ，（ｂ）とのペアリングを計算する。以下、ペアリング元Ｂ算出部５５４が算出したペアリングを「ｅＢ，ｎ」と呼ぶ。ｎは、０以上（Ｄ＋１）以下の整数である。ｅＢ，ｎは、乗法群Ｇ３の元である。ペアリング元Ｂ算出部５５４は、（Ｄ＋２）個の元ｅＢ，ｎを算出する。ペアリング元Ｂ算出部５５４は、ＲＡＭ９１４を用いて、算出した（Ｄ＋２）個の元ｅＢ，ｎを表わすデータを記憶する。
【０３３０】
ペアリング元算出部５５５は、ＣＰＵ９１１を用いて、暗号元記憶部５３４が記憶した１個の元ｃ０を表わすデータと、質問元記憶部５４２が記憶した１個の元ｋ’０を表わすデータとを入力する。ペアリング元算出部５５５は、１個の元ｃ０と、１個の元ｋ’０とに基づいて、ＣＰＵ９１１を用いて、双線形ペアリングｅにより、元ｃ０と元ｋ’０とのペアリングを計算する。以下、ペアリング元算出部５５５が算出したペアリングを「ｅ０」と呼ぶ。ｅ０は、乗法群Ｇ３の元である。ペアリング元算出部５５５は、１個の元ｅ０を算出する。ペアリング元算出部５５５は、ＲＡＭ９１４を用いて、算出した１個の元ｅ０を表わすデータを記憶する。
【０３３１】
比較元算出部５５６は、ＣＰＵ９１１を用いて、検証元記憶部５３３が記憶した１個の元Ｅを表わすデータと、ペアリング元Ａ算出部５５２が記憶した（Ｄ＋２）個の元ｅＡ，ｎを表わすデータと、ペアリング元Ｂ算出部５５４が記憶した（Ｄ＋２）個の元ｅＢ，ｎを表わすデータと、ペアリング元算出部５５５が記憶した１個の元ｅ０を表わすデータとを入力する。比較元算出部５５６は、１個の元Ｅと、１個の元ｅ０と、（Ｄ＋２）個の元ｅＡ，ｎと、（Ｄ＋２）個の元ｅＢ，ｎとに基づいて、ＣＰＵ９１１を用いて、１個の元Ｅと、１個の元ｅ０と、（Ｄ＋２）個の元ｅＡ，ｎと、（Ｄ＋２）個の元ｅＢ，ｎとを合わせた全部で（２Ｄ＋６）個の元の総積を計算する。以下、比較元算出部５５６が算出した総積を「Ｒ’」と呼ぶ。Ｒ’は、乗法群Ｇ３の元である。比較元算出部５５６は、１個の元Ｒ’を算出する。比較元算出部５５６は、ＲＡＭ９１４を用いて、算出した１個の元Ｒ’を表わすデータを記憶する。
【０３３２】
比較部５５７は、ＣＰＵ９１１を用いて、乱数元記憶部５３２が記憶した１個の元Ｒを表わすデータと、比較元算出部５５６が記憶した１個の元Ｒ’を表わすデータとを入力する。比較部５５７は、ＣＰＵ９１１を用いて、１個の元Ｒと、１個の元Ｒ’とを比較する。
元Ｒと元Ｒ’とが一致する場合、比較部５５７は、ＣＰＵ９１１を用いて、検索にヒットしたと判定する。
元Ｒと元Ｒ’とが不一致の場合、比較部５５７は、ＣＰＵ９１１を用いて、検索にヒットしなかったと判定する。
【０３３３】
検索結果出力部５２２は、比較部５５７の判定結果に基づいて、ＣＰＵ９１１を用いて、検索の結果を表わすメッセージを生成する。
【０３３４】
図２１は、この実施の形態における比較元生成処理Ｓ８８０の流れの一例を示すフローチャート図である。
比較元生成処理Ｓ８８０において、検索部５５０は、１個の暗号文について、乗法群Ｇ３の元である１個の元Ｒ’を算出する。なお、ここでは、比較元を算出する特定の手順を説明するが、計算手順は、ここで説明する手順に限らず、数学的に同値な結果が得られる計算手順であれば、ここで説明する手順と異なる手順であってもよい。
【０３３５】
比較元生成処理Ｓ８８０は、ペアリング元算出工程Ｓ８８１、比較元初期化工程Ｓ８８２、ｎ初期化工程Ｓ８８３、暗号総積元Ａ初期化工程Ｓ８８４、暗号総積元Ｂ初期化工程Ｓ８８５、ｉ初期化工程Ｓ８８６、ワイルドカード判定工程Ｓ８８７、暗号総積元Ａ計算工程Ｓ８８８、暗号総積元Ｂ計算工程Ｓ８８９、ｉ増加工程Ｓ８９０、ｉ比較工程Ｓ８９１、ペアリング元Ａ算出工程Ｓ８９２、ペアリング元Ｂ算出工程Ｓ８９３、比較元計算工程Ｓ８９４、ｎ増加工程Ｓ８９５、ｎ判定工程Ｓ８９６を有する。
【０３３６】
ペアリング元算出工程Ｓ８８１において、ペアリング元算出部５５５は、暗号元記憶部５３４が記憶した１個の元ｃ０と、質問元記憶部５４２が記憶した１個の元ｋ’０とに基づいて、ＣＰＵ９１１を用いて、双線形ペアリングｅにより、元ｃ０と元ｋ’０とのペアリングを計算して、乗法群Ｇ３の元である１個の元ｅ０を得る。
【０３３７】
比較元初期化工程Ｓ８８２において、比較元算出部５５６は、検証元記憶部５３３が記憶した１個の元Ｅと、ペアリング元算出工程Ｓ８８１でペアリング元算出部５５５が算出した１個の元ｅ０とに基づいて、ＣＰＵ９１１を用いて、元Ｅと元ｅ０との積「Ｅ・ｅ０」を計算する。比較元算出部５５６は、ＲＡＭ９１４を用いて、算出した積「Ｅ・ｅ０」を、元Ｒ’を計算するための最初の値として記憶する。
【０３３８】
ｎ初期化工程Ｓ８８３において、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、変数ｎの値を０に設定する。
【０３３９】
暗号総積元Ａ初期化工程Ｓ８８４において、暗号総積元Ａ算出部５５１は、ＲＡＭ９１４を用いて、暗号元ａ記憶部５３５が記憶した（Ｄ＋２）個の元ｃｎ，（ａ）のうち、ｎが変数ｎに等しい１個の元ｃｎ，（ａ）を、１個の元ΠＡ’，ｎを計算するための最初の値として記憶する。
【０３４０】
暗号総積元Ｂ初期化工程Ｓ８８５において、暗号総積元Ｂ算出部５５３は、ＲＡＭ９１４を用いて、暗号元ｂ記憶部５３６が記憶した（Ｄ＋２）個の元ｃｎ，（ｂ）のうち、ｎが変数ｎに等しい１個の元ｃｎ，（ｂ）を、１個の元ΠＢ’，ｎを計算するための最初の値として記憶する。
【０３４１】
ｉ初期化工程Ｓ８８６において、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、変数ｉの値を１に設定する。
【０３４２】
ワイルドカード判定工程Ｓ８８７において、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、変数ｉの値が、集合Ａに含まれる（Ｌ’−Ｌ”）個の整数のいずれかに等しいか否かを判定する。
変数ｉの値が集合Ａに含まれる整数と等しい場合、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、暗号総積元Ａ計算工程Ｓ８８８へ進む。
変数ｉの値が集合Ａに含まれる整数と等しくない場合、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、ｉ増加工程Ｓ８９０へ進む。
【０３４３】
暗号総積元Ａ計算工程Ｓ８８８において、暗号総積元Ａ算出部５５１は、暗号部分元ａ記憶部５３７が記憶した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ａ）のうち、ｎが変数ｎの値に等しく、ｊが変数ｉの値に等しい１個の元ｃｎ，ｉ，（ａ）と、質問識別子記憶部５４１が記憶したＬ個の整数Ｉｉのうち、ｉが変数ｉに等しい１個の整数Ｉｉとに基づいて、ＣＰＵ９１１を用いて、元ｃｎ，ｉ，（ａ）のＩｉ乗を計算する。
暗号総積元Ａ算出部５５１は、記憶した１個の元ΠＡ’，ｎと、算出した１個の元「ｃｎ，ｉ，（ａ）＾Ｉｉ」とに基づいて、ＣＰＵ９１１を用いて、元ΠＡ’，ｎと元「ｃｎ，ｉ，（ａ）＾Ｉｉ」との積「ΠＡ’，ｎ・ｃｎ，ｉ，（ａ）＾Ｉｉ」を計算する。暗号総積元Ａ算出部５５１は、ＲＡＭ９１４を用いて、算出した積「ΠＡ’，ｎ・ｃｎ，ｉ，（ａ）＾Ｉｉ」を、１個の元ΠＡ’，ｎの新しい値として記憶する。
【０３４４】
暗号総積元Ｂ計算工程Ｓ８８９において、暗号総積元Ｂ算出部５５３は、暗号部分元ｂ記憶部５３８が記憶した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ，（ｂ）のうち、ｎが変数ｎの値に等しく、ｊが変数ｉの値に等しい１個の元ｃｎ，ｉ，（ｂ）と、質問識別子記憶部５４１が記憶したＬ個の整数Ｉｉのうち、ｉが変数ｉに等しい１個の整数Ｉｉとに基づいて、ＣＰＵ９１１を用いて、元ｃｎ，ｉ，（ｂ）のＩｉ乗を計算する。
暗号総積元Ａ算出部５５１は、記憶した１個の元ΠＢ’，ｎと、算出した１個の元「ｃｎ，ｉ，（ｂ）＾Ｉｉ」とに基づいて、ＣＰＵ９１１を用いて、元ΠＢ’，ｎと元「ｃｎ，ｉ，（ｂ）＾Ｉｉ」との積「ΠＢ’，ｎ・ｃｎ，ｉ，（ｂ）＾Ｉｉ」を計算する。暗号総積元Ｂ算出部５５３は、ＲＡＭ９１４を用いて、算出した積「ΠＢ’，ｎ・ｃｎ，ｉ，（ｂ）＾Ｉｉ」を、１個の元ΠＢ’，ｎの新しい値として記憶する。
【０３４５】
ｉ増加工程Ｓ８９０において、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、変数ｉの値を１増加させる。
【０３４６】
ｉ比較工程Ｓ８９１において、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、変数ｉの値と、整数Ｌとを比較する。
変数ｉの値がＬ以下である場合、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、ワイルドカード判定工程Ｓ８８７に戻る。
変数ｉの値がＬより大きい場合、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、ペアリング元Ａ算出工程Ｓ８９２へ進む。
【０３４７】
ペアリング元Ａ算出工程Ｓ８９２において、ペアリング元Ａ算出部５５２は、暗号総積元Ａ算出部５５１が記憶した１個の元ΠＡ’，ｎと、質問元ａ記憶部５４３が記憶した（Ｄ＋２）個の元ｋ’ｎ，（ａ）のうち、ｎが変数ｎに等しい１個の元ｋ’ｎ，（ａ）とに基づいて、ＣＰＵ９１１を用いて、双線形ペアリングｅにより、元ΠＡ’，ｎと元ｋ’ｎ，（ａ）とのペアリングを計算して、乗法群Ｇ３の元である１個の元ｅＡ，ｎを得る。
【０３４８】
ペアリング元Ｂ算出工程Ｓ８９３において、ペアリング元Ｂ算出部５５４は、暗号総積元Ｂ算出部５５３が記憶した１個の元ΠＢ’，ｎと、質問元ｂ記憶部５４４が記憶した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）のうち、ｎが変数ｎに等しい１個の元ｋ’ｎ，（ｂ）とに基づいて、ＣＰＵ９１１を用いて、双線形ペアリングｅにより、元ΠＢ’，ｎと元ｋ’ｎ，（ｂ）とのペアリングを計算して、乗法群Ｇ３の元である１個の元ｅＢ，ｎを得る。
【０３４９】
比較元計算工程Ｓ８９４において、比較元算出部５５６は、記憶した１個の元Ｒ’と、ペアリング元Ａ算出工程Ｓ８９２でペアリング元Ａ算出部５５２が算出した１個の元ｅＡ，ｎと、ペアリング元Ｂ算出工程Ｓ８９３でペアリング元Ｂ算出部５５４が算出した１個の元ｅＢ，ｎとに基づいて、ＣＰＵ９１１を用いて、元Ｒ’と元ｅＡ，ｎと元ｅＢ，ｎとの積「Ｒ’・ｅＡ，ｎ・ｅＢ，ｎ」を計算する。比較元算出部５５６は、ＲＡＭ９１４を用いて、算出した１個の積「Ｒ’・ｅＡ，ｎ・ｅＢ，ｎ」を、１個の元Ｒ’の新しい値として記憶する。
【０３５０】
ｎ増加工程Ｓ８９５において、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、変数ｎの値を１増加させる。
【０３５１】
ｎ判定工程Ｓ８９６において、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、変数ｎの値と、整数Ｄに１を加えた値（Ｄ＋１）とを比較する。
変数ｎの値が（Ｄ＋１）以下である場合、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、暗号総積元Ａ初期化工程Ｓ８８４に戻る。
変数ｎの値が（Ｄ＋１）より大きい場合、暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、比較元生成処理Ｓ８８０を終了する。
【０３５２】
これにより、暗号総積元Ａ初期化工程Ｓ８８４からｎ判定工程Ｓ８９６までの工程は、（Ｄ＋２）回繰り返される。変数ｎの繰り返し１回につき、暗号総積元Ａ算出部５５１は、１個の元ΠＡ’，ｎを算出する。暗号総積元Ａ算出部５５１は、全部で（Ｄ＋２）個の元ΠＡ’，ｎを算出する。変数ｎの繰り返し１回につき、暗号総積元Ｂ算出部５５３は、１個の元ΠＢ’，ｎを算出する。暗号総積元Ｂ算出部５５３は、全部で（Ｄ＋２）個の元ΠＢ’，ｎを算出する。
ペアリング元Ａ算出部５５２は、ペアリング元Ａ算出工程Ｓ８９２を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｅＡ，ｎを算出する。ペアリング元Ｂ算出部５５４は、ペアリング元Ｂ算出工程Ｓ８９３を（Ｄ＋２）回実行して、（Ｄ＋２）個の元ｅＢ，ｎを算出する。比較元算出部５５６は、比較元計算工程Ｓ８９４を（Ｄ＋２）回実行して、１個の元Ｒ’を算出する。
【０３５３】
公開パラメータ生成装置１００は、以下の式の右辺を計算することにより、公開パラメータ及びマスタ秘密鍵に含まれる元を算出する。
【数３６】
0005269209.tif 000027
【０３５４】
クエリ発行装置３００は、以下の式の右辺を計算することにより、クエリに含まれる元を算出する。
【数３７】
0005269209.tif 000028
【０３５５】
元ｋ’０の算出式は、以下のように変形できる。
【数３８】
0005269209.tif 000029
【０３５６】
元ｋ’ｎ，（ａ）の算出式は、以下のように変形できる。
【数３９】
0005269209.tif 000030
【０３５７】
元ｋ’ｎ，（ｂ）の算出式は、以下のように変形できる。
【数４０】
0005269209.tif 000031
【０３５８】
暗号化装置４００は、以下の式の右辺を計算することにより、暗号文に含まれる元を算出する。
【数４１】
0005269209.tif 000032
【０３５９】
元Ｅの算出式は、以下のように変形できる。
【数４２】
0005269209.tif 000033
【０３６０】
元ｃｎ，（ａ）の算出式は、以下のように変形できる。
【数４３】
0005269209.tif 000034
【０３６１】
元ｃｎ，（ｂ）の算出式は、以下のように変形できる。
【数４４】
0005269209.tif 000035
【０３６２】
元ｃｎ，ｊ，（ａ）の算出式は、以下のように変形できる。
【数４５】
0005269209.tif 000036
【０３６３】
元ｃｎ，ｊ，（ｂ）の算出式は、以下のように変形できる。
【数４６】
0005269209.tif 000037
【０３６４】
検索装置５００は、以下の式の右辺を計算することにより、元Ｒ’を算出する。
【数４７】
0005269209.tif 000038
【０３６５】
元ｅ０の算出式は、以下のように変形できる。
【数４８】
0005269209.tif 000039
【０３６６】
元ｅＡ，ｎの算出式は、以下のように変形できる。
【数４９】
0005269209.tif 000040
【０３６７】
元ｅＢ，ｎの算出式は、以下のように変形できる。
【数５０】
0005269209.tif 000041
【０３６８】
したがって、元Ｒ’の算出式は、以下のように変形できる。
【数５１】
0005269209.tif 000042
【０３６９】
この式において、０以上（Ｄ＋１）以下のすべてのｎについて、括弧内が乗法群Ｇ３の単位元１に等しければ、元Ｒ’は元Ｒと一致する。
括弧内は、乗法群Ｇ３の元である３個の元の積の形をしている。３個の元のうち一番目の元は、１以上Ｌ以下の整数のうち、集合Ａに含まれないすべての整数ｉについての生成元ｇ３の「θｎ，ｉ・Ｉｉ」乗の総積である。３個の元のうち二番目の元は、集合Ａ’に含まれるすべての整数ｊについての生成元ｇ３の「−θｎ，ｊ・Ｉ’ｊ」乗の総積である。３個の元のうち３番目の元は、生成元ｇ３の「θｎ，Ｌ＋１・Ｗ−θｎ，Ｌ’＋１・Ｗ’」乗である。
【０３７０】
二番目の元は、１以上Ｌ以下の整数のうち集合Ａに含まれない整数からなる集合が集合Ａ’に等しく、かつ、集合Ａ’に含まれるすべての整数ｊについて、整数Ｉｊと整数Ｉ’ｊとが等しい場合、一番目の元の逆元となる。
三番目の元は、整数θｎ，Ｌ＋１と整数θｎ，Ｌ’＋１とが等しく、かつ、整数Ｗと整数Ｗ’とが等しい場合、乗法群Ｇ３の単位元１になる。
また、整数Ｌと整数Ｌ’とが等しければ、１以上Ｌ以下の整数のうち集合Ａに含まれない整数からなる集合は集合Ａ’に等しく、整数θｎ，Ｌ＋１は整数θｎ，Ｌ’＋１に等しい。
【０３７１】
整数Ｗと整数Ｗ’とが等しいことは、クエリに埋め込まれた検索キーワードと、暗号文に埋め込まれたキーワードとが一致することを意味する。
整数Ｌと整数Ｌ’とが等しいことは、クエリ発行装置３００の階層が、指定された階層であることを意味する。集合Ａ’に含まれるすべての整数ｊについて、整数Ｉｊと整数Ｉ’ｊとが等しいことは、クエリ発行装置３００のユーザＩＤのうち、指定された部分が、指定されたユーザＩＤと一致することを意味する。
【０３７２】
すなわち、クエリ発行装置３００に検索権限があり、かつ、検索キーワードと、暗号文に埋め込まれたキーワードとが一致する場合、元Ｒ’は元Ｒと一致する。
【０３７３】
それ以外にも、元Ｒ’が元Ｒと偶然一致する可能性はあるが、その確率はｐ分の１であるから、素数ｐが十分大きければ無視できる。
【０３７４】
したがって、検索装置５００は、クエリ発行装置３００に検索権限があり、かつ、検索キーワードと、暗号文に埋め込まれたキーワードとが一致する場合のみ、検索にヒットしたと判定する。
【０３７５】
また、詳しい証明は省略するが、双線形ディフィー−ヘルマン判定問題（Ｄｅｃｉｓｉｏｎａｌ    Ｂｉｌｉｎｅａｒ  Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ  Ｐｒｏｂｌｅｍ）と決定性線形判定問題（Ｄｅｃｉｓｉｏｎａｌ  Ｌｉｎｅａｒ  Ｐｒｏｂｌｅｍ）とを解くことが計算量的に困難であるという仮定のもと、暗号文からキーワードの情報が漏洩しないことが理論的に証明できる。すなわち、秘匿検索システム８００は、解読攻撃に対する耐性があり、安全である。
【０３７６】
この実施の形態における秘匿検索システム８００は、キーワードを暗号化し、Ｄ個（Ｄは１以上の整数。）未満の整数Ｉｉ（ｉは１以上Ｌ以下の整数。ＬはＤ未満の任意の整数。Ｉｉは０以上ｐ未満の整数。ｐは素数。）をユーザ識別子（ユーザＩＤ）として持つ複数のクエリ発行装置３００のうち少なくともいずれかのクエリ発行装置３００からの要求に基づいて、暗号化したままのキーワードを検索する。
この実施の形態における秘匿検索システム８００によれば、ユーザ識別子の一部のみを指定した暗号文を生成し、その暗号文を検索できるクエリを、指定された部分が一致する複数のユーザが生成できるので、暗号文のサイズが小さくなり、新たなユーザが追加された場合でも、新たな暗号文を生成する必要がない。
【０３７７】
この実施の形態における公開パラメータ生成装置１００は、データを処理する処理装置（ＣＰＵ９１１）と、乱数オメガ選択部１２１と、乱数アルファ選択部１２２と、乱数ベータ選択部１２３と、乱数シータ選択部１２４と、公開元オメガ算出部１３１と、公開元エー算出部１３２と、公開元ビー算出部１３３と、秘密元ダブリュー算出部１４１と、秘密元エー算出部１４２と、秘密元ビー算出部１４３と、秘密元ワイ算出部１４４と、公開パラメータ出力部１５１と、マスタ秘密鍵出力部１５２とを有する。
上記乱数オメガ選択部１２１は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、１個の整数ωをランダムに選択する。
上記乱数アルファ選択部１２２は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数αｎ（ｎは０以上Ｄ＋１以下の整数。）をランダムに選択する。
上記乱数ベータ選択部１２３は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数βｎをランダムに選択する。
上記乱数シータ選択部１２４は、上記処理装置を用いて、１以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌ（ｌは０以上Ｄ以下の整数。）をランダムに選択する。
上記公開元エー算出部１３２は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ１の生成元ｇ１と、上記乱数アルファ選択部１２２が選択した（Ｄ＋２）個の整数αｎと、上記乱数シータ選択部１２４が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（αｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを算出する。
上記公開元ビー算出部１３３は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数ベータ選択部１２３が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部１２４が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ１の（βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを算出する。
上記秘密元ダブリュー算出部１４１は、上記処理装置を用いて、位数が上記素数ｐである乗法群Ｇ２の生成元ｇ２と、上記乱数オメガ選択部１２１が選択した１個の整数ωとに基づいて、上記生成元ｇ２のω乗を計算することにより、上記乗法群Ｇ２の元である１個の元ｗ’を算出する。
上記公開元オメガ算出部１３１は、上記処理装置を用いて、上記乗法群Ｇ１の元と上記乗法群Ｇ２の元との組を位数がｐである乗法群Ｇ３の元へ写像する双線形ペアリングｅにより上記乗法群Ｇ１の生成元ｇ１と上記乗法群Ｇ２の生成元ｇ２との組を写像した上記乗法群Ｇ３の元ｇ３と、上記乱数オメガ選択部１２１が選択した１個の整数ωとに基づいて、上記元ｇ３のω乗を計算することにより、上記乗法群Ｇ３の元である１個の元Ωを算出する。
上記秘密元エー算出部１４２は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部１２２が選択した（Ｄ＋２）個の整数αｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のαｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ａ’ｎを算出する。
上記秘密元ビー算出部１４３は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数ベータ選択部１２３が選択した（Ｄ＋２）個の整数βｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記生成元ｇ２のβｎ乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｂ’ｎを算出する。
上記秘密元ワイ算出部１４４は、上記処理装置を用いて、上記乗法群Ｇ２の生成元ｇ２と、上記乱数アルファ選択部１２２が選択した（Ｄ＋２）個の整数αｎと、上記乱数ベータ選択部１２３が選択した（Ｄ＋２）個の整数βｎと、上記乱数シータ選択部１２４が選択した（Ｄ＋２）×（Ｄ＋１）個の整数θｎ，ｌとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上Ｄ以下の（Ｄ＋１）個の整数ｌとの組である（Ｄ＋２）×（Ｄ＋１）個の組（ｎ，ｌ）それぞれについて、上記生成元ｇ２の（αｎ×βｎ×θｎ，ｌ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを算出する。
上記公開パラメータ出力部１５１は、上記処理装置を用いて、上記秘匿検索システム８００における公開パラメータとして、上記公開元オメガ算出部１３１が算出した１個の元Ωと、上記公開元エー算出部１３２が算出した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌと、上記公開元ビー算出部１３３が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌとを出力する。
上記マスタ秘密鍵出力部１５２は、上記処理装置を用いて、上記秘匿検索システム８００におけるマスタ秘密鍵として、上記秘密元ダブリュー算出部１４１が算出した１個の元ｗ’と、上記秘密元エー算出部１４２が算出した（Ｄ＋２）個の元ａ’ｎと、上記秘密元ビー算出部１４３が算出した（Ｄ＋２）個の元ｂ’ｎと、上記秘密元ワイ算出部１４４が算出した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを出力する。
【０３７８】
この実施の形態における公開パラメータ生成装置１００によれば、暗号文のサイズが小さくなり、新たなユーザが追加された場合でも、新たな暗号文を生成する必要がない秘匿検索システムを実現できる。
【０３７９】
この実施の形態における暗号化装置４００は、データを記憶する記憶装置（磁気ディスク装置９２０）と、データを処理する処理装置（ＣＰＵ９１１）と、公開元オメガ記憶部４２２と、公開元エー記憶部４２３と、公開元ビー記憶部４２４と、埋込みキーワード入力部４１３と、権限範囲入力部４１２と、乱数アール選択部４５１と、副乱数アール選択部４５２と、乱数元選択部４５３と、検証元算出部４５７と、暗号元算出部４５６と、暗号元エー算出部４６３と、暗号元ビー算出部４６４と、暗号部分元エー算出部４６５と、暗号部分元ビー算出部４６６と、暗号文出力部４１４とを有する。
上記公開元オメガ記憶部４２２は、上記記憶装置を用いて、上記公開パラメータ生成装置１００が公開パラメータとして出力した１個の元Ωを記憶する。
上記公開元エー記憶部４２３は、上記記憶装置を用いて、上記公開パラメータ生成装置１００が公開パラメータとして出力した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌを記憶する。
上記公開元ビー記憶部４２４は、上記記憶装置を用いて、上記公開パラメータ生成装置１００が公開パラメータとして出力した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌを記憶する。
上記埋込みキーワード入力部４１３は、上記処理装置を用いて、暗号化するキーワードとして、０以上ｐ未満の１個の整数Ｗ’を入力する。
上記権限範囲入力部４１２は、上記処理装置を用いて、キーワードを検索する権限を持つクエリ発行装置３００の範囲を指定するデータとして、１個の整数Ｌ’（Ｌ’は１以上Ｄ未満の任意の整数。）と、Ｌ”個の整数Ｉ’ｊ（Ｌ”は０以上Ｌ’以下の任意の整数。ｊは１以上Ｌ’以下の整数のなかから任意に選択したＬ”個の整数。Ｉ’ｊは０以上ｐ未満の整数。）とを入力する。
上記乱数アール選択部４５１は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、１個の整数ｒをランダムに選択する。
上記副乱数アール選択部４５２は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ｒｎをランダムに選択する。
上記乱数元選択部４５３は、上記処理装置を用いて、上記乗法群Ｇ３の元のなかから、１個の元Ｒをランダムに選択する。
上記検証元算出部４５７は、上記処理装置を用いて、上記公開元オメガ記憶部４２２が記憶した１個の元Ωと、上記乱数アール選択部４５１が選択した１個の整数ｒと、上記乱数元選択部４５３が選択した１個の元Ｒとに基づいて、上記元Ωの（−ｒ）乗と、上記元Ｒとの積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｅを算出する。
上記暗号元算出部４５６は、上記処理装置を用いて、上記乗法群Ｇ１の生成元ｇ１と、上記乱数アール選択部４５１が選択した整数ｒとに基づいて、上記生成元ｇ１のｒ乗を計算することにより、上記乗法群Ｇ１の元である１個の元ｃ０を算出する。
上記暗号元エー算出部４６３は、上記処理装置を用いて、上記権限範囲入力部４１２が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元ビー記憶部４２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）個の元ｂｎ，０と（Ｄ＋２）×Ｌ”個の元ｂｎ，ｊと（Ｄ＋２）個の元ｂｎ，Λ’（Λ’はＬ’超Ｄ以下の整数のうちから選択した１個の整数。）と、上記埋込みキーワード入力部４１３が入力した１個の整数Ｗ’と、上記副乱数アール選択部４５２が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ｂｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂｎ，０とＬ”個の元ｂｎ，ｊのＩ’ｊ乗と元ｂｎ，Λ’のＷ’乗との総積ΠＢ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＢ，ｎのｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ａ）を算出する。
上記暗号元ビー算出部４６４は、上記処理装置を用いて、上記権限範囲入力部４１２が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊと、上記公開元エー記憶部４２３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）個の元ａｎ，０と（Ｄ＋２）×Ｌ”個の元ａｎ，ｊと（Ｄ＋２）個の元ａｎ，Λ’と、上記埋込みキーワード入力部４１３が入力した１個の整数Ｗ’と、上記乱数アール選択部４５１が選択した１個の整数ｒと、上記副乱数アール選択部４５２が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記Ｌ”個の整数Ｉ’ｊの添え字ｊとの組である（Ｄ＋２）×Ｌ”個の組（ｎ，ｊ）それぞれについて、上記元ａｎ，ｊのＩ’ｊ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，Λ’のＷ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａｎ，０とＬ”個の元ａｎ，ｊのＩ’ｊ乗と元ａｎ，Λ’のＷ’乗との総積ΠＡ，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、計算した総積ΠＡ，ｎの（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）個の元ｃｎ，（ｂ）を算出する。
上記暗号部分元エー算出部４６５は、上記処理装置を用いて、上記権限範囲入力部４１２が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元ビー記憶部４２４が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｂｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｂｎ，ｊ’（ｊ’は１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数。）と、上記副乱数アール選択部４５２が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ｂｎ，ｊ’のｒｎ乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）を算出する。
上記暗号部分元ビー算出部４６６は、上記処理装置を用いて、上記権限範囲入力部４１２が入力した１個の整数Ｌ’とＬ”個の整数Ｉ’ｊの添え字ｊと、上記公開元エー記憶部４２３が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ａｎ，ｌのうち（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ａｎ，ｊ’と、上記乱数アール選択部４５１が選択した１個の整数ｒと、上記副乱数アール選択部４５２が選択した（Ｄ＋２）個の整数ｒｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ’以下の整数のうち上記Ｌ”個の添え字ｊ以外の（Ｌ’−Ｌ”）個の整数ｊ’との組である（Ｄ＋２）×（Ｌ’−Ｌ”）個の組（ｎ，ｊ’）それぞれについて、上記元ａｎ，ｊ’の（ｒ−ｒｎ）乗を計算することにより、上記乗法群Ｇ１の元である（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）を算出する。
上記暗号文出力部４１４は、上記処理装置を用いて、上記整数Ｗ’をキーワードとして埋め込んだ暗号文として、上記乱数元選択部４５３が選択した１個の元Ｒと、上記検証元算出部４５７が算出した１個の元Ｅと、上記暗号元算出部４５６が算出した１個の元ｃ０と、上記暗号元エー算出部４６３が算出した（Ｄ＋２）個の元ｃｎ，（ａ）と、上記暗号元ビー算出部４６４が算出した（Ｄ＋２）個の元ｃｎ，（ｂ）と、上記暗号部分元エー算出部４６５が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記暗号部分元ビー算出部４６６が算出した（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）とを出力する。
【０３８０】
この実施の形態における暗号化装置４００によれば、暗号文のサイズが小さくなり、新たなユーザが追加された場合でも、新たな暗号文を生成する必要がない秘匿検索システムを実現できる。
【０３８１】
なお、この例において、整数Λ’は、整数Ｌ’に１を加えた値（Ｌ’＋１）であるが、整数Λ’は他の値であってもよい。例えば、整数Λ’は、整数Ｄに等しい値など、整数Ｌ’の値にかかわらず、一定の値であってもよい。
【０３８２】
この実施の形態におけるユーザ秘密鍵生成装置２００は、データを記憶する記憶装置（磁気ディスク装置９２０）と、データを処理する処理装置（ＣＰＵ９１１）と、秘密元ダブリュー記憶部２１２と、秘密元エー記憶部２１３と、秘密元ビー記憶部２１４と、秘密元ワイ記憶部２１５と、ユーザ識別子入力部２２１と、乱数ロー選択部２３１と、副乱数ロー選択部２３２と、総積元ワイ算出部２３３と、検索元算出部２４１と、検索元エー算出部２４２と、検索元ビー算出部２４３と、攪乱元算出部２５１と、攪乱元エー算出部２５２と、攪乱元ビー算出部２５３と、委任元算出部２６１と、副委任元算出部２６２と、ユーザ秘密鍵出力部２２３とを有する。
上記秘密元ダブリュー記憶部２１２は、上記記憶装置を用いて、上記公開パラメータ生成装置１００がマスタ秘密鍵として出力した１個の元ｗ’を記憶する。
上記秘密元エー記憶部２１３は、上記記憶装置を用いて、上記公開パラメータ生成装置１００がマスタ秘密鍵として出力した（Ｄ＋２）個の元ａ’ｎを記憶する。
上記秘密元ビー記憶部２１４は、上記記憶装置を用いて、上記公開パラメータ生成装置１００がマスタ秘密鍵として出力した（Ｄ＋２）個の元ｂ’ｎを記憶する。
上記秘密元ワイ記憶部２１５は、上記記憶装置を用いて、上記公開パラメータ生成装置１００がマスタ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌを記憶する。
上記ユーザ識別子入力部２２１は、上記処理装置を用いて、上記複数のクエリ発行装置３００のうちユーザ秘密鍵の生成を要求するクエリ発行装置３００について、上記クエリ発行装置３００のユーザ識別子（ユーザＩＤ）として、Ｌ個の整数Ｉｉを入力する。
上記乱数ロー選択部２３１は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数ρｎをランダムに選択する。
上記副乱数ロー選択部２３２は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍ（ｍは０以上Ｄ＋１以下の整数。）をランダムに選択する。
上記総積元ワイ算出部２３３は、上記処理装置を用いて、上記ユーザ識別子入力部２２１が入力したＬ個の整数Ｉｉと、上記秘密元ワイ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，０と（Ｄ＋２）×Ｌ個の元ｙ’ｎ，ｉとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと１以上Ｌ以下のＬ）個の整数ｉとの組である（Ｄ＋２）×Ｌ個の組（ｎ，ｉ）それぞれについて、上記元ｙ’ｎ，ｉのＩｉ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，０と、Ｌ個の元ｙ’ｎ，ｉのＩｉ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ΠＹ，ｎを算出する。
上記検索元算出部２４１は、上記処理装置を用いて、上記秘密元ダブリュー記憶部２１２が記憶した１個の元ｗ’と、上記乱数ロー選択部２３１が選択した（Ｄ＋２）個の整数ρｎと、上記総積元ワイ算出部２３３が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ΠＹ，ｎのρｎ乗を計算し、上記元ｗ’と、（Ｄ＋２）個の元ΠＹ，ｎのρｎ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ０を算出する。
上記検索元エー算出部２４２は、上記処理装置を用いて、上記秘密元エー記憶部２１３が記憶した（Ｄ＋２）個の元ａ’ｎと、上記乱数ロー選択部２３１が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ａ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ａ）を算出する。
上記検索元ビー算出部２４３は、上記処理装置を用いて、上記秘密元ビー記憶部２１４が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記乱数ロー選択部２３１が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｂ’ｎの（−ρｎ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋｎ，（ｂ）を算出する。
上記攪乱元算出部２５１は、上記処理装置を用いて、上記副乱数ロー選択部２３２が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍと、上記総積元ワイ算出部２３３が算出した（Ｄ＋２）個の元ΠＹ，ｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ΠＹ，ｎのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ΠＹ，ｎのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆｍ，０を算出する。
上記攪乱元エー算出部２５２は、上記処理装置を用いて、上記秘密元エー記憶部２１３が記憶した（Ｄ＋２）個の元ａ’ｎと、上記副乱数ロー選択部２３２が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ａ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を算出する。
上記攪乱元ビー算出部２５３は、上記処理装置を用いて、上記秘密元ビー記憶部２１４が記憶した（Ｄ＋２）個の元ｂ’ｎと、上記副乱数ロー選択部２３２が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｂ’ｎの（−ρｎ，ｍ）乗を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を算出する。
上記委任元算出部２６１は、上記処理装置を用いて、上記秘密元ワイ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λ（ΛはＬ超Ｄ以下の整数のなかから選択した１個の整数。）と、上記乱数ロー選択部２３１が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｙ’ｎ，Λのρｎ乗を計算し、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｈΛを算出する。
上記副委任元算出部２６２は、上記処理装置を用いて、上記秘密元ワイ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）個の元ｙ’ｎ，Λと、上記副乱数ロー選択部２３２が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｙ’ｎ，Λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，Λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｈｍ，Λを算出する。
上記ユーザ秘密鍵出力部２２３は、上記処理装置を用いて、上記クエリ発行装置３００のユーザ秘密鍵として、上記検索元算出部２４１が算出した１個の元ｋ０と、上記検索元エー算出部２４２が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部２４３が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部２５１が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部２５２が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部２５３が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部２６１が算出した１個の元ｈΛと、上記副委任元算出部２６２が算出した（Ｄ＋２）個の元ｈｍ，Λとの組を出力する。
【０３８３】
この実施の形態におけるユーザ秘密鍵生成装置２００によれば、暗号文のサイズが小さくなり、新たなユーザが追加された場合でも、新たな暗号文を生成する必要がない秘匿検索システムを実現できる。
【０３８４】
なお、この例において、整数Λは、整数Ｌに１を加えた値（Ｌ＋１）であるが、暗号化装置４００における整数Λ’と対応する値であれば、他の値であってもよい。
例えば、暗号化装置４００における整数Λ’が整数Ｄと等しい値である場合、整数Λも整数Ｄと等しい値とする。このように、整数Λ’及び整数Λを、整数Ｌ’及び整数Ｌにかかわらず一定の値とすることにより、暗号文を検索する権限を与えるクエリ発行装置３００を、１階層のクエリ発行装置３００のみに限るのではなく、ユーザＩＤのうち指定された部分が一致する上位階層のクエリ発行装置３００にも、暗号文を検索する権限を与えることができる。
【０３８５】
この実施の形態におけるクエリ発行装置３００は、データを記憶する記憶装置（磁気ディスク装置９２０）と、データを処理する処理装置（ＣＰＵ９１１）と、ユーザ識別子記憶部３１１と、検索元記憶部３２１と、検索元エー記憶部３２２と、検索元ビー記憶部３２３と、攪乱元記憶部３２４と、攪乱元エー記憶部３２５と、攪乱元ビー記憶部３２６と、委任元記憶部３２７と、副委任元記憶部３２８と、検索キーワード入力部３４１と、乱数パイ選択部３３１と、質問元算出部３５１と、質問元エー算出部３３４と、質問元ビー算出部３３５と、クエリ出力部３４３とを有する。
上記ユーザ識別子記憶部３１１は、上記記憶装置を用いて、上記クエリ発行装置３００のユーザ識別子（ユーザＩＤ）として、Ｌ個の整数Ｉｉを記憶する。
上記検索元記憶部３２１は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した１個の元ｋ０を記憶する。
上記検索元エー記憶部３２２は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｋｎ，（ａ）（ｎは０以上Ｄ＋１以下の整数。）を記憶する。
上記検索元ビー記憶部３２３は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｋｎ，（ｂ）を記憶する。
上記攪乱元記憶部３２４は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｆｍ，０（ｍは０以上Ｄ＋１以下の整数。）を記憶する。
上記攪乱元エー記憶部３２５は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）を記憶する。
上記攪乱元ビー記憶部３２６は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）を記憶する。
上記委任元記憶部３２７は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した１個の元ｈΛを記憶する。
上記副委任元記憶部３２８は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置のユーザ秘密鍵として出力した（Ｄ＋２）個の元ｈｍ，Λを記憶する。
上記検索キーワード入力部３４１は、上記処理装置を用いて、検索するキーワードとして、０以上ｐ未満の１個の整数Ｗを入力する。
上記乱数パイ選択部３３１は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）個の整数πｍをランダムに選択する。
上記質問元算出部３５１は、上記処理装置を用いて、上記検索元記憶部３２１が記憶した１個の元ｋ０と、上記攪乱元記憶部３２４が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部３２７が記憶した１個の元ｈΛと、上記副委任元記憶部３２８が記憶した（Ｄ＋２）個の元ｈｍ，Λと、上記検索キーワード入力部が入力した１個の整数Ｗと、上記乱数パイ選択部３３１が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Λのπｍ乗を計算し、上記元ｈΛと、（Ｄ＋２）個の元ｈｍ，Λのπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＷ乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＷ乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ’０を算出する。
上記質問元エー算出部３３４は、上記処理装置を用いて、上記検索元エー記憶部３２２が記憶した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記攪乱元エー記憶部３２５が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記乱数パイ選択部３３１が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ａ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ａ）を算出する。
上記質問元ビー算出部３３５は、上記処理装置を用いて、上記検索元ビー記憶部３２３が記憶した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元ビー記憶部３２６が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記乱数パイ選択部３３１が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとの組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｋｎ，（ｂ）と、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｋ’ｎ，（ｂ）を算出する。
上記クエリ出力部３４３は、上記処理装置を用いて、上記ユーザ識別子記憶部３１１が記憶したＬ個の整数Ｉｉと、上記質問元算出部３５１が算出した１個の元ｋ’０と、上記質問元エー算出部３３４が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部３３５が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を、上記整数Ｗをキーワードとして検索するためのクエリとして出力する。
【０３８６】
この実施の形態におけるクエリ発行装置３００によれば、暗号文のサイズが小さくなり、新たなユーザが追加された場合でも、新たな暗号文を生成する必要がない秘匿検索システムを実現できる。
【０３８７】
この実施の形態における検索装置５００は、データを記憶する記憶装置（磁気ディスク装置９２０）と、データを処理する処理装置（ＣＰＵ９１１）と、暗号文記憶部５３０と、クエリ入力部５２１と、ペアリング元算出部５５５と、ペアリング元エー算出部５５２と、ペアリング元ビー算出部５５４と、比較元算出部５５６と、比較部５５７とを有する。
上記暗号文記憶部５３０は、上記記憶装置を用いて、キーワードが埋め込まれた暗号文として、上記暗号化装置４００が出力した暗号文に含まれる１個の元Ｒと１個の元Ｅと１個の元ｃ０と（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）との組を記憶する。
上記クエリ入力部５２１は、上記処理装置を用いて、キーワードを検索するクエリとして、上記クエリ発行装置３００が出力したＬ個の整数Ｉｉと１個の元ｋ’０と（Ｄ＋２）個の元ｋ’ｎ，（ａ）と（Ｄ＋２）個の元ｋ’ｎ，（ｂ）との組を入力する。
上記ペアリング元算出部５５５は、上記処理装置を用いて、上記暗号文記憶部５３０が記憶した暗号文に含まれる１個の元ｃ０と、上記クエリ入力部５２１が入力したクエリに含まれる１個の元ｋ’０とに基づいて、上記双線形ペアリングｅにより上記元ｃ０と上記元ｋ’０との組を写像することにより、上記乗法群Ｇ３の元である１個の元ｅ０を算出する。
上記ペアリング元エー算出部５５２は、上記処理装置を用いて、上記暗号文記憶部５３０が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ａ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）と、上記クエリ入力部５２１が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ａ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ａ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ａ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ａ）とＬＡ個の元ｃｎ，ｉ’，（ａ）のＩｉ’乗との総積ΠＡ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＡ’，ｎと上記元ｋ’ｎ，（ａ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＡ，ｎを算出する。
上記ペアリング元ビー算出部５５４は、上記処理装置を用いて、上記暗号文記憶部５３０が記憶した暗号文に含まれる（Ｄ＋２）個の元ｃｎ，（ｂ）と（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）と、上記クエリ入力部５２１が入力したクエリに含まれるＬ個の整数Ｉｉと（Ｄ＋２）個の元ｋ’ｎ，（ｂ）とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと上記（Ｄ＋２）×（Ｌ’−Ｌ”）個の元ｃｎ，ｊ’，（ｂ）の添え字である（Ｌ’−Ｌ”）個の整数ｊ’のうち１以上Ｌ以下であるＬＡ個の整数ｉ’との組である（Ｄ＋２）×ＬＡ個の組（ｎ，ｉ’）それぞれについて、元ｃｎ，ｉ’，（ｂ）のＩｉ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記元ｃｎ，（ｂ）とＬＡ個の元ｃｎ，ｉ’，（ｂ）のＩｉ’乗との総積ΠＢ’，ｎを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎそれぞれについて、上記双線形ペアリングｅにより上記総積ΠＢ’，ｎと上記元ｋ’ｎ，（ｂ）との組を写像することにより、上記乗法群Ｇ３の元である（Ｄ＋２）個の元ｅＢ，ｎを算出する。
上記比較元算出部５５６は、上記処理装置を用いて、上記暗号文記憶部５３０が記憶した暗号文に含まれる１個の元Ｅと、上記ペアリング元算出部５５５が算出した１個の元ｅ０と、上記ペアリング元エー算出部５５２が算出した（Ｄ＋２）個の元ｅＡ，ｎと、上記ペアリング元ビー算出部５５４が算出した（Ｄ＋２）個の元ｅＢ，ｎとに基づいて、上記元Ｅと、上記元ｅ０と、（Ｄ＋２）個の元ｅＡ，ｎと、（Ｄ＋２）個の元ｅＢ，ｎとの総積を計算することにより、上記乗法群Ｇ３の元である１個の元Ｒ’を算出する。
上記比較部５５７は、上記処理装置を用いて、上記暗号文記憶部５３０が記憶した暗号文に含まれる１個の元Ｒと、上記比較元算出部５５６が算出した１個の元Ｒ’とを比較して、元Ｒと元Ｒ’とが一致する場合に、検索にヒットしたと判定する。
【０３８８】
この実施の形態における検索装置５００によれば、暗号文のサイズが小さくなり、新たなユーザが追加された場合でも、新たな暗号文を生成する必要がない秘匿検索システムを実現できる。
【０３８９】
この実施の形態における秘匿検索システム８００は、クエリ発行装置３００に子クエリ発行装置など下位のクエリ発行装置のユーザ秘密鍵を生成する権限を与えることができる。
【０３９０】
上記ユーザ秘密鍵生成装置２００の委任元算出部２６１は、上記処理装置を用いて、上記秘密元ワイ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）×（Ｄ’−Ｌ）個（Ｄ’はＬ超Ｄ以下の整数。）の元ｙ’ｎ，λ（λはＬ超Ｄ’以下の整数。）と、上記乱数ロー選択部２３１が選択した（Ｄ＋２）個の整数ρｎとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｎ，λ）それぞれについて、上記元ｙ’ｎ，λのρｎ乗を計算し、Ｌ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λそれぞれについて、（Ｄ＋２）個の元ｙ’ｎ，λのρｎ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ’−Ｌ）個の元ｈλを算出する。
上記副委任元算出部２６２は、上記処理装置を用いて、上記秘密元ワイ記憶部２１５が記憶した（Ｄ＋２）×（Ｄ＋１）個の元ｙ’ｎ，ｌのうち、（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｙ’ｎ，λと、上記副乱数ロー選択部２３２が選択した（Ｄ＋２）×（Ｄ＋２）個の整数ρｎ，ｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｎ，ｍ，λ）それぞれについて、上記元ｙ’ｎ，λのρｎ，ｍ乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍとＬ超Ｄ’以下の（Ｄ’−Ｌ）個の整数λとの組である（Ｄ＋２）×（Ｄ’−Ｌ）個の組（ｍ，λ）それぞれについて、（Ｄ＋２）個の元ｙ’ｎ，λのρｎ，ｍ乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを算出する。
上記ユーザ秘密鍵出力部２２３は、上記処理装置を用いて、上記クエリ発行装置３００のユーザ秘密鍵として、上記検索元算出部２４１が算出した１個の元ｋ０と、上記検索元エー算出部２４２が算出した（Ｄ＋２）個の元ｋｎ，（ａ）と、上記検索元ビー算出部２４３が算出した（Ｄ＋２）個の元ｋｎ，（ｂ）と、上記攪乱元算出部２５１が算出した（Ｄ＋２）個の元ｆｍ，０と、上記攪乱元エー算出部２５２が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記攪乱元ビー算出部２５３が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記委任元算出部２６１が算出した（Ｄ’−Ｌ）個の元ｈλと、上記副委任元算出部２６２が算出した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λとの組を出力する。
【０３９１】
この実施の形態におけるユーザ秘密鍵生成装置２００によれば、クエリ発行装置３００に子クエリ発行装置など下位のクエリ発行装置のユーザ秘密鍵を生成する権限を与えることができる秘匿検索システムを実現できる。
【０３９２】
上記クエリ発行装置３００は、更に、子ユーザ識別子入力部３６１と、副乱数パイ選択部３７１と、子検索元算出部３７２と、子攪乱元算出部３７５と、子攪乱元エー算出部３７６と、子攪乱元ビー算出部３７７と、子委任元算出部３７８と、子副委任元算出部３７９と、子ユーザ秘密鍵出力部３６３とを有する。
上記委任元記憶部３２７は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した（Ｄ’−Ｌ）個の元ｈλを記憶する。
上記副委任元記憶部３２８は、上記記憶装置を用いて、上記ユーザ秘密鍵生成装置２００が上記クエリ発行装置３００のユーザ秘密鍵として出力した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λを記憶する。
上記子ユーザ識別子入力部３６１は、上記処理装置を用いて、０以上ｐ未満の１個の整数ＩＬ＋１を入力する。
上記副乱数パイ選択部３７１は、上記処理装置を用いて、０以上ｐ未満の整数のなかから、（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’（ｍ’は０以上Ｄ＋１以下の整数。）をランダムに選択する。
上記子検索元算出部３７２は、上記処理装置を用いて、上記検索元記憶部３２１が記憶した１個の元ｋ０と、上記攪乱元記憶部３２４が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記委任元記憶部３２７が記憶した（Ｄ’−Ｌ）個の元ｈλのうち１個の元ｈＬ＋１と、上記副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）個の元ｈｍ，Ｌ＋１と、上記乱数パイ選択部３３１が選択した（Ｄ＋２）個の整数πｍと、上記子ユーザ識別子入力部３６１が入力した整数ＩＬ＋１とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｈｍ，Λのπｍ乗を計算し、上記元ｈΛと、（Ｄ＋２）個の元ｈｍ，Λのπｍ乗との総積ΠＨを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍそれぞれについて、上記元ｆｍ，０のπｍ乗を計算し、上記総積ΠＨのＩＬ＋１乗を計算し、上記元ｋ０と（Ｄ＋２）個の元ｆｍ，０のπｍ乗と総積ΠＨのＩＬ＋１乗との総積を計算することにより、上記乗法群Ｇ２の元である１個の元ｋ”０を算出する。
上記子攪乱元算出部３７５は、上記処理装置を用いて、上記攪乱元記憶部３２４が記憶した（Ｄ＋２）個の元ｆｍ，０と、上記副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）個の元ｈｍ，Ｌ＋１と、上記副乱数パイ選択部３７１が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の組（ｍ，ｍ’）それぞれについて、上記元ｆｍ，０のπｍ，ｍ’乗と、上記元ｈｍ，Ｌ＋１のπｍ，ｍ’乗とを計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、（Ｄ＋２）個の元ｈｍ，Ｌ＋１のπｍ，ｍ’乗の総積ΠＨ，ｍ’を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、上記総積ΠＨ，ｍ’のＩＬ＋１乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’それぞれについて、（Ｄ＋２）個の元ｆｍ，０のπｍ，ｍ’乗と、上記総積ΠＨ，ｍ’のＩＬ＋１乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）個の元ｆ’ｍ’，０を算出する。
上記子攪乱元エー算出部３７６は、上記処理装置を用いて、上記攪乱元エー記憶部３２５が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）と、上記副乱数パイ選択部３７１が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ，ｍ’）それぞれについて、上記元ｆｍ，ｎ，（ａ）のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ’）それぞれについて、（Ｄ＋２）個の元ｆｍ，ｎ，（ａ）のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）を算出する。
上記子攪乱元ビー算出部３７７は、上記処理装置を用いて、上記攪乱元ビー記憶部３２６が記憶した（Ｄ＋２）×（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）と、上記副乱数パイ選択部３７１が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ，ｍ’）それぞれについて、上記元ｆｍ，ｎ，（ｂ）のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｎと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’との組である（Ｄ＋２）×（Ｄ＋２）個の組（ｎ，ｍ’）それぞれについて、（Ｄ＋２）個の元ｆｍ，ｎ，（ｂ）のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）を算出する。
上記子委任元算出部３７８は、上記処理装置を用いて、上記委任元記憶部３２７が記憶した（Ｄ’−Ｌ）個の元ｈλのうち（Ｄ”−Ｌ−１）個（Ｄ”は（Ｌ＋１）超Ｄ’以下の整数。）の元ｈλ’（λ’は（Ｌ＋１）超Ｄ”以下の整数。）と、上記副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’と、上記乱数パイ選択部３３１が選択した（Ｄ＋２）個の整数πｍとに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ，λ’）それぞれについて、上記元ｈｍ，λ’のπｍ乗を計算し、（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’それぞれについて、上記元ｈλ’と、（Ｄ＋２）個の元ｈｍ，λ’のπｍ乗との総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ”−Ｌ−１）個の元ｈ’λ’を算出する。
上記子副委任元算出部３７９は、上記処理装置を用いて、上記副委任元記憶部３２８が記憶した（Ｄ＋２）×（Ｄ’−Ｌ）個の元ｈｍ，λのうち（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈｍ，λ’と、上記副乱数パイ選択部３７１が選択した（Ｄ＋２）×（Ｄ＋２）個の整数πｍ，ｍ’とに基づいて、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍと０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’と（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ，ｍ’，λ’）それぞれについて、上記元ｈｍ，λ’のπｍ，ｍ’乗を計算し、０以上（Ｄ＋１）以下の（Ｄ＋２）個の整数ｍ’と（Ｌ＋１）超Ｄ”以下の（Ｄ”−Ｌ−１）個の整数λ’との組である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の組（ｍ’，λ’）それぞれについて、（Ｄ＋２）個の元ｈｍ，λ’のπｍ，ｍ’乗の総積を計算することにより、上記乗法群Ｇ２の元である（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’を算出する。
上記子ユーザ秘密鍵出力部３６３は、上記ユーザ識別子記憶部３１１が記憶したＬ個の整数Ｉｉと上記子ユーザ識別子入力部３６１が入力した１個の整数ＩＬ＋１とをユーザ識別子として持つ他のクエリ発行装置３００のユーザ秘密鍵として、上記子検索元算出部３７２が算出した１個の元ｋ”０と、上記質問元エー算出部３３４が算出した（Ｄ＋２）個の元ｋ’ｎ，（ａ）と、上記質問元ビー算出部３３５が算出した（Ｄ＋２）個の元ｋ’ｎ，（ｂ）と、上記子攪乱元算出部３７５が算出した（Ｄ＋２）個の元ｆ’ｍ’，０と、上記子攪乱元エー算出部３７６が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ａ）と、上記子攪乱元ビー算出部３７７が算出した（Ｄ＋２）×（Ｄ＋２）個の元ｆ’ｍ’，ｎ，（ｂ）と、上記子委任元算出部３７８が算出した（Ｄ”−Ｌ−１）個の元ｈ’λ’と、上記子副委任元算出部３７９が算出した（Ｄ＋２）×（Ｄ”−Ｌ−１）個の元ｈ’ｍ’，λ’との組を出力する。
【０３９３】
この実施の形態におけるクエリ発行装置３００によれば、子クエリ発行装置など下位のクエリ発行装置のユーザ秘密鍵を生成することができる。
【０３９４】
以上説明した秘匿検索システム８００（秘匿検索装置）は、ルートＰＫＧ（グループ公開鍵生成装置８１０）、クエリ発行装置３００、暗号化装置４００、データサーバ（検索装置５００）を有する。ルートＰＫＧは、公開パラメータ・マスタ秘密鍵生成を行う。クエリ発行装置３００は、クエリ発行を行う。暗号化装置４００は、暗号化を行う。データサーバは、データの保管と秘匿検索を行う。
【０３９５】
この実施の形態における秘匿検索システム８００は、複数グループが階層化されているようなシステムに適する。例えば、大企業や官公庁などのような一般の組織では、複数のグループが階層化されて存在している。例えば、「〜部」の下に複数の「〜課」があり、さらにその下に「〜係」がある、というように、階層化されている。
【０３９６】
複数グループはいわゆる木構造をなしている。グループ公開鍵生成装置８１０（ルートＰＫＧ）は、木の根に当たる部分にある。クエリ発行装置３００は、中間のノード（中間ＰＫＧ）や、木の葉にあたる部分（クエリ発行装置）にある。グループの数は例えば３個、階層構造の階層数は例えば２階層であるが、このようなグループ数および階層数に限定されるものではない。例えば、あるグループの下にさらに複数のグループが連なるような構成であってかまわない。また、クエリ発行装置３００は、必ずしも最下層にある必要はない。クエリ発行装置３００は、ルートＰＫＧの直下にあってもよいし、途中の中間ＰＫＧの直下にあってもよい。グループは、最大（Ｄ−１）階層積み重なるような木構造をなす。すなわち、ルートＰＫＧを１階層目、その直下の中間ＰＫＧを２階層目、その直下の中間ＰＫＧを３階層目とすると、最後の中間ＰＫＧがＤ−１階層目、その直下のクエリ発行装置３００がＤ階層目になる。ルートＰＫＧは階層数に入らないので、階層数は、最大（Ｄ−１）階層になる。
【０３９７】
クエリ発行装置３００や中間ＰＫＧのＩＤは、１個以上の整数の組である。例えばＬ階層目にいる中間ＰＫＧのＩＤは、Ｌ個の整数の組（Ｉ１，Ｉ２，…，ＩＬ−１，ＩＬ）∈ＺｐＬである。この中間ＰＫＧの親ノードにあたる中間ＰＫＧのＩＤは、（Ｌ−１）個の整数の組（Ｉ１，Ｉ２，…，ＩＬ−１）である。また、この中間ＰＫＧ（クエリ発行装置３００）の子ノードにあたるクエリ発行装置３００のＩＤは、例えば（Ｌ＋１）個の整数の組（Ｉ１，Ｉ２，…，ＩＬ−１，ＩＬ，ＩＬ＋１）である。
【０３９８】
ルートＰＫＧ（Ｐｕｂｌｉｃ  Ｋｅｙ  Ｇｅｎｅｒａｔｏｒ）は、公開パラメータＰＫおよびマスタ秘密鍵ＭＳＫを生成する。中間ＰＫＧおよびクエリ発行装置３００は、ルートＰＫＧから直接ユーザ秘密鍵の発行を受ける。中間ＰＫＧおよびクエリ発行装置３００は、自分より上位層の中間ＰＫＧからユーザ秘密鍵の発行を受けてもよい。例えば、ＩＤがＬ個の整数の組（Ｉ１，Ｉ２，…，ＩＬ−１，ＩＬ）であるクエリ発行装置３００は、ＩＤが（Ｌ−１）個の整数の組（Ｉ１，Ｉ２，…，ＩＬ−１）である中間ＰＫＧにユーザ秘密鍵発行要求を出し、ユーザ秘密鍵の発行を受ける。このようにして、中間ＰＫＧは、自分のＩＤを含み自分より下位層にいる中間ＰＫＧまたはクエリ発行装置３００に対してユーザ秘密鍵を発行する。ルートＰＫＧが発行するユーザ秘密鍵と、中間ＰＫＧが発行するユーザ秘密鍵とは、同等である。
【０３９９】
ルートＰＫＧは、例えば、公開パラメータ・マスタ秘密鍵生成部（公開パラメータ生成装置１００）、ユーザ秘密鍵生成部（ユーザ秘密鍵生成装置２００）、マスタ秘密鍵記憶部（秘密元ｗ記憶部２１２、秘密元ａ記憶部２１３、秘密元ｂ記憶部２１４、秘密元ｙ記憶部２１５）を有する。
【０４００】
中間ＰＫＧは、例えば、ユーザ秘密鍵生成要求発行部（ユーザ秘密鍵要求出力部３１２）、ユーザ秘密鍵記憶部３２０、下位ユーザ秘密鍵発行部（子ユーザ秘密鍵生成部３７０）を有する。
ユーザ秘密鍵生成要求発行部は、ルートＰＫＧや上位の中間ＰＫＧに対して、ユーザ秘密鍵を生成することの要求を発行する。ユーザ秘密鍵記憶部３２０は、ルートＰＫＧや中間ＰＫＧから発行されたユーザ秘密鍵を記憶する。下位ユーザ秘密鍵発行部は、中間ＰＫＧ自身のユーザ秘密鍵を用いて、自分より下位のユーザもしくは中間ＰＫＧに対してユーザ秘密鍵を発行する。
【０４０１】
ルートＰＫＧは、例えば以下のようにして、公開パラメータＰＫおよびマスタ秘密鍵ＭＳＫを生成する。
まず、公開パラメータ・マスタ秘密鍵生成部は、乗法群Ｇ１から生成元ｇ１を一様ランダムに選択する。公開パラメータ・マスタ秘密鍵生成部は、乗法群Ｇ２から生成元ｇ２を一様ランダムに選択する。次に、公開パラメータ・マスタ秘密鍵生成部は、ω、（αｎ，βｎ）ｎ∈［１＋Ｄ］をそれぞれ有限体Ｚｐの乗法群Ｚｐ＊から一様ランダムに選択する。次に、公開パラメータ・マスタ秘密鍵生成部は、（θｎ，ｌ）（ｎ，ｌ）∈［１＋Ｄ］×［Ｄ］をそれぞれ有限体Ｚｐから一様ランダムに選択する。次に、公開パラメータ・マスタ秘密鍵生成部は、Ω＝ｅ（ｇ１、ｇ２）＾ω、（ａｎ，ｌ＝ｇ１＾（αｎ・θｎ，ｌ），ｂｎ，ｌ＝ｇ１＾（βｎ・θｎ，ｌ））（ｎ，ｌ）∈［１＋Ｄ］×［Ｄ］を計算する。次に、公開パラメータ・マスタ秘密鍵生成部は、ｗ’＝ｇ２＾ω、（ａ’ｎ＝（ｇ２＾αｎ），ｂ’ｎ＝（ｇ２＾βｎ），（ｙ’ｎ，ｌ＝（ｇ２＾αｎ・βｎ・θｎ，ｌ））ｌ∈［Ｄ］）ｎ∈［１＋Ｄ］を計算する。次に、公開パラメータ・マスタ秘密鍵生成部は、３つの群Ｇ１、Ｇ２、Ｇ３、位数ｐ、ペアリングｅと、計算したΩ、（ａｎ，ｌ，ｂｎ，ｌ）（ｎ，ｌ）∈［１＋Ｄ］×［Ｄ］を公開パラメータＰＫとして公開する。最後に、公開パラメータ・マスタ秘密鍵生成部は、計算したｗ’、（ａ’ｎ，ｂ’ｎ、（ｙ’ｎ，ｌ）ｌ∈［Ｄ］）ｎ∈［１＋Ｄ］をマスタ秘密鍵ＭＳＫとしてマスタ秘密鍵記憶部に格納する。
【０４０２】
クエリ発行装置３００または中間ＰＫＧは、例えば以下のようにして、ルートＰＫＧまたは自分より上位層の中間ＰＫＧに対してユーザ秘密鍵生成要求を送信する。
まず、クエリ発行装置３００または中間ＰＫＧは、自身のＩＤであるＬ個の整数の組（Ｉ１，…，ＩＬ）∈ＺｐＬをユーザ秘密鍵生成要求として発行する。その後、クエリ発行装置３００または中間ＰＫＧは、ユーザ秘密鍵生成要求をルートＰＫＧまたは上位の中間ＰＫＧに対して送信する。
【０４０３】
ルートＰＫＧは、例えば以下のようにして、クエリ発行装置３００または中間ＰＫＧからユーザ秘密鍵生成要求を受け取り、ユーザ秘密鍵を生成し、クエリ発行装置３００または中間ＰＫＧに送信する。
まず、ルートＰＫＧは、（Ｌ＋１）階層目にあるクエリ発行装置３００または中間ＰＫＧから、ユーザ秘密鍵生成要求としてＩＤであるＬ個の整数の組（Ｉ１，…，ＩＬ）を受け取る。次に、ルートＰＫＧは、（ρｎ，（ρｎ，ｍ）ｍ∈［１＋Ｄ］）ｎ∈［１＋Ｄ］をそれぞれ有限体Ｚｐから一様ランダムに選択する。次に、ルートＰＫＧは、
【数５２】
0005269209.tif 000043
を計算し、ｄＩＤｔｅｓｔ＝（ｋ０，（ｋｎ，（ａ），ｋｎ，（ｂ））ｎ∈［１＋Ｄ］とする。次に、ルートＰＫＧは、
【数５３】
0005269209.tif 000044
を計算し、ｄＩＤｒｅｒａｎｄ＝（ｆｍ，０，（ｆｍ，ｎ，（ａ），ｆｍ，ｎ，（ｂ））ｎ∈［１＋Ｄ］）ｍ∈［１＋Ｄ］とする。次に、ルートＰＫＧは、
【数５４】
0005269209.tif 000045
を計算し、ｄＩＤｄｅｌｅｇ＝（ｈｌ，（ｈｍ，ｌ）ｍ∈［１＋Ｄ］）ｌ∈［１＋Ｌ，Ｄ］とする。最後に、ルートＰＫＧは、ｄＩＤ＝（ｄＩＤｔｅｓｔ，ｄＩＤｒｅｒａｎｄ，ｄＩＤｄｅｌｅｇ）をＩＤのユーザ秘密鍵として、クエリ発行装置３００または中間ＰＫＧに送信する。
【０４０４】
中間ＰＫＧは、例えば以下のようにして、クエリ発行装置３００または中間ＰＫＧからユーザ秘密鍵生成要求を受け取り、ユーザ秘密鍵を生成し、クエリ発行装置３００または中間ＰＫＧに送信する。
Ｌ階層目にある中間ＰＫＧのＩＤは、（Ｌ−１）個の整数の組（Ｉ１，…，ＩＬ−１）である。中間ＰＫＧ自身のユーザ秘密鍵は、ｄＩＤ｜Ｌ−１＝（ｄＩＤ｜Ｌ−１ｔｅｓｔ，ｄＩＤ｜Ｌ−１ｒｅｒａｎｄ，ｄＩＤ｜Ｌ−１ｄｅｌｅｇ）である。ここで、ｄＩＤ｜Ｌ−１ｔｅｓｔ＝（ｋ０，（ｋｎ，（ａ），ｋｎ，（ｂ））ｎ∈［１＋Ｄ］）、ｄＩＤ｜Ｌ−１ｒｅｒａｎｄ＝（ｆｍ，０，（ｆｍ，ｎ，（ａ），ｆｍ，ｎ，（ｂ））ｎ∈［１＋Ｄ］）ｍ∈［１＋Ｄ］、ｄＩＤ｜Ｌ−１ｄｅｌｅｇ＝（ｈｌ，（ｈｍ，ｌ）ｍ∈［１＋Ｄ］）ｌ∈［Ｌ，Ｄ］である。
まず、Ｌ階層目にある中間ＰＫＧは、（Ｌ＋１）階層目にあるクエリ発行装置３００または中間ＰＫＧから、ユーザ秘密鍵生成要求としてＩＤであるＬ個の整数の組（Ｉ１，…，ＩＬ）を受け取る。次に、Ｌ階層目にある中間ＰＫＧは、（πｍ，（πｍ，ｍ’）ｍ’∈［１＋Ｄ］）ｍ∈［１＋Ｄ］をそれぞれＺｐから一様ランダムに選択する。次に、Ｌ階層目にある中間ＰＫＧは、
【数５５】
0005269209.tif 000046
を計算し、ｄＩＤｔｅｓｔ＝（ｋ０，（ｋｎ，（ａ），ｋｎ，（ｂ））ｎ∈［１＋Ｄ］とする。次に、Ｌ階層目にある中間ＰＫＧは、
【数５６】
0005269209.tif 000047
を計算し、ｄＩＤｒｅｒａｎｄ＝（ｆｍ，０，（ｆｍ，ｎ，（ａ），ｆｍ，ｎ，（ｂ））ｎ∈［１＋Ｄ］）ｍ∈［１＋Ｄ］とする。次に、Ｌ階層目にある中間ＰＫＧは、
【数５７】
0005269209.tif 000048
を計算し、ｄＩＤｄｅｌｅｇ＝（ｈｌ，（ｈｍ，ｌ）ｍ∈［１＋Ｄ］）ｌ∈［１＋Ｌ，Ｄ］とする。最後に、Ｌ階層目にある中間ＰＫＧは、ｄＩＤ＝（ｄＩＤｔｅｓｔ，ｄＩＤｒｅｒａｎｄ，ｄＩＤｄｅｌｅｇ）をＩＤのユーザ秘密鍵として、クエリ発行装置３００または中間ＰＫＧに送信する。
【０４０５】
暗号化装置４００は、例えば以下のようにして、キーワードＷを暗号化して、暗号文Ｃを作成しデータサーバに送信する。
【０４０６】
暗号化装置４００は、（Ｌ＋１）階層目にあるクエリ発行装置３００に対する暗号文Ｃを作成する。対象となるクエリ発行装置３００は、Ｌ個の整数または＊（アスタリスク）の組（例えば（Ｉ１，＊，Ｉ３，…，ＩＬ））により指定する。＊は、その階層のユーザであれば誰でもよいことを表わす。例えば、ある会社に○○部、○○課、○○係、の階層があり、係の中に複数のユーザが含まれ、各ユーザのＩＤは、部を表わす整数Ｉ１、課を表わす整数Ｉ２、係を表わす整数Ｉ３、個人を表わす整数Ｉ４の４つの整数の組であるとする。総務部に所属するすべてのユーザがキーワード検索できるようにＷを暗号化する場合は、ＩＤ＝（総務部、＊、＊、＊）となる。一方、総務部経理課出納係のユーザがキーワード検索できるようにＷを暗号化する場合は、ＩＤ＝（総務部、経理課、出納係、＊）となる。
【０４０７】
ここで、記号「Ａ（ＩＤ）」を、Ａ（ＩＤ）＝｛ｉ∈［１，Ｌ］｜Ｉｉ＝＊｝と定義する。また、記号「Ａ’（ＩＤ）」を、Ａ’（ＩＤ）＝｛ｉ∈［１，Ｌ］｜Ｉｉ≠＊｝と定義する。
Ａ（ＩＤ）は、１からＬまでのフィールドのうちＩｉが＊であるようなフィールドの番号の集合（集合Ａ）を表わす。一方、Ａ’（ＩＤ）は、１からＬまでのフィールドのうち、Ｉｉが＊でなく、特定の値が指定されているようなフィールドの番号の集合（集合Ａ’）を表わす。
【０４０８】
まず、暗号化装置４００は、ｒ，（ｒｎ）ｎ∈［１＋Ｄ］をそれぞれ有限体Ｚｐから一様ランダムに選択する。暗号化装置４００は、Ｒを乗法群Ｇ３から一様ランダムに選択する。次に、暗号化装置４００は、Ｅ＝ＲΩ＾（−ｒ）を計算する。次に、暗号化装置４００は、ｃ０＝ｇ１＾ｒを計算する。次に、暗号化装置４００は、
【数５８】
0005269209.tif 000049
を計算する。最後に、暗号化装置４００は、Ｃ＝（Ａ（ＩＤ），Ｒ，Ｅ，ｃ０，（ｃｎ，（ａ），ｃｎ，（ｂ），（ｃｎ，ｌ，（ａ），ｃｎ，ｌ，（ｂ））ｌ∈Ａ（ＩＤ））ｎ∈［１＋Ｄ］）を暗号文として、データサーバ（検索装置５００）に送信する。
【０４０９】
クエリ発行装置３００は、例えば以下のようにして、キーワードＷのクエリを発行する。
クエリ発行装置３００は、（Ｌ＋１）階層目にあり、ユーザＩＤがＬ個の整数の組（Ｉ１，…，ＩＬ）である。
まず、クエリ発行装置３００は、（πｍ）ｍ∈［１＋Ｄ］をそれぞれ有限体Ｚｐから一様ランダムに選択する。次に、クエリ発行装置３００は、
【数５９】
0005269209.tif 000050
を計算する。次に、クエリ発行装置３００は、
【数６０】
0005269209.tif 000051
を計算する。最後に、クエリ発行装置３００は、Ｔ＝（（Ｉｉ）ｉ∈［１，Ｌ］，ｋ’０，（ｋ’ｎ，（ａ），ｋ’ｎ，（ｂ））ｎ∈［１＋Ｄ］）をクエリとしてデータサーバ（検索装置５００）に送信する。
【０４１０】
データサーバ（検索装置５００）は、例えば以下のようにして、暗号文Ｃ＝（Ａ（ＩＤ），Ｒ，Ｅ，ｃ０，（ｃｎ，（ａ），ｃｎ，（ｂ），（ｃｎ，ｌ，（ａ），ｃｎ，ｌ，（ｂ））ｌ∈Ａ（ＩＤ））ｎ∈［１＋Ｄ］）とクエリＴ＝（（Ｉｉ）ｉ∈［１，Ｌ］，ｋ’０，（ｋ’ｎ，（ａ），ｋ’ｎ，（ｂ））ｎ∈［１＋Ｄ］）を用いて秘匿検索をする。
まず、データサーバの検索部５５０は、ｉ∈Ａ（ＩＤ）なるすべてのｉについて、
【数６１】
0005269209.tif 000052
を計算する。次に、検索部５５０は、
【数６２】
0005269209.tif 000053
を計算する。次に、検索部５５０は、Ｒ＝Ｒ’となるかを判定する。もしＲ＝Ｒ’であれば、検索部５５０は、キーワードがヒットしたと判定する。Ｒ＝Ｒ’でなければ、検索部５５０は、キーワードがヒットしなかったと判定する。
【０４１１】
このようにして、暗号化、クエリ生成、秘匿検索を行えば、暗号文のキーワード検索対象グループの中にクエリ発行装置３００のＩＤが含まれ、かつ暗号文のキーワードとクエリの内部のキーワードが一致したときのみ、検索にヒットする。
【０４１２】
秘匿検索システム８００によれば、公開鍵すなわち公開パラメータは、ルートＰＫＧ（公開パラメータ生成装置１００）が発行すればよく、グループ内の各ユーザが個別に発行する必要はない。よって、システムセットアップ時にユーザごとに作業する必要をなくすことができる。
また、グループごとに公開パラメータを発行する必要もない。よって、同様にシステムセットアップ時に中間ＰＫＧごとに作業する必要をなくすことができる。
また、暗号化する際は、検索者ごとの公開鍵を必要としない。よって、暗号化の手間を軽減することができる。さらに、暗号化の際、＊（アスタリスク）を指定することでキーワード検索の対象となるグループを柔軟に変更することができる。
また、検索者ごとに異なる暗号文を作成する必要がない。したがって、暗号文のサイズが検索者数に比例しない。
また、データの暗号化後にグループ内に検索者を付け加える場合でも、グループ公開パラメータに変更はないため、データの再暗号化が不要となる。
【０４１３】
実施の形態２．
実施の形態２について、図２２〜図２６を用いて説明する。
なお、実施の形態１と共通する部分については、同一の符号を付し、説明を省略する。
【０４１４】
図２２は、この実施の形態における秘匿検索システム８００の全体構成の一例を示すシステム構成図である。
クエリ発行装置群８３０のクエリ発行装置３００は、複数の階層に分かれず、すべて同じ一つの階層に属する。クエリ発行装置３００のユーザＩＤは、分節せず、１個の整数Ｉ１からなる。これは、実施の形態１で説明した構成において、クエリ発行装置３００の階層数が１階層である特別な場合とみることができる。
したがって、整数Ｌは、すべてのユーザＩＤについて、１である。整数Ｄは、２である。
【０４１５】
公開パラメータ生成装置１００の構成は、実施の形態１と同様なので、図６を参照しながら、実施の形態１と異なる点のみを説明する。
【０４１６】
乱数α選択部１２２は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから、一様ランダムに４個の整数αｎを選択する。ｎは、０以上３以下の整数である。
乱数β選択部１２３は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから、一様ランダムに４個の整数βｎを選択する。ｎは、０以上３以下の整数である。
乱数θ選択部１２４は、ＣＰＵ９１１を用いて、１以上ｐ未満の整数のなかから、一様ランダムに１２個の整数θｎ，ｌを選択する。ｎは、０以上３以下の整数である。ｌ（エル）は、０以上２以下の整数である。
【０４１７】
公開元ａ算出部１３２は、ＣＰＵ９１１を用いて、乗法群Ｇ１の元である１２個の元ａｎ，ｌを算出する。ｎは、０以上３以下の整数である。ｌ（エル）は、０以上２以下の整数である。
公開元ｂ算出部１３３は、ＣＰＵ９１１を用いて、乗法群Ｇ１の元である１２個の元ｂｎ，ｌを算出する。ｎは、０以上３以下の整数である。ｌ（エル）は、０以上２以下の整数である。
【０４１８】
秘密元ａ算出部１４２は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ａ’ｎを算出する。ｎは、０以上３以下の整数である。
秘密元ｂ算出部１４３は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ｂ’ｎを算出する。ｎは、０以上３以下の整数である。
秘密元ｙ算出部１４４は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である１２個の元ｙ’ｎ，ｌを算出する。ｎは、０以上３以下の整数である。ｌ（エル）は、０以上２以下の整数である。
【０４１９】
ユーザ秘密鍵生成装置２００の構成は、実施の形態１と同様なので、図８を参照しながら、実施の形態１と異なる点のみを説明する。
【０４２０】
秘密元ａ記憶部２１３は、磁気ディスク装置９２０を用いて、マスタ秘密鍵のうち、乗法群Ｇ２の元である４個の元ａ’ｎを表わすデータを記憶する。ｎは、０以上３以下の整数である。
秘密元ｂ記憶部２１４は、磁気ディスク装置９２０を用いて、マスタ秘密鍵のうち、乗法群Ｇ２の元である４個の元ｂ’ｎを表わすデータを記憶する。ｎは、０以上３以下の整数である。
秘密元ｙ記憶部２１５は、磁気ディスク装置９２０を用いて、マスタ秘密鍵のうち、乗法群Ｇ２の元である１２個の元ｙ’ｎ，ｌを表わすデータを記憶する。ｎは、０以上３以下の整数である。ｌ（エル）は、０以上２以下の整数である。
識別子記憶部２２２は、ＲＡＭ９１４を用いて、ユーザＩＤとして１個の整数Ｉ１を表わすデータを記憶する。
【０４２１】
乱数ρ選択部２３１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに４個の整数ρｎを選択する。ｎは、０以上３以下の整数である。
副乱数ρ選択部２３２は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに１６個の整数ρｎ，ｍを選択する。ｎは、０以上３以下の整数である。ｍは、０以上３以下の整数である。
【０４２２】
総積元Ｙ算出部２３３は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ΠＹ，ｎを算出する。ｎは、０以上３以下の整数である。
検索元ａ算出部２４２は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ｋｎ，（ａ）を算出する。ｎは、０以上３以下の整数である。
検索元ｂ算出部２４３は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ｋｎ，（ｂ）を算出する。ｎは、０以上３以下の整数である。
攪乱元算出部２５１は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ｆｍ，０を算出する。ｍは、０以上３以下の整数である。
攪乱元ａ算出部２５２は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である１６個の元ｆｍ，ｎ，（ａ）を算出する。ｍは、０以上３以下の整数である。ｎは、０以上３以下の整数である。
攪乱元ｂ算出部２５３は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である１６個の元ｆｍ，ｎ，（ｂ）を算出する。ｍは、０以上３以下の整数である。ｎは、０以上３以下の整数である。
委任元算出部２６１は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である１個の元ｈ２を算出する。
副委任元算出部２６２は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ｈｍ，２を算出する。ｍは、０以上３以下の整数である。
【０４２３】
図２３は、この実施の形態におけるクエリ発行装置３００の機能ブロックの構成の一例を示すブロック構成図である。
クエリ発行装置３００は、実施の形態１と異なり、子クエリ発行装置のユーザ秘密鍵を生成する機能を持たない。クエリ発行装置３００は、実施の形態１における子ユーザ識別子入力部３６１、子ユーザ識別子記憶部３６２、子ユーザ秘密鍵出力部３６３、子ユーザ秘密鍵生成部３７０を有しない。
ユーザ識別子記憶部３１１は、磁気ディスク装置９２０を用いて、ユーザＩＤとして１個の整数Ｉ１を記憶する。
【０４２４】
ユーザ秘密鍵記憶部３２０、共通処理部３３０、クエリ生成部３５０の詳細なブロック構成は、実施の形態１と同様なので、図１１を参照しながら、実施の形態１と異なる点のみを説明する。
【０４２５】
検索元ａ記憶部３２２は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である４個の元ｋｎ，（ａ）を表わすデータを記憶する。ｎは、０以上３以下の整数である。
検索元ｂ記憶部３２３は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である４個の元ｋｎ，（ｂ）を表わすデータを記憶する。ｎは、０以上３以下の整数である。
攪乱元記憶部３２４は、磁気ディスク装置９２０を用いて、乗法群Ｇ２の元である４個の元ｆｍ，０を表わすデータを記憶する。ｍは、０以上３以下の整数である。
攪乱元ａ記憶部３２５は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である１６個の元ｆｍ，ｎ，（ａ）を表わすデータを記憶する。ｍは、０以上３以下の整数である。ｎは、０以上３以下の整数である。
攪乱元ｂ記憶部３２６は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である１６個の元ｆｍ，ｎ，（ｂ）を表わすデータを記憶する。ｍは、０以上３以下の整数である。ｎは、０以上３以下の整数である。
委任元記憶部３２７は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である１個の元ｈ２を表わすデータを記憶する。
副委任元記憶部３２８は、磁気ディスク装置９２０を用いて、ユーザ秘密鍵のうち、乗法群Ｇ２の元である４個の元ｈｍ，２を表わすデータを記憶する。ｍは、０以上３以下の整数である。
【０４２６】
乱数π選択部３３１は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、４個の整数πｍを選択する。ｍは、０以上３以下の整数である。
質問元ａ算出部３３４は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ｋ’ｎ，（ａ）を算出する。
質問元ｂ算出部３３５は、ＣＰＵ９１１を用いて、乗法群Ｇ２の元である４個の元ｋ’ｎ，（ｂ）を算出する。
【０４２７】
図２４は、この実施の形態における暗号化装置４００の機能ブロックの構成の一例を示すブロック構成図である。
暗号化装置４００は、実施の形態１と異なり、検索権限を与えるクエリ発行装置３００を限定せず、ユーザ秘密鍵を持つすべてのクエリ発行装置３００が検索できる暗号文を生成する。暗号化装置４００は、実施の形態１における権限範囲入力部４１２、権限範囲記憶部４３０を有しない。
【０４２８】
図２５は、この実施の形態における暗号化装置４００のうち、公開パラメータ記憶部４２０、暗号文生成部４５０の詳細な機能ブロックの構成の一例を示す詳細ブロック図である。
【０４２９】
公開元ａ記憶部４２３は、磁気ディスク装置９２０を用いて、公開パラメータのうち、乗法群Ｇ１の元である１２個の元ａｎ，ｌを表わすデータを記憶する。ｎは、０以上３以下の整数である。ｌは、０以上２以下の整数である。
公開元ｂ記憶部４２４は、磁気ディスク装置９２０を用いて、公開パラメータのうち、乗法群Ｇ１の元である１２個の元ｂｎ，ｌを表わすデータを記憶する。ｎは、０以上３以下の整数である。ｌは、０以上２以下の整数である。
【０４３０】
副乱数ｒ選択部４５２は、ＣＰＵ９１１を用いて、０以上ｐ未満の整数のなかから、一様ランダムに４個の整数ｒｎを選択する。
【０４３１】
総積元Ａ算出部４６１は、ＣＰＵ９１１を用いて、公開元ａ記憶部４２３が記憶した１２個の元ａｎ，ｌを表わすデータと、埋込みキーワード記憶部４４１が記憶した整数Ｗ’を表わすデータとを入力する。
総積元Ａ算出部４６１は、１２個の元ａｎ，ｌのうち、ｌ（エル）が２に等しい４個の元ａｎ，２と、整数Ｗ’とに基づいて、ＣＰＵ９１１を用いて、４個の元ａｎ，２それぞれのＷ’乗を計算する。総積元Ａ算出部４６１が算出した元「ａｎ，２＾Ｗ’」は、乗法群Ｇ１の元である。総積元Ａ算出部４６１は、４個の元「ａｎ，２＾Ｗ’」を算出する。ｎは、０以上３以下の整数である。
総積元Ａ算出部４６１は、１２個の元ａｎ，ｌのうち、ｌ（エル）が０に等しい４個の元ａｎ，０と、算出した４個の元「ａｎ，２＾Ｗ’」とに基づいて、ＣＰＵ９１１を用いて、１個の元ａｎ，０につき、元ａｎ，０と、元ａｎ，０とｎが同じ１個の元「ａｎ，２＾Ｗ’」との積「ａｎ，０・ａｎ，２＾Ｗ’」を計算して、元ΠＡ，ｎを得る。元ΠＡ，ｎは、乗法群Ｇ１の元である。総積元Ａ算出部４６１は、４個の元ΠＡ，ｎを算出する。ｎは、０以上３以下の整数である。
【０４３２】
総積元Ｂ算出部４６２は、ＣＰＵ９１１を用いて、公開元ｂ記憶部４２４が記憶した１２個の元ｂｎ，ｌを表わすデータと、埋込みキーワード記憶部４４１が記憶した整数Ｗ’を表わすデータとを入力する。
総積元Ｂ算出部４６２は、１２個の元ｂｎ，ｌのうち、ｌ（エル）が２に等しい４個の元ｂｎ，２と、整数Ｗ’とに基づいて、ＣＰＵ９１１を用いて、４個の元ｂｎ，２それぞれのＷ’乗を計算する。総積元Ｂ算出部４６２が算出した元「ｂｎ，２＾Ｗ’」は、乗法群Ｇ１の元である。総積元Ｂ算出部４６２は、４個の元「ｂｎ，２＾Ｗ’」を算出する。ｎは、０以上３以下の整数である。
総積元Ｂ算出部４６２は、１２個の元ｂｎ，ｌのうち、ｌ（エル）が０に等しい４個の元ｂｎ，０と、算出した４個の元「ｂｎ，２＾Ｗ’」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｂｎ，０につき、元ｂｎ，０と、元ｂｎ，０とｎが同じ１個の元「ｂｎ，２＾Ｗ’」との積「ｂｎ，０・ｂｎ，２＾Ｗ’」を計算して、元ΠＢ，ｎを得る。元ΠＢ，ｎは、乗法群Ｇ１の元である。総積元Ｂ算出部４６２は、４個の元ΠＢ，ｎを算出する。ｎは、０以上３以下の整数である。
【０４３３】
暗号元ａ算出部４６３は、ＣＰＵ９１１を用いて、４個の元ｃｎ，（ａ）を算出する。ｎは、０以上３以下の整数である。
暗号元ｂ算出部４６４は、ＣＰＵ９１１を用いて、４個の元ｃｎ，（ｂ）を算出する。ｎは、０以上３以下の整数である。
【０４３４】
暗号部分元ａ算出部４６５は、ＣＰＵ９１１を用いて、公開元ｂ記憶部４２４が記憶した１２個の元ｂｎ，ｌを表わすデータと、副乱数ｒ選択部４５２が記憶した４個の整数ｒｎを表わすデータとを入力する。
暗号部分元ａ算出部４６５は、１２個の元ｂｎ，ｌのうち、ｌ（エル）が１に等しい４個の元ｂｎ，１と、４個の整数ｒｎとに基づいて、ＣＰＵ９１１を用いて、１個の整数ｒｎにつき、整数ｒｎとｎが同じ１個の元ｂｎ，１のｒｎ乗を計算して、元ｃｎ，１，（ａ）を得る。元「ｃｎ，１，（ａ）」は、乗法群Ｇ１の元である。暗号部分元ａ算出部４６５は、４個の元ｃｎ，１，（ａ）を算出する。ｎは、０以上３以下の整数である。
【０４３５】
暗号部分元ｂ算出部４６６は、ＣＰＵ９１１を用いて、公開元ａ記憶部４２３が記憶した１２個の元ａｎ，ｌを表わすデータと、乱数ｒ選択部４５１が記憶した１個の整数ｒを表わすデータと、副乱数ｒ選択部４５２が記憶した４個の整数ｒｎを表わすデータとを入力する。
暗号部分元ｂ算出部４６６は、１個の整数ｒと、４個の整数ｒｎとに基づいて、ＣＰＵ９１１を用いて、４個の整数ｒｎそれぞれについて、１個の整数ｒから１個の整数ｒｎを差し引いた差「ｒ−ｒｎ」を計算する。暗号部分元ｂ算出部４６６は、４個の差「ｒ−ｒｎ」を算出する。
暗号部分元ｂ算出部４６６は、１２個の元ａｎ，ｌのうち、ｌ（エル）が１に等しい４個の元ａｎ，１と、算出した４個の差「ｒ−ｒｎ」とに基づいて、ＣＰＵ９１１を用いて、１個の整数ｒｎにつき、整数ｒｎとｎが同じ１個の元ａｎ，１の「ｒ−ｒｎ」乗を計算して、元ｃｎ，１，（ｂ）を得る。元「ｃｎ，１，（ｂ）」は、乗法群Ｇ１の元である。暗号部分元ｂ算出部４６６は、４個の元ｃｎ，１，（ｂ）を算出する。ｎは、０以上３以下の整数である。
【０４３６】
暗号文出力部４１４は、ＣＰＵ９１１を用いて、乱数元選択部４５３が記憶した１個の元Ｒを表わすデータと、検証元算出部４５７が記憶した１個の元Ｅを表わすデータと、暗号元算出部４５６が記憶した１個の元ｃ０を表わすデータと、暗号元ａ算出部４６３が記憶した４個の元ｃｎ，（ａ）を表わすデータと、暗号元ｂ算出部４６４が記憶した４個の元ｃｎ，（ｂ）を表わすデータと、暗号部分元ａ算出部４６５が記憶した４個の元ｃｎ，１，（ａ）を表わすデータと、暗号部分元ｂ算出部４６６が記憶した４個の元ｃｎ，１，（ｂ）を表わすデータとを入力する。
暗号文出力部４１４は、ＣＰＵ９１１を用いて、１個の元Ｒと、１個の元Ｅと、１個の元ｃ０と、４個の元ｃｎ，（ａ）と、４個の元ｃｎ，（ｂ）と、４個の元ｃｎ，１，（ａ）と、４個の元ｃｎ，１，（ｂ）とを表わすデータを含むデータを、暗号文として出力する。
【０４３７】
検索装置５００の構成は、実施の形態１と同様である。
【０４３８】
図２６は、この実施の形態における検索装置５００のうち、暗号文記憶部５３０、クエリ記憶部５４０、検索部５５０の詳細な機能ブロックの構成の一例を示す詳細ブロック図である。
【０４３９】
暗号文記憶部５３０は、実施の形態１と異なり、分節数記憶部５３１を有しない。
暗号元ａ記憶部５３５は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である４個の元ｃｎ，（ａ）を表わすデータを記憶する。
暗号元ｂ記憶部５３６は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である４個の元ｃｎ，（ｂ）を表わすデータを記憶する。
暗号部分元ａ記憶部５３７は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である４個の元ｃｎ，１，（ａ）を表わすデータを記憶する。
暗号部分元ｂ記憶部５３８は、磁気ディスク装置９２０を用いて、１個の暗号文につき、乗法群Ｇ１の元である４個の元ｃｎ，１，（ｂ）を表わすデータを記憶する。
【０４４０】
質問識別子記憶部５４１は、ＲＡＭ９１４を用いて、クエリのうち、１個の整数Ｉ１を表わすデータを記憶する。
質問元ａ記憶部５４３は、ＲＡＭ９１４を用いて、クエリのうち、４個の元ｋ’ｎ，（ａ）を表わすデータを記憶する。ｎは、０以上３以下の整数である。
質問元ｂ記憶部５４４は、ＲＡＭ９１４を用いて、クエリのうち、４個の元ｋ’ｎ，（ｂ）を表わすデータを記憶する。ｎは、０以上３以下の整数である。
【０４４１】
暗号総積元Ａ算出部５５１は、ＣＰＵ９１１を用いて、暗号元ａ記憶部５３５が記憶した４個の元ｃｎ，（ａ）を表わすデータと、暗号部分元ａ記憶部５３７が記憶した４個の元ｃｎ，１，（ａ）を表わすデータと、質問識別子記憶部５４１が記憶した１個の整数Ｉ１を表わすデータとを入力する。
暗号総積元Ａ算出部５５１は、４個の元ｃｎ，１，（ａ）と、１個の整数Ｉ１とに基づいて、ＣＰＵ９１１を用いて、４個の元ｃｎ，１，（ａ）それぞれのＩ１乗を計算する。暗号総積元Ａ算出部５５１が算出した元「ｃｎ，１，（ａ）＾Ｉ１」は、乗法群Ｇ１の元である。暗号総積元Ａ算出部５５１は、４個の元「ｃｎ，１，（ａ）＾Ｉ１」を算出する。ｎは、０以上３以下の整数である。
暗号総積元Ａ算出部５５１は、４個の元ｃｎ，（ａ）と、算出した４個の元「ｃｎ，１，（ａ）＾Ｉ１」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｃｎ，（ａ）につき、元ｃｎ，（ａ）と、元ｃｎ，（ａ）とｎが同じ１個の元「ｃｎ，１，（ａ）＾Ｉ１」との積を計算して、元ΠＡ’，ｎを得る。元ΠＡ’，ｎは、乗法群Ｇ１の元である。暗号総積元Ａ算出部５５１は、４個の元ΠＡ’，ｎを算出する。ｎは、０以上３以下の整数である。
【０４４２】
暗号総積元Ｂ算出部５５３は、ＣＰＵ９１１を用いて、暗号元ｂ記憶部５３６が記憶した４個の元ｃｎ，（ｂ）を表わすデータと、暗号部分元ｂ記憶部５３８が記憶した４個の元ｃｎ，１，（ｂ）を表わすデータと、質問識別子記憶部５４１が記憶した１個の整数Ｉ１を表わすデータとを入力する。
暗号総積元Ｂ算出部５５３は、４個の元ｃｎ，１，（ｂ）と、１個の整数Ｉ１とに基づいて、ＣＰＵ９１１を用いて、４個の元ｃｎ，１，（ｂ）それぞれのＩ１乗を計算する。暗号総積元Ｂ算出部５５３が算出した元「ｃｎ，１，（ｂ）＾Ｉ１」は、乗法群Ｇ１の元である。暗号総積元Ｂ算出部５５３は、４個の元「ｃｎ，１，（ｂ）＾Ｉ１」を算出する。ｎは、０以上３以下の整数である。
暗号総積元Ｂ算出部５５３は、４個の元ｃｎ，（ｂ）と、算出した４個の元「ｃｎ，１，（ｂ）＾Ｉ１」とに基づいて、ＣＰＵ９１１を用いて、１個の元ｃｎ，（ｂ）につき、元ｃｎ，（ｂ）と、元ｃｎ，（ｂ）とｎが同じ１個の元「ｃｎ，１，（ｂ）＾Ｉ１」との積を計算して、元ΠＢ’，ｎを得る。元ΠＢ’，ｎは、乗法群Ｇ１の元である。暗号総積元Ｂ算出部５５３は、４個の元ΠＢ’，ｎを算出する。ｎは、０以上３以下の整数である。
【０４４３】
ペアリング元Ａ算出部５５２は、ＣＰＵ９１１を用いて、乗法群Ｇ３の元である４個の元ｅＡ，ｎを算出する。ｎは、０以上３以下の整数である。
ペアリング元Ｂ算出部５５４は、ＣＰＵ９１１を用いて、乗法群Ｇ３の元である４個の元ｅＢ，ｎを算出する。ｎは、０以上３以下の整数である。
【０４４４】
検索装置５００は、検索キーワードと、暗号文に埋め込まれたキーワードとが一致する場合のみ、検索にヒットしたと判定する。ユーザの検索権限を制限しないので、ユーザ秘密鍵生成装置２００が生成したユーザ秘密鍵を持つすべてのクエリ発行装置３００が生成したクエリにおいて、検索キーワードと、暗号文に埋め込まれたキーワードとが一致する場合に、検索装置５００は、検索にヒットしたと判定する。
また、秘匿検索システム８００は、解読攻撃に対する耐性があり、安全である。
【０４４５】
秘匿検索システム８００には、１つのグループが存在し、その中に複数のユーザが所属している。秘匿検索システム８００は、暗号化装置４００が、データをキーワード検索可能な形で公開鍵暗号化してサーバ（検索装置５００）に登録し、各ユーザ（クエリ発行装置３００）が、自分のユーザ秘密鍵を用いて検索用トラップドア（クエリ）を生成し、検索装置５００が、暗号文とトラップドアを用いて秘匿検索する。
【０４４６】
この実施の形態における秘匿検索システム８００は、中小企業や同好サークルなど小規模の組織に適する。中小企業では、数人から数百人規模の「グループ」が１つ存在している。つまり、Ａ社であれば「Ａ社の社員グループ」というグループが存在している。また、同好サークルも数十人程度の「グループ」である。
【０４４７】
グループ公開鍵生成装置８１０（グループＰＫＧ）は、グループの公開パラメータを発行したり、グループ内のユーザがもつクエリ発行装置３００に対してユーザ秘密鍵を発行したりといったグループ内の鍵管理を行う。クエリ発行装置３００は、グループ内のユーザ数をＮとして、ユーザ１〜Ｎに対応する。クエリ発行装置３００は、暗号文のキーワード検索を行う際にクエリを発行する。暗号化装置４００は、キーワードを暗号化する。データサーバ（検索装置５００）は、暗号文を格納し、クエリを受け付け、検索を実行する。
【０４４８】
データサーバは、グループの組織外に存在する構成でもよいし、グループの組織内に存在する構成でもよい。グループＰＫＧは、グループの組織内に存在する構成でもよいし、グループの組織外のＰＫＧを利用する構成でもよい。暗号化装置４００は、グループの組織外に存在する構成でもよいし、グループの組織内に存在する構成でもよい。
暗号化装置４００は、公開鍵を使用して暗号化を行うので、秘密情報を使用しない。また、データサーバは、暗号文とクエリとに基づいて、検索を行うので、秘密情報を使用しない。したがって、データサーバや暗号化装置４００は、グループにまったく関係のない別の組織のものであってよい。
【０４４９】
グループＰＫＧは、公開パラメータ・マスタ秘密鍵生成部（公開パラメータ生成装置１００）、ユーザ秘密鍵生成部（ユーザ秘密鍵生成装置２００）、マスタ秘密鍵記憶部（秘密元ｗ記憶部２１２、秘密元ａ記憶部２１３、秘密元ｂ記憶部２１４、秘密元ｙ記憶部２１５）を有する。公開パラメータ・マスタ秘密鍵生成部は、グループの公開パラメータとマスタ秘密鍵とを生成する。ユーザ秘密鍵生成部は、グループのユーザに対してそのユーザ用のユーザ秘密鍵を生成する。マスタ秘密鍵記憶部は、公開パラメータ・マスタ秘密鍵生成部が生成したマスタ秘密鍵を記憶する。
【０４５０】
クエリ発行装置３００は、ユーザ秘密鍵生成要求発行部（ユーザ秘密鍵要求出力部３１２）、ユーザ秘密鍵記憶部３２０、クエリ発行部（クエリ生成部３５０）を有する。ユーザ秘密鍵生成要求発行部は、グループＰＫＧに対してユーザ秘密鍵を生成することの要求を発行する。ユーザ秘密鍵記憶部３２０は、グループＰＫＧから発行されたユーザ秘密鍵を記憶する。クエリ発行部は、データサーバに対し、あるキーワードを含む暗号文を検索するようクエリを発行する。
【０４５１】
データサーバ（検索装置５００）は、暗号文記憶部５３０、クエリ記憶部５４０、検索部５５０を有する。暗号文記憶部５３０は、暗号化装置４００から送信された暗号文を記憶する。クエリ記憶部５４０は、クエリ発行装置３００から送信されたクエリを記憶する。検索部５５０は、暗号文記憶部５３０に格納された暗号文の中から、クエリの指定内容に該当する暗号文を検索する。
【０４５２】
暗号化装置４００は、公開パラメータ記憶部４２０、暗号化部（暗号文生成部４５０）を有する。公開パラメータ記憶部４２０は、グループＰＫＧが公開する公開パラメータを記憶する。暗号化部は、公開パラメータを用いてキーワードを暗号化し暗号文を作成する。
【０４５３】
グループＰＫＧの公開パラメータ・マスタ秘密鍵生成部は、例えば以下のようにして、公開パラメータＰＫおよびマスタ秘密鍵ＭＳＫを生成する。
まず、公開パラメータ・マスタ秘密鍵生成部は、乗法群Ｇ１から生成元ｇ１を一様ランダムに選択する。公開パラメータ・マスタ秘密鍵生成部は、乗法群Ｇ２から生成元ｇ２を一様ランダムに選択する。次に、公開パラメータ・マスタ秘密鍵生成部は、ω、（αｎ、βｎ）ｎ∈［３］をそれぞれＺｐ＊から一様ランダムに選択する。次に、公開パラメータ・マスタ秘密鍵生成部は、（θｎ，ｌ）（ｎ，ｌ）∈［３］×［２］をそれぞれＺｐから一様ランダムに選択する。次に、Ω＝ｅ（ｇ１，ｇ２）＾ω、（ａｎ，ｌ＝ｇ１＾（αｎ・θｎ，ｌ），ｂｎ，ｌ＝ｇ１＾（βｎ・θｎ，ｌ））（ｎ，ｌ）∈［３］×［２］を計算する。次に、公開パラメータ・マスタ秘密鍵生成部は、ｗ’＝ｇ２＾ω、（ａ’ｎ＝ｇ２＾αｎ，ｂ’ｎ＝ｇ２＾βｎ，（ｙ’ｎ，ｌ＝ｇ２＾（αｎ・βｎ・θｎ，ｌ）ｌ∈［Ｄ］）ｎ∈［３］を計算する。次に、公開パラメータ・マスタ秘密鍵生成部は、群Ｇ１、Ｇ２、Ｇ３、位数ｐ、ペアリングｅと、計算したΩ、（ａｎ，ｌ，ｂｎ，ｌ）（ｎ，ｌ）∈［３］×［２］を公開パラメータＰＫとして公開する。最後に、公開パラメータ・マスタ秘密鍵生成部は、計算したｗ’、（ａ’ｎ，ｂ’ｎ，（ｙ’ｎ，ｌ）ｌ∈［Ｄ］）ｎ∈［３］をマスタ秘密鍵ＭＳＫとしてマスタ秘密鍵記憶部に格納する。
【０４５４】
クエリ発行装置３００のユーザ秘密鍵生成要求発行部は、例えば以下のようにして、グループＰＫＧに対してユーザ秘密鍵生成要求を発行する。
ユーザ名（ユーザＩＤ）は、Ｉ１である。ユーザ名は、有限体Ｚｐの要素である。すなわち、ユーザ名は、０からｐ−１までの数値である。暗号の安全性の観点から、ｐは１６０ビット程度の大きさにとる。１６０ビット程度の文字列で表されるユーザ名であれば、ユーザ名をそのまま数値として扱えばよい。また、より長い文字列に対応するためには、例えばＳＨＡ−１のような暗号用ハッシュ関数を用いて１６０ビット程度の値に変換すればよい。
まず、ユーザ秘密鍵生成要求発行部は、ユーザＩＤであるＩ１∈Ｚｐをユーザ秘密鍵生成要求として発行する。その後、ユーザ秘密鍵生成要求発行部は、ユーザ秘密鍵生成要求をグループＰＫＧに送信する。
【０４５５】
グループＰＫＧのユーザ秘密鍵生成部は、例えば以下のようにして、クエリ発行装置３００からユーザ秘密鍵生成要求を受け取り、ユーザ秘密鍵を生成し、クエリ発行装置３００に送信する。
まず、ユーザ秘密鍵生成部は、クエリ発行装置３００からユーザ秘密鍵生成要求としてユーザＩＤであるＩ１を受け取る。次に、ユーザ秘密鍵生成部は、（ρｎ，（ρｎ，ｍ）ｍ∈［３］）ｎ∈［３］をそれぞれ有限体Ｚｐから一様ランダムに選択する。次に、ユーザ秘密鍵生成部は、
【数６３】
0005269209.tif 000054
を計算し、ｄＩ１ｔｅｓｔ＝（ｋ０，（ｋｎ，（ａ），ｋｎ，（ｂ））ｎ∈３）とする。次に、ユーザ秘密鍵生成部は、
【数６４】
0005269209.tif 000055
を計算し、ｄＩ１ｒｅｒａｎｄ＝（ｆｍ，０，（ｆｍ，ｎ，（ａ），ｆｍ，ｎ，（ｂ））ｎ∈［３］）ｍ∈［３］とする。次に、ユーザ秘密鍵生成部は、
【数６５】
0005269209.tif 000056
を計算し、ｄＩ１ｄｅｌｅｇ＝（ｈ２，（ｈｍ，２）ｍ∈［３］）とする。最後に、ユーザ秘密鍵生成部は、ｄＩ１＝（ｄＩ１ｔｅｓｔ，ｄＩ１ｒｅｒａｎｄ，ｄＩ１ｄｅｌｅｇ）をＩ１のユーザ秘密鍵として、クエリ発行装置３００に送信する。
クエリ発行装置３００は、ユーザ秘密鍵を受信するとそれをユーザ秘密鍵記憶部３２０に格納する。
なお、ユーザ秘密鍵は該当するユーザのクエリ発行装置３００以外に知られてはならない。このため、例えばクエリ発行装置３００とグループＰＫＧとの間の通信路をＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）などの通信路保護方法により秘匿した状態で送受信することが望ましい。
【０４５６】
暗号化装置４００は、例えば以下のようにして、キーワードＷを暗号化して暗号文Ｃを作成する。
なお、暗号化装置４００が作成する暗号文は、キーワード検索用の暗号文である。データ本体の暗号文（例えばメール本文の暗号文）は、別途用意する。データ本体は、例えばＲＳＡ暗号など従来の公開鍵暗号方式で暗号化すればよい。
まず、暗号化部は、ｒ、（ｒｎ）ｎ∈［３］をそれぞれ有限体Ｚｐから一様ランダムに選択する。暗号化部は、Ｒを乗法群Ｇ３から一様ランダムに選択する。次に、暗号化部は、Ｅ＝ＲΩ＾（−ｒ）を計算する。次に、暗号化部は、ｃ０＝ｇ１＾ｒを計算する。次に、暗号化部は、
【数６６】
0005269209.tif 000057
を計算する。最後に、暗号化部は、Ｃ＝（Ｒ，Ｅ，ｃ０，（ｃｎ，（ａ），ｃｎ，（ｂ），ｃｎ，１，（ａ），ｃｎ，１，（ｂ））ｎ∈［３］）を暗号文として、データサーバに送信する。
【０４５７】
クエリ発行装置３００は、例えば以下のようにして、キーワードＷのクエリを発行する。
まず、クエリ発行部は、（πｍ）ｍ∈［３］をそれぞれ有限体Ｚｐから一様ランダムに選択する。次に、クエリ発行部は、
【数６７】
0005269209.tif 000058
を計算する。次に、クエリ発行部は、
【数６８】
0005269209.tif 000059
を計算する。最後に、クエリ発行部は、Ｔ＝（Ｉ１，ｋ’０，（ｋ’ｎ，（ａ），ｋ’ｎ，（ｂ））ｎ∈［３］）をクエリとしてデータサーバに送信する。
【０４５８】
データサーバは、例えば以下のようにして、暗号文Ｃ＝（Ｒ，Ｅ，ｃ０，（ｃｎ，（ａ），ｃｎ，（ｂ），ｃｎ，１，（ａ），ｃｎ，１，（ｂ））ｎ∈［３］）とクエリＴ＝（Ｉ１，ｋ’０，（ｋ’ｎ，（ａ），ｋ’ｎ，（ｂ））ｎ∈［３］）とを用いて秘匿検索をする。
【０４５９】
まず、検索部５５０は、
【数６９】
0005269209.tif 000060
を計算する。次に、検索部５５０は、Ｒ＝Ｒ’となるかを判定する。もしＲ＝Ｒ’であれば、検索部５５０は、キーワードがヒットしたと判定する。Ｒ＝Ｒ’でなければ、検索部５５０は、キーワードがヒットしなかったと判定する。
【０４６０】
このようにして、暗号化、クエリ生成、秘匿検索を行えば、暗号文とクエリの内部のキーワードが一致したときのみ、検索にヒットする。
【０４６１】
秘匿検索システム８００によれば、公開鍵すなわち公開パラメータは、グループＰＫＧが発行すればよく、グループ内の各ユーザが個別に発行する必要はない。よって、システムセットアップ時にユーザごとに作業する必要をなくすことができる。
また、公開パラメータはグループに１つであり、検索者ごとの公開鍵を必要としない。よって、暗号化の手間を軽減することができる。
また、検索者ごとに異なる暗号文を作成する必要がない。したがって、暗号文のサイズが検索者数に比例しない。
また、データの暗号化後にグループ内に検索者を付け加える場合でも、グループ公開パラメータに変更はないため、データの再暗号化が不要となるようにすることができるという効果がある。
【符号の説明】
【０４６２】
１００  公開パラメータ生成装置、１１１  第一生成元選択部、１１２  第二生成元選択部、１２１  乱数ω選択部、１２２  乱数α選択部、１２３  乱数β選択部、１２４  乱数θ選択部、１３１  公開元Ω算出部、１３２  公開元ａ算出部、１３３  公開元ｂ算出部、１４１  秘密元ｗ算出部、１４２  秘密元ａ算出部、１４３  秘密元ｂ算出部、１４４  秘密元ｙ算出部、１５１  公開パラメータ出力部、１５２  マスタ秘密鍵出力部、２００  ユーザ秘密鍵生成装置、２１１  マスタ秘密鍵入力部、２１２  秘密元ｗ記憶部、２１３  秘密元ａ記憶部、２１４  秘密元ｂ記憶部、２１５  秘密元ｙ記憶部、２２１  ユーザ識別子入力部、２２２  識別子記憶部、２２３  ユーザ秘密鍵出力部、２３１  乱数ρ選択部、２３２  副乱数ρ選択部、２３３  総積元Ｙ算出部、２４１  検索元算出部、２４２  検索元ａ算出部、２４３  検索元ｂ算出部、２５１  攪乱元算出部、２５２  攪乱元ａ算出部、２５３  攪乱元ｂ算出部、２６１  委任元算出部、２６２  副委任元算出部、３００  クエリ発行装置、３１１  ユーザ識別子記憶部、３１２  ユーザ秘密鍵要求出力部、３１３  ユーザ秘密鍵入力部、３２０  ユーザ秘密鍵記憶部、３２１  検索元記憶部、３２２  検索元ａ記憶部、３２３  検索元ｂ記憶部、３２４  攪乱元記憶部、３２５  攪乱元ａ記憶部、３２６  攪乱元ｂ記憶部、３２７  委任元記憶部、３２８  副委任元記憶部、３３０  共通処理部、３３１  乱数π選択部、３３２  総積元Ｆ算出部、３３３  総積元Ｈ算出部、３３４  質問元ａ算出部、３３５  質問元ｂ算出部、３４１  検索キーワード入力部、３４２  検索キーワード記憶部、３４３  クエリ出力部、３４４  結果入力部、３４５  結果出力部、３５０  クエリ生成部、３５１  質問元算出部、３６１  子ユーザ識別子入力部、３６２  子ユーザ識別子記憶部、３６３  子ユーザ秘密鍵出力部、３７０  子ユーザ秘密鍵生成部、３７１  副乱数π選択部、３７２  子検索元算出部、３７３  子総積元Ｆ算出部、３７４  子総積元Ｈ算出部、３７５  子攪乱元算出部、３７６  子攪乱元ａ算出部、３７７  子攪乱元ｂ算出部、３７８  子委任元算出部、３７９  子副委任元算出部、４００  暗号化装置、４１１  公開パラメータ入力部、４１２  権限範囲入力部、４１３  埋込みキーワード入力部、４１４  暗号文出力部、４２０  公開パラメータ記憶部、４２１  第一生成元記憶部、４２２  公開元Ω記憶部、４２３  公開元ａ記憶部、４２４  公開元ｂ記憶部、４３０  権限範囲記憶部、４３１  分節数記憶部、４３２  権限識別子記憶部、４４１  埋込みキーワード記憶部、４５０  暗号文生成部、４５１  乱数ｒ選択部、４５２  副乱数ｒ選択部、４５３  乱数元選択部、４５６  暗号元算出部、４５７  検証元算出部、４６１  総積元Ａ算出部、４６２  総積元Ｂ算出部、４６３  暗号元ａ算出部、４６４  暗号元ｂ算出部、４６５  暗号部分元ａ算出部、４６６  暗号部分元ｂ算出部、５００  検索装置、５１１  暗号文入力部、５２１  クエリ入力部、５２２  検索結果出力部、５３０  暗号文記憶部、５３１  分節数記憶部、５３２  乱数元記憶部、５３３  検証元記憶部、５３４  暗号元記憶部、５３５  暗号元ａ記憶部、５３６  暗号元ｂ記憶部、５３７  暗号部分元ａ記憶部、５３８  暗号部分元ｂ記憶部、５４���  クエリ記憶部、５４１  質問識別子記憶部、５４２  質問元記憶部、５４３  質問元ａ記憶部、５４４  質問元ｂ記憶部、５５０  検索部、５５１  暗号総積元Ａ算出部、５５２  ペアリング元Ａ算出部、５５３  暗号総積元Ｂ算出部、５５４  ペアリング元Ｂ算出部、５５５  ペアリング元算出部、５５６  比較元算出部、５５７  比較部、６００  ユーザＩＤ、６０１〜６０４  部分、６１０  権限範囲、８００  秘匿検索システム、８１０  グループ公開鍵生成装置、８２０  キーワード記憶装置、８３０  クエリ発行装置群、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９０７  スキャナ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信装置、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ファクシミリ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ。
【図１】
0005269209.tif 000061
【図２】
0005269209.tif 000062
【図３】
0005269209.tif 000063
【図４】
0005269209.tif 000064
【図５】
0005269209.tif 000065
【図６】
0005269209.tif 000066
【図７】
0005269209.tif 000067
【図８】
0005269209.tif 000068
【図９】
0005269209.tif 000069
【図１０】
0005269209.tif 000070
【図１１】
0005269209.tif 000071
【図１２】
0005269209.tif 000072
【図１３】
0005269209.tif 000073
【図１４】
0005269209.tif 000074
【図１５】
0005269209.tif 000075
【図１６】
0005269209.tif 000076
【図１７】
0005269209.tif 000077
【図１８】
0005269209.tif 000078
【図１９】
0005269209.tif 000079
【図２０】
0005269209.tif 000080
【図２１】
0005269209.tif 000081
【図２２】
0005269209.tif 000082
【図２３】
0005269209.tif 000083
【図２４】
0005269209.tif 000084
【図２５】
0005269209.tif 000085
【図２６】
0005269209.tif 000086