RSA详解

一、RSA 简介

RSA 是一种公钥密码体制,由罗纳德・李维斯特(Ron Rivest)、阿迪・萨莫尔(Adi Shamir)和伦纳德・阿德曼(Leonard Adleman)于 1977 年提出,算法名称由他们三人姓氏的首字母组成。与对称加密算法不同,RSA 使用不同的加密密钥与解密密钥,属于非对称加密方式。

RSA 涉及三个重要参数:n、e、d。其中,(n, e) 作为公钥可对外公开,(n, d) 则作为私钥由用户妥善保存。这里的 n 是两个大素数 p 和 q 的乘积,即 n = p * q;e 是一个满足 1 < e < φ(n) 且与 φ(n) 互素的整数,其中 φ(n) 是 n 的欧拉函数值,在 RSA 算法中,φ(n) = (p - 1) * (q - 1) ;d 是 e 关于模 φ(n) 的乘法逆元,即满足 e * d ≡ 1 (mod φ(n)) 。

二、算法原理

(一)费马小定理

若 p 为素数,对于任意整数 a,满足 a^(p - 1) ≡ 1 (mod p) 。该定理在 RSA 算法原理推导中起到了一定的铺垫作用。例如,当 p = 5,a = 3 时,3^(5 - 1) = 81,81 mod 5 = 1,符合费马小定理。

(二)欧拉定理

  1. 欧拉函数:对于任意给定的正整数 n,欧拉函数 φ(n) 表示小于等于 n 的正整数中与 n 构成互质关系的数的个数。在 RSA 算法中,若 n = p * q(p、q 为互质的素数),则有 φ(n) = φ(pq) = φ(p) * φ(q) ,且当 p 为质数时,φ(p) = p - 1,所以 φ(n) = (p - 1) * (q - 1) 。
  1. 欧拉定理与模反元素:若两个正整数 a 和 n 互质,则存在 a^φ(n) ≡ 1 (mod n) 。从这个等式可以推导出模反元素的概念,因为 a^φ(n) = a * a^(φ(n) - 1) ≡ 1 (mod n) ,所以如果两个正整数 a 和 n 互质,那么一定存在整数 b(这里 b = a^(φ(n) - 1) ),使得 a * b - 1 能被 n 整除,即 a * b 被 n 除的余数是 1,b 就是 a 关于模 n 的模反元素。在 RSA 算法中,求私钥 d 的公式为 d * e ≡ 1 (mod (p - 1) * (q - 1)) ,即 d 是 e 关于模 (p - 1) * (q - 1) 的模反元素。

(三)模运算

模运算与基本四则运算类似,但除法运算有所不同。其具有结合律、交换律、分配律等性质。同余的定义为:给定一个正整数 m,如果两个整数 a 和 b 满足 (a - b) 能被 m 整除,即 (a - b) mod m = 0,则称 a 和 b 对模 m 同余。在模 n 意义下,除法规则有所变化,除以一个数等价于乘以它的逆元。

(四)拓展欧几里得原理

对于互素的两个整数 e1、e2,可以通过拓展欧几里得算法求解满足 e1 * x + e2 * y = gcd (e1, e2) 的整数 x 和 y。在 RSA 算法中,计算 e 关于模 φ(n) 的乘法逆元 d 时,可以利用拓展欧几里得算法,此时 e1 = e,e2 = φ(n),求解出的 x 即为 d(需确保 x 为正数,若为负数则通过模运算转换为正数)。

三、算法流程

图解版:

文解版:

(一)密钥生成

  1. 选取大素数 p、q:随机选取两个大素数 p 和 q,并严格保密这两个数。例如,假设选取 p = 17,q = 19(实际应用中 p 和 q 通常是非常大的素数)。
  1. 计算乘积 n、欧拉函数值 φ(n)
    • 计算 n = p * q ,在上述例子中,n = 17 * 19 = 323。
    • 计算 φ(n) = (p - 1) * (q - 1) ,即 φ(323) = (17 - 1) * (19 - 1) = 16 * 18 = 288。
  1. 选取整数 e:选取一个整数 e,满足 1 <e < φ(n) 且 gcd (φ(n), e) = 1(即 e 与 φ(n) 互素)。例如,选取 e = 5(5 与 288 互素)。
  1. 计算乘法逆元 d:计算 d,使得 d * e ≡ 1 (mod φ(n)) 。这里利用拓展欧几里得算法,对于 e = 5,φ(n) = 288,求解 5 * d ≡ 1 (mod 288) ,通过计算可得 d = 173(因为 5 * 173 = 865,865 mod 288 = 1)。
  1. 生成密钥
    • 公开钥为 {e, n},即 {5, 323}。
    • 秘密钥为 {d, n},即 {173, 323}。

(二)加密

加密时需将明文比特串进行分组,分组长度要小于 log₂n 。假设明文 m = 88(满足小于 log₂323 ≈ 8.34,即分组长度合理),对明文分组 m 进行加密运算,公式为 c ≡ m^e (mod n) 。代入 e = 5,n = 323,m = 88,计算可得 c = 88^5 mod 323 = 233,得到的 c = 233 即为密文。

(三)解密

对密文分组 c 进行解密运算,公式为 m ≡ c^d (mod n) 。将 c = 233,d = 173,n = 323 代入,计算可得 m = 233^173 mod 323 = 88,成功还原出明文。

四、安全性分析

RSA 的安全性主要依赖于大数分解的难度,即给定 n = p * q,要从 n 分解出 p 和 q 在计算上是非常困难的。目前尚未从理论上证明破解 RSA 就一定等同于进行大数分解,也没有证明破译 RSA 的难度与大数分解难度完全等价。但无论如何,分解 n 是攻击 RSA 的最直接方法。随着计算机计算能力的不断提升,为了保证 RSA 的安全性,需要选择足够大的 p 和 q,使 n 的长度足够长。例如,早期较短长度的 RSA 密钥已能被破解,如今通常推荐使用 2048 位甚至更长的密钥长度。同时,密钥生成过程中的随机数生成质量、p 和 q 的选取方式等也对 RSA 的安全性有重要影响。若随机数可预测、p 和 q 选择不当(如太靠近或 p - 1、q - 1 的因子太小等),都可能导致 RSA 被破解。

五、应用场景

RSA 广泛应用于现代通信加密、数字签名等领域。在通信加密中,发送方使用接收方的公钥对消息进行加密,接收方使用自己的私钥进行解密,保证了通信内容的保密性。在数字签名场景中,发送方使用自己的私钥对消息进行签名(对消息的哈希值进行加密),接收方使用发送方的公钥验证签名,确保消息的完整性和发送方身份的真实性。例如在网络支付、安全邮件传输等场景中,RSA 算法都发挥着关键作用,保障了信息的安全传输与交互。

六、总结

RSA 作为一种重要的非对称加密算法,其原理基于数论中的多个定理,通过巧妙的密钥生成、加密和解密流程,实现了安全的信息加密与数字签名功能。理解 RSA 算法对于掌握现代密码学知识、保障信息安全具有重要意义。同时,随着技术的发展,需持续关注 RSA 的安全性,不断优化参数选择与应用方式,以应对潜在的安全威胁。

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

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

相关文章

Linux获取物理硬盘总容量

获取物理硬盘总容量: 1.查看单个硬盘: 使用 lsblk 或 fdisk -l (需要 sudo) 命令。它们会直接列出物理硬盘 (sda, nvme0n1 等) 和它们的分区,并显示硬盘的总物理容量。 abcd四块物理盘,只挂载使用3块,留一块未使用 最常见的原因通常是配置了热备盘(RAID 1/5/6/10 等冗余…

STM32学习笔记14-I2C硬件控制

I2C外设简介STM32内部集成了硬件I2C收发电路&#xff08;硬件收发器&#xff1a;自动生产波形&#xff0c;自动翻转电平等&#xff09;&#xff0c;可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能&#xff0c;减轻CPU的负担——软件只需要写入控制…

电子电气架构 --- 软件开发数字化转型

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

我国空间站首次应用专业领域 AI大模型

据中国载人航天工程办公室消息&#xff0c;北京时间2025年8月15日22时47分&#xff0c;经过约6.5小时的出舱活动&#xff0c;神舟二十号乘组航天员陈冬、陈中瑞、王杰密切协同&#xff0c;在空间站机械臂和地面科研人员的配合支持下&#xff0c;圆满完成既定任务&#xff0c;出…

WPF真入门教程35--手搓WPF出真汁【蜀味正道CS版】

1、项目介绍 本项目采用多层架构设计&#xff0c;使用wpf&#xff0c;Panuon.UI.Silver控件库&#xff0c;AduSkin皮肤&#xff0c;MVVM等技术开发具有复杂交互和视觉效果的CS应用程序。WPF适用于企业级桌面应用&#xff1a;如ERP、CRM系统&#xff0c;需复杂表单和报表。WPF适…

JMeter与大模型融合应用之构建AI智能体:评审性能测试脚本

JMeter与大模型融合应用之构建AI智能体&#xff1a;评审性能测试脚本 一、引言 随着DevOps和持续测试的普及&#xff0c;性能测试已成为软件开发生命周期中不可或缺的环节。Apache JMeter作为最流行的开源性能测试工具之一&#xff0c;被广泛应用于各种性能测试场景。然而&…

K8s 和 Docker的区别

一、各自诞生背景——为什么需要两个东西Docker&#xff08;2013&#xff0c;Docker Inc.&#xff09; • 目的&#xff1a;解决“我的代码在你机器跑不起来”的经典环境问题。 • 做法&#xff1a;用 Linux 内核的 cgroup/namespace 做轻量隔离&#xff0c;把“应用 依赖”打…

10.0 UML的介绍以及VisualStudio中查看类图

本文介绍UML图的含义、以及如何在VisualStudio中查看类图。 一、UML图介绍 UML(Unified Modeling Language,统一建模语言)是一种标准化的建模语言,用于可视化、规范、构建和记录软件系统的各个方面的图表工具。 UML图分为结构图和行为图两大类: 结构图‌…

【Virtual Globe 渲染技术笔记】6 着色

着色&#xff08;Shading&#xff09; 曲面细分只是地球渲染的第一步。接下来是着色——通过模拟光线与材质的相互作用&#xff0c;计算每个像素的最终颜色。本节先回顾基础的光照与纹理映射&#xff0c;再讲解虚拟地球特有的经纬网格和夜景灯光效果。6.1 光照&#xff08;Ligh…

OpenCV Python——图像拼接(一)(图像拼接原理、基础知识、单应性矩阵 + 图像变换 + 拼接)

1 图像拼接基础知识1.1 特征匹配 原理及代码示例1.2 单应性矩阵 原理及代码示例2 图像拼接&#xff08;一&#xff09;&#xff08;直接拼接&#xff09;3 图像拼接&#xff08;二&#xff09;&#xff08;单应性矩阵 图像变换 拼接&#xff09;3.1 单应性矩阵函数3.2 拼接函…

Git 中切换到指定 tag

在 Git 中切换到指定 tag&#xff08;比如 v1.22.1&#xff09;的正确做法如下&#xff1a;1️⃣ 查看已有的 taggit tag会列出所有可用的版本&#xff0c;比如&#xff1a;v1.21.0 v1.22.0 v1.22.1 v1.23.02️⃣ 切换到指定 taggit checkout tags/v1.22.1 -b v1.22.1解释&…

rust 从入门到精通之变量和常量

变量和常量 随着软件系统安全的重要性与日俱增, rust这门集聚高并发, 安全, 适配云环境的编程语言在市场上得到了越来越高的认可和关注。但其复杂的机制使其难以学习。且其很多特性对于其他语言是全新的&#xff0c;这加剧了学习的困难程度。教程主要针对rust基础进行讲解, 虽然…

2508C++,支持rdma通信的高性能rpc库

原文 [重磅]支持rdma通信的高性能的rpc库–yalantinglibs.coro_rpc yalantinglibs的coro_rpc是基于C20的协程的高性能的rpc库,提供了简洁易用的接口,让用户几行代码就可实现rpc通信,现在coro_rpc除了支持tcp通信之外还支持了rdma通信(ibverbs). 通过简单示例来感受一下rdma通…

FastAPI + React:现代 Web 前后端分离开发的全栈实践指南

一、为什么选 FastAPI React&#xff1f; 性能&#xff1a;FastAPI 基于 Starlette Uvicorn&#xff0c;QPS 与 Node/Go 同级&#xff0c;实测 3 倍于 Flask&#xff1b;React 虚拟 DOM 代码分割&#xff0c;首屏 < 1.2 s。效率&#xff1a;FastAPI 内置 Swagger/OpenAPI…

嵌入式硬件篇---电平转换电路

电平转换电路是电子电路中用来实现不同电压信号之间转换的关键电路&#xff0c;比如把 3.3V 的信号转换成 5V&#xff0c;或者把 5V 转换成 1.8V&#xff0c;确保不同电压的芯片、模块能正常通信。下面用通俗易懂的方式介绍几种常见的电平转换电路&#xff1a;一、电阻分压电路…

SAP ABAP IS SUPPLIED

效果 此谓词表达式用于检查过程的某个形式参数“para”是否已赋值或被请求使用。如果在调用时实际参数被赋值给了该形式参数&#xff0c;则该表达式为真。 这种关系表达式仅能在函数模块和方法中使用。而对于“para”而言&#xff0c;所有可选的形参都可以进行指定。 加上“NOT…

视频内容提取与AI总结:提升学习效率的实用方法

文章目录1、前言2、方法介绍2.1 B站视频处理方案2.2 通用视频处理方案2.3 AI内容总结3、实际效果4、使用建议5、技术发展趋势6、总结&#x1f343; 作者介绍&#xff1a;25届双非本科网络工程专业&#xff0c;阿里云专家博主&#xff0c;专注于 AI 原理、AI 应用开发、AI 产品设…

JVM 面试精选 20 题

目录1. 什么是 JVM、JDK 和 JRE&#xff1f;它们之间的关系是什么&#xff1f;2. Java 内存区域&#xff08;运行时数据区&#xff09;有哪些&#xff1f;3. 说说你对 JVM 垃圾回收机制的理解。4. 常用的垃圾回收算法有哪些&#xff1f;5. 什么是 Minor GC、Major GC 和 Full G…

CMIP6 气候模式核心特性解析

在全球气候变化研究中&#xff0c;CMIP6&#xff08;第六次耦合模式比较计划&#xff09;的气候模式是关键工具。以下从研发背景与核心能力角度&#xff0c;解析五类主流模式的技术特点与适用场景。 一、主流模式技术特性 1. CanESM5/CanESM5-1&#xff08;加拿大环境与气候变…

【牛客刷题】BM63 跳台阶:三种解法深度解析(递归/DP动态规划/记忆化搜索)

文章目录 一、题目介绍 1.1 题目描述 1.2 示例 二、算法设计思路 2.1 核心问题分析 2.2 斐波那契数列关系 三、流程图 解法1:递归法(自顶向下) 解法2:动态规划(自底向上) 解法3:记忆化搜索(递归优化) 解法4: 优化DP流程(推荐) 四、解法实现 五、复杂度分析对比 六、…