背景
对称、公钥加密算法解密密文,得到的是明文的全部信息。但是我们希望能够对密文的访问附加特殊的要求,使访问者只得到明文的一个函数值,而不会泄露明文。
- FE的核心要求:对明文的灵活访问
- FE密钥:基于 对密文访问需求抽象出的函数
- 解密:对明文的预定义函数运算(?)(也可在加密函数中实现),直接输出函数值而非原明文
Functional Encryption
FE定义:键空间K,明文空间X,(K, X)上的泛函F: K 乘 X --> {0, 1}*。F中的f是确定性图灵机。同时,要求密钥空间 K 包含一个特殊的密钥,称为空密钥,表示为 ?(及空键,是从密文便可得到的明文信息,是攻击者知道的信息,但仅仅凭借这个信息无法解密)。
函数加密过程:(先执行Setup)由系统安全参数(一般是个随机数?)生成主密钥msk和公钥pk。然后,由主密钥msk和函数f生成用户私钥(KeyGen)。
函数加密的子类
函数加密是一个非常广泛的概念。涵盖多种基于公钥的加密概念(当f(x) = x 时,其实就变成了IBE)。 谓词加密:使用于(索引,明文)形式。例如,在电子邮件系统中,索引可能是发件人的姓名,而有效载荷是电子邮件内容。 带有公共索引的谓词加密中,谓词加密的一个子类使明文索引很容易从密文中读取。空键 ? 显式地显示索引 ind,即:F( ?, (ind, m)) = (ind, len(m))。
同态加密
在函数加密的基础上,假如客户端不希望服务器知道自己想要查询什么,而服务器也不愿意告诉客户自己是怎么进行运算的,就要借助同态加密。(感觉这里讲的不对,因为f()是客户端传给服务器的啊……)
同态性:Enc(m1) * Enc(m2) = Enc(m1 * m2) 由于加法、乘法具有同态性,我们可以对密文进行多项式级的同态运算。
同态加密中,客户端向服务器发送一个同态性质运算f(),服务器利用此函数对密文进行运算,然后客户端在根据运算的结果解密得到明文的一个函数值。 *只需要进行一次密文的解密 *解密方只能得到最后的结果,无法得知每一个密文信息
同态加密具有语义安全性:根据密文信息无法猜测明文
reference
同态加密(讲的很好呜呜呜呜) 函数加密。这个网站内容和老师PPT相似度98%(汗)
|