Multilinear Maps and Obfuscation A Survey of Recent Results Shai Halevi – IBM Research PKC 2014 Prologue We are in the midst of (yet another) “quantum leap” in our cryptographic capabilities Things that were science fiction just two years ago are now plausible General-purpose functional encryption Crypto-strength code obfuscation … Fueled by new powerful building blocks Combination of Homomorphic Encryption (HE) and Cryptographic Multilinear Maps (MMAPs) This Talk Overview of the main new tool Constructing MMAPs using “HE techniques” And application to obfuscation There are many others Witness Encryption Full-Domain Hash Functional Encryption not today … Chapter One: Multilinear Maps Starting Point: DL-based Crypto “The DDH assumption is a gold mine” -- Boneh ‘98 Why is it so useful? Can “hide” values 𝑎𝑖 in 𝑔𝑎𝑖 Some tasks are still easy in this representation Compute any linear/affine function of the 𝑎𝑖 ’s Check if 𝑎𝑖 = 0 Other tasks are seemingly hard E.g., computing/checking quadratic functions (CDH/DDH) Starting Point: DL-based Crypto To use DH in applications, ensure that: legitimate parties only compute linear functions adversary needs to compute/check quadratics Some examples: Diffie-Hellman key exchange, ElGamal Encryption, Cramer-Shoup CCA-Secure Encryption, Naor-Reingold PRF, Efficient ZKPs, … Beyond DDH: Bilinear Maps [J00,SOK00,BF01] In bilinear-map groups you can compute quadratic functions in the exponent But computing/checking cubics is hard Now the legitimate parties can do a lot more Leads to new capabilities Identity-based encryption (IBE) Predicate encryption (for simple predicates) Efficient non-interactive zero-knowledge proofs … Why Stop at Two? Can we find groups that would let us compute cubics but not 4th powers? Or in general, upto degree 𝑘 but no more? Cryptographic multilinear maps (MMAPs) Even more useful than bilinear [BS’03] explored applications of MMAPs Also argued that they are unlikely to be constructed similarly to bilinear maps The [GGH’13] Approach to MMAPs Construct MMAPs from “HE techniques” By modifying the an existing HE scheme Recall “somewhat homomorphic” enc.(SWHE) Public-key encryption with usual (KeyGen,Enc,Dec) An additional procedure 𝑐 ′ ← Eval𝑝𝑘 (𝑃, 𝑐) 𝑐 = (𝑐1 , … , 𝑐𝑡 ) encrypts 𝑎 = (𝑎1 , … , 𝑎𝑡 ) P is a low-degree polynomial 𝑐 ′ encrypts 𝑎′ = 𝑃(𝑎) This looks a little like what we want MMAPs vs. SWHE MMAPs SWHE “Encoding” 𝑒𝑎 = 𝑔𝑎 Encrypting c𝑎 = E(𝑎) Computing low-deg polynomials of the 𝑒𝑎 ’s is easy Computing low-deg polynomials of the 𝑐𝑎 ’s is easy Can test for zero Cannot test anything • But if you have skey you can recover 𝑎 itself Main Ingredient: Testing for Zero To be useful, must be able to test if two degree-𝑘 expressions are equal Using homomorphism, that’s the same as testing if a degree-𝑘 expression equals zero Our approach: augment a SWHE scheme with a “handicapped” secret key Can test if a ciphertext decrypts to zero, but cannot decrypt arbitrary cipehrtexts Assuming that the plaintext-space is large Called a “zero-test parameter” Bird-Eye View of [GGH’13] Start from the NTRU HE scheme NTRU ciphertexts naturally come in “levels” A level-𝑑 cipehrtext encrypts degree-𝑑 expression Modify NTRU to obscure the plaintext space Instead of 𝑅/3𝑅 we use 𝑅/𝑔𝑅 for a secret 𝑔 Needed for security when publishing the “handicapped secret key” Publish a “shifted” level-𝑘 secret key Can identify level-𝑘 encryption of zero, not decrypt Another scheme along similar lines in [CLT’13] Graded Encoding Schemes Instance generation: 𝑝𝑝, 𝑠𝑝 ← 𝐼𝐺𝐸𝑁(1𝜆 , 1𝑘 ) Plaintext space implicit in 𝑝𝑝, isomorphic to some 𝑍𝑝 Secret-key encoding: 𝑒𝑎 ← 𝑆𝐸𝑛𝑐(𝑠𝑝, 𝑎, 𝑖) 𝑒𝑎 is a level-𝑖 encoding of 𝑎 𝑆𝐸𝑛𝑐 is randomized Addition and multiplication 𝑒𝑎+𝑏 ← 𝑒𝑎 ⊞ 𝑒𝑏 , 𝑙𝑣𝑙 𝑒𝑎+𝑏 = max 𝑙𝑣𝑙 𝑒𝑎 , 𝑙𝑣𝑙 𝑒𝑏 𝑒𝑎⋅𝑏 ← 𝑒𝑎 ⊠ 𝑒𝑏 , 𝑙𝑣𝑙 𝑒𝑎⋅𝑏 = 𝑙𝑣𝑙 𝑒𝑎 + 𝑙𝑣𝑙 𝑒𝑏 Zero-Test: use 𝑝𝑝 to check if a level-𝑘 encoding 𝑒 encodes 0 Some Variants Optional public encoding: (𝑎, 𝑒𝑎 ) ← P𝐸𝑛𝑐(p𝑝) 𝑎 is uniform, 𝑒𝑎 is a level-1 encoding of 𝑎 Optional re-randomize: 𝑒𝑎′ ← 𝑅𝑒𝑅𝑎𝑛𝑑(𝑝𝑝, 𝑒𝑎 ) 𝑒𝑎′ , 𝑒𝑎 encode the same element Distribution of 𝑒𝑎′ depends on 𝑎, but not on 𝑒𝑎 Some instantiations come with security vulnerabilities An “asymmetric” variant Instead of levels 1,2, … , 𝑘, encodings associated with subsets of 𝑘 = {1,2, … , 𝑘} Can only multiply encodings relative to disjoint subsets Zero-test for encodings relative to 𝑘 itself Hardness Assumptions An “über-assumption” for graded-encodings: For any collection of encodings 𝑒1 , … , 𝑒𝑡 (at any level) 𝑒𝑖 is an encoding of some plaintext 𝑎𝑖 and polynomial 𝑃(𝑥1 , … , 𝑥𝑡 ) of degree > 𝑘 Computation: Hard to compute a level-≤ 𝑘 encoding of 𝑃(𝑎1 , … , 𝑎𝑡 ) when the 𝑎𝑖 are uniform Decision: Hard to distinguish if the 𝑎𝑖 are uniform, or chosen as a random root of 𝑃 An even more general assumption in [PST’14] Dubbed “Semantically-Secure Graded Encodings” A Few Words About Performance Currently mostly a plausibility argument “Somewhat practical” multilinearity for a small constant Best reported implementation in [CLT’13] 6-linear scheme with 𝑝𝑝 size ~ 2.5 GB, operations in less than one minute Quite aggressive choice of the security parameter Main road-block: obscured plaintext space Rules out all the optimizations that we have for FHE Leaves us with something similar to Gentry’s original 2009 scheme Take-Home from Chapter One MMAPs are similar to DL-based crypto Can compute “in the exponent” polynomials of deg ≤ 𝑘 But not degree 𝑘 + 1 or more Can be devised using “HE techniques” One difference: need sk to “exponentiate” There are variants without this limitation, but they have other shortcoming Chapter Two: Obfuscation Code Obfuscation Encrypting programs, maintaining functionality Only the functionality should be “visible” in the output Example of recreational obfuscation: @P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+ =$f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P .]/&& close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print -- Wikipedia, accessed Oct-2013 Rigorous treatment [Hada’00, BGIRSVY’01,…] Why Obfuscation? Hiding secrets in software Plaintext strutpatent.com AES encryption Ciphertext Why Obfuscation? Hiding secrets in software Plaintext @P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q* =2)+=$f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}= ~/^[P.]/&& close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print Ciphertext AES encryption Public-key encryption Why Obfuscation? Hiding secrets in software http://www.arco-iris.com/George/images/game_of_go.jpg Game of Go Next move Uploading my expertise to the web Why Obfuscation? Hiding secrets in software Game of Go @P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$ f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/ && close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print Next move Uploading my expertise to the web without revealing my strategies Defining Obfuscation Want the output to reveal only functionality E.g., If prog. depends on secrets that are not readily apparent in I/O, then the encrypted program does not reveal these secrets [B+01] show that this is impossible in general Thm: If secure encryption exists, then there are secure encryption schemes for which it is possible to recover the secret key from any program that encrypts. Such encryption schemes are unobfuscatable Defining Obfuscation Okay, some function are bad, but can we do “as well as possible” on every given function? [B+01] suggested the weaker notion of “indistinguishability obfuscation” (iO) Gives the “best-possible” guarantee [GR07] It turns out to suffice for many applications (examples in [GGH+13, SW13,…]) Defining Obfuscation [B+01] An efficient public procedure OBF(*) Takes as input a program 𝐶 E.g., encoded as a circuit Produce as output another program 𝐶′ 𝐶′ computes the same function as 𝐶 𝐶′ at most polynomially larger than 𝐶 Indistinguishability-Obfuscation (iO) If 𝐶1 , 𝐶2 compute the same function (and |𝐶1 | = |𝐶2 |), then 𝑂𝐵𝐹 𝐶1 ≈ 𝑂𝐵𝐹 𝐶2 Obfuscation vs. HE F Encryption F + x F Obfuscation or x F(x) Result encrypted F + x F(x) Result in the clear Somewhat reminiscent of MMAPs vs. HE… Obfuscation from MMAPs, 1st Try MMAPs give us one function that we can get in the clear: equality-to-zero (at level 𝑘) Can we build on it to get more functions? Consider the “universal circuit” ′ 𝒏 𝑼: 𝟎, 𝟏 × 𝟎, 𝟏 𝒏 → 𝟎, 𝟏 , 𝑼 𝑪, 𝒙 = 𝑪(𝒙) Encode the bits of 𝐶 at level 1 For 𝑥, provide level-1 encoding of both 0 and 1 Carry out the computation “in the exponent” Use zero-test to check if the result is zero 1st Try Does Not Work Attack: comparing intermediate values Checking if two intermediate wires carry same value Checking if the computation on two different inputs yield the same value on some intermediate wire If two equal intermediate values ever happen, they can be recognized using zero-test Must randomize all intermediate values in all the computations But such that the final result can still be recognized Construction Outline Describe Circuits as Branching Programs (BPs) using Barrington’s theorem [B86] Randomized BPs (RBPs) a-la-Kilian [K88] Additional randomization to counter “simple relations” Encode RBPs “in the exponent” using MMAPs Use zero-test to get the output This allows obfuscating shallow circuits (NC1) Another transformation (using FHE) to get all circuits (Oblivious) Branching Programs A specific way of describing a function This length-9 BP has 4-bit inputs A1,0 A2,0 A3,0 A4,0 A5,0 A6,0 A7,0 A8,0 A9,0 A1,1 A2,1 A3,1 A4,1 A5,1 A6,1 A7,1 A8,1 A9,1 0 The 𝐴𝑖,𝑏 ’s are square matrices Each position 𝑖 is controlled by one input bit (Oblivious) Branching Programs A specific way of describing a function This length-9 BP has 4-bit inputs A1,0 A2,0 A3,0 A4,0 A5,0 A6,0 A7,0 A8,0 A9,0 A1,1 A2,1 A3,1 A4,1 A5,1 A6,1 A7,1 A8,1 A9,1 0 1 (Oblivious) Branching Programs A specific way of describing a function This length-9 BP has 4-bit inputs A1,0 A2,0 A3,0 A4,0 A5,0 A6,0 A7,0 A8,0 A9,0 A1,1 A2,1 A3,1 A4,1 A5,1 A6,1 A7,1 A8,1 A9,1 0 1 1 0 Multiply the chosen 9 matrices together If product is 𝐼 output 1. Otherwise output 0. (Oblivious) Branching Programs A specific way of describing a function Length-𝑚 BP with 𝑛-bit input is a sequence 𝑗1 , 𝐴1,0 , 𝐴1,1 , 𝑗2 , 𝐴2,0 , 𝐴2,1 , … , (𝑗𝑚 , 𝐴𝑚,0 , 𝐴𝑚,1 ) 𝑗𝑖 ∈ {1, … , 𝑛} are indexes, 𝐴𝑖,𝑏 ’s are matrices Input 𝑥 = (𝑥1 , … , 𝑥𝑛 ) chooses matrices 𝐴𝑖,𝑥𝑗 Compute the product 𝑃𝑥 = 𝑚 𝑖=1 𝐴𝑖,𝑥𝑗𝑖 𝑖 𝐹 𝑥 = 1 if 𝑃𝑥 = 𝐼, else 𝐹 𝑥 = 0 Barrington’s Theorem [B86]: Poly-length BPs can compute any function in NC1 Kilian’s Randomized BPs B1,0 A1,0 𝑅1 A1,1 B1,1 𝑅1−1 B2,0 B3,0 B4,0 B5,0 A2,0 A3,0 A4,0 A5,0 𝑅2 𝑅2−1 𝑅3 𝑅3−1 𝑅4 𝑅4−1 B6,0 𝑅5 A2,1 A3,1 A4,1 A5,1 B2,1 B3,1 B4,1 B5,1 𝑅5−1 A6,0 A6,1 B6,1 Choose random invertible matrices 𝑅𝑖 −1 𝐵𝑖,𝜎 = 𝑅𝑖−1 × 𝐴𝑖,𝜎 × 𝑅𝑖 (with 𝑅0 = 𝑅𝑚+1 = 𝐼) Multiplying the B𝑖,𝜎 ’s yields the same product as multiplying the corresponding A𝑖,𝜎 ’s Kilian’s Randomized BPs B1,0 A1,0 𝑅1 A1,1 B1,1 𝑅1−1 B2,0 B3,0 B4,0 B5,0 A2,0 A3,0 A4,0 A5,0 𝑅2 𝑅2−1 𝑅3 𝑅3−1 𝑅4 𝑅4−1 B6,0 𝑅5 A2,1 A3,1 A4,1 A5,1 B2,1 B3,1 B4,1 B5,1 Each sequence of B𝑖,𝜎 ’s (𝑖 = 1 … 𝑚) is uniformly random subject to having same product as A𝑖,𝜎 ’s 𝑅5−1 A6,0 A6,1 B6,1 Kilian’s ProtocolBP-Obfuscation? Encode RBP for 𝑈(𝐶, 𝑥) with the 𝐶 part fixed Publish only one 𝐵𝑖,𝜎 for the bits of 𝐶, both 𝐵𝑖,𝜎 ’s for 𝑥 Can evaluates 𝑈(𝐶, 𝑥) for any 𝑥. “Simple relations” exist between the 𝐵𝑖,𝜎 ’s Since we give both 𝐵𝑖,𝜎 ’s for some 𝑖’s Enable some attacks “Partial-evaluation” attacks: Compare partial products across different evaluations “Mixed-Input” attacks: Compute products that do not respect the BP structure Countering “Simple Relations” Additional randomization steps Different works use slightly different forms of additional randomization “Multiplicative bundling” [GGHRHS’13, BR’13] “Straddling” [BGKPS’13, PTS’14] “Abelian component” [CV’13] Can conjecture [GGHRHS’13, BR’13] or prove [BGKPS’13, CV’13, PTS’14] that no simple relations exist Completing the construction Put randomized matrices “in the exponent” Set multi-linearity parameter to 𝑚 Encode all elements at level 1 Publish one matrix for the bits of 𝐶, both for 𝑥 To compute 𝐶(𝑥) Choose the encoded matrices corresponding to 𝑥 Multiply matrices “in the exponent” using ⊞,⊠ Use zero-test to check if the result is the identity Security of Obfuscation No polynomial relation of degree ≤ 𝑚, except those that involve the output matrix Output relations are the same when we obfuscate two circuits with identical functionality By (generalized) über-assumption, the two distributions over encodings are indistinguishable Mission Accomplished A Word About Performance Needs 𝑚-linear maps for 𝑚 in the thousands Need I say more? Take-Home from Chapter Two We can obfuscate a computation by: 1. Randomizing the internal values 2. Putting the randomized values “in the exponent” and computing on them using MMAPs Future Directions We only have two MMAPs candidates, and just one approach for using them in obfuscation Hard to develop a theory from so few sample points We need better formal notions of obfuscation Current notions (such as iO) do not capture our intuition, not even for what the current constructions achieve Faster constructions Complexity of current constructions is scary Applications Already have a bunch, the sky is the limit… Thank You Questions? Witness Encryption [GGSW’13] A truly “keyless encryption” Can encrypt relative to any arbitrary “riddle” Defined here relative to exact-cover (XC) XC is NP-complete, so we can translate any “riddle” to it Recall Exact Cover Instance: universe [𝑘] and a collection of subsets 𝑆𝑖 ⊂ [𝑘], 𝑖 = 1, … , 𝑚 1 2 {1,2,3} {2,4,5} 3 4 {1,4} 5 {2,3,5} A solution: sub-collection of the 𝑆𝑖 ’s that covers every element of [𝑘] exactly once Witness Encryption Message encrypted wrt to XC instance Encryptor need not know a solution Or even if a solution exists Anyone with a solution can decrypt Secrecy ensured if no solution exists {1,2,3} 1 2 {2,4,5} {1,2,3} 1 2 {2,4,5} 3 3 4 {1,4} 4 5 {2,3,5} 5 Decryptable {1,4} {2,3,4,5} Secret Witness Encryption Using MMAPs Choose random 𝑎𝑗 for element 𝑗 Product 𝑝𝑖 = 𝑗∈𝑆𝑖 𝑎𝑗 for subset 𝑆𝑖 Publish encoding 𝑒𝑖 = 𝐸𝑛𝑐|𝑆𝑖 | (𝑝𝑖 ) Product of everything p∗ = 𝑗∈[𝑘] 𝑎𝑗 Use encoding 𝑒 ∗ = 𝐸𝑛𝑐𝑘 (𝑝∗ ) to hide message 𝑎1 𝑎2 𝑎3 𝑎4 𝑎5 1 2 {1,2,3} 𝑒1 = 𝐸𝑛𝑐3 (𝑎1 ⋅ 𝑎2 ⋅ 𝑎3 ) {2,4,5} 𝑒2 = 𝐸𝑛𝑐3 (𝑎2 ⋅ 𝑎4 ⋅ 𝑎5 ) 3 4 {1,4} 5 {2,3,5} 𝑒3 ⊠ 𝑒4 ≈ 𝑒 ∗ 𝑒3 = 𝐸𝑛𝑐2 (𝑎1 ⋅ 𝑎4 ) 𝑒4 = 𝐸𝑛𝑐3 (𝑎2 ⋅ 𝑎3 ⋅ 𝑎5 ) 𝑒 ∗ = 𝐸𝑛𝑐5 (𝑎1 ⋅ 𝑎2 ⋅ 𝑎3 ⋅ 𝑎4 ⋅ 𝑎5 ) ctxt = (𝑒1 , … , 𝑒4 , 𝐸𝑥𝑡𝑟𝑎𝑐𝑡 𝑒 ∗ ⊕ 𝑀) Witness Encryption Using MMAPs Encrypt(message M, instance (𝑘, 𝑆1 , … , 𝑆𝑚 )) Set 𝑝𝑝, 𝑠𝑝 ← 𝐼𝑛𝑠𝑡𝐺𝑒𝑛(1𝜆 , 1𝑘 ), choose 𝑎𝑗 ← 𝑍𝑝 ∀𝑗 Compute 𝑝𝑖 = 𝑗∈𝑆𝑖 𝑎𝑗 ∀𝑆𝑖 , and p∗ = 𝑗∈[𝑘] 𝑎𝑗 Encode 𝒆𝒊 ← 𝐒𝐄𝐧𝐜(𝐬𝐩, 𝒑𝒊 , 𝑺𝒊 ), 𝒆∗ ← 𝐒𝐄𝐧𝐜 𝐬𝐩, 𝒑∗ , 𝒌 Use 𝒆∗ to hide message, 𝒄∗ ← 𝐄𝐱𝐭𝐫𝐚𝐜𝐭 𝐩𝐩, 𝒆∗ ⊕ 𝐌 Ciphertext is (pp, 𝑒1 , … , 𝑒𝑚 , 𝑐 ∗ ) Decrypt(cover 𝐶, ciphertext (pp, 𝑒1 , … , 𝑒𝑚 , 𝑐 ∗ )) Multiply encodings in cover 𝒆 ←⊠𝒊∈𝑪 𝒆𝒊 Use to unmask message, 𝑴 ← 𝒄∗ ⊕ 𝐄𝐱𝐭𝐫𝐚𝐜𝐭 𝐩𝐩, 𝒆 Security of Witness Encryption If no exact cover, then no polynomial relation of degree ≤ 𝑘 between 𝑝∗ and the 𝑝𝑖′ 𝑠 For some no-instances, 𝑝∗ is uniform even given 𝑝𝑖′ 𝑠 For others there is a relation,* but of degree > 𝑘 By über-assumption, 𝑒 ∗ is indistinguishable from encoding of a uniform element If 𝑒 ∗ was an encoding of a uniform element, then 𝐸𝑥𝑡𝑟𝑎𝑐𝑡 𝑝𝑝, 𝑒 ∗ was a uniform bit string * There could be many such relations, need to generalize über-assumption