`
ericbaner
  • 浏览: 177536 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RSA算法基本原理

 
阅读更多


图为 RSA公开密钥算法的发明人,从左到右Ron Rivest, Adi Shamir, Leonard Adleman. 照片摄于1978年

   RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。
   RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。
  RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 
  RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:


  可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到:

一、 什么是“素数”?
  素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。

二、什么是“互质数”(或“互素数”)?
  小学数学教材对互质数是这样定义的:“公约数只有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的约数,这两个数为互质数。等等。

三、什么是模指数运算? 
  指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。 
  模指数运算就是先做指数运算,取其结果再做模运算。如
  好,现在开始正式讲解RSA加密算法。
算法描述:
(1)选择一对不同的、足够大的素数p,q。
(2)计算n=pq。
(3)计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
(4)找一个与f(n)互质的数e,且1<e<f(n)。
(5)计算d,使得de≡1 mod f(n)。这个公式也可以表达为d ≡e-1 mod f(n)
这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值,让这个同余等式能够成立。
(6)公钥KU=(e,n),私钥KR=(d,n)。
(7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:
(8)解密过程为:。 

实例描述:
  在这篇科普小文章里,不可能对RSA算法的正确性作严格的数学证明,但我们可以通过一个简单的例子来理解RSA的工作原理。为了便于计算。在以下实例中只选取小数值的素数p,q,以及e,假设用户A需要将明文“key”通过RSA加密后传递给用户B,过程如下:
(1)设计公私密钥(e,n)和(d,n)。
令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3与20互质)则e×d≡1 mod f(n),即3×d≡1 mod 20。
d怎样取值呢?可以用试算的办法来寻找。试算结果见下表:

  通过试算我们找到,当d=7时,e×d≡1 mod f(n)同余等式成立。因此,可令d=7。从而我们可以设计出一对公私密钥,加密密钥(公钥)为:KU =(e,n)=(3,33),解密密钥(私钥)为:KR =(d,n)=(7,33)。
(2)英文数字化。
  将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,即:

  则得到分组后的key的明文信息为:11,05,25。
(3)明文加密 
  用户加密密钥(3,33) 将数字化明文分组信息加密成密文。由C≡Me(mod n)得:

  因此,得到相应的密文信息为:11,31,16。
4)密文解密。
  用户B收到密文,若将其解密,只需要计算,即:

  用户B得到明文信息为:11,05,25。根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。 
   你看,它的原理就可以这么简单地解释!
   当然,实际运用要比这复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全,因此,p、q、e的选取、公钥私钥的生成,加密解密模指数运算都有一定的计算程序,需要仰仗计算机高速完成。

最后简单谈谈RSA的安全性

   首先,我们来探讨为什么RSA密码难于破解? 
   在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方者得到。破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。从上文中的公式:d ≡e-1 (mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 我们可以看出。密码破解的实质问题是:从Pq的数值,去求出(p-1)和(q-1)。换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。
   当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。比如当pq大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
  然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。
  此外,RSA的缺点还有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法

分享到:
评论

相关推荐

    RSA算法的基本加密原理

    ### RSA算法的基本加密原理 #### 一、引言 RSA算法是现代密码学中的一个基石,它是由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家于1978年共同提出的。RSA算法是一种非对称加密算法,即加密和解密使用的...

    RSA算法原理.doc

    RSA 算法原理 RSA 算法是非对称加密算法的代表,广泛应用于计算机网络安全领域。该算法的原理基于数论,主要包括互质关系、欧拉函数、模指数运算和中国剩余定理等概念。 一、互质关系 互质关系是指两个正整数除了...

    中国剩余定理在RSA算法中应用的研究详细实验

    ##### 4.1 四素数RSA算法基本原理 四素数RSA算法通过选择四个素数\( p, q, r, s \)构建模数\( N = pqrs \)。该算法利用CRT将模\( N \)上的运算转化为四个较小模上的独立运算,进一步提高了运算效率。 ##### 4.2 四...

    RSA算法演示.rar

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard ...通过研究源码,不仅可以掌握RSA的基本原理,还能提升对加密算法的理解和编程能力,对于从事或希望进入信息安全领域的人员来说,具有很高的价值。

    VC++实现RSA算法

    在VC++中实现RSA算法需要理解其核心原理,包括大整数运算、素数检测、欧拉函数以及模逆运算等。下面我们将详细探讨这些知识点。 1. **大整数运算**:RSA算法涉及到大整数的加减乘除和幂运算。VC++标准库并没有提供...

    RSA算法C++实现源码

    1. **RSA算法基本原理** RSA基于数论中的两个关键性质:大整数分解困难性和欧拉函数的性质。它包含两个密钥:公钥和私钥。公钥用于加密,私钥用于解密。加密过程使用接收者的公钥,解密过程使用发送者的私钥。 -...

    RSA算法数学原理整理.pdf

    "RSA算法数学原理" RSA算法是目前最广泛使用的非对称加密算法,保证了加密数据不会被破解。下面将对RSA算法的数学原理进行详细的解释。 一、公钥加密算法的历史 在1976年以前,所有的加密方法都是同一种模式:...

    RSA实现算法报告关于RSA算法的实现代码

    #### 实验涉及的相关概念与基本原理 **RSA算法**是一种非对称加密算法,由Ron Rivest, Adi Shamir 和 Leonard Adleman在1977年提出。它具有以下特点: - **应用广泛**:既能用于数据加密也能用于数字签名。 - **...

    RSA 加密算法的C++原代码实现

    #### 二、RSA算法基本原理 RSA算法的安全性主要基于大数分解的难度。其核心思想是利用一对密钥(公钥和私钥)来进行加密与解密。公钥用于加密,私钥用于解密。具体步骤如下: 1. **选择两个大质数**:选择两个大...

    RSA算法源码 C++

    ### RSA算法基本原理 #### 数学基础 RSA算法的安全性建立在一个数学难题上——大整数分解问题。即给定两个大素数\( p \)和\( q \),计算\( n = pq \)很容易,但是给定\( n \),将其分解回\( p \)和\( q \)则非常...

    RSA算法的C实现

    以上是对"RSA算法的C实现"及其相关标签的详细解释,包括RSA的基本原理、C语言实现的细节、MFC界面的应用,以及与文件名称相关的数字签名概念。在实际项目中,理解和掌握这些知识点对于开发安全的通信系统至关重要。

    189.CN_RSA算法解析

    一、RSA算法基本原理 RSA算法基于数论中的两个关键事实:大整数分解困难性和欧拉函数的性质。具体来说,它选取两个大素数p和q,计算它们的乘积n=p*q,然后计算欧拉函数φ(n)=(p-1)*(q-1)。接着选择一个与φ(n)互质...

    RSA算法的基本原理

    以下是RSA算法的基本步骤: 1. **选择两个大素数** p和q。这两个素数越大,加密的安全性越高。在示例中,选择了p=47和q=59,得到n=p*q=2773。 2. **计算欧拉函数的值** t=(p-1)*(q-1),在例子中t=2668。 3. **...

    RSA算法的C++实现软件

    `RSA.chm`文件可能是一个帮助文档,详细解释了RSA算法的原理和软件的使用方法,包括如何生成密钥对、如何加密解密以及如何进行数字签名等操作。`RSA.exe`则可能是编译后的可执行文件,用户可以直接运行进行加解密和...

    RSA算法试验报告

    #### 二、公开密钥加密的基本原理 公开密钥加密机制依赖于两个不同的密钥:公钥和私钥。公钥用于加密消息,而私钥则用于解密。这种机制使得发送方可以使用接收方的公钥加密消息,只有持有对应私钥的接收方才能解密...

    易语言RSA算法演示

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它在信息安全领域有着广泛...同时,理解RSA算法的基本原理,也有助于你更好地理解其他加密算法和信息安全的原理。

    RSA.rar_RSA PPT_RSA 算法 介绍_RSA 算法 原理_加密_加密 rsa

    首先,我们需要理解RSA算法的基本概念。它基于两个大素数的乘积,这两个素数只有接收者知道。这个乘积作为公钥的一部分,而这两个原始的大素数作为私钥。任何人都可以使用公钥对数据进行加密,但只有持有私钥的人...

    RSA算法程序设计代码及报告

    首先,我们来理解RSA算法的基本概念。RSA基于数论中的大数因子分解难题,其安全性依赖于两个大素数p和q的乘积n难以分解。生成一对密钥:公钥(e,n)和私钥(d,n),其中e和d是满足条件ed ≡ 1 mod φ(n)的两个整数...

    基于RSA的加密算法的实验报告

    ### 基于RSA的加密算法的实验报告 ...综上所述,通过本实验报告的学习和实践,我们可以深入了解RSA算法的工作原理及其在实际应用中的实现细节。这对于理解现代密码学的基本概念和技术具有重要意义。

Global site tag (gtag.js) - Google Analytics