= = α ( f 1 − f 2 ) + β ( α f 1 + β + r ) − ( α f 2 + r ) , α f 1 f 2 + β ( r f 1 + β ) − ( − α f 2 + r ) f 1 .
算术公式的算术密钥乱码化方案
本文是我的 2019 年科研“属性加密”系列博文第二篇。在这一篇里,我将引入 [ LL20 ] 中建立信息论意义下安全性的核心工具——算术密钥乱码化方案 (AKGS)——并给出适用于算术公式的构造。
显示英汉术语对照
前情提要
第一篇 里介绍了属性加密 ( ABE ) 的概念:在密钥策略 (KP) ABE 中,密文和属性(程序输入)相关联,密钥和策略(程序)相关联;正确性保证若策略允许属性(程序输出 1),则可以解密;安全性确保即使拿到多个 密钥,只要每个密钥的策略都不允许属性,就无法(高效)获得关于明文的任何信息。它可以看成是用密码学施行的访问控制列表 ( ACL ) 。我们定了一个“小目标”:构造支持算术公式的 ABE。
ABE 与乱码电路
假设希望当 f ( x ) = 0 时可以还原消息 μ , 由于 ABE 不隐藏 f , x , 故这相当于计算 μ f ( x ) 。 当 f ( x ) = 0 时,只要把计算结果除以 f ( x ) 即可得到 μ ; 如果假设密钥和密文只透露了 μ f ( x ) 而无其他关于 μ 的信息,则直观上当 f ( x ) = 0 (即不允许解密)时,密钥和密文不包括任何关于 μ 的信息,从而得以隐藏消息。
顺带一提,如果希望当且仅当 f ( x ) = 0 时可以解密,则相当于计算 α f ( x ) + μ , 且密钥和密文不透露任何其他关于 α , μ 的信息。这里 α 是一个随机数,当 f ( x ) = 0 时,计算结果里 α f ( x ) 相当于一次性密钥 ( one-time pad ) ,完美隐藏 μ 。
熟悉一些基本密码学概念的读者可能会意识到这种情况和安全函数求值 ( secure function evaluation ) 很类似:生成密钥时只知道 f 而不知道 μ , x , 加密时则相反,但把密钥和密文放在一起时希望能且只能计算 μ f ( x ) , 计算结果同时依赖两边各自的信息。
这个问题的经典解决方案是姚先生的乱码电路 ( garbled circuit ) 1 [ Yao86 ] ,也叫随机化编码 ( randomized encoding ) [ App17 ] 。在 [ LL20 ] ABE 中,当把密文和密钥放在一起时,首先计算出的就是 μ f ( x ) 的随机化编码,对随机化编码再行运算,就得到 μ f ( x ) 本身。安全性建立在如下几点上:
随机化编码本身安全 ,即编码不包括 μ f ( x ) 之外任何关于 μ 的信息。
计算 随机化编码的过程安全 ,它不应该透露编码之外的任何信息(比如不能透露随机化编码所用的随机数)。
计算出的随机化编码使用了合适的随机数 。
注意在第一点里,随机化编码不需要隐藏 f , x , 因为只隐藏部分输入,所以这是一种部分乱码化方案 ( partial garbling scheme ) [ IW14 ] 。第二点暗示我们要用一种泛函加密 ( functional encryption ) 来计算编码本身。通常来说,泛函加密比属性加密要困难得多,不过内积加密 ( IPFE ) 相对容易一些。
Aime ce que tu as quand t’as pas ce que t’aimes ! Quand t’as pas ce que t’aimes, aime ce que tu as !
— La journée est finie , les Misérables
“爱吾所有,即使一无所有。一无所有时只得爱汝所有。”(“所有”指“拥有”而不是“全部”。)[ LL20 ] 构造 ABE 时就用 IPFE 来计算随机化编码,这要求编码很“线性”,这些要求总结出来就是所谓的“算术密钥乱码化方案”。
1 乱码电路没有写到论文的会议版本里,只在当年 FOCS 会议讲座里提到。会议版本提到 具体内容在完整版里 ,不过可能后来姚先生没有公开完整版。每次引用 [ Yao86 ] 的“乱码电路”时,实际上引用的是讲座而不是出版物。
算术密钥乱码化
算术密钥乱码化方案 ( arithmetic key garbling scheme ) 2 简称 AKGS,它包含两个算法:
G a r b l e ( f , α , β ; r ) 是乱码化算法,其中算术函数 f : Z p n → Z p 的输入记作 x , 另两个输入 α , β ∈ Z p 即所谓的“算术密钥”,而 r 是算法使用的随机数(若干个 Z p 中独立均匀的随机数)。算法输出若干标签函数 ( label functions ) L 1 , … , L m , 每个 L j 都是 x 的仿射函数 [ affine function ] (即一次函数),且 L j 的每个系数 都是 α , β , r 的线性函数 。m 叫做 f 的乱码化规模 ( garbling size ) 。
E v a l ( f , x , ℓ 1 , … , ℓ m ) 是求值算法,其中 ℓ j 叫做标签 ( labels ) ,它们应该是 L j ( x ) 。 这个算法是 ℓ 1 , … , ℓ m 的线性函数 ,且它的输出应该是 α f ( x ) + β 。
正确性 要求对任意 f , x , α , β 有
Pr ⎣ ⎢ ⎢ ⎡ L 1 , … , L m ℓ j γ ← $ G a r b l e ( f , α , β ) ← L j ( x ) ← E v a l ( f , x , ℓ 1 , … , ℓ m ) : γ = α f ( x ) + β ⎦ ⎥ ⎥ ⎤ = 1 .
折腾这么一圈计算 α f ( x ) + β 的意义在于标签和 x , α , β , r 的关系十分简单(双线性函数),而计算 α f ( x ) + β 的“大头”(关于 x 的复杂度)都推迟到 E v a l 里面了,并且求值还是关于标签线性的。
直观上,我们想说:标签 里不包含 α f ( x ) + β 之外任何关于 α , β 的信息。为什么是标签 而不是标签函数(的系数) ?若 f 不是常数,则由于正确性的限制,标签函数的系数总是蕴含着 α , β 。 另一个角度是,重复使用标签函数相当于重复使用 G a r b l e (里用来保护 α , β ) 的随机性,而整个计算过程惟一随机的地方即是 G a r b l e , 这样做通常不安全。
形式化来说,这里采用完美模拟安全性 刻画,要求存在高效算法 S i m ( f , x , γ ) 来模拟 γ = α f ( x ) + β 时的标签 ℓ 1 , … , ℓ m 。 这要求对任意 f , x , α , β , 如下两个分布(真实标签分布和模拟标签分布)相同:
{ L 1 , … , L m ℓ j ← $ G a r b l e ( f , α , β ) ← L j ( x ) : ( ℓ 1 , … , ℓ m ) } , { ( ℓ 1 , … , ℓ m ) ← $ S i m ( f , x , α f ( x ) + β ) : ( ℓ 1 , … , ℓ m ) } .
2 这里“算术”和“布尔”相对,即计算过程天然在 Z p 中进行(而不仅仅是 Z 2 )。 作为术语的发明者和翻译者,我钦定这里 arithmetic 以量子叠加态同时修饰 key 和 garbling,即既是“算术密钥的乱码化”又是“密钥的算术乱码化”。
算术公式的 AKGS
既然目标是构造支持算术公式 ( arithmetic formulae ) 的 ABE,自然就需要用于算术公式的 AKGS,这个方案可以看作简化版的 [ AIK11 , BGG⁺14 ] 。设 f 为算术公式而 α , β ∈ Z p , AKGS 要计算 α f ( x ) + β 。 这里同时定义 G a r b l e , E v a l , S i m , 分类讨论:
若 f 是输入的仿射函数,则没什么特别要做的事儿。
G a r b l e 直接定义标签函数为 L ( x ) = α f ( x ) + β 。
E v a l 只要输出标签 ℓ 本身即可。
S i m 只要用输出值本身作为模拟标签即可。
若 f = f 1 − f 2 , 利用
α ( f 1 − f 2 ) + β = ( α f 1 + β + r ) − ( α f 2 + r ) 。
G a r b l e 抽取 r ← $ Z p 并递归乱码化 ( f 1 , α , β + r ) , ( f 2 , α , r ) , 再把两次递归所得标签函数放在一起即可。
E v a l 分别对两个子公式(用对应标签)递归求值得到 γ 1 , γ 2 , 并输出 γ 1 − γ 2 。
S i m 抽取 γ 2 ← $ Z p 并令 γ 1 = γ + γ 2 , 然后对子公式 f 1 , f 2 分别用 γ 1 , γ 2 作为输出进行模拟,再把两次递归所得模拟标签放在一起即可。
若 f = f 1 f 2 , 利用
α f 1 f 2 + β = ( r f 1 + β ) − ( − α f 2 + r ) f 1 。
G a r b l e 抽取 r ← $ Z p 并递归乱码化 ( f 1 , r , β ) , ( f 2 , − α , r ) , 再把两次递归所得标签函数放在一起即可。
E v a l 分别对两个子公式(用对应标签)递归求值得到 γ 1 , γ 2 , 并输出 γ 1 − γ 2 f 1 ( x ) 。
S i m 抽取 γ 2 ← $ Z p 并令 γ 1 = γ + γ 2 f 1 ( x ) , 然后对子公式 f 1 , f 2 分别用 γ 1 , γ 2 作为输出进行模拟,再把两次递归所得模拟标签放在一起即可。
再次强调,f , x 都不保密 且 E v a l , S i m 的输入包括两者,故上述算法良定义。显然乱码化方案正确,模拟器的完美性基于如下观察:对于需要递归的公式 f = f 1 − f 2 或 f = f 1 f 2 , 给定计算结果 γ = α f ( x ) + β , 子公式 f 2 的计算结果 γ 2 是一个均匀随机数 ,且子公式 f 1 的计算结果 γ 1 是惟一符合求值过程正确性的那个数 ,这正是模拟器递归的方式。
具体例子
光说不练假把式,考虑第一篇里举例的算术公式 ( 2 x 1 − x 2 ) ( x 3 + 3 x 2 ) + ( 5 x 1 + 1 ) x 4 , 它的乱码化过程可表示为下图带标注的电路树:每个运算节点旁边标注的是递归乱码化过程中这一步引入的随机数,每条输出线旁标注的是这一条线对应的 α , β 。
算术公式树和乱码化过程
乱码化过程如下:
把公式按照结构展开为一棵树,直到展开为输入的仿射函数作为叶子为止。
在根节点的输出线上标注输入的 α , β 。
每个非叶子节点的输出线标注完毕后根据 G a r b l e 的递归规则标注它的输入线。
标注完毕后叶子的输出线就指示了标签函数,它们是
ℓ 1 = L 1 ( x ) ℓ 2 = L 2 ( x ) ℓ 3 = L 3 ( x ) ℓ 4 = L 4 ( x ) = 2 r 1 x 1 − r 1 x 2 + ( β + r 2 ) , = − α x 3 − 3 α x 2 + r 1 , = 5 r 3 x 1 + ( r 3 + r 2 ) , = α x 4 + r 3 .
求值运算是
α f ( x ) + β = ( ℓ 1 − ℓ 2 ( 2 x 1 − x 2 ) ) − ( ℓ 3 − ℓ 4 ( 5 x 1 + 1 ) ) 。 给定输出为 γ 的模拟标签是
ℓ 1 ℓ 3 = γ + γ 2 + γ 1 ( 2 x 1 − x 2 ) , = γ 2 + γ 3 ( 5 x 1 + 1 ) , ℓ 2 ℓ 4 = γ 1 , = γ 3 ,
其中 γ 1 , γ 2 , γ 3 ← $ Z p , 且 γ ? 对应于 r ? 对应节点右子树的中间求值结果。
显然,任意算术公式的乱码化规模不超过它(作为算术公式)的规模。此外,算术公式采用不同表示方式(例如中间运算节点里减法改成“多个节点的线性组合”,乘法改成“两个节点的积加上一个常数”,并针对这种运算递归)可以稍微降低乱码化规模,不过这都属于工程优化,我们还是多关注理论。
本篇结语
本篇介绍了 [ LL20 ] ABE 中建立信息论意义下安全性的工具——算术密钥乱码化方案。它有诸多线性性要求,安全性采用模拟范式刻画。我们还用一个例子具体理解了 AKGS(这个例子将贯穿整个系列博文)。下一次 介绍如何使用泛函保密 ( function-hiding ) 的内积加密构造一次性安全的 ABE。
参考文献
[ AIK11]
↩
Benny Applebaum, Yuval Ishai, and Eyal Kushilevitz.
How to Garble Arithmetic Circuits.
In Rafail Ostrovsky, editor, 52nd FOCS , pages 120–129.
IEEE Computer Society Press, October 2011.
[ App17]
↩
Benny Applebaum.
Garbled Circuits as Randomized Encodings of Functions: a Primer.
Cryptology ePrint Archive, Report 2017/385, 2017.
http://eprint.iacr.org/2017/385 .
[ BGG⁺14]
↩
Dan Boneh, Craig Gentry, Sergey Gorbunov, Shai Halevi, Valeria Nikolaenko, Gil Segev, Vinod Vaikuntanathan, and Dhinakaran Vinayagamurthy.
Fully Key-Homomorphic Encryption, Arithmetic Circuit ABE and Compact Garbled Circuits.
In Phong Q. Nguyen and Elisabeth Oswald, editors, EUROCRYPT 2014 , volume 8441 of LNCS, pages 533–556.
Springer, Heidelberg, May 2014.
[ IW14]
↩
Yuval Ishai and Hoeteck Wee.
Partial Garbling Schemes and Their Applications.
In Javier Esparza, Pierre Fraigniaud, Thore Husfeldt, and Elias Koutsoupias, editors, ICALP 2014, Part I , volume 8572 of LNCS, pages 650–662.
Springer, Heidelberg, July 2014.
[ LL20]
↩ ↩ ↩ ↩
Huijia Lin and Ji Luo.
Compact Adaptively Secure ABE from k -Lin: Beyond N C 1 and Towards N L .
In Anne Canteaut and Yuval Ishai, editors, EUROCRYPT 2020, Part III , volume 12107 of LNCS, pages 247–277.
Springer, Heidelberg, May 2020.
[ Yao86]
↩ ↩
Andrew Chi-Chih Yao.
How to Generate and Exchange Secrets (Extended Abstract).
In 27th FOCS , pages 162–167.
IEEE Computer Society Press, October 1986.
请启用 JavaScript 来查看由 Disqus 驱动的评论。