`
tianshibaijia
  • 浏览: 1125150 次
文章分类
社区版块
存档分类
最新评论

RSA算法

 
阅读更多

一、公钥密码学概述。

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

私钥:d,n即1019,3337

[注] 已知p,q很容易得出n = pq,但是只知道n却很难计算出p,q,也就很难计算出d。故产生过程中,私钥很好计算,但是想根据公钥e和n计算出d则很难。

[加密消息]

m = 6882326879666683

首先将其分为小的分组,在此例中,按三位数字一分组(不够三位的分组在左边添加0)就可以进行加密。这个消息将分成六个分组mi进行加密:

•m1 = 688
•m2 = 232
•m3 = 687
•m4 = 966
•m5 = 668
•m6 = 003
第一分组加密为: 68879 mod 3337 = 1570 = c1

对后面的分组进行相应的加密计算,最后的密文为:

c = 1570 2756 2091 2276 2423 158

[解密消息]

第一分组解密为:15701019 mod 3337 = 688 = m1

消息的其余部分可用同样的方法恢复出来。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/A00553344/archive/2009/01/07/3730194.aspx

分享到:
评论

相关推荐

    RSA算法演示RSA算法演示

    RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示

    RSA.rar_RSA算法_寻找大素数 rsa_数论算法_简单数论

    RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。...

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

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

    RSA算法工具 RSA算法

    RSA算法工具RSA算法工具RSA算法工具RSA算法工具 RSA算法工具

    VC++实现RSA算法

    VC++实现RSA算法

    RSA算法演示.rar

    RSA算法演示.rar

    RSA算法的纯Python实现(源码)

    RSA算法的纯Python实现,压缩包内共4个文件,分别是 1、大整数的运算库(当然不是算加减乘除的,这个python本身就有)。这个库是计算乘模运算,幂模运算(蒙哥马利算法),最大公约数算法及扩展最大公约数算法(扩展...

    RSA算法的C实现

    MFC界面 相当于一个用RSA算法实现的加密小软件

    读硬盘序列号和加密RSA算法.rar

    读硬盘序列号和加密RSA算法.rar 读硬盘序列号和加密RSA算法.rar

    数字签名 RSA算法 c++

    包涵三个RSA算法,c++是实现,数字签名的合集,三个独自的程序,可以独自编译运行,VC6.0下编译 包涵三个RSA算法,c++是实现,数字签名的合集,三个独自的程序,可以独自编译运行,VC6.0下编译

    RSA算法加解密

    RSA算法加解密 详细介绍RSA算法的思想 附代码 很详细 绝对非常有用!!

    RSA算法试验报告

    目前的公开密钥算法大部分基于大整数分解、有限域上的离散对数问题和椭圆曲线上的离散对数问题,这些数学难题的构建大部分都需要生成一种超大的素数,尤其在经典的 RSA算法中,生成的素数的质量对系统的安全性有很大...

    rsa算法

    rsa算法

    密码学RSA算法实现代码

    密码学中的RSA 算法的java代码实现,其中有模的重复平方计算法和中国剩余定理

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

    RSA算法中模数和运算效率之间一直存在矛盾,目前一些认证机构已采用模数为 2048 bit 的 RSA 签名方法,这必然会影响签名效率。中国剩余定理对于提高RSA算法的模幂乘运算效率有显著作用,被广泛地应用在加速私钥解密...

    易语言RSA算法演示

    易语言RSA算法演示源码,RSA算法演示

    RSA算法C++实现

    RSA算法C++实现 RSA算法C++实现

    RSA算法优化及改进

    1.RSA算法的编程 2.编程改进原RSA算法,在运算速率上优化RSA算法(最好有前后两个程序速率的对比) 3.简单应用优化后的RSA算法(简单对一个文件加密)

    Delphi中的经典RSA算法源码示例

    delphi RSA算法示例以及源码,已经修改为XE系列可用代码,支持中文,可以直接拿来用,用来进行加密和解密

    RSA算法,VC 实现算法,附测试程序

    RSA算法,VC 实现算法,附测试程序 RSA算法,VC 实现算法,附测试程序 RSA算法,VC 实现算法,附测试程序

Global site tag (gtag.js) - Google Analytics