首页
社区
课程
招聘
[原创]RSA公钥密码算法的原理及实现
发表于: 2009-3-12 23:52 7866

[原创]RSA公钥密码算法的原理及实现

2009-3-12 23:52
7866
RSA公钥密码算法的原理及实现

作者:不赖猴  内核编程和密码学群:20264887

一、公钥密码学概述。

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

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

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

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

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

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

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

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

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

        

二、什么是公钥密码算法

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

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

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

三、RSA公钥密码算法原理

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

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

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

由于无法输入公式,完整文章及实现请看
http://blog.csdn.net/A00553344/archive/2009/01/07/3730194.aspx
http://blog.csdn.net/A00553344/archive/2009/01/10/3747434.aspx

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你这个就算了,计算机专业的随便哪密码学书上将的都比你清楚
2009-3-13 00:06
0
雪    币: 200
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
要么你没仔细看全文;要么你没仔细看过什么密码学书.
2009-3-13 08:42
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主说的不错
2009-3-13 10:40
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你说对了,当然没看你的全文,rsa在我看来就3点值得讨论
1个是数学基础,看上去虽然简单,别告诉我你自己证明的出来,包括费马定理
2个是大数类,用小数实现一点意义也没有,算法写的那么清楚,最多自己实现个模逆运算
3个是安全,讨论这个当然也需要数学知识

要说应用rsa,现成的就有CryptoAPI

--------------------------------------------------------

刚刚去博客看了看

不错的,果然是没有调查就没有发言权

至少大数类的实现方法和我不一样,我是用的字符串

PS:Java从很早开始就支持大数类了
2009-3-13 11:38
0
雪    币: 190
活跃值: (42)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
用字符串? 你没发烧? Sorry 没有贬低您的意思
我们竞赛开始也是字符串 不过乘法和除法已经幂运算好像 咳咳
2009-3-15 11:49
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看到竞赛2个字,我就笑了,你没发烧?

连怎么用字符串做乘法都想不出来,你瞎叫什么?

我就是在贬低你
2009-3-15 15:27
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这种大家都研究了一万年的东西就不要贴了吧
2009-3-26 00:00
0
游客
登录 | 注册 方可回帖
返回
//