密码学-公钥加密EIGamal

1.EIGamal加密

1.1.基于素数群的 EIGamal加密

系统参数:素数群 G \mathbb{G} G 的阶为p,生成元为g
密钥生成:选择随机数 α ∈ Z p , \alpha\in\mathbb{Z}_{p}, αZp, ,计算 g 1 = g a g_{1}=g^{a} g1=ga ,则私钥和公钥为 ( α , g 1 ) (\alpha,g_{1}) (α,g1)
加密:将消息编码为群元素   m ∈ G \ m\in\mathbb{G}  mG ,公钥 g 1 g_{1} g1,选择随机数 r ∈ Z p , \in\mathbb{Z}_{p}, Zp, ,计算密文
C 1 = g r , C 2 = g 1 r ⋅ m C_{1}=g^{r},C_{2}=g_{1}^{r}\cdot m C1=gr,C2=g1rm
解密:对于密文 ( C 1 , C 2 ) (C_{1}, C_{2}) (C1,C2),使用私钥 α {\alpha} α ,计算 m = C 2 ⋅ C 1 − α m=C_{2}\cdot C_{1}^{-\alpha} m=C2C1α
公式推导过程: C 2 ⋅ C 1 − α = ( g 1 r ⋅ m ) ( g r ) − α = m C_{2}\cdot C_{1}^{-\alpha}=(g_{1}^{r}\cdot m)(g^{r})^{-\alpha}=m C2C1α=(g1rm)(gr)α=m
安全性分析:基于DDH 困难问题,归约损失为 2, 1bits
离散对数是困难的,但是计算逆元是简单的
h n = e h ⋅ h n − 1 = e h ⋅ h − 1 = e h − 1 = h n − 1 \begin{array}{l}{h^{n}=e}\\ {h \cdot h^{n-1}=e}\\ {h\cdot h^{-1}=e}\\ {h^{-1}=h^{n-1}}\end{array} hn=ehhn1=ehh1=eh1=hn1
方案扩展:
应用需求:将消息编码到群上 m ∈ G m\in\mathbb{G} mG 很难,需要加密任意长的数据 m ∈ { 0 , 1 } ∗ m\in \lbrace0,1 \rbrace^{*} m{0,1} (代表0~1比特的任意字符串)。
**加密:**对于任意长消息 m ∈ { 0 , 1 } ∗ m\in \lbrace0,1 \rbrace^{*} m{0,1} ,公钥 g 1 g_{1} g1,选择随机数 r ∈ Z p , r\in\mathbb{Z}_{p}, rZp, 和随机群元素 x ∈ G . x\in\mathbb{G}. xG. ,计算密文
C 1 = g r , C 2 = g 1 r ⋅ x , C 3 = G C M − A E S − E n c ( h a s h ( x ) , m ) C_{1}=g^{r},C_{2}=g_{1}^{r}\cdot x,C_{3}=GCM_{-}AES_{-}Enc(hash(x),m) C1=gr,C2=g1rx,C3=GCMAESEnc(hash(x),m)
解密:对于密文 ( C 1 , C 2 ) (C_{1}, C_{2}) (C1,C2),使用私钥α,计算 x = C 2 ⋅ C 1 − α x=C_{2}\cdot C_{1}^{-\alpha} x=C2C1α ,然后计算
m = G C M − A E S − D e c ( h a s h ( x ) , C 3 ) m=G C M_{-}AES_{-}D e c(hash(x),C_{3}) m=GCMAESDec(hash(x),C3)
数字信封:公钥加密一个对称密钥x,使用对称密钥x进行 AES 对称加密。

1.2.基于素数群的 Hashed ElGamal 加密

系统参数:素数群 G \mathbb{G} G的阶为p,生成元为g ·
密钥生成:选择随机数 α ∈ Z p \alpha\in\mathbb{Z}_{p} αZp ,计算 g 1 = g α g_{1}=g^{\alpha} g1=gα ,则私钥和公钥为 ( a , g 1 ) (a,g_{1}) (a,g1)
加密:对于消息 m ∈ { 0 , 1 } 256 m\in \lbrace0,1 \rbrace^{256} m{0,1}256 ,公钥 g 1 g_{1} g1,选择随机数 r ∈ Z p r\in\mathbb{Z}_{p} rZp ,计算密文
C 1 = g r , C 2 = h a s h ( g 1 r ) ⊕ m C_{1}=g^{r},C_{2}=h a s h(g_{1}^{r})\oplus m C1=gr,C2=hash(g1r)m
解密:对于密文 ( C 1 , C 2 ) (C_{1}, C_{2}) (C1,C2),使用私钥α,计算 m = C 2 ⊕ h a s h ( C 1 α ) m=C_{2}\oplus h a s h(C_{1}^{\alpha}) m=C2hash(C1α)
公式推导过程:
C 2 ⋅ C 1 − α = ( h a s h ( g 1 r ) ⊕ m ) ⊕ h a s h ( ( g r ) α ) = m C_{2}\cdot C_{1}^{-\alpha}=\left(h a s h(g_{1}^{r})\oplus m\right)\oplus h a s h\left((g^{r})^{\alpha}\right)=m C2C1α=(hash(g1r)m)hash((gr)α)=m ( ⊕ 异或运算, a ⊕ b = c 则 b = c ⊕ a , 推导 \oplus异或运算,a\oplus b=c则b=c\oplus a,推导 异或运算,ab=cb=ca,推导)在这里插入图片描述

安全性分析:基于 CDH困难问题,归约损失为 q h a s h q_{\mathrm{hash}} qhash ,查询随机预言机的次数,通常是 2 40 2^{40} 240 。假设私钥长度为 1000bit,算法安全性为 960bit.

1.3.基于椭圆曲线群的ElGamal 加密

系统参数:椭圆曲线群 G \mathbb{G} G 的阶为p,生成元为 G G G
密钥生成:选择随机数 α ∈ Z p \alpha\in\mathbb{Z}_{p} αZp ,计算 G 1 = α ⋅ G G_{1}=\alpha\cdot G G1=αG ,则私钥和公钥分别为 ( α , G 1 ) (\alpha,G_{\mathrm{1}}) (α,G1)
加密:消息编码到椭圆曲线群 M ∈ G M\in\mathbb{G} MG ,公钥 G 1 G_{1} G1 ,选择随机数 r ∈ Z p r\in\mathbb{Z}_{p} rZp ,计算密文
C 1 = r ⋅ G , C 2 = M + r ⋅ G 1 C_{1}=r\cdot G,C_{2}=M+r\cdot G_{1} C1=rG,C2=M+rG1
解密:对于密文 ( C 1 , C 2 ) (C_{1}, C_{2}) (C1,C2),使用私钥 α {\alpha} α ,计算 M = C 2 − α ⋅ C 1 M=C_{2}-\alpha\cdot C_{1} M=C2αC1
公式过程: C 2 − α ⋅ C 1 = ( M + r ⋅ G 1 ) − α r ⋅ G = M C_{2}-\alpha\cdot C_{1}=(M+r\cdot G_{1})-\alpha r\cdot G=M C2αC1=(M+rG1)αrG=M
安全性分析:基于 DDH 困难问题,归约损失为 2。

1.4.基于椭圆曲线群的 Hashed ElGamal 加密

引入hash类似于2中的换成椭圆曲线即可
加密:对于消息 m ∈ { 0 , 1 } 256 m\in \lbrace0,1 \rbrace^{256} m{0,1}256 ,公钥 G 1 G_{1} G1,选择随机数 r ∈ Z p r\in\mathbb{Z}_{p} rZp ,计算密文
C 1 = r ⋅ G , C 2 = m ⊕ h a s h ( r ⋅ G 1 ) C_{1}={r\cdot G},C_{2}=m\oplus h a s h({r}\cdot{G}_{1}) C1=rG,C2=mhash(rG1)
解密:对于密文 ( C 1 , C 2 ) (C_{1},C_{2}) (C1,C2) ,使用私钥α,计算 m = C 2 ⊕ h a s h ( α ⋅ C 1 ) m=C_{2}\oplus hash(\alpha\cdot C_{1}) m=C2hash(αC1)
公式过程 C 2 ⊕ h a s h ( α ⋅ C 1 ) = ( m ⊕ h a s h ( r ⋅ G 1 ) ) ⊕ h a s h ( α r ⋅ G ) = m C_{2}\oplus hash(\alpha\cdot C_{1})=(m\oplus h a s h({r}\cdot{G}_{1})) \oplus hash(\alpha r\cdot G) = m C2hash(αC1)=(mhash(rG1))hash(αrG)=m
安全性分析:基于 CDH 困难问题,归约损失为 q h a s h q_{hash} qhash ,查询随机预言机的次数,通常是 2 40 2^{40} 240 。私钥长度为256bit,算法安全性为216bit。对于椭圆曲线,通常70 bit的随机数就足够安全。

1.5.基于素数群的 Twin Hashed ElGamal 加密

系统参数:素数群 G \mathbb{G} G的阶为p,生成元为g 。
密钥生成:选择2个随机数 α , β ∈ Z p \alpha,\beta\in\mathbb{Z}_{p} α,βZp ,计算 g 1 = g α , g 2 = g β g_{1}=g^{\alpha},g_{2}=g^{\beta} g1=gα,g2=gβ ,则私钥为 α , β \alpha,\beta α,β 和公钥为 g 1 , g 2 g_{1},g_{2} g1,g2
加密:对于消息 m ∈ { 0 , 1 } 256 m\in\{0,1\}^{256} m{0,1}256 ,公钥 g 1 , g 2 g_{1},g_{2} g1,g2,选择随机数 r ∈ Z p r\in\mathbb{Z}_{p} rZp ,计算密文
C 1 = g r , C 2 = h a s h ( g 1 r , g 2 r ) ⊕ m C_{1}=g^{r},C_{2}=h a s h(g_{1}^{r},g_{2}^{r})\oplus m C1=gr,C2=hash(g1r,g2r)m
解密:对于密文 ( C 1 , C 2 ) (C_{1},C_{2}) (C1,C2),使用私钥 α , β \alpha,\beta α,β ,计算 m = C 2 ⊕ h a s h ( C 1 α , C 2 β ) m=C_{2}\oplus h a s h(C_{1}^{\alpha},C_{2}^{\beta}) m=C2hash(C1α,C2β)
公式推导过程: C 2 ⊕ h a s h ( ( C 1 α , C 2 β ) = ( h a s h ( ( g 1 r , g 2 r ) ⊕ m ) ⊕ h a s h ( g r α , g r β ) = m C_{2}\oplus hash((C_{1}^{\alpha},C_{2}^{\beta})=(hash((g_{1}^{r},g_{2}^{r})\oplus m) \oplus hash(g^{r\alpha},g^{r\beta })=m C2hash((C1α,C2β)=(hash((g1r,g2r)m)hash(grα,grβ)=m
安全性分析:添加了一个随机因子(私钥),基于CDH 困难问题,无归约损失

2.Cramer-shoup(EIGamal的安全升级)

2.1基于数群的Cramer-shoup加密

系统参数:素数群 G \mathbb{G} G的阶为p,生成元为 g 1 , g 2 g_{1},g_{2} g1,g2
密钥生成:选择5个随机数 x 1 , x 2 , y 1 , y 2 , z ∈ Z p x_{1},x_{2},y_{1},y_{2},z\in\mathbb{Z}_{p} x1,x2,y1,y2,zZp ,计算3个群元素
c = g 1 x 1 g 2 x 2 , d = g 1 y 1 g 2 y 2 , h = g 1 z c=g_{1}^{x_{1}}g_{2}^{x_{2}},d=g_{1}^{y_{1}}g_{2}^{y_{2}},h=g_{1}^{z} c=g1x1g2x2,d=g1y1g2y2,h=g1z ,则私钥为 ( x 1 , x 2 , y 1 , y 2 , z ) (x_{1},x_{2},y_{1},y_{2},z) (x1,x2,y1,y2,z)和公钥为 ( c , d , h ) (c,d,h) (c,d,h)
加密:对于消息 m ∈ G m\in\mathbb{G} mG ,公钥 ( c , d , h ) (c,d,h) (c,d,h) ,选择随机数 r ∈ Z p r\in\mathbb{Z}_{p} rZp ,计算密文 ( u 1 , u 2 , e , v ) (u_{1},u_{2},e,v) (u1,u2,e,v)
u 1 = g 1 r , u 2 = g 2 r , e = h r ⋅ m , α = h a s h ( u 1 , u 2 , e ) , v = c r d r α \begin{array}{l}{{u_{1}=g_{1}^{r},u_{2}=g_{2}^{r},e=h^{r}\cdot m,}}\\ {{\alpha=h a s h(u_{1},u_{2},e),}}\\ {{v=c^{r}d^{r\alpha}}}\end{array} u1=g1r,u2=g2r,e=hrm,α=hash(u1,u2,e),v=crdrα
解密:对于密文 ( u 1 , u 2 , e , v ) (u_{1},u_{2},e,v) (u1,u2,e,v) ,使用私钥 ( x 1 , x 2 , y 1 , y 2 , z ) (x_{1},x_{2},y_{1},y_{2},z) (x1,x2,y1,y2,z),计算 α = h a s h ( u 1 , u 2 , e ) \alpha=h a s h(u_{1},u_{2},e) α=hash(u1,u2,e)
校验 v = u 1 x 1 + y 1 α u 2 x 2 + y 2 α v=u_{1}^{x_{1}+y_{1}\alpha}u_{2}^{x_{2}+y_{2}\alpha} v=u1x1+y1αu2x2+y2α ,然后解密 m = e ⋅ u 1 − z m=e\cdot u_{1}^{-z} m=eu1z ·
公式推导过程:在这里插入图片描述

2.2基于椭圆曲线群 Cramer-Shoup 加密

系统参数:素数群 G \mathbb{G} G的阶为p,生成元为 G 1 , G 2 G_{1},G_{2} G1,G2
密钥生成:选择5个随机数 x 1 , x 2 , y 1 , y 2 , z ∈ Z p x_{1},x_{2},y_{1},y_{2},z\in\mathbb{Z}_{p} x1,x2,y1,y2,zZp ,计算3个群元素
C = x 1 ⋅ G + x 2 ⋅ G , D = y 1 ⋅ G + y 2 ⋅ G , , H = z ⋅ G C=x_{1}\cdot G+x_{2}·G,D=y_{1}·G+y_{2}·G,,H=z·G C=x1G+x2G,D=y1G+y2G,,H=zG,则私钥为 ( x 1 , x 2 , y 1 , y 2 , z ) (x_{1},x_{2},y_{1},y_{2},z) (x1,x2,y1,y2,z) 和公钥为 ( C , D , H ) (C,D,H) (C,D,H)
加密:对于消息 M ∈ G M\in\mathbb{G} MG ,公钥 ( C , D , H ) (C,D,H) (C,D,H) ,选择随机数 r ∈ Z p r\in\mathbb{Z}_{p} rZp ,计算密文 ( U 1 , U 2 , e , V ) (U_{1},U_{2},e,V) (U1,U2,e,V)
U 1 = r ⋅ G 1 , U 2 = r ⋅ G 2 , E = r ⋅ H + M , α = h a s h ( U 1 , U 2 , E ) , V = r ⋅ C + r α ⋅ D \begin{array}{l c r}{{U_{1}=r\cdot G_{1},U_{2}=r\cdot G_{2},E=r\cdot H+M,}}\\ {{\alpha=h a s h(U_{1},U_{2},E),}}\\ {{V=r\cdot C+r\alpha\cdot D}}\end{array} U1=rG1,U2=rG2,E=rH+M,α=hash(U1,U2,E),V=rC+rαD
解密:对于密文 ( U 1 , U 2 , e , V ) (U_{1},U_{2},e,V) (U1,U2,e,V) ,使用私钥 ( x 1 , x 2 , y 1 , y 2 , z ) (x_{1},x_{2},y_{1},y_{2},z) (x1,x2,y1,y2,z),计算 α = h a s h ( U 1 , U 2 , E ) \alpha=h a s h(U_{1},U_{2},E) α=hash(U1,U2,E)
校验 V = ( x 1 + y 1 α ) ⋅ U 1 + ( x 2 + y 2 α ) ⋅ U 2 V=(x_{1}+y_{1}\alpha)\cdot U_{1}+(x_{2}+y_{2}\alpha)\cdot U_{2} V=(x1+y1α)U1+(x2+y2α)U2 ,然后解密 M = E − z   U 1 M=E-z\ U_{1} M=Ez U1
公式推导过程:
( x 1 + y 1 α ) ⋅ U 1 + ( x 2 + y 1 α ) U 2 = ( x 1 + y 1 α ) r ⋅ G 1 + ( x 2 + y 2 α ) r ⋅ G 2 = x 1 r ⋅ G 1 + y 1 α r ⋅ G 1 + x 2 r ⋅ G 1 + y 2 α r ⋅ G 2 = r ( x 1 G 1 + x 2 ⋅ G 2 ) + r α ( y 1 ⋅ G 1 + y 2 ⋅ G 2 ) = r C + r α D = V E − z ⋅ U 1 = ( r ⋅ H + M ) − z r ⋅ G 1 = M \begin{array}{c}{{(x_{1}+y_{1}\alpha)\cdot U_{1}+(x_{2}+y_{1}\alpha)U_{2}=(x_{1}+y_{1}\alpha)r\cdot G_{1}+(x_{2}+y_{2}\alpha)r\cdot G_{2}}}\\ {{=x_{1}r\cdot G_{1}+y_{1}\alpha r\cdot G_{1}+x_{2}r\cdot G_{1}+y_{2}\alpha r\cdot G_{2}}}\\ {{=r(x_{1}G_{1}+x_{2}\cdot G_{2})+r\alpha(y_{1}\cdot G_{1}+y_{2}\cdot G_{2})}}\\ {{=rC+r\alpha D=V}}\\ {{E-z\cdot U_{1}=(r\cdot H+M)-zr\cdot G_{1}=M}}\end{array} (x1+y1α)U1+(x2+y1α)U2=(x1+y1α)rG1+(x2+y2α)rG2=x1rG1+y1αrG1+x2rG1+y2αrG2=r(x1G1+x2G2)+rα(y1G1+y2G2)=rC+rαD=VEzU1=(rH+M)zrG1=M
优点:校验使得安全性从 CPA 安全提升到 CCA 安全。
缺点:私钥、公钥、密文长度增加,计算复杂度增加。

补充:
当密码系统只有承受住选择明文攻击(CPA)和选择密文攻击(CCA),才能算是安全的。
其中,四种攻击方式对应的攻击强度为:
攻击难度:选择密文攻击(CCA)>选择明文攻击(CPA)>已知明文攻击(KPA)>唯密文攻击(COA)
难易程度:选择密文攻击(CCA)<选择明文攻击(CPA)<已知明文攻击(KPA)<唯密文攻击(COA)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值