RSA算法和RSA数字签名算法的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RSA算法和RSA数字签名算法的实现*
顾婷婷李涛
(四川大学计算机系(西区) 成都610065)
摘要RSA算法是一种公钥密码算法.实现RSA算法包括生成RSA密钥,用RSA加密规则和解密规则处理数据。RSA数字签名算法利用RSA算法实现数字签名。本文详述了RSA算法的基本原理, RSA 加密算法的实现以及如何利用RSA实现数字签名.
关键字RSA算法, 数字签名, 公开密钥, 私人密钥, 加密, 解密
中图分类号TP301
一、引言
随着网络技术的飞速发展,信息安全性已成为亟待解决的问题。公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制在网络通信中出现的问题。另外,随着电子商务的发展,网络上资金的电子交换日益频繁,如何防止信息的伪造和欺骗也成为非常重要的问题。数字签名可以起到身份认证、核准数据完整性的作用。目前关于数字签名的研究主要集中基于公钥密码体制的数字签名。
公钥密码体制的特点是:为每个用户产生一对密钥(PK和SK);PK公开,SK保密;从PK推出SK是很困难的;A、B双方通信时,A通过任何途径取得B的公钥,用B的公钥加密信息。加密后的信息可通过任何不安全信道发送。B收到密文信息后,用自己私钥解密恢复出明文。
公钥密码体制已成为确保信息的安全性的关键技术。RSA公钥密码体制到目前为止还是一种认可为安全的体制。本文详述了RSA算法和用RSA算法实现数字签名的理论,以及它们在实际应用中的实现。
二、RSA算法和RSA数字签名算法的理论描述
1 RSA算法
RSA算法的理论基础是一种特殊的可逆模幂运算。
设n是两个不同奇素数p和q的积,即:n=pq, ϕ(n)=(p-1)(q-1)。
定义密钥空间 k={(n,p,q,d,e)|n=pq,p和q是素数,de≡1 mod ϕ(n),e为随机整数}, 对每一个k=(n,p,q,d,e),
定义加密变换为E k(x)=x b mod n,x∈Z n;
解密变换为D k(x)=y a mod n,y∈Z n,Z n为整数集合。
公开n和b,保密p,q和a.
为证明加密变换E k和解密变换 D k满足D k(E k(x))=x,这里不加证明的引用下面两个定理:
定理1(Euler)对任意的a∈Z n*,有aϕ(n)≡1 mod n,其中Z n*={x∈Z n|gcd(x,n)=1},ϕ(·)表示Euler函数。
定理2 设p和q是两个不同的素数,n=pq, ϕ(n)=(p-1)(q-1),对任意的x∈Z n及任意的非负整数k,有 x kϕ(n)+1≡x mod n.
现在来证明RSA算法的加密变换和解密变换的正确性。
证明:对于加密变换E k和解密变换D k。因为ab≡1 mod ϕ(n),所以可设ab=tϕ(n)+1,t
*本文受国家自然科学基金以及四川省学术带头人基金的资助。
顾婷婷,硕士生,李涛,教授,主要研究领域:人工智能与神经网络。
是整数且t ≥1。对于任意的x ∈Z n ,有D k (E k (x))≡D k (x b ) ≡(x b )a ≡x t ϕ(n)+1
≡x mod n.因此解密过
程是正确的。
2 RSA 数字签名算法
RSA 数字签名算法的过程为:A 对明文m 用解密变换作: s ≡ D k (m)=m d mod n,其中d ,
n 为A 的私人密钥,只有A 才知道它;B 收到A的签名后,用A 的公钥和加密变换得到
明文,因: E k (s)= E k (D k (m))= (m d )e mod n,又 de ≡1 mod ϕ(n)即de=l ϕ(n)+1,根据欧拉定理
m ϕ(n)=1 mod n ,所以E k (s)=m l ϕ(n)+1=[m ϕ(n)]e m=m mod n 。若明文m 和签名s 一起送给用户B,B
可以确信信息确实是A 发送的。同时A 也不能否认送给这个信息,因为除了A 本人外,其
他任何人都无法由明文m 产生s.因此RSA 数字签名方案是可行的。
但是RSA 数字签名算法存在着因计算方法本身同构造成签名易被伪造和计算时间长的
弱点,因此实际对文件签名前,需要对消息做MD5变换。
MD5函数是一种单向散列函数,它将任意长度的消息压缩成128位的消息摘要。应用
MD5的单向性(即给定散列值,计算消息很难)和抗碰撞性(即给定消息M ,要找到另一消
息M ’ 并满足两者的散列值很难),可以实现信息的完整性检验。另外该函数的设计不基
于任何假设和密码体制而直接构造,执行的速度快,是一种被广泛认可的单向散列算法。
三、RSA 算法的实现
RSA 算法的实现分为:生成密钥,加密,解密。
1 数据结构
RSA 密码系统的安全性依赖于大数分解的难度,一般建议用户选择的素数p 和q 至少为
100位,则n=pq 是至少为200位的十进制数。因此实现RSA 算法有必要定义大数的数据
结构如图一所示。
密钥生成,加密和解密涉及到一些大数的基本运算。定义大数的基本运算库,包括加、减、乘、除、取模运算等,其中最重要的模乘运算和模幂运算。
模幂算法是加密解密的核心算法。计算模幂的一种有
效算法是“平方-乘”方法,通过对指数的二进制化来实现。8
过程如图1:
Procedure modmult
begin
Z=1
for i=l-1 downto 0 do:
begin
Z=Z 2 mod n; if b i =1 then Z=Z*x mod n;
end
end
图一
2 密钥的生成
2.1 RSA 公钥和私钥的结构定义
根据文档PKCS#1定义RSA 公钥和私钥分别如图2和图3。理论上讲,RSA 私钥只需
包括解密模数和解密指数。但是为加快RSA 解密计算的效率,采用中国剩余定理算法,
因此RSA 私钥包含p,q,d mod (p-1),d mod (q-1),q -1 mod p,其中p,q 为大素数, d mod (p-1),
d mod (q-1),q -1 mod p 由计算过程生成。