公钥密码与RSA

本文:公钥密码及分类,单向陷门函数,RSA

公钥密码

一般,将对称密码的密钥称为 秘密钥,记为KM
将公钥密码的两个密钥称为 公钥和私钥,记公钥为PUa,私钥为PRa

有关数字签名:

发送方首先用自己的私钥PRa加密消息,然后用对方的公钥PUb再加密。
接受方首先用自己的私钥PRb解密,然后用对方的公钥PUa再解密。
这样既能提供认证,也能保证消息的保密性,但是每次传输要执行4次公钥算法。

公钥密码分类:

RSA
可以 加密解密;可以 数字签名;可以 密钥交换

椭圆曲线
可以 加密解密;可以数字签名;可以密钥交换

diffie-hellman
不可以 加密解密;不可以 数字签名;可以 密钥交换

DSS
不可以 加密解密;可以数字签名;不可以密钥交换

单向陷门函数 特点:

1、正向 正常算。
2、反向 有K很简单,没有K特别难算。

攻击:

1、穷举密钥
2、反解私钥
3、穷举密文(非对称密码特有):
密文里装着密钥,提前穷举所有密钥对应的密文,类似字典攻击

公钥密码目前仅应用在密钥管理和签名。

.
.

RSA

原理:

需要 C = Me mod n ; M = Cd mod n 来加密解密
所以想找 Med mod n = M
只能找 Mk*φ(n)+1 mod n = M (欧拉定理)
即 ed mod φ(n) = 1
即 ed ≡ 1 mod φ(n)
即 d ≡ e-1 mod φ(n)
d = 1/e * ( k * φ(n) + 1 ) (k任取,只需满足d是整数)

接收方 密钥产生过程:

1、找两个大素数 p,q,且 p≠q
2、计算 n = p * q
3、计算 φ(n) = (p-1) * (q-1) (根据欧拉函数)
4、找一个整数e,满足gcd(e,φ(n)) = 1,1<e<φ(n)
5、计算 d = e-1 mod φ(n)
6、公钥PU = { e,n }
7、私钥PR = { d,n }

发送方 加密:

C = Pe mod n

接收方 解密:

P = Cd mod n , 唯一的d

数学原理:

若n很大,想求φ(n),目前只能分解n=pq,然后φ(n)=(q-1)(p-1).

RSA中,e和n公开,需要破译的只有d,d由e和φ(n)决定,并且e已知道,于是问题就变成了通过n解出φ(n),可惜这并不能做到(目前)。

计算方面的问题

1、模里面的幂运算: 迭代

例子:计算x15 mod n
x mod n = a,
x2 mod n = a 2 mod n = b,
x4 mod n = b 2 mod n = c,
x8 mod n = c 2 mod n = d,
x15 mod n = ( x * x2 * x4 * x8 ) mod n = ( a * b * c * d ) mod n

2、用公钥进行有效运算:

为了加快运算速度,一般e是特定的(反正e也会公开),e大多会选216+1=65537,如果e太小,攻击者可以从中国剩余定理CRT计算出结果。

3、用私钥进行有效运算:

d太小会遭到穷举攻击。

4、密钥产生:

寻找大素数,用的是Miller-rabin测试算法。

对RSA的攻击

1、因子分解的防范策略

1,q和p的长度应仅相差几位(?)
2,p-1和q-1都应有个较大的素因子
3,gcd( p-1,q-1 ) 尽量小

2、计时攻击的防御

固定幂运算时间(降低性能)
随机延时
隐蔽(幂运算前乘个随机数)

.
.
.
.
.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值