这是我做的一个基于UmiJS的任务待办桌面应用,欢迎大家给我star
这是我做的一个博客管理系统,该系统在路由拦截这一块的做的非常好,欢迎大家star
RSA算法是目前理论和实际应用中最为成熟的和完善的公钥密码体制。RSA用来解决对称密码的密钥分发问题。还可以用来进行数字签名来保证信息的否定与抵赖,利用数字签名较容易发现攻击者对信息的非法篡改以保证信息的完整性。
RSA的安全性依赖于大整数的因子分解的困难性,为了满足信息安全强度的需求,密钥的位数都比较多(521位甚至更高),导致幂模运算的运算量极大,成为提高RSA算法加解密速度的瓶颈。
2.安全性。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NPC问题。目前,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥。
3.速度慢。RSA的分组长度太大,为保证安全性,n至少也要512位以上,使运算代价很高,尤其是速度很慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
模运算
同余:两个整数a, b若他们除以正整数n所得的余数相等,则称a和b对于模n同余,记作
a ≡ b (mod n)
读作a同余于b模n,或a和b关于模n同余。
模逆元
参考倒数xy = 1的定义,对整数a和b,若
ab ≡ 1(mod n)
则称a和b关于模n互为模倒数,也叫模逆元,还可以记作
b ≡ 1 / a(mod n)
也就有
c/a mod n = (c*1/a) mod n = ((c mod n) * 1/a mod n) mod n =
((c mod n) * (b mod n)) mod n = (c * b) mod n
例如:20/3mod7=((20mod7)⋅(1/3mod7))mod7=(6×5)mod7=2
费马定理
如果p是素数,且a是不能被p整除的正整数,那么:
ap-1 = 1(mod p)
欧拉函数
小于n且与n互素的正整数的个数就是欧拉函数,记为φ(n)
欧拉函数具有以下性质:
1.如果n为素数,则小于所有n的正整数都与n互素,那么
φ(n) = n - 1
2.如果gcd(p,q)=1,那么
φ(p*q) = φ§*φ(q)
3.如果整数n因数分解为n=p1,p2,…,pn,p1,p2,…,pn为互不相同的素数,那么
Φ(n)=n(1 - 1/p1)(1 - 1/p2)…(1 - 1/pn)
欧拉定理
对于任何互质的正整数a和n,有
aΦ(n) = 1(mod n)
单向函数
定义:一个可逆函数f:A->B,若它满足:
1.对所有x∈A,易于计算f(x)
2.对”几乎所有x∈A”由f(x)求x极为困难,以至于实际上不可能做到
则称f为一单向函数。
取p=47, q=71,
则n = p * q = 3337, Φ(n)=(p-1)(q-1)=3220,
随机选择加密密钥e,e与Φ(n)互素,若取e=79,则d=79-1(mod n)=1019。
假设要加密的明文是m=6882326879666683,首先,根据n的大小将m进行分组,这里我们把明文m分成六个组,即:
m1=688,m2=232,m3=687,m4=966,m5=668,m6=003
接着分别对各个分组进行加密运算,第一个分组加密为
c1=68879(mod 3337) = 1570
类似的,对其余各个分组分别进行加密运算,得到如下密文:
c=1570 2756 2091 2276 2423 158
解密时用私钥1019分别对明文进行解密运算,即:
m1=15701019(mod 3337) = 688
对其余的密文用同样的计算方法就可以把密文恢复出来,即得到密文。
p和q的选择
1.p和q要足够大
2.p和q应为强素数。如p满足以下三个条件,即为强素数:
1.P-1有大素数因子r
2.P+1有大素数因子s
3.R-1有大素数因子t
3.p和q的差不能太小
4.p-1和q-1的最大公因数应很小
公钥e的选择
e不能太小;最好选择e为modΦ(n)的阶数,意思就是要使i的值尽量大才能使得ei≡ (mod Φ(n))成立。i等于(p-1)(q-1)/2是最好的。
一般建议取e=216+1=65537
私钥d的选择和模数n的选择
优点:
1.密钥分发简单。由于加密密钥和解密密钥不同,并且不能由加密密钥推出解密密钥,从而使得加密密钥表可以像电话号码本一样由主管部门发送给各个用户。
2.需要秘密保存的密钥量减少。
3.可以满足互不认识的人之间的私人通信的保密性要求。
4.可以完成数字签名和认证。
缺点
1.产生密钥很麻烦。受到素数产生技术的影响,很难做到一次一密。
2.安全性。
3.速度慢。
1.寻找质数p,q
假定p = 3,q = 11(p,q都为任意值)。
2.计算公共模数N
N = p x q = 3 x 11 = 33
3.计算欧拉函数φ(N)
φ(N) = (p-1) x (q-1) = 2 x 10 = 20
4.计算公钥e
1 < e < φ(N) ,1< e < 20
e必须与φ(N) 互质,所以e的范围(3,7,9,11,13,17 ,19 )
随便选择一个数e = 7
5.计算私钥d
e * d % φ(N) = 1
7 * d % 20 = 1
7 x 3 = 21
可以得出d = 3
6.加密
假设加密的数为6,明文为A,密文为B
B = A^e % N = 6 ^ 7 % 33 = 279936 % 33 = 30
7.解密
A = B^d % N = 30 ^ 3 % 33 = 27000 % 33 = 6
同态加密
明文A1,A2加密得到的密文为B1,B2
B1 * B2 = A1^e * A2^e = (A1*A2)^e,于是其满足乘法同态特性。
对RSA算法的攻击可能有如下5种方式:
1.穷举攻击:这种方法试图穷举所有可能的私钥;
2.数学攻击:有多种数学攻击方法,它们的实质都是试图分解两个素数的乘积。大合数的因子分解算法有:试除分解法,连分数分解法,p-1分解法,p+1分解法,二次筛选分解法,椭圆曲线分解法,代数域筛选分解法等;
3.计时攻击:这类方法依赖于解密算法的运行时间;
4.基于硬件故障的攻击:这种方法应用产生签名过程中处理器发生的故障;
5.选择密文攻击:利用RSA的算法性质;
6.共模攻击:由于目前生成大素数的速度还是比较慢的,造成有的人为了加快算法速度而选择同样的大素数,也就是相同的模数,只是选择不同的密钥。这样做虽然加快了速度,但也给RSA算法带来了安全隐患。
用数学方法攻击RSA的途径有以下三种:
1.分解n为两个素因子。这样就可以计算出φ(n)=(p-1)(q-1),从而可以确定d
2.直接确定φ(N)而不先确定p和q。这样同样也可以确定d
3.直接确定d,而不先确定φ(N)