【密码学】RSA公钥加密算法

文章目录

      • RSA定义
      • RSA加密与解密
        • 加密
        • 解密
      • 生成密钥对
      • 一个例子
        • 密钥对生成
        • 加密
        • 解密
      • 对RSA的攻击
        • 通过密文来求得明文
        • 通过暴力破解来找出D
        • 通过E和N求出D
          • 对N进行质因数分解
          • 通过推测p和q进行攻击
        • 中间人攻击
      • 一些思考
        • 公钥密码比对称密码的机密性更高?
        • 对称密码会消失?
        • RSA使用过程中,质数对会不会被用光?
        • RSA加密过程中需要对大整数进行质因数分解?
        • N达到多少比特可以抵御质因数分解?

RSA定义

  • RSA是一种公钥密码算法
  • 他的名字由他的三位开发者的形式首字母组成

RSA加密与解密

加密解密

加密
  • 密文 = 明文EmodN

  • 在RSA只能够,明文、密钥和密文都是数字,具体加密过程可由上式来表达,RSA的密文就是对代表明文的数字的E次方求modN的结果

  • E和N的组合就是密钥,一般可写成“密钥是(E, N)”

解密
  • 明文 = 密文DmodN
  • 对表示密文 数字的D次方求modN就可以得到明文
  • D和N的组合就是私钥,一般可写成“私钥是(D, N)”,这里所使用的数字N和加密时使用的数字N是相同的

生成密钥对

  • 公钥是(E, N),私钥是(D, N),因此求E, D, N这三个数的过程就是生成密钥对的过程,即为RSA密钥对的生成过程
  1. 求N
    • 首先准备两个很大的质数p, q
    • 若p和q过小的话,密码会变得容易破译;但若p和q过大的话计算时间又会变得很长
    • N为两质数的乘积
    • N = p*q
  2. 求L
    • L是(p-1)和(q-1)的最小公倍数(least common multiple),用lcm(X, Y)来表示“X和Y的最小公倍数”
    • L = lcm(p-1, q-1)
  3. 求E
    • E是一个比1大、比L小的数
    • E和L的最大公约数(greatest common divisor)必须是1,用gcd(X, Y)来表示X和Y的最大公约数
    • 1 < E < L, gcd(E, L) = 1
    • 要找到满足要求的数,要使用伪随机数生成器,通过伪随机数生成器在1 < E < L的范围内生成E的候选数,然后再判断其是否满足gcd(E, L) = 1这个条件
  4. 求D
    • 1 < D < L, E * D mod L = 1
    • 只要数D满足上述条件,则通过E和N进行加密的密文,就可以通过D和N进行解密

一个例子

密钥对生成
  1. 求N
    • p = 17, q = 19
    • N = p * q = 17 * 19 = 323
  2. 求L
    • L = lcm(p-1, q-1) = lcm(16, 18) = 144
  3. 求E
    • gcd(E, L) = 1
    • E = 5、7、11、13、17…
    • 选取E = 5,N = 323
  4. 求D
    • E * D mod L = 1
    • 将D = 29代入上式即满足
    • E * D mod L = 5 * 29 mod 144 = 145 mo 144 = 1
  • 得公钥(E, N) = (5, 323),私钥(D, N) = (29, 323)
  • 公钥是可以任意公开的,但私钥必须妥善保管
加密
  • 要加密的明文必须是小于N的数,即此处必须是小于323的数,因为在加密过程中有mod N操作
  • 假设需要加密的数是123,公钥(E, N) = (5, 323)
  • 密文 = 明文Emod N = 1235mod 323 = 225
解密
  • 收到密文是225,私钥(D, N) = (29, 323)
  • 明文 = 密文Dmod N = 22529mod 323 = 123

对RSA的攻击

  • 密码破译者知道的信息
    • 密文:可以通过窃听来获取
    • 公钥(E, N):公钥是公开信息
  • 密码破译者不知道的信息
    • 明文:需要破译的内容
    • 私钥中的D:私钥中的D是不知道的
    • 其他:密码破译者不知道生成密钥对时所使用的p、q、L
通过密文来求得明文
  • 若在加密过程中,没有mod N的操作,通过密文求解明文的难度并不大,因为可以看作是一个求对数的问题
  • 但是,加上mod N后,求明文就变成了求离散对数的问题,这种操作非常困难,目前还没有发现求解离散对数的高效算法
通过暴力破解来找出D
  • 只要能知道D,就能对密文进行解密。因此可以逐一尝试有可能作为D的数字来破译RSA,即暴力破解法
  • 暴力破解法的难度会随着D的长度增大而增大,当D足够长时,就不可能在现实的时间内通过暴力破解找出D
  • 现在RSA所使用的p和q的长度都是1024比特以上的,N的长度为2048比特以上的,由于E和D的长度可以和N差不多,因此要找出D,就需要进行2048比特以上的暴力破解
通过E和N求出D
对N进行质因数分解
  • p和q是不能被密码破译者知道的,因为N = p * q,而且N是公开的,p和q都是质数,因此由N求p和q只能通过将N进行质因数分解来完成
  • 一旦发现了对大整数进行质因数分解的高效算法,RSA就能够被破译
  • 然而,现在还没有发现对大整数进行质因数分解的高效算法,而且也尚未证明质因数分解是否真的是非常困难的问题,甚至不知道是否存在一种分解质因数的简单方法
通过推测p和q进行攻击
  • 由于p和q是通过伪随机数生成器产生的,如果伪随机数生成器的算法很差,密码破译者就有可能推测出来p和q,因此使用能够被推测出来的随机数是非常危险的
中间人攻击
  • man-in-the-middle attack
  • 这种方法虽不能破译RSA,但却是一种针对机密性的有效攻击
  • 中间人攻击就是主动攻击者M混入发送者和接收者中间,对发送者伪装成接收者,对接收者伪装成发送者的攻击方式,此时M就是“中间人”

中间人攻击

  1. 消息发送者A向B发送邮件索取公钥
  2. 攻击人M通过窃听发现A在向B索取公钥
  3. B看到A的邮件,并将自己的公钥发送给A
  4. M拦截B的邮件,使其无法发送给A,然后将B的公钥保存起来
  5. M伪装成B,将M自己的公钥发送给A
  6. A将自己的消息用B的公钥(此时其实是M的公钥)进行加密
  7. A将加密后的消息发送给B
    • 但A所持有的并非B的公钥,而是M的公钥,因此A是用M的公钥对邮件进行加密
  8. M拦截A的加密邮件
    • 这封加密邮件是用M的公钥进行加密的,因此M能够对其进行解密
  9. M伪装成A写一封假的邮件,并用4中保存下来的B的公钥对邮件进行加密,再发送给B
  • 上述过程可以反复多次,B向A发送加密邮件也可能受到同样的攻击
  • 中间人攻击可以针对任何公钥密码,攻击过程中,公钥密码并没有被破译,所有的密码算法也都正常工作并确保了机密性,然而所谓的机密性并不存在在A与B之间,而成立在A与M之间与M与B之间
  • 仅靠公钥密码本身,是无法防御中间人攻击的,这种情况,可以使用公钥的证书

一些思考

公钥密码比对称密码的机密性更高?
  • 不一定
  • 机密性的高低是根据密钥长度而变化的
对称密码会消失?
  • 不会
  • 虽然有了公钥密码,但对称密码也不会消失
  • 一般来说,在采用具备同等机密性的密钥长度的情况下,公钥密码的处理速度只有对称密码的几百分之一,因此公钥密码并不适合用来对很长的消息内容进行加密
  • 根据目的的不同,还可能会配合使用对称密码和公钥密码
RSA使用过程中,质数对会不会被用光?
  • 不会
  • 512比特能够容纳的质数数量约为10的150次方,假设世界上有100亿人,每人每秒生成100亿个密钥对,那么在经过100亿年后会生成:100亿人 * 100亿个 * (366 * 24 * 60 * 60)秒 * 100亿年 = 316224 * 1032 < 1039 << 10150
RSA加密过程中需要对大整数进行质因数分解?
  • 不需要
  • RSA加密和解密的过程都无需对大整数进行质因数分解操作
  • 只有在需要有数N求p和q的密码破译过程中才需要对大整数进行质因数分解,RSA的设计是将质因数分解的难题留给密码破译者
N达到多少比特可以抵御质因数分解?
  • 不能抵御
  • N无论有多长,总有一天能被质因数分解,因此问题是能否在现实的时间内对N进行质因数分解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL使用join查询方式找出没有分类的电影id以及名称

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 现有电影信息…

分库分表真的适合你的系统吗?

曾几何时&#xff0c;“并发高就分库&#xff0c;数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问&#xff0c;博主喜欢写&#xff0c;候选人也喜欢背&#xff0c;似乎已经形成了一个闭环。 但你有没有思考过&#xff0c;分库分表真的适合你的系统吗&am…

QCustomPlot+ vs2022+ qt

零、printSupport 步骤一&#xff1a;下载QCustomPlot 访问QCustomPlot的官网 QCustomPlot 下载最新版本的源代码。 步骤二&#xff1a;配置项目 创建新的Qt项目&#xff1a; 打开VS2022&#xff0c;创建一个新的Qt Widgets Application项目。 将QCustomPlot源代码添加到项目…

场景管理分析平台介绍

在数字化浪潮的推动下&#xff0c;数据已成为企业决策的重要依据。特别是在智能驾驶、虚拟现实和物联网等领域&#xff0c;场景数据的高效管理和利用至关重要。在智能驾驶领域面对海量的场景数据&#xff0c;如何高效处理、精准分析&#xff0c;并将其转化为有价值的决策支持&a…

第一次作业

作业1 1.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&…

玩转Easysearch语法

Elasticsearch 是一个基于Apache Lucene的开源分布式搜索和分析引擎&#xff0c;广泛应用于全文搜索、结构化搜索、分析等多种场景。 Easysearch 作为Elasticsearch 的国产化替代方案&#xff0c;不仅保持了与原生Elasticsearch 的高度兼容性&#xff0c;还在功能、性能、稳定性…

Maven 分模块设计与开发 继承

介绍 在 Maven 中进行分模块设计&#xff08;multi-module project&#xff09;&#xff0c;可以帮助将一个大型项目分解为更小、更易管理的模块。这种设计方式有助于提高项目的可维护性、复用性和团队协作效率。 继承关系 目录结构 引入父Maven 父坐标 在子项目中引入父亲…

第一百四十五节 Java数据类型教程 - Java字符串类型

Java数据类型教程 - Java字符串类型 零个或多个字符的序列称为字符串。 在Java程序中&#xff0c;字符串由java.lang.String类的对象表示。 String类是不可变的。 String对象的内容在创建后无法修改。 String类有两个伴随类&#xff0c;java.lang.StringBuilder和java.lang.…

python-开关灯(赛氪OJ)

[题目描述] 假设有 N 盏灯&#xff08;N 为不大于 5000 的正整数&#xff09;&#xff0c;从 1 到到 N 按顺序依次编号&#xff0c;初始时全部处于开启状态&#xff1b;第一个人&#xff08; 1 号&#xff09;将灯全部关闭&#xff0c;第二个人&#xff08; 2 号&#xff09;将…

海睿思问数(TableGPT):开创企业新一代指标应用模式

1 指标建设对企业经营管理数字化的价值分析 指标是将海量数据中关键信息提炼和挖掘出来&#xff0c;以数据为载体展示企业经营管理和分析中的统计量。它通过分析数据&#xff0c;形成一个具有度量值的汇总结果&#xff0c;使得业务状态可以被描述、量化和分解。指标通常由度量…

竞赛选题 协同过滤电影推荐系统

文章目录 1 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …

2024/07/05

1、梳理笔记 2、课堂习题 1、循环输入一个5位数&#xff0c;判断它是不是回文数。当输入0时循环结束。 即12321是回文数&#xff0c;个位与万位相同&#xff0c;十位与千位相同。 #include<stdio.h> int main(int argc, char const *argv[]) {while(1){int num0;printf(…

绿色金融相关数据合集(2007-2024年 具体看数据类型)

数据类型&#xff1a; 1.绿色债券数据&#xff1a;2014-2023 2.绿色信贷相关数据&#xff1a;2007-2022 3.全国各省及地级市绿色金融指数&#xff1a;1990-2022 4.碳排放权交易明细数据&#xff1a;2013-2024 5.绿色金融试点DID数据&#xff1a;2010-2023 数据来源&#…

【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)

文章目录 定义简单工厂模式案例 | 代码Phone顶层接口设计Meizu品牌类Xiaomi品牌类PhoneFactory工厂类Customer 消费者类 工厂方法模式案例 | 代码PhoneFactory工厂类 Java高级特性---工厂模式与反射的高阶玩法方案&#xff1a;反射工厂模式 总结 其实工厂模式就是用一个代理类帮…

万界星空科技机械加工行业MES解决方案

机械加工行业作为制造业的重要组成部分&#xff0c;面临着生产效率、成本控制和产品质量提升等多重挑战。为了应对这些挑战&#xff0c;引入并实施制造执行系统&#xff08;MES&#xff09;成为了行业的必然选择。本文将详细介绍一种针对机械加工行业的MES解决方案&#xff0c;…

用MySQL+node+vue做一个学生信息管理系统(二):创建MySQL数据表、创建HTML用户列表页面

MySQL代码 CREATE DATABASE students;USE students;CREATE TABLE student( id INT COMMENT 学号, name VARCHAR(32) COMMENT 姓名, sex VARCHAR(8) COMMENT 性别, class VARCHAR(64) COMMENT 班级 )SHOW TABLES;下面介绍一下Vue框架的element-ui的使用方法&#xff0c;这里就不…

go 为什么是抢占式调度

GMP 模型 gmp模型是 golang 中用于调度管理 goroutine 的调度器。 调度器的发展史 在 Go 语言中&#xff0c;Goroutine 早期是没有设计成抢占式的&#xff0c;早期 Goroutine 只有读写、主动让出、锁等操作时才会触发调度切换。 这样有一个严重的问题&#xff0c;就是垃圾回…

鸿蒙笔记导航栏,路由,还有axios

1.导航组件 导航栏位置可以调整&#xff0c;导航栏位置 Entry Component struct t1 {build() {Tabs(){TabContent() {Text(qwer)}.tabBar("首页")TabContent() {Text(发现内容)}.tabBar(发现)TabContent() {Text(我的内容)}.tabBar("我的")}// 做平板适配…

【Springer出版 | EI稳定检索】第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024,7月19-21)

由浙江工业大学主办&#xff0c;第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024) 将于2024年7月19-21日在浙江杭州召开。 会议旨在为从事物联网、人工智能与机械自动化的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学…

基于java+springboot+vue实现的药店管理系统(文末源码+Lw)285

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;药品信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…