Lattigo 同态加密安全一文讲透:IND-CPA 与 IND-CPA-D 如何守住密钥 📅 2026/8/23 10:55:57 Lattigo 同态加密安全一文讲透IND-CPA 与 IND-CPA-D 如何守住密钥【免费下载链接】lattigoA library for lattice-based multiparty homomorphic encryption in Go项目地址: https://gitcode.com/gh_mirrors/la/lattigo密文交出去、结果发出去就算不安全了吗在 Lattigo 这个 Go 语言格基多方同态加密库里这正是 IND-CPA 与 IND-CPA-D 两个安全模型要回答的问题。先看对比两个模型差在哪把攻击者想象成两种访客权限和代价一目了然对比项IND-CPA基线IND-CPA-D增强攻击者权限只能挑明文请求加密看密文还能拿已知明文换解密结果保护目标密文不泄露明文解密结果不泄露密钥信息性能代价零额外开销精度损失参数要重新调IND-CPA 是所有主流加密系统的底线。Lattigo 在正确选择安全参数时默认就保证 IND-CPA 安全。IND-CPA-D 多了一条攻击者拥有解密预言机但只能解自己已知明文的密文。听着不吓人往下看。为什么 CKKS 要多一分小心CKKS 是近似方案。解密得到的不是明文 m而是 m ee 是误差。问题就藏在这里攻击者合法加密 m再拿 m e 来换。他本来就知道 m一减误差 e 就到手了。拿 e 和手里的密文能推回密钥。这就是 Li–Micciancio 攻击也是 CPA-D 这个模型存在的理由。解码前该加多少噪声Lattigo 的应对Lattigo不会自动给你 CPA-D 保护但提供了现成的 APIschemes/ckks/encoder.go里的DecodePublic。原理一句话解码前把结果四舍五入到定点精度网格用舍入洗掉误差攻击者就再也凑不出 m e 的完整信息。用的时候你指定logprec也就是 log₂(1/ε) 位定点精度ε 是解码后的方案误差。它怎么选按真实数据分布采样输入跑完整条加密-计算-解密链路记录每个槽位的误差画出误差分布选一个精度让误差超阈值的概率低于 2⁻λλ 是你的安全位精度给得越高泄露越少但你的有效小数位也越少。安全是拿精度换的。误区专区四个高频误解误区只要解密结果要给人看就得开 CPA-D。真相只有把解密明文交给外部方才会触发这个攻击面。结果只留在自己手里IND-CPA 就够了。误区FHE 天然抗选择密文攻击。真相FHE 密文天生可塑叠加循环安全、决策到搜索这类弱点能做出反应式密钥恢复攻击。FHE 方案不抗 CCA。⚠️误区精确方案BFV、BGV没有这问题。真相2024 年的研究已给出针对 BFV、BGV、TFHE 的被动密钥恢复攻击利用的是不完美的正确性。想抗住解密失败必须罕见到 2⁻λ 以下。误区上了 CPA-D 就高枕无忧。真相CPA-D 模型比现实威胁窄还背着性能开销。很多风险用应用层对策更划算。落地清单三步缩小攻击面参数选对用 Lattice estimator 工具生成至少 128-bit 安全的 Lattigo 安全参数别直接抄示例。限制查询CPA-D 攻击往往需要数十万次查询。密钥轮换、临时密钥都能给单个密钥的明文-密文对数封顶再配上评估、解密接口的限流。输出消毒要外发的明文先过DecodePublic带上logprec再出门密文只走私密、可认证的通道。多方/门限场景另记一条同一个方别重复参与同一协议复用份额累积信息本身就是泄露。更多细节见项目根目录的 SECURITY.md。一句话总结IND-CPA 是底线CPA-D 只在外发解密结果时加购。 下一步先用 Lattice estimator 定参数再决定要不要给输出加一道DecodePublic你的安全水位就定了。【免费下载链接】lattigoA library for lattice-based multiparty homomorphic encryption in Go项目地址: https://gitcode.com/gh_mirrors/la/lattigo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考