欢迎来到“内积加密”系列文章的后半部分,这部分科普 Lin 与 Vaikuntanathan 在 2016 年提出 LV16 的内积加密算法。这一篇我们开始讨论前半部分未解的一个疑问:如何保护密钥里的向量?延续之前的习惯,我们先定义泛函保密性。为了构造这样的方案,我们要引入另一个工具——配对(即双线性映射)。
从题图的风格可以看出我真的懒得想一个有“哄宝宝”效果(即吸引眼球)的配图。另外按照行文顺序,题图里的两行公式应该交换顺序,但我太懒了……😂
前情提要
在“内积加密”系列文章的 前半部分 介绍了内积加密的定义和构造,最终在循环群里的 MDDH 假设下得到了满足 SIM-CPA 和 IND-CPA 的公钥内积加密,在这个过程中用到了一个一次一密的私钥 IPFE 作为垫脚石,并利用光滑投影哈希将私钥 IPFE 转换成了公钥 IPFE。
再谈私钥 IPFE
在定义泛函保密性之前,思考这么一件事:公钥 IPFE 可以保护密钥里的向量吗?
取决于你怎么定义“保护”。在不可区分意义下不能保护密钥里的向量:任何掌握公钥的人都可以加密标准基向量 获得密文 如果获得了密钥 则可以通过 获得 在 ALS16 方案中,我们只能获得群编码的结果,编码和数之间具有双射,如果使坏者已经知道密钥里的 可能是某两个之一,则可以轻松区分。
在模拟意义下,模拟器可以获得和密钥里的向量有双射关系的信息,如果模拟器输入的是(写成数字的)密钥里的向量,那么就跟 SIM-CPA 没区别了。对于 ALS16 方案,如果模拟器输入的是群编码后的密钥里的向量,则模拟器不可能高效:可以通过分别查询 的密钥(其中 是任意待求解离散对数的群元素)来求出 但 MDDH 假设蕴含着离散对数困难。
基于以上原因,我们只考虑私钥 IPFE 在不可区分意义下的泛函保密性。在私钥 IPFE 中,用加密基向量再解密的方式(在指数里)提取密钥里的向量的策略无效,因为加密也需要主私钥。回忆上半部分第一篇里对私钥 IPFE 语法、语义的 定义,它包括四个高效算法:
- 初始化算法 输入1向量维数 (的一进制表示),输出主密钥
- 密钥生成算法 用来产生任何一个向量 的密钥
- 加密算法 用来加密任何一个向量 得到密文
- 解密算法 应该能够计算
正确性也再抄一遍:对任意 和任意
↩1 机敏的读者一定注意到了这里不再输入质数 这是因为将要定义的安全性必须依赖计算性假设才能实现,而实际的方案中 将取决于计算性假设。
泛函保密性
现在定义不可区分意义下的泛函保密性,简称 IND-FH。在这个定义里,使坏者给出两组可能的密钥、密文里的向量组合,这两组向量满足可以计算的内积都对应相等,在此条件下,使坏者获得其中一组的密钥、密文,它需要判断这组密钥、密文来自于哪一组向量。形式化来说就是在 中:
- 初始化:使坏者 发送 挑战者 运行
- 挑战:使坏者可以进行任意多轮挑战,每一轮它有两个选项。
- 一个选项是 密钥挑战,使坏者选择 挑战者运行 并将 发送给
- 另一个选项是 密文挑战,使坏者选择 挑战者运行 并将 发送给
- 猜测:使坏者输出一个猜测
为了从设计使然的功能上排除平凡的使坏者,使坏者选择的向量必须满足 IND-FH 要求 这就是说:如果设计上可以计算的(也就是那些内积)无法区分两组向量,则无法区分这两组向量的密钥和密文。
来讨论一下这个安全性定义。谈到私钥 IPFE,第一个安全性定义是 完美保密性,它和 IND-FH 有三个不同:
- 前者为信息论意义下的安全性,后者是计算意义下的安全性;
- 前者只允许使坏者获得一个密文,后者允许使坏者获取任意多个密文;
- 前者不刻画密钥里的向量的保密性(使坏者总是知道密钥里的向量就是它选择的那些),后者对此有刻画(使坏者不知道密钥来自于上标是 0 还是 1 的那一组向量)。
如果适当改变完美保密性的定义,允许使坏者获得任意多个密文,并且只要求计算意义下的安全性,则可得到私钥 IPFE 的 IND-CPA——回忆 这里的讨论。容易发现 IND-FH 蕴含着 IND-CPA,即它同时2刻画了密钥和密文的安全性。
一个自然的问题是:有没有一个更模块化的方式定义安全性呢?譬如这样一个定义:它只考虑密钥里的向量的安全性,且如果一个方案同时满足 IND-CPA 和这个定义,则可以推出该方案也满足 IND-FH。
第一部分,答案是可以:只需要把私钥版本里 IND-CPA 里密钥和密文的地位互换即可,得到的定义仅刻画密钥里的向量的保密性。该定义叫3弱泛函保密性,简称 IND-wFH。
LV16 里的构造(即这个系列文章要讲的构造)就是这样分两步走的:
实际上,- 从 IND-CPA 的特殊 IPFE 获得同时满足 IND-CPA 和 IND-wFH 的私钥 IPFE。
- 从同时满足 IND-CPA 和 IND-wFH 的私钥 IPFE 获得 IND-FH 的私钥 IPFE。
我们也将沿着这个思路来构造 IND-FH 的私钥 IPFE。
↩2 机敏的读者一定已经发现了:在具有 IND-FH 安全性的私钥 IPFE 里,密钥和密文的地位是对等的。
↩3 真是朴实无华而无趣的命名法呢!
↩4 不知道可不可以 的意思是:我们不知道“如果一个方案同时满足 IND-CPA 和 IND-wFH 则它也满足 IND-FH”是否是真命题。下一篇会再谈到这一点。
双线性映射
为了之后构造 IND-FH 的 IPFE,我们需要一个比 循环群 更强力的工具——双线性群。熟悉这个工具的读者可以跳过这一段。
回忆一下,循环群可以编码 元素,且编码可以和 元素(数字)进行线性运算。编码具有一些困难问题,可以用来证明安全性,之前用到的是 MDDH 假设。不过作为代价,在困难性成立(因而安全性成立)的情况下无法把已经编码的两个数“在编码里相乘”。
在双线性群(也叫配对群)中,可以对编码进行一次乘法运算。形式化来说,一个双线性群包括三个循环群和一个映射 其中映射 可以高效计算,且满足 这里,映射 叫做5配对映射。三个循环群中出现在定义域的 叫做“源群”,出现在到达域6的 叫做“目标群”。
简化记号,映射 和乘号一样通常省略不写,三个群的 以及由此诱导的数乘、加号通常也不加下标。数乘、加号、减号(根据循环群中的讨论)可以自然诱导为矩阵记号,配对映射也可以——但运算数必须一个来自 另一个来自 注意 和 都是可以高效计算的。
在双线性群里通常对源群作计算性假设,例如可以假设 分别在 里成立。特别提一下,有些双线性群满足 这种叫对称双线性群,通常源群的双中括号下标就省略了。在这个情况下在源群里 假设不成立,请读者思考原因。
原因 注意到 假设里,伪随机分布总是一个不可逆二阶矩阵(的编码),而真随机分布几乎总是可逆的二阶矩阵(的编码),因此只需要判断输入是否编码了可逆矩阵即可,这可以通过判断该矩阵行列式是否为零完成。通过双线性映射,可以高效计算该二阶矩阵的行列式在 里的编码,进而判断它是否为零。
实际中,双线性群通常来自于 椭圆曲线,不过要在密码学中应用双线性群不一定要知道它的内部结构,多亏这样,咱们才不需要因此特地学习代数几何。此外,Boneh 教授在 Simons Institute 做过一个介绍双线性群的讲座 Bon15 ,很赞!
最后,一个很自然的小剧透:之后构造的私钥 IPFE 里,(以及对应的密文、密钥)会分别用 编码,而解密结果(内积)会用 编码。
↩5 也叫“配对运算”“配对”“双线性对”。最朴实无华的名字是“双线性映射”。
↩6 也叫“对应域”“陪域”“目标集”甚至“上域”。“陪域”应该是和“陪集”一样的翻译思路,而“上域”是硬套“上同调”的。
本篇结语
本篇探讨了为什么具有泛函保密性的 IPFE 应该是私钥方案,并针对私钥方案定义了 IND-FH,它同时刻画了密钥和密文的安全性,对定义稍加讨论后我们转而了解了一个新工具——双线性映射。
下一篇 讨论 LV16 构造 IND-FH IPFE 的方法。
请启用 JavaScript 来查看由 Disqus 驱动的评论。