`

RSA公钥密码算法原理

阅读更多

转自:http://blog.csdn.net/A00553344/archive/2009/01/07/3730194.aspx

  RSA公钥密码算法的原理

http://www.cnblogs.com/KevinYang/archive/2009/02/01/1381806.html

一、公钥密码学概述。

  公开密钥密码算法的提出是整个密码学历史上最大的而且也许是最唯一真正的变革。从最初一直到现代,几乎所有密码系统都建立在基本的替代和置换工具的基础 上。在用了数千年的本质上可以手算完成的算法之后,常规的密码学随着转轮加密/解密机的发展才出现了一个重大进步。机电式变码旋转软件使得极其复杂的密码 系统被研制出来。有了计算机后,更加复杂的系统被设计出来。但是不管是转轮机还是后来的DES(数据加密标准),虽然代表了重要的进展,却仍然依赖于替代 和置换这样的基本工具。

  公钥密码学则与以前的所有方法都截然不同。一方面公开密钥算法基于数学函数而不是替代和置换,更重要的是,公开密钥密码学是非对称的,它用到两个不同的密钥,而对称的常规加密则只使用一个密钥。使用两个密钥对于保密通信,密钥分配和鉴别等领域都有着深远的影响。 

对于公钥密码加密有几个误解。

误解一、公开密钥加密在防范密码分析上比常规加密更加安全。

[解释] 事实上,任何加密方案的安全性都依赖于密钥的长度和破译密码所包含的计算工作量。从抗击密码分析的角度讲,无论常规还是公开密钥加密原则上都没有比对方优越的地方。

误解二、公开密钥加密是一个使得常规加密已经过时的通用技术。

[解释] 事实上,由于当前公开密钥加密在计算上的巨大开销,在可以预见的未来常规加密并不会被抛弃。目前大家几乎普遍接受的观点是公开密钥密码算法只限于密钥管理和数字签名等应用。

误解三、与使用常规加密时涉及密钥分配中心的相当繁琐的握手过程相比,使用公开密钥加密后密钥分配就变的非常简单。

[解释] 事实上,使用公开密钥加密仍然需要某种形式的协议,一般这会涉及到一个中心代理,而且整个过程比常规加密中的过程既不简单也不更有效。

        

 

二、什么是公钥密码算法

  目前存在两种密钥体制:对称密钥体制和非对称密钥体制。对称密钥体制就是加密和解密用同一个密钥。这很好理解,相当于你用你家的钥匙既可以锁上你家的门, 也可以打开你家的门。非对称密钥体制就是加密和解密不是同一个密钥。也就是说一个密钥所加密的数据用另一个密钥解密。举个生活中的例子,类似于在机场、火 车站、超市以及很多其他公共场所看到的非对称的存物箱。为了安全存储你的财物,你把它们放入存物箱并且投入钱币锁上它。就如同你的住宅钥匙锁上大门一样, 钱币锁上了存物箱---在某种意义上,你的钱币就是密钥。锁上门后,你得到另外一把钥匙---也许是一把真正的钥匙;也许只是一张写有号码的纸条。要开启 存物箱,你就要使用该钥匙或在键盘上输入号码。而这个时候,你投入多少钱币也是打不开存物箱的。

  类似地,我们可以产生一个密码算法,其中一个密钥用来加密数据,另一个用来解密。这个模型的另一说法就是公钥密码学。要加密和解密数据,两个密钥都需要使 用,所以其中一个可以公开而不会危害安全性。这个密钥就是公钥。另一个则称之为私钥。我们用公钥加密数据,用私钥解密数据。就好象例子中的任何人都知道用 钱币(公钥)锁上存物箱,但仍然打不开存物箱。只有拥有钥匙或写有号码的纸条(私钥)的人才能打开存物箱。

  1976年后,提出了多种公开密钥算法,其中许多是不安全的。而那些被视为安全的算法,有许多却不实用,要么密钥太大,要么密文远大于明文。只有少数几个 算法既安全又实用。其中有三种算法可以很好的用于加密和数字签名:RSA、ElGamal和Rabin。不过它们都很慢。它们加密和解密速度比对称算法要 慢的多,通常是太慢以致无法用于许多快速数据加密。基于这点考虑,很多时候使用混合密码系统。使用带随机会话密钥的对称算法来加密消息,使用公开密钥算法 来加密随机会话密钥。

 

三、RSA公钥密码算法原理

  RSA算法是第一个比较完善的公开密钥算法。它既能用于加密也能用于数字签名。在已提出的公开密钥算法中,RSA是最容易理解和实现的。RSA以它的三个 发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字命名。该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否认RSA的安全性,但这恰恰说明了该算法有一定的可 信度。

  RSA的安全基于大数分解的难度。其公开密钥和私人密钥是一对大素数(100到200个十进制数或更大)的函数。从一个公开密钥和密文中恢复出明文的难度等价于分解两个大素数之积。

  要了解RSA算法需要从了解一些数论的基本原理开始。

 

1.剩余系

[定义1] 设m>0, Cr = {a | a=r+qm, q∈Z}(r=0,1,...,m-1), 则C0 ,C1 ,...,Cm-1 称为模数m的剩余系。在C0 ,C1 ,...,Cm-1 中各取一数aj∈Cj ,j=0,1,...,m-1,此m个数a0 ,a1 ,...,am-1 称为模数m的一组完全剩余系。特别地,完全剩余系0,1,...,m-1称为模数m的非负最小完全剩余系。如果Cj 里面的数与m互素,称Cj 为与模数m互素的剩余类。在与m互素的全部剩余类中,各取一数所组成的集合就称为模数m的一组既约剩余系。

 

2.欧拉函数和欧拉定理

[定义2] 欧拉函数Φ(n)是一个定义在正整数集合上的函数,Φ(n)的值等于序列0,1,...,n-1中与n互素的数的个数。

由定义得Φ(1)=1,Φ(2)=1,Φ(3)=2,...。当p是素数时,Φ(p)=p-1。

 

性质:

  • 模数m的一组既约剩余系含Φ(m)个数。
  • Φ(m)个数作成模数m的一组既约剩余系的充分必要条件是两两对模数m不同余且都与m互素。
  • gcd(m1 ,m2 )=1时,Φ(m1 ,m2 )=Φ(m1 )Φ(m2 )。
  • p为素数,k为正整数时,Φ(pk )=pk -pk-1 =pk-1 (p-1)。

(欧拉定理) 若gcd(a,m)=1, 则aΦ(m)≡1(mod m)。

当m=p为素数时,即得到费马小定理。

 

(费马小定理) 若p为素数,则ap≡a(mod p)。

 

 

3.RSA算法

 

RSA公钥密码体制描述如下:

<1>. 选取两个大素数p,q。

<2>. 计算n=pq, Φ(n)=(p-1)(q-1)。

<3>. 随机选取正整数e, 1<e<Φ(n), 满足gcd(e,Φ(n)) = 1。

<4>. 计算d,满足de≡1(mod Φ(n))。p,q,Φ(n), d是保密的,丢弃p,q,Φ(n);只保留d,则n,d 为私钥;n,e是公开,为公钥。

<5>.  加密变换:对明文m, 1<m<n, 加密后的密文为 c = me (mod n)。

<6>.  解密变换:对密文c, 1<c<n, 解密后的明文为 m = cd (mod n)。

 

证明:

由于de≡1(mod Φ(n)),所以存在正整数t,使得de = 1 + tΦ(n))。 对于任意明文m, 1<m<n。

  • 当gcd(m,n)=1时,根据欧拉定理有cd≡(me )d≡(mΦ(n) )t m≡1t m≡m(mod n);
  • 当gcd(m,n)≠1时,因为n=pq且p,q是两个素数,所以gcd(m,n)=p或q。不妨设gcd(m,n)=p,则m=bp, 1≤b<q。另一方面,由欧拉定理得mq-1≡1(mod q),从而mtΦ(n) =(mq-1 )t(p-1)≡1(mod q),于是存在一个整数s, 使得mtΦ(n) =1 + sq, 此式两端用m=bp同乘,就得到mtΦ(n)+1 =m+bsn, 从而cd≡mtΦ(n)+1≡m(mod n)。

证毕。

 

举例:如果p=47,q=71,那么n=pq=3337,Φ(n)=(p-1)(q-1)=3220 。加密密钥e满足gcd(e, Φ(n))=1,则随机选取e,如79,那么  d=e-1 (mod Φ(n))=79-1 (mod 3220)=1019。这时获得:

公钥:e,n 即79,3337

 

 

其他blog连接:

数学之美,密码学数学原理 http://www.cnblogs.com/KevinYang/archive/2009/02/01/1381806.html

分享到:
评论

相关推荐

    rsa_c_source_RSA公钥密码算法_rsa公钥_rsa_源码

    **RSA公钥密码算法** RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,由三位美国科学家Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它是现代密码学的基石,广泛应用于数据加密、数字签名等领域。...

    RSA 公钥加密算法实现

    RSA公钥加密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年共同提出,因此得名RSA。这种算法基于数论中的大数因子分解难题,使得只有拥有正确密钥的人才能解密信息,从而保证了数据...

    用JAVA语言实现RSA公钥密码算法.pdf

    ### 使用JAVA语言实现RSA公钥密码算法 #### 1. 引言 随着信息技术的快速发展,全球已经进入了信息经济时代。在这个时代里,通过互联网进行数据传输变得极为普遍,数据量的增长速度呈现指数级趋势。因此,信息的...

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

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

    RSA公钥加密算法的设计与实现.docx

    RSA公钥加密算法的设计与实现 RSA公钥加密算法是目前最有影响力的非对称加密算法,为ISO推荐的加密标准。非对称加密因其安全性、开放性以与在数字签名技术中的重要性,在我们的生活中被使用得越加频繁。RSA的安全性...

    公钥密码算法RSA的编写与优化

    **公钥密码算法RSA** RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,是公钥密码学的基石。它在网络安全、数据加密和数字签名等领域有着广泛的应用。RSA的安全性基于大整数因子分解的困难性,即找到两个大素数...

    rsa公钥加密算法java实现

    RSA公钥加密算法是现代密码学中的一个重要组成部分,由Ron Rivest、Adi Shamir和 Leonard Adleman 在1977年共同提出,因此得名RSA。它是一种非对称加密技术,广泛应用于数据传输的安全保护,如HTTPS、数字签名、SSL/...

    java RSA公钥加密算法完整源代码

    RSA(Rivest-Shamir-...总结,Java版RSA公钥加密算法的源代码实现了从密钥生成到加密解密的完整流程,是理解非对称加密原理和实践Java安全编程的重要参考资料。使用过程中,要注意密钥管理、数据量限制以及性能优化。

    RSA公钥计算器,用于学习

    这个压缩包中的“RSA公钥计算器”显然是一款用于理解和实践RSA算法的工具,特别适合学习者使用。 首先,我们要理解RSA的核心概念。RSA是由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出的,所以得名RSA。它...

    c++实现的公钥密码算法RSA

    **C++实现的RSA公钥密码算法** RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是现代密码学的基石之一。它的主要特点是拥有两个密钥:一个公钥和一...

    RSA公钥密码 MFC界面

    RSA公钥密码是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种加密技术在信息安全领域广泛应用,包括网络通信的安全传输、数字签名和证书等场景。 MFC(Microsoft ...

    散列函数,对称加密算法,公钥密码算法的加密算法原理

    散列函数、对称加密算法和公钥密码算法的加密算法原理 散列函数、对称加密算法和公钥密码算法是密码学的基础概念,它们在信息安全和加密领域中扮演着至关重要的角色。本文将介绍散列函数、对称加密算法和公钥密码...

    公钥密码系统及RSA公钥算法[参考].pdf

    本文主要关注的是公钥密码系统中的RSA算法,这是一种广泛应用的非对称加密算法。 RSA算法由Rivest、Shamir和Adleman三位学者在1977年提出,它的理论基础来源于数论,特别是大整数因子分解的困难性。在RSA系统中,每...

    RSA公钥算法的C实现

    RSA公钥密码算法是计算机安全领域中的一种重要加密技术,由Ron Rivest、Adi Shamir和 Leonard Adleman 在1977年提出,因此得名RSA。它基于大整数因子分解的困难性,为数据的传输提供安全保障。在本项目中,我们将...

    RSA.rar_C语言 RSA_RSA公钥 C语言_RSA的C语言实现_rsa_公钥密码rsa

    在这个“RSA.rar”压缩包中,我们很可能找到了一个C语言实现的RSA公钥加密算法的源代码,这对于理解RSA算法的底层工作原理和学习C语言编程都非常有帮助。 RSA算法是由Ron Rivest、Adi Shamir和Leonard Adleman在...

    Windows版 生成RSA公钥和私钥的工具

    首先,OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用程序供测试或其他目的使用。在Windows环境下,我们有两种版本的OpenSSL可选:32...

    公钥密码算法

    通过以上介绍,我们可以看到公钥密码算法在网络安全中的重要作用以及其实现的基本原理和技术细节。这些算法不仅解决了传统对称密钥加密系统中存在的密钥管理和数字签名等问题,还为现代通信提供了强大的安全保障。

    小巧而快速的RSA公钥算法C语言实现

    从第三方密码学库中抽离出来的RSA算法,去掉了不必要的依赖。效率非常好,可用于实际的工作中! 测试数据经过两个以上第三方密码学库验证,确保测试数据正确性。 test.cpp中包含精心编写的的测试用例,关键之处都有...

    RSA 公钥密码算法差分计时攻击研究 (2011年)

    为此,研究RSA 公钥密码算法的实现和计时攻击原理,分析RSA 解密运算过程,找出RSA 在计时攻击中存在的安全缺陷。在简单计时攻击的基础上,提出基于从左到右“平方-乘法”模幂运算的RSA 差分计时攻击算法,并介绍...

    RSA密码算法的实现

    RSA 密码算法是公钥加密算法的一种,由 Ron Rivest、Adi Shamir 和 Leonard Adleman 于 1977 年提出,RSA 算法使用大素数的乘积作为密钥,通过欧拉函数和费尔马定理来实现加密和解密。下面是 RSA 密码算法的实现细节...

Global site tag (gtag.js) - Google Analytics