paillier加密算法是一种公钥加密算法,基于复合剩余类的困难问题。满足加法同态,即密文相乘等于明文相加:D(E(m1)·E(m2))=m1+m2。这里详细介绍其加密解密是如何推导的,需要具备数论、代数系统、模运算的相关知识,同时理解起来可能需要多阅读几遍并加以思考。

先将密钥生成和加解密过程罗列便于直观看

  截图来源于:https://blog.csdn.net/sinianluoye/article/details/82855059

加密过程

  在进行加解密之前,必须先产生可以用来加密的公钥n和g。n是两个大小相近的两个大素数的乘积:n=p·q。g是$ℤ_{n^{2}}$中的半随机数,同时g的阶必须在$ℤ^{*}_{n^{2}}$中并且能被n整除。由于g必须符合一些特殊性质(我们将在解密部分提出)所以$ℤ^{*}_{n^{2}}$中会有很少一部分元素不能用作g,意味着g是一个半随机数。为了简单计算,我们先选取两个小素数p=7,q=11计算得到n=p·q=77。从$ℤ^{*}_{n^{2}}$中选择g(g的阶必须是$ℤ^{*}_{n^{2}}$中元素并且是n的倍数。除此之外,g需要满足的另一个性质将会在解密时详细描述),在这里我们先选择5652作为g。因为g模n2的阶是2310且是77的倍数,并且在$ℤ^{*}_{n^{2}}$中。那么g所需要的包括未清楚定义的所有性质将会被满足。至此,我们找到了用来实际加解密运算过程的公钥(n,g)。随着公钥发布,任何人都能使用公钥加密数据并将密文传给私钥持有者。整个过程可用图一表示。

计算实例

公式

明文m=42

随机数r=23

c ≡ (5652)42·(23)77mod 5929

≡ (4019)(606) ≡ 4624 mod 5929

创建明文消息m,m∈ℤn

随机选择非零整数 r∈$ℤ^{*}_{n}$

计算密文c ≡ gm·rn mod n2

图1:n = 77, g = 5652时paillier系统加密

c是加密信息,私钥持有者解密时无需了解r的值。

解密过程

  在已知p,q和g的情况下,任何人都可以将收到的加密消息c解密。我们注意到在已知p,q的情况下,卡迈克尔公式λ(n) = lcm[(p – 1)(q – 1)]很容易计算。我们也注意到,如果g ∈ $ℤ_{n^{2}}$,就像我们之前选作公钥的g,卡迈克尔定理保证gλ(n) ≡ 1 mod n成立。卡迈克尔定理表明如果两个整数a和n互质,那么关系式 aλ(n)≡ 1 mod n。因为g是模n2的单元,显然与n2互质,意味着g与n也是互质的。在这个基础上,卡迈克尔定理成立。解密时,忽略密文c的值,对于所有使用公钥对(n, g)进行的解密,计算gλ(n)mod n2都是必要的。gλ(n) mod n2计算得到的值是$ℤ_{n^{2}}$中的一个元素,由卡迈克尔定理可知,该值 ≡ 1 mod n。如果我们从结果值中减1得到的值可以被n整除。计算过程如图2。

计算实例

公式

λ(77) = lcm(6, 10) = 30

L(565230mod 5929) = L(3928)

L(3928) = (3928 – 1)/77 = 3927/77 = 51

定义 L(u) = (u – 1)/n

计算L(gλ(n)mod n2)= k

图2:已知n2=5926,g=5652计算L(gλ(n) mod n2)

gλ(n) mod n2的结果可以看作一个大于等于0,严格小于n2的数,因此 gλ(n) mod n-1 除以n之后的结果k大于等于0,严格小于n,也就是说k∈Zn。因为n=p·q,只要k mod n的结果不是p或q的倍数,k会有逆,所以k∈$ℤ^{*}_{n}$。这个性质是之前在加密阶段提到的g需要符和未定义的性质。如果 gλ(n) mod n2的结果模n的值k是p或q的倍数,这个g必须被丢弃。在发布g之前先检查g是否符合要求,如果不符合就舍弃重新选择。现在我们假设随机选择的g符合条件即g∈$ℤ^{*}_{n^{2}}$,g的阶∈$ℤ^{*}_{n^{2}}$,k不是p或q的倍数(k存在模n的逆),接下来就可以计算µ ≡ k-1mod n,如图3所示。在解密过程中,公钥(n, g)相同的情况下,计算得到的µ值总是相同的,也是必不可少的。

计算实例

公式

µ ≡ 51-1≡74 mod 77

计算 µ ≡ k-1mod n

图3:µ,L(gλ(n) mod n2)在$ℤ^{*}_{n}$中的逆在

解密过程中非常重要。这里n=77,L(gλ(n) mod n2)

所有人在解密过程中必须计算m ≡ L(gλ(n) mod n2)·µ mod n,如图4所示。

计算实例

公式

m ≡ L(462430≡ 4852mod 5929)·74 mod 77

m ≡ 63·74 ≡ 4662 ≡ 42 mod 77

m ≡ L(cλ(n) mod n2)·µ mod n

图4:paillier加密系统解密过程。

这里n = 77, c ≡ 4624 mod n,µ ≡ 74 mod n

加解密中的数学原理

  为了理解解密过程,我们首先介绍一个公式

$ε_{g}:ℤ_{n} * ℤ^{*}_{n}\rightarrow ℤ^{*}_{n^{2}}$

$ε_{g}(x, y)\rightarrow g^{x}*y^{n} mod n^{2}$

定义εg(m, r) 是使用随机数对m进行加密的加密公式。回想一下在加密阶段选择g的时候,我们要求g模n2的阶必须是n的倍数。如果g符合这个条件,则εg是双射的。我们将引用下边的引理来证明这个结论。

  引理:两个阶相同的有限集A、B构成的函数f:A$\rightarrow$ B是满射的当且仅当这个函数是单射的。

  定理:如果g的阶是n的非零倍数,则对于 εg(x, y) ≡ gx·ymod n来说εg是双射的。

  证明:假设g的阶是n的非零倍数。我们知道|$ℤ^{*}_{n^{2}}$|=φ(n2) = n·φ(n)=| ℤn x $ℤ^{*}_{n}$|,意味着$ℤ^{*}_{n^{2}}$和 ℤn x $ℤ^{*}_{n}$拥有相同个数。基于上边的引理如果εg是单射的,它也是满射的。因此,我们证明了εg是单射的可以充分的证明它也是双射的。

  假设 gx1·y1n≡gx2·y2n·mod n2。我们可以得到 gx1-x2·(y1/y2)≡ 1·mod n2。等式两边同时取λ(n)次幂,得到 gλ(n)·(x1-x2)·(y1/y2)n·λ(n) ≡ 1·mod n2。卡迈克尔定理表明$ℤ^{*}_{n^{2}}$中的元素,取λ(n)次幂模n与1同余。该定理同时也表明$ℤ^{*}_{n^{2}}$中的元素,取n·λ(n)次幂模n2与1同余。y1和y2-1都是$ℤ^{*}_{n^{2}}$中的元素,所以他们的乘积y1/y2也是$ℤ^{*}_{n^{2}}$中的元素,由此我们可以得到 (y1/y2)n·λ(n) ≡ 1·mod n2,所以 gλ(n)·(x1-x2)·(y1/y2)n·λ(n) ≡ gλ(n)·(x1-x2≡ 1·mod n2

以上证明表示 λ(n)·(x1-x2) 是g的阶的倍数。最开始的时候我们已经假设g的阶是n的非零倍数,所以 λ(n)·(x1-x2) 也是n的倍数。由于 λ(n)·(x1-x2) 可以被n整除,并且GCD(λ(n), n)=1,我们可以得出n整除x1-x2或者说x1-x2模n与0同余。而且x1和x2是 ℤn中的元素,它们的模n同余可以保证他们是相等的。

让我们再回到方程式 gx1-x2·(y1/y2)≡ 1·mod n2,当x1=x2时,我们得到 (y1/y2)≡ 1·mod n2,继而y1n≡y2n。当y1与y2模n同余时,上式成立。

所以根据y1,y2 ∈ $ℤ^{*}_{n}$,我们得到了x1=x2

  这意味着,给出任何一个属于$ℤ^{*}_{n^{2}}$的元素w,当n选定之后,选择一个符合要求的g,加密结果εg(x, y)≡w mod n2是独一无二的。为了便于标注,我们指定εg(x, y) ≡ gx·yn≡ w mod n2,定义[w]g为ℤn中唯一与之对应的元素x, 即[w]g =x。

  因为εg可以映射到$ℤ^{*}_{n^{2}}$中所有元素,而且g本身也是$ℤ^{*}_{n^{2}}$中的一个元素,因此我们可以找到$ℤ^{*}_{n^{2}}$中另一个阶是n的非零倍数的元素t能够通过相同计算得到g。

n2中元素(1+n)的幂

基于(1+n)∈$ℤ^{*}_{n^{2}}$:        (1+n)2≡1+2n+n2≡1+2n mod n2

(1+n)3≡1+3n+n3≡1+3n mod n2

                                  (1+n)v≡1+v·n+[n的高次幂]≡1+v·n mod n2

   

图5:(1+n)v和1+v·n模n同余

如图5所示,(1+n)n≡1+n·n≡1 mod n2。很明显,n本身是n的一倍,也是(1+n)的阶,并且(1+n)n-1是它在$ℤ^{*}_{n^{2}}$中的逆(表明(1+n)∈$ℤ^{*}_{n^{2}}$)。(1+n)符合t要求的性质,所以我们可以计算[g](1+n)。也就是说g≡ε(1+n)(t,z)≡(1+n)t·zmod n2,t=[g](1+n)

当我们加密信息m时,密文 c≡εg(m, r) ≡ gm·rn mod n2,我们之前刚刚证明g可以表示为g≡ε(1+n)([g](1+n),z)≡(1+n)[g](1+n)·zmod n2。使用g的表达式来代替g,我们可以得到:

   c≡gm·rn≡[(1+n)[g](1+n)·zn]m·rn mod n2

≡(1+n)m[g](1+n)·zmn·rmod n2

≡(1+n)m[g](1+n)·(zm·r)n mod n2

由z∈$ℤ^{*}_{n}$, 可知zm∈$ℤ^{*}_{n}$,由r∈$ℤ^{*}_{n}$,可知zm·r∈$ℤ^{*}_{n}$,所以

c≡ε(1+n)(m·[g](1+n), zm·r) mod n2

c可以表示为[c](1+n)≡m·[g](1+n),即m≡[c](1+n)·{[g](1+n)}-1 mod n([c](1+n)是ℤn中元素,所以模n2与模n同余)。

由上述结果可知,无论c为何值,[g](1+n)的逆是一个定值。解密c需要计算[c](1+n),并将结果与定值[g](1+n)的逆相乘并模n。在解密时,我们计算了µ ≡ L(gλ(n)mod n2)-1 mod n,并声明这是一个和m,c或者r都无关的对于解密来说很必要的定值。结合上述证明我们有了µ的另一种形式 µ≡(L(gλ(n) mod n2)-1 ≡ {λ(n)·[g](1+n)}-1 mod n。现在让我们看看密文如何回到明文。

gλ(n) mod n2

gλ(n) ≡ [(1+n)[g](1+n)·zn]λ(n)·znλ(n) mod n2

因为z∈$ℤ^{*}_{n^{2}}$,由卡迈克尔定理可知znλ(n) ≡ 1 mod n2。可得:

gλ(n) ≡ (1+n)λ(n)[g](1+n) mod n2

          ≡1+λ(n)·[g](1+n)·n+[n的高次幂] mod n2

    ≡1+λ(n)·[g](1+n)·n mod n2

现在将gλ(n) mod n代入L(u)(L(u)=(u-1)/n):

L(gλ(n) mod n2)≡L(1+λ(n)·[g](1+n)·n)mod n

        ≡{1+λ(n)·[g](1+n)·n-1}/n mod n

      ≡{λ(n)·[g](1+n)·n}/n mod n

   ≡λ(n)·[g](1+n) mod n

所以 L(gλ(n)mod n2) ≡ λ(n)·[g](1+n) mod n,µ ≡ L(gλ(n) mod n2)-1 ≡ {λ(n)·[g](1+n)}-1 mod n,我们同样可以用卡迈克尔定理简化L(cλ(n)mod n2):

cλ(n) mod n2:

  cλ(n)≡[(1+n)[c](1+n)·dn]λ(n) mod n2

     ≡[(1+n)[c](1+n)·dnλ(n) mod n2

≡(1+n)[c](1+n) mod n2

         ≡1+λ(n)·[c](1+n)·n+[n的高次幂] mod n2

   ≡1+λ(n)·[c](1+n)·n mod n2

所以:

L(cλ(n) mod n2)≡L(1+λ(n)·[c](1+n)·n) mod n

        ≡{1+λ(n)·[c](1+n)·n-1}/n mod n

      ≡{λ(n)·[c](1+n)·n}/n mod n

   ≡λ(n)·[c](1+n) mod n

可得:µ ≡ L(gλ(n) mod n2)-1 ≡ {λ(n)·[g](1+n) mod n,L(cλ(n) mod n2) ≡ λ(n)·[c](1+n) mod n。即L(cλ(n) mod n2)·µ ≡ λ(n)·[c](1+n)·λ(n)-1·[g](1+n)-1 ≡ [c](1+n)·[g](1+n)-1 ≡ m mod n。

我们注意到,对于给定公钥(n,g),µ总是相等的,只需要计算一次。意味着解密过程包含一个指数幂模n2,和固定值L(µ)相乘的结果模n。使得解密变成一个计算复杂度是指数幂模n2相对简单的过程。

paillier加密系统的加法同态

  通过paillier加密系统加密的两个消息相乘的结果解密后得到的是两个消息相加的结果。

两个密文c1 ≡ gm1·r1n mod n2 , and c2 ≡ gm2·r2n mod n2

c1·c2≡ gm1·gm2·r1n ·r2n mod n2⇒ c1·c2 ≡gm1·gm2·r1n ·r2n ≡ gm1+m2·(r1·r2)nmod n2

r1和r2都是$ℤ^{*}_{n^{2}}$中元素,,因此r1·r2也属于$ℤ^{*}_{n^{2}}$,并且具有相同的性质,所以此处的值是r1还是r2亦或是ri并不重要,c1·c2可以看作是m=m1+m2加密的密文,c1·c2的解密结果为m。

总结

以上原理的讲解比较复杂与繁琐,这里总结一下上文中加解密推导的主要思路。

1.参数选择要求

2.加密实例

3.证明双射的条件

4.继而证明明文与密文是一一对应的

5.找到密文的原射,用以代入,可以推出一个解密得到的明文的表达式子

6.由于g也属于密文空间内,找到g的原射,把g用原射表示代入

7.把g的原射表达式代入µ,得到µ的另一种表达式

8.用正常的解密方式把之前的各种代换代入,得到和之前第5步找到的解密明文表达方式相等,证明解密方式是正确的。

如有我理解的不正确的地方,欢迎加以指正。

paillier加密算法原理详解的更多相关文章

  1. AES 加密算法的原理详解

    AES 加密算法的原理详解 本教程摘选自 https://blog.csdn.net/qq_28205153/article/details/55798628 的原理部分. AES简介 高级加密标准( ...

  2. SSL/TLS 原理详解

    本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...

  3. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

  4. [转帖]HTTPS系列干货(一):HTTPS 原理详解

    HTTPS系列干货(一):HTTPS 原理详解 https://tech.upyun.com/article/192/HTTPS%E7%B3%BB%E5%88%97%E5%B9%B2%E8%B4%A7 ...

  5. 【转】HTTPS系列干货(一):HTTPS 原理详解

    HTTPS系列干货(一):HTTPS 原理详解 前言 HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并 ...

  6. I2C 基础原理详解

    今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...

  7. Zigbee组网原理详解

    Zigbee组网原理详解 来源:互联网 作者:佚名2015年08月13日 15:57   [导读] 组建一个完整的zigbee网状网络包括两个步骤:网络初始化.节点加入网络.其中节点加入网络又包括两个 ...

  8. 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

  9. 锁之“轻量级锁”原理详解(Lightweight Locking)

    大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意. 原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖 ...

随机推荐

  1. php 连接oracle插入多张图片的方法

    php连接oracle数据库的时候,其查询.更新.删除数据和MySQL类似,但是增加数据.特别是图片的时候就很不一样,这里面涉及到要创建一个blob对象,用blod对象去保存php图片,下面是当插入多 ...

  2. PAT甲级——1012 The Best Rank

    PATA1012 The Best Rank To evaluate the performance of our first year CS majored students, we conside ...

  3. 代码审计中的XSS

    0x00 背景 XSS漏洞也叫跨站脚本攻击,是Web漏洞中最常见的漏洞,原理与SQL注入相似,通过来自外部的输入直接在浏览器端触发.XSS漏洞通常被入侵者用来窃取Cookie等,本文以代码审计的形式研 ...

  4. SpringBoot 将自制的Starter 发布到远程公服

    上一篇文章:就是简单的介绍了如何自己制作一个starter ,由于上篇文章只是我个人的笔记,就是将其中重要的部分写出来了,少了其他的基础步骤,但是这个我自己就能看懂,也算不上是一篇好的博客,只能算是笔 ...

  5. iOS多种刷新样式、音乐播放器、仿抖音视频、旅游App等源码

    iOS精选源码 企业级开源项目,模仿艺龙旅行App 3D立体相册,可以旋转的立方体 横竖屏切换工具,使用陀螺仪检测手机设备方向,锁屏状... Swift版Refresh(可以自定义多种样式)架构方面有 ...

  6. cs231n spring 2017 lecture11 Detection and Segmentation

    1. Semantic Segmentation 把每个像素分类到某个语义. 为了减少运算量,会先降采样再升采样.降采样一般用池化层,升采样有各种“Unpooling”.“Transpose Conv ...

  7. [LC] 295. Find Median from Data Stream

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  8. java 面向对象 购物车

    一个商城包括多个商品.多个用户.拥有销售商品.展示商品和查找商品功能.2)    一个用户拥有一个购物车,购物车具有结算功能.3)    商城具有名称,静态字符串类型4)    用户类是抽象类,两个子 ...

  9. python二叉树及叶节点获取 (面试题)

    才疏学浅,智商不够,花了一晚上看了二叉树.记录一下: 1.二叉树的遍历 前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍历:左子树->右 ...

  10. Elegy written in a country church-yard

    分享一首好诗:托马斯·格雷的<墓地哀歌>. "ELEGY WRITTEN IN A COUNTRY CHURCH-YARD" The curfew tolls the ...