超详细解读RSA加密---数学定理、证明及应用

信息系统安全绕不开的话题就是加密、认证、完整、权限和不可否认性,这也是安全空间的五大特性。而对于安全,CIA是最基本的要求。随着时间的推移,我们的传输安全技术也在不停向前发展,从早期的古典加密,到机械加密,再到现在的电子加密,逐步发展。

我们今天网络上比较流行的加密、授权都是通过pki/ca认证,通过pmi授权,而pki的核心就是加密技术就是RSA-一种非对称加密。

1977年,三位密码学家发明这种加密算法,RSA就是他们名字的首字母,没有什么含义。

RSA加密算法设计的数学定理比较多,虽然他是最简单的非对称加密,但是足够大部分人研究一下的了。

1、欧拉函数:

任意一个正整数n,小于或等于n的正整数中与n互质的数的数目。

他有很多特性,我们只是简单说几个吧,不懂得自己百度吧。

如果p是质数,phi(p)= p-1

如果m,n互质,phi(mn)= phi(m)*phi(n)

通用公式:n = p1^r1*p2^r2*p3^r3...........pk^rk,其中pi为质数

phi(n) = n*(1-p1^-1)(1-p2^-1)................(1-pk^-1)

phi(8) = 8*(1-1/2) = 4

phi(10) = 10*(1-1/2)*(1-1/5) = 4

phi(1324) = phi(2^2*331) = 1324*(1-1/2)*(1-1/331) = 660

2、余数定理性质

(a*b)%n = (a%n)*(b%n)= ((a%n)*b)%n

(a^m)%n = (a%n)^m%n = (a%n)^m

3、欧拉定理

如果n是一个正整数,a是任意一个非0整数,且n和a互质,那么:

a^phi(n) = 1 (mod n)

因此,费马小定理是欧拉定理的特例

a^(n-1) = 1 (mod n)

4、RSA加密过程

a、先选择两个较大的质数p、q,令n = p*q

b、令k = phi(n)= (p-1)*(q-1)

c、选取任意整数e,条件是1<e<phi(n),且e与phi(n)互质,比存在模范元素d

d、求模反元素d,使得(d*e)%phi(n)= 1 (mod phi(n))

即、d*e = k*t + 1,其中t为某一整数,那么依据欧拉定理,没错,这里用的欧拉定理

e^phi(k) % k = (e * e^(phi(k)-1)) % k = 1 (mod k) = (e*d) % k

所以,一定存在模范元素d = e^(phi(k)-1)。但这个模反元素是通过2元一次不定方程求解的,也就是扩展欧几里得定理,来求解。

e、得到d后,我们非对称密钥系统形成,公钥(e, n);私钥 (d,n)

假设要加密的明文为C,并且C和n互质,这个条件至关重要,其实只要n足够大就可以了。

X为加密后密文,则:

加密过程:X = (C^e)  % n

解密过程:C = (X^d)% n

5、证明RSA的正确性

也就是 C = (((C^e) % n ) ^ d ) %n

         (((C^e) % n ) ^ d ) %n

       =((C^e)  ^ d ) %n

       =(C^(e*d) ) %n

       = (C^(kt+1))%n

       =(C*C^(kt))%n

       =C%n * (C^k%n)t

       =C%n * 1%n

       =C%n

       =C

故,RSA算法得到了证明。注意这里的C和n一定要互质,因为用到了欧拉定理。

6、扩展欧几里得定理

这名字是不是看上去特别高大上,其实也是一个挺不好理解的定理。我们先看一下什么时欧几里得定理,其实就是辗转相除求余数,最后一个余数等于0时,被除数就是最大公约数。

扩展欧几里得:

b<>0,gcd(a,b)= gcd(b,a%b)

而ax+by =c的解,变成求ax + by = gcd(a,b)的特解,前提是C时gcd(a,b)的倍数。

a mod b=a−(⌊a/b⌋×b)

这时ax1+by1 = bx2 +a%by2

                      = bx2+(a−(⌊a/b⌋×b))y2

,                  =ay2 + b(x2−⌊a/b⌋×y2)

故,x1 = y2

       y1 = x2−⌊a/b⌋×y2 

到此,我们得到了一组特解,也就可以求它的通解了。

7、举一个简单的例子:

取p、q分别为61、53,显然这是两个质数,n = p*q = 61*53 = 3233

令 k = phi(n)= (p-1)*(q-1)= 60*52 = 3120

取e = 17,这里只是一个例子,实际中不会这样取值的。

(e*d )%  phi(n)= (e*d)% k = 1 (mod k)

即,e*d = kt +1

得到,17d = 3120t +1

整理一下:17d - 3120t =1,即a = 17,b = -3120,求d,t的通解或特解。

 def exgcd(a, b):     
    if b == 0:         
        return a, 1, 0
    else:         
        x, y, q = exgcd(b, a % b)        
        x, y = y, (x - (a // b) * y)         
        return x, y, q

 

这样,我们就生成了(17,3223)为公钥,而(2753,3223)则为私钥。

到此我们关于RSA加密算法的讲解就全部结束了。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值