`
Marshal_R
  • 浏览: 132236 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

RSA算法原理简析

阅读更多

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

    http://ces.ustc.edu.cn/jpg/pap/dyl/index.htm

  • 大小: 8.9 KB
  • 大小: 5.5 KB
  • 大小: 5.6 KB
  • 大小: 5 KB
  • 大小: 8.3 KB
  • 大小: 5.3 KB
  • 大小: 6.7 KB
  • 大小: 14.3 KB
  • 大小: 18.7 KB
分享到:
评论

相关推荐

    RSA算法原理.doc

    RSA 算法原理 RSA 算法是非对称加密算法的代表,广泛应用于计算机网络安全领域。该算法的原理基于数论,主要包括互质关系、欧拉函数、模指数运算和中国剩余定理等概念。 一、互质关系 互质关系是指两个正整数除了...

    RSA算法原理-包括KEY产生原理

    以下是RSA算法原理的详细解释: 1. **密钥生成**: - 首先,选取两个大素数p和q,它们应该足够大以增加破解的难度,且p和q互不相同。 - 计算n=p*q,n作为模数,是公钥和私钥的一部分。 - 然后计算欧拉函数φ(n)=...

    RSA算法原理

    在了解RSA算法的原理之前,我们需要先掌握几个数论中相关的概念,包括互质关系、欧拉函数、欧拉定理、模反元素以及密钥生成的步骤。这些概念构成了RSA算法的数学基础。 互质关系是指两个整数a和b的最大公约数(GCD...

    RSA算法工具 RSA算法

    "RSA_simple"可能是一个简单的RSA算法实现,可能包含基础的密钥生成、加密和解密功能,适合初学者学习理解RSA的工作原理。 了解RSA算法并熟练运用其工具对于理解和保障网络安全至关重要。在实际开发中,开发者会...

    VC++实现RSA算法

    在VC++中实现RSA算法需要理解其核心原理,包括大整数运算、素数检测、欧拉函数以及模逆运算等。下面我们将详细探讨这些知识点。 1. **大整数运算**:RSA算法涉及到大整数的加减乘除和幂运算。VC++标准库并没有提供...

    RSA算法演示.rar

    在此RAR压缩包中,我们很可能是得到了一个使用易语言编写的RSA算法的演示源码,这对于理解RSA算法的工作原理和学习如何在编程中实现RSA是非常有帮助的。 RSA的核心概念包括两个密钥:公钥和私钥。公钥是可以公开...

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

    RSA算法的纯Python实现,...RSA算法原理基于两个大质数的乘积很难因式分解,几种算法的优劣主要体现在质数判断、快速乘模运算、快速幂模运算等。如需实际应用建议使用大能们的实现:https://pypi.python.org/pypi/rsa/

    RSA算法实验报告 通过对RSA算法的实现,深入了解RSA原理及应用

    实验目的在于通过实践加深对RSA算法原理的理解和应用。在公钥密码体制中,RSA算法的独特之处在于它能够同时用于数据加密和数字签名。加密过程使用公钥,解密过程使用私钥,这一特性使得RSA在开放的网络环境中具有较...

    rsa算法原理

    主要对网络中数据传输rsa加密的原理介绍,包括数学理论和代码开发应用

    RSA算法原理及应用示例.doc

    RSA算法原理及应用示例.doc

    RSA.rar_RSA PPT_RSA 算法 介绍_RSA 算法 原理_加密_加密 rsa

    PPT(PowerPoint演示文稿)可能是对RSA算法的详细讲解,包括其历史背景、数学原理、加密解密步骤、安全性分析以及实际应用案例。而www.pudn.com.txt可能是一个链接或引用来源,用于提供更多的阅读材料或参考资料。 ...

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

    ### RSA算法实现报告 #### 实验环境 - **硬件配置**:处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz (4CPUs), ~...通过这些内容的学习与实践,可以更好地理解RSA算法的工作原理及其在实际应用中的优势和局限性。

    RSA算法加解密

    RSA算法加解密 RSA算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和 Leonard Adleman。但RSA 的安全性一直未能得到...

    C实现-RSA算法原理与实现

    RSA算法的核心原理基于两个大素数的乘积难以分解这一事实。首先,选择两个大素数p和q,计算它们的乘积n=p*q。接着,计算欧拉函数φ(n)=(p-1)*(q-1),然后选择一个与φ(n)互质的整数e作为公钥的指数。公钥由(n, e)...

    RSA算法原理与实现课程设计.docx

    这个过程不仅加深了学生对RSA原理的理解,还锻炼了他们使用C++解决实际问题的能力。 总的来说,RSA算法是信息安全领域的基石,它的理论基础和实现技术对于理解和保护网络通信的安全至关重要。通过课程设计,学生...

    RSA算法的基本加密原理

    ### RSA算法的基本加密原理 #### 一、引言 RSA算法是现代密码学中的一个基石,它是由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家于1978年共同提出的。RSA算法是一种非对称加密算法,即加密和解密使用的...

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

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

    RSA算法原理与实现

    RSA算法原理与C语言实现 运行环境:WINDOWS下VC6.0及以上编程工具 运行方式:(1)WINDOWS下VC6.0及以上编程工具编译链接运行 (2)工程文件夹下Debug下的*.exe

    RSA算法的C实现

    1. **RSA原理**: RSA基于两个大素数的乘积以及欧拉函数的性质。公钥由这两个大素数p和q的乘积n以及欧拉函数φ(n)的乘积e(1φ(n),且e与φ(n)互质)组成;私钥则由n和另一个数d(满足d*e ≡ 1 mod φ(n))组成。...

    RSA算法演示RSA算法演示

    在本演示中,我们将深入探讨RSA算法的工作原理、特点以及其在实际中的应用。 RSA算法基于两个大素数的乘积,这个乘积作为公钥的一部分,而这两个大素数是私钥的秘密。公钥可以公开,任何人都可以用它来加密信息,但...

Global site tag (gtag.js) - Google Analytics