一、数学知识

1. 质数

质数,又称素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。

2. 互质数

百度百科上的解释是:公因数只有1的两个数,叫做互质数。

维基百科上的解释是:互质,又称互素。若N个整数的最大公因子是1,则称这N个整数互质。

常见的互质数判断方法主要有以下几种:

两个不同的质数一定是互质数。例如,2与7、13与19。

一个质数,另一个不为它的倍数,这两个数为互质数。例如,3与10、5与 26。

相邻的两个自然数是互质数。如 15与 16。

相邻的两个奇数是互质数。如 49与 51。

较大数是质数的两个数是互质数。如97与88。

小数是质数,大数不是小数的倍数的两个数是互质数。例如 7和 16。

2和任何奇数是互质数。例如2和87。

1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。

辗转相除法。

3. 模运算

模运算:即求余运算,“模”是“mod”的音译。和模运算紧密相关的一个概念是“同余”,当两个整数除以同一个整数,若得相同余数,则称这两个整数同余。

如:两个整数a、b,若它们除以正整数m所得的余数相同,则称a、b对于模m同余,记为a=b(mod m),读为a与b关于模m同余。例如26=14(mod 12)

二、RSA加密算法原理

1. RSA加密

通式:

即RSA加密就是对明文进行E次方后除以N后求余数的过程。其中,E是加密(Encryption)的首字母,N是数字(Number)的首字母。

由此可知,只要知道E、N就可以进行RSA加密,所以说E、N就是RSA加密的密钥,E和N的组合就是公钥,记为

公钥=(E,N)

2. RSA解密

通式:

即RSA解密就是对密文进行D次方除以N后求余数的过程。其中,D是解密(Decryption)的首字母。

由此可知,只要知道D、N就可以进行RSA解密,所以说D、N就是RSA解密的密钥,D和N的组合就是私钥,记为

私钥=(D,N)

3. 生成密钥对

密钥对=(E,D,N)

(1)求N
准备两个质数p、q(注意不能太小,否则容易破解),求

N=p*q

(2)求E

建立一个中间数L,使得L是p-1和q-1的最小公倍数,即

L=(p-1)*(q-1)

满足以下两个条件的数即为E:

1<E<L

gcd(E,L)=1

其中,需要满足E和L的最大公约数为1是为了保证一定存在D。

(3)求D

满足以下两个条件的数即为D:

1<D<L
E*D mod L = 1或E*D=1 (mod L)

E*D mod L=1D等价于E*D-1=kL,k为常数,由此可解出D。

密钥对的求法

求N

N=p*q;p,q为质数,且p不等于q

求L

L=(p-1)(q-1)

求E

1 < E < L,gcd(E,L)=1;E,L最大公约数为1(E和L互质)

求D

1 < D < L,E*D mod L = 1

4. 实际举例

假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她以以上的方式来产生一个公钥和一个私钥:

(1)随意选择两个大的质数p和q,p不等于q,计算N=p*q。比如选取61和53,则N=61*53=3233,化为二进制则是110010100001,一共12位,所以这个密钥就是12位,实际应用中,RSA密钥一般是1024位,重要场合则是2048位。

(2)求得L =lcm(p-1,q-1)

(3)求E:1 < E < L,gcd(E,L)=1(即L和E互质)

(4)求D:1 < D < L,E*D mod L = 1

(5)将 p 和 q 的记录销毁,得到公钥=(E,N),私钥=(D,N),Alice将她的公钥传给Bob,而将她的私钥藏起来。

假设Bob想给Alice送一个消息m,他知道Alice产生的N和E,就以下加密通式对明文进行加密,得到密文后就传递给Alice:

Alice得到Bob发送过来的密文后就可以利用以下解密通式,结合自己保存的密钥来进行解密:

RSA也可以用来为一个消息署名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。

三、RSA加密算法的特点

1. RSA算法的特点

这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

2. RSA加密算法的安全性

已知公钥=(E,N)公开,私钥=(D,N)保密,假设在已知E,N的情况下,能否推出D?

分析:

(1)由E*D mod L=1可知,只有知道E和L,才能算出D。

(2)由L=lcm(p-1,q-1)可知,只有知道p和q,才能算出L。

(3)由N=p*q可知,在知道N的情况下,只有将N因数分解,才能算出p和q。

结论:若N可以被因数分解,D就可以被算出,即私钥被破解。由于对极大整数进行因数分解的难度很大,这就决定了RSA算法的安全性。

当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。

1994年彼得·秀尔(Peter Shor)证明一台量子计算机可以在多项式时间内进行因数分解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔的算法可以淘汰RSA和相关的衍生算法。(即依赖于分解大整数困难性的加密算法)

另外,假如N的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999年,数百台电脑合作分解了一个512位长的N。1997年后开发的系统,用户应使用1024位密钥,证书认证机构应用2048位或以上。

3. RSA加密算法的缺点

虽然RSA加密算法作为目前最优秀的公钥方案之一,在发表三十多年的时间里,经历了各种攻击的考验,逐渐为人们接受。但是,也不是说RSA没有任何缺点。由于没有从理论上证明破译RSA的难度与大数分解难度的等价性。所以,RSA的重大缺陷是无法从理论上把握它的保密性能如何。在实践上,RSA也有一些缺点:

(1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密;

(2)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢。

RSA加密算法——密码学笔记(四)相关推荐

  1. 密码学:RSA加密算法详解

    概述 本文旨在说明RSA加密算法的原理及实现,而其相关的数学部分的证明则不是本文内容. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Q-WHai 发表日期: ...

  2. 国密SM算法、RSA加密算法笔记

    一.国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.目前SM1算法没有公开,只能集成在芯片中.目前应用较多的是SM2.SM3和SM4算法,这三者用法不一. SM2公钥加密算法 ...

  3. 密码学——RSA加密算法

        既信安导论学习RSA之后,这些东西被丢弃了很久,还是码一下,方便以后找. 1.前述 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir ...

  4. 【http学习笔记四】安全篇

    [http学习笔记四]安全篇 文章目录 [http学习笔记四]安全篇 一.HTTPS 与 SSL/TLS ① 什么是安全? 机密性 完整性 身份认证 不可否认 ② 什么是HTTPS? ③ SSL/TL ...

  5. Java加密与解密笔记(四) 高级应用

    术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...

  6. java的rsa加密算法_用java编程实现RSA加密算法

    RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet传送的数据,常用于数字签名和密钥交换.那么我今天就给大家介绍一下如何利用Java编程来实现RSA加密算法. 一.RSA加密算 ...

  7. RSA加密算法及使用公私钥实现数字签名

    一, 传统对称加密算法 传统的对称密码算法可以有效地保护小范围内的点对点传输数据的机密性,但是在参与通信的节点数量增多后,密钥管理成为了瓶颈问题. 在密码学中,恺撒密码,或称恺撒加密.恺撒变换.变换加 ...

  8. RSA加密算法原理及RES签名算法简介(转载)

    第一部分:RSA算法原理与加密解密 一.RSA加密过程简述 A和B进行加密通信时,B首先要生成一对密钥.一个是公钥,给A,B自己持有私钥.A使用B的公钥加密要加密发送的内容,然后B在通过自己的私钥解密 ...

  9. 快速了解什么是RSA加密算法

    1.什么是RSA 加密算法有对称加密和非对称加密. 对称加密是指发送方和接收方使用相同的一种规则对信息进行处理,因为双方使用的是相同的规则和密钥,所以一旦密钥泄露,那么再强大的加密也将毫无用处. 所有 ...

最新文章

  1. 使用雪花id或uuid作为Mysql主键,被老板怼了一顿!
  2. 代码编辑器——sublime
  3. 英文关键词计算tf-idf 余弦相似度_TFIDF原理与实践
  4. careercup-树与图 4.9
  5. 资本主义的历史仍未终结(作者:袁剑)【转】
  6. 微服务实践分享(2)api网关
  7. java nio 应用场景_BIO、NIO、AIO简述及应用场景
  8. Xamarin只言片语4——Xamarin.Android百度地图绑定
  9. 深度学习(三十六)——R-FCN, FPN, RetinaNet, CornerNet
  10. 2019温馨的元旦祝福语 2019元旦祝福语大全!收藏备用!
  11. 读写锁原理 java_java多线程-读写锁原理
  12. Windows API串口编程
  13. 已经学过51单片机,如何进阶?我来教你
  14. Tushare基本操作教程
  15. 金蝶盘点机金蝶条码管理方案实施金蝶仓库条码管理实现方法
  16. android表情动画制作,GIF动态表情制作app
  17. 计算机怎么取消账户密码怎么设置,电脑开机密码怎么设置以及取消
  18. 借助Hugo和Academic主题在github.io建立个人网站
  19. 华为od77 python最大消费金额
  20. ConvNext模型复现--CVPR2022

热门文章

  1. 高中生学python培养思维能力_基于培养思维能力的Python语言程序设计教学
  2. Python之compiler:compiler库的简介、安装、使用方法之详细攻略
  3. AI公开课:19.03.07雷鸣教授《人工智能革命与趋势》课堂笔记以及个人感悟
  4. 成功解决NameError: name 'file' is not defined
  5. VS Code:史上最全的VS Code快捷键+分门别类(中英文对照版)
  6. opengl关于obj文件相关知识
  7. YZMCMS V5.3后台 SSRF
  8. PAT A1063——set的常见用法详解
  9. android 中的常用组件
  10. [UE4]编程师外挂Visual Assist X