你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通过 SEAL 实现同态加密

.NET

本文介绍如何以及何时使用同态加密,以及如何使用开源的 Microsoft 简单加密算术库 (SEAL) 实现同态加密。

体系结构

传统加密和 SEAL 加密的示意图。

下载此体系结构的 Visio 文件

工作流

传统的加密方案包括三项功能:密钥生成、加密和解密。 对称密钥加密方案使用同一个机密密钥进行加密和解密。 它可以对大量数据启用有效加密,以实现安全的外包云存储。 公钥加密方案使用公钥进行加密,使用一个独立的机密密钥进行解密。 知道公钥的任何人都可以加密数据,但只有知道该机密密钥的人才能解密和读取数据。 公钥加密可以实现安全的在线通信,但通常不如对称密钥加密那么有效。

可以使用传统加密来实现安全存储和通信,但外包计算要求去除加密层。 提供外包计算的云服务必须实现访问策略,以防止未经授权访问数据和密钥。 数据隐私性依赖于云提供商实施的并受客户信任的访问控制策略。

有了 Microsoft SEAL 同态加密,云提供商永远无法以非加密方式访问他们存储和计算的数据。 可以直接对加密的数据执行计算。 这种加密计算的结果仍保持加密状态,只能由数据所有者使用机密密钥来解密。 大多数同态加密都使用公钥加密方案,不过,并一定始终需要公钥功能。

方案详细信息

公司经常以加密形式发送、接收和存储其云数据。 但是,若要利用云计算,公司必须提供未加密的数据,或提供用于解密数据的密钥。 这种做法使得公司数据面临更大的风险。 同态加密允许直接对加密的数据运行计算,从而更方便地将云的潜能应用于隐私性至关重要的数据。

可能的用例

  • 轻型计算,例如对隐私性至关重要的数据和程序部件进行加法和乘法运算。
  • 外包的云计算,其中的单个所有者拥有所有数据,只有该所有者有权访问解密密钥。

注意事项

  • 只能对加密的数据执行某些计算。 Microsoft SEAL 同态加密库允许对加密的整数或实数进行加法和乘法运算。 使用此技术对加密的数据运行加密比较、排序或正则表达式通常是不可行的。 因此,使用 Microsoft SEAL 只能对程序部件实现特定的隐私性至关重要的云计算。

  • Microsoft SEAL 随附两种使用不同属性的同态加密方案。 BFV 方案允许对加密的整数执行模运算。 CKKS 方案允许对加密的实数或复数执行加法和乘法运算,但只能得出近似结果。 在累加加密的实数、基于加密的数据评估机器学习模型或计算已加密位置的距离时,CKKS 是最佳选择。 对于需要精确值的应用程序,只能选择 BFV 方案。

  • 同态加密效率不高。 由于同态加密会带来很大的性能开销,因此,如果针对未加密的数据执行计算的开销原本就很高,那么,针对已加密的数据执行这种计算有可能不可行。

  • 使用同态加密进行加密的数据比未加密的数据要大很多倍,因此举例来说,使用这种技术加密整个大型数据库可能没有意义。 相反,实施严格的隐私要求来禁止未加密的云计算,但计算本身相当轻量的方案是有意义的用例。

  • 通常,同态加密方案使用单个机密密钥,该密钥由数据所有者持有。 对于多个不同的专设数据所有者希望参与协作性计算的方案,同态加密是不合理的选择。

  • 将未加密计算转换为对已加密数据的计算不一定总很轻松或直接。 即使新用户可以使用 Microsoft SEAL 来编写计算程序和运行计算,高效和低效实现之间也可能存在很大差异。 很难知道如何提高性能。

  • 虽然同态加密基元本身是安全的,但它不能保证使用它的应用和协议是安全的。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

首席作者:

后续步骤

若要详细了解同态加密和 Microsoft SEAL 库,请参阅 Microsoft Research 提供的 Microsoft SEAL,以及 GitHub 上的 SEAL 代码项目

参阅有关 Azure 中的安全性的以下资源: