(57)【要約】【課題】秘密鍵関数型暗号だけを利用して任意の多項式サイズの回路に対する識別不可能性難読化技術を提供する。【解決手段】セキュリティパラメータλ~と回路Cの入力サイズnと回路Cから難読化回路C~を生成する難読化回路生成部とを含む難読化回路生成装置であって、難読化回路生成部は、穴あけ可能秘密鍵関数型暗号WeakSuc、秘密鍵暗号SKE、穴あけ可能擬似ランダム関数PPRF、ユニバーサル回路Uを用いて構成されるC~n生成部と、C~n-1生成部と、…、C~1生成部を含み、C~n生成部、C~n-1生成部、…、C~1生成部を用いて、再帰的に難読化回路C~を生成する。【選択図】図８
2019049641.tif 000002
【特許請求の範囲】
【請求項１】
λ~をセキュリティパラメータ、Cを入力サイズがn（ただし、nは1以上の整数）である難読化対象回路とし、
前記セキュリティパラメータλ~と前記回路Cの入力サイズnと前記回路Cから難読化回路C~を生成する難読化回路生成部と
を含む難読化回路生成装置であって、
前記難読化回路生成部は、
WeakSuc=(WS.Setup, WS.KG, WS.Enc, WS.Dec, WS.Punc, WS.PEnc)を穴あけ可能秘密鍵関数型暗号、SKE=(E, D)を秘密鍵暗号、PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数、Uをユニバーサル回路とし、
Ciを入力サイズがi（ただし、iは1以上n以下の整数）である難読化対象回路とし、
C~n生成部と、C~n-1生成部と、…、C~1生成部とを含み、
前記C~i生成部（i>1）は、
セキュリティパラメータと回路の入力サイズと回路の組(1λ~, i, Ci)を入力とし、
(1)Ki,0,Ki,1←r{0,1}λ~を選択し、CTi,0ske←E(Ki,0, Ci)、CTi,1ske←E(Ki,1, Ci)を生成し、
(2)MSKi←WS.Setup(1λ~)を生成し、skEv_i←WS.KG(MSKi, Evi[CTi,0ske,CTi,1ske])を生成し（ただし、2≦i≦nに対して、回路計算回路Evi[CTi,0ske,CTi,1ske](x(i),K,α)は、暗号文CTi,0skeとCTi,1ske、ユニバーサル回路U(・,・)を回路に直接書き込まれている値、文字列x(i)∈{0,1}i、秘密鍵暗号SKEの秘密鍵K、ビットα∈{0,1}を入力とし、1)Ci←D(K, CTi,αske)を計算し、2）U(Ci, x(i))を出力する回路）、
(3)Si←r{0,1}λ~を選択し、前記C~i-1生成部を用いて、セキュリティパラメータと回路の入力サイズと回路の組(1λ~, i-1, Ei-1,0[MSKi,Ki,0,Si])からE~i-1を生成し（ただし、3≦i≦n、α∈{0,1}に対して、暗号化回路Ei-1,α[MSKi,Ki,Si](x(i-1))は、マスター秘密鍵MSKi、秘密鍵暗号SKEの秘密鍵Ki、穴あけ可能PRF鍵Siを回路に直接書き込まれている値、文字列x(i-1)∈{0,1}i-1を入力とし、1)xi∈{0,1}に対して、rx_(i-1)||x_iEnc←FS_i(x(i-1)||xi)を計算し、CTi,x_i←WS.Enc(MSKi,x(i-1),(x(i-1)||xi, Ki, α); rx_(i-1)||x_iEnc)を計算し、2)(CTi,0, CTi,1)を出力する回路）、
(4)C~i←(skEv_i, E~i-1)を生成し、
前記C~1生成部は、
セキュリティパラメータと回路の入力サイズと回路の組(1λ~, 1, C1)を入力とし、
C~1←(C1(0),C1(1))を生成する
難読化回路生成装置。
【請求項２】
λ~をセキュリティパラメータ、Cを入力サイズがn（ただし、nは1以上の整数）である難読化対象回路、C~を請求項１に記載の難読化回路生成装置により前記回路Cを難読化した難読化回路、x(n)∈{0,1}nを前記難読化回路C~に対する入力値とし、
前記難読化回路C~の入力サイズnと前記難読化回路C~と前記入力値x(n)から、前記回路Cの出力値C(x(n))を計算する難読化回路計算部と
を含む難読化回路計算装置であって、
前記難読化回路計算部は、
WeakSuc=(WS.Setup, WS.KG, WS.Enc, WS.Dec, WS.Punc, WS.PEnc)を穴あけ可能秘密鍵関数型暗号、SKE=(E, D)を秘密鍵暗号、PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数、Uをユニバーサル回路とし、
Ciを入力サイズがi（ただし、iは1以上の整数）である難読化対象回路、C~iを請求項１に記載の難読化回路生成装置により前記回路Ciを難読化した難読化回路とし、
yn計算部と、yn-1計算部と、…、y1計算部とを含み、
前記yi計算部（i>1）は、
回路の入力サイズと回路と回路への入力値の組(i, C~i, x(i))を入力とし、
(1)(skEv_i, E~i-1) ←C~i、x(i-1)||xi←x(i)とパースし、
(2)前記yi-1計算部を用いて、回路の入力サイズと回路と回路への入力値の組(i-1, E~i-1, x(i-1))から(CTi,0, CTi,i)を計算し、
(3)yi←WS.Dec(skEv_i, x(i-1), CTi,x_i)を計算し、
前記y1計算部は、
回路の入力サイズと回路と回路への入力値の組(1, C~1, x(1))を入力とし、
(CT1,0,CT1,1)←C~1とパースし、y1←CT1,x_(1)を計算する
難読化回路計算装置。
【請求項３】
λ~をセキュリティパラメータ、Cを入力サイズがn（ただし、nは1以上の整数）である難読化対象回路とし、
難読化回路生成装置が、前記セキュリティパラメータλ~と前記回路Cの入力サイズnと前記回路Cから難読化回路C~を生成する難読化回路生成ステップと
を含む難読化回路生成方法であって、
前記難読化回路生成ステップは、
WeakSuc=(WS.Setup, WS.KG, WS.Enc, WS.Dec, WS.Punc, WS.PEnc)を穴あけ可能秘密鍵関数型暗号、SKE=(E, D)を秘密鍵暗号、PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数、Uをユニバーサル回路とし、
Ciを入力サイズがi（ただし、iは1以上n以下の整数）である難読化対象回路とし、
C~n生成ステップと、C~n-1生成ステップと、…、C~1生成ステップとを含み、
前記C~i生成ステップ（i>1）は、
セキュリティパラメータと回路の入力サイズと回路の組(1λ~, i, Ci)を入力とし、
(1)Ki,0,Ki,1←r{0,1}λ~を選択し、CTi,0ske←E(Ki,0, Ci)、CTi,1ske←E(Ki,1, Ci)を生成し、
(2)MSKi←WS.Setup(1λ~)を生成し、skEv_i←WS.KG(MSKi, Evi[CTi,0ske,CTi,1ske])を生成し（ただし、2≦i≦nに対して、回路計算回路Evi[CTi,0ske,CTi,1ske](x(i),K,α)は、暗号文CTi,0skeとCTi,1ske、ユニバーサル回路U(・,・)を回路に直接書き込まれている値、文字列x(i)∈{0,1}i、秘密鍵暗号SKEの秘密鍵K、ビットα∈{0,1}を入力とし、1)Ci←D(K, CTi,αske)を計算し、2）U(Ci, x(i))を出力する回路）、
(3)Si←r{0,1}λ~を選択し、前記C~i-1生成部を用いて、セキュリティパラメータと回路の入力サイズと回路の組(1λ~, i-1, Ei-1,0[MSKi,Ki,0,Si])からE~i-1を生成し（ただし、3≦i≦n、α∈{0,1}に対して、暗号化回路Ei-1,α[MSKi,Ki,Si](x(i-1))は、マスター秘密鍵MSKi、秘密鍵暗号SKEの秘密鍵Ki、穴あけ可能PRF鍵Siを回路に直接書き込まれている値、文字列x(i-1)∈{0,1}i-1を入力とし、1)xi∈{0,1}に対して、rx_(i-1)||x_iEnc←FS_i(x(i-1)||xi)を計算し、CTi,x_i←WS.Enc(MSKi,x(i-1),(x(i-1)||xi, Ki, α); rx_(i-1)||x_iEnc)を計算し、2)(CTi,0, CTi,1)を出力する回路）、
(4)C~i←(skEv_i, E~i-1)を生成し、
前記C~1生成ステップは、
セキュリティパラメータと回路の入力サイズと回路の組(1λ~, 1, C1)を入力とし、
C~1←(C1(0),C1(1))を生成する
難読化回路生成方法。
【請求項４】
λ~をセキュリティパラメータ、Cを入力サイズがn（ただし、nは1以上の整数）である難読化対象回路、C~を請求項１に記載の難読化回路生成装置により前記回路Cを難読化した難読化回路、x(n)∈{0,1}nを前記難読化回路C~に対する入力値とし、
難読化回路計算装置が、前記難読化回路C~の入力サイズnと前記難読化回路C~と前記入力値x(n)から、前記回路Cの出力値C(x(n))を計算する難読化回路計算ステップと
を含む難読化回路計算方法であって、
前記難読化回路計算ステップは、
WeakSuc=(WS.Setup, WS.KG, WS.Enc, WS.Dec, WS.Punc, WS.PEnc)を穴あけ可能秘密鍵関数型暗号、SKE=(E, D)を秘密鍵暗号、PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数、Uをユニバーサル回路とし、
Ciを入力サイズがi（ただし、iは1以上の整数）である難読化対象回路、C~iを請求項１に記載の難読化回路生成装置により前記回路Ciを難読化した難読化回路とし、
yn計算ステップと、yn-1計算ステップと、…、y1計算ステップとを含み、
前記yi計算ステップ（i>1）は、
回路の入力サイズと回路と回路への入力値の組(i, C~i, x(i))を入力とし、
(1)(skEv_i, E~i-1) ←C~i、x(i-1)||xi←x(i)とパースし、
(2)前記yi-1計算部を用いて、回路の入力サイズと回路と回路への入力値の組(i-1, E~i-1, x(i-1))から(CTi,0, CTi,i)を計算し、
(3)yi←WS.Dec(skEv_i, x(i-1), CTi,x_i)を計算し、
前記y1計算ステップは、
回路の入力サイズと回路と回路への入力値の組(1, C~1, x(1))を入力とし、
(CT1,0,CT1,1)←C~1とパースし、y1←CT1,x_(1)を計算する
難読化回路計算方法。
【請求項５】
請求項１に記載の難読化回路生成装置または請求項２に記載の難読化回路計算装置のいずれかの装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路を難読化する技術に関し、特に秘密鍵関数型暗号を用いて構成される識別不可能性難読化技術に関する。
【背景技術】
【０００２】
識別不可能性難読化器の構成方法はこれまでにいくつか知られている。その構成方法は大きく分けて２通りある。１つは、多重線形写像を用いて、直接識別不可能性難読化器を構成する方法である（非特許文献１、非特許文献２、非特許文献３、非特許文献４、非特許文献５、非特許文献６、非特許文献７、非特許文献８、非特許文献９、非特許文献１０）。もう１つは、例えば、公開鍵暗号、電子署名、IDベース暗号などの一般的な暗号技術を用いて構成する方法である（非特許文献１１、非特許文献１２、非特許文献１３、非特許文献１４、非特許文献１５、非特許文献１６）。
【０００３】
以下、一般的な暗号技術を用いて構成する方法についてさらに詳しく説明する。非特許文献１１、非特許文献１２では、識別不可能性難読化器を構成する部品となる暗号技術として、1-key弱簡素性公開鍵関数型暗号を利用している。また、非特許文献１４、非特許文献１５では、結託耐性を持つ秘密鍵関数型暗号と（標準的な）公開鍵暗号を利用して識別不可能性難読化器を構成している。さらに、非特許文献１６では、結託耐性を持つ秘密鍵関数型暗号だけを利用して識別不可能性難読化器を構成している。
【０００４】
公開鍵関数型暗号は自明に秘密鍵関数型暗号になるため、公開鍵関数型暗号は秘密鍵関数型暗号より強い部品といえる。したがって、識別不可能性難読化器の構成には、公開鍵関数型暗号よりも秘密鍵関数型暗号を利用して構成できる方が好ましい。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】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.
【非特許文献２】Boaz Barak, Sanjam Garg, Yael Tauman Kalai, Omer Paneth, and Amit Sahai, “Protecting obfuscation against algebraic attacks”, In Phong Q. Nguyen and Elisabeth Oswald, editors, EUROCRYPT 2014, volume 8441 of LNCS, pages 221-238, Springer, Heidelberg, May 2014.
【非特許文献３】Prabhanjan Vijendra Ananth, Divya Gupta, Yuval Ishai, and Amit Sahai, “Optimizing obfuscation: Avoiding Barrington's theorem”, In Gail-Joon Ahn, Moti Yung, and Ninghui Li, editors, ACM CCS 14, pages 646-658, ACM Press, November 2014.
【非特許文献４】Joe Zimmerman, “How to obfuscate programs directly”, In Elisabeth Oswald and Marc Fischlin, editors, EUROCRYPT 2015, Part II, volume 9057 of LNCS, pages 439-467, Springer, Heidelberg, April 2015.
【非特許文献５】Benny Applebaum and Zvika Brakerski, “Obfuscating circuits via composite-order graded encoding”, In Yevgeniy Dodis and Jesper Buus Nielsen, editors, TCC 2015, Part II, volume 9015 of LNCS, pages 528-556, Springer, Heidelberg, March 2015.
【非特許文献６】Eric Miles, Amit Sahai, and Mor Weiss, “Protecting obfuscation against arithmetic attacks”, Cryptology ePrint Archive, Report 2014/878, <http://eprint.iacr.org/2014/878>, 2014.
【非特許文献７】Eric Miles, Amit Sahai, and Mark Zhandry, “Annihilation attacks for multilinear maps: Cryptanalysis of indistinguishability obfuscation over GGH13”, Cryptology ePrint Archive, Report 2016/147, <http://eprint.iacr.org/2016/147>, 2016.
【非特許文献８】Craig Gentry, Allison Bishop Lewko, Amit Sahai, and Brent Waters, “Indistinguishability obfuscation from the multilinear subgroup elimination assumption”, In Venkatesan Guruswami, editor, 56th FOCS, pages 151-170, IEEE Computer Society Press, October 2015.
【非特許文献９】Rafael Pass, Karn Seth, and Sidharth Telang, “Indistinguishability obfuscation from semantically-secure multilinear encodings”, In Juan A. Garay and Rosario Gennaro, editors, CRYPTO 2014, Part I, volume 8616 of LNCS, pages 500-517, Springer, Heidelberg, August 2014.
【非特許文献１０】Huijia Lin, “Indistinguishability obfuscation from constant-degree graded encoding schemes”, In Marc Fischlin and Jean-Sebastien Coron, editors, EUROCRYPT 2016, Part I, volume 9665 of LNCS, pages 28-57. Springer, Heidelberg, May 2016.
【非特許文献１１】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 Venkatesan Guruswami, editor, 56th FOCS, pages 171-190, IEEE Computer Society Press, October 2015.
【非特許文献１３】Prabhanjan Ananth, Abhishek Jain, and Amit Sahai, “Indistinguishability obfuscation from functional encryption for simple functions”, Cryptology ePrint Archive, Report 2015/730, <http://eprint.iacr.org/2015/730>, 2015.
【非特許文献１４】Nir Bitansky, Ryo Nishimaki, Alain Passelegue, and Daniel Wichs, “From cryptomania to obfustopia through secret-key functional encryption”, Cryptology ePrint Archive, Report 2016/558, <http://eprint.iacr.org/2016/558>, 2016.
【非特許文献１５】Fuyuki Kitagawa, Ryo Nishimaki, and Keisuke Tanaka, “Indistinguishability obfuscation: Simpler constructions using secret-key functional encryption”, IACR Cryptology ePrint Archive, 2017:275, 2017.
【非特許文献１６】Ilan Komargodski and Gil Segev, “From minicrypt to obfustopia via private-key functional encryption”, IACR Cryptology ePrint Archive, 2017:080, 2017.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、非特許文献１６を用いて構成できる識別不可能性難読化器が扱える回路の入力サイズは高々(logλ)1+δ、回路のサイズは高々2(logλ)^νでしかない（ここで、λはセキュリティパラメータ、δ(<1)、ν(<1)は定数であり、^（キャレット）は上付き添字を表す）。これは、任意の多項式サイズ回路を扱える識別不可能性難読化器よりも弱い機能しか持たないことを意味する。なぜなら、任意の多項式サイズ回路の場合、入力サイズはn=λ、回路サイズはpoly(λ)であり、それぞれλ>(logλ)1+δ、poly(λ)>2logλ>2(logλ)^νが成立、多項式サイズ回路に対する識別不可能性難読化器は、非特許文献１６を用いて構成できる識別不可能性難読化器が扱える回路よりもより多くの回路を扱えるからである。
【０００７】
そこで本発明では、秘密鍵関数型暗号だけを利用して任意の多項式サイズの回路に対する識別不可能性難読化技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一態様は、λ~をセキュリティパラメータ、Cを入力サイズがn（ただし、nは1以上の整数）である難読化対象回路とし、前記セキュリティパラメータλ~と前記回路Cの入力サイズnと前記回路Cから難読化回路C~を生成する難読化回路生成部とを含む難読化回路生成装置であって、前記難読化回路生成部は、WeakSuc=(WS.Setup, WS.KG, WS.Enc, WS.Dec, WS.Punc, WS.PEnc)を穴あけ可能秘密鍵関数型暗号、SKE=(E, D)を秘密鍵暗号、PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数、Uをユニバーサル回路とし、Ciを入力サイズがi（ただし、iは1以上n以下の整数）である難読化対象回路とし、C~n生成部と、C~n-1生成部と、…、C~1生成部とを含み、前記C~i生成部（i>1）は、セキュリティパラメータと回路の入力サイズと回路の組(1λ~, i, Ci)を入力とし、(1)Ki,0,Ki,1←r{0,1}λ~を選択し、CTi,0ske←E(Ki,0, Ci)、CTi,1ske←E(Ki,1, Ci)を生成し、(2)MSKi←WS.Setup(1λ~)を生成し、skEv_i←WS.KG(MSKi, Evi[CTi,0ske,CTi,1ske])を生成し（ただし、2≦i≦nに対して、回路計算回路Evi[CTi,0ske,CTi,1ske](x(i),K,α)は、暗号文CTi,0skeとCTi,1ske、ユニバーサル回路U(・,・)を回路に直接書き込まれている値、文字列x(i)∈{0,1}i、秘密鍵暗号SKEの秘密鍵K、ビットα∈{0,1}を入力とし、1)Ci←D(K, CTi,αske)を計算し、2）U(Ci, x(i))を出力する回路）、(3)Si←r{0,1}λ~を選択し、前記C~i-1生成部を用いて、セキュリティパラメータと回路の入力サイズと回路の組(1λ~, i-1, Ei-1,0[MSKi,Ki,0,Si])からE~i-1を生成し（ただし、3≦i≦n、α∈{0,1}に対して、暗号化回路Ei-1,α[MSKi,Ki,Si](x(i-1))は、マスター秘密鍵MSKi、秘密鍵暗号SKEの秘密鍵Ki、穴あけ可能PRF鍵Siを回路に直接書き込まれている値、文字列x(i-1)∈{0,1}i-1を入力とし、1)xi∈{0,1}に対して、rx_(i-1)||x_iEnc←FS_i(x(i-1)||xi)を計算し、CTi,x_i←WS.Enc(MSKi,x(i-1),(x(i-1)||xi, Ki, α); rx_(i-1)||x_iEnc)を計算し、2)(CTi,0, CTi,1)を出力する回路）、(4)C~i←(skEv_i, E~i-1)を生成し、前記C~1生成部は、セキュリティパラメータと回路の入力サイズと回路の組(1λ~, 1, C1)を入力とし、C~1←(C1(0),C1(1))を生成する。
【０００９】
本発明の一態様は、λ~をセキュリティパラメータ、Cを入力サイズがn（ただし、nは1以上の整数）である難読化対象回路、C~を請求項１に記載の難読化回路生成装置により前記回路Cを難読化した難読化回路、x(n)∈{0,1}nを前記難読化回路C~に対する入力値とし、前記難読化回路C~の入力サイズnと前記難読化回路C~と前記入力値x(n)から、前記回路Cの出力値C(x(n))を計算する難読化回路計算部とを含む難読化回路計算装置であって、前記難読化回路計算部は、WeakSuc=(WS.Setup, WS.KG, WS.Enc, WS.Dec, WS.Punc, WS.PEnc)を穴あけ可能秘密鍵関数型暗号、SKE=(E, D)を秘密鍵暗号、PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数、Uをユニバーサル回路とし、Ciを入力サイズがi（ただし、iは1以上の整数）である難読化対象回路、C~iを請求項１に記載の難読化回路生成装置により前記回路Ciを難読化した難読化回路とし、yn計算部と、yn-1計算部と、…、y1計算部とを含み、前記yi計算部（i>1）は、回路の入力サイズと回路と回路への入力値の組(i, C~i, x(i))を入力とし、(1)(skEv_i, E~i-1) ←C~i、x(i-1)||xi←x(i)とパースし、(2)前記yi-1計算部を用いて、回路の入力サイズと回路と回路への入力値の組(i-1, E~i-1, x(i-1))から(CTi,0, CTi,i)を計算し、(3)yi←WS.Dec(skEv_i, x(i-1), CTi,x_i)を計算し、前記y1計算部は、回路の入力サイズと回路と回路への入力値の組(1, C~1, x(1))を入力とし、(CT1,0,CT1,1)←C~1とパースし、y1←CT1,x_(1)を計算する。
【発明の効果】
【００１０】
本発明によれば、秘密鍵関数型暗号だけを利用して任意の多項式サイズの回路に対する識別不可能性難読化技術を構成することができる。このことは、より弱い暗号仮定から任意の多項式サイズの回路に対する識別不可能性難読化技術が構成できたことを意味する。
【図面の簡単な説明】
【００１１】
【図１】秘密鍵関数型暗号OneKey処理システム１００の構成の一例を示すブロック図。
【図２】システムパラメータ生成装置１１０の構成の一例を示すブロック図。
【図３】暗号化装置１２０の構成の一例を示すブロック図。
【図４】復号装置１３０の構成の一例を示すブロック図。
【図５】穴あき鍵生成装置１４０の構成の一例を示すブロック図。
【図６】穴あき暗号化装置１５０の構成の一例を示すブロック図。
【図７】難読化処理システム４００の構成の一例を示すブロック図。
【図８】難読化回路生成装置４１０の構成の一例を示すブロック図。
【図９】難読化回路生成部４１２の構成の一例を示すブロック図。
【図１０】難読化回路生成部４１２の動作の一例を示すフローチャート。
【図１１】難読化回路計算装置４２０の構成の一例を示すブロック図。
【図１２】難読化回路計算部４２１の構成の一例を示すブロック図。
【図１３】難読化回路計算部４２１の動作の一例を示すフローチャート。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について、詳細に説明する。なお、同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【００１３】
＜記法・用語＞
まず、記法や基礎的概念について説明する。
【００１４】
^（キャレット）は上付き添字を表す。例えば、xy^zはyzがxに対する上付き添字であり、xy^zはyzがxに対する下付き添字であることを表す。また、_（アンダースコア）は下付き添字を表す。例えば、xy_zはyzがxに対する上付き添字であり、xy_zはyzがxに対する下付き添字であることを表す。
【００１５】
有限集合Xから要素xを一様ランダムに選ぶことを、x←Xと表す。
【００１６】
アルゴリズムAについて、入力xに対してアルゴリズムAがyを出力することを、y←A(x)と表す。なお、アルゴリズムAが乱数rを用いていることを明示したいときは、y←A(x;r)と表す。
【００１７】
文字列x,yに対して、x||yは文字列xと文字列yを連結した文字列を表す。||を連結演算子という。
【００１８】
mを1以上の整数とし、[m]={1,…,m}とする。
【００１９】
λをセキュリティパラメータとする。
【００２０】
y:=zは、yにzが設定または代入されること、あるいはyがzにより定義されることを表す。
【００２１】
次に、暗号に関する要素技術について説明する。なお、以下説明する要素技術のいくつかについては、例えば、非特許文献１５に詳しく説明されている。
【００２２】
［秘密鍵暗号(secret-key encryption)］
（標準的な）秘密鍵暗号アルゴリズムをSKE=(Enc, Dec)とする。暗号化アルゴリズムEncは、秘密鍵K∈{0,1}λと平文m∈M（ただし、MはSKEの平文空間である）を入力とし、暗号文cを出力する。復号アルゴリズムDecは、秘密鍵Kと暗号文cを入力とし、平文m~∈{⊥}∪M（ただし、⊥はエラーを表す）を出力する。暗号化アルゴリズムEnc、復号アルゴリズムDecはいずれも確率的多項式時間アルゴリズム(PPT)である。
【００２３】
［擬似ランダム関数(pseudo-random function)］
PRF:={FK:{0,1}m_1→{0,1}m_2|K∈{0,1}λ}を擬似ランダム関数(PRF)の族とする（ただし、m1,m2はλの多項式である）。なお、KをPRF鍵という。
【００２４】
穴あけ可能擬似ランダム関数をPPRF=(F,PuncF)とする。このとき、任意の多項式サイズの集合S⊆Dに対して、x∈D-Sを任意の点として、以下が成り立つ。
【００２５】
【数１】
2019049641.tif 000003
【００２６】
［秘匿化スキーム(Garbling scheme)］
{Cn}n∈N（ただし、Nは自然数の集合）を回路集合Cnの族とする（ただし、回路集合Cnの要素である回路はnビットを入力とする回路である）。秘匿化スキームをGC=(Grbl,Eval)とする。秘匿化回路生成アルゴリズムGrblは、セキュリティパラメータ1λと回路C∈Cnを入力とし、秘匿化回路C~と2n個のワイヤーキー（ラベルともいう）{wi,α}i∈[n]、α∈{0,1}を出力する。秘匿化回路評価アルゴリズムEvalは、秘匿化回路C~とn個のワイヤーキー{wi,x_i}i∈[n]（ただし、xi∈{0,1}）を入力とし、yを出力する。ここで、y=C(x1,…,xn)である。
【００２７】
［分解可能ランダムエンコーディング(decomposable randomized encoding)］
cを1以上の整数とする。関数f:{0,1}n→{0,1}mに対するc局所分解可能ランダムエンコーディングをRE=(RE.E,RE.D)とする。エンコーディングアルゴリズムRE.Eは、セキュリティパラメータ1λと関数fと関数fへの入力xを入力とし、乱数rを用いて、エンコーディングf^(x;r)を出力する（ただし、f^:{0,1}n×{0,1}ρ→{0,1}μ）。デコーディングアルゴリズムRE.Dは、エンコーディングf^(x;r)を入力とし、関数値f(x)を出力する。ここで、μをREの分解エンコード数、{0,1}ρ（ただし、ρをλの多項式とする）をREの乱数空間という。
【００２８】
また、エンコーディングf^(x;r)は、集合(R1,…, Rμ)を用いてf^(x;r)=(f^1(x;rR_1),…, f^μ(x;rR_μ))と表現できる。このとき、すべてのi∈[μ]に対して、Ri⊆[ρ]、|Ri|=cとなる。
【００２９】
［秘密鍵関数型暗号(secret-key functional encryption)］
M:={Mλ}λ∈Nをメッセージ空間、Y:={Yλ}λ∈Nを値域、I:={Iλ}λ∈Nをインデックス空間、F:={Fλ}λ∈Nを関数空間とする（ただし、f∈Fは、定義域をM、値域をYとする関数である）。秘密鍵関数型暗号をSKFE=(Setup, KG, Enc, Dec)とする。セットアップアルゴリズムSetupは、セキュリティパラメータ1λを入力とし、マスター秘密鍵MSKを出力する。関数復号鍵生成アルゴリズムKGは、マスター秘密鍵MSKと関数f∈Fとインデックスi∈Iを入力とし、関数fの秘密鍵skfを出力する（以下、秘密鍵skfを関数復号鍵という）。暗号化アルゴリズムEncは、マスター秘密鍵MSKと平文x∈Mを入力とし、暗号文CTを出力する。復号アルゴリズムDecは、関数f∈Fに対する関数復号鍵skfと暗号文CTを入力とし、y∈Yまたは⊥を出力する。ここで、y=f(x)である。
【００３０】
秘密鍵関数型暗号以外の要素技術である秘密鍵暗号、穴あけ可能擬似ランダム関数、秘匿化スキーム、分解可能ランダムエンコーディングは、一方向性関数から構成可能であることが知られている。また、秘密鍵関数型暗号は自明に一方向性を含意する。したがって、秘密鍵暗号、穴あけ可能擬似ランダム関数、秘匿化スキーム、分解可能ランダムエンコーディング、秘密鍵関数型暗号は、いずれも秘密鍵関数型暗号から構成可能である。
【００３１】
以下、本発明の実施の形態を説明する上で、特に重要な概念である識別不可能難読化器と穴あけ可能秘密鍵関数型暗号について説明する。
【００３２】
［識別不可能性難読化器(indistinguishability obfuscator)］
難読化器とは、回路を異なる回路に変換する技術である。変換後の回路の機能は変換前の回路の機能と完全に同一である。また、変換後の回路は変換前の回路に関する情報を漏らさない。
【００３３】
特に、識別不可能性難読化器とは、同一の機能を持つ2つの異なる回路を変換したとき、変換後の回路はどちらの回路を変換して得られたものかわからないという特徴を有する難読化器である。識別不可能性難読化器をフォーマルに定式化すると、次のようになる。
【００３４】
確率的多項式時間機械iOが回路族{Cλ}λ∈Nに対する識別不可能性難読化器であるとは、以下の2つの条件（機能性）と（識別不可能性）を満たすことである。
（機能性）任意のセキュリティパラメータλ∈N、任意の回路C∈Cλ、任意の入力xに対して、
【００３５】
【数２】
2019049641.tif 000004
【００３６】
（識別不可能性）任意の多項式サイズ識別器Dに対して、無視できる関数μ(・)が存在し、任意の入力xに対してC0(x)=C1(x)が成立し、回路サイズが等しい（つまり、|C0|=|C1|）任意の回路の対C0,C1∈Cλ（ただし、λ∈Nは任意のセキュリティパラメータ）に対して、以下が成り立つ。
【００３７】
【数３】
2019049641.tif 000005
【００３８】
さらに、γ<1を定数とし、確率的多項式時間機械sxiOが回路族{Cλ}λ∈Nに対するγ-圧縮SXIO(Strong Exponentially-Efficient Indistinguishability Obfuscation)であるとは、上記（機能性）と（識別不可能性）の条件に加えて、以下の（非自明時間効率性）の条件を満たすことをいう。 
【００３９】
（非自明時間効率性）任意のセキュリティパラメータλ∈N、任意の入力長nの回路C∈{Cλ}λ∈Nに対して、入力(1λ,C)に対する確率的多項式時間機械sxiOの実行時間が、高々2nλ・poly(λ,|C|)となる。
【００４０】
γ-圧縮SXIOに関して、次の定理が知られている（非特許文献１４）。
（定理）結託耐性秘密鍵関数型暗号が存在するならば、任意の定数γ<1に対して、γ-圧縮SXIOが存在する。
【００４１】
［穴あけ可能秘密鍵関数型暗号(puncturable secret-key functional encryption)］
次に、穴あけ可能秘密鍵関数型暗号について説明する。なお、これは、非特許文献１２で導入された穴あけ可能秘密鍵関数型暗号の定義を緩和したものである。
【００４２】
穴あけ可能秘密鍵関数型暗号pSKFEとは、6つの確率的多項式時間アルゴリズムの組(Setup, KG, Enc, Dec, Punc, PEnc)である。以下、M、F、I、Tをそれぞれ穴あけ可能秘密鍵関数型暗号pSKFEのメッセージ空間、関数空間、インデックス空間、タグ空間とする。
【００４３】
セットアップアルゴリズムSetupは、セキュリティパラメータ1λを入力とし、マスター秘密鍵MSKを出力する。
【００４４】
関数復号鍵生成アルゴリズムKGは、マスター秘密鍵MSK、関数f∈F、インデックスi∈Iを入力とし、乱数rを用いて、関数fの関数復号鍵skfを出力する。
【００４５】
暗号化アルゴリズムEncは、マスター秘密鍵MSK、タグtag∈T、平文m∈Mを入力とし、乱数rを用いて、暗号文CTを出力する。
【００４６】
復号アルゴリズムDecは、関数復号鍵skf、タグtag∈T、暗号文CTを入力とし、平文m~∈{⊥}∪Mを出力する。
【００４７】
穴あき鍵生成アルゴリズムPuncは、マスター秘密鍵MSK、タグtag∈Tを入力とし、乱数rを用いて、穴あき鍵MSK*{tag}を出力する。
【００４８】
穴あき暗号化アルゴリズムPEncは、穴あき鍵MSK*、タグtag′∈T、平文m∈Mを入力とし、乱数rを用いて、暗号文CTを出力する。
【００４９】
穴あけ可能関数型暗号の弱簡素性と結託簡素性について、説明する。これらの、概念は、以下の＜技術的背景＞で用いるものである。
【００５０】
メッセージ空間M:={Mλ}上の関数空間F:={Fλ}に対して、n(λ)を関数空間Fの関数の入力長、s(λ)=maxf∈F_λ|f|を関数空間Fの関数の回路サイズの上限、d(λ)=maxf∈F_λdepth(f)を関数空間Fの関数の深さの上限とする。
【００５１】
穴あけ可能関数型暗号が弱簡素性(weakly succinct)を持つとは、暗号化回路および穴あけ可能暗号化回路のサイズがどちらもsγ・poly(n,λ)で抑えられることをいう。ただし、γ<1は定数、polyは固定の多項式である。なお、γを圧縮割合と呼ぶ。
【００５２】
同様に、穴あけ可能関数型暗号が結託簡素性(collusion succinct)を持つとは、暗号化回路および穴あけ可能暗号化回路のサイズがどちらもqγ・poly(n,λ,s)で抑えられることをいう。ただし、qは発行可能な鍵の数、γ<1は定数、polyは固定の多項式である。なお、γを圧縮割合と呼ぶ。
【００５３】
＜技術的背景＞
最初に、秘密鍵関数型暗号OneKey、CollSuc、WeakSucについて説明する。これらの3つの秘密鍵関数型暗号は、CollSucがOneKeyから構成され、WeakSucがCollSucから構成されるという関係にある。そして、最後に秘密鍵関数型暗号WeakSucを用いて、識別不可能性難読化器iOを構成する方法について説明する。
【００５４】
［発行可能な関数復号鍵が1つであり、簡素性を持たない穴あけ可能秘密鍵関数型暗号OneKey］
ここでは、一方向性関数から穴あけ可能秘密鍵関数型暗号OneKeyを構成する。穴あけ可能秘密鍵関数型暗号OneKeyは、関数復号鍵を1つだけ発行することができ、簡素性は持たない。以下、関数復号鍵を1つだけ発行することができる関数型暗号をシングルキー関数型暗号ともいう。
【００５５】
GC=(Grbl, Eval)を秘匿化スキーム、PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数とする。GCとPPRFを用いて、穴あけ可能秘密鍵関数型暗号OneKey=(1Key.Setup, 1Key.KG, 1Key.Enc, 1Key.Dec, 1Key.Punc, 1Key.PEnc)を構成する。
【００５６】
OneKeyのタグ空間は、PPRFの定義域と同一の{0,1}m_1である。また、OneKeyのインデックス空間は、[1]である。以下、インデックスを1に固定し、省略することとする。さらに、OneKeyの関数空間の関数fは、すべてsビット文字列(f[1], …, f[s])で表現できるものとする。したがって、各f[i]は1ビットである。
【００５７】
また、ユニバーサル回路Uは、回路C′と文字列x′を入力として、C′(x′)を出力する回路である。
【００５８】
穴あけ可能秘密鍵関数型暗号OneKeyの各アルゴリズムについて説明する。
【００５９】
（セットアップアルゴリズム1Key.Setup(1λ)）
(1)すべてのj∈[s]、α∈{0,1}に対して、Sj,α←r{0,1}λを生成する。
(2)マスター秘密鍵MSK←{Sj,α}j∈[s]、α∈{0,1}を出力する。
【００６０】
（関数復号鍵生成アルゴリズム1Key.KG(MSK,f)）
(1)入力であるマスター秘密鍵MSKと関数fを{Sj,α}j∈[s]、α∈{0,1}←MSK、(f[1], …, f[s])←fとパースする。
(2)関数復号鍵skf←(f,{Sj,f[j]}j∈[s])を出力する。
【００６１】
（暗号化アルゴリズム1Key.Enc(MSK, tag, m)）
(1)入力であるマスター秘密鍵MSKを{Sj,α}j∈[s]、α∈{0,1}←MSKとパースする。
(2)(U~, {Lj,α}j∈[s]、α∈{0,1})←Grbl(1λ, U(・, m))を計算する。なお、Lj,α∈{0,1}m_2（{0,1}m_2は穴あけ可能擬似ランダム関数PPRFの値域）である。
(3)すべてのj∈[s]、α∈{0,1}に対して、Rj,αとcj,αを次式により計算する。
【数４】
2019049641.tif 000006
(4)暗号文CT←(U~, {cj,α}j∈[s]、α∈{0,1})を出力する。
【００６２】
（復号アルゴリズム1Key.Dec(skf, tag, CT)）
(1)入力である関数復号鍵skfと暗号文CTを(f, { Sj,f[j]}j∈[s])←skf、(U~, {cj,α}j∈[s]、α∈{0,1})←CTとパースする。
(2)すべてのj∈[s]に対して、RjとLjを次式により計算する。
【数５】
2019049641.tif 000007
を計算する。
(3)y←Eval(U~, {Lj}j∈[s])を出力する。
【００６３】
（穴あき鍵生成アルゴリズム1Key.Punc(MSK, tag)）
(1)入力であるマスター秘密鍵MSKを{Sj,α}j∈[s]、α∈{0,1}←MSKとパースする。
(2)すべてのj∈[s]、α∈{0,1}に対して、S*j,α{tag}←PuncF(Sj,α, tag)を計算する。
(3)穴あき鍵MSK*{tag}←{S*j,α{tag}}j∈[s]、α∈{0,1}を出力する。
【００６４】
（穴あき暗号化アルゴリズム1Key.PEnc(MSK*, tag′, m)
(1)入力である穴あき鍵MSK*を{Sj,α}j∈[s]、α∈{0,1}←MSK*とパースする。
(2)(U~, {Lj,α}j∈[s]、α∈{0,1})←Grbl(1λ, U(・, m))を計算する。
(3)すべてのj∈[s]、α∈{0,1}に対して、Rj,αとcj,αを次式により計算する。
【数６】
2019049641.tif 000008
(4)暗号文CT←(U~, {cj,α}j∈[s]、α∈{0,1})を出力する。 
【００６５】
この穴あけ可能秘密鍵関数型暗号OneKeyに対して、以下の定理が成り立つ。
（定理１）GCを安全な秘匿化スキーム、PPRFを安全な穴あけ可能擬似ランダム関数とする。このとき、OneKeyは、発行可能な関数復号鍵が1つである、安全な穴あけ可能秘密鍵関数型暗号となる。
【００６６】
［発行可能な関数復号鍵の数がqであり、結託簡素性を持つ穴あけ可能秘密鍵関数型暗号CollSuc］
OneKey=(1Key.Setup, 1Key.KG, 1Key.Enc, 1Key.Dec, 1Key.Punc, 1Key.PEnc)を（定理１）の穴あけ可能秘密鍵関数型暗号とする。また、sxiOをγ-圧縮SXIO、PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数とする。OneKeyとsxiOとPPRFを用いて、穴あけ可能秘密鍵関数型暗号CollSuc=(CS.Setup, CS.KG, CS.Enc, CS.Dec, CS.Punc, CS.PEnc)を構成する。なお、ここで用いるPPRFは、OneKeyを構成する際に用いたPPRFとは異なるものである。具体的には、ここで用いるPPRFとOneKeyを構成する際に用いたPPRFは、定義域及び値域が異なる。
【００６７】
qは固定されたλの多項式である。また、CollSucのタグ空間はOneKeyのタグ空間と同一である。つまり、CollSucのタグ空間は、OneKeyの構成に用いた PPRFの定義域と同一の{0,1}m_1である。
【００６８】
穴あけ可能秘密鍵関数型暗号CollSucの各アルゴリズムについて説明する。
【００６９】
（セットアップアルゴリズムCS.Setup(1λ)）
(1)S←r{0,1}λを選択する。
(2)マスター秘密鍵MSK←Sを出力する。
【００７０】
（関数復号鍵生成アルゴリズムCS.KG(MSK,f,i)）
(1)入力であるマスター秘密鍵MSKをS←MSKとパースする。
(2)riSetup←FS(i)、MSKi←1Key.Setup(1λ;riSetup)を計算する。
(3)1Key.skf←1Key.KG(MSKi,f)を計算する。
(4)関数復号鍵skf←(i, 1Key.skf)を出力する。
【００７１】
（暗号化アルゴリズムCS.Enc(MSK, tag, m)）
(1)入力であるマスター秘密鍵MSKをS←MSKとパースする。
(2)SEnc←r{0,1}λを選択する。
(3)暗号文CT←sxiO(E1Key[S, SEnc, tag, m])を出力する。なお、暗号化回路E1Key[S, SEnc, tag, m](i)は、以下の通りである。
＜暗号化回路E1Key[S, SEnc, tag, m](i)＞
回路に直接書き込まれている値：穴あけ可能PRF鍵SとSEnc、タグtag、平文m
入力：インデックスi∈[q]
手順：
1)riSetup←FS(i)、rEnc←FS_Enc(i)を計算する。
2)MSKi←1Key.Setup(1λ;riSetup)を計算する。
3)暗号文CTi←1Key.Enc(MSKi, tag, m; rEnc)を出力する。
【００７２】
（復号アルゴリズムCS.Dec(skf, tag, CT)）
(1)入力である関数復号鍵skfを(i, 1Key.skf)←skfとパースする。
(2)CTi←CT(i)を計算する。ここで、CT(i)は、暗号化回路E1Key[S, SEnc, tag, m]を難読化した暗号化文CTにインデックスiを入力して計算した値である。
(3)y←1Key.Dec(1Key.skf, tag, CTi)を出力する。
【００７３】
（穴あき鍵生成アルゴリズムCS.Punc(MSK, tag)）
(1)入力であるマスター秘密鍵MSKをS←MSKとパースする。
(2)SPunc←r{0,1}λを選択する。
(3)P~←sxiO(P1Key[S, SPunc, tag])を計算する。なお、穴あき鍵生成回路P1Key[S, SPunc, tag](i)は、以下の通りである。
＜穴あき鍵生成回路P1Key[S, SPunc, tag](i)＞
回路に直接書き込まれている値：穴あけ可能PRF鍵SとSPunc、タグtag
入力：インデックスi∈[q]
手順：
1)riSetup←FS(i)、rPunc←FS_Punc(i)を計算する。
2)MSKi←1Key.Setup(1λ;riSetup)を計算する。
3)穴あき鍵MSK*i{tag}←1Key.Punc(MSKi, tag; rPunc)を出力する。
(4)穴あき鍵MSK*{tag}←P~を出力する。
【００７４】
（穴あき暗号化アルゴリズムCS.PEnc(MSK*, tag′, m)
(1)入力である穴あき鍵MSK*をP~←MSK*とパースする。
(2)SEnc←r{0,1}λを選択する。
(3)暗号文CT←sxiO(PE1Key[P~, SEnc, tag′, m])を出力する。なお、穴あき暗号化回路PE1Key[P~, SEnc, tag, m](i)は、以下の通りである。
＜穴あき暗号化回路PE1Key[P~, SEnc, tag, m](i)＞
回路に直接書き込まれている値：回路P~、穴あけ可能PRF鍵SEnc、タグtag、平文m
入力：インデックスi∈[q]
パディング：この回路のサイズは、分析により決定されるpadE:=padE(λ,n,s)にパディングされる。
手順：
1)MSK*i←P~(i)、rEnc←FS_Enc(i)を計算する。
2)CTi←1Key.PEnc(MSK*i, tag, m; rEnc)を出力する。
【００７５】
この穴あけ可能秘密鍵関数型暗号CollSucに対して、以下の定理が成り立つ。
（定理２）OneKeyを（定理１）の穴あけ可能秘密鍵関数型暗号、sxiOを安全なγ-圧縮SXIO、PPRFを安全な穴あけ可能擬似ランダム関数とする。このとき、CollSucは、発行可能な関数復号鍵の数がqである、安全な穴あけ可能秘密鍵関数型暗号である。また、CollSucは、結託簡素性を備える。
【００７６】
［発行可能な関数復号鍵の数が1つであり、弱簡素性を持つ穴あけ可能秘密鍵関数型暗号WeakSuc］
CollSuc=(CS.Setup, CS.KG, CS.Enc, CS.Dec, CS.Punc, CS.PEnc)を（定理２）の結託簡素性を備える穴あけ可能秘密鍵関数型暗号とする。ただし、μをλの多項式とし、CollSucのインデックス空間、タグ空間はそれぞれ[μ]、Tであるものとする（タグ空間Tは、OneKeyのタグ空間と同一である）。
【００７７】
また、RE=(RE.E,RE.D)をc局所分解可能ランダムエンコーディングとする。ただし、cは定数、μはREの分解エンコード数とする。ρをλの多項式とし、REの乱数空間{0,1}ρとする。
【００７８】
SKE=(E, D)を安全な秘密鍵暗号とする。PRFを擬似ランダム関数とする。
【００７９】
CollSucとREとSKEとFを用いて、穴あけ可能秘密鍵関数型暗号WeakSuc=(WS.Setup, WS.KG, WS.Enc, WS.Dec, WS.Punc, WS.PEnc)を構成する。
【００８０】
なお、WeakSucのタグ空間はTとなる。つまり、CollSucのタグ空間と同一になる。
【００８１】
穴あけ可能秘密鍵関数型暗号WeakSucの各アルゴリズムについて説明する。
【００８２】
（セットアップアルゴリズムWS.Setup(1λ)）
(1)マスター秘密鍵MSK←CS.Setup(1λ)を出力する。
【００８３】
（関数復号鍵生成アルゴリズムWS.KG(MSK,f)）
(1)K←r{0,1}λ、t←r{0,1}λを選択する。
(2)入力である関数fに対して、分解可能ランダムエンコーディングREのエンコーディングアルゴリズムRE.Eを用いて、エンコーディングf^(x;r)=(f^1(x;rR_1),…, f^μ(x;rR_μ))を集合(R1,…, Rμ)とともに生成する。ここで、すべてのi∈[μ]に対して、Ri⊆[ρ]、|Ri|=cとなる。
(3)すべてのi∈[μ]に対して、CTiske←E(K,0|f^_i(・,・)|)を生成し、skEn_i←CS.KG(MSK, Endre[f^i, Ri,t, CTiske],i)を計算する。ここで、|f^_i(・,・)|は、エンコーディングf^_iのサイズを表す。なお、分解可能ランダムエンコーディング計算回路Endre[f^i, Ri,t, CTiske](m,Sencd,K)は、以下の通りである。
＜分解可能ランダムエンコーディング計算回路Endre[f^i, Ri,t, CTiske](m,Sencd,K)＞
回路に直接書き込まれている値：エンコーディングf^i、集合Ri、文字列t、暗号文CTiske
入力：平文m、PRF鍵Sencd、秘密鍵暗号SKEの秘密鍵K
手順：
1)m=⊥の場合、ei←D(K, CTiske)を出力する。
2)それ以外の場合、以下の処理を行う。
2-1)すべてのj∈Riに対して、rj←PRF(Sencd,t||j)を計算して、rR_i←{rj}j∈R_iとする。
2-2)ei←f^i(m;rR_i)を出力する。
(4)関数復号鍵skf←(skEn_1,…, skEn_μ)を出力する。
【００８４】
（暗号化アルゴリズムWS.Enc(MSK, tag, m)）
(1)Sencd←r{0,1}λを選択する。
(2)暗号文CT←CS.Enc(MSK,tag,(m, Sencd ,⊥))を出力する。
【００８５】
（復号アルゴリズムWS.Dec(skf, tag, CT)）
(1)入力である関数復号鍵skfを(skEn_1,…, skEn_μ)←skfとパースする。
(2)すべてのi∈[μ]に対して、ei←CS.Dec(skEn_i, tag, CT)を計算する。
(3)分解可能ランダムエンコーディングREのデコーディングアルゴリズムRE.Dを用いて、(e1, …, eμ)からyを計算する。
(4)yを出力する。
【００８６】
（穴あき鍵生成アルゴリズムWS.Punc(MSK, tag)）
(1)穴あき鍵MSK*{tag}←CS.Punc(MSK, tag)を出力する。
【００８７】
（穴あき暗号化アルゴリズムWS.PEnc(MSK*, tag′, m)
(1)Sencd←r{0,1}λを選択する。
(2)暗号文CT←CS.PEnc(MSK*, tag′, (m, Sencd ,⊥))を出力する。 
【００８８】
この穴あけ可能秘密鍵関数型暗号WeakSucに対して、以下の定理が成り立つ。
（定理３）μをλの多項式とし、CollSucを発行可能な関数復号鍵の数がμであり、結託簡易性を備える（定理２）の穴あけ可能秘密鍵関数型暗号、REを安全なc局所分解可能ランダムエンコーディング、SKEを安全な秘密鍵暗号、PRFを安全な擬似ランダム関数とする。このとき、WeakSucは、発行可能な関数復号鍵の数が1つである、安全な穴あけ可能秘密鍵関数型暗号である。また、WeakSucは、弱簡素性を備える。
【００８９】
［識別不可能性難読化器iO］
WeakSuc=(WS.Setup, WS.KG, WS.Enc, WS.Dec, WS.Punc, WS.PEnc)を（定理３）の弱簡素性を備える穴あけ可能秘密鍵関数型暗号とする。SKE=(E, D)を秘密鍵暗号とする。PPRF=(F, PuncF)を穴あけ可能擬似ランダム関数とする。Uをユニバーサル回路とする。なお、ここで用いるPPRFは、OneKeyを構成する際に用いたPPRFやCollSucを構成する際に用いたPPRFとは異なるものである。具体的には、ここで用いるPPRFとOneKeyを構成する際に用いたPPRF・CollSucを構成する際に用いたPPRFは、定義域及び値域が異なる。
【００９０】
WeakSuc, SKE, PPRFが準指数的に安全である、つまり、攻撃者が攻撃に成功する確率が高々2-λ^ε（ただし、ε<1は定数）である場合、WeakSucとSKEとPPRFを用いて、任意の多項式サイズの回路に対する識別不可能性難読化器iOを以下のように構成することができる。
【００９１】
なお、以下の識別不可能性難読化器iOの構成では、WeakSucの穴あき鍵生成アルゴリズムWS.Puncと穴あき暗号化アルゴリズムWS.PEncを用いていない。しかし、これらのアルゴリズムWS.PuncとWS.PEncは安全性を数学的に証明する上で必須のものであり、欠くことができないものである。
【００９２】
難読化したい回路をC:{0,1}n→{0,1}m、セキュリティパラメータをλとする。
【００９３】
識別不可能性難読化器iOは、まず新しいセキュリティパラメータλ~=ω((n2+logλ)1/εを計算する（ただし、ωはランダウの記号、ε(<1)は定数）。新しいセキュリティパラメータλ~は、回路Cの入力サイズnとセキュリティパラメータλにより定まる値である。
【００９４】
次に、識別不可能性難読化器iOは、以下の再帰的な難読化手続きriO(1λ~, i, Ci)をi=n, Ci=Cとして呼び出し、回路Cを難読化した回路C~←riO(1λ~, n, C)を生成し、出力する。
【００９５】
（難読化手続きriO(1λ~, i, Ci)）
(1)i=1の場合、C~1←(C1(0),C1(1))を出力する。
(2)i>1の場合、以下の処理を実行する。
(2-1)Ki,0,Ki,1←r{0,1}λ~を選択し、CTi,0ske←E(Ki,0, Ci)、CTi,1ske←E(Ki,1, Ci)を生成する。
(2-2)MSKi←WS.Setup(1λ~)を生成し、skEv_i←WS.KG(MSKi, Evi[CTi,0ske,CTi,1ske])を生成する。なお、回路計算回路Evi[CTi,0ske,CTi,1ske](x(i),K,α)は、以下の通りである（ただし、2≦i≦n）。
＜回路計算回路Evi[CTi,0ske,CTi,1ske](x(i),K,α)＞
回路に直接書き込まれている値：暗号文CTi,0skeとCTi,1ske、ユニバーサル回路U(・,・)
入力：文字列x(i)∈{0,1}i、秘密鍵暗号SKEの秘密鍵K、ビットα∈{0,1}
手順：
1)Ci←D(K, CTi,αske)を計算する。
2)U(Ci, x(i))を出力する。
(2-3)Si←r{0,1}λ~を選択し、E~i-1←riO(1λ~, i-1, Ei-1,0[MSKi,Ki,0,Si])を生成する。なお、暗号化回路Ei-1,α[MSKi,Ki,Si](x(i-1))は、以下の通りである（ただし、3≦i≦n、α∈{0,1}）。
＜暗号化回路Ei-1,α[MSKi,Ki,Si](x(i-1))＞
回路に直接書き込まれている値：マスター秘密鍵MSKi、秘密鍵暗号SKEの秘密鍵Ki、穴あけ可能PRF鍵Si
入力：文字列x(i-1)∈{0,1}i-1
手順：
1)xi∈{0,1}に対して、以下の処理を実行する。
1-1)rx_(i-1)||x_iEnc←FS_i(x(i-1)||xi)を計算する。
1-2)CTi,x_i←WS.Enc(MSKi,x(i-1),(x(i-1)||xi, Ki, α); rx_(i-1)||x_iEnc)を計算する。
2)(CTi,0, CTi,1)を出力する。
(2-4)C~i←(skEv_i, E~i-1)を出力する。
【００９６】
一方、回路Cを難読化した回路C~を用いて入力値x(n)に対する回路Cの出力値C(x(n))を計算するには、識別不可能性難読化器iOは、難読化手続きriOに対応する以下の再帰的な回路計算手続きrEval(i, C~i, x(i)) をi=n, C~i=C~, x(i)=x(n)として呼び出す（ただし、C~←riO(1λ~, n, C)、x(n)∈{0,1}nである）。rEval(n, C~, x(n))を出力値C(x(n))とする。
【００９７】
（回路計算手続きrEval(i, C~i, x(i))）
(1)i=1の場合、(CT1,0,CT1,1)←C~1とパースし、y1←CT1,x_(1)を出力する。
(2)i>1の場合の場合、以下の処理を実行する。
(2-1)(skEv_i, E~i-1) ←C~i、x(i-1)||xi←x(i)とパースする。
(2-2)(CTi,0, CTi,i) ←rEval(i-1, E~i-1, x(i-1))を計算する。
(2-3)yi←WS.Dec(skEv_i, x(i-1), CTi,x_i) を出力する。
【００９８】
この識別不可能性難読化器iOに対して、以下の定理が成り立つ。
（定理４）発行可能な関数復号鍵の数が1つであり、攻撃者の攻撃成功確率が2-λ^ε（ただし、ε<1は定数）で抑えられるほど安全な多項式サイズ回路に対する弱簡素性穴あけ可能秘密鍵関数型暗号が存在するならば、任意の多項式サイズ回路に対する識別不可能性難読化器を構成することができる。
【００９９】
＜第一実施形態＞
＜＜秘密鍵関数型暗号OneKey処理システム＞＞
ここでは、秘密鍵関数型暗号OneKey処理システムについて説明する。このシステムは、＜技術的背景＞で説明した秘密鍵関数型暗号OneKeyを実行するシステムである。
【０１００】
［システム構成］
図１を参照して、秘密鍵関数型暗号OneKey処理システム１００について説明する。図１は、秘密鍵関数型暗号OneKey処理システム１００の構成の一例を示すブロック図である。秘密鍵関数型暗号OneKey処理システム１００は、システムパラメータ生成装置１１０、暗号化装置１２０、復号装置１３０、穴あき鍵生成装置１４０、穴あき暗号化装置１５０を含む。システムパラメータ生成装置１１０、暗号化装置１２０、復号装置１３０、穴あき鍵生成装置１４０、穴あき暗号化装置１５０は、インターネットなどのネットワーク８００に接続し、相互に通信可能である。
【０１０１】
次に、図２〜図６を参照して、システムパラメータ生成装置１１０、暗号化装置１２０、復号装置１３０、穴あき鍵生成装置１４０、穴あき暗号化装置１５０の各装置について説明する。図２は、システムパラメータ生成装置１１０の構成の一例を示すブロック図である。システムパラメータ生成装置１１０は、セットアップ部１１１、関数復号鍵生成部１１２、送受信部１１８、記録部１１９を含む。送受信部１１８は、システムパラメータ生成装置１１０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部１１９は、システムパラメータ生成装置１１０の処理に必要な情報を適宜記録する構成部である。例えば、システムパラメータ生成に用いるセキュリティパラメータλ、関数復号鍵の生成に用いる関数fを記録する。
【０１０２】
図３は、暗号化装置１２０の構成の一例を示すブロック図である。暗号化装置１２０は、暗号化部１２１、送受信部１２８、記録部１２９を含む。送受信部１２８は、暗号化装置１２０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部１２９は、暗号化装置１２０の処理に必要な情報を適宜記録する構成部である。例えば、マスター秘密鍵MSKを記録する。
【０１０３】
図４は、復号装置１３０の構成の一例を示すブロック図である。復号装置１３０は、復号部１３１、送受信部１３８、記録部１３９を含む。送受信部１３８は、復号装置１３０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部１３９は、復号装置１３０の処理に必要な情報を適宜記録する構成部である。例えば、関数復号鍵skfを記録する。
【０１０４】
図５は、穴あき鍵生成装置１４０の構成の一例を示すブロック図である。穴あき鍵生成装置１４０は、穴あき鍵生成部１４１、送受信部１４８、記録部１４９を含む。送受信部１４８は、穴あき鍵生成装置１４０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部１４９は、穴あき鍵生成装置１４０の処理に必要な情報を適宜記録する構成部である。例えば、マスター秘密鍵MSKを記録する。
【０１０５】
図６は、穴あき暗号化装置１５０の構成の一例を示すブロック図である。穴あき暗号化装置１５０は、穴あき暗号化部１５１、送受信部１５８、記録部１５９を含む。送受信部１５８は、穴あき暗号化装置１５０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部１５９は、穴あき暗号化装置１５０の処理に必要な情報を適宜記録する構成部である。例えば、穴あき鍵MSK*を記録する。
【０１０６】
［各装置における処理］
以下、システムパラメータ生成装置１１０、暗号化装置１２０、復号装置１３０、穴あき鍵生成装置１４０、穴あき暗号化装置１５０の各装置における処理について説明する。
【０１０７】
（システムパラメータ生成装置１１０における処理）
システムパラメータ生成装置１１０のセットアップ部１１１は、セットアップアルゴリズム1Key.Setupを用いて、セキュリティパラメータ1λからマスター秘密鍵MSKを生成し、出力する（Ｓ１１１）。システムパラメータ生成装置１１０は、マスター秘密鍵MSKを記録部１１９に記録する。システムパラメータ生成装置１１０の送受信部１１８は、マスター秘密鍵MSKを暗号化装置１２０と穴あき鍵生成装置１４０に送信する。なお、暗号化装置１２０と穴あき鍵生成装置１４０は、システムパラメータ生成装置１１０の送受信部１１８から受信したマスター秘密鍵MSKをそれぞれ記録部１２９と記録部１４９に記録する。
【０１０８】
システムパラメータ生成装置１１０の関数復号鍵生成部１１２は、関数復号鍵生成アルゴリズム1Key.KGを用いて、マスター秘密鍵MSKと関数fから関数復号鍵skfを生成し、出力する（Ｓ１１２）。システムパラメータ生成装置１１０は、関数復号鍵skfを記録部１１９に記録する。システムパラメータ生成装置１１０の送受信部１１８は、関数復号鍵skfを復号装置１３０に送信する。なお、復号装置１３０は、システムパラメータ生成装置１１０の送受信部１１８から受信した関数復号鍵skfを記録部１３９に記録する。
【０１０９】
（暗号化装置１２０における処理）
暗号化装置１２０の暗号化部１２１は、暗号化アルゴリズム1Key.Encを用いて、マスター秘密鍵MSKとタグtagと平文mから暗号文CTを生成し、出力する（Ｓ１２１）。ここで、暗号化アルゴリズム1Key.Encでは、秘匿化スキームGCの秘匿化回路生成アルゴリズムGrblとユニバーサル回路U(・,・)と穴あけ可能擬似ランダム関数PPRFのFが用いられる。また、平文mは、例えば、暗号化装置１２０のユーザが入力したテキストであり、タグtagは、システムで決まった長さを持つビット列であり、暗号化装置１２０のユーザが任意に選ぶことができる。暗号化装置１２０の送受信部１２８は、暗号文CTを復号装置１３０に送信する。なお、復号装置１３０は、暗号化装置１２０の送受信部１２８から受信した暗号文CTを記録部１３９に記録する。
【０１１０】
（復号装置１３０における処理）
復号装置１３０の復号部１３１は、復号アルゴリズム1Key.Decを用いて、関数復号鍵skfとタグtagと暗号文CTから復号結果yを生成し、出力する（Ｓ１３１）。ここで、復号アルゴリズム1Key.Decでは、穴あけ可能擬似ランダム関数PPRFのFと秘匿化スキームGCの秘匿化回路評価アルゴリズムEvalが用いられる。なお、関数復号鍵skf、暗号文CTが記録部１３９に記録されているものであり、タグtagが暗号文CT生成時に用いたものである場合、復号装置１３０の復号部１３１は、復号アルゴリズム1Key.Decを用いて、復号結果yとしてf(m)を得る。
【０１１１】
（穴あき鍵生成装置１４０における処理）
穴あき鍵生成装置１４０の穴あき鍵生成部１４１は、穴あき鍵生成アルゴリズム1Key.Puncを用いて、マスター秘密鍵MSKとタグtagから穴あき鍵MSK*{tag}を生成し、出力する（Ｓ１４１）。ここで、穴あき鍵生成アルゴリズム1Key.Puncでは、穴あけ可能擬似ランダム関数PPRFのPuncFが用いられる。穴あき鍵生成装置１４０の送受信部１４８は、穴あき鍵MSK*{tag}を穴あき暗号化装置１５０に送信する。なお、穴あき暗号化装置１５０は、穴あき鍵生成装置１４０の送受信部１４８から受信した穴あき鍵MSK*{tag}を記録部１４９に記録する。
【０１１２】
（穴あき暗号化装置１５０における処理）
穴あき暗号化装置１５０の穴あき暗号化部１５１は、穴あき暗号化アルゴリズム1Key.PEncを用いて、穴あき鍵MSK*とタグtag′から暗号文CTを生成し、出力する（Ｓ１４１）。ここで、穴あき暗号化アルゴリズム1Key.PEncでは、秘匿化スキームGCの秘匿化回路生成アルゴリズムGrblとユニバーサル回路U(・,・)と穴あけ可能擬似ランダム関数PPRFのFが用いられる。
【０１１３】
なお、ここで生成した暗号文CTは、暗号化装置１２０で生成された暗号文CTと同様に利用される。つまり、暗号化装置１２０で生成された暗号文CTの代わりに、ここで生成した暗号文CTを復号装置１３０に入力すると、復号部１３１は復号結果を得ることができる。ただし、穴あき鍵生成装置１４０で用いたタグtagと穴あき暗号化装置１５０で用いたタグtag′の間にtag≠tag′の関係が成立している限りにおいて、正しく復号されてf(m)が得られる。
【０１１４】
＜＜秘密鍵関数型暗号CollSuc処理システム＞＞
ここでは、秘密鍵関数型暗号CollSuc処理システムについて説明する。このシステムは、＜技術的背景＞で説明した秘密鍵関数型暗号CollSucを実行するシステムである。
【０１１５】
［システム構成］
秘密鍵関数型暗号CollSuc処理システム２００は、秘密鍵関数型暗号OneKey処理システム１００と同様の構成を有する。そこで、ここでは図を参照することなく、秘密鍵関数型暗号CollSuc処理システム２００について説明する。
【０１１６】
一例として、秘密鍵関数型暗号CollSuc処理システム２００は、システムパラメータ生成装置２１０、暗号化装置２２０、復号装置２３０、穴あき鍵生成装置２４０、穴あき暗号化装置２５０を含む。システムパラメータ生成装置２１０、暗号化装置２２０、復号装置２３０、穴あき鍵生成装置２４０、穴あき暗号化装置２５０は、インターネットなどのネットワーク８００に接続し、相互に通信可能である。
【０１１７】
次に、先ほど同様、図を参照することなく、システムパラメータ生成装置２１０、暗号化装置２２０、復号装置２３０、穴あき鍵生成装置２４０、穴あき暗号化装置２５０の各装置について説明する。一例として、システムパラメータ生成装置２１０は、セットアップ部２１１、関数復号鍵生成部２１２、送受信部２１８、記録部２１９を含む。送受信部２１８は、システムパラメータ生成装置２１０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部２１９は、システムパラメータ生成装置２１０の処理に必要な情報を適宜記録する構成部である。例えば、システムパラメータ生成に用いるセキュリティパラメータλ、関数復号鍵の生成に用いる関数f、セキュリティパラメータλの多項式として表現される整数qを記録する。
【０１１８】
一例として、暗号化装置２２０は、暗号化部２２１、送受信部２２８、記録部２２９を含む。送受信部２２８は、暗号化装置２２０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部２２９は、暗号化装置２２０の処理に必要な情報を適宜記録する構成部である。例えば、マスター秘密鍵MSKを記録する。
【０１１９】
一例として、復号装置２３０は、復号部２３１、送受信部２３８、記録部２３９を含む。送受信部２３８は、復号装置２３０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部２３９は、復号装置２３０の処理に必要な情報を適宜記録する構成部である。例えば、関数復号鍵skfを記録する。
【０１２０】
一例として、穴あき鍵生成装置２４０は、穴あき鍵生成部２４１、送受信部２４８、記録部２４９を含む。送受信部２４８は、穴あき鍵生成装置２４０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部２４９は、穴あき鍵生成装置２４０の処理に必要な情報を適宜記録する構成部である。例えば、マスター秘密鍵MSKを記録する。
【０１２１】
一例として、穴あき暗号化装置２５０は、穴あき暗号化部２５１、送受信部２５８、記録部２５９を含む。送受信部２５８は、穴あき暗号化装置２５０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部２５９は、穴あき暗号化装置２５０の処理に必要な情報を適宜記録する構成部である。例えば、穴あき鍵MSK*を記録する。
【０１２２】
［各装置における処理］
以下、システムパラメータ生成装置２１０、暗号化装置２２０、復号装置２３０、穴あき鍵生成装置２４０、穴あき暗号化装置２５０の各装置における処理について説明する。
【０１２３】
（システムパラメータ生成装置２１０における処理）
システムパラメータ生成装置２１０のセットアップ部２１１は、セットアップアルゴリズムCS.Setupを用いて、セキュリティパラメータ1λからマスター秘密鍵MSKを生成し、出力する（Ｓ２１１）。システムパラメータ生成装置２１０は、マスター秘密鍵MSKを記録部２１９に記録する。システムパラメータ生成装置２１０の送受信部２１８は、マスター秘密鍵MSKを暗号化装置２２０と穴あき鍵生成装置２４０に送信する。なお、暗号化装置２２０と穴あき鍵生成装置２４０は、システムパラメータ生成装置２１０の送受信部２１８から受信したマスター秘密鍵MSKをそれぞれ記録部２２９と記録部２４９に記録する。
【０１２４】
システムパラメータ生成装置２１０の関数復号鍵生成部２１２は、関数復号鍵生成アルゴリズムCS.KGを用いて、マスター秘密鍵MSKと関数fとインデックスi（iは1≦i≦qを満たす）から関数復号鍵skfを生成し、出力する（Ｓ２１２）。ここで、関数復号鍵生成アルゴリズムCS.KGでは、秘密鍵関数型暗号OneKeyのセットアップアルゴリズム1Key.Setupと関数復号鍵生成アルゴリズム1Key.KGと穴あけ可能擬似ランダム関数PPRFのFが用いられる。システムパラメータ生成装置２１０は、関数復号鍵skfを記録部２１９に記録する。システムパラメータ生成装置２１０の送受信部２１８は、関数復号鍵skfを復号装置２３０に送信する。なお、復号装置２３０は、システムパラメータ生成装置２１０の送受信部２１８から受信した関数復号鍵skfを記録部２３９に記録する。
【０１２５】
（暗号化装置２２０における処理）
暗号化装置２２０の暗号化部２２１は、暗号化アルゴリズムCS.Encを用いて、マスター秘密鍵MSKとタグtagと平文mから暗号文CTを生成し、出力する（Ｓ２２１）。ここで、暗号化アルゴリズムCS.Encでは、γ-圧縮SXIO sxiOと暗号化回路E1Keyが用いられる。なお、暗号化回路E1Keyはインデックスi（iは1≦i≦qを満たす）を入力として、秘密鍵関数型暗号OneKeyのセットアップアルゴリズム1Key.Setupと暗号化アルゴリズム1Key.Encを用いて、暗号文CTiを出力する回路である。また、平文mは、例えば、暗号化装置２２０のユーザが入力したテキストであり、タグtagは、システムで決まった長さを持つビット列であり、暗号化装置２２０のユーザが任意に選ぶことができる。暗号化装置２２０の送受信部２２８は、暗号文CTを復号装置２３０に送信する。なお、復号装置２３０は、暗号化装置２２０の送受信部２２８から受信した暗号文CTを記録部２３９に記録する。
【０１２６】
（復号装置２３０における処理）
復号装置２３０の復号部２３１は、復号アルゴリズムCS.Decを用いて、関数復号鍵skfとタグtagと暗号文CTから復号結果yを生成し、出力する（Ｓ２３１）。ここで、復号アルゴリズムCS.Decでは、秘密鍵関数型暗号OneKeyの復号アルゴリズム1Key.Decが用いられる。なお、関数復号鍵skf、暗号文CTが記録部２３９に記録されているものであり、タグtagが暗号文CT生成時に用いたものである場合、復号装置２３０の復号部２３１は、復号アルゴリズムCS.Decを用いて、復号結果yとしてf(m)を得る。
【０１２７】
（穴あき鍵生成装置２４０における処理）
穴あき鍵生成装置２４０の穴あき鍵生成部２４１は、穴あき鍵生成アルゴリズムCS.Puncを用いて、マスター秘密鍵MSKとタグtagから穴あき鍵MSK*{tag}を生成し、出力する（Ｓ２４１）。ここで、穴あき鍵生成アルゴリズムCS.Puncでは、γ-圧縮SXIO sxiOと穴あき鍵生成回路P1Keyが用いられる。なお、穴あき鍵生成回路P1Keyはインデックスi（iは1≦i≦qを満たす）を入力として、秘密鍵関数型暗号OneKeyのセットアップアルゴリズム1Key.Setupと穴あき鍵生成アルゴリズム1Key.Puncを用いて、穴あき鍵MSK*i{tag}を出力する回路である。穴あき鍵生成装置２４０の送受信部２４８は、穴あき鍵MSK*{tag}を穴あき暗号化装置２５０に送信する。なお、穴あき暗号化装置２５０は、穴あき鍵生成装置２４０の送受信部２４８から受信した穴あき鍵MSK*{tag}を記録部２４９に記録する。
【０１２８】
（穴あき暗号化装置２５０における処理）
穴あき暗号化装置２５０の穴あき暗号化部２５１は、穴あき暗号化アルゴリズムCS.PEncを用いて、穴あき鍵MSK*とタグtag′から暗号文CTを生成し、出力する（Ｓ２５１）。ここで、穴あき暗号化アルゴリズムCS.PEncでは、γ-圧縮SXIO sxiOと穴あき暗号化回路PE1Keyが用いられる。なお、穴あき暗号化回路PE1Keyはインデックスi（iは1≦i≦qを満たす）を入力として、秘密鍵関数型暗号OneKeyの穴あき暗号化アルゴリズム1Key.PEncを用いて、暗号文CTiを出力する回路である。
【０１２９】
なお、ここで生成した暗号文CTは、暗号化装置２２０で生成された暗号文CTと同様に利用される。つまり、暗号化装置２２０で生成された暗号文CTの代わりに、ここで生成した暗号文CTを復号装置２３０に入力すると、復号部２３１は復号結果を得ることができる。ただし、穴あき鍵生成装置２４０で用いたタグtagと穴あき暗号化装置２５０で用いたタグtag′の間にtag≠tag′の関係が成立している限りにおいて、正しく復号されてf(m)が得られる。
【０１３０】
＜＜秘密鍵関数型暗号WeakSuc処理システム＞＞
ここでは、秘密鍵関数型暗号WeakSuc処理システムについて説明する。このシステムは、＜技術的背景＞で説明した秘密鍵関数型暗号WeakSucを実行するシステムである。
【０１３１】
［システム構成］
秘密鍵関数型暗号WeakSuc処理システム３００は、秘密鍵関数型暗号OneKey処理システム１００と同様の構成を有する。そこで、ここでは図を参照することなく、秘密鍵関数型暗号WeakSuc処理システム３００について説明する。
【０１３２】
一例として、秘密鍵関数型暗号WeakSuc処理システム３００は、システムパラメータ生成装置３１０、暗号化装置３２０、復号装置３３０、穴あき鍵生成装置３４０、穴あき暗号化装置３５０を含む。システムパラメータ生成装置３１０、暗号化装置３２０、復号装置３３０、穴あき鍵生成装置３４０、穴あき暗号化装置３５０は、インターネットなどのネットワーク８００に接続し、相互に通信可能である。
【０１３３】
次に、先ほど同様、図を参照することなく、システムパラメータ生成装置３１０、暗号化装置３２０、復号装置３３０、穴あき鍵生成装置３４０、穴あき暗号化装置３５０の各装置について説明する。一例として、システムパラメータ生成装置３１０は、セットアップ部３１１、関数復号鍵生成部３１２、送受信部３１８、記録部３１９を含む。送受信部３１８は、システムパラメータ生成装置３１０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部３１９は、システムパラメータ生成装置３１０の処理に必要な情報を適宜記録する構成部である。例えば、システムパラメータ生成に用いるセキュリティパラメータλ、関数復号鍵の生成に用いる関数f、セキュリティパラメータλの多項式として表現される整数μ、ρを記録する。
【０１３４】
一例として、暗号化装置３２０は、暗号化部３２１、送受信部３２８、記録部３２９を含む。送受信部３２８は、暗号化装置３２０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部３２９は、暗号化装置３２０の処理に必要な情報を適宜記録する構成部である。例えば、マスター秘密鍵MSKを記録する。
【０１３５】
一例として、復号装置３３０は、復号部３３１、送受信部３３８、記録部３３９を含む。送受信部３３８は、復号装置３３０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部３３９は、復号装置３３０の処理に必要な情報を適宜記録する構成部である。例えば、関数復号鍵skfを記録する。
【０１３６】
一例として、穴あき鍵生成装置３４０は、穴あき鍵生成部３４１、送受信部３４８、記録部３４９を含む。送受信部３４８は、穴あき鍵生成装置３４０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部３４９は、穴あき鍵生成装置３４０の処理に必要な情報を適宜記録する構成部である。例えば、マスター秘密鍵MSKを記録する。
【０１３７】
一例として、穴あき暗号化装置３５０は、穴あき暗号化部３５１、送受信部３５８、記録部３５９を含む。送受信部３５８は、穴あき暗号化装置３５０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部３５９は、穴あき暗号化装置３５０の処理に必要な情報を適宜記録する構成部である。例えば、穴あき鍵MSK*を記録する。
【０１３８】
［各装置における処理］
以下、システムパラメータ生成装置３１０、暗号化装置３２０、復号装置３３０、穴あき鍵生成装置３４０、穴あき暗号化装置３５０の各装置における処理について説明する。
【０１３９】
（システムパラメータ生成装置３１０における処理）
システムパラメータ生成装置３１０のセットアップ部３１１は、セットアップアルゴリズムWS.Setupを用いて、セキュリティパラメータ1λからマスター秘密鍵MSKを生成し、出力する（Ｓ３１１）。ここで、セットアップアルゴリズムWS.Setupでは、秘密鍵関数型暗号CollsucのセットアップアルゴリズムCS.Setupが用いられる。システムパラメータ生成装置３１０は、マスター秘密鍵MSKを記録部３１９に記録する。システムパラメータ生成装置３１０の送受信部３１８は、マスター秘密鍵MSKを暗号化装置３２０と穴あき鍵生成装置３４０に送信する。なお、暗号化装置３２０と穴あき鍵生成装置３４０は、システムパラメータ生成装置３１０の送受信部３１８から受信したマスター秘密鍵MSKをそれぞれ記録部３２９と記録部３４９に記録する。
【０１４０】
システムパラメータ生成装置３１０の関数復号鍵生成部３１２は、関数復号鍵生成アルゴリズムWS.KGを用いて、マスター秘密鍵MSKと関数fから関数復号鍵skfを生成し、出力する（Ｓ３１２）。ここで、関数復号鍵生成アルゴリズムWS.KGでは、分解可能ランダムエンコーディングREのエンコーディングアルゴリズムRE.Eと秘密鍵暗号SKEの暗号化アルゴリズムEと秘密鍵関数型暗号Collsucの関数復号鍵生成アルゴリズムCS.KGと分解可能ランダムエンコーディング計算回路Endreが用いられる。なお、分解可能ランダムエンコーディング計算回路Endreは平文m、穴あけ可能PRF鍵Sencd、秘密鍵暗号SKEの秘密鍵Kを入力として、秘密鍵暗号SKEの復号アルゴリズムDとエンコーディングf^iを用いて、エンコーディング結果eiを出力する回路である。システムパラメータ生成装置３１０は、関数復号鍵skfを記録部３１９に記録する。システムパラメータ生成装置３１０の送受信部３１８は、関数復号鍵skfを復号装置３３０に送信する。なお、復号装置３３０は、システムパラメータ生成装置３１０の送受信部３１８から受信した関数復号鍵skfを記録部３３９に記録する。
【０１４１】
（暗号化装置３２０における処理）
暗号化装置３２０の暗号化部３２１は、暗号化アルゴリズムWS.Encを用いて、マスター秘密鍵MSKとタグtagと平文mから暗号文CTを生成し、出力する（Ｓ３２１）。ここで、暗号化アルゴリズムWS.Encでは、秘密鍵関数型暗号Collsucの暗号化アルゴリズムCS.Encが用いられる。また、平文mは、例えば、暗号化装置３２０のユーザが入力したテキストであり、タグtagは、システムで決まった長さを持つビット列であり、暗号化装置３２０のユーザが任意に選ぶことができる。暗号化装置３２０の送受信部３２８は、暗号文CTを復号装置３３０に送信する。なお、復号装置３３０は、暗号化装置３２０の送受信部３２８から受信した暗号文CTを記録部３３９に記録する。
【０１４２】
（復号装置３３０における処理）
復号装置３３０の復号部３３１は、復号アルゴリズムWS.Decを用いて、関数復号鍵skfとタグtagと暗号文CTから復号結果yを生成し、出力する（Ｓ３３１）。ここで、復号アルゴリズムWS.Decでは、秘密鍵関数型暗号Collsucの復号アルゴリズムCS.Decと分解可能ランダムエンコーディングREのデコーディングアルゴリズムRE.Dが用いられる。なお、関数復号鍵skf、暗号文CTが記録部３３９に記録されているものであり、タグtagが暗号文CT生成時に用いたものである場合、復号装置３３０の復号部３３１は、復号アルゴリズムWS.Decを用いて、復号結果yとしてf(m)を得る。
【０１４３】
（穴あき鍵生成装置３４０における処理）
穴あき鍵生成装置３４０の穴あき鍵生成部３４１は、穴あき鍵生成アルゴリズムWS.Puncを用いて、マスター秘密鍵MSKとタグtagから穴あき鍵MSK*{tag}を生成し、出力する（Ｓ３４１）。ここで、穴あき鍵生成アルゴリズムWS.Puncでは、秘密鍵関数型暗号Collsucの穴あき鍵生成アルゴリズムCS.Puncが用いられる。穴あき鍵生成装置３４０の送受信部３４８は、穴あき鍵MSK*{tag}を穴あき暗号化装置３５０に送信する。なお、穴あき暗号化装置３５０は、穴あき鍵生成装置３４０の送受信部３４８から受信した穴あき鍵MSK*{tag}を記録部３４９に記録する。
【０１４４】
（穴あき暗号化装置３５０における処理）
穴あき暗号化装置３５０の穴あき暗号化部３５１は、穴あき暗号化アルゴリズムWS.PEncを用いて、穴あき鍵MSK*とタグtag′から暗号文CTを生成し、出力する（Ｓ３５１）。ここで、穴あき暗号化アルゴリズムWS.PEncでは、秘密鍵関数型暗号Collsucの穴あき暗号化アルゴリズムCS.PEncが用いられる。
【０１４５】
なお、ここで生成した暗号文CTは、暗号化装置３２０で生成された暗号文CTと同様に利用される。つまり、暗号化装置３２０で生成された暗号文CTの代わりに、ここで生成した暗号文CTを復号装置３３０に入力すると、復号部３３１は復号結果を得ることができる。ただし、穴あき鍵生成装置３４０で用いたタグtagと穴あき暗号化装置３５０で用いたタグtag′の間にtag≠tag′の関係が成立している限りにおいて、正しく復号されてf(m)が得られる。
【０１４６】
＜＜難読化処理システム＞＞
ここでは、難読化処理システムについて説明する。このシステムは、＜技術的背景＞で説明した識別不可能性難読化器iOに対応するシステムである。
【０１４７】
［システム構成］
図７を参照して、難読化処理システム４００について説明する。図７は、難読化処理システム４００の構成の一例を示すブロック図である。難読化処理システム４００は、難読化回路生成装置４１０、難読化回路計算装置４２０を含む。難読化回路生成装置４１０、難読化回路計算装置４２０は、インターネットなどのネットワーク８００に接続し、相互に通信可能である。
【０１４８】
次に、図８、図１１を参照して、難読化回路生成装置４１０、難読化回路計算装置４２０の各装置について説明する。図８は、難読化回路生成装置４１０の構成の一例を示すブロック図である。難読化回路生成装置４１０は、セキュリティパラメータ変換部４１１、難読化回路生成部４１２、送受信部４１８、記録部４１９を含む。送受信部４１８は、難読化回路生成装置４１０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部４１９は、難読化回路生成装置４１０の処理に必要な情報を適宜記録する構成部である。
【０１４９】
図１１は、難読化回路計算装置４２０の構成の一例を示すブロック図である。難読化回路計算装置４２０は、難読化回路計算部４２１、送受信部４２８、記録部４２９を含む。送受信部４２８は、難読化回路計算装置４２０がその他の装置と交換する必要がある情報を適宜送受信するための構成部である。記録部４２９は、難読化回路計算装置４２０の処理に必要な情報を適宜記録する構成部である。
【０１５０】
［各装置における処理］
以下、難読化回路生成装置４１０、難読化回路計算装置４２０の各装置における処理について説明する。
【０１５１】
（難読化回路生成装置４１０における処理）
難読化回路生成装置４１０には、セキュリティパラメータλ、難読化対象回路C:{0,1}n→{0,1}m（ただし、n,mは1以上の整数）、回路Cの入力サイズnが入力される。
【０１５２】
難読化回路生成装置４１０のセキュリティパラメータ変換部４１１は、セキュリティパラメータλから新しいセキュリティパラメータλ~を生成し、出力する（Ｓ４１１）。セキュリティパラメータλ~は、回路Cの入力サイズnとセキュリティパラメータλにより定まる値である。具体的には、λ~=ω((n2+logλ)1/εとなる（ただし、ωはランダウの記号、ε(<1)は定数）。
【０１５３】
難読化回路生成装置４１０の難読化回路生成部４１２は、セキュリティパラメータλ~と回路Cの入力サイズnと回路Cから難読化回路C~を生成し、出力する（Ｓ４１２）。難読化回路生成部４１２における処理は、難読化手続きriOに対応する処理である。難読化回路生成装置４１０は、難読化回路C~を記録部４１９に記録する。難読化回路生成装置４１０の送受信部４１８は、難読化回路C~を難読化回路計算装置４２０に送信する。なお、難読化回路計算装置４２０は、難読化回路生成装置４１０の送受信部４１８から受信した難読化回路C~を記録部４２９に記録する。
【０１５４】
以下、図９〜図１０を参照して、難読化回路生成部４１２について説明する。図９は、難読化回路生成部４１２の構成の一例を示すブロック図である。難読化回路生成部４１２は、C~1生成部４１２−１、…、C~n生成部４１２−ｎを含む。
【０１５５】
入力サイズがiである難読化対象回路Ciに対して、C~i生成部４１２−ｉは、セキュリティパラメータ1λ~、入力サイズi、難読化対象回路Ciを入力として、回路Ciを難読化した難読化回路C~iを生成する。
【０１５６】
難読化回路生成部４１２は、セキュリティパラメータを1λ~、i=n, Ci=Cとし、i=1であるか否か判断する（Ｓ４１２−０）。i=1の場合、C~1生成部４１２−１は、C~1←(C1(0),C1(1))を生成し、出力する（Ｓ４１２−１）。ここで、C~1生成部４１２−１における処理は、難読化手続きriOの(1)の処理に対応する。i>1の場合、C~i生成部４１２−ｉは、C~iを生成し、出力する（Ｓ４１２−ｉ）。ここで、C~i生成部４１２−ｉにおける処理は、難読化手続きriOの(2)の処理に対応する。したがって、C~i生成部４１２−ｉは、C~iを生成する過程でC~i-1生成部４１２−（ｉ−１）を用いる。
【０１５７】
（難読化回路計算装置４２０における処理）
難読化回路計算装置４２０には、回路Cの難読化回路C~、難読化回路C~の入力サイズn、難読化回路C~に対する入力値x(n)∈{0,1}nが入力される。
【０１５８】
難読化回路計算装置４２０の難読化回路計算部４２１は、難読化回路C~の入力サイズnと難読化回路C~と難読化回路C~に対する入力値x(n)から、ynを回路Cの出力値C(x(n))として計算し、出力する（Ｓ４２１）。難読化回路計算部４２１における処理は、回路計算手続きrEvalに対応する処理である。
【０１５９】
以下、図１２〜図１３を参照して、難読化回路計算部４２１について説明する。図１２は、難読化回路計算部４２１の構成の一例を示すブロック図である。難読化回路計算部４２１は、y1計算部４２１−１、…、yn計算部４２１−ｎを含む。
【０１６０】
入力サイズがiである難読化対象回路Ciを難読化した難読化回路C~iに対して、yi計算部４２１−ｉは、入力サイズi、難読化回路C~i、難読化回路C~iに対する入力値x(i)∈{0,1}iを入力として、難読化対象回路Ciの出力値Ci(x(i))を計算する。
【０１６１】
難読化回路計算部４２１は、i=n, C~i=C~, x(i)=x(n)とし、i=1であるか否か判断する（Ｓ４２１−０）。i=1の場合、y1計算部４２１−１は、y1←CT1,x_(1)を計算し、y1を回路Cの出力値C(x(1))として出力する（Ｓ４２１−１）。ここで、y1計算部４２１−１における処理は、回路計算手続きrEvalの(1)の処理に対応する。i>1の場合、yi計算部４２１−ｉは、yiを計算し、yiを回路Cの出力値C(x(i))として出力する（Ｓ４１２−ｉ）。ここで、yi計算部４２１−ｉにおける処理は、回路計算手続きrEvalの(2)の処理に対応する。したがって、yi計算部４２１−ｉは、yiを計算する過程でyi-1計算部４２１−（ｉ−１）を用いる。
【０１６２】
本実施形態の発明によれば、秘密鍵関数型暗号だけを利用して任意の多項式サイズの回路に対する識別不可能性難読化技術を構成することができる。このことは、より弱い暗号仮定から任意の多項式サイズの回路に対する識別不可能性難読化技術が構成できたことを意味する。
【０１６３】
＜補記＞
本発明の装置は、例えば単一のハードウェアエンティティとして、キーボードなどが接続可能な入力部、液晶ディスプレイなどが接続可能な出力部、ハードウェアエンティティの外部に通信可能な通信装置（例えば通信ケーブル）が接続可能な通信部、ＣＰＵ（Central Processing Unit、キャッシュメモリやレジスタなどを備えていてもよい）、メモリであるＲＡＭやＲＯＭ、ハードディスクである外部記憶装置並びにこれらの入力部、出力部、通信部、ＣＰＵ、ＲＡＭ、ＲＯＭ、外部記憶装置の間のデータのやり取りが可能なように接続するバスを有している。また必要に応じて、ハードウェアエンティティに、ＣＤ−ＲＯＭなどの記録媒体を読み書きできる装置（ドライブ）などを設けることとしてもよい。このようなハードウェア資源を備えた物理的実体としては、汎用コンピュータなどがある。
【０１６４】
ハードウェアエンティティの外部記憶装置には、上述の機能を実現するために必要となるプログラムおよびこのプログラムの処理において必要となるデータなどが記憶されている（外部記憶装置に限らず、例えばプログラムを読み出し専用記憶装置であるＲＯＭに記憶させておくこととしてもよい）。また、これらのプログラムの処理によって得られるデータなどは、ＲＡＭや外部記憶装置などに適宜に記憶される。
【０１６５】
ハードウェアエンティティでは、外部記憶装置（あるいはＲＯＭなど）に記憶された各プログラムとこの各プログラムの処理に必要なデータが必要に応じてメモリに読み込まれて、適宜にＣＰＵで解釈実行・処理される。その結果、ＣＰＵが所定の機能（上記、…部、…手段などと表した各構成要件）を実現する。
【０１６６】
本発明は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。また、上記実施形態において説明した処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されるとしてもよい。
【０１６７】
既述のように、上記実施形態において説明したハードウェアエンティティ（本発明の装置）における処理機能をコンピュータによって実現する場合、ハードウェアエンティティが有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記ハードウェアエンティティにおける処理機能がコンピュータ上で実現される。
【０１６８】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等を、光磁気記録媒体として、ＭＯ（Magneto-Optical disc）等を、半導体メモリとしてＥＥＰ−ＲＯＭ（Electronically Erasable and Programmable-Read Only Memory）等を用いることができる。
【０１６９】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【０１７０】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【０１７１】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、ハードウェアエンティティを構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図１】
2019049641.tif 000009
【図２】
2019049641.tif 000010
【図３】
2019049641.tif 000011
【図４】
2019049641.tif 000012
【図５】
2019049641.tif 000013
【図６】
2019049641.tif 000014
【図７】
2019049641.tif 000015
【図８】
2019049641.tif 000016
【図９】
2019049641.tif 000017
【図１０】
2019049641.tif 000018
【図１１】
2019049641.tif 000019
【図１２】
2019049641.tif 000020
【図１３】
2019049641.tif 000021