RSA算法原理简析
当今的信息时代,信息安全显得尤为重要,加密也理所当然成为不可或缺的一部分。所有的加密算法不外乎2种模式:对称加密算法以及非对称加密算法。
对称加密算法加密解密使用同一种规则,一个致命的缺点就是保存和传递密钥;非对称加密算法加密解密使用不同的规则,公钥加密的信息只有私钥才能解密,只要私钥不泄露,通信就是安全的。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
一、介绍
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA取三人姓氏首字母。
算法基于下面的两个事实,这些事实保证了RSA算法的安全有效性:
1) 已有确定一个数是不是质数的快速算法;
2) 尚未找到确定一个合数的质因子的快速算法。
今天只有短的RSA钥匙才可能被强力方式解破。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
二、数论知识
进入正题之前,我先介绍一些基本的数论知识,归根到底其实算法就是数学。
1、互质关系
如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。
关于互质关系,不难得到以下结论:
1)任意两个质数构成互质关系,比如13和61。
2) 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10。
3) 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。
4) 1和任意一个自然数是都是互质关系,比如1和99。
5) p是大于1的整数,则p和p-1构成互质关系,比如57和56。
6) p是大于1的奇数,则p和p-2构成互质关系,比如17和15。
2、欧拉函数
任意给定正整数n,在小于等于n的正整数之中,与n构成互质关系的有φ(n)个,φ(n)就叫做欧拉函数。
可以证明, 如果n是质数,则 φ(n)=n-1 。
一般性地,任意一个大于1的正整数,都可以写成一系列质数的积:
那么,
3、欧拉定理
如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立:
也就是说,a的φ(n)次方被n除的余数为1。或者说,a的φ(n)次方减去1,可以被n整除。比如,3和7互质,而7的欧拉函数φ(7)等于6,所以3的6次方(729)减去1,可以被7整除(728/7=104)。
4、费马小定理
假设正整数a与质数p互质,因为质数p的φ(p)等于p-1,则欧拉定理可以写成
5、模反元素
如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。
这时,b就叫做a的"模反元素"。
欧拉定理可以用来证明模反元素必然存在:
可以看到,a的 φ(n)-1 次方,就是a的模反元素。
三、RSA算法密钥生成
1、随机选择2个不相等的质数p和q
例如:61和53。
2、计算p和q的乘积 n=p×q
n = 61×53 = 3233
n的长度即为密钥长度,3233写成二进制为110010100001,则密钥长度为12位。
3、计算n的欧拉函数 φ(n) = (p-1)(q-1)
φ(3233) = 60×52 = 3120
4、随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质
这里在1到3120之间,随机选择17。(实际应用中,常常选择65537)
5、计算e对于φ(n)的模反元素d
ed ≡ 1 (mod φ(n))
即 17d ≡ 1 (mod 3720)
解得其中一个解为d=2753。
6、将n和e封装成公钥,n和d封装成私钥
n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。
实际应用中,公钥和私钥的数据都采用ASN.1格式表达
四、RSA算法加密
公钥(n,e) 只能加密小于n的整数m,如果要加密大于n的整数,有两种解决方法:一种是把长信息分割成若干段短消息,每段分别加密;另一种是先选择一种"对称性加密算法"(比如DES),用这种算法的密钥加密信息,再用RSA公钥加密DES密钥。
加密要用公钥(n,e),例如要加密信息m(m必须是整数字符串可以取ascii值或unicode值,且m<n),加密就是要算出下面的c
me ≡ c (mod n)
公钥是 (3233, 17),m假设是65,因为
6517 ≡ 2790 (mod 3233)
于是,c = 2790。
五、RSA算法解密
解密要用私钥(n,d),可以证明,下面的等式一定成立:
cd ≡ m (mod n)
私钥是(3233, 2753),c等于2790,因为
27902753 ≡ 65 (mod 3233)
于是,m = 65,即加密之前的原数据为65。
六、程序实现流程图
1、密钥生成
2、加密
3、 解密
推荐几篇极好的文章:
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
相关推荐
RSA 算法原理 RSA 算法是非对称加密算法的代表,广泛应用于计算机网络安全领域。该算法的原理基于数论,主要包括互质关系、欧拉函数、模指数运算和中国剩余定理等概念。 一、互质关系 互质关系是指两个正整数除了...
以下是RSA算法原理的详细解释: 1. **密钥生成**: - 首先,选取两个大素数p和q,它们应该足够大以增加破解的难度,且p和q互不相同。 - 计算n=p*q,n作为模数,是公钥和私钥的一部分。 - 然后计算欧拉函数φ(n)=...
在了解RSA算法的原理之前,我们需要先掌握几个数论中相关的概念,包括互质关系、欧拉函数、欧拉定理、模反元素以及密钥生成的步骤。这些概念构成了RSA算法的数学基础。 互质关系是指两个整数a和b的最大公约数(GCD...
"RSA_simple"可能是一个简单的RSA算法实现,可能包含基础的密钥生成、加密和解密功能,适合初学者学习理解RSA的工作原理。 了解RSA算法并熟练运用其工具对于理解和保障网络安全至关重要。在实际开发中,开发者会...
在VC++中实现RSA算法需要理解其核心原理,包括大整数运算、素数检测、欧拉函数以及模逆运算等。下面我们将详细探讨这些知识点。 1. **大整数运算**:RSA算法涉及到大整数的加减乘除和幂运算。VC++标准库并没有提供...
在此RAR压缩包中,我们很可能是得到了一个使用易语言编写的RSA算法的演示源码,这对于理解RSA算法的工作原理和学习如何在编程中实现RSA是非常有帮助的。 RSA的核心概念包括两个密钥:公钥和私钥。公钥是可以公开...
RSA算法的纯Python实现,...RSA算法原理基于两个大质数的乘积很难因式分解,几种算法的优劣主要体现在质数判断、快速乘模运算、快速幂模运算等。如需实际应用建议使用大能们的实现:https://pypi.python.org/pypi/rsa/
实验目的在于通过实践加深对RSA算法原理的理解和应用。在公钥密码体制中,RSA算法的独特之处在于它能够同时用于数据加密和数字签名。加密过程使用公钥,解密过程使用私钥,这一特性使得RSA在开放的网络环境中具有较...
主要对网络中数据传输rsa加密的原理介绍,包括数学理论和代码开发应用
RSA算法原理及应用示例.doc
PPT(PowerPoint演示文稿)可能是对RSA算法的详细讲解,包括其历史背景、数学原理、加密解密步骤、安全性分析以及实际应用案例。而www.pudn.com.txt可能是一个链接或引用来源,用于提供更多的阅读材料或参考资料。 ...
### RSA算法实现报告 #### 实验环境 - **硬件配置**:处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz (4CPUs), ~...通过这些内容的学习与实践,可以更好地理解RSA算法的工作原理及其在实际应用中的优势和局限性。
RSA算法加解密 RSA算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和 Leonard Adleman。但RSA 的安全性一直未能得到...
RSA算法的核心原理基于两个大素数的乘积难以分解这一事实。首先,选择两个大素数p和q,计算它们的乘积n=p*q。接着,计算欧拉函数φ(n)=(p-1)*(q-1),然后选择一个与φ(n)互质的整数e作为公钥的指数。公钥由(n, e)...
这个过程不仅加深了学生对RSA原理的理解,还锻炼了他们使用C++解决实际问题的能力。 总的来说,RSA算法是信息安全领域的基石,它的理论基础和实现技术对于理解和保护网络通信的安全至关重要。通过课程设计,学生...
### RSA算法的基本加密原理 #### 一、引言 RSA算法是现代密码学中的一个基石,它是由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家于1978年共同提出的。RSA算法是一种非对称加密算法,即加密和解密使用的...
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。...
RSA算法原理与C语言实现 运行环境:WINDOWS下VC6.0及以上编程工具 运行方式:(1)WINDOWS下VC6.0及以上编程工具编译链接运行 (2)工程文件夹下Debug下的*.exe
1. **RSA原理**: RSA基于两个大素数的乘积以及欧拉函数的性质。公钥由这两个大素数p和q的乘积n以及欧拉函数φ(n)的乘积e(1φ(n),且e与φ(n)互质)组成;私钥则由n和另一个数d(满足d*e ≡ 1 mod φ(n))组成。...
在本演示中,我们将深入探讨RSA算法的工作原理、特点以及其在实际中的应用。 RSA算法基于两个大素数的乘积,这个乘积作为公钥的一部分,而这两个大素数是私钥的秘密。公钥可以公开,任何人都可以用它来加密信息,但...