密码学学习笔记二:RSA加密法

浅析RSA加密法

    本文介绍RSA加密算法的基本原理,首先我们先来了解一些基本的数学知识,然后了解一些密码学基本知识,最后再来了解RSA加密算法。

1、基本数学知识

1.1、什么是“素数”?

  在百度百科中,素数是这样定义的:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

例如:15=1*15=3*5,因此15的因数有1、3、5、15,所以15不是素数;
13=1*13,因此13的因数有1和13,按照定义13是素数。

1.2、什么是“互质数”?

  照例,百度百科中对互质数的解释:互质数为数学中的一种概念,即两个或多个整数的公因数只有1的非零自然数。公因数只有1的两个非零自然数,叫做互质数。

   举个例子:
  (1)两个质数一定是互质数。例如,2与7、13与19。
  (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。
  (3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
  (4)相邻的两个自然数是互质数。如 15与 16。
  (5)相邻的两个奇数是互质数。如 49与 51。
  (6)大数是质数的两个数是互质数。如97与88。
  (7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。
  (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。

1.3、什么是“欧拉函数”?

  百度百科中对欧拉函数的解释:在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。
  欧拉函数的通式为:

在这里插入图片描述
  p1、p2…pn是x的质因数,质因数:在数论里是指能整除给定正整数的质数。
  举个例子:假设x=16,那么16的质因数为2,所以φ(16)=16*(1-1/2)=8;那么比16小,与16互质的正整数有:1、3、5、7、9、11、13、15;个数正好为8个。

1.4、什么是“模指数运算”?

  模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。m被n整除,只取所得的余数作为结果,就叫做模运算。例如:10 mod 3 = 1;6 mod 2 = 0。
  模指数运算就是先做指数运算,取其结果再做模运算。例如:

在这里插入图片描述

2、密码学基本知识

2.1、什么是“明文和密文”?

  明文是加密之前的原始数据,密文是通过密码运算后得到的结果成为密文。

  密钥是一种参数,它是在使用密码算法过程中输入的参数。同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文。

  很多知名的密码算法都是公开的,密钥才是决定密文是否安全的重要参数,通常密钥越长,破解的难度越大,比如一个8位的密钥最多有256种情况,使用穷举法,能非常轻易的破解,知名的DES算法使用56位的密钥,目前已经不是一种安全的加密算法了,主要还是因为56位的密钥太短,在数小时内就可以被破解。

  密钥分为对称密钥与非对称密钥。

2.2、什么是“对称加密”?

  对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有DES、3DES、AES、RC5、RC6。

  对称密钥的优点是计算速度快,缺点是密钥需要在通讯的两端共享,让彼此知道密钥是什么对方才能正确解密,如果所有客户端都共享同一个密钥,那么这个密钥就像万能钥匙一样,可以凭借一个密钥破解所有人的密文了,如果每个客户端与服务端单独维护一个密钥,那么服务端需要管理的密钥将是成千上万。

2.3、什么是“非对称加密”?

  非对称加密又称公钥加密,服务端会生成一对密钥,一个私钥保存在服务端,仅自己知道,另一个是公钥,公钥可以自由发布供任何人使用。客户端的明文通过公钥加密后的密文需要用私钥解密。

  非对称密钥在加密和解密的过程的使用的密钥是不同的密钥,加密和解密是不对称的,所以称之为非对称加密。与对称密钥加密相比,非对称加密无需在客户端和服务端之间共享密钥,只要私钥不发给任何用户,即使公钥在网上被截获,也无法被解密,仅有被窃取的公钥是没有任何用处的。常见的非对称加密有RSA加密算法。

3、RSA加密算法

  在讲算法理论之前,我们先举一个简单的例子,主人公名字叫爱丽丝、鲍勃和伊芙。RSA算法是非对称加密,因此会有两把钥匙。

  爱丽丝要设计出一把公开的钥匙,之所以公开,是为了让每个人都能复制这把钥匙,用来给自己发信息加密用。但是这把钥匙,又一定不能解开加密过的信息。这就是公钥。所以这一步,需要一种不可逆的函数运算,只能加密不能解密,这个就可以用我们前面提到的模运算来实现。

  同时,爱丽丝本人还得有一把钥匙,它是不公开的。而这把钥匙,可以解开她的公开钥匙加密过的信息。这就是私钥。

  爱丽丝给出的公钥,是通过两个比较大的素数p和q相乘得到的一个更大的数N得到的。p和q一定要保密,只能爱丽丝自己知道,不能告诉别人,而乘积N是公开的,谁都可以知道,也就是产生的公钥。

  凡是给爱丽丝发消息的人,都需要用N来加密。加密的过程依然用模运算,模是N。数学过程保证这个模运算不可逆,因此伊芙就算知道这个N也没有用。

  爱丽丝的解密过程:爱丽丝解密不需要N,而是用p和q的值(p和q别人都不知道,只有爱丽丝自己知道)。爱丽丝私下做的另外一个模运算中的模,这个值为(p-1)*(q-1)。

  下面,总结RSA算法的过程:
  算法关键步骤
  先给出一张表:
在这里插入图片描述
过程描述:
(1)选择一对不同的、足够大的素数p,q,p、q保密不能让任何人知道。
(2)计算N = pq;
(3)计算f(N) = (p-1)(q-1);
(4)找一个与f(n)互质的数e,且1<e<f(N);
(5)计算d,
在这里插入图片描述
(6)那么,公钥(e,N),私钥(d,N)
  举个例子:
(1)随机选择两个不相等的质数p=3,q=11,
(2)在在1 ~ (p-1)(q-1) 随机选择一个整数e,并且要与(p-1)(q-1)互质(最大公约数为1)
   (p-1)(q-1)=2*10= 20,与20互质,随便选一个3;
   N = 3*11=33; e = 3;
  公钥(e,N)=(3,33);
(3)
  ≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。e×d≡1 mod f(n)

穷举法求解d:
在这里插入图片描述
求解d = 7;  私钥(d,N)=(7,33);

(4)加密:假设要加密的密文m = 5;
在这里插入图片描述
C = 26;
(5)同理,用私钥解密只有,得到信息m = 5;此处难点在于理解同余的计算方法。(关于同余的计算,会单独写一篇文章仔细讲解。)

  RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。

猜你喜欢

转载自blog.csdn.net/koudan567/article/details/90029313