文章目录

  • 一、简介
  • 二、原理
    • 2.1 加密过程
    • 2.2 计算n的欧拉函数
    • 2.3 逆元计算
    • 2.4 高次幂的计算
    • 2.5 举例
  • 三、优缺点
    • 3.1 优点:
    • 3.2 缺点
  • 四、题外话大质数判定
    • 4.1 随机算法
    • 4.2 确定型启发式算法
  • 五、RSA签名
    • 5.1 签名
    • 5.2 验证
  • 5.3 举例

一、简介

  • RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制
  • 在公开密钥密码体制中,加密密钥(即公开密钥)PK 是公开信息,而解密密钥(即秘密密钥) SK 是需要保密的。加密算法 E 和解密算法 D 也都是公开的。虽然解密密钥SK是由公开密钥 P K PK PK 决定的,但却不能根据 PK 计算出 SK
  • 正是基于这种理论, 1978 1978 1978 年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为 500 500 500 位长,一般推荐使用 1024 1024 1024 位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的 DESIDEA 对话密钥加密,然后使用 RSA 密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要
  • RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一

二、原理

2.1 加密过程

步骤 说明 描述
1 选择一对不相等且足够大的质数 p,q
2 计算 p , q p,q p,q 的乘积 n = p × q n=p\times q n=p×q
3 计算 n n n 的欧拉函数 φ ( n ) = ( p − 1 ) × ( q − 1 ) \varphi(n)=(p-1)\times(q-1) φ(n)=(p−1)×(q−1)
4 选一个与 φ ( n ) \varphi(n) φ(n) 互质的整数 e e e 1 < e < φ ( n ) 1<e<\varphi(n) 1<e<φ(n)
5 计算出 e e e 对于 φ ( n ) \varphi(n) φ(n) 的模反元素(或者称其为逆元) d d d d e m o d φ ( n ) = 1 de \ mod \ \varphi(n)=1 de mod φ(n)=1
6 公钥 K U = ( e , n ) KU=(e,n) KU=(e,n)
7 私钥 K R = ( d , n ) KR=(d,n) KR=(d,n)

设明文为 M M M ,密文为 C C C 的话

  • 加密操作: M e m o d n = C M^e \ mod \ n = C Me mod n=C
  • 解密操作: C d m o d n = M C^d \ mod \ n = M Cd mod n=M

2.2 计算n的欧拉函数

  • 欧拉函数 是小于 n n n 的正整数中与 n n n 互质的数的数目
  • 互质 是指公约数只有 1 1 1 的两个整数
  • 质数 是指在大于 1 1 1 的自然数中,除了 1 1 1 和它本身以外不再有其他因数的自然数

从上面的条件中,我们不难发现,对于一个质数 n n n 而言,它的欧拉函数就是 n − 1 n-1 n−1

  • 如果 n n n 可以分解为 2 2 2 个互质 p 、 q p、q p、q 的整数之积,那么 n n n 的欧拉函数就等于这两个因子的欧拉函数之积,也就是 φ ( n ) = φ ( p ) × φ ( q ) = ( p − 1 ) × ( q − 1 ) \varphi(n)=\varphi(p)\times \varphi(q) = (p-1)\times (q-1) φ(n)=φ(p)×φ(q)=(p−1)×(q−1)

2.3 逆元计算

对于逆元的计算,我们使用的是扩展欧几里得算法,对于数 a a a ,因为我们是想找到一个 x x x 使得 a × x a\times x a×x 在模 n n n 的意义下得到 1 1 1 ,那这个式子其实可以转化为:

a × x + n × y = 1 ( m o d n ) a\times x + n \times y = 1 \ (mod \ n) a×x+n×y=1 (mod n)

其中我们需要求的就是 x x x ,因为 y y y 等于多少我们不在意,因为 y y y 随便取一个非负整数都可以

那么这个式子一下子我们就能联想到贝祖定理,但是贝祖定理还有一个前提条件: 那就是 a a a 和 n n n 需要 互质

详细的过程可以查看:https://acmer.blog.csdn.net/article/details/122280910的 拓展欧几里得 部分

2.4 高次幂的计算

关于高次幂我们可以将其幂指数变为二进制,然后再逐步计算位为 1 1 1 的数的值,然后再加起来,其实就是一个 快速幂 的实现过程

2.5 举例

三、优缺点

3.1 优点:

  • RSA算法是国际标准算法,属于主流算法之一,相对来说也会更为普及,如果需要了解这方面的具体理论,RSA算法是必须要学习的一个算法。因为它在应用的过程之中会更为广泛,也不容易受到其他问题的限制
  • RSA算法的兼容性比较广,能够适用于各种不同的系统之中,比起如今的一些新算法,RSA算法的兼容性令其在真正使用的过程之中更加方便,不会出现各种各样不同的限制
  • RSA算法不像其他新算法一样复杂,它的构成相对来说更为简单,因为其难点在于对大数的质数分解

3.2 缺点

  • RSA算法的加密长度为2048位,因此对于服务端的消耗是比较大的,所以计算的速度也会比较慢,效率相对较低
  • RSA算法比起其他的算法而言,它的安全性并不算非常的高,容易被攻击,所以它的防御能力并不高
  • RSA算法在运行的过程之中,内容使用比较多,这也是其效率低下、消耗高的原因之一

四、题外话大质数判定

由于现在的计算能力,不能对大数做一个准确质数的判定,所以当前只有一些素性检测的方法

4.1 随机算法

  • 费尔马素性测试法
  • Miller-Rabin 素性测试法
  • Solovay–Strassen 素性测试法

4.2 确定型启发式算法

  • AKS素性测试法
  • Baillie–PSW素性测试法
  • 试除法
  • 卢卡斯素性测试法
  • 卢卡斯-莱默素性测试法

五、RSA签名

5.1 签名

  • 利用一个安全的 hash 函数 h h h 产生信息摘要 h ( m ) h(m) h(m)
  • 计算签名 S = s i g n k ( m ) = h ( m ) d m o d n S = sign_k(m) = h(m)^d\ mod \ n S=signk​(m)=h(m)d mod n

5.2 验证

  • 接收者使用相同的 h a s h hash hash 函数 h h h 计算消息摘要 h ( m ) h(m) h(m)
  • 接收者验证 h ( m ) m o d n = s e m o d n h(m) \ mod \ n = s^e \ mod \ n h(m) mod n=se mod n 是否成立,如果成立,那么签名就有效,否则签名无效

这里验证其实也就是用到的逆元的知识

5.3 举例

浅析加密算法七【RSA密码】相关推荐

  1. Pycrypto与RSA密码技术

    密码与通信 密码技术是一门历史悠久的技术.信息传播离不开加密与解密.密码技术的用途主要源于两个方面,加密/解密和签名/验签. pip install pycrypto RSA 密码算法与签名 RSA是 ...

  2. 加密算法之RSA算法

    加密算法之RSA算法 RSA是目前使用最广泛的公钥密码体制之一.它是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adle ...

  3. RSA密码的手动算法+快速幂算法

    公钥加密方案(非对称加密算法) 1.为什么要引入公钥加密方案? 密码学中的加密方案分成对称密钥和非对称密钥(也就是我们说的公钥加密,代表加密算法是RSA加密算法). 而对称加密方法有一个特点,任何通信 ...

  4. 配置 不使用rsa 密码_了解使用RSA的密码学

    配置 不使用rsa 密码 RSA is an asymmetric cryptographic algorithm that you are probably using right now to v ...

  5. 信息安全工程师笔记-RSA密码

    相关数学基础 欧拉函数:对于一个正整数n,小于n且与n互素(质)的正整数的个数,记为φ(n). 对于一个素数n,可知φ(n)=n-1 对于两个素数p和q,它们的乘积满足n=p*q,则可知φ(n)=(p ...

  6. 基于Montgomery算法的高速、可配置 RSA密码IP核硬件设计系列(五)——模幂模块(抵抗侧信道攻击)模块的设计实现方案

    基于Montgomery算法的高速.可配置RSA密码IP核硬件设计系列(五) 2.2 模幂模块设计(抵抗测信道攻击模块) 2.2.1 模幂模块及内部模块的功能 2.2.3 模幂各模块的实现方案 2.2 ...

  7. RSA密码——Wiener的低解密指数攻击(利用连分数理论)

    RSA密码--Wiener的低解密指数攻击 先描述一下RSA密码体制: RSA密码体制: 大素数p,qp,qp,q,模数n=pqn=pqn=pq,加密指数bbb,解密指数aaa,满足ab≡1(modϕ ...

  8. JAVA加密解密→术语、密码分类、OSI与TCP/IP安全体系、Base64、消息摘要算法MD/SHA/MAC、对称加密算法DES/AES/PBE、非对称加密算法DH/RSA/EIGamaI

    术语 密码分类 OSI与TCP/IP安全体系 JAVA安全 Base64算法 消息摘要算法MD 消息摘要算法MD图解 消息摘要算法SHA 消息摘要算法SHA图解 消息摘要算法MAC 消息摘要算法MAC ...

  9. 浅析AES和RSA加密算法的区别和适用场景

    信息数据传输的安全一直都是个很重要的话题,从刚开始当程序员时错以为MD5.SHA1这些哈希算法就是加密算法,到后来慢慢接触对称加密.非对称加密这些概念,再到对接各种大开发平台接口的时候看到他们通过 R ...

最新文章

  1. 【Linux学习笔记】 -- 基本Shell命令
  2. 分享如何在Ubuntu 16.04下CUDA8.0
  3. 变量初始化赋值_java数组的定义及初始化
  4. ABAP R3 时代著名的 SFLIGHT 航班模型测试数据,到了S/4HANA时代的进化版
  5. Integer 与 int 中的 ==
  6. zz在Ubuntu中通过源码安装编译安装软件(MySQL篇)
  7. HDU1390 ZOJ1383 Binary Numbers
  8. Centos7 配置网络
  9. access中如何画斜线_三维并没有想象中那么难,思路清晰画图就简单
  10. SQL的笛卡尔积简记
  11. STM32单片机介绍2
  12. 如何观看网页flash视频以及下载视频
  13. 一种绝对提高开发水平的方法(转)
  14. 【数据结构基础_双向链表(有[*pHead]和[*pEnd])_(C语言实现)】
  15. 舰r最新服务器,战舰少女R官方网站—战舰少女-与心爱的舰娘一起守护这片海域...
  16. days05-DSL查询文档以及对搜索结果进行处理
  17. 戒指的带法,终于收齐了
  18. USB驱动分析(三)
  19. Veritas Symantec backup exec 16授权slf文件
  20. ncode2019安装教程_nCode DesignLife|ANSYS 17.0 nCode DesignLife下载 v12.0免费版 附使用教程 - 121下载站...

热门文章

  1. 突然关机重启后mysql打不开_电脑突然死机后mysql无法启动
  2. 你真的会用Fragment吗?Fragment复用的那些事儿
  3. 做神经网络用哪个笔记本,笔记本能跑神经网络么
  4. 《青山翠影》壹 艰难的抉择 | 福兮祸兮
  5. 飞机螺旋(又称尾旋)产生原因、受力分析、解决方法、螺旋改出
  6. 计算机毕业设计JavaWEBOA办公信息管理系统(源码+系统+mysql数据库+lw文档)
  7. win7优化设置_Win7关停!用上这两个工具不说再见。
  8. 主持人播音员专业八级绕口令考试试卷
  9. 【23招实用技巧让XP运行更快捷更可靠】
  10. 什么是蜘蛛池?-免费蜘蛛池搭建软件