现代密码学复习总结(四)公钥密码

公钥密码基本概念

多对一加密模式

双钥密码体制(公钥密码体制)的基本原理是陷门单向函数。

陷门单向函数:设f是一个函数,t是一个与f有关的参数,对任意给定的输入x,计算y=f(x)是容易的。如果当不知道参数t时,计算f的逆函数是困难的,即计算x使得y=f(x)是困难的;但当知道参数t时,计算f的逆函数是容易的,则称f是一个陷门单向函数,参数t称为陷门。

用途:密钥交换、数据加解密、签名认证。

公钥密码RSA

RSA的密钥生成

选择两个大的素数p和q。

选择两个正整数e和d,满足:ed是(p-1)(q-1)的倍数加1,即e·d=1(mod (p-1)(q-1))

计算n=p·q。

Bob的公钥是(n,e),对外公布。私钥是d ,自己私藏。

(p,q),可以是Bob的另一部分私钥,也可以是对所有人(包括Bob )都保密的。

基本RSA的加密过程

Alice欲发送明文m给Bob,其中0<m<n 。Alice用Bob的公钥(n,e),计算密文c=me(mod n)。

基本RSA的解密过程

Bob 收到密文c后,用自己的公钥(n,e)和私钥d,计算

cd(mod n)=med(mod n)=m。

基本RSA的安全性

攻击者Eve已经知道了Bob的公钥是(n,e)。

如果Eve还知道(p,q),则他容易知道Bob的私钥d。此时Eve只需要用推广的辗转相除法寻找d,满足e·d=1(mod (p-1)(q-1))。

由n的值求解(p,q)的值,即求解n的大整数分解n=pq,是一个公认的数学难题(虽然至今并没有证明),暂时还没有有效的算法。

基本RSA的一个安全性漏洞

设攻击者Eve获得了两组明文/密文对(m1,c1),(m2,c2)。

如果新截获了一个密文c,并发现:

•c=c1·c2 (mod n),则c所对应的明文一定是m=m1·m2 (mod n);

•c=c1/c2 (mod n),则c所对应的明文一定是m=m1/m2 (mod n);

•c=c2/c1 (mod n),则c所对应的明文一定是m=m2/m1 (mod n)。

基本RSA的这个安全性漏洞称为可传递性

为了解决这个问题,后面引入了Hash函数。

公钥密码Rabin

Rabin的密钥生成

选择两个大的素数p和q,要求p和q都是4的倍数加3。

计算n=p·q。

Bob的公钥是n,对外公布。私钥是(p,q),自己私藏。

Rabin的加密过程

Alice欲发送明文m给Bob,其中0<m<n

Alice用Bob的公钥n,计算:c=m2(mod n)

c为密文。

Rabin的解密过程

PS:这部分我看PPT上写的有些玄乎,便自己查找总结了。建议对着PPT再过一过,防止我总结的有问题。

Bob收到密文c后,需要求出明文m。

此时有m2 = c mod n ,可以拆为m2 = c mod p 和m2 = c mod q 。

根据等式构造出:

1、r2 = m2 = c mod p ,即r = m = c1/2 mod p

2、s2 = m2 = c mod q ,即s = m = c1/2 mod q

联立上述两个等式,得到:m = r mod p,m = s mod q。

这两个式子用中国剩余定理可以解出唯一解。

计算r = ± c(p+1)/4 mod p,s = ± c(p+1)/4 mod q。

依次代入r、s的四个解,即可得到m。

最后,要判断哪一个根是真正的明文。一般,真正的明文都具有语言含义,而其它的根则是没有语言含义的“乱码课文”。

Rabin的安全性原理

即使截获密文c,已知n,也知道明文满足的方程,但仍然无法求出。

因为不知道n=p·q,无法计算四个根。

换句话说,求n的分解n=p·q是大数分解问题,和RSA类似。

公钥密码ElGamal

ElGamal的密钥生成

选择一个大的素数p。

选择g,1<g<p。

选择x,1<x<p-1。

计算y=gxmod p。

Bob的公钥是(p, g, y),对外公布。

Bob的私钥是x,自己私藏。

ElGamal的加密过程

PS:这块和解密两部分同样是PPT玄乎,所以我从信安密码实验的ElGamal部分总结了。

Alice随机选取一个整数k,1<k<p-2。

计算C1 = gk (mod p),C2 = m·(gx)k (mod p)

将密文(C1,C2)发送给Bob。

ElGamal的解密过程

Bob计算V = C1x (mod p),则m = C2·V-1 (mod p)。

ElGamal的加密性原理

特点:密文由明文和所选随机数k来定,因而是非确定性加密,一般称之为随机化加密,对同一明文由于不同时刻的随机数k不同而给出不同的密文。代价是使数据扩展一倍。

安全性: 基于离散对数的困难性。

椭圆曲线上加法的计算

椭圆曲线的一般方程为:

E: = {(x, y)|y2 + a1·x·y + a3y = x3 + a2·x2 + a4·x + a6}

设P1 = (x1, y1)为曲线上的点,则-P1 = (x1, -y1-a1·x1-a3)。

设P1 = (x1, y1),P2 = (x2, y2)为曲线上的点,计算P3 = P1 + P2,公式如下:

x3 = λ2 + a1·λ -a2 -x1 -x2

y3 = λ·(x1 - x3) - a1·x3 - y1 - a3

其中λ计算如下:

当x1≠x2时,λ = (y2-y1) / (x2-x1);

当x1=x2时,λ = (3·x2+2·a2·x+a4-a1·y1) / (2·y1+a1·x+a3)

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值