(57)【要約】【課題】結託簡素性を持つ関数型暗号を構成する。【解決手段】擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得てマスター公開鍵生成プログラムΣを生成し、それを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をｍｐｋ２とし、（Ｋ０，ρ０）をｍｓｋ２とする。Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたｍｐｋ１ｉおよびｍｓｋ１ｉを得、ｍｓｋ１ｉおよび関数ｆ２に対するｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る。暗号化では、穴開け可能擬似ランダム関数Ｆの鍵Ｋを得て暗号文生成プログラムη’を生成し、それを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η’）を得る。復号では、秘密鍵ｓｋｆ２から取り出したｉについてｃｔｉを得てｓｋｆ２（ｉ）でｃｔｉを復号する。【選択図】図２
2018112612.tif 000002
【特許請求の範囲】
【請求項１】
ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、前記マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、
（１）擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、（２）入力されたｉ∈［ｑ］について擬似乱数ｒｉ’＝Ｆ’（Ｋ０，（ρ０，ｉ））を得るステップと、前記ＰＫＦＥ１．ｓｅｔｕｐを実行して前記擬似乱数ｒｉ’でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成するステップと、前記マスター公開鍵ｍｐｋ１ｉを出力するステップと、を実行するマスター公開鍵生成プログラムΣを生成し、（３）前記マスター公開鍵生成プログラムΣを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をマスター公開鍵ｍｐｋ２として得、（Ｋ０，ρ０）をマスター秘密鍵ｍｓｋ２として得る第２関数型暗号のセットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐを実行するセットアップ装置と、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力とし、前記ＰＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉを得、前記ＦＥ１．ｋｅｙｇｅｎを実行して前記マスター秘密鍵ｍｓｋ１ｉおよび前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎを実行する鍵生成装置と、
（１）穴開け可能擬似ランダム関数Ｆの鍵Ｋを得、（２）入力されたｉ∈［ｑ］について難読化プログラムｓｘｉＯ（Σ）を実行して前記マスター公開鍵ｍｐｋ１ｉを得るステップと、入力されたｉ∈［ｑ］について擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、前記マスター公開鍵ｍｐｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＰＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムη’を得、（３）前記暗号文生成プログラムη’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η’）を得る前記第２関数型暗号の暗号化アルゴリズムＰＫＦＥ２．ｅｎｃを実行する暗号化装置と、
前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得、前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る前記第２関数型暗号の復号アルゴリズムＦＥ２．ｄｅｃを実行する復号装置と、
を有する暗号システム。
【請求項２】
ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、前記マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、
各ｉ∈［ｑ］について前記ＰＫＦＥ１．ｓｅｔｕｐを実行してマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成し、マスター公開鍵ｍｐｋ２＝（ｍｐｋ１１,…，ｍｐｋ１ｑ）およびマスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得る第２関数型暗号のセットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐを実行するセットアップ装置と、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力として前記ＦＥ１．ｋｅｙｇｅｎを実行して前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎを実行する鍵生成装置と、
入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、前記マスター公開鍵ｍｐｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＰＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムηを得、前記暗号文生成プログラムηを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η）を得る前記第２関数型暗号の暗号化アルゴリズムＰＫＦＥ２．ｅｎｃを実行する暗号化装置と、
前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得、前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る前記第２関数型暗号の復号アルゴリズムＦＥ２．ｄｅｃを実行する復号装置と、
を有する暗号システム。
【請求項３】
ｑが１以上の整数であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＳＫＦＥ１．ｅｎｃが、前記マスター秘密鍵ｍｓｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、
擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）を得る第２関数型暗号のセットアップアルゴリズムＳＫＦＥ２．ｓｅｔｕｐを実行するセットアップ装置と、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）、および所定の関数ｆ２を入力とし、前記ＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得、前記ＦＥ１．ｋｅｙｇｅｎを実行して前記マスター秘密鍵ｍｓｋ１ｉおよび前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎを実行する鍵生成装置と、
（１）穴開け可能擬似ランダム関数Ｆの鍵Ｋを得、（２）前記マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）およびｉ∈［ｑ］を入力とし、入力されたｉ∈［ｑ］について前記ＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得るステップと、擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、前記マスター秘密鍵ｍｓｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＳＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムμ’を得、（３）前記暗号文生成プログラムμ’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ’）を得る前記第２関数型暗号の暗号化アルゴリズムＳＫＦＥ２．ｅｎｃを実行する暗号化装置と、
前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得、前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る前記第２関数型暗号の復号アルゴリズムＦＥ２．ｄｅｃを実行する復号装置と、
を有する暗号システム。
【請求項４】
ｑが１以上の整数であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＳＫＦＥ１．ｅｎｃが、前記マスター秘密鍵ｍｓｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、
各ｉ∈［ｑ］について前記ＳＫＦＥ１．ｓｅｔｕｐを実行してマスター秘密鍵ｍｓｋ１ｉを生成し、マスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得る第２関数型暗号のセットアップアルゴリズムＳＫＦＥ２．ｓｅｔｕｐを実行するセットアップ装置と、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力として前記ＦＥ１．ｋｅｙｇｅｎを実行して前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎを実行する鍵生成装置と、
入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、前記マスター秘密鍵ｍｓｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＳＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムμを得、前記暗号文生成プログラムμを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ）を得る前記第２関数型暗号の暗号化アルゴリズムＳＫＦＥ２．ｅｎｃを実行する暗号化装置と、
前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得、前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る前記第２関数型暗号の復号アルゴリズムＦＥ２．ｄｅｃを実行する復号装置と、
を有する暗号システム。
【請求項５】
請求項１から４のいずれかの暗号システムであって、
前記第１関数型暗号が１−ｋｅｙ関数型暗号である、暗号システム。
【請求項６】
請求項１から５のいずれかの暗号システムであって、
前記難読化プログラムｃｔは、前記暗号文生成プログラムηをγ−ＳＸＩＯで識別不可能性難読化したものである、暗号システム。
【請求項７】
ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、  擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得る設定部と、
入力されたｉ∈［ｑ］について擬似乱数ｒｉ’＝Ｆ’（Ｋ０，（ρ０，ｉ））を得るステップと、前記ＰＫＦＥ１．ｓｅｔｕｐを実行して前記擬似乱数ｒｉ’でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成するステップと、前記マスター公開鍵ｍｐｋ１ｉを出力するステップと、を実行するマスター公開鍵生成プログラムΣを生成するプログラム生成部と、
前記マスター公開鍵生成プログラムΣを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をマスター公開鍵ｍｐｋ２として得、（Ｋ０，ρ０）をマスター秘密鍵ｍｓｋ２として得るマスター鍵生成部と、
を有するセットアップ装置。
【請求項８】
ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、
（１）擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、（２）入力されたｉ∈［ｑ］について擬似乱数ｒｉ’＝Ｆ’（Ｋ０，（ρ０，ｉ））を得るステップと、前記ＰＫＦＥ１．ｓｅｔｕｐを実行して前記擬似乱数ｒｉ’でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成するステップと、前記マスター公開鍵ｍｐｋ１ｉを出力するステップと、を実行するマスター公開鍵生成プログラムΣを生成し、（３）前記マスター公開鍵生成プログラムΣを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をマスター公開鍵ｍｐｋ２として得、（Ｋ０，ρ０）をマスター秘密鍵ｍｓｋ２として得る第２関数型暗号のセットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐが実行されており、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力とし、前記ＰＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉを得るマスター鍵生成部と、
前記ＦＥ１．ｋｅｙｇｅｎを実行して前記マスター秘密鍵ｍｓｋ１ｉおよび前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る秘密鍵生成部と、
を有する鍵生成装置。
【請求項９】
ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、前記マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、
（１）擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、（２）入力されたｉ∈［ｑ］について擬似乱数ｒｉ’＝Ｆ’（Ｋ０，（ρ０，ｉ））を得るステップと、前記ＰＫＦＥ１．ｓｅｔｕｐを実行して前記擬似乱数ｒｉ’でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成するステップと、前記マスター公開鍵ｍｐｋ１ｉを出力するステップと、を実行するマスター公開鍵生成プログラムΣを生成し、（３）前記マスター公開鍵生成プログラムΣを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をマスター公開鍵ｍｐｋ２として得、（Ｋ０，ρ０）をマスター秘密鍵ｍｓｋ２として得る第２関数型暗号のセットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐが実行されており、
穴開け可能擬似ランダム関数Ｆの鍵Ｋを得る設定部と、
入力されたｉ∈［ｑ］について難読化プログラムｓｘｉＯ（Σ）を実行して前記マスター公開鍵ｍｐｋ１ｉを得るステップと、入力されたｉ∈［ｑ］について擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、前記マスター公開鍵ｍｐｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＰＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムη’を得るプログラム生成部と、
前記暗号文生成プログラムη’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η’）を得る難読化部と、
を有する暗号化装置。
【請求項１０】
ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、前記マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、
（１）擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、（２）入力されたｉ∈［ｑ］について擬似乱数ｒｉ’＝Ｆ’（Ｋ０，（ρ０，ｉ））を得るステップと、前記ＰＫＦＥ１．ｓｅｔｕｐを実行して前記擬似乱数ｒｉ’でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成するステップと、前記マスター公開鍵ｍｐｋ１ｉを出力するステップと、を実行するマスター公開鍵生成プログラムΣを生成し、（３）前記マスター公開鍵生成プログラムΣを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をマスター公開鍵ｍｐｋ２として得、（Ｋ０，ρ０）をマスター秘密鍵ｍｓｋ２として得る第２関数型暗号のセットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐが実行されており、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力とし、前記ＰＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉを得、前記ＦＥ１．ｋｅｙｇｅｎを実行して前記マスター秘密鍵ｍｓｋ１ｉおよび前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎが実行されており、
（１）穴開け可能擬似ランダム関数Ｆの鍵Ｋを得、（２）入力されたｉ∈［ｑ］について難読化プログラムｓｘｉＯ（Σ）を実行して前記マスター公開鍵ｍｐｋ１ｉを得るステップと、入力されたｉ∈［ｑ］について擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、前記マスター公開鍵ｍｐｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＰＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムη’を得、（３）前記暗号文生成プログラムη’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η’）を得る前記第２関数型暗号の暗号化アルゴリズムＰＫＦＥ２．ｅｎｃが実行されており、
前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得る実行部と、
前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る復号部と、
を有する復号装置。
【請求項１１】
ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、前記マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、
各ｉ∈［ｑ］について前記ＰＫＦＥ１．ｓｅｔｕｐを実行してマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成し、マスター公開鍵ｍｐｋ２＝（ｍｐｋ１１,…，ｍｐｋ１ｑ）およびマスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得る第２関数型暗号のセットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐが実行されており、
入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、前記マスター公開鍵ｍｐｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＰＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムηを得るプログラム生成部と、
前記暗号文生成プログラムηを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η）を得る前記第２関数型暗号の暗号化アルゴリズムＰＫＦＥ２．ｅｎｃを実行する難読化部と、
を有する暗号化装置。
【請求項１２】
ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、前記マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、
各ｉ∈［ｑ］について前記ＰＫＦＥ１．ｓｅｔｕｐを実行してマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成し、マスター公開鍵ｍｐｋ２＝（ｍｐｋ１１,…，ｍｐｋ１ｑ）およびマスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得る第２関数型暗号のセットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐと、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力として前記ＦＥ１．ｋｅｙｇｅｎを実行して前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎと、
入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、前記マスター公開鍵ｍｐｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＰＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムηを得、前記暗号文生成プログラムηを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η）を得る前記第２関数型暗号の暗号化アルゴリズムＰＫＦＥ２．ｅｎｃと、が実行されており、
前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、いずれかのｉ∈［ｑ］について前記暗号文ｃｔｉを得る暗号文生成部と、
前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る前記第２関数型暗号の復号アルゴリズムＦＥ２．ｄｅｃを実行する復号部と、
を有する復号装置。
【請求項１３】
ｑが１以上の整数であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、
擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）を得る第２関数型暗号のセットアップアルゴリズムＳＫＦＥ２．ｓｅｔｕｐが実行されており、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）、および所定の関数ｆ２を入力とし、前記ＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得るマスター鍵生成部と、
前記ＦＥ１．ｋｅｙｇｅｎを実行して前記マスター秘密鍵ｍｓｋ１ｉおよび前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る秘密鍵生成部と、
を有する鍵生成装置。
【請求項１４】
ｑが１以上の整数であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＳＫＦＥ１．ｅｎｃが、前記マスター秘密鍵ｍｓｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、  擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）を得る第２関数型暗号のセットアップアルゴリズムＳＫＦＥ２．ｓｅｔｕｐが実行されており、
穴開け可能擬似ランダム関数Ｆの鍵Ｋを得る設定部と、
前記マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）およびｉ∈［ｑ］を入力とし、入力されたｉ∈［ｑ］について前記ＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得るステップと、擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、前記マスター秘密鍵ｍｓｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＳＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムμ’を得るプログラム生成部と、
前記暗号文生成プログラムμ’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ’）を得る難読化部と、
を有する暗号化装置。
【請求項１５】
ｑが１以上の整数であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＳＫＦＥ１．ｅｎｃが、前記マスター秘密鍵ｍｓｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、
擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）を得る第２関数型暗号のセットアップアルゴリズムＳＫＦＥ２．ｓｅｔｕｐと、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）、および所定の関数ｆ２を入力とし、前記ＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得、前記ＦＥ１．ｋｅｙｇｅｎを実行して前記マスター秘密鍵ｍｓｋ１ｉおよび前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎと、
（１）穴開け可能擬似ランダム関数Ｆの鍵Ｋを得、（２）前記マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）およびｉ∈［ｑ］を入力とし、入力されたｉ∈［ｑ］について前記ＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得るステップと、擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、前記マスター秘密鍵ｍｓｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＳＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムμ’を得、（３）前記暗号文生成プログラムμ’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ’）を得る前記第２関数型暗号の暗号化アルゴリズムＳＫＦＥ２．ｅｎｃと、が実行されており、
前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得る実行部と、
前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る復号部と、
を有する復号装置。
【請求項１６】
ｑが１以上の整数であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＳＫＦＥ１．ｅｎｃが、前記マスター秘密鍵ｍｓｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、
各ｉ∈［ｑ］について前記ＳＫＦＥ１．ｓｅｔｕｐを実行してマスター秘密鍵ｍｓｋ１ｉを生成し、マスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得る第２関数型暗号のセットアップアルゴリズムＳＫＦＥ２．ｓｅｔｕｐが実行されており、
入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、前記マスター秘密鍵ｍｓｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＳＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムμを得るプログラム生成部と、
前記暗号文生成プログラムμを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ）を得る前記第２関数型暗号の暗号化アルゴリズムＳＫＦＥ２．ｅｎｃを実行する難読化部と、
を有する暗号化装置。
【請求項１７】
ｑが１以上の整数であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＳＫＦＥ１．ｅｎｃが、前記マスター秘密鍵ｍｓｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、
各ｉ∈［ｑ］について前記ＳＫＦＥ１．ｓｅｔｕｐを実行してマスター秘密鍵ｍｓｋ１ｉを生成し、マスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得る第２関数型暗号のセットアップアルゴリズムＳＫＦＥ２．ｓｅｔｕｐと、
いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力として前記ＦＥ１．ｋｅｙｇｅｎを実行して前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎと、
入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、前記マスター秘密鍵ｍｓｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＳＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムμを得、前記暗号文生成プログラムμを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ）を得る前記第２関数型暗号の暗号化アルゴリズムＳＫＦＥ２．ｅｎｃと、が実行されており、
前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得る暗号文生成部と、
前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る前記第２関数型暗号の復号アルゴリズムＦＥ２．ｄｅｃを実行する復号部と、
を有する復号装置。
【請求項１８】
ｑが１以上の整数であり、ｒが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、前記マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、前記第１関数型暗号は公開鍵暗号を用いて構成されるｒ−ｋｅｙ公開鍵関数型暗号であり、
ＰＫＦＥ２．ｓｅｔｕｐが、各ｉ∈［ｑ］について前記ＰＫＦＥ１．ｓｅｔｕｐを実行してマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成し、マスター公開鍵ｍｐｋ２＝（ｍｐｋ１１,…，ｍｐｋ１ｑ）およびマスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得る第２関数型暗号のセットアップアルゴリズムであり、ＦＥ２．ｋｅｙｇｅｎが、いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力として前記ＦＥ１．ｋｅｙｇｅｎを実行して前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムであり、ＰＫＦＥ２．ｅｎｃが、入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、前記マスター公開鍵ｍｐｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＰＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムηを得、前記暗号文生成プログラムηを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η）を得る前記第２関数型暗号の暗号化アルゴリズムであり、ＦＥ２．ｄｅｃが、前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得、前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る前記第２関数型暗号の復号アルゴリズムであり、
前記ＰＫＦＥ２．ｓｅｔｕｐを用いて１−ｋｅｙ完全簡素性を持つ第３関数型暗号のセットアップアルゴリズムＰＫＦＥ３．ｓｅｔｕｐを実行し、マスター公開鍵ｍｐｋ３およびマスター秘密鍵ｍｓｋ３を生成するセットアップ装置と、
前記マスター秘密鍵ｍｓｋ３および所定の関数ｆ３を入力とし、前記ＦＥ２．ｋｅｙｇｅｎを用いて前記第３関数型暗号の鍵生成アルゴリズムＦＥ３．ｋｅｙｇｅｎを実行し、前記関数ｆ３に対する秘密鍵ｓｋｆ３を生成する鍵生成装置と、
前記マスター公開鍵ｍｐｋ３および前記メッセージｍを入力とし、前記ＰＫＦＥ２．ｅｎｃを用いて前記第３関数型暗号の暗号化アルゴリズムＰＫＦＥ３．ｅｎｃを実行し、前記メッセージｍの暗号文ｃ３を生成する暗号化装置と、
前記秘密鍵ｓｋｆ３および前記暗号文ｃ３を入力とし、前記ＦＥ２．ｄｅｃを用いて前記第３関数型暗号の復号アルゴリズムＦＥ３．ｄｅｃを実行し、前記メッセージｍの関数値ｆ３（ｍ）を生成する復号装置と、
を有する暗号システム。
【請求項１９】
ｑが１以上の整数であり、ｒが１以上の整数であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、前記マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、前記関数ｆ１に対する秘密鍵ｓｋｆ１を生成する前記第１関数型暗号の鍵生成アルゴリズムであり、ＳＫＦＥ１．ｅｎｃが、前記マスター秘密鍵ｍｓｋ１およびメッセージｍを入力とし、前記メッセージｍの暗号文ｃ１を生成する前記第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、前記秘密鍵ｓｋｆ１および前記暗号文ｃ１を入力とし、前記メッセージｍの関数値ｆ１（ｍ）を生成する前記第１関数型暗号の復号アルゴリズムであり、前記第１関数型暗号は秘密鍵暗号を用いて構成されるｒ−ｋｅｙ秘密鍵関数型暗号であり、
ＳＫＦＥ２．ｓｅｔｕｐが、各ｉ∈［ｑ］について前記ＳＫＦＥ１．ｓｅｔｕｐを実行してマスター秘密鍵ｍｓｋ１ｉを生成し、マスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得る第２関数型暗号のセットアップアルゴリズムであり、ＦＥ２．ｋｅｙｇｅｎが、いずれかのｉ∈［ｑ］、前記マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力として前記ＦＥ１．ｋｅｙｇｅｎを実行して前記関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る前記第２関数型暗号の鍵生成アルゴリズムであり、ＳＫＦＥ２．ｅｎｃが、入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、前記マスター秘密鍵ｓｐｋ１ｉ、前記メッセージｍ、および前記擬似乱数ｒｉを入力として前記ＳＫＦＥ１．ｅｎｃを実行して前記擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムμを得、前記暗号文生成プログラムμを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ）を得る前記第２関数型暗号の暗号化アルゴリズムであり、ＦＥ２．ｄｅｃが、前記秘密鍵ｓｋｆ２および前記難読化プログラムｃｔを入力とし、前記秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について前記暗号文ｃｔｉを得、前記秘密鍵ｓｋｆ２（ｉ）および前記暗号文ｃｔｉを入力として前記ＦＥ１．ｄｅｃを実行して復元値を得る前記第２関数型暗号の復号アルゴリズムであり、
前記ＳＫＦＥ２．ｓｅｔｕｐを用いて１−ｋｅｙ完全簡素性を持つ第３関数型暗号のセットアップアルゴリズムＳＫＦＥ３．ｓｅｔｕｐを実行し、マスター秘密鍵ｍｓｋ３を生成するセットアップ装置と、
前記マスター秘密鍵ｍｓｋ３および所定の関数ｆ３を入力とし、前記ＦＥ２．ｋｅｙｇｅｎを用いて前記第３関数型暗号の鍵生成アルゴリズムＦＥ３．ｋｅｙｇｅｎを実行し、前記関数ｆ３に対する秘密鍵ｓｋｆ３を生成する鍵生成装置と、
前記マスター秘密鍵ｍｓｋ３および前記メッセージｍを入力とし、前記ＳＫＦＥ２．ｅｎｃを用いて前記第３関数型暗号の暗号化アルゴリズムＰＫＦＥ３．ｅｎｃを実行し、前記メッセージｍの暗号文ｃ３を生成する暗号化装置と、
前記秘密鍵ｓｋｆ３および前記暗号文ｃ３を入力とし、前記ＦＥ２．ｄｅｃを用いて前記第３関数型暗号の復号アルゴリズムＦＥ３．ｄｅｃを実行し、前記メッセージｍの関数値ｆ３（ｍ）を生成する復号装置と、
を有する暗号システム。
【請求項２０】
請求項１８の前記暗号システムが有する前記暗号化装置を用い、入力されたプログラムを識別不可能性難読化して難読化プログラムを生成する難読化装置。
【請求項２１】
請求項１８の前記暗号システムが有する前記復号装置を用い、請求項２０の前記難読化装置で生成された前記難読化プログラムを実行する実行装置。
【請求項２２】
請求項７のセットアップ装置、請求項８または１３の鍵生成装置、請求項９、１１、１４、または１６の暗号化装置、請求項１０，１２、１５または１７の復号装置、請求項２０の難読化装置、もしくは請求項２１の実行装置の機能をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、関数型暗号技術に関し、特に、識別不可能性難読化技術に関する。
【背景技術】
【０００２】
「難読化(obfuscation)」とは、入力されたプログラムを変換し、異なるプログラムに変換することをいう。特に、同一の機能をもつ２つの異なるプログラムを変換したとき、変換後のプログラムがどちらのプログラムを変換して得られたものかを判別できない「難読化」を「識別不可能性難読化(Indistinguishability Obfuscation)」という（例えば、非特許文献１等参照）。このような難読化を行う識別不可能性難読化器の構成方法の一つに、一般的な暗号機能を用いた構成方法が知られている（例えば、非特許文献２から５等参照）。例えば、非特許文献２，３に記載された構成方法では、1-keyweakly-succinct 公開鍵関数型暗号を利用して識別不可能性難読化器を構成している。また、非特許文献５に記載された構成方法では、unbounded-key non-succinct 秘密鍵関数型暗号と（標準的な）公開鍵暗号を利用して識別不可能性難読化器を構成している（用語の定義は後述）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Sanjam Garg, Craig Gentry, Shai Halevi, Mariana Raykova, Amit Sahai, and Brent Waters, “Candidate indistinguishability obfuscation and functional encryption for all circuits,” In 54th FOCS, pages 40-49. IEEE Computer Society Press, October 2013.
【非特許文献２】Prabhanjan Ananth and Abhishek Jain, “Indistinguishability obfuscation from compact functional encryption,” In Rosario Gennaro and Matthew J. B. Robshaw, editors, CRYPTO 2015, Part I, volume 9215 of LNCS, pages 308-326. Springer, Heidelberg, August 2015.
【非特許文献３】Nir Bitansky and Vinod Vaikuntanathan, “Indistinguishability obfuscation from functional encryption,” In Guruswami [Gur15], pages 171-190.
【非特許文献４】Prabhanjan Ananth, Abhishek Jain, and Amit Sahai, “Indistinguishability obfuscation from functional encryption for simple functions,” Cryptology ePrint Archive, Report 2015/730, 2015.
【非特許文献５】Nir Bitansky, Ryo Nishimaki, Alain Passel`egue, and Daniel Wichs, “From cryptomania to obfustopia through secret-key functional encryption,” IACR Cryptology ePrint Archive, 2016:558, 2016.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来の構成方法では、暗号化回路のサイズが秘密鍵に対応する関数ｆのサイズに依存する関数型暗号（1-key weakly-succinct 公開鍵関数型暗号やunbounded-key non-succinct 秘密鍵関数型暗号など）を用いて識別不可能性難読化器を構成していた。しかし、暗号化回路のサイズの関数ｆのサイズへの依存性がより小さな結託簡素性を持つ関数型暗号を用いることができれば、識別不可能性難読化に必要な演算コストや記憶容量をさらに低減できる。
本発明はこのような点に鑑みてなされたものであり、結託簡素性を持つ関数型暗号を提供することを目的とする。
【課題を解決するための手段】
【０００５】
第２関数型暗号のセットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐ、鍵生成アルゴリズムＦＥ２．ｋｅｙｇｅｎ、暗号化アルゴリズムＰＫＦＥ２．ｅｎｃ、および復号アルゴリズムＦＥ２．ｄｅｃを実行する。ただし、ｑが１以上の整数であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、関数ｆ１に対する秘密鍵ｓｋｆ１を生成する第１関数型暗号の鍵生成アルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、メッセージｍの暗号文ｃ１を生成する第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、秘密鍵ｓｋｆ１および暗号文ｃ１を入力とし、メッセージｍの関数値ｆ１（ｍ）を生成する第１関数型暗号の復号アルゴリズムである。
【０００６】
セットアップアルゴリズムＰＫＦＥ２．ｓｅｔｕｐでは、（１）擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０を得、（２）入力されたｉ∈［ｑ］について擬似乱数ｒｉ’＝Ｆ’（Ｋ０，（ρ０，ｉ））を得るステップと、ＰＫＦＥ１．ｓｅｔｕｐを実行して擬似乱数ｒｉ’でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成するステップと、マスター公開鍵ｍｐｋ１ｉを出力するステップと、を実行するマスター公開鍵生成プログラムΣを生成し、（３）マスター公開鍵生成プログラムΣを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をマスター公開鍵ｍｐｋ２として得、（Ｋ０，ρ０）をマスター秘密鍵ｍｓｋ２として得る。
【０００７】
ＦＥ２．ｋｅｙｇｅｎでは、いずれかのｉ∈［ｑ］、マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力とし、ＰＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉを得、ＦＥ１．ｋｅｙｇｅｎを実行してマスター秘密鍵ｍｓｋ１ｉおよび関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得る。
【０００８】
暗号化アルゴリズムＰＫＦＥ２．ｅｎｃでは、（１）穴開け可能擬似ランダム関数Ｆの鍵Ｋを得、（２）入力されたｉ∈［ｑ］について難読化プログラムｓｘｉＯ（Σ）を実行してマスター公開鍵ｍｐｋ１ｉを得るステップと、入力されたｉ∈［ｑ］について擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、マスター公開鍵ｍｐｋ１ｉ、メッセージｍ、および擬似乱数ｒｉを入力としてＰＫＦＥ１．ｅｎｃを実行して擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行する暗号文生成プログラムη’を得、（３）暗号文生成プログラムη’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η’）を得る。
【０００９】
復号アルゴリズムＦＥ２．ｄｅｃでは、秘密鍵ｓｋｆ２および難読化プログラムｃｔを入力とし、秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について暗号文ｃｔｉを得、秘密鍵ｓｋｆ２（ｉ）および暗号文ｃｔｉを入力としてＦＥ１．ｄｅｃを実行して復元値を得る。
【発明の効果】
【００１０】
これにより、結託簡素性を持つ関数型暗号を構成できる。
【図面の簡単な説明】
【００１１】
【図１】図１はｑ−ｋｅｙ結託簡素性を持つ関数型暗号の暗号システムを例示したブロック図である。
【図２】図２はｑ−ｋｅｙ結託簡素性を持つ関数型暗号の暗号システムを例示したブロック図である。
【図３】図３は１−ｋｅｙ完全簡素性を持つ関数型暗号の暗号システムを例示したブロック図である。
【図４】図４は１−ｋｅｙ完全簡素性公開鍵関数型暗号を利用した識別不可能性難読化装置を例示したブロック図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態を説明する。
［前提］
まず実施形態の前提事項を説明する。
「難読化(obfuscation)」とは、入力されたプログラムを変換し、異なるプログラムに変換することをいう（例えば、非特許文献１等参照）。変換後のプログラムの機能は変換前のプログラムの機能と完全に同一である。変換後のプログラムは変換前のプログラムに関する情報を漏らさない。特に「識別不可能性難読化(Indistinguishability Obfuscation)」とは、同一の機能をもつ２つの異なるプログラムを変換したとき、変換後のプログラムがどちらのプログラムを変換して得られたものかを判別できない「難読化」を意味する。「難読化器(Obfuscator)」とは難読化を行う装置を意味し、「識別不可能性難読化器(Indistinguishability Obfuscator(iO))」とは識別不可能性難読化を行う装置を意味する。確率的多項式時間機械ｉＯがプログラムによって記述される回路が属する回路族｛Ｃλ｝λ∈Ｎに対する「識別不可能性難読化器（Indistinguishability Obfuscator）」であるとは、「機能性」および「識別不可能性」を満たすことである。
「機能性」とは、任意のセキュリティパラメータλ∈Ｎ、任意のプログラムＣ∈｛Ｃλ｝λ∈Ｎ、任意の入力ｘに対して以下を満たすことを意味する。ただし、Ｎは自然数を表し、Ｐｒ［α］は事象αの確率を表し、ｉＯ（Ｃ）はｉＯによってＣを難読化することを表し、α←βはβの結果をαとすることを表す。
Ｐr[C’(x)=C(x):C’←iO(C)]=1
すなわち、ｉＯが機能性を満たすとは、確率的多項式時間機械ｉＯで任意のプログラムＣをプログラムＣ’に変換したとき、入力ｘに対するプログラムＣ’の出力Ｃ’（ｘ）とプログラムＣの出力Ｃ（ｘ）とが等しくなることを意味する。
「識別不可能性」とは、任意の多項式サイズ識別器Ｄに対して、無視できる関数δ（・）が存在して、任意のセキュリティパラメータλ∈Ｎ，サイズが等しい任意のプログラム対（回路対）Ｃ０，Ｃ１∈Ｃλで任意の入力ｘについてＣ０（ｘ）＝Ｃ１（ｘ）が成立するものに対し、以下を満たすことを意味する。
Pr[D(iO(C0))=1]-Pr[D(iO(C1))=1]≦δ(λ)
すなわち、ｉＯが識別不可能性を満たすとは、ｉＯ（Ｃ０）の判別結果Ｄ（ｉＯ（Ｃ０））（ｉＯ（Ｃ０）がＣ０を難読化して得られたものなのかＣ１を難読化して得られたものなのかの判別結果）が１となる（例えば、ｉＯ（Ｃ０）がＣ１を難読化して得られたものであると判別される）確率と、ｉＯ（Ｃ１）の判別結果Ｄ（ｉＯ（Ｃ１））が１となる（例えば、ｉＯ（Ｃ１）がＣ１を難読化して得られたものであると判別される）確率との違いが無視できることを意味する。
【００１３】
「公開鍵関数型暗号（PKFE：Public-Key Functional Encryption）」とは、マスター公開鍵を用いて暗号化を行う関数型暗号（Functional Encryption）を意味する。以下に公開鍵関数型暗号のアルゴリズム(PKFE.setup, FE.keygen, PKFE.enc, FE.dec)を示す（例えば、非特許文献５、参考文献１（Dan Boneh, Amit Sahai, Brent Waters, "Functional Encryption: Definitions and Challenges," Proceedings of Theory of Cryptography Conference (TCC) 2011）等参照）。
セットアップアルゴリズム（ＰＫＦＥ．ｓｅｔｕｐ）：鍵の長さ（ビット長）を表す任意のセキュリティパラメータλ∈Ｎを入力とし、マスター公開鍵ｍｐｋ（システムパラメータ）とマスター秘密鍵ｍｓｋを生成する。
(mpk, msk) ← PKFE.setup(1λ)
鍵生成アルゴリズム（ＦＥ．ｋｅｙｇｅｎ）：マスター秘密鍵ｍｓｋおよび関数ｆを入力とし、関数ｆに対する秘密鍵ｓｋｆを生成する。関数ｆは任意の関数でよく、例えば、f（ｍ）＝ｍまたはf（ｍ）＝⊥を満たす関数である。ただし、⊥はエラーを表す。
skf ← FE.keygen(msk,f)
暗号化アルゴリズム（ＰＫＦＥ．ｅｎｃ）：マスター公開鍵ｍｐｋとメッセージｍを入力とし、暗号文ｃを生成する。
c ← PKFE.enc(mpk, m)
復号アルゴリズム（ＦＥ．ｄｅｃ）：関数ｆに対する秘密鍵ｓｋｆと暗号文ｃを入力とし、メッセージｍの関数値ｆ（ｍ）を生成する。
f(m) ← FE.dec(skf,c)
【００１４】
「秘密鍵関数型暗号（SKFE：Secret-Key Functional Encryption）」とは、マスター秘密鍵を用いて暗号化を行う関数型暗号を意味する。以下に秘密鍵関数型暗号のアルゴリズム(SKFE.setup, FE.keygen, SKFE.enc, FE.dec)を示す（例えば、非特許文献５等参照）。
セットアップアルゴリズム（ＳＫＦＥ．ｓｅｔｕｐ）：鍵の長さ（ビット長）を表す任意のセキュリティパラメータλ∈Ｎを入力とし、マスター秘密鍵ｍｓｋを生成する。
msk ← SKFE.setup(1λ)
鍵生成アルゴリズム（ＦＥ．ｋｅｙｇｅｎ）：マスター秘密鍵ｍｓｋおよび関数ｆを入力とし、関数ｆに対する秘密鍵ｓｋｆを生成する。関数ｆは任意の関数でよく、例えば、f（ｍ）＝ｍまたはf（ｍ）＝⊥を満たす関数である。ただし、⊥はエラーを表す。
skf ← FE.keygen(msk,f)
暗号化アルゴリズム（ＳＫＦＥ．ｅｎｃ）：マスター秘密鍵ｍｓｋとメッセージｍを入力とし、暗号文ｃを生成する。
c ← SKFE.enc(msk, m)
復号アルゴリズム（ＦＥ．ｄｅｃ）：関数ｆに対する秘密鍵ｓｋｆと暗号文ｃを入力とし、メッセージｍの関数値ｆ（ｍ）を生成する。
f(m) ← FE.dec(skf,c)
【００１５】
「1-key(single-key)方式」とは、鍵生成アルゴリズムによる鍵の発行回数（すなわち、攻撃者による鍵の入手回数）が１回の場合には安全性が保たれるが、鍵の発行回数が２回以上の場合には安全性が保たれるとは限らない暗号方式をいう。
「bounded-key方式」とは、鍵生成アルゴリズムによる鍵の発行回数が事前（セットアップアルゴリズムの実行時）に定められた回数（複数回数）以下の場合には安全性が保たれるが、鍵の発行回数が事前に定められた回数を超えた場合には安全性が保たれるとは限らない暗号方式をいう。特に、鍵生成アルゴリズムによる鍵の発行回数が事前に定められたｑ（ただし、ｑ≧２）以下の場合安全性が保たれるが、鍵の発行回数がｑを超えた場合には安全性が保たれるとは限らない暗号方式を「q-Key方式」という。
「unbounded-key方式」とは、鍵生成アルゴリズムによる鍵の発行回数にかかわらず、安全性が保たれる暗号方式をいう。
【００１６】
「non-succinct方式」とは、暗号化アルゴリズムによって記述される暗号化回路のサイズ｜Ｅ｜が以下の関係を満たす暗号方式をいう。ただし、ｐｏｌｙ（α）はαの多項式を表し、ｎはメッセージｍの長さ（ビット長）を表し、｜ｆ｜は上述の関数ｆのサイズを表す。
|E|=poly(λ,n,|f|)
「weakly-succinct方式」とは、暗号化アルゴリズムによって記述される暗号化回路のサイズ｜Ｅ｜が以下の関係を満たす暗号方式をいう。ただし、εは０＜ε＜１を満たす。
|E|=poly(λ,n)・|f|1-ε
「succinct（完全簡素性）方式」とは、暗号化アルゴリズムによって記述される暗号化回路のサイズ｜Ｅ｜が以下の関係を満たす暗号方式をいう。
|E|=poly(λ,n)
「q-key collusion-succinctness（ｑ−ｋｅｙ結託簡素性）方式」とは、暗号化アルゴリズムによって記述される暗号化回路のサイズ｜Ｅ｜が以下の関係を満たす暗号方式をいう。ただし、ｑは鍵生成アルゴリズムによる鍵の発行回数を表し、εは０＜ε＜１を満たす。
|E|=poly(λ,n,|f|)・q1-ε
【００１７】
上記で定義した「α方式」の関数型暗号を「α関数型暗号」と呼び、「α方式」の公開鍵関数型暗号を「α公開鍵関数型暗号」と呼び、「α方式」の秘密鍵関数型暗号を「α秘密鍵関数型暗号」と呼ぶことにする。例えば、1-key方式の関数型暗号を「1-key関数型暗号」と呼び、1-key方式の公開鍵関数型暗号を「1-key公開鍵関数型暗号」と呼び、1-key方式の秘密鍵関数型暗号を「1-key秘密鍵関数型暗号」と呼ぶ。また、上記で定義した複数の方式の用語を組み合わせることで、それらの方式の性質を兼ね備える暗号方式を表現することにする。例えば、1-key方式およびweakly-succinct方式の両方の性質を備える公開鍵関数型暗号を「1-key weakly-succinct 公開鍵関数型暗号」と呼び、bounded-key方式およびnon-succinct方式の両方の性質を備える秘密鍵関数型暗号を「bounded-key non-succinct 秘密鍵関数型暗号」と呼び、1-key方式およびsuccinct方式の両方の性質を備える秘密鍵関数型暗号を「1-key succinct 秘密鍵関数型暗号」と呼ぶ。
【００１８】
「Strong Exponentially-Efficient Indistinguishability Obfuscator(SXIO)」とは、難読化アルゴリズムを実現する回路サイズ｜ｉＯ｜が以下を満たす識別不可能性難読化器ｉＯをいう（例えば、非特許文献５等参照）。ただし、λはセキュリティパラメータを表し、｜Ｃ｜は難読化しようとするプログラムＣによって記述される回路のサイズを表し、ｎは当該回路への入力値の大きさ（ビット数）を表し、εは０＜ε＜１を満たす。なお、２ｎは暗号化アルゴリズムへの入力値の総数となる。
|iO|=poly(λ,|C|)・2n(1-ε)
【００１９】
「γ-compressingStrong Exponentially-Efficient Indistinguishability Obfuscator(γ-SXIO)」とは、任意のセキュリティパラメータλ∈ＮおよびプログラムＣ∈｛Ｃλ｝λ∈Ｎについて、入力（１λ，Ｃ）に対するＳＸＩＯの実行時間が高々2nγ・poly(λ,|C|)である（Non-trivial time efficiency）識別不可能性難読化器ｉＯをいう（例えば、非特許文献５等参照）。ただし、γは０＜γ＜１を満たす。
【００２０】
［原理］
次に原理を説明する。
＜ｑ−ｋｅｙ結託簡素性公開鍵関数型暗号（q-key collusion-succinctness PKFE）(I)＞
１−ｋｅｙ公開鍵関数型暗号である第１関数型暗号とγ−ＳＸＩＯとを用い、以下のようにｑ−ｋｅｙ結託簡素性公開鍵関数型暗号である第２関数型暗号(PKFE2.setup, FE2.keygen, PKFE2.enc, FE2.dec)を構成する。
ただし、ｑが１以上の整数（例えば、ｑは２以上の整数）であり、ＰＫＦＥ１．ｓｅｔｕｐが、マスター公開鍵ｍｐｋ１およびマスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、関数ｆ１に対する秘密鍵ｓｋｆ１を生成する第１関数型暗号の鍵生成アルゴリズムであり、ＰＫＦＥ１．ｅｎｃが、マスター公開鍵ｍｐｋ１およびメッセージｍを入力とし、メッセージｍの暗号文ｃ１を生成する第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、秘密鍵ｓｋｆ１および暗号文ｃ１を入力とし、メッセージｍの関数値ｆ１（ｍ）を生成する第１関数型暗号の復号アルゴリズムである。
参考文献２（Sergey Gorbunov, Vinod Vaikuntanathan, and Hoeteck Wee, “Functional encryption with bounded collusions via multi-party computation,” In Reihaneh Safavi-Naini and Ran Canetti, editors, CRYPTO 2012, volume 7417 of LNCS, pages 162-179. Springer, Heidelberg, August 2012）には、公開鍵暗号からｒ−ｋｅｙ公開鍵関数型暗号を構成する方法が開示されている（ただし、ｒは１以上の整数であり、例えば、ｒは２以上の整数である）。ｒ−ｋｅｙ公開鍵関数型暗号は１−ｋｅｙ公開鍵関数型暗号でもあるため、参考文献２で得られるｒ−ｋｅｙ公開鍵関数型暗号を第１関数型暗号として用いることができる。また、非特許文献５には、公知の１−ｋｅｙ完全簡素性秘密鍵関数型暗号から１／２≦γ≦１を満たすγ−ＳＸＩＯを構成する方法が開示されている。
【００２１】
セットアップアルゴリズム（ＰＫＦＥ２．ｓｅｔｕｐ（１λ））：
ＰＫＦＥ２．ｓｅｔｕｐ（１λ）は、λを入力として各ｉ∈［ｑ］についてＰＫＦＥ１．ｓｅｔｕｐを実行してマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成する。すなわち、ＰＫＦＥ２．ｓｅｔｕｐは、ｑ対の（ｍｐｋ１ｉ，ｍｓｋ１ｉ）（ただし、ｉ∈［ｑ］であり、［ｑ］は｛１，２，…，ｑ｝を意味する）を生成する。
(mpk1i,msk1i)←PKFE1.setup(1λ) for i∈[q]
ただし、λは正整数のセキュリティパラメータであり、ＰＫＦＥ１．ｓｅｔｕｐは、各ｉ∈［ｑ］についてランダム化した（ｍｐｋ１ｉ，ｍｓｋ１ｉ）を得る。ＰＫＦＥ２．ｓｅｔｕｐは、各ｉ∈［ｑ］について得られた（ｍｐｋ１ｉ，ｍｓｋ１ｉ）から、マスター公開鍵（システムパラメータ）ｍｐｋ２＝（ｍｐｋ１１,…，ｍｐｋ１ｑ）およびマスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得て出力する。
【００２２】
鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ））：
ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、いずれかのｉ∈［ｑ］、マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力としてＦＥ１．ｋｅｙｇｅｎを実行して関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、関数ｆ２に対する秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得て出力する。
skf2(i)←FE1.keygen(msk1i,f2)
【００２３】
暗号化アルゴリズム（ＰＫＦＥ２．ｅｎｃ（ｍｐｋ２，ｍ））：
ＰＫＦＥ２．ｅｎｃ（ｍｐｋ２，ｍ）は、穴開け可能擬似ランダム関数Ｆの鍵Ｋを生成し、暗号文生成プログラムηを生成し、当該暗号文生成プログラムηを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η）を得る。ただし、ＰＫＦＥ２．ｅｎｃの暗号文生成プログラムηは、入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、マスター公開鍵ｍｐｋ１ｉ、メッセージｍ、および擬似乱数ｒｉを入力としてＰＫＦＥ１．ｅｎｃを実行して擬似乱数ｒｉでランダム化された暗号文ｃｔｉ（ただし、ｃｔｉはメッセージｍの暗号文）を得るステップと、を実行するプログラムである。なお、穴開け可能擬似ランダム関数Ｆは、鍵Ｋおよびインデックスｉを入力として、それらに対応する擬似乱数Ｆ（Ｋ，ｉ）を出力する。穴開け可能擬似ランダム関数の概念は、例えば、参考文献３（Amit Sahai, Brent Waters,“How to Use Indistinguishability Obfuscation: Deniable Encryption, and More,”Proceeding STOC '14 Proceedings of the 46th Annual ACM Symposium on Theory of Computing, Pages 475-484）等に開示されている。また穴開け可能擬似ランダム関数の具体的構成は、参考文献４（Dan Boneh, Brent Waters, “Constrained Pseudorandom Functions and Their Applications,” Advances in Cryptology - ASIACRYPT 2013, Volume 8270 of the series Lecture Notes in Computer Science pp 280-300）などに開示されている。なお、前述の擬似ランダム関数Ｆ’として穴開け可能擬似ランダム関数Ｆを用いてもよい。
【００２４】
≪ＰＫＦＥ２．ｅｎｃの暗号文生成プログラムη≫
Hardwired：K, m, mpk11,…,mpk1q
Input：或るインデックスｉ∈［ｑ］
１．ri=F(K,i)を計算する。
２．暗号文cti←PKFE1.enc(mpk1i,m;ri)を生成する。
３．暗号文ctiを出力する。
また、難読化プログラムｃｔ＝ｓｘｉＯ（η）は、当該暗号文生成プログラムηをγ−ＳＸＩＯで識別不可能性難読化したものである。
【００２５】
復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））：
ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）および難読化プログラムｃｔ＝ｓｘｉＯ（η）を入力とし、秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］をｃｔ＝ｓｘｉＯ（η）に入力してｃｔ＝ｓｘｉＯ（η）を実行することで暗号文ｃｔｉを得る。難読化の「機能性」により、難読化プログラムｃｔにｉを入力することで、暗号文生成プログラムηのｉに対する出力である暗号文ｃｔｉが得られる。さらにＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２から取りだした秘密鍵ｓｋｆ２（ｉ）および得られた暗号文ｃｔｉを入力としてＦＥ１．ｄｅｃを実行して復元値ｍ’を得て出力する。
m’←FE1.dec(skf2(i),cti)
正しく復号が行われた場合にはｍ’＝ｆ２（ｍ）となる。
【００２６】
＜ｑ−ｋｅｙ結託簡素性公開鍵関数型暗号 (II)＞
ｑ−ｋｅｙ結託簡素性公開鍵関数型暗号の他の構成を示す。１−ｋｅｙ公開鍵関数型暗号である第１関数型暗号とγ−ＳＸＩＯとを用い、以下のようにｑ−ｋｅｙ結託簡素性公開鍵関数型暗号である第２関数型暗号(PKFE2.setup, FE2.keygen, PKFE2.enc, FE2.dec)を構成する。
【００２７】
セットアップアルゴリズム（ＰＫＦＥ２．ｓｅｔｕｐ（１λ））：
ＰＫＦＥ２．ｓｅｔｕｐ（１λ）は、まず、λを入力として擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０∈｛０，１｝λを得る。鍵Ｋ０およびランダムビット列ρ０は、例えば、ランダムに選択される。次に、ＰＫＦＥ２．ｓｅｔｕｐ（１λ）は、マスター公開鍵生成プログラムΣを生成する。ただし、ＰＫＦＥ２．ｓｅｔｕｐのマスター公開鍵生成プログラムΣは、入力されたｉ∈［ｑ］について擬似乱数ｒｉ’＝Ｆ’（Ｋ０，（ρ０，ｉ））を得るステップと、ＰＫＦＥ１．ｓｅｔｕｐを実行して擬似乱数ｒｉ’でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成するステップと、マスター公開鍵ｍｐｋ１ｉを出力するステップと、を実行するプログラムである。なお、擬似ランダム関数Ｆ’は、鍵Ｋ０およびインデックス（ρ０，ｉ）を入力として、それらに対応する擬似乱数Ｆ’（Ｋ０，（ρ０，ｉ））を出力する。インデックス（ρ０，ｉ）は（ρ０，ｉ）から一義的に決まり、例えばρ０とｉとのビット結合値である。さらに、ＰＫＦＥ２．ｓｅｔｕｐ（１λ）は、マスター公開鍵生成プログラムΣを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をマスター公開鍵ｍｐｋ２として得て出力し、（Ｋ０，ρ０）をマスター秘密鍵ｍｓｋ２として得て出力する。
mpk2:=sxiO(Σ)
msk2:=(K0,ρ0)
【００２８】
≪ＰＫＦＥ２．ｓｅｔｕｐのマスター公開鍵生成プログラムΣ≫
Hardwired：K0, ρ0
Input：或るインデックスｉ∈［ｑ］
１．ri’=F’(K0,(ρ0,i))を計算する。
２．鍵対(mpk1i,msk1i)←PKFE1.setup(1λ;ri’)を生成する。
３．マスター公開鍵mpk1iを出力する。
【００２９】
鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ））：
ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、λ、いずれかのｉ∈［ｑ］、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）、および所定の関数ｆ２を入力とし、ＰＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉを得る。
(mpk1i, msk1i)←PKFE1.setup(1λ;F’(K0,(ρ0,i)))
またＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、ＦＥ１．ｋｅｙｇｅｎを実行してマスター秘密鍵ｍｓｋ１ｉおよび関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成する。
skf2(i)←FE1.keygen(msk1i,f2)
さらにＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、関数ｆ２に対する秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得て出力する。
skf2:=(skf2(i),i)
【００３０】
暗号化アルゴリズム（ＰＫＦＥ２．ｅｎｃ（ｍｐｋ２，ｍ））：
ＰＫＦＥ２．ｅｎｃ（ｍｐｋ２，ｍ）は、穴開け可能擬似ランダム関数Ｆの鍵Ｋを得る。例えば、鍵Ｋはランダムに生成される。またＰＫＦＥ２．ｅｎｃ（ｍｐｋ２，ｍ）は、暗号文生成プログラムη’を生成する。ただし、ＰＫＦＥ２．ｅｎｃの暗号文生成プログラムη’は、入力されたｉ∈［ｑ］について難読化プログラムｓｘｉＯ（Σ）を実行してマスター公開鍵ｍｐｋ１ｉを得るステップと、入力されたｉ∈［ｑ］について擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、マスター公開鍵ｍｐｋ１ｉ、メッセージｍ、および擬似乱数ｒｉを入力としてＰＫＦＥ１．ｅｎｃを実行して擬似乱数ｒｉでランダム化された暗号文ｃｔｉ（ただし、ｃｔｉはメッセージｍの暗号文）を得るステップと、を実行するプログラムである。難読化の「機能性」より、或るｉ∈［ｑ］について難読化プログラムｓｘｉＯ（Σ）を実行して得られる値ｓｘｉＯ（Σ）（ｉ）は、このｉ∈［ｑ］についてマスター公開鍵生成プログラムΣを実行して得られる値Σ（ｉ）に等しい。さらにＰＫＦＥ２．ｅｎｃ（ｍｐｋ２，ｍ）は、暗号文生成プログラムη’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η’）を得て出力する。
【００３１】
≪ＰＫＦＥ２．ｅｎｃの暗号文生成プログラムη’≫
Hardwired：K, m, mpk2=sxiO(Σ)
Input：或るインデックスi∈[q]
１．mpk1i←sxiO(Σ)(i)
２．ri=F(K,i)を計算する。
３．暗号文cti←PKFE1.enc(mpk1i,m;ri)を生成する。
４．暗号文ctiを出力する。
【００３２】
復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））：
ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）および難読化プログラムｃｔを入力とし、秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について暗号文ｃｔｉを得る。難読化の「機能性」により難読化プログラムｃｔにｉを入力することで、暗号文生成プログラムη’のｉに対する出力である暗号文ｃｔｉが得られる。
cti←ct(i)
またＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２から取り出した秘密鍵ｓｋｆ２（ｉ）および得られた暗号文ｃｔｉを入力としてＦＥ１．ｄｅｃを実行して復元値ｍ’を得て出力する。
m’←FE1.dec(skf2(i),cti)
【００３３】
＜ｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号（q-key collusion-succinctness SKFE）(I)＞
１−ｋｅｙ秘密鍵関数型暗号である第１関数型暗号とγ−ＳＸＩＯとを用い、以下のようにｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号である第２関数型暗号(SKFE2.setup, FE2.keygen, SKFE2.enc, FE2.dec)を構成する。
ただし、ｑが１以上の整数（例えば、ｑは２以上の整数）であり、ＳＫＦＥ１．ｓｅｔｕｐが、マスター秘密鍵ｍｓｋ１を生成する第１関数型暗号のセットアップアルゴリズムであり、ＦＥ１．ｋｅｙｇｅｎが、マスター秘密鍵ｍｓｋ１および所定の関数ｆ１を入力とし、関数ｆ１に対する秘密鍵ｓｋｆ１を生成する第１関数型暗号の鍵生成アルゴリズムであり、ＳＫＦＥ１．ｅｎｃが、マスター秘密鍵ｍｓｋ１およびメッセージｍを入力とし、メッセージｍの暗号文ｃ１を生成する第１関数型暗号の暗号化アルゴリズムであり、ＦＥ１．ｄｅｃが、秘密鍵ｓｋｆ１および暗号文ｃ１を入力とし、メッセージｍの関数値ｆ１（ｍ）を生成する第１関数型暗号の復号アルゴリズムである。参考文献２には、一方向性関数からｒ−ｋｅｙ秘密鍵関数型暗号を構成する方法が開示されている。ｒ−ｋｅｙ秘密鍵関数型暗号は１−ｋｅｙ秘密鍵関数型暗号でもあるため、参考文献２で得られるｒ−ｋｅｙ秘密鍵関数型暗号を第１秘密型暗号として用いることができる。
【００３４】
セットアップアルゴリズム（ＳＫＦＥ２．ｓｅｔｕｐ（１λ））：
ＳＫＦＥ２．ｓｅｔｕｐ（１λ）は、λを入力とし、各ｉ∈［ｑ］についてＳＫＦＥ１．ｓｅｔｕｐを実行してマスター秘密鍵ｍｓｋ１ｉの組を生成する。すなわち、ＳＫＦＥ２．ｓｅｔｕｐは、ｑ個のｍｓｋ１ｉ（ただし、ｉ∈［ｑ］であり、［ｑ］は｛１，２，…，ｑ｝を意味する）を生成する。
msk1i←SKFE1.setup(1λ) for i∈[q]
ただし、λは正整数のセキュリティパラメータであり、ＳＫＦＥ１．ｓｅｔｕｐは、各ｉ∈［ｑ］についてランダム化したｍｓｋ１ｉを得る。ＳＫＦＥ２．ｓｅｔｕｐは、各ｉ∈［ｑ］について得られたｍｓｋ１ｉから、マスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を得て出力する。
【００３５】
鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ））：
ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、いずれかのｉ∈［ｑ］、マスター秘密鍵ｍｓｋ２、および所定の関数ｆ２を入力としてＦＥ１．ｋｅｙｇｅｎを実行して関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、関数ｆ２に対する秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得て出力する。
skf2(i)←FE1.keygen(msk1i,f2)
【００３６】
暗号化アルゴリズム（ＳＫＦＥ２．ｅｎｃ（ｍｓｋ２，ｍ））：
ＳＫＦＥ２．ｅｎｃ（ｍｓｋ２，ｍ）は、穴開け可能擬似ランダム関数Ｆの鍵Ｋを生成し、暗号文生成プログラムμを生成し、当該暗号文生成プログラムμを識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ）を得る。ただし、ＳＫＦＥ２．ｅｎｃの暗号文生成プログラムμは、入力されたｉ∈［ｑ］について擬似乱数ｒｉを生成するステップと、マスター秘密鍵ｍｓｋ１ｉ、メッセージｍ、および擬似乱数ｒｉを入力としてＳＫＦＥ１．ｅｎｃを実行して擬似乱数ｒｉでランダム化された暗号文ｃｔｉを得るステップと、を実行するプログラムである。なお、穴開け可能擬似ランダム関数Ｆは、鍵Ｋおよびインデックスｉを入力として、それらに対応する擬似乱数Ｆ（Ｋ，ｉ）を出力する。
≪ＳＫＦＥ２．ｅｎｃの暗号文生成プログラムμ≫
Hardwired：K, m, msk11,…,msk1q
Input：或るインデックスｉ∈［ｑ］
１．ri=F(K,i)を計算する。
２．暗号文cti←SKFE1.enc(msk1i,m;ri)を生成する。
３．暗号文ctiを出力する。
また、難読化プログラムｃｔ＝ｓｘｉＯ（μ）は、当該暗号文生成プログラムμをγ−ＳＸＩＯで識別不可能性難読化したものである。
【００３７】
復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））：
ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）および難読化プログラムｃｔ＝ｓｘｉＯ（μ）を入力とし、秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］をｃｔ＝ｓｘｉＯ（μ）に入力してｃｔ＝ｓｘｉＯ（μ）を実行することで暗号文ｃｔｉを得る。さらにＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２から取り出した秘密鍵ｓｋｆ２（ｉ）および得られた暗号文ｃｔｉを入力としてＦＥ１．ｄｅｃを実行して復元値ｍ’を得て出力する。
m’←FE1.dec(skf2(i),cti)
正しく復号が行われた場合にはｍ’＝ｆ２（ｍ）となる。
【００３８】
＜ｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号 (II)＞
ｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号の他の構成を示す。１−ｋｅｙ秘密鍵関数型暗号である第１関数型暗号とγ−ＳＸＩＯとを用い、以下のようにｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号である第２関数型暗号(SKFE2.setup, FE2.keygen, SKFE2.enc, FE2.dec)を構成する。
【００３９】
セットアップアルゴリズム（ＳＫＦＥ２．ｓｅｔｕｐ（１λ））：
ＳＫＦＥ２．ｓｅｔｕｐ（１λ）は、まず、λを入力とし、擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０∈｛０，１｝λを得る。鍵Ｋ０およびランダムビット列ρ０は、例えば、ランダムに選択される。ＳＫＦＥ２．ｓｅｔｕｐ（１λ）は、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）を得て出力する。
【００４０】
鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ））：
ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、λ、いずれかのｉ∈［ｑ］、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）、および所定の関数ｆ２を入力とし、以下の処理を実行する。
ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、鍵Ｋ０およびインデックス（ρ０，ｉ）を入力として擬似乱数Ｆ’（Ｋ０，（ρ０，ｉ））を得、ＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得る。
msk1i←SKFE1.setup(1λ;F’(K0,(ρ0,i)))
次にＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、ＦＥ１．ｋｅｙｇｅｎを実行してマスター秘密鍵ｍｓｋ１ｉおよび関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成する。
skf2(i)←FE1.keygen(msk1i,f2)
ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ）は、関数ｆ２に対する秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得て出力する。
skf2:=(skf2(i),i)
【００４１】
暗号化アルゴリズム（ＳＫＦＥ２．ｅｎｃ（ｍｓｋ２，ｍ））：
ＳＫＦＥ２．ｅｎｃ（ｍｓｋ２，ｍ）は、穴開け可能擬似ランダム関数Ｆの鍵Ｋを得る。例えば、鍵Ｋはランダムに生成される。またＳＫＦＥ２．ｅｎｃ（ｍｓｋ２，ｍ）は、暗号文生成プログラムμ’を得る。ただし、ＳＫＦＥ２．ｅｎｃの暗号文生成プログラムμ’は、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）およびｉ∈［ｑ］を入力とし、入力されたｉ∈［ｑ］についてＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得るステップと、擬似乱数ｒｉ＝Ｆ（Ｋ，ｉ）を生成するステップと、マスター秘密鍵ｍｓｋ１ｉ、メッセージｍ、および擬似乱数ｒｉを入力としてＳＫＦＥ１．ｅｎｃを実行して擬似乱数ｒｉでランダム化された暗号文ｃｔｉ（ただし、ｃｔｉはメッセージｍの暗号文）を得るステップと、を実行するプログラムである。
【００４２】
≪ＳＫＦＥ２．ｅｎｃの暗号文生成プログラムμ’≫
Hardwired：K, m, K0,ρ0
Input：或るインデックスｉ∈［ｑ］
１．msk1i←SKFE1.setup(1λ;F’(K0,(ρ0,i)))
２．ri=F(K,i)を計算する。
３．暗号文cti←SKFE1.enc(msk1i,m;ri)を生成する。
４．暗号文ctiを出力する。
【００４３】
さらにＳＫＦＥ２．ｅｎｃ（ｍｓｋ２，ｍ）は、暗号文生成プログラムμ’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ’）を得て出力する。
ct:=sxiO(μ’)
【００４４】
復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））：
ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）および難読化プログラムｃｔを入力とし、以下の処理を実行する。
まずＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について暗号文ｃｔｉを得る。難読化の「機能性」により難読化プログラムｃｔにｉを入力することで、暗号文生成プログラムμ’のｉに対する出力である暗号文ｃｔｉが得られる。
cti←ct(i)
またＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ）は、秘密鍵ｓｋｆ２から取り出した秘密鍵ｓｋｆ２（ｉ）および得られた暗号文ｃｔｉを入力としてＦＥ１．ｄｅｃを実行して復元値ｍ’を得て出力する。
m’←FE1.dec(skf2(i),cti)
【００４５】
＜ｑ−ｋｅｙ結託簡素性＞
上述した暗号化アルゴリズム（ＰＫＦＥ２．ｅｎｃおよびＳＫＦＥ２．ｅｎｃ）は、各ｉ∈［ｑ］に対する暗号文を生成するのではなく、ｉに対する暗号文を生成する暗号文生成プログラムηまたはμをγ−ＳＸＩＯで難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η）またはｃｔ＝ｓｘｉＯ（μ）を生成する。前述したＳＸＩＯの性質より、当該暗号化アルゴリズムによって記述される暗号化回路のサイズはpoly(λ,|μ|)・2nγとなる。ここで難読化プログラムｃｔへの入力値であるｉ∈［ｑ］の総数はｑ＝２ｎであるため、当該サイズはpoly(λ,|μ|)・qγと記述できる。また、γは０＜γ＜１を満たし、εは０＜ε＜１を満たすため、γ＝１−εと置くことができ、当該暗号化アルゴリズムでの｜μ｜は｜ｆ｜およびｍの長さＬに依存するため、ｑ−ｋｅｙ結託簡素性の要件を満たす。よって、上述のように構成される暗号方式は、ｑ−ｋｅｙ結託簡素性公開鍵関数型暗号およびｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号となる。このようなｑ−ｋｅｙ結託簡素性方式の関数型暗号を識別不可能性難読化に用いることにより、識別不可能性難読化に必要な演算コストや記憶容量を削減できる。
【００４６】
＜１−ｋｅｙ完全簡素性公開鍵関数型暗号（1-key succinct PKFE）＞
上述したｑ−ｋｅｙ結託簡素性公開鍵関数型暗号を利用することで、以下のように１−ｋｅｙ完全簡素性公開鍵関数型暗号を構成できる。
ＰＫ−１．前述のように参考文献２には、公開鍵暗号からｒ−ｋｅｙ公開鍵関数型暗号を構成する方法が開示されている。
ＰＫ−２．前述したように、ｒ−ｋｅｙ公開鍵関数型暗号を１−ｋｅｙ公開鍵関数型暗号（第１関数型暗号）として用い、さらにγ−ＳＸＩＯを用いることでｑ−ｋｅｙ結託簡素性公開鍵関数型暗号（第２関数型暗号）を構成できる。
ＰＫ−３．非特許文献３，４には、ｑ−ｋｅｙ結託簡素性公開鍵関数型暗号を用い、１−ｋｅｙ完全簡素性公開鍵関数型暗号（第３関数型暗号）を構成する方法が開示されている。
【００４７】
これらにより、公開鍵暗号を用いて構成されるｒ−ｋｅｙ公開鍵関数型暗号を「第１関数型暗号」とし、以下のような１−ｋｅｙ完全簡素性公開鍵関数型暗号（１−ｋｅｙ完全簡素性を持つ第３関数型暗号）を構成できる。
セットアップアルゴリズム（ＰＫＦＥ３．ｓｅｔｕｐ）：
ＰＫＦＥ３．ｓｅｔｕｐは、ＰＫＦＥ２．ｓｅｔｕｐを用い、１−ｋｅｙ完全簡素性公開鍵関数型暗号のマスター公開鍵ｍｐｋ３およびマスター秘密鍵ｍｓｋ３を生成して出力する。
鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）：
ＦＥ３．ｋｅｙｇｅｎは、マスター秘密鍵ｍｓｋ３および所定の関数ｆ３を入力とし、ＦＥ２．ｋｅｙｇｅｎを用い、１−ｋｅｙ完全簡素性公開鍵関数型暗号の秘密鍵ｓｋｆ３（関数ｆ３に対する秘密鍵ｓｋｆ３）を生成して出力する。
暗号化アルゴリズム（ＰＫＦＥ３．ｅｎｃ）：
ＰＫＦＥ３．ｅｎｃは、マスター公開鍵ｍｐｋ３およびメッセージｍを入力とし、ＰＫＦＥ２．ｅｎｃを用い、１−ｋｅｙ完全簡素性公開鍵関数型暗号に則って、メッセージｍの暗号文ｃ３を生成して出力する。
復号アルゴリズム（ＦＥ３．ｄｅｃ）：
ＦＥ３．ｄｅｃは、秘密鍵ｓｋｆ３および暗号文ｃ３を入力とし、ＦＥ２．ｄｅｃを用い、１−ｋｅｙ完全簡素性公開鍵関数型暗号に則って、メッセージｍの関数値ｆ３（ｍ）を生成して出力する。
【００４８】
＜識別不可能性難読化器＞
前述のように、公知の１−ｋｅｙ完全簡素性秘密鍵関数型暗号を用いてγ−ＳＸＩＯを構成できる（非特許文献５参照）。また非特許文献２，３には、１−ｋｅｙ完全簡素性公開鍵関数型暗号を用いて識別不可能性難読化器が構成できることが記載されている。よって、上述のように構成される１−ｋｅｙ完全簡素性公開鍵関数型暗号（１−ｋｅｙ完全簡素性を持つ第３関数型暗号）を用いて識別不可能性難読化器が構成できる。さらに、上記のＰＫ−１〜３より、公開鍵暗号とγ−ＳＸＩＯから識別不可能性難読化器が構成できる。つまり、総合すると１−ｋｅｙ完全簡素性秘密鍵関数型暗号と公開鍵暗号とから識別不可能性難読化器が構成できる（公開鍵暗号は自明に一方向性関数を含意する）。
【００４９】
公開鍵関数型暗号は秘密鍵関数型暗号よりも強い安全仮定を満たす必要があり（公開鍵関数型暗号は自明に秘密鍵関数型暗号に変換できる）、秘密鍵関数型暗号のほうが公開鍵関数型暗号よりも要求条件が低く扱いやすい。そのため、公開鍵関数型暗号よりも秘密鍵関数型暗号を利用して識別不可能性難読化器を構成するほうが望ましい。また、鍵の発行回数が１回の場合には安全性が保たれる1-key方式は、鍵の発行回数にかかわらず安全性が保たれるunbounded-key方式の暗号方式よりも要求条件が低く扱いやすい。そのため、1-key方式を利用するほうが望ましい。さらに完全簡素性方式は、暗号化回路のサイズが関数ｆのサイズに依存しないため、演算コストや記憶容量を削減できる。よって、完全簡素性方式を利用するほうが望ましい。また、標準的な公開鍵暗号は広く構成方法が知られているもっとも標準的な暗号機能の１つであり、要求条件としては十分低い。本形態では、１−ｋｅｙ完全簡素性秘密鍵関数型暗号と公開鍵暗号とから識別不可能性難読化器が構成できるため、従来よりも弱い暗号仮定から識別不可能性難読化器を構成できるといえる。
【００５０】
＜１−ｋｅｙ完全簡素性秘密鍵関数型暗号（1-key succinct SKFE）＞
加えて、上述したｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号を利用することで、以下のように１−ｋｅｙ完全簡素性秘密鍵関数型暗号を構成できる。
ＳＫ−１．前述のように参考文献２には、一方向性関数からｒ−ｋｅｙ秘密鍵関数型暗号を構成する方法が開示されている。
ＳＫ−２．前述したように、ｒ−ｋｅｙ秘密鍵関数型暗号を１−ｋｅｙ秘密鍵関数型暗号（第１関数型暗号）として用い、さらにγ−ＳＸＩＯを用いることでｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号（第２関数型暗号）を構成できる。
ＳＫ−３．非特許文献３，４には、ｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号を用い、１−ｋｅｙ完全簡素性秘密鍵関数型暗号（第３関数型暗号）を構成する方法が開示されている。
【００５１】
これらにより、一方向性関数を用いて構成されるｒ−ｋｅｙ秘密鍵関数型暗号を「第１関数型暗号」とし、以下のような１−ｋｅｙ完全簡素性秘密鍵関数型暗号（１−ｋｅｙ完全簡素性を持つ第３関数型暗号）を構成できる。
セットアップアルゴリズム（ＳＫＦＥ３．ｓｅｔｕｐ）：
ＳＫＦＥ３．ｓｅｔｕｐは、ＳＫＦＥ２．ｓｅｔｕｐを用い、１−ｋｅｙ完全簡素性秘密鍵関数型暗号のマスター秘密鍵ｍｓｋ３を生成して出力する。
鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）：
ＦＥ３．ｋｅｙｇｅｎは、マスター秘密鍵ｍｓｋ３および所定の関数ｆ３を入力とし、ＦＥ２．ｋｅｙｇｅｎを用い、１−ｋｅｙ完全簡素性秘密鍵関数型暗号の秘密鍵ｓｋｆ３（関数ｆ３に対する秘密鍵ｓｋｆ３）を生成して出力する。
暗号化アルゴリズム（ＳＫＦＥ３．ｅｎｃ）：
ＳＫＦＥ３．ｅｎｃは、マスター秘密鍵ｍｓｋ３およびメッセージｍを入力とし、ＳＫＦＥ２．ｅｎｃを用い、１−ｋｅｙ完全簡素性秘密鍵関数型暗号に則って、メッセージｍの暗号文ｃ３を生成して出力する。
復号アルゴリズム（ＦＥ３．ｄｅｃ）：
ＦＥ３．ｄｅｃは、秘密鍵ｓｋｆ３および暗号文ｃ３を入力とし、ＦＥ２．ｄｅｃを用い、１−ｋｅｙ完全簡素性秘密鍵関数型暗号に則って、メッセージｍの関数値ｆ３（ｍ）を生成して出力する。
【００５２】
［第１実施形態］
図面を用いて本発明の第１実施形態を説明する。
本形態は、前述した＜ｑ−ｋｅｙ結託簡素性公開鍵関数型暗号(I)＞の具体例である。
＜構成＞
図１に例示するように、本形態の暗号システム１は、セットアップ装置１１、鍵生成装置１２、暗号化装置１３、および復号装置１４を有する。セットアップ装置１１は、例えば、メモリ１１１、マスター鍵生成部１１２、および通信部１１３を有する。鍵生成装置１２は、例えば、メモリ１２１、疑似乱数生成部１２２、秘密鍵生成部１２３、および通信部１２４を有する。暗号化装置１３は、例えば、メモリ１３１、疑似乱数生成部１３２、疑似乱数鍵生成部１３３、プログラム生成部１３４、難読化部１３５、および通信部１３６を有する。復号装置１４は、例えば、メモリ１４１、暗号文生成部１４２、復号部１４３、および通信部１４４を有する。
【００５３】
セットアップ装置１１、鍵生成装置１２、暗号化装置１３、および復号装置１４は、入力情報、演算過程で保存する必要がある情報、演算結果の情報をメモリ１１１，１２１，１３１，１４１にそれぞれ格納し、必要に応じて読み出して利用する。また、セットアップ装置１１、鍵生成装置１２、暗号化装置１３、および復号装置１４は、それぞれ通信部１１３，１２４，１３６，１４４によって情報の送受信を行う。各装置から送信された情報は、例えばネットワークを通じて他の装置に送信される。
【００５４】
セットアップ装置１１、鍵生成装置１２、暗号化装置１３、および復号装置１４のそれぞれは、例えば、通信装置、ＣＰＵ（central processing unit）等のプロセッサ（ハードウェア・プロセッサ）、およびＲＡＭ（random-access memory）・ＲＯＭ（read-only memory）等のメモリ等を備える汎用または専用のコンピュータが所定のプログラムを実行することで構成される装置である。このコンピュータは１個のプロセッサやメモリを備えていてもよいし、複数個のプロセッサやメモリを備えていてもよい。このプログラムはコンピュータにインストールされてもよいし、予めＲＯＭ等に記録されていてもよい。また、ＣＰＵのようにプログラムが読み込まれることで機能構成を実現する電子回路（circuitry）ではなく、プログラムを用いることなく処理機能を実現する電子回路を用いて一部またはすべての処理部が構成されてもよい。また、１個の装置を構成する電子回路が複数のＣＰＵを含んでいてもよい。
【００５５】
なお、図１では、セットアップ装置１１、鍵生成装置１２、暗号化装置１３、および復号装置１４を１個ずつ例示するが、これらの少なくとも一部の装置が複数個存在していてもよい。
【００５６】
＜処理＞
次に本形態の処理を説明する。
≪セットアップアルゴリズム（ＰＫＦＥ２．ｓｅｔｕｐ（１λ））の実行処理≫
セットアップ装置１１のマスター鍵生成部１１２は、各ｉ∈［ｑ］についてＰＫＦＥ１．ｓｅｔｕｐを実行してマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉの組を生成し、生成されたｑ対の（ｍｐｋ１ｉ，ｍｓｋ１ｉ）（ただし、ｉ∈［ｑ］）をメモリ１１１に格納する。ただし、（ｍｐｋ１ｉ，ｍｓｋ１ｉ）はｉ∈［ｑ］ごとに生成された疑似乱数によってランダム化されている。マスター鍵生成部１１２は、各ｉ∈［ｑ］について得られた（ｍｐｋ１ｉ，ｍｓｋ１ｉ）から、マスター公開鍵ｍｐｋ２＝（ｍｐｋ１１,…，ｍｐｋ１ｑ）およびマスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を生成してメモリ１１１に格納する。通信部１１３は、マスター公開鍵ｍｐｋ２を暗号化装置１３に送信し、マスター秘密鍵ｍｓｋ２を鍵生成装置１２に送信する。
【００５７】
≪鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ））の実行処理≫
鍵生成装置１２の通信部１２４には、復号装置１４から送信されたいずれかのｉ∈［ｑ］および所定の関数ｆ２、ならびにマスター秘密鍵ｍｓｋ２が入力される。これらはメモリ１２１に格納される。疑似乱数生成部１２２は疑似乱数を生成して出力する。秘密鍵生成部１２３は、通信部１２４に入力されたｉ∈［ｑ］、関数ｆ２、マスター秘密鍵ｍｓｋ２、および疑似乱数生成部１２２で生成された疑似乱数を入力とし、ＦＥ１．ｋｅｙｇｅｎを実行して関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成し、関数ｆ２に対する秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得てメモリ１２１に格納する。なお、秘密鍵ｓｋｆ２（ｉ）は当該疑似乱数によってランダム化されている。通信部１２４は、秘密鍵ｓｋｆ２を復号装置１４に送信する。
【００５８】
≪暗号化アルゴリズム（ＰＫＦＥ２．ｅｎｃ（ｍｐｋ２，ｍ））の実行処理≫
暗号化装置１３の通信部１３６にはマスター公開鍵ｍｐｋ２が入力され、このマスター公開鍵ｍｐｋ２はメモリ１３１に格納される。疑似乱数生成部１３２は、疑似乱数を生成して疑似乱数鍵生成部１３３に送る。疑似乱数鍵生成部１３３は、送られた疑似乱数を用いて穴開け可能擬似ランダム関数Ｆの鍵Ｋを生成してメモリ１３１に格納する。鍵Ｋはこの疑似乱数によってランダム化されている。プログラム生成部１３４は、メッセージｍ、マスター公開鍵ｍｐｋ２、および鍵Ｋを入力とし、前述したＰＫＦＥ２．ｅｎｃの暗号文生成プログラムηを生成してメモリ１２１に格納する。難読化部１３５は、当該暗号文生成プログラムηをγ−ＳＸＩＯで識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η）を生成してメモリ１２１に格納する。通信部１３６は、当該難読化プログラムｃｔを復号装置１４に送信する。
【００５９】
≪復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））の実行処理≫
復号装置１４の通信部１４４には、秘密鍵ｓｋｆ２および難読化プログラムｃｔが入力され、これらはメモリ１４１に格納される。暗号文生成部１４２は、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）および難読化プログラムｃｔ＝ｓｘｉＯ（η）を入力とし、秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］（鍵生成装置１２に送信したｉ）をｃｔ＝ｓｘｉＯ（η）に入力し、ｓｘｉＯ（η）を実行することで暗号文ｃｔｉを生成し、当該暗号文ｃｔｉをメモリ１４１に格納する。復号部１４３は、秘密鍵ｓｋｆ２から取り出した秘密鍵ｓｋｆ２（ｉ）および暗号文ｃｔｉを入力としてＦＥ１．ｄｅｃを実行し、秘密鍵ｓｋｆ２（ｉ）で暗号文ｃｔｉを復号することで復元値ｍ’を得て出力する。
【００６０】
［第２実施形態］
図面を用いて本発明の第２実施形態を説明する。
本形態は、前述した＜ｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号(I)＞の具体例である。以下では、既に説明した事項について同じ参照番号を引用して説明を省略する。
＜構成＞
図１に例示するように、本形態の暗号システム２は、セットアップ装置２１、鍵生成装置１２、暗号化装置２３、および復号装置１４を有する。セットアップ装置２１は、例えば、メモリ１１１、マスター鍵生成部２１２、および通信部１１３を有する。暗号化装置２３は、例えば、メモリ１３１、疑似乱数生成部１３２、疑似乱数鍵生成部１３３、プログラム生成部２３４、難読化部１３５、および通信部１３６を有する。セットアップ装置２１および暗号化装置２３は、入力情報、演算過程で保存する必要がある情報、演算結果の情報をメモリ１１１および１３１にそれぞれ格納し、必要に応じて読み出して利用する。セットアップ装置２１および暗号化装置２３は、それぞれ、通信部１１３および１３６によって情報の送受信を行う。セットアップ装置２１および暗号化装置２３は、例えば、前述のコンピュータが所定のプログラムを実行することで構成される装置である。図１では、１個のセットアップ装置２１および暗号化装置２３を例示するが、セットアップ装置２１および暗号化装置２３の少なくとも一方が複数個存在していてもよい。
【００６１】
＜処理＞
次に本形態の処理を説明する
≪セットアップアルゴリズム（ＳＫＦＥ２．ｓｅｔｕｐ（１λ））の実行処理≫
セットアップ装置２１のマスター鍵生成部２１２は、各ｉ∈［ｑ］についてＳＫＦＥ１．ｓｅｔｕｐを実行してマスター秘密鍵ｍｓｋ１ｉを生成し、生成されたｑ個のｍｓｋ１ｉ（ただし、ｉ∈［ｑ］）をメモリ１１１に格納する。ただし、ｍｓｋ１ｉはｉ∈［ｑ］ごとに生成された疑似乱数によってランダム化されている。マスター鍵生成部２１２は、各ｉ∈［ｑ］について得られたｍｓｋ１ｉから、マスター秘密鍵ｍｓｋ２＝（ｍｓｋ１１,…，ｍｓｋ１ｑ）を生成してメモリ１１１に格納する。通信部１１３は、マスター秘密鍵ｍｓｋ２を鍵生成装置１２および暗号化装置２３に送信する。
【００６２】
≪鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ））の実行処理≫
本形態の鍵生成アルゴリズムの実行処理は、第１実施形態のものと同じである。
【００６３】
≪暗号化アルゴリズム（ＳＫＦＥ２．ｅｎｃ（ｍｓｋ２，ｍ））の実行処理≫
暗号化装置２３の通信部１３６にはセットアップ装置２１から送信されたマスター秘密鍵ｍｓｋ２が入力され、このマスター秘密鍵ｍｓｋ２はメモリ１３１に格納される。疑似乱数生成部１３２は、疑似乱数を生成して疑似乱数鍵生成部１３３に送る。疑似乱数鍵生成部１３３は、送られた疑似乱数を用いて穴開け可能擬似ランダム関数Ｆの鍵Ｋを生成してメモリ１３１に格納する。鍵Ｋはこの疑似乱数によってランダム化されている。プログラム生成部２３４は、メッセージｍ、マスター秘密鍵ｍｓｋ２、および鍵Ｋを入力とし、前述したＳＫＦＥ２．ｅｎｃの暗号文生成プログラムμを生成してメモリ１２１に格納する。難読化部１３５は、当該暗号文生成プログラムμをγ−ＳＸＩＯで識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ）を生成してメモリ１２１に格納する。通信部１３６は、当該難読化プログラムｃｔを復号装置１４に送信する。
【００６４】
≪復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））の実行処理≫
本形態の復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））の実行処理は、暗号化装置１３から送信された難読化プログラムｃｔが通信部１４４に入力されることに代えて、暗号化装置２３から送信された難読化プログラムｃｔが通信部１４４に入力されること、および、難読化プログラムｃｔがｓｘｉＯ（η）であることに代えて、難読化プログラムｃｔがｓｘｉＯ（μ）であることを除き、第１実施形態のものと同じである。
【００６５】
［第３実施形態］
図面を用いて本発明の第１実施形態を説明する。本形態は、前述した＜ｑ−ｋｅｙ結託簡素性公開鍵関数型暗号(II)＞の具体例である。以下では、既に説明した事項について同じ参照番号を引用して説明を省略する。
＜構成＞
図２に例示するように、本形態の暗号システム６は、セットアップ装置６１、鍵生成装置６２、暗号化装置６３、および復号装置６４を有する。セットアップ装置６１は、例えば、メモリ１１１、設定部６１２、プログラム生成部６１３、マスター鍵生成部６１４、および通信部１１３を有する。鍵生成装置６２は、例えば、メモリ１２１、マスター鍵生成部６２２、秘密鍵生成部６２３、および通信部１２４を有する。暗号化装置６３は、例えば、メモリ１３１、設定部６３２、プログラム生成部６３４、難読化部６３５、および通信部１３６を有する。復号装置６４は、例えば、メモリ１４１、実行部６４２、復号部６４３、および通信部１４４を有する。
【００６６】
セットアップ装置６１、鍵生成装置６２、暗号化装置６３、および復号装置６４は、入力情報、演算過程で保存する必要がある情報、演算結果の情報をメモリ１１１，１２１，１３１，１４１にそれぞれ格納し、必要に応じて読み出して利用する。また、セットアップ装置６１、鍵生成装置６２、暗号化装置６３、および復号装置６４は、それぞれ通信部１１３，１２４，１３６，１４４によって情報の送受信を行う。各装置から送信された情報は、例えばネットワークを通じて他の装置に送信される。セットアップ装置６１、鍵生成装置６２、暗号化装置６３、および復号装置６４のそれぞれは、例えば、前述のコンピュータが所定のプログラムを実行することで構成される装置である。図２では、セットアップ装置６１、鍵生成装置６２、暗号化装置６３、および復号装置６４を１個ずつ例示するが、これらの少なくとも一部の装置が複数個存在していてもよい。
【００６７】
＜処理＞
次に本形態の処理を説明する。
≪セットアップアルゴリズム（ＰＫＦＥ２．ｓｅｔｕｐ（１λ））の実行処理≫
セットアップ装置６１の設定部６１２は、λを入力として擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０∈｛０，１｝λを得てメモリ１１１に格納する。鍵Ｋ０およびランダムビット列ρ０は、例えば、ランダムに選択される。次に、プログラム生成部６１３は、鍵Ｋ０およびランダムビット列ρ０を入力とし、前述したＰＫＦＥ２．ｓｅｔｕｐのマスター公開鍵生成プログラムΣを生成してメモリ１１１に格納する。マスター鍵生成部６１４は、このマスター公開鍵生成プログラムΣを入力とし、マスター公開鍵生成プログラムΣを識別不可能性難読化した難読化プログラムｓｘｉＯ（Σ）をマスター公開鍵ｍｐｋ２として得て出力し、（Ｋ０，ρ０）をマスター秘密鍵ｍｓｋ２として得て出力する。マスター公開鍵ｍｐｋ２およびマスター秘密鍵ｍｓｋ２はメモリ１１１に格納される。通信部１１３は、マスター公開鍵ｍｐｋ２を暗号化装置６３に送信し、マスター秘密鍵ｍｓｋ２を鍵生成装置６２に送信する。
【００６８】
≪鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ））の実行処理≫
鍵生成装置６２の通信部１２４には、復号装置６４から送信されたいずれかのｉ∈［ｑ］および所定の関数ｆ２、ならびにマスター秘密鍵ｍｓｋ２が入力される。これらはメモリ１２１に格納される。マスター鍵生成部６２２は、λ、いずれかのｉ∈［ｑ］、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）、および関数ｆ２を入力とし、ＰＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター公開鍵ｍｐｋ１ｉおよびマスター秘密鍵ｍｓｋ１ｉを得てメモリ１２１に格納する。秘密鍵生成部６２３は、マスター秘密鍵ｍｓｋ１ｉおよび関数ｆ２を入力とし、ＦＥ１．ｋｅｙｇｅｎを実行してマスター秘密鍵ｍｓｋ１ｉおよび関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成してメモリ１２１に格納する。さらに秘密鍵生成部６２３は、復号装置６４から送信されたいずれかのｉ∈［ｑ］および所定の関数ｆ２を入力とし、関数ｆ２に対する秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得てメモリ１２１に格納する。通信部１２４は、秘密鍵ｓｋｆ２を復号装置６４に送信する。
【００６９】
≪暗号化アルゴリズム（ＰＫＦＥ２．ｅｎｃ（ｍｐｋ２，ｍ））の実行処理≫
暗号化装置６３の通信部１３６にはマスター公開鍵ｍｐｋ２＝ｓｘｉＯ（Σ）が入力され、このマスター公開鍵ｍｐｋ２はメモリ１３１に格納される。設定部６３２は、穴開け可能擬似ランダム関数Ｆの鍵Ｋを生成してメモリ１３１に格納する。例えば、鍵Ｋはランダムに生成される。プログラム生成部６３４は、マスター公開鍵ｍｐｋ２＝ｓｘｉＯ（Σ）、メッセージｍ、および鍵Ｋを入力とし、前述したＰＫＦＥ２．ｅｎｃの暗号文生成プログラムη’を生成する。難読化部６３５は、暗号文生成プログラムη’を入力とし、この暗号文生成プログラムη’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（η’）を得てメモリ１３１に格納する。通信部１３６は、当該難読化プログラムｃｔを復号装置６４に送信する。
【００７０】
≪復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））の実行処理≫
復号装置６４の通信部１４４には、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）および難読化プログラムｃｔが入力され、これらはメモリ１４１に格納される。実行部６４２は、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）および難読化プログラムｃｔを入力とし、秘密鍵ｓｋｆ２から取り出したｉ∈［ｑ］について暗号文ｃｔｉを得てメモリ１４１に格納する。難読化プログラムｃｔにｉを入力することで暗号文ｃｔｉが得られる。復号部６４３は、秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）から取り出した秘密鍵ｓｋｆ２（ｉ）および得られた暗号文ｃｔｉを入力としてＦＥ１．ｄｅｃを実行し、秘密鍵ｓｋｆ２（ｉ）で暗号文ｃｔｉを復号して復元値ｍ’を得て出力する。
【００７１】
［第４実施形態］
図面を用いて本発明の第４実施形態を説明する。本形態は、前述した＜ｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号(II)＞の具体例である。以下では、既に説明した事項について同じ参照番号を引用して説明を省略する。
＜構成＞
図２に例示するように、本形態の暗号システム７は、セットアップ装置７１、鍵生成装置７２、暗号化装置７３、および復号装置６４を有する。セットアップ装置７１は、例えば、メモリ１１１、設定部６１２、マスター鍵生成部７１４、および通信部１１３を有する。鍵生成装置７２は、例えば、メモリ１２１、マスター鍵生成部６２２、秘密鍵生成部６２３、および通信部１２４を有する。暗号化装置７３は、例えば、メモリ１３１、設定部６３２、プログラム生成部７３４、難読化部７３５、および通信部１３６を有する。復号装置６４は、例えば、メモリ１４１、実行部６４２、復号部６４３、および通信部１４４を有する。
【００７２】
セットアップ装置７１、鍵生成装置７２、暗号化装置７３、および復号装置６４は、入力情報、演算過程で保存する必要がある情報、演算結果の情報をメモリ１１１，１２１，１３１，１４１にそれぞれ格納し、必要に応じて読み出して利用する。また、セットアップ装置７１、鍵生成装置７２、暗号化装置７３、および復号装置６４は、それぞれ通信部１１３，１２４，１３６，１４４によって情報の送受信を行う。各装置から送信された情報は、例えばネットワークを通じて他の装置に送信される。セットアップ装置７１、鍵生成装置７２、暗号化装置７３、および復号装置６４のそれぞれは、例えば、前述のコンピュータが所定のプログラムを実行することで構成される装置である。図２では、セットアップ装置７１、鍵生成装置７２、暗号化装置７３、および復号装置６４を１個ずつ例示するが、これらの少なくとも一部の装置が複数個存在していてもよい。
【００７３】
＜処理＞
次に本形態の処理を説明する。
≪セットアップアルゴリズム（ＳＫＦＥ２．ｓｅｔｕｐ（１λ））の実行処理≫
セットアップ装置７１の設定部６１２は、λを入力とし、擬似ランダム関数Ｆ’の鍵Ｋ０とランダムビット列ρ０∈｛０，１｝λを得てメモリ１１１に格納する。鍵Ｋ０およびランダムビット列ρ０は、例えば、ランダムに選択される。マスター鍵生成部７１４は、鍵Ｋ０およびランダムビット列ρ０を入力とし、マスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）を得てメモリ１１１に格納する。通信部１１３は、マスター秘密鍵ｍｓｋ２を鍵生成装置７２および暗号化装置７３に送信する。
【００７４】
≪鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ（ｍｓｋ２，ｆ２，ｉ））の実行処理≫
鍵生成装置７２の通信部１２４には、復号装置６４から送信されたいずれかのｉ∈［ｑ］および所定の関数ｆ２、ならびにマスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）が入力される。これらはメモリ１２１に格納される。マスター鍵生成部７２２は、鍵Ｋ０およびインデックス（ρ０，ｉ）を入力として擬似乱数Ｆ’（Ｋ０，（ρ０，ｉ））を得てメモリ１２１に格納する。さらにマスター鍵生成部７２２は、λおよび擬似乱数Ｆ’（Ｋ０，（ρ０，ｉ））を入力とし、ＳＫＦＥ１．ｓｅｔｕｐを実行して疑似乱数Ｆ’（Ｋ０，（ρ０，ｉ））でランダム化されたマスター秘密鍵ｍｓｋ１ｉを得てメモリ１２１に格納する。秘密鍵生成部６２３は、マスター秘密鍵ｍｓｋ１ｉおよび関数ｆ２を入力とし、Ｅ１．ｋｅｙｇｅｎを実行してマスター秘密鍵ｍｓｋ１ｉおよび関数ｆ２に対する秘密鍵ｓｋｆ２（ｉ）を生成してメモリ１２１に格納する。さらに秘密鍵生成部６２３は、ｓｋｆ２（ｉ）およびｉを入力として関数ｆ２に対する秘密鍵ｓｋｆ２＝（ｓｋｆ２（ｉ），ｉ）を得てメモリ１２１に格納する。通信部１２４は、秘密鍵ｓｋｆ２を復号装置６４に送信する。
【００７５】
≪暗号化アルゴリズム（ＳＫＦＥ２．ｅｎｃ（ｍｓｋ２，ｍ））の実行処理≫
暗号化装置７３の通信部１３６にはマスター秘密鍵ｍｓｋ２＝（Ｋ０，ρ０）が入力され、このマスター公開鍵ｍｐｋ２はメモリ１３１に格納される。設定部６３２は、穴開け可能擬似ランダム関数Ｆの鍵Ｋを得てメモリ１３１に格納する。例えば、鍵Ｋはランダムに生成される。プログラム生成部７３４は、鍵Ｋ０、ランダムビット列ρ０、鍵Ｋ、およびメッセージｍを入力として、前述したＳＫＦＥ２．ｅｎｃの暗号文生成プログラムμ’を得てメモリ１３１に格納する。難読化部７３５は、暗号文生成プログラムμ’を入力とし、暗号文生成プログラムμ’を識別不可能性難読化した難読化プログラムｃｔ＝ｓｘｉＯ（μ’）を得てメモリ１３１に格納する。通信部１３６は、当該難読化プログラムｃｔを復号装置６４に送信する。
【００７６】
≪復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））の実行処理≫
本形態の復号アルゴリズム（ＦＥ２．ｄｅｃ（ｓｋｆ２，ｃｔ））の実行処理は、暗号化装置６３から送信された難読化プログラムｃｔが通信部１４４に入力されることに代えて、暗号化装置７３から送信された難読化プログラムｃｔが通信部１４４に入力されること、および、難読化プログラムｃｔがｓｘｉＯ（η’）であることに代えて、難読化プログラムｃｔがｓｘｉＯ（μ’）であることを除き、第３実施形態のものと同じである。
【００７７】
［第５実施形態］
図面を用いて本発明の第５実施形態を説明する。
本形態は、前述した＜１−ｋｅｙ完全簡素性公開鍵関数型暗号＞の具体例である。
＜構成＞
図３に例示するように、本形態の暗号システム３は、セットアップ装置３１、鍵生成装置３２、暗号化装置３３、および復号装置３４を有する。セットアップ装置３１は、例えば、メモリ３１１、マスター鍵生成部３１２、および通信部３１３を有する。鍵生成装３２は、例えば、メモリ３２１、秘密鍵生成部３２２、および通信部３２３を有する。暗号化装置３３は、例えば、メモリ３３１、暗号化部３３２、および通信部３３３を有する。復号装置３４は、例えば、メモリ３４１、復号部３４２、および通信部３４３を有する。
【００７８】
セットアップ装置３１、鍵生成装置３２、暗号化装置３３、および復号装置３４は、入力情報、演算過程で保存する必要がある情報、演算結果の情報をメモリ３１１，３２１，３３１，３４１にそれぞれ格納し、必要に応じて読み出して利用する。また、セットアップ装置３１、鍵生成装置３２、暗号化装置３３、および復号装置３４は、それぞれ通信部３１３，３２３，３３３，３４４によって情報の送受信を行う。各装置から送信された情報は、例えばネットワークを通じて他の装置に送信される。セットアップ装置３１、鍵生成装置３２、暗号化装置３３、および復号装置３４のそれぞれは、例えば、前述のコンピュータが所定のプログラムを実行することで構成される装置である。図３では、セットアップ装置３１、鍵生成装置３２、暗号化装置３３、および復号装置３４を１個ずつ例示するが、これらの少なくとも一部の装置が複数個存在していてもよい。
【００７９】
＜処理＞
次に本形態の処理を説明する。本形態では、第１実施形態または第３実施形態の何れか一方のｑ−ｋｅｙ結託簡素性公開鍵関数型暗号（第２関数型暗号）を利用し、非特許文献４に記載された方法に従って、以下に示す１−ｋｅｙ完全簡素性公開鍵関数型暗号（第３関数型暗号）の各アルゴリズムを実行する。
≪セットアップアルゴリズム（ＰＫＦＥ３．ｓｅｔｕｐ）の実行処理≫
セットアップ装置３１のマスター鍵生成部３１２は、第１実施形態または第３実施形態のセットアップアルゴリズム（ＰＫＦＥ２．ｓｅｔｕｐ）を用い、非特許文献４に記載された１−ｋｅｙ完全簡素性公開鍵関数型暗号（第３関数型暗号）のセットアップアルゴリズム（ＰＫＦＥ３．ｓｅｔｕｐ）を実行し、マスター公開鍵ｍｐｋ３およびマスター秘密鍵ｍｓｋ３を生成してメモリ３１１に格納する。通信部３１３は、マスター公開鍵ｍｐｋ３を暗号化装置３３に送信し、マスター秘密鍵ｍｓｋ３を鍵生成装置３２に送信する。
【００８０】
≪鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）の実行処理≫
鍵生成装置３２の通信部３２３にはマスター秘密鍵ｍｓｋ３および復号装置３４から送信されたｉおよび所定の関数ｆ３が入力され、これらはメモリ３２１に格納される。秘密鍵生成部３２２は、マスター秘密鍵ｍｓｋ３および所定の関数ｆ３を入力とし、第１実施形態または第３実施形態の鍵生成アルゴリズム（ＦＥ２．ｋｅｙｇｅｎ）を用い、非特許文献４に記載された１−ｋｅｙ完全簡素性公開鍵関数型暗号の鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）を実行し、関数ｆ３に対する秘密鍵ｓｋｆ３を生成してメモリ３２１に格納する。通信部３２３は、秘密鍵ｓｋｆ３を復号装置３４に送信する。
【００８１】
≪暗号化アルゴリズム（ＰＫＦＥ３．ｅｎｃ）の実行処理≫
暗号化装置３３の通信部３３３にはマスター公開鍵ｍｐｋ３が入力され、これはメモリ３３１に格納される。暗号化部３３２は、マスター公開鍵ｍｐｋ３およびメッセージｍを入力とし、第１実施形態または第３実施形態の暗号化アルゴリズム（ＰＫＦＥ２．ｅｎｃ）を用い、非特許文献４に記載された１−ｋｅｙ完全簡素性公開鍵関数型暗号の暗号化アルゴリズム（ＰＫＦＥ３．ｅｎｃ）を実行し、メッセージｍの暗号文ｃ３を生成してメモリ３３１に格納する。通信部３３３は、暗号文ｃ３を復号装置３４に送信する。
【００８２】
≪復号アルゴリズム（ＦＥ３．ｄｅｃ）の実行処理≫
復号装置３４の通信部３４３には秘密鍵ｓｋｆ３および暗号文ｃ３が入力され、これらはメモリ３４１に格納される。復号部３４２は、秘密鍵ｓｋｆ３および暗号文ｃ３を入力とし、第１実施形態または第３実施形態の復号アルゴリズムＦＥ２．ｄｅｃを用い、非特許文献４に記載された１−ｋｅｙ完全簡素性公開鍵関数型暗号の暗号化アルゴリズム（ＦＥ３．ｄｅｃ）を実行し、メッセージｍの関数値ｆ３（ｍ）を生成して出力する。
【００８３】
［第６実施形態］
図面を用いて本発明の第６実施形態を説明する。
本形態は、前述した＜１−ｋｅｙ完全簡素性秘密鍵関数型暗号＞の具体例である。
＜構成＞
図３に例示するように、本形態の暗号システム４は、セットアップ装置４１、鍵生成装置３２、暗号化装置４３、および復号装置３４を有する。セットアップ装置４１は、例えば、メモリ３１１、マスター鍵生成部４１２、および通信部３１３を有する。暗号化装置４３は、例えば、メモリ３３１、暗号化部３３２、および通信部３３３を有する。
【００８４】
セットアップ装置４１および暗号化装置４３は、入力情報、演算過程で保存する必要がある情報、演算結果の情報をメモリ３１１および３３１にそれぞれ格納し、必要に応じて読み出して利用する。また、セットアップ装置４１および暗号化装置４３は、それぞれ、通信部３１３および３３３によって情報の送受信を行う。各装置から送信された情報は、例えばネットワークを通じて他の装置に送信される。セットアップ装置４１および暗号化装置４３は、前述のコンピュータが所定のプログラムを実行することで構成される装置である。図３では、１個のセットアップ装置４１および暗号化装置４３を例示するが、セットアップ装置４１および暗号化装置４３の少なくとも一方が複数個存在していてもよい。
【００８５】
＜処理＞
次に本形態の処理を説明する。本形態では、第２実施形態または第４実施形態の何れか一方のｑ−ｋｅｙ結託簡素性秘密鍵関数型暗号（第２関数型暗号）を利用し、非特許文献４に記載された方法に従って、以下に示す１−ｋｅｙ完全簡素性秘密鍵関数型暗号（第３関数型暗号）の各アルゴリズムを実行する。
【００８６】
≪セットアップアルゴリズム（ＳＫＦＥ３．ｓｅｔｕｐ）の実行処理≫
セットアップ装置４１のマスター鍵生成部４１２は、第２実施形態または第４実施形態のセットアップアルゴリズム（ＳＫＦＥ２．ｓｅｔｕｐ）を用い、非特許文献４に記載された１−ｋｅｙ完全簡素性秘密鍵関数型暗号（第３関数型暗号）のセットアップアルゴリズム（ＳＫＦＥ３．ｓｅｔｕｐ）を実行し、マスター秘密鍵ｍｓｋ３を生成してメモリ３１１に格納する。通信部３１３は、マスター秘密鍵ｍｓｋ３を鍵生成装置３２および暗号化装置４３に送信する。
【００８７】
≪鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）の実行処理≫
本形態の鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）の実行処理は、第５実施形態のものと同じである。
【００８８】
≪暗号化アルゴリズム（ＳＫＦＥ３．ｅｎｃ）の実行処理≫
暗号化装置４３の通信部３３３にはマスター秘密鍵ｍｓｋ３が入力され、これはメモリ３３１に格納される。暗号化部３３２は、マスター秘密鍵ｍｓｋ３およびメッセージｍを入力とし、第２実施形態または第４実施形態の暗号化アルゴリズム（ＳＫＦＥ２．ｅｎｃ）を用い、非特許文献４に記載された１−ｋｅｙ完全簡素性秘密鍵関数型暗号の暗号化アルゴリズム（ＳＫＦＥ３．ｅｎｃ）を実行し、メッセージｍの暗号文ｃ３を生成してメモリ３３１に格納する。通信部３３３は、暗号文ｃ３を復号装置３４に送信する。
【００８９】
≪復号アルゴリズム（ＦＥ３．ｄｅｃ）の実行処理≫
本形態の復号アルゴリズムの実行処理は、暗号化装置３３から送信された暗号文ｃ３が通信部３４４に入力されることに代えて、暗号化装置４３から送信された暗号文ｃ３が通信部３４３に入力されること、第１実施形態または第３実施形態の復号アルゴリズムＦＥ２．ｄｅｃに代えて、第２実施形態または第４実施形態の復号アルゴリズムＦＥ２．ｄｅｃが用いられることを除き、第５実施形態のものと同じである。
【００９０】
［第７実施形態］
図面を用いて本発明の第７実施形態を説明する。
本形態では、第５実施形態の１−ｋｅｙ完全簡素性公開鍵関数型暗号を用い、非特許文献２，３に記載された識別不可能性難読化を行う。
【００９１】
＜構成＞
図４に例示するように、本形態の暗号システム５は、セットアップ装置３１、鍵生成装置３２、難読化装置５３、および実行装置５４を有する。難読化装置５３は、メモリ４３１、暗号化装置３３、難読化部５３２、および通信部５３３を有する。実行装置５４は、メモリ５４１、復号装置３４、実行部５４２、および通信部５４３を有する。
【００９２】
難読化装置５３および実行装置５４は、入力情報、演算過程で保存する必要がある情報、演算結果の情報をメモリ５３１および５４１にそれぞれ格納し、必要に応じて読み出して利用する。また、難読化装置５３および実行装置５４は、それぞれ通信部５３３および５４３によって情報の送受信を行う。各装置から送信された情報は、例えばネットワークを通じて他の装置に送信される。難読化装置５３および実行装置５４は、それぞれ前述のコンピュータが所定のプログラムを実行することで構成される装置である。図４では、１個の難読化装置５３および実行装置５４を例示するが、これらの少なくとも一方が複数個存在してもよい。
【００９３】
＜処理＞
次に本形態の処理を説明する。
≪セットアップアルゴリズム（ＰＫＦＥ３．ｓｅｔｕｐ）の実行処理≫
本形態のセットアップアルゴリズム（ＰＫＦＥ３．ｓｅｔｕｐ）の実行処理は、第５実施形態のものと同じである。
【００９４】
≪鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）の実行処理≫
本形態の鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）は、第５実施形態のものと同じである。
【００９５】
≪プログラムの難読化の実行処理≫
難読化装置５３の難読化部５３２は、難読化対象のプログラムｐｒｏを入力とし、暗号化アルゴリズム（ＰＫＦＥ３．ｅｎｃ）を実行する暗号化装置３３を用い、非特許文献２または３に記載された識別不可能性難読化によってプログラムｐｒｏを難読化し（すなわち、特許文献２または３に記載された識別不可能性難読化の過程で実行される暗号化アルゴリズムとしてＰＫＦＥ３．ｅｎｃを用いてプログラムｐｒｏを難読化し）、難読化プログラムｉＯ（ｐｒｏ）を得てメモリ５３１に格納する。通信部５３３は、難読化プログラムｉＯ（ｐｒｏ）を実行装置５４に送信する。
【００９６】
≪難読化プログラムの実行処理≫
実行装置５４の通信部５４３には難読化プログラムｉＯ（ｐｒｏ）が入力され、これはメモリ５４１に格納される。実行部５４２は、難読化プログラムｉＯ（ｐｒｏ）を入力とし、復号アルゴリズム（ＦＥ３．ｄｅｃ）を実行する復号装置３４を用い、非特許文献２または３に記載された難読化プログラムｉＯ（ｐｒｏ）の実行処理を行い（すなわち、特許文献２または３に記載された難読化プログラムの実行処理の過程で実行される復号アルゴリズムとしてＦＥ３．ｄｅｃを用いて難読化プログラムｉＯ（ｐｒｏ）の実行処理を行い）、実行結果を得て出力する。
【００９７】
［変形例等］
なお、本発明は上述の実施の形態に限定されるものではない。例えば、各装置がネットワークを通じて情報をやり取りするのではなく、少なくとも一部の組の装置が可搬型記録媒体を介して情報をやり取りしてもよい。或いは、少なくとも一部の組の装置が非可搬型の記録媒体を介して情報をやり取りしてもよい。これらの装置の一部からなる組み合わせが、同一の装置であってもよい。例えば、難読化装置５３が、セットアップアルゴリズム（ＰＫＦＥ３．ｓｅｔｕｐ）および鍵生成アルゴリズム（ＦＥ３．ｋｅｙｇｅｎ）を実行してもよい。この場合には、難読化装置５３から実行装置５４に送られる難読化プログラムｉＯ（ｐｒｏ）に秘密鍵ｓｋｆ２が含まれる。また、実行部５４２が難読化プログラムｉＯ（ｐｒｏ）と入力値ｘとを入力として、入力値ｘに対する難読化プログラムｉＯ（ｐｒｏ）の実行処理を行ってもよい。
【００９８】
上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【００９９】
上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体の例は、非一時的な（non-transitory）記録媒体である。このような記録媒体の例は、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等である。
【０１００】
このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【０１０１】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。処理の実行時、このコンピュータは、自己の記録装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。
【０１０２】
上記実施形態では、コンピュータ上で所定のプログラムを実行させて本装置の処理機能が実現されたが、これらの処理機能の少なくとも一部がハードウェアで実現されてもよい。
【符号の説明】
【０１０３】
１〜５  暗号システム
【図１】
2018112612.tif 000003
【図２】
2018112612.tif 000004
【図３】
2018112612.tif 000005
【図４】
2018112612.tif 000006