精华内容
下载资源
问答
  • 同态加密

    万次阅读 2019-05-15 09:19:42
    对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。 1.同态加密的相关概念 同态加密是一种无须对加密数据进行提前解密就可以执行...

    同态加密是基于数学难题的计算复杂性理论的密码学技术。对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。

    1.同态加密的相关概念

    同态加密是一种无须对加密数据进行提前解密就可以执行计算的方法。使用同态加密技术在区块链上加密数据,不会对区块链属性造成任何重大的改变。也就是说,区块链仍旧是公有区块链,然而区块链上的数据将会被加密,因此照顾到了公有区块链的隐私问题,实现与私有区块链一样的隐私效果。

    同态加密的思想起源于私密同态,代数同态和算术同态是私密同态的子集。R和S是域,称加密函数E:R→S为:

    ·加法同态,如果存在有效算法,E(x+y)=E(x)⊕E(y)或者x+y=D(E(x)⊕E(y))成立,并且不泄漏x和y;

    ·乘法同态,如果存在有效算法,E(x×y)=E(x)E(y)或者xy=D(E(x)E(y))成立,并且不泄漏x和y;

    ·混合乘法同态,如果存在有效算法,E(x×y)=E(x)y或者xy=D(E(x)y)成立,并且不泄漏x;

    ·减法同态,如果存在有效算法,E(x-y)=E(x)○-E(y)或者x-y=D(E(x)○-E(y))成立,并且不泄漏x和y;

    ·除法同态,如果存在有效算法,E(x/y)=E(x)○/E(y)或者x/y=D(E(x)○/E(y))成立,并且不泄漏x和y;

    ·代数同态,如果E既是加法同态又是乘法同态;

    ·算术同态,如果E同时为加法同态、减法同态、乘法同态和除法同态。

    2.同态加密的优势

    同态加密技术不仅提供了隐私保护,它同样允许随时访问公有区块链上的加密数据进行审计用于或其他目的。换句话说,使用同态加密在公有区块链上存储数据将能够同时提供公有区块链和私有区块链最好的部分。比如,使用同态加密的以太坊智能合约能够提供相似的特点和更强的掌控,同时完整地保留以太坊的优点。

    在Shield128区块链安全平台上,KobiGurkan提到了一个同态加密在区块链上的应用案例——使用同态加密,以太坊智能合约能够用于管理员工开支。在这个案例中,如果员工不想让其同行知道他们的开支,那么他们可以加密其开支详细信息,然后发送到智能合约上。经过加密的开支信息会被算入总开支。最后,当公司财务部门想要分析开支时,可以在本地对最终的智能合约进行解密,将总开支详细分解开。这样的效果与公有账本相同,但是只有最终机构能够看到开支详细信息,其他的用户则只能看到一些加密的条目。

    展开全文
  • 在这篇文章中,我们将了解同态加密的基本概念,介绍常用的同态加密开发库,学习同态加密应用开发的一般步骤,了解如何在Web应用中添加同态加密支持。1、同态加密概述同态加密改变了隐私保护的游戏规则,它允许直接...

    在这篇文章中,我们将了解同态加密的基本概念,介绍常用的同态加密开发库,学习同态加密应用开发的一般步骤,了解如何在Web应用中添加同态加密支持。

    1、同态加密概述

    同态加密改变了隐私保护的游戏规则,它允许直接操作加密数据而无需先进行解密。这一概念可以追溯到RSA加密 —— RSA也具备有限的同态加密功能。不过同态加密很长时间都局限在学术界,直到2009年Craig Gentry的论文发表后,才涌现了大量的同态加密库。

    现在已经有很多可用的同态加密库了。下面列出了一些比较流行的同态加密开发包以及它们支持的方案类型,当然这个清单是不完整的:Microsoft SEAL: BFV, CKKS (C++)

    HElib: BGV (with GHS), CKKS (C++)

    PALISADE: BFV, BGV, CKKS, FHEW (C++)

    TFHE: Ring-variant of GSW (C++)

    HEAAN: CKKS (with bootstrapping) (C++)

    为你的web'应用找到合适的同态加密开发包以及方案类型需要进行大量的研究工作:这些不同的同态加密实现代码有什么区别?

    安装这些同态加密开发包需要什么依赖?

    我如何在自己的web应用中使用同态加密库?

    一个加密方案对性能有什么影响?

    这个加密方案对数据有什么特殊的要求?

    什么是自举?为什么我需要这个环节?

    在你开始设计一个隐私保护的应用之前,有些问题就需要先找出答案。

    在这个教程里,让我们从微软的SEAL开始介绍,因为SEAL的文档非常好。

    2、使用Microsfot SEAL同态加密库

    让我们先看看如何加密数据。首先你可以将一个数组(或者c++里的vector)编码为特定格式的平文本,然后再将平文本加密成密文。同态处理是在密文上进行的。为了读取处理结果,你需要解密然后再解码。

    上述过程的伪代码如下:

    const arr = [1,2,3...]

    const plain = encode(arr)

    const cipher = encrypt(plain)

    // Add the cipher to itself - element wise

    evaluate.add(cipher, cipher)

    const decrypted = decrypt(cipher)

    const decoded = decode(decrypted)

    // `decoded` contains [2,4,6, ...]

    上面的代码我进行了简化,实际上这之前还有一些必要的步骤。

    下面是SEAL同态加密库的一些基本信息。

    第三方依赖

    SEAL没有必须的第三方依赖。可选的依赖包括:zlib和Microsoft GSL

    支持的方案BFV:操作有符号/无符号整数

    CKKS:操作浮点数

    基本的差别和限制BFV:密文的数据容量由加密参数决定,数组中每个元素的上下界也是参数决定的

    CKKS:数组中的每个成员的取值范围更大,但是密文容量相比BFV减半。而且CKKS 只能进行近似计算

    自举(Bootstrapping)允许在加密数据上进行无限的同态处理。没有自举的话,只能执行有限次数的

    同态处理(例如乘法等)。目前SEAL同态加密库还不支持自举,但是已经有计划为CKKS方案添加自举支持。自举会对性能有很大的影响,在很多情况下你在使用同态算法时都不需要自举。

    没有自举的同态算法被称为层级化算法。分层的数量(也就是可以执行多少次同态处理)是由你选择的加密参数来决定的。

    3、选择同态加密方案

    第一步是为你的应用选择一个合适的同态加密方案。你是需要整数还是可以容忍一定的误差?当你需要绝对精度时应该使用BFV方案。CKKS有它的优势,但是会在解密时引入一定的误差 —— 虽然通过调整参数可以让误差减小到可以接受的范围,但是对于新手来说这是有难度的。

    4、选择合适的同态加密参数

    一旦你选好了同态加密方案,下面就需要确定算法的参数了。这个问题应该是最难回答的,因为它取决于很多因素。此外还有更多的问题,例如:如何测试那些参数有效?

    是否还有优化的空间?

    是否需要为每一组参数都构建一个新的测试应用?

    下面是我们的同态加密实用方法学:选择同态加密方案:我认为BFV要比CKKS更容易商收。至少当解密结果不正确时 你可以立刻判断有问题

    从128位加密层级开始:虽然有更高的可选项,但是代价是缩减的同态加密操作- 能工作就好:从一个中等层级的PolyModulusDegree (4096)开始,然后逐渐增加 直到不能成功解密。再反向逐渐减小至不能成功解密。用这样的办法得到上下界。

    细调:修改CoeffModulus的位数,使用模数转换或CKKS的重缩放。

    5、使用Node-Seal为web应用增加同态加密支持

    作为替代的方案,我建议你通过快速实验来找出适合你的应用的参数。为此我开发了一个开源软件node-seal,以便在JavaScript中实用SEAL同态加密库。你可以利用这个软件快速编写一个JavaScript测试应用来进行参数实验。node-seal的内核采用webassembly,可以运行在Node.js或现代浏览器中,已经包含了zlib支持,不需要进行本地编译。

    展开全文
  • 在这篇文章中,我们将了解同态加密的基本概念,介绍常用的同态加密开发库,学习同态加密应用开发的一般步骤,了解如何在Web应用中添加同态加密支持。1、同态加密概述同态加密改变了隐私保护的游戏规则,它允许直接...

    在这篇文章中,我们将了解同态加密的基本概念,介绍常用的同态加密开发库,学习同态加密应用开发的一般步骤,了解如何在Web应用中添加同态加密支持。

    1、同态加密概述

    同态加密改变了隐私保护的游戏规则,它允许直接操作加密数据而无需先进行解密。这一概念可以追溯到RSA加密 —— RSA也具备有限的同态加密功能。不过同态加密很长时间都局限在学术界,直到2009年Craig Gentry的论文发表后,才涌现了大量的同态加密库。

    现在已经有很多可用的同态加密库了。下面列出了一些比较流行的同态加密开发包以及它们支持的方案类型,当然这个清单是不完整的:

    Microsoft SEAL: BFV, CKKS (C++)

    HElib: BGV (with GHS), CKKS (C++)

    PALISADE: BFV, BGV, CKKS, FHEW (C++)

    TFHE: Ring-variant of GSW (C++)

    HEAAN: CKKS (with bootstrapping) (C++)

    为你的web'应用找到合适的同态加密开发包以及方案类型需要进行大量的研究工作:

    这些不同的同态加密实现代码有什么区别?

    安装这些同态加密开发包需要什么依赖?

    我如何在自己的web应用中使用同态加密库?

    一个加密方案对性能有什么影响?

    这个加密方案对数据有什么特殊的要求?

    什么是自举?为什么我需要这个环节?

    在你开始设计一个隐私保护的应用之前,有些问题就需要先找出答案。

    在这个教程里,让我们从微软的SEAL开始介绍,因为SEAL的文档非常好。

    2、使用Microsfot SEAL同态加密库

    让我们先看看如何加密数据。首先你可以将一个数组(或者c++里的vector)编码为特定格式的平文本,然后再将平文本加密成密文。同态处理是在密文上进行的。为了读取处理结果,你需要解密然后再解码。

    上述过程的伪代码如下:

    const arr = [1,2,3...]

    const plain = encode(arr)

    const cipher = encrypt(plain)

    // Add the cipher to itself - element wise

    evaluate.add(cipher, cipher)

    const decrypted = decrypt(cipher)

    const decoded = decode(decrypted)

    // `decoded` contains [2,4,6, ...]

    上面的代码我进行了简化,实际上这之前还有一些必要的步骤。

    下面是SEAL同态加密库的一些基本信息。

    第三方依赖

    SEAL没有必须的第三方依赖。可选的依赖包括:zlib和Microsoft GSL

    支持的方案

    BFV:操作有符号/无符号整数

    CKKS:操作浮点数

    基本的差别和限制

    BFV:密文的数据容量由加密参数决定,数组中每个元素的上下界也是参数决定的

    CKKS:数组中的每个成员的取值范围更大,但是密文容量相比BFV减半。而且CKKS 只能进行近似计算

    自举(Bootstrapping)允许在加密数据上进行无限的同态处理。没有自举的话,只能执行有限次数的 同态处理(例如乘法等)。目前SEAL同态加密库还不支持自举,但是已经有计划为CKKS方案添加自举支持。自举会对性能有很大的影响,在很多情况下你在使用同态算法时都不需要自举。

    没有自举的同态算法被称为层级化算法。分层的数量(也就是可以执行多少次同态处理)是由你选择的加密参数来决定的。

    3、选择同态加密方案

    第一步是为你的应用选择一个合适的同态加密方案。你是需要整数还是可以容忍一定的误差?当你需要绝对精度时应该使用BFV方案。CKKS有它的优势,但是会在解密时引入一定的误差 —— 虽然通过调整参数可以让误差减小到可以接受的范围,但是对于新手来说这是有难度的。

    4、选择合适的同态加密参数

    一旦你选好了同态加密方案,下面就需要确定算法的参数了。这个问题应该是最难回答的,因为它取决于很多因素。此外还有更多的问题,例如:

    如何测试那些参数有效?

    是否还有优化的空间?

    是否需要为每一组参数都构建一个新的测试应用?

    下面是我们的同态加密实用方法学:

    选择同态加密方案:我认为BFV要比CKKS更容易商收。至少当解密结果不正确时 你可以立刻判断有问题

    从128位加密层级开始:虽然有更高的可选项,但是代价是缩减的同态加密操作- 能工作就好:从一个中等层级的PolyModulusDegree (4096)开始,然后逐渐增加 直到不能成功解密。再反向逐渐减小至不能成功解密。用这样的办法得到上下界。

    细调:修改CoeffModulus的位数,使用模数转换或CKKS的重缩放。

    5、使用Node-Seal为web应用增加同态加密支持

    作为替代的方案,我建议你通过快速实验来找出适合你的应用的参数。为此我开发了一个开源软件node-seal,以便在JavaScript中实用SEAL同态加密库。你可以利用这个软件快速编写一个JavaScript测试应用来进行参数实验。node-seal的内核采用webassembly,可以运行在Node.js或现代浏览器中,已经包含了zlib支持,不需要进行本地编译。

    展开全文
  • 本文对同态加密算法进行学习。参考文章同态加密算法。定义同态加密算法保证对联合密文的解密结果等价于联合明文。若存在同态加密算法f,针对明文A和B,加密后分别得到A'=f(A), B'=f(B), 将其和A'+B'解密后得到A+B,...

    本文对同态加密算法进行学习。参考文章同态加密算法。

    定义

    同态加密算法保证对联合密文的解密结果等价于联合明文。若存在同态加密算法f,针对明文A和B,加密后分别得到A'=f(A), B'=f(B), 将其和A'+B'解密后得到A+B,则同态加密算法f被成为加法同态加密算法。

    //加法同态算法的加密和解密分别用e和d

    A’ = e(A)

    B' = e(B)

    C' = A' + B'

    C = d(C') 且 C = A+B

    同态加密在联邦学习中被用到,将数据处理权和数据所有权分离,在保证数据内容安全的同时,借助于云服务的算力进行联合训练,进而生成联合AI模型。

    分类

    根据加密函数f的运算类型将同态加密算法划分为加法同态算法、乘法同态算法和全同态算法。加法同态算法能够进行加减法运算(Paillier 算法);

    乘法同态算法能够进行乘除法运算(RSA 算法);

    全同态算法能够同时满足加法同态和乘法同态,加密函数能完成各种加密后的运算,包括加减乘除、多项式、指数、对数、三角函数等(Gentry算法)。

    加密算法

    下面介绍几种同态加密算法的数学原理。Paillier 算法

    Paillier算法的公钥和私钥的生成过程如下:

    存在密文c1, c2,对应明文分别是m1,m2。令c=c1+c2,可知c=g^(m1+m2).r^(2n) mod n^2, 可知,对密文c解密后为m1+m2。因此,Pailier算法为加法同态算法。RSA算法

    RSA算法的公钥和私钥的生成过程如下:

    存在密文c1, c2,对应明文分别是m1,m2。令c=c1*c2,可知c=(m1*m2)^e mod N。可知,密文c解密后为m1*m2。因此,RSA算法为乘法同态算法。

    展开全文
  • 同态加密库,以及对几种不同的同态加密算法进行分析。
  • 摘要本文主要讲述完全同态加密算法。1. 是什么?同态加密是一种对称加密算法,由Craig Gentry发明提出。其同态加密方案包括4个算法,即密钥生成算法、加密算法、解密算法和额外的评估算法。全同态加密包括两种基本的...
  • 同态加密算法As our reliance on cloud infrastructure increases and our social interactions become increasingly dependent on the internet, we worry more about data breaches in activities like online ...
  • 基本概念同态加密(Homomorphic encryption) 是一种可以支持在密文上进行计算的加密方式, 对在密文上计算得到的结果进行解密后得到的内容与直接在明文上做计算的结果是相同的.应用安全外包计算(secure outsourced ...
  • 近期刚接触SEAL库,本文记录该库的使用方法,具体的同态加密的原理不过多介绍,若有错误,请各位大佬批评指正。SEAL(Simple Encrypted Arithmetic Library)是微软开源的同态加密库,基于C++11编写,代码在Github可以...
  • IBM 研究员 Craig Gentry 最近刚刚找到了一种 全同态加密算法。记加密操作为 E,明文为 m,加密得 e,即 e = E(m),m = E'(e)。已知针对明文有操作 f,针对 E 可构造 F,使得 F(e) = E(f(m)),这样 E 就是一个针对 f...
  • 随着全同态加密的迅速发展,一些全同态加密库应运而生。学术界和工业界非常关注各个全同态加密库的计算效率和性能,以便做出更好的应用选择。为了回答“全同态加密库具体性能如何?”这个问题,格密链科技自主研发全...
  • 最近陈智罡博士的团队开发了一个将SEAL全同态加密库映射到Python上的接口,解决了机器学习库与全同态加密库对接的问题,极大的方便了机器学习领域人员使用全同态加密算法,为其它领域需要用到全同态加密库的人们提供...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 708
精华内容 283
关键字:

同态加密