RSA算法:开启现代密码学的数学之钥

news2025/3/12 12:58:55
一、RSA算法简介

RSA(Rivest-Shamir-Adleman)是当今应用最广泛的非对称加密算法,由三位科学家Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。它的核心思想是利用数论中的难题,构建一对数学上关联的密钥——公钥用于加密,私钥用于解密。使用公、私钥分离这种机制完美解决了对称加密中密钥分发的难题,成为互联网安全通信(如HTTPS、数字签名等)的基石。


二、RSA算法核心思想
算法目标
  1. 设计一种易于密钥分发的密码算法,以区别于对称密钥;
  2. 设计两把密钥,一把用于加密,一把用于解密。同时密钥不容易被破解;
  3. 加密密钥可以随意分发,只能用于加密,无法解密。
核心思想

根据算法目标,需要设计加密、解密两个过程,并且保证加密过程不可逆(即加密密钥不能解密出密文)。通过以下几步完成算法设计的目标。

  1. 利用模运算的不可逆性(即单向性)来设计加密和解密过程。
  2. 利用大质数分解困难的机制设计两把密钥
  3. 加密:将明文 m m m 通过指数运算和模运算转换为密文 c c c
    c ≡ m e ( m o d n ) c \equiv m^e \pmod{n} cme(modn)
  4. 解密:将密文 c c c 通过指数运算和模运算还原为明文 m m m
    m ≡ c d ( m o d n ) m \equiv c^d \pmod{n} mcd(modn)
    为了实现这一点,需要找到一对指数 e e e d d d,使得:
    ( m e ) d ≡ m ( m o d n ) (m^e)^d \equiv m \pmod{n} (me)dm(modn)

三、RSA算法的数学基础

要理解RSA,需要掌握几个数学知识。

  1. 模运算
    即“取余数运算”。例如 17 m o d    5 = 2 17 \mod 5 = 2 17mod5=2,表示17除以5的余数是2。
    模运算的不可逆性是指在模 n n n下,某些运算(如乘法或指数运算)难以通过逆向操作恢复原始值。模运算的不可逆性原因在于信息丢失。模运算会将结果限制在 0 0 0 n − 1 n-1 n1 之间,导致多个不同的输入可能映射到同一个输出。
    • 例如, 3 × 4 ≡ 12 ≡ 2 ( m o d 10 ) 3 \times 4 \equiv 12 \equiv 2 \pmod{10} 3×4122(mod10),但 3 × 14 ≡ 42 ≡ 2 ( m o d 10 ) 3 \times 14 \equiv 42 \equiv 2 \pmod{10} 3×14422(mod10)。仅知道结果是 2,无法确定原始值是 4 还是 14。
  2. 逆元
    • 单位元:在一个集合中,对于某种运算 ∗ * (注意:这里代表通用运算的表示符号,并不是特指乘法),如果对于任何的集合元素 a a a ,和元素 e e e运算,得到还是集合元素 a a a本身,则称 e e e为这个运算下的单位元。
      示例:
      加法运算中,任意实数 a a a,根据单位元的定义,有 a + e = e + a = a a+e=e+a=a a+e=e+a=a。因为 a + 0 = 0 + a = a a+0=0+a=a a+0=0+a=a,则单位元为 0 0 0
      乘法运算中,任意实数 a a a,根据单位元的定义,有 a × e = e × a = a a \times e=e \times a=a a×e=e×a=a。因为 a × 1 = 1 × a = a a \times 1=1 \times a=a a×1=1×a=a,则单位元为 1 1 1
      模乘运算中(即左右操作数是求余运算的乘法),任意实数 a a a的模n运算 a ( m o d n ) a \pmod n a(modn),根据单位元的定义,有 a ( m o d n ) × e ( m o d n ) = e ( m o d n ) × a ( m o d n ) = a ( m o d n ) a \pmod n \times e \pmod n=e \pmod n \times a \pmod n=a \pmod n a(modn)×e(modn)=e(modn)×a(modn)=a(modn)。因为 a ( m o d n ) × 1 ( m o d n ) = 1 ( m o d n ) × a ( m o d n ) = a ( m o d n ) a \pmod n \times 1 \pmod n=1 \pmod n \times a \pmod n=a \pmod n a(modn)×1(modn)=1(modn)×a(modn)=a(modn),则单位元为 1 ( m o d n ) 1 \pmod n 1(modn)。附:证明过程。
    • 逆元:在一个集合中,对于某种运算 ∗ * ,如果任意两个元素的运算结果等于单位元,则称这两个元素互为逆元。
      示例
      加法运算中,任意实数 a a a的逆元为 − a -a a。因为加法的单位元为 0 0 0,根据逆元的定义,可令 a + e = e + a = 0 a+e=e+a=0 a+e=e+a=0,则 e = − a e=-a e=a。即相反数。
      乘法运算中,任意实数 a a a的逆元为 a − 1 a^{-1} a1 1 a \frac{1}{a} a1。因为乘法的单位元为 1 1 1,根据逆元的定义,可令 a × e = e × a = 1 a \times e=e \times a=1 a×e=e×a=1,则 e = a − 1 e=a^-1 e=a1 e = 1 a e=\frac{1}{a} e=a1。即倒数。
      模乘中,设定模乘的逆元表示为 a − 1 ( m o d n ) a^-1 \pmod n a1(modn)。因为模乘的单位元为 1 ( m o d n ) 1 \pmod n 1(modn),根据逆元的定义,可令 a ( m o d n ) × a − 1 ( m o d n ) = 1 ( m o d n ) a \pmod n \times a^{-1} \pmod n = 1 \pmod n a(modn)×a1(modn)=1(modn)。根据模运算的性质,即等号左右两边模 n n n同余,所以前述式子可写为 a × a − 1 ≡ 1 ( m o d n ) a \times a^{-1} \equiv 1 \pmod n a×a11(modn)。为求得 a − 1 a{-1} a1,可采用扩展欧几里德定理求解逆元。
  3. 欧拉函数
    符号 ϕ ( n ) \phi(n) ϕ(n),表示小于 n n n 且与 n n n 互质的正整数个数。
    • 关键性质:若 n = p × q n = p \times q n=p×q p p p q q q 为质数),则:
      ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \phi(n) = (p-1) \times (q-1) ϕ(n)=(p1)×(q1)
      ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \phi(n) = (p-1) \times (q-1) ϕ(n)=(p1)×(q1)是欧拉函数的一个特殊形式(当 n n n是两个不同的质数 p p p q q q时成立)。
      示例 n = 15 = 3 × 5 n=15=3 \times 5 n=15=3×5,则 ϕ ( 15 ) = 2 × 4 = 8 \phi(15) = 2 \times 4 = 8 ϕ(15)=2×4=8,即与15互质的数为 {1,2,4,7,8,11,13,14}。
  4. 欧拉定理
    m m m n n n 互质,则:
    m ϕ ( n ) ≡ 1 ( m o d n ) m^{\phi(n)} \equiv 1 \pmod{n} mϕ(n)1(modn)
  5. 大数分解问题
    大质数在数轴上的分布非常稀疏,且没有明显规律可循,使得暴力搜索不可行。黎曼猜想即是想解决质数分布问题。
  6. 离散对数问题
    c = m e ( m o d ϕ ( n ) ) c=m^e \pmod{\phi(n)} c=me(modϕ(n)),可以简单理解为有 ϕ ( n ) \phi(n) ϕ(n)个房间, c c c是其中一个房间,问题是找到一个整数 e e e(可以理解为步数),让你从房间 m m m出发,走多少步(求 e e e)能到达房间 c c c。而通常 ϕ ( n ) \phi(n) ϕ(n) e e e都是非常大的质数,且 ϕ ( n ) \phi(n) ϕ(n)未知,你需要一步步验证才能找到正确的 e e e(即使 e e e通常取值为65537)。

四、RSA的加密与解密过程

RSA的实现分为密钥生成加密解密三个阶段:

1. 密钥生成
  • 步骤1:随机选择两个大质数 p p p q q q
  • 步骤2:计算模数 n = p × q n = p \times q n=p×q ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \phi(n) = (p-1) \times (q-1) ϕ(n)=(p1)×(q1)
  • 步骤3:选择公钥指数 e e e,需满足 1 < e < ϕ ( n ) 1 < e < \phi(n) 1<e<ϕ(n) e e e 与 $ \phi(n)$ 互质(例如 e = 65537 e=65537 e=65537)。
  • 步骤4:计算私钥指数 d d d,使得 e × d ≡ 1 ( m o d ϕ ( n ) ) e \times d \equiv 1 \pmod{\phi(n)} e×d1(modϕ(n))。即求 e ( m o d ϕ ( n ) ) e \pmod{\phi(n)} e(modϕ(n))的模乘逆元。
    数学工具:使用扩展欧几里得算法求模乘逆元。

最终密钥对

  • 公钥: ( n , e ) (n, e) (n,e)
  • 私钥: ( n , d ) (n, d) (n,d)

2. 加密过程

假设Bob想发送明文 m m m 给Alice:

  1. Bob获取Alice的公钥 ( n , e ) (n, e) (n,e)
  2. 将明文转换为整数 m m m(如ASCII码),且 m < n m < n m<n
  3. 计算密文 c ≡ m e ( m o d n ) c \equiv m^e \pmod{n} cme(modn),发送 c c c 给Alice。

3. 解密过程

Alice收到密文 c c c 后:

  1. 使用私钥 ( n , d ) (n, d) (n,d) 计算 m ≡ c d ( m o d n ) m \equiv c^d \pmod{n} mcd(modn)
  2. 将整数 m m m 还原为原始信息。

数学证明
由欧拉定理可证明,若 m m m n n n 互质,则:
c d ≡ ( m e ) d ≡ m e × d ≡ m k ⋅ ϕ ( n ) + 1 ≡ ( m ϕ ( n ) ) k ⋅ m ≡ 1 k ⋅ m ≡ m ( m o d n ) c^d \equiv (m^e)^d \equiv m^{e \times d} \equiv m^{k \cdot \phi(n) + 1} \equiv (m^{\phi(n)})^k \cdot m \equiv 1^k \cdot m \equiv m \pmod{n} cd(me)dme×dmkϕ(n)+1(mϕ(n))km1kmm(modn)

安全性

  • 公钥 ( n , e ) (n, e) (n,e)是公开的
  • 根据 e e e d d d的关系, e × d ≡ 1 ( m o d ϕ ( n ) ) e \times d \equiv 1 \pmod{\phi(n)} e×d1(modϕ(n))可知,如果想破解 d d d,则需要知道 ϕ ( n ) \phi(n) ϕ(n)
  • ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \phi(n)=(p-1) \times (q-1) ϕ(n)=(p1)×(q1) n = p × q n=p \times q n=p×q,如果想破解 ϕ ( n ) \phi(n) ϕ(n) n n n,则需要知道 p p p q q q
  • 但从 n n n分解出 p p p q q q在计算上是困难的,因此想破解 p p p q q q是不可能的。——依据大数分解问题
  • 如果想绕开 p p p q q q,在未知 d d d的情况下,从 c ≡ m e ( m o d n ) c \equiv m^e \pmod n cme(modn)反推 m m m是困难的(即从密文直接反推明文是困难的)。——依据离散对数问题

五、示例演示

p = 3 p=3 p=3 q = 5 q=5 q=5 为例:

  1. n = 3 × 5 = 15 n = 3 \times 5 = 15 n=3×5=15 ϕ ( n ) = 2 × 4 = 8 \phi(n) = 2 \times 4 = 8 ϕ(n)=2×4=8
  2. e = 3 e=3 e=3(需与8互质)。
  3. d d d,使得 3 d ≡ 1 ( m o d 8 ) 3d \equiv 1 \pmod{8} 3d1(mod8),解得 d = 3 d=3 d=3
  4. 加密:若 m = 2 m=2 m=2,则 c = 2 3 m o d    15 = 8 c = 2^3 \mod 15 = 8 c=23mod15=8
  5. 解密 8 3 m o d    15 = 512 m o d    15 = 2 8^3 \mod 15 = 512 \mod 15 = 2 83mod15=512mod15=2

六、总结

RSA通过巧妙的数学设计,将加密强度建立在大数分解、离散对数的复杂性上。公钥加密、私钥解密的非对称性,使得信息传输既安全又便捷。其背后依赖的欧拉定理与模运算,不仅是数论的瑰宝,更是现代数字社会的安全支柱。理解RSA,不仅是学习一个算法,更是窥见数学与工程完美融合的窗口。

欢迎关注个人公众号:小虫子编程课
关注个人公众号

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

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

相关文章

Android Compose Surface 完全指南:从入门到花式操作

今天咱们来聊聊 Compose 世界里那个既基础又强大的组件——Surface。这个看似简单的矩形区域&#xff0c;实际藏着不少宝藏玩法&#xff0c;准备好你的 IDE&#xff0c;咱们发车&#xff01; 一、Surface 是什么&#xff1f; 简单说&#xff0c;Surface 就是个自带背景和样式…

Deepin通过二进制方式升级部署高版本 Docker

一、背景&#xff1a; 在Deepin系统中通过二进制方式升级部署高版本 Docker&#xff0c;下面将详细介绍二进制方式升级部署高版本 Docker 的具体步骤。 二、操作步骤 1.根据需求下载二进制文件&#xff0c;下载地址如下&#xff1a; https://mirrors.tuna.tsinghua.e…

python中time模块的常用方法及应用

Python 的 time 模块是自带的标准模块&#xff0c;不需要额外安装&#xff0c;可以直接通过import time的方式导入并使用其中的函数和类。该模块提供了与时间相关的各种功能&#xff0c;以下是一些常用方法及其应用场景和示例&#xff1a; ### 1. time.time() - **功能**&…

【RTSP】客户端(一):RTSP协议实现

概述 RTSP主要功能总结 RTSP本质是一个应用层协议&#xff0c;主要用于控制实时数据的传递&#xff0c;例如音视频流。RTSP的传输方式与HTTP类似&#xff0c;与HTTP不同在于RTSP主要用于控制传输媒体服务器上的流媒体会话。所以其是一个 客户端-服务器模型&#xff0c;客户端需…

SpringBoot(一)--搭建架构5种方法

目录 一、⭐Idea从spring官网下载打开 2021版本idea 1.打开创建项目 2.修改pom.xml文件里的版本号 2017版本idea 二、从spring官网下载再用idea打开 三、Idea从阿里云的官网下载打开 ​编辑 四、Maven项目改造成springboot项目 五、从阿里云官网下载再用idea打开 Spri…

【工控】线扫相机小结 第五篇

背景介绍 线扫相机通过光栅尺的脉冲触发&#xff0c; 我在调试线扫过程中&#xff0c;发现图像被拉伸&#xff0c;预设调节分配器。图像正常后&#xff0c;我提高的相机的扫描速度&#xff08;Y轴动的更快了&#xff09;。 动的更快的发现&#xff0c;图像变短了&#xff08;以…

【STM32F103C8T6】DMA数据转运ADC多通道

前言 本节为代码部分&#xff0c;知识点在这【江协科技STM32】DMA直接存储器存储-学习笔记-CSDN博客 查看数据地址&#xff1a; uint8_t aa 0x88;int main(void) {OLED_Init();OLED_ShowHexNum(1,1,aa,4); //显示十六进制数 OLED_ShowHexNum(2,1,(uint32_t)&aa,8);wh…

计算机网络--访问一个网页的全过程

文章目录 访问一个网页的全过程应用层在浏览器输入URL网址http://www.aspxfans.com:8080/news/index.aspboardID5&ID24618&page1#r_70732423通过DNS获取IP地址生成HTTP请求报文应用层最后 传输层传输层处理应用层报文建立TCP连接传输层最后 网络层网络层对TCP报文进行处…

JVM G1垃圾回收器详细解析

G1内存布局 Garbage First(简称G1)收集器摒弃了传统垃圾收集器的严格的内存划分&#xff0c;而是采用了基于Region的内存布局形式和局部回收的设计思路。 G1垃圾收集器把Java堆划分为2048个大小相等的独立的Region&#xff0c;每个Region大小取值范围为1-32MB&#xff0c;且必…

OpenGL中绘制图形元素的实现(使用visual studio(C++)绘制一个矩形)

目标&#xff1a;使用OpenGL提供的函数绘制矩形、线段、三角形等基本图形元素 所需效果 实验步骤 1、配置OpenGL&#xff08;详情参见OpenGL的配置&#xff09; 2、头文件引入 #include <gl/glut.h> 3、编写方法体 1>矩形实现 //绘制矩形 void DisplayRectangl…

数据库---sqlite3

数据库&#xff1a; 数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer …

【阿里云】控制台使用指南:从创建ECS到系统诊断测评

前言 随着云计算技术的快速发展&#xff0c;越来越多的企业和开发者开始使用云服务来部署和管理应用程序。在众多云服务提供商中&#xff0c;阿里云&#xff08;Alibaba Cloud&#xff09;凭借其强大的基础设施和丰富的服务&#xff0c;成为了众多用户的首选。本文旨在介绍如何…

简易的微信聊天网页版【项目测试报告】

文章目录 一、项目背景二、项目简介登录功能好友列表页面好友会话页面 三、测试工具和环境四、测试计划测试用例部分人工手动测试截图web自动化测试测试用例代码框架配置内容代码文件&#xff08;Utils.py&#xff09;登录页面代码文件&#xff08;WeChatLogin.py&#xff09;好…

基于腾讯云高性能HAI-CPU的跨境电商客服助手全链路解析

跨境电商的背景以及痛点 根据Statista数据&#xff0c;2025年全球跨境电商市场规模预计达6.57万亿美元&#xff0c;年增长率保持在12.5% 。随着平台规则趋严&#xff08;如亚马逊封店潮&#xff09;&#xff0c;更多卖家选择自建独立站&#xff0c;2024年独立站占比已达35%。A…

北京迅为RK3568开发板OpenHarmony系统南向驱动开发内核HDF驱动框架架构

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

从0到1入门Docker

一、快速入门 Docker run命令中的常见参数 -d&#xff1a;让容器后台运行--name&#xff1a;给容器命名&#xff08;唯一&#xff09;-e&#xff1a;环境变量-p&#xff1a;宿主机端口映射到容器内端口镜像名称结构&#xff1a;Repository &#xff1a;TAG&#xff08;镜像名&…

应用篇| 抓包工具-charles的使用

上文说到,我们app爬虫要借助一些抓包工具,本节课就教大家如何使用抓包工具分析app的流量。抓包工具的使用是app爬虫的必修课。相比 Fiddler 来说,Charles 的功能更强大,而且跨平台支持更好。 charles安装 官方网站:https://www.charlesproxy.com 下载链接:Download a F…

Docker搭建Redis哨兵模式【一主两从三哨兵】

Docker搭建Redis哨兵模式 系统: CentOS 7 Dockder 版本: VMware虚拟机 网络适配器 网络连接 桥接模式:直接连接物理网络查看IP命令 ip addr一、哨兵模式概述 1. 官方文档与关联博客 官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel关联博…

labview实现大小端交换移位

在解码时遇到了大小端交换的问题&#xff0c;需要把高低字节的16进制值进行互换&#xff0c;这里一时间不知道怎么操作&#xff0c;本来打算先把16进制转字节数组&#xff0c;算出字节数组的大小&#xff0c;然后通过模2得到0&#xff0c;1&#xff0c;来判断是否为奇数位和偶数…

Three.js 进阶(灯光阴影关系和设置、平行光、阴影相机)

本篇主要学习内容 : 灯光与阴影聚光灯点光源平行光阴影相机和阴影计算投射阴影接受阴影 点赞 关注 收藏 学会了 1.灯光与阴影 1、材质要满足能够对光有反应 2、设置渲染器开启阴影计算 renderer.shadowMap.enabledtrue 3、设置光照投射阴影 directionalLight.castShadow …