当前位置: 首页 > news >正文

函数加密(Functional Encryption)简介

1. 引言

函数加密(FE)可以被看作是公钥加密(PKE)的一种推广,它允许对第三方的解密能力进行更细粒度的控制。

在公钥加密中,公钥 p k \mathit{pk} pk 用于将某个值 x x x 加密为密文 c t \mathit{ct} ct(通过加密算法),而私钥 s k \mathit{sk} sk 用于从密文 c t \mathit{ct} ct 中恢复出 x x x(通过解密算法)。公钥加密强制执行一种“全有或全无”的访问规则:

  • 要么能够解密并读取完整明文,
  • 要么完全无法获得任何关于明文的信息。

而在函数加密中:

  • 私钥 s k f \mathit{sk_f} skf 与某个特定的函数 f f f 相关联,使得解密函数返回的是 f ( x ) f(x) f(x)
    • 可注意到,通过将 f f f 设置为恒等函数(即 f ( x ) = x f(x)=x f(x)=x),公钥加密就可以被看作是函数加密的一个特例。

更明确地说,如下图所示是 公钥加密 和 函数加密 这两种加密协议的不同“API”接口。函数加密:

  • 初始化阶段会生成一个主私钥 m s k \mathit{msk} msk
  • 在密钥生成阶段,可以利用该主私钥针对特定函数 f f f 派生出函数私钥 s k f \mathit{sk_f} skf
  • 加密算法的逻辑相同,而解密操作则需要函数私钥 s k f \mathit{sk_f} skf 来得到 f ( x ) f(x) f(x)
    在这里插入图片描述

非正式地说,一个函数加密方案的安全性要求对手除了 f ( x ) f(x) f(x) 所泄露的信息外,无法从密文中获得关于 x x x 的任何其他信息。BSW10——2010年Dan Boneh等人 Functional Encryption: Definitions and Challenges论文 中提供了对此类方案更正式的安全性定义。稍后会尝试更详细地解释它。现在,先通过一个示例应用来巩固对该加密方案的理解。

2. FE(函数加密)应用示例

来看一个医院的例子:医院保管着大量病人的记录,并且存在 n n n 类具有不同访问权限的专业人员。在这种场景下,医院管理方首先执行初始化阶段(setup),然后为每一个函数 f 1 , … , f i , … , f n f_1, \dots, f_i, \dots, f_n f1,,fi,,fn 创建对应的函数私钥 s k f 1 , … , s k f i , … , s k f n \mathit{sk_{f_1}}, \dots, \mathit{sk_{f_i}}, \dots, \mathit{sk_{f_n}} skf1,,skfi,,skfn,其中每个函数 f i f_i fi 表示对病历数据的一种特定访问策略。随后,管理方将各个函数私钥分发给相应类别的专业人员。

病人的记录通过 p k \mathit{pk} pk 加密后,每位专业人员都只能通过解密函数获得其权限范围内的信息,而无法访问其他内容。

在这种设置中,医院只需生成一份加密的病历记录,便可支持多种访问级别。这比传统的对称加密或非对称加密方式更加高效——后者通常需要为每一类用户执行 n n n 次加密操作。

3. 函数加密与全同态加密的区别

如果熟悉全同态加密(FHE),那么分析FHE与函数加密(FE)之间的异同会非常有趣。这两种密码学原语都支持在加密数据上执行函数,但它们的设置方式和应用场景完全不同。

典型的 FHE 应用场景适用于计算外包,其流程如下:

  • Alice 执行初始化并将她的数据 x x x 加密为密文 c t \mathit{ct} ct,然后将该密文发送给 Bob
  • Bob 在密文 c t \mathit{ct} ct 上计算函数 f f f,得到新的密文 c t ′ \mathit{ct'} ct,并将其结果返回给 Alice
  • Alice 解密密文,得到 f ( x ) f(x) f(x)
    在这里插入图片描述

函数加密与全同态加密的区别有:

  • 1)可应用于加密数据上的函数 f f f 的差别:
    • 在全同态加密(FHE)中,被应用于加密数据上的函数 f f f(即评估阶段)是任意的
      • Bob 可以在密文 c t \mathit{ct} ct 上执行任意算术函数,这个函数也可以是 Alice 私有的。
    • 相比之下,在函数加密(FE)中,可在密文上执行的函数集受限于主私钥生成的函数私钥
  • 2)评估与解密阶段的差别:
    • FHE 的评估函数返回的是另一个密文,需要 Alice 进一步参与解密。
    • 而在 FE 中,评估和解密是同时进行的,不需要进一步的交互即可获得 f ( x ) f(x) f(x)

简而言之:

  • FHE:始终需要与密钥持有者交互才能获得 f ( x ) f(x) f(x),但函数 f f f任意的(甚至可以是私密的)
  • FE:不需要与密钥持有者交互就能获得 f ( x ) f(x) f(x),但可执行的函数 f f f受限的

4. FE 的安全性定义

函数加密的安全性是在可选择明文攻击下的不可区分性(IND-CPA)概念下定义的。这个安全性通过一个对手 A \mathcal{A} A 和挑战者之间的博弈进行证明。该博弈的逻辑类似于用于证明公钥加密方案语义安全性的方式,如下所示:
在这里插入图片描述

先分析 PKE 的情形。对于 b = 0 , 1 b = 0,1 b=0,1,实验 E x p ( b ) \mathsf{Exp}(b) Exp(b) 的流程如下:

  • 挑战者使用函数 G ( ) G() G() 生成密钥对 ( p k , s k ) (\mathit{pk}, \mathit{sk}) (pk,sk),并将 p k \mathit{pk} pk 提供给对手 A \mathcal{A} A
  • A \mathcal{A} A 得到公钥 p k \mathit{pk} pk
  • A \mathcal{A} A 选择两条等长的消息 m 0 m_0 m0 m 1 m_1 m1,并将它们发送给挑战者
  • 挑战者使用公钥加密消息 m b m_b mb(其中 b ∈ { 0 , 1 } b \in \{0,1\} b{0,1},但 A \mathcal{A} A 并不知道 b b b 的值): c ← E ( p k , m b ) \mathit{c} \leftarrow E(\mathit{pk}, m_b) cE(pk,mb)
  • A \mathcal{A} A 得到密文 c \mathit{c} c 并输出一个猜测值 b ′ ∈ 0 , 1 b' \in {0,1} b0,1

如果没有任何高效(多项式时间)对手 A \mathcal{A} A 能够区分 m 0 m_0 m0 m 1 m_1 m1 的加密密文,则该加密方案 E \mathcal{E} E(由其函数 ( G , E , D ) (G, E, D) (G,E,D) 定义)在语义安全意义下是安全的。数学上,这被表示为:
∣ Pr ⁡ [ E X P ( 0 ) = 1 ] − Pr ⁡ [ E X P ( 1 ) = 1 ] ∣ < negligible \left| \Pr[\mathsf{EXP}(0) = 1] - \Pr[\mathsf{EXP}(1) = 1] \right| < \text{negligible} Pr[EXP(0)=1]Pr[EXP(1)=1]<negligible

其中, Pr ⁡ [ E X P ( 0 ) = 1 ] \Pr[\mathsf{EXP}(0) = 1] Pr[EXP(0)=1] 表示对手在实验 0 中输出 1 的概率(即错误地猜测加密的是 m 1 m_1 m1),而 Pr ⁡ [ E X P ( 1 ) = 1 ] \Pr[\mathsf{EXP}(1) = 1] Pr[EXP(1)=1] 表示对手在实验 1 中正确输出 1 的概率。

换句话说,对手正确猜出被加密消息的概率应该非常接近于随机猜测的概率。实际中,这确保了对手即使能选择被加密的消息,也无法通过观察密文来获取关于明文的任何信息。

正如 Morrolan 所指出的:

  • 当且仅当加密方案是非确定性的,这种安全属性才成立。

也就是说:

  • 在同一个公钥下,对相同明文的两次加密操作应该以压倒性概率产生不同的密文

在函数加密(FE)中,博弈仅有些许不同。对于 b = 0 , 1 b = 0,1 b=0,1,实验 E X P ( b ) \mathsf{EXP}(b) EXP(b) 的过程如下:

  • 挑战者生成密钥对 ( p k , m s k ) (\mathit{pk}, \mathit{msk}) (pk,msk) 并将其交给对手 A \mathcal{A} A
  • A \mathcal{A} A 可自适应地向挑战者提交不同的函数 f 1 , f 2 , … , f i f_1, f_2, \dots, f_i f1,f2,,fi,并接收相应的函数私钥 s k f 1 , s k f 2 , … , s k f i \mathit{sk_{f_1}}, \mathit{sk_{f_2}}, \dots, \mathit{sk_{f_i}} skf1,skf2,,skfi
  • 然后, A \mathcal{A} A 选择两个消息 m 1 m_1 m1 m 2 m_2 m2,满足对于所有已查询的函数 f i f_i fi,都有 f i ( m 1 ) = f i ( m 2 ) f_i(m_1) = f_i(m_2) fi(m1)=fi(m2),并将它们提供给挑战者
  • 挑战者用公钥加密消息 m b m_b mb(其中 b ∈ 0 , 1 b \in {0,1} b0,1,但 A \mathcal{A} A 并不知道 b b b 的值): c ← E ( p k , m b ) \mathit{c} \leftarrow E(\mathit{pk}, m_b) cE(pk,mb)
  • A \mathcal{A} A 得到密文 c \mathit{c} c,并输出一个猜测 b ′ ∈ 0 , 1 b' \in {0,1} b0,1

对手可以使用其函数私钥对密文 c \mathit{c} c 解密并得到 f ( m b ) f(m_b) f(mb),但与之前类似,无法判断密文 c \mathit{c} c 是对 m 1 m_1 m1 还是 m 2 m_2 m2 的加密 。这正是所描述的安全性定义的体现。

更进一步地,BSW10——2010年Dan Boneh等人 Functional Encryption: Definitions and Challenges论文 中指出:

  • 上述安全定义对于某些特定函数 f f f 是不充分的,并在论文中提出了更为严格的安全性定义。

5. 总结

除了在实际应用中对加密数据进行计算的显著作用,正如本文所描述的那样,函数加密在密码学理论中也已成为一种强有力的工具。它可用于构建更高级的密码原语,如 不可区分混淆(iO),iO被认为是“密码学完备”的:

  • 几乎可以实现所有已知的密码原语。

特别地,根据 Sora 的 Introduction to Indistinguishability/Ideal Obfuscation(iO)可知:

  • iO 可以通过递归函数加密(recursive FE)来构建

参考资料

[1] Leku 2024年11月25日博客 A gentle introduction to functional encryption

相关文章:

  • Postgresql与openguass对比
  • WiFi密码查看器打开软件自动获取数据
  • 开发者版 ONLYOFFICE 协作空间:3.1版本 API 更新
  • 视频编解码学习十一之视频原始数据
  • Redis扫盲
  • Unity 2D 行走动画示例工程手动构建教程-AI变成配额前端UI-完美游戏开发流程
  • 亚马逊云科技:引领数字时代的云服务先锋
  • 汉得 x 真味生物|H-ZERO PaaS项目启动,共启数字化新征程!
  • 模板的使用
  • 【LUT技术专题】SPFLUT代码解读
  • 捌拾肆- 量子傅里叶变换 (2)
  • 机器学习中分类模型的常用评价指标
  • echarts按需加载和不按需加载,打包后的具体对比
  • 网站开发过程中样式忽然不显示问题
  • 《构建社交应用的安全结界:双框架对接审核API的底层逻辑与实践》
  • 《微机原理与接口技术》第 6 章 半导体存储器
  • 《从像素到身份:Flutter如何打通社交应用人脸识别的技术闭环》
  • 从生产流程到故障处理,R²AIN SUITE 如何为制造业“减负”?
  • 树莓5安装 PyCharm 进行python脚本开发
  • Java 线程Thread类中的方法
  • 最美西游、三星堆遗址等入选“2025十大年度IP”
  • 做街坊们的“健康管家”,她把专科护理服务送上门
  • 为发期刊,高校学者偷贩涉密敏感数据!国安部披露间谍案细节
  • 宣布停火后,印控克什米尔地区再次传出爆炸声
  • 中国科协发声:屡禁不止的奇葩论文再次敲响学风建设警钟
  • “80后”赵亮出任上海普陀区委副书记