近似同态加密的 IND/SIM-CPA+ 安全性:对于 CKKS 实际有效的攻击

参考文献:

  1. [LM21] Li B, Micciancio D. On the security of homomorphic encryption on approximate numbers[C]//Advances in Cryptology–EUROCRYPT 2021: 40th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Zagreb, Croatia, October 17–21, 2021, Proceedings, Part I 40. Springer International Publishing, 2021: 648-677.
  2. [CHK20] Cheon J H, Hong S, Kim D. Remark on the security of ckks scheme in practice[J]. Cryptology ePrint Archive, 2020.
  3. [Bel20] M. Bellare. personal communication, December 2020.
  4. [DS16] Ducas L, Stehlé D. Sanitization of FHE ciphertexts[C]//Advances in Cryptology–EUROCRYPT 2016: 35th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Vienna, Austria, May 8-12, 2016, Proceedings, Part I 35. Springer Berlin Heidelberg, 2016: 294-310.

CKKS 满足 IND-CPA 安全性,但是并非是 IND-CPA+ 安全的,它在某些 MPC 场景中完全不安全!

文章目录

  • Preliminaries
    • Passive Attacker
    • Approximate Encryption
  • Security Notions
    • Indistinguishability-Based
    • Simulation-Based
    • Separations Between Them
    • Circuit Privacy and Functional Decryption
  • Attacks to CKKS
    • Linear Key-Recovery Attack
    • Lattice Attack
    • Experiments
  • Against IND-CPA+ Attack

Preliminaries

Passive Attacker

由于 FHE 密文的延展性,安全性 IND-CCA2 是不可达的,同时 IND-CCA1 实际中也难以实现,因此让人们往往把 IND-CPA 作为设计目标。

然而,在云计算、MPC 等场景下,敌手可以获得某些消息的解密(访问了受限的解密神谕),这导致敌手的能力实际上没能被 IND-CPA 安全性定义所完全捕获。

我们考虑三方场景(解密者 Alice,服务器 Bob,加密者 Eva):Alice 生成 ( s k , p k ) (sk,pk) (sk,pk),Eva 加密数据 m m m 发送给 Bob,Bob 收到密文 c t ct ct 之后做一定的运算 f f f,将 c t ′ ct' ct 发送给 Alice 解密,最后将 m ′ m' m 发送给 Eva。整个流程中, m , f m,f m,f 可以被 Eva 主动选择(也可以不选择、甚至不知道), c t , c t ′ , m ′ ct,ct',m' ct,ct,m 可以被 Eva 被动接收(不可以篡改、不可以注入)。

实际上 Eva 是一个被动敌手(passive attacker),其行为如图:

在这里插入图片描述

被动敌手可以通过访问 FHE 提供的公开标准接口(legitimate operations)构造出某个 m ∗ m^* m 对应的 c t ′ ct' ct,要求解密神谕(有能力检查 c t ′ ct' ct 确实是合法产生的)回应 m ′ m' m,从而可能帮助被动敌手区分密文、甚至私钥恢复。

Approximate Encryption

Raw (R)LWE Encryption Scheme,

  • KeyGen:私钥 s ← χ s s \gets \chi_s sχs,公钥 ( b : = a ⋅ s + e , a ) (b:=a\cdot s+e,a) (b:=as+e,a),其中 a ← U ( R q ) a \gets \mathcal U(\mathcal R_q) aU(Rq) e ← χ e e \gets \chi_e eχe
  • Encrypt:简单计算 c : = u ⋅ ( b , a ) + ( m , 0 ) + ( e 0 , e 1 ) c:=u \cdot (b,a) + (m,0) + (e_0,e_1) c:=u(b,a)+(m,0)+(e0,e1),其中 u ← χ r u \gets \chi_r uχr e 0 , e 1 ← χ e e_0,e_1 \gets \chi_e e0,e1χe
  • Decrypt:简单输出 m ′ : = ⟨ s , c ⟩ ( m o d q ) m':=\langle s,c\rangle \pmod q m:=s,c(modq),易知 m ′ = m + e ′ m'=m+e' m=m+e

注意上述的加解密不包含编码(纠错码、SIMD 打包),解密就是一个线性运算

  1. 如果采取了纠错码(比如 MSD 编码),使满足解密正确性,称之为精确同态方案(Exact),比如 BGV、BFV
  2. 如果密文的解密结果不是精确值,称之为近似同态方案(Approximate),比如 CKKS

CKKS 因为没有使用 Δ ≈ q / t \Delta \approx q/t Δq/t 缩放因子,这使得噪声增长速度比 BGV、BFV 慢得多,因此可以执行特别深的电路(而不必自举)

采取 BV 的 tensor 技术,采取 GHS 的 raising the modulus 技术,同态乘法为:

  • 预计算:运算秘钥 e v k = ( b : = a s + e + p s 2 , a ) ∈ R p q 2 evk=(b:=as+e+ps^2, a) \in \mathcal R_{pq}^2 evk=(b:=as+e+ps2,a)Rpq2,其中 a ← U ( R p q ) a \gets \mathcal U(\mathcal R_{pq}) aU(Rpq) e ← χ e e \gets \chi_e eχe

  • 在线计算:输入 c 0 , c 1 ∈ R q 2 c_0,c_1\in \mathcal R_{q}^2 c0,c1Rq2,计算多项式乘积并且重线性化,
    c = ( b 0 b 1 , a 0 b 1 + a 1 b 0 ) + ⌊ [ a 0 a 1 ] q ⋅ e v k p ⌉ ( m o d q ) c = (b_0b_1, a_0b_1+a_1b_0) + \left\lfloor \frac{[a_0a_1]_q \cdot evk}{p} \right\rceil \pmod q c=(b0b1,a0b1+a1b0)+p[a0a1]qevk(modq)

CKKS 选取模数为 q l = q 0 ⋅ p l q_l=q_0 \cdot p^l ql=q0pl,其中 p = 2 p=2 p=2 是 base, l l l 是 level,密文 ( c , Δ , l ) (c,\Delta,l) (c,Δ,l) 是带标记的,其中的 Δ \Delta Δ 是定点数的缩放因子,SIMD 编码是 $m=Encode(z;\Delta):=\lfloor \phi^{-1}(\Delta \cdot z)\rceil $,映射 ϕ : R → C N / 2 \phi: \mathcal R \to \mathbb C^{N/2} ϕ:RCN/2 是典范嵌入,选用 ζ 2 N 4 j + 1 , j ∈ [ N / 2 ] \zeta_{2N}^{4j+1},j \in [N/2] ζ2N4j+1,j[N/2] 作为根。

为了控制噪声增长速度,使用 Rescaling 技术(就是 BGV 的模切换),
R S ( ( c ∈ R q l 2 , Δ , l ) , l ′ ) = ( ⌊ c p l − l ′ ⌉ ∈ R q l ′ 2 , p l − l ′ Δ , l ′ ) RS((c \in \mathcal R_{q_{l}}^2,\Delta,l), l') = \left(\left\lfloor \frac{c}{p^{l-l'}} \right\rceil \in \mathcal R_{q_{l'}}^2, p^{l-l'}\Delta, l'\right) RS((cRql2,Δ,l),l)=(pllcRql2,pllΔ,l)
CKKS 的线性解密结果为 m ′ = m + e ∈ R q m'=m+e \in \mathcal R_q m=m+eRq,其中 $m=\lfloor \phi^{-1}(\Delta \cdot z)\rceil $,最终的输出是近似值 z ′ = D e c o d e ( m ′ ; Δ ) : = ϕ ( m ′ / Δ ) = z + e ′ z' = Decode(m';\Delta):= \phi(m'/\Delta) = z+e' z=Decode(m;Δ):=ϕ(m)=z+e

Security Notions

Indistinguishability-Based

[LM21] 首先基于游戏,给出了 IND-CPA+ 的定义,

在这里插入图片描述

Simulation-Based

[LM21] 接着基于模拟,给出了 SIM-CPA+ 的定义,

在这里插入图片描述

在这里插入图片描述

Separations Between Them

易知,IND-CPA+ 立即导致 IND-CPA(它仅访问一次 E,并且不访问 H 和 D),可以证明 IND-CPA+ 是严格强的:

  • 对于精确同态加密,[LM21] 证明了 IND-CPA+ 等价于 IND-CPA
  • 对于近似同态加密,[LM21] 证明了 IND-CPA+ 严格强于 IND-CPA

可以证明,SIM-CPA+ 导致了 IND-CPA+,并且两者相分离(SIM-CPA+ 严格更强):

  • 对于精确同态加密,[LM21] 证明了 SIM-CPA+ 等价于 IND-CPA+
  • 对于近似同态加密,[Bel20] 证明了 SIM-CPA+ 严格强于 IND-CPA+

确切地说,我们定义有界查询数量的变体 ( q , l ) (q,l) (q,l)-IND-CPA+ 和 ( q , l ) (q,l) (q,l)-SIM-CPA+,它对于任意的受限敌手满足上述 IND-CPA+ 安全定义、SIM-CPA+ 安全定义,除了这里的敌手只能访问至多 l ( κ ) l(\kappa) l(κ) 次 E 和 H 神谕,访问至多 q ( κ ) q(\kappa) q(κ) 次 D 神谕。[LM21] 证明了:对于任意的 q ≥ 2 q \ge 2 q2,都存在 ( q , l ) (q,l) (q,l)-SIM-CPA+ 安全,但是 ( q + 1 , l ) (q+1,l) (q+1,l)-IND-CPA+ 不安全的近似同态加密。因此,在 IND-CPAIND-CPA+ 之间,存在无限长的安全性(严格)递增的安全性序列

此外,上述的定义都是适应性的(security with adaptively chosen queries):敌手可以主动选取不同的查询次数和顺序。我们可以要求敌手在看到 p k , e v k pk,evk pk,evk 之前就已经确定了它的查询顺序,这就是非适应的(fully non-adaptive model)。[LM21] 证明了非适应安全比适应性安全弱的多:存在近似同态加密方案,它是 SIM-CPA+ 非适应安全的,但不是 ( 2 , 2 ) (2,2) (2,2)-IND-CPA+ 适应性安全的。

Circuit Privacy and Functional Decryption

Circuit Privacy:电路隐私是说,从 E n c ( m ) Enc(m) Enc(m) 同态计算出 E n c ( f ( x ) ) Enc(f(x)) Enc(f(x)),不会泄露 f f f 的信息。

Functional Decryption:函数解密是说,选取 f ∈ L f \in \mathcal L fL,要求 D 神谕回应 f ( D e c ( c ) ) f(Dec(c)) f(Dec(c)),而非 m = D e c ( c ) m=Dec(c) m=Dec(c) 本身。

[LM21] 简单描述了如何将 IND-CPA+ 以及 SIM-CPA+ 的安全性定义扩展到两者。

Attacks to CKKS

[LM21] 给出了 CKKS 的被动敌手下的私钥恢复攻击(这远比 IND-CPA+ 攻击更强),因此 CKKS 虽然是 IND-CPA 安全,却不是 IND-CPA+ 安全。

Linear Key-Recovery Attack

简单起见,我们考虑对称加密。

如果敌手可以获得密文 c = ( b : = a ⋅ s + m + e , a ) c=(b:=a \cdot s+m+e,a) c=(b:=as+m+e,a) 的解密 m ′ = m + e m'=m+e m=m+e,那么
b − m ′ = a ⋅ s ( m o d q ) b-m' = a \cdot s \pmod q bm=as(modq)
它是关于 s s s 的线性方程,

  • 对于 LWE-based,只需要收集 n n n 个线性方程组,就可以求解出 s s s
  • 对于 RLWE-based,只要 a ∈ R q a \in \mathcal R_q aRq 可逆,甚至只需要一个方程,就可以计算出 s = ( b − m ′ ) ⋅ a − 1 s=(b-m') \cdot a^{-1} s=(bm)a1

CKKS 的模数为 q l = q 0 ⋅ 2 l q_l=q_0 \cdot 2^l ql=q02l,导致 a ∈ R q a \in \mathcal R_q aRq 基本都是不可逆的,但依旧可以恢复出 s s s 的部分信息

Lattice Attack

CKKS 采取了 SIMD 编码,最终的解密结果是 z ′ = D e c o d e ( m ′ ) z'=Decode(m') z=Decode(m) 而非 m ′ m' m 本身

[LM21] 采取重编码手段,尝试恢复出 m ′ m' m

  • 如果 E n c o d e ( z ′ ) = D e c ( E n c ( m ; e ) ) Encode(z') = Dec(Enc(m;e)) Encode(z)=Dec(Enc(m;e)),那么获得 m ′ = m + e m'=m+e m=m+e 之后,可以采取上述的线程代数的手段恢复出私钥
  • 如果 E n c o d e ( z ′ ) = D e c ( E n c ( m ; e ) ) + ϵ Encode(z') = Dec(Enc(m;e))+\epsilon Encode(z)=Dec(Enc(m;e))+ϵ,只要 ∥ ϵ ∥ 2 ≤ 2 − N / 2 ⋅ ( q N − h ) , h = H W ( s ) \|\epsilon\|_2 \le 2^{-N/2} \cdot (q\sqrt N-h), h=HW(s) ϵ22N/2(qN h),h=HW(s),那么使用格基约简求解近似 CVP 问题,依旧可以高效恢复出私钥

在多种 CKKS 的实现中(HEAAN、HElib、SEAL、PALISADE),编码解码过程都是利用 double-precision FFT 完成的。而密文的存储/运算,有些使用 Multi-precision Integer,有些则使用 RNS 系统。总体上,CKKS 的计算精度越高,那么 ϵ \epsilon ϵ 就越小,这导致更加有效的攻击。

Experiments

仅使用线性代数攻击 CKKS,

在这里插入图片描述

对于不同实现的攻击结果,

在这里插入图片描述

Against IND-CPA+ Attack

最后 [LM21] 建议修改解密函数,不要输出 m ′ = m + e ~ m'=m+\tilde e m=m+e~(其中的 e ~ \tilde e e~ 包含了 s k sk sk u , e u,e u,e 的信息),而是输出一个近似值(不依赖私钥和随机带)

  1. 添加高斯噪声:简单在解密结果上添加高斯噪声,但是敌手可以通过多次解密同一个密文,统计出原本的解密结果
  2. 添加确定性噪声:利用 PRF 关于 ct 计算出确定的噪声(强制每个密文至多解密一次),这个类似于噪声洪泛(noise flooding techniques),但是需要超多项式的模数。或者使用 [DS16] 的密文消毒(Sanitization of FHE Ciphertexts,通过 soak-spin-repeat 策略,迭代 Rerandomize、Bootstrapping 滚洗),使用较小的参数达到某个先验的界 q q q-IND-CPA+ 安全
  3. 精确解密:选取合适的 Δ \Delta Δ 使得高概率满足 ⌊ ( m + e ~ ) / Δ ⌉ = ⌊ m / Δ ⌉ \lfloor (m+\tilde e)/\Delta\rceil = \lfloor m/\Delta\rceil ⌊(m+e~)=m(后者是精确值),输出近似值 ⌊ ( m + e ~ ) / Δ ⌉ \lfloor (m+\tilde e)/\Delta\rceil ⌊(m+e~) 而非 m + e ~ m+\tilde e m+e~ 本身,这似乎是对于 CKKS 更有前途的

[CHK20] 对 HEAAN 做了修改,提供了两种场景下的解密函数,

  • Dec:这是原始的解密函数,它提供了 IND-CPA 安全,不允许泄露解密结果给任何人
  • DecForShare:对解密结果添加一定的高斯噪声,但是 B c t x t B_{ctxt} Bctxt 的规模 [CHK20] 并没有具体给出

[CHK20] 调查了其他几个实现的办法:

  • HElib 粗糙地估计各个密文的噪声上界 B B B,然后根据它来添加噪声
  • PALISADE 限制明文空间仅使用实部,虚部强行置为 0 0 0,运算过程中虚部会累积一定的噪声,用它们来估计密文的噪声规模
  • Lattigo 要求用户提供期望的输出精度 b b b,然后执行 DecodeAndRound,舍入解码的结果
  • SEAL 简单要求用户不要泄露解密结果(躺平了)

但是上述这些都只能缓解问题,重新设计一个更加安全可靠的近似同态加密,仍是个开放问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】命令expect使用详解

🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…

【上海大学数字逻辑实验报告】五、记忆元件测试

一、实验目的 掌握R-S触发器、D触发器和JK触发器的工作原理及其相互转换。学会用74LS00芯片构成钟控RS触发器。学会用74LS112实现D触发器学会在Quartus II上用D触发器实现JK触发器。 二、实验原理 基本R-S触发器是直接复位-置位的触发器,它是构成各种功能的触发器…

AI文档助手,当下热门的AI文档助手【2024】

在当今信息爆炸的时代,文档创作的需求愈发庞大。为了满足用户对高效、准确、原创性文档的需求,人工智能技术的应用日益广泛。本文将专心分享AI文档助手领域的热门推荐。 AI文档助手的背景与应用 AI文档助手作为人工智能技术在文档创作领域的一大应用&am…

C++封装、继承(单继承)、多态详细分析。

系列文章目录 文章目录 系列文章目录摘要一、基本概念二、多态的分类三、多态的实现3.1 类型兼容与函数重写3.2 动态联编与静态联编3.3 虚函数3.4 动态多态的实现过程 总结参考文献 摘要 多态性特征是 C中最为重要的一个特征,熟练使用多态是学好 C的关键&#xff0…

原创 | 数据的确权、流通、入表与监管研究(一):数据与确权

作者:张建军,中国电科首席专家,神州网信技术总监 本文约7100字,建议阅读10分钟 本文主要介绍数据与数据分类、数据确权规则、数据的所有权与其他权利等方面内容,并进行案例分析。 2022年12月发布的《关于构建数据基础制…

Linux 和 macOS 的主要区别在哪几个方面呢?

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

uniapp实战 —— 弹出层 uni-popup (含vue3子组件调父组件的方法)

效果预览 弹出的内容 src\pages\goods\components\ServicePanel.vue <script setup lang"ts"> // 子组件调父组件的方法 const emit defineEmits<{(event: close): void }>() </script><template><view class"service-panel"…

C# .NET平台提取PDF表格数据,并转换为txt、CSV和Excel表格文件

处理PDF文件中的内容是比较麻烦的事情&#xff0c;特别是以表格形式呈现的各种数据。为了充分利用这些宝贵的数据资源&#xff0c;我们可以通过程序提取PDF文件中的表格&#xff0c;并将其保存为更易于处理和分析的格式&#xff0c;如txt、csv、xlsx&#xff0c;从而更方便地对…

leetcode面试经典150题——35 螺旋矩阵

题目&#xff1a; 螺旋矩阵 描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 提示&…

12月8日作业

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff1b;将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;…

kafka学习笔记--安装部署、简单操作

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

Day54力扣打卡

打卡记录 出租车的最大盈利&#xff08;动态规划&#xff09; 链接 class Solution:def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int:d defaultdict(list)for start, end, w in rides:d[end].append((start, end - start w))f [0] * (n 1)for i in…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑源网荷效益的峰谷电价与峰谷时段双层优化模型》

这个标题涉及到电力定价和能源效益的优化模型。让我来分解一下&#xff1a; 峰谷电价&#xff1a;这是一种电力定价策略&#xff0c;即在一天内不同时间段设定不同的电价。通常&#xff0c;高峰时段&#xff08;需求高&#xff09;的电价相对较高&#xff0c;而低谷时段&#x…

人工智能学习9(LightGBM)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm lightGBM原理lightGBM的基础使用案例1&#xff1a;鸢尾花案例2&#xff1a;绝对求生玩家排名预测一、数据处理部分1.数据获取及分析2.缺失数据处理3.数据规范化4.规范化输出部分数据5.异常数据处理5.1删除开…

Child Mind Institute - Detect Sleep States(2023年第一次Kaggle拿到了银牌总结)

感谢 感谢艾兄&#xff08;大佬带队&#xff09;、rich师弟&#xff08;师弟通过这次比赛机械转码成功、耐心学习&#xff09;、张同学&#xff08;也很有耐心的在学习&#xff09;&#xff0c;感谢开源方案&#xff08;开源就是银牌&#xff09;&#xff0c;在此基础上一个月…

基于Lucene的全文检索系统的实现与应用

文章目录 一、概念二、引入案例1、数据库搜索2、数据分类3、非结构化数据查询方法1&#xff09; 顺序扫描法(Serial Scanning)2&#xff09;全文检索(Full-text Search) 4、如何实现全文检索 三、Lucene实现全文检索的流程1、索引和搜索流程图2、创建索引1&#xff09;获取原始…

模板与泛型编程

函数模板 显示实例化 区别定义与声明 T是模板形参 int是模板实参 inpunt是函数形参 3是函数实参 显示实例化 模板必须实例化可见 翻译单元一处定义原则 与内联函数异同 引入原因&#xff1a;函数模板是为了编译器两个阶段的处理 内联函数是为了能在编译期展开 模板实参的类…

Ignis - Interactive Fire System

Ignis - 点火、蔓延、熄灭、定制! 全方位火焰系统。 这个插件在21年的项目中使用过很好用值使用概述 想玩火吗?如果想的话,那么Ignis就是你的最佳工具。有了Ignis,你可以把任何物体、植被或带皮带骨的网状物转换为可燃物体,它就会自动着火。然后,火焰可以蔓延,点燃其他物…

【docker 】centOS 安装docker

官网 docker官网 github源码 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安装软件包 yum install -y yum-utils \device-mapper-persistent-data…

【优选算法系列】【专题二滑动窗口】第四节.30. 串联所有单词的子串和76. 最小覆盖子串

文章目录 前言一、串联所有单词的子串 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、最小覆盖子串 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …