当前位置: 首页 > article >正文

RSA算法

文章目录

  • 1. 前言
  • 2. 基本概要
    • 2.1 欧拉函数
    • 2.2 模反元素
    • 2.3 RSA
  • 3. 加密过程
    • 3.1 参数选择
    • 3.2 流程
    • 3.3 习题
  • 4. 数字签名
    • 4.1 签名算法
    • 4.2 攻击
      • 4.2.1 一般攻击
      • 4.2.2 利用已有的签名进行攻击
      • 4.2.3 攻击签名获得明文
    • 4.3 应用

1. 前言

学习视频:【RSA加密算法】| RSA加密过程详解 | 公钥加密| 密码学| 信息安全|_哔哩哔哩_bilibili

2. 基本概要

2.1 欧拉函数

具体知识点学习《信息安全数学基础》

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

计算欧拉函数:

n = p q n=pq n=pq,且 p , q p,q p,q互质,则 φ ( n ) = φ ( p ∗ q ) = φ ( p ) ∗ φ ( q ) \varphi(n)=\varphi(p*q)=\varphi(p)*\varphi(q) φ(n)=φ(pq)=φ(p)φ(q)

2.2 模反元素

如果两个正整数 e e e φ ( n ) \varphi(n) φ(n)互质,那么一定可以找到一个整数 d d d,使得 e d − 1 ed-1 ed1 φ ( n ) \varphi(n) φ(n)整除,或者说 e d ed ed除以 φ ( n ) \varphi(n) φ(n)所得余数为1,此时, d d d就叫做 e e e的模反元素

2.3 RSA

RSA密码被誉为是一种风格幽雅的公开密钥密码,即可用于加密,又可用于数字签名,安全、易懂

3. 加密过程

3.1 参数选择

  1. p和q

    1. p和q要足够大
      一般应用:p和q应512b,使n达到1024b
      重要应用:p和q应1024b,使n达到2048b
    2. p和q应为强素数
    3. p和q的差要大
    4. (p-1)和(q-1)的最大公因子要小
  2. e的选择

  3. d的选择

3.2 流程

  1. 随机地选择两个大素数 p p p q q q,而且保密
  2. 计算 n = p q n=pq n=pq,将 n n n公开
  3. 计算 φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi (n)=(p-1)(q-1) φ(n)=(p1)(q1),对 φ ( n ) \varphi (n) φ(n)保密
  4. 随机地选取一个正整数 e e e 1 < e < φ ( n ) 1<e<\varphi(n) 1<e<φ(n) ( e , φ ( n ) ) = 1 (e, \varphi (n))=1 (e,φ(n))=1,将 e e e公开
  5. 根据 e d = 1   m o d   φ ( n ) ed=1\bmod \varphi(n) ed=1modφ(n),求出 d d d,并对 d d d保密
  6. 公钥: K e = < e , n > K_{e}=<e,n> Ke=<e,n>;私钥: K d = < d , p , q , φ ( n ) > K_{d}=<d,p,q,\varphi(n)> Kd=<d,p,q,φ(n)>
  7. 加密运算: C = M e   m o d   n C=M^e\bmod n C=Memodn
  8. 解密运算: M = C d   m o d   n M=C^d\bmod n M=Cdmodn

3.3 习题

4. 数字签名

对于RSA密码由于 D ( E ( M ) ) = ( M e ) d = M e d = ( M d ) e = E ( D ( M ) )   m o d   n D(E(M))=(M^e)^d=M^{ed}=(M^d)^e=E(D(M))\bmod n D(E(M))=(Me)d=Med=(Md)e=E(D(M))modn,因此RSA可同时确保数据的秘密性和真实性

4.1 签名算法

M M M为明文, K e A = < e , n > K_{eA}=<e,n> KeA=<e,n> A A A的公开加密钥, K d A = < d , p , q , φ ( n ) > K_{dA}=<d,p,q,\varphi(n)> KdA=<d,p,q,φ(n)> A A A的保密的解密钥

😄则 A A A M M M签名过程是: S A = D ( M , K d A ) = ( M d )   m o d   n S_A=D(M,K_{dA})=(M^d)\bmod n SA=D(M,KdA)=(Md)modn S A S_A SA便是 A A A M M M的签名

😄验证签名的过程: E ( S A , K e A ) = ( M d ) e   m o d   n = M E(S_A,K_{eA})=(M^d)^e \bmod n=M E(SA,KeA)=(Md)emodn=M

4.2 攻击

4.2.1 一般攻击

因为e和n是用户A的公开密钥,所以任何人都可以获得并使用e和n。攻击者可随意选择一个数据Y,并用A的公钥计算: X = ( Y ) e   m o d   n X=(Y)^e \bmod n X=(Y)emodn

因为 X = ( Y ) e   m o d   n X=(Y)^e \bmod n X=(Y)emodn,于是可以用Y伪造A的签名,因为Y是A对X的一个有效签名,这样的X往往无正确语义

4.2.2 利用已有的签名进行攻击

攻击者选择随机数据 M 3 M_3 M3,且 M 3 = M 1 M 2   m o d   n M_3=M_1M_2\bmod n M3=M1M2modn

攻击者设法让A对 M 1 M_1 M1 M 2 M_2 M2签名: S 1 = M 1 d   m o d   n , S 2 = ( M 2 ) d   m o d   n S_1={M_1}^d \bmod n ,S_2=(M_2)^d \bmod n S1=M1dmodn,S2=(M2)dmodn

于是可以由 S 1 S_1 S1 S 2 S_2 S2计算出A对 M 3 M_3 M3的签名,因为 S 1 S 2 = ( M 1 ) d ( M 2 ) d   m o d   n = ( M 3 ) d   m o d   n = S 3 S_1S_2=(M_1)^d(M_2)^d \bmod n=(M_3)^d \bmod n=S_3 S1S2=(M1)d(M2)dmodn=(M3)dmodn=S3

对策:A不对数据M签名,而是对HASH(M)签名

4.2.3 攻击签名获得明文

攻击者截获C, C = ( M ) e   m o d   n C=(M)^e \bmod n C=(M)emodn

攻击者选择小的随机数r,计算 x = r e   m o d   , y = x C   m o d   n , t = r − 1   m o d   n x=r^e \bmod ,y=xC \bmod n,t=r^{-1}\bmod n x=remod,y=xCmodn,t=r1modn

攻击者让A对y签名,于是攻击者又获得: S = y d   m o d   n S=y^d \bmod n S=ydmodn

攻击者计算: t S = r − 1 y d = r − 1 x d C d = C d = M   m o d   n tS=r^{-1}y^d=r^{-1}x^dC^d=C^d=M\bmod n tS=r1yd=r1xdCd=Cd=Mmodn

对策:A不对数据M签名,而是对 H A S H ( M ) HASH(M) HASH(M)签名

4.3 应用

PGP


http://www.kler.cn/a/406985.html

相关文章:

  • 开源宝藏:Smart-Admin 重复提交防护的 AOP 切面实现详解
  • 【线程】Java线程操作
  • 如何更改手机GPS定位
  • JVM中TLAB(线程本地分配缓存区)是什么
  • 如何理解 TypeScript 中命名空间与模块?两者都有那些区别?如何更好的应用?
  • C嘎嘎探索篇:和stack,queue的相遇
  • 4-测试viper读取配置文件数据 --开源项目obtain_data测试
  • el-table vue3统计计算数字
  • 深入理解Rust的模式匹配
  • qt 发布简单项目
  • 【项目日记】仿mudou的高并发服务器 --- 实现缓冲区模块,通用类型Any模块,套接字模块
  • IDEA中Spring Initializr jdk1.8 没有Java8选项问题处理办法
  • JavaScript的类型转换
  • 第二十六章 TCP 客户端 服务器通信 - $ZB 和 READ 命令
  • goframe开发一个企业网站 MongoDB 完整工具包19
  • c#:winform调用bartender实现打印(学习整理笔记)
  • 使用IDEA构建springboot项目+整合Mybatis
  • Redis相关面试题汇总
  • HARCT 2025 新增分论坛7:机器人和自动化的新趋势
  • CMake笔记:install(TARGETS target,...)无法安装的Debug/lib下
  • 常见LLM大模型概览与详解
  • 【AI日记】24.11.23 学习谷歌数据分析初级课程-第4课
  • linux通过手工删除文件卸载oracle 11g rac的具体步骤
  • Springboot项目搭建(4)-文章管理接口
  • 《操作系统 - 清华大学》4 -5:非连续内存分配:页表一反向页表
  • 3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理