【现代密码学原理】——公钥密码学与RSA(学习笔记)

RSA公钥加密体制 RSA是第一个安全、实用的公钥加密算法,已成为国际标准,是目前应用广泛的公钥加密体制。RSA的基础是数论的欧拉定理,它的安全性依赖于大整数因子分解的困难性。 阅读详情

📖 前言:公钥或对称密码学的发展是整个密码学发展史是最伟大的一次革命。从密码学产生至今,几乎所有的密码体制都是基于代替和置换这些初等方法的。几千年来,人们对算法的研究主要是通过手工计算完成的。随着转轮加密/解密机器的出现,对称密码学有了很大的发展,利用电子机械转轮可以开发出极其复杂的加密系统,利用计算机甚至可以设计出更加复杂的系统,最著名的例子是 Lucifer 在IBM公司实现数据加密标准(DES)时设计的系统。转轮机和DES是密码学发展的重要标志,但它们都是基于代替和置换这些初等方法的。
公钥密码学与此前的密码学完全不同。首先,公钥算法基于数学函数而非代替和置换,更重要的是,与只用一个密钥的对称密码不同,公钥密码是非对称的,它使用两个独立的密钥。我们将会看到,使用两个密钥在消息的保密性、密钥分发和认证领域有着重要意义。

在这里插入图片描述


🕒 0. 思维导图

在这里插入图片描述

🕒 1. 公钥密码学

🕘 1.1 发展历程

🕤 1.1.1 古典密码时期

在这里插入图片描述

  • 密码技术可以说是艺术而不是科学,密码学家们常凭直觉或信念来进行密码设计和分析,而不是通过推理证明
  • 密码体制较为简单、易于破解,主要应用于军事、政治、外交

🕤 1.1.2 近代密码时期

在这里插入图片描述

  • 20世纪60年代以来,计算机和通信系统逐渐普及,带动了数字信息保护以及各种安全服务的需求
  • 在这段时期形成了著名的数据加密标准DES与高级加密标准AES

🕤 1.1.3 现代密码时期

在这里插入图片描述

  • 1976年Diffie 和Hellman 联合发表论文《密码学的新方向》,引入了公钥密码学的革命性概念
  • 虽然并没有提供明确的公钥加密方案,但他们的思想在密码学领域引起了广泛兴趣,促进了公钥密码体制的发展

🕘 1.2 特征

  • 传统对称密码,基于代替和置换这些初等方法,并且只使用一个密钥
  • 公钥密码体制完全不同,它基于数学函数,使用两个独立的密钥

🕘 1.3 误区

🕤 1.3.1 更安全?

  • 任何加密算法的安全性都依赖于密钥的长度、破译密文需要的计算量
  • 与密码属于公钥密码还是对称密码无关

🕤 1.3.2 更普及?

  • 现有的公钥加密方案计算量大,无法适用于所有信息的加密,仅限于密钥管理、数字签名等应用
  • 目前仍是对称加密应用范围更广

🕤 1.3.3 更容易?

  • 对称密码中通信双方使用的密钥要保持一致,需要密钥分配中心使用某种分配协议来实现
  • 公钥密码中密钥的分配也需如此

🕒 2. 公钥密码体制

🕘 2.1 对称密码的问题

Alice 和Bob 使用某对称密码来加密消息,双方要使用相同密钥K
在这里插入图片描述

1)密钥 K 可以由 Bob 指定,加密后发送给 Alice

在这里插入图片描述

2)密钥 K 也可以由 Bob 设定后,将 K 交给密钥管理中心KDC,由KDC 分配给Alice

【问题】
现在通信双方与KDC 共享密钥,作为通信本身的参与者,Alice 和 Bob是不会将密钥 K 泄露出去的

而存放在KDC数据库中的密钥 K 则面临着盗窃、索取等安全风险
在这里插入图片描述

一旦Alice 和Bob 的这把密钥K被泄露,那么无论他们采取多么强壮的加密算法,其实都是徒劳。

🕘 2.2 数字签名的问题

Bob 要给Alice 发送一封房产转移证明文件,Alice 需要确定文件具有合法的法律效力

如何在电子文件上签署Bob的名字?如何保证数字签名一定是Bob制作的?

🕘 2.3 什么是公钥密码体制

1976年 Diffie和Hellman 针对密钥安全性、数字签名等问题提出了公钥密码学的概念

但实际上这并不是公钥密码学的问世,只是第一次被公开提出而已

New Direction In Cryptography
Abstract Two kinds of contemporary developments in cryptography are examined. Widening applications of teleprocessing have given rise to a need for new types of cryptographic systems. which minimize the need for secure key distribution channels and supply the equivalent of a written signature. This paper suggests ways to solve these currently open problemsIt also discusses how the theories of communication and computation are beginning to provide the tools to solve cryptographic problems of long standing.

🕘 2.4 组成

在这里插入图片描述

🕤 2.4.1 明文

通信双方发送的原始的、有意义的可读信息/数据,称为明文X

🕤 2.4.2 加密算法

加密算法E 将 明文X 进行各种转换

🕤 2.4.3 公钥

每个用户都产生一对密钥

其中一个是公开的,存放于公开寄存器或其他可访问的文件中,即公钥PU

🕤 2.4.4 私钥

每个用户都产生一对密钥

另外一个是私有的,只有自己才知道,即私钥PR

每个用户都有公钥PU、私钥PR

选用其中一把来加密,就用剩下的一把来解密

🕤 2.4.5 密文

加密算法E 读取 明文X 和 密钥PU/PR ,产生的输出就是 密文Y

🕤 2.4.6 解密算法

解密算法D 读取 密文Y 和 密钥PR/PU ,产生的输出就是 明文X

🕘 2.5 公钥加密

在这里插入图片描述

  • Bob 给Alice 发送消息X,选择公钥算法来为消息加密
  • Bob和Alice都会产生两把密钥,其中一个是公开的,存放在公开寄存器中供他人使用,称之为公钥PU;
  • 另一个密钥是私有的,称之为私钥PR

【情景一】
Bob 给Alice 发送消息X,他希望消息具有保密性,只有接收方Alice才能获取消息的内容

在这里插入图片描述

【解决】
发送方Bob 使用 接收方Alice 的公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​ 为消息 X X X加密

在这里插入图片描述

  • Bob 有一个公钥环,上面有很多人的公钥,当他要和某人进行通信,就选择对应的公钥来加密

  • Bob 现在要发送消息给Alice,所以选择Alice的公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​, 将其加入到加密算法 E E E中

  • 加密算法 E E E读取明文 X X X、公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​,生成密文 Y Y Y
    𝒀 = 𝑬 ( 𝑷 𝑼 𝒂 , 𝑿 ) 𝒀=𝑬(𝑷𝑼_𝒂,𝑿) Y=E(PUa​,X)

  • Alice收到了Bob发来的密文,使用自己的私钥 𝑷 𝑹 𝒂 𝑷𝑹_𝒂 PRa​ 来还原出明文

  • 解密算法 D D D 读取密文 Y Y Y、私钥 𝑷 𝑹 𝒂 𝑷𝑹_𝒂 PRa​,还原明文 X X X
    𝑿 = 𝑫 ( 𝑷 𝑹 𝒂 , 𝒀 ) 𝑿=𝑫(𝑷𝑹_𝒂,𝒀) X=D(PRa​,Y)

  • 由于解密使用的私钥只有 Alice自己知道,所以其他人无法解密 ,只有 Alice具有消息的访问权

在这里插入图片描述

𝑿 = 𝑫 ( 𝑷 𝑹 𝒃 , 𝒀 ) = 𝑫 ( 𝑷 𝑹 𝒃 , 𝑬 ( 𝑷 𝑼 𝒃 , 𝑿 ) ) 𝑿=𝑫(𝑷𝑹_𝒃,𝒀)=𝑫( 𝑷𝑹_𝒃,𝑬(𝑷𝑼_𝒃,𝑿) ) X=D(PRb​,Y)=D(PRb​,E(PUb​,X))

密码分析者可推导明文、私钥的估计值

🕘 2.6 私钥加密

【情景二】
Bob 给Alice 发送消息X,他希望Alice 接收后不会对消息的真实来源产生怀疑

在这里插入图片描述

【解决】
发送方Bob 使用 他自己的私钥 𝑷 𝑹 𝒃 𝑷𝑹_𝒃 PRb​ 为消息X加密

在这里插入图片描述

  • Bob 给Alice 发送明文 X X X,加密时使用的是他自己的私钥 𝑷 𝑹 𝒃 𝑷𝑹_𝒃 PRb​,生成的密文为 Y Y Y

  • 加密算法 E E E 读取明文 X X X 和私钥 𝑷 𝑹 𝒃 𝑷𝑹_𝒃 PRb​,生成密文 Y Y Y
    𝒀 = 𝑬 ( 𝑷 𝑹 𝒃 , 𝑿 ) 𝒀=𝑬(𝑷𝑹_𝒃,𝑿) Y=E(PRb​,X)

  • Alice 收到了Bob 发来的密文 Y Y Y,将其输入解密算法 D D D,并从公钥环中找出发送方Bob 的公钥 𝑷 𝑼 𝒃 𝑷𝑼_𝒃 PUb​,还原出明文 X X X

  • 解密算法 D D D 读取密文 Y Y Y 和公钥 𝑷 𝑼 𝒃 𝑷𝑼_𝒃 PUb​,生成明文 X X X
    𝑿 = 𝑫 ( 𝑷 𝑼 𝒃 , 𝒀 ) 𝑿=𝑫(𝑷𝑼_𝒃,𝒀) X=D(PUb​,Y)

  • 𝒀 = 𝑬 ( 𝑷 𝑹 𝒃 , 𝑿 ) , 𝑿 = 𝑫 ( 𝑷 𝑼 𝒃 , 𝒀 ) 𝒀=𝑬(𝑷𝑹_𝒃,𝑿),𝑿=𝑫(𝑷𝑼_𝒃,𝒀) Y=E(PRb​,X),X=D(PUb​,Y)

  • Alice 收到了据说是Bob 发出的密文,若Alice 能使用Bob的公钥解密出明文,那么消息来源正确,因为只有Bob 才知道加密使用的私钥

在这里插入图片描述

𝑿 = 𝑫 ( 𝑷 𝑼 𝒂 , 𝒀 ) = 𝑫 ( 𝑷 𝑼 𝒂 , 𝑬 ( 𝑷 𝑹 𝒂 , 𝑿 ) ) 𝑿=𝑫(𝑷𝑼_𝒂,𝒀)=𝑫( 𝑷𝑼_𝒂,𝑬(𝑷𝑹_𝒂,𝑿) ) X=D(PUa​,Y)=D(PUa​,E(PRa​,X))

密码分析者可获取明文,推导私钥的估计值

多选题
Alice和Bob 已知对方的公钥,现在Alice收到了Bob 发来的密文,以下说法正确的有:
A. 如果A 用 𝑷 𝑼 𝒃 𝑷𝑼_𝒃 PUb​解密成功,那么密文是用 𝑷 𝑹 𝒃 𝑷𝑹_𝒃 PRb​加密的
B. 如果A 用 𝑷 𝑼 𝒃 𝑷𝑼_𝒃 PUb​解密成功,那么密文一定是B 发来的
C. 如果A 用 𝑷 𝑹 𝒂 𝑷𝑹_𝒂 PRa​解密成功,那么密文是用 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​加密的
D. 如果B 用 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​加密密文,那么明文是一定只能被A 看到
答案:全选,其中B不严谨,可能重放攻击

🕘 2.7 双重加密

【情景三】
Bob 给Alice 发送消息X,他既希望消息只能被Alice查看,也希望Alice 接收后不会对消息的真实来源产生怀疑

在这里插入图片描述

【解决】
发送方Bob 先使用 他自己的私钥 𝑷 𝑹 𝒃 𝑷𝑹_𝒃 PRb​加密,再使用接收方Alice 的公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​ 加密

在这里插入图片描述

用发送方的私钥签名,用接收方的公钥加密

多选题
关于公钥密码中的密钥,以下说法正确的是:
A. 每个用户都拥有自己的公钥PU和私钥PR
B. 公钥PU 一定是用来加密的
C. 用户知道他人的PU、自己的PU和PR
D. 用PR 加密得到的密文不具有保密性
答案:ACD

在这里插入图片描述

🕘 2.8 公钥密码的应用

🕤 2.8.1 对消息的加解密

  • 发送方用接收方的公钥对消息加密
    在这里插入图片描述
    在这里插入图片描述

  • PGP是一种用于提高电子邮件通信的安全性的加密程序消息加密。 PGP用到公钥密码体制RSA对于加密明文的密钥进行加密

🕤 2.8.2 数字签名(身份鉴别)

  • 发送方用其私钥对消息进行签名

在这里插入图片描述
在这里插入图片描述

  • IPsec是一种安全的网络协议套件,可对数据包进行身份验证和加密,常用于VPN的搭建。
  • IPsec使用RSA签名完成对用户的身份验证

🕤 2.8.3 密钥交换

收发双方交换中间密钥 𝒀 𝑨 、 𝒀 𝑩 𝒀_𝑨 、𝒀_𝑩 YA​、YB​,经过变换后得到最终密钥 𝑲 𝑲 K

在这里插入图片描述

SSH是一种加密网络协议,用于通过不安全的网络安全地运行网络服务。典型的应用程序包括远程命令行,登录和远程命令执行。

在这里插入图片描述

证书

在这里插入图片描述

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

🕘 2.9 要求

无论是上述哪种应用,加密解密的成功实现都建立在一个支持双密钥的密码算法上

Diffie和Hellman虽然没有证明出这种算法一定存在,但他们给出了算法应该满足的条件

在这里插入图片描述

  • 【条件一】
    为某用户生成公钥𝑷𝑼 、私钥𝑷𝑹,在计算上是容易实现的

  • 【条件二】
    已知接收方的公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​、要发送的明文 X X X ,生成密文 𝒀 = 𝑬 ( 𝑷 𝑼 𝒂 , 𝑿 ) 𝒀=𝑬(𝑷𝑼_𝒂,𝑿) Y=E(PUa​,X),在计算上是容易实现的

  • 【条件三】
    接收方使用自己的私钥 𝑷 𝑹 𝒂 𝑷𝑹_𝒂 PRa​ 对收到的密文 Y Y Y进行解密,生成明文 𝑿 = 𝑫 ( 𝑷 𝑹 𝒂 , 𝒀 ) 𝑿=𝑫(𝑷𝑹_𝒂,𝒀) X=D(PRa​,Y) ,在计算上是容易实现的

  • 【条件四】
    已知某用户的公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​,攻击者想要从中推导出该用户的私钥 𝑷 𝑹 𝒂 𝑷𝑹_𝒂 PRa​ ,在计算上是不可行的

  • 【条件五】
    已知某用户的公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​,截获到加密后的密文 Y Y Y,想要使用 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​ 推导出明文 X X X ,在计算上是不可行的

在公钥密码学的概念提出后几十年中,只有几个满足这些条件的算法

如RSA、椭圆曲线、Diffie-Hellman、DSS等,WHY?

🕤 2.9.1 单向函数

𝒇 ( 𝑿 ) = 𝒀 𝒇(𝑿) =𝒀 f(X)=Y
𝒇 − ( 𝒀 ) ~ 𝑿 𝒇^− (𝒀)~𝑿 f−(Y)~X

(1)给定x,计算y=f(x)是容易的;
(2)给定y,计算x使y=f(x)是困难的;

例子:
x = 512 , f ( x ) = x 2 = 51 2 2 = 262144 f ( x ) = 262144 , x = x 2 = 262144 \begin{array}{l} x=512, f(x)=x^{2}=512^{2}=262144 \\ f(x)=262144, x=\sqrt{x^{2}}=\sqrt{262144} \end{array} x=512,f(x)=x2=5122=262144f(x)=262144,x=x2 ​=262144 ​​

所谓计算x=f-1(Y)困难是指计算上相当复杂,已无实际意义。

🕤 2.9.2 单向陷门函数

𝒇 k ( 𝑿 ) = 𝒀 𝒇_k(𝑿) =𝒀 fk​(X)=Y
𝒇 k − ( 𝒀 ) = 𝑿 𝒇^−_k(𝒀) =𝑿 fk−​(Y)=X
𝒇 − ( 𝒀 ) ~ 𝑿 𝒇^− (𝒀)~𝑿 f−(Y)~X

(1)对于函数f,给定参数k、X,计算函数值 f(x)=Y 很容易
(2)若给定参数k、Y,计算函数的逆f-(y)=X 很容易
(3)若只给定函数值Y,缺少参数k,计算函数的逆f-(Y)=X 是不可行的

找到合适的单向陷门函数是公钥密码体制的关键

(1)用正变换作加密,加密效率高
(2)用逆变换作解密,安全,攻击者不能破译
(3)把陷门作为密钥只分给合法用户,确保合法用户能够方便解密,而非法用户不能破译。

🕘 2.10 攻击

🕤 2.10.1 穷举密钥

  • 为了抗穷举攻击,密钥应该足够长;为了便于实现加密和解密,密钥又必须足够短
  • 所以公钥密码仅限于密钥管理和数字签名

🕤 2.10.2 穷举明文

  • Bob 给Alice 发送DES密钥,使用公钥加密算法 E E E、Alice的公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​来加密,生成密文 Y Y Y

  • 攻击者已知明文共56位,对所有可能的明文都使用 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​来加密,当结果与 Y Y Y相同,就获取了明文的内容

🕒 3. 模运算

🕘 3.1 模算术运算

在这里插入图片描述

对于任意整数𝒂,对其进行模𝒏 运算,即 𝒂   𝒎 𝒐 𝒅   𝒏 𝒂 \ 𝒎𝒐𝒅 \ 𝒏 a mod n,表示为带余除法为
𝒂 = 𝒒 𝒏 + 𝒓 , 𝟎 ≤ 𝒓 < 𝒏 𝒂=𝒒𝒏+𝒓,𝟎≤𝒓<𝒏 a=qn+r,0≤r<n
𝒓 = 𝒂   𝒎 𝒐 𝒅   𝒏 𝒓=𝒂 \ 𝒎𝒐𝒅 \ 𝒏 r=a mod n

由上可知,运算符 (𝒎𝒐𝒅 𝒏) 将所有整数映射到集合{𝟎,𝟏,…(𝒏−𝟏)}中

🕤 3.1.1 性质

  1. [ ( a   m o d   n ) + ( b   m o d   n ) ]   m o d   n = ( a + b )   m o d   n [(a \bmod n)+(b \bmod n)] \bmod n=(a+b) \bmod n [(amodn)+(bmodn)]modn=(a+b)modn
  2. [ ( a   m o d   n ) − ( b   m o d   n ) ]   m o d   n = ( a − b )   m o d   n [(a \bmod n)-(b \bmod n)] \bmod n=(a-b) \bmod n [(amodn)−(bmodn)]modn=(a−b)modn
  3. [ ( a   m o d   n ) × ( b   m o d   n ) ]   m o d   n = ( a × b )   m o d   n [(a \bmod n) \times(b \bmod n)] \bmod n=(a \times b) \bmod n [(amodn)×(bmodn)]modn=(a×b)modn

分别使用带余除法表示𝒂,𝒃 可以很容易地证明
普通算术的加、减、乘 同样适用于模算术

🕤 3.1.2 例子

求 𝟏 𝟏 𝟕 𝒎 𝒐 𝒅   𝟏 𝟑 𝟏𝟏^𝟕 𝒎𝒐𝒅 \ 𝟏𝟑 117mod 13

1 1 7 = 𝟏 𝟏 × 𝟏 𝟏 𝟐 × 𝟏 𝟏 𝟒 {\color{blue}11^7}={\color{red}𝟏𝟏} ×{\color{green}𝟏𝟏^𝟐}×{\color{purple}𝟏𝟏^𝟒} 117=11×112×114
𝟏 𝟏   𝑚 𝑜 𝑑   13 = 11 {\color{red}𝟏𝟏} \ 𝑚𝑜𝑑 \ 13=11 11 mod 13=11
𝟏 𝟏 𝟐   𝑚 𝑜 𝑑   13 = 121   𝑚 𝑜 𝑑   13 = 4 {\color{green}𝟏𝟏^𝟐} \ 𝑚𝑜𝑑 \ 13=121 \ 𝑚𝑜𝑑 \ 13=4 112 mod 13=121 mod 13=4
𝟏 𝟏 𝟒   𝑚 𝑜 𝑑   13 = ( 1 1 2 × 1 1 2 )   𝑚 𝑜 𝑑   13 {\color{purple}𝟏𝟏^𝟒} \ 𝑚𝑜𝑑 \ 13=(11^2×11^2) \ 𝑚𝑜𝑑 \ 13 114 mod 13=(112×112) mod 13
= [ ( 1 1 2   𝑚 𝑜 𝑑   13 ) × ( 1 1 2 𝑚 𝑜 𝑑   13 ) ]   𝑚 𝑜 𝑑   13 =[(11^2 \ 𝑚𝑜𝑑 \ 13)×(11^2 𝑚𝑜𝑑 \ 13)] \ 𝑚𝑜𝑑 \ 13 =[(112 mod 13)×(112mod 13)] mod 13
= ( 4 × 4 )   𝑚 𝑜 𝑑   13 = 16   𝑚 𝑜 𝑑   13 = 3 =(4×4) \ 𝑚𝑜𝑑 \ 13=16 \ 𝑚𝑜𝑑 \ 13=3 =(4×4) mod 13=16 mod 13=3

𝟏 𝟏 𝟕 𝑚 𝑜 𝑑 13 𝟏𝟏^𝟕 𝑚𝑜𝑑 13 117mod13
= ( 11 × 1 1 2 × 1 1 4 ) 𝑚 𝑜 𝑑 13 =(11×11^2×11^4)𝑚𝑜𝑑 13 =(11×112×114)mod13
= ( 11 × 4 × 3 ) 𝑚 𝑜 𝑑 13 =(11×4×3)𝑚𝑜𝑑13 =(11×4×3)mod13
= 132 𝑚 𝑜 𝑑 13 =132 𝑚𝑜𝑑 13 =132mod13
= 2 =2 =2

🕤 3.1.3 模8加法矩阵

在这里插入图片描述

  • 整数x也存在模8 下的负数y,即 ( x + y ) m o d 8 = 0 (x+y)mod 8=0 (x+y)mod8=0
  • 定位x所在的行,值为0的列上方即是y

🕤 3.1.4 模8乘法矩阵

在这里插入图片描述

  • 整数x也存在模8 下的倒数y,即 ( x × y ) m o d 8 = 1 (x×y)mod 8=1 (x×y)mod8=1
  • 定位x所在的行,值为1的列上方即是y

🕘 3.2 回顾欧几里得算法

🕤 3.2.1 求最大公因子

𝒂 = 𝒒 𝟏 𝒃 + 𝒓 𝟏 𝒂=𝒒_𝟏 𝒃+𝒓_𝟏 a=q1​b+r1​

𝒅 = 𝒈 𝒄 𝒅 ( 𝒂 , 𝒃 ) = 𝒈 𝒄 𝒅 ( 𝒃 , 𝒂   𝒎 𝒐 𝒅   𝒃 ) 𝒅=𝒈𝒄𝒅(𝒂,𝒃)=𝒈𝒄𝒅(𝒃,𝒂 \ 𝒎𝒐𝒅 \ 𝒃) d=gcd(a,b)=gcd(b,a mod b)

  • 求𝒂,𝒃 的最大公因子,先用𝒃 带余除 𝒂
  • 若余数𝒓_𝟏不为0,求𝒂,𝒃 的最大公因子𝒅 就变成了求 除数𝒃和余数𝒂 𝒎𝒐𝒅 𝒃 的最大公因子
  • 为求出最大公因子,可重复使用上式

例子:

gcd ⁡ ( 18 , 12 ) = gcd ⁡ ( 12 , 6 ) = gcd ⁡ ( 6 , 0 ) = 6 \operatorname{gcd}(18,12)=\operatorname{gcd}(12,6)=\operatorname{gcd}(6,0)=6 gcd(18,12)=gcd(12,6)=gcd(6,0)=6
gcd ⁡ ( 11 , 10 ) = gcd ⁡ ( 10 , 1 ) = gcd ⁡ ( 1 , 0 ) = 1 \operatorname{gcd}(11,10)=\operatorname{gcd}(10,1)=\operatorname{gcd}(1,0)=1 gcd(11,10)=gcd(10,1)=gcd(1,0)=1
gcd ⁡ ( 55 , 22 ) = gcd ⁡ ( 22 , 55   m o d   22 ) = gcd ⁡ ( 22 , 11 ) = 11 \operatorname{gcd}(55,22)=\operatorname{gcd}(22,55 \bmod 22)=\operatorname{gcd}(22,11)=11 gcd(55,22)=gcd(22,55mod22)=gcd(22,11)=11

🕘 3.3 扩展欧几里得算法 ☆

𝒂 𝒙 + 𝒃 𝒚 = 𝒈 𝒄 𝒅 ( 𝒂 , 𝒃 ) 𝒂𝒙+𝒃𝒚=𝒈𝒄𝒅(𝒂,𝒃) ax+by=gcd(a,b)

  • 扩展欧几里得算法对于接下来要学习的 高级加密标准AES、公钥加密算法RSA 非常重要
  • 对于给定的𝒂,𝒃,不仅可以计算出最大公因子𝒅,还可得到整数𝒙,𝒚 满足如上方程

已知: 𝒂 = 𝒒 𝒃 + 𝒓 𝒂=𝒒𝒃+𝒓 a=qb+r
𝒂 𝒙 𝟏 + 𝒃 𝒚 𝟏 = 𝒈 𝒄 𝒅 ( 𝒂 , 𝒃 ) 𝒂𝒙_𝟏+𝒃𝒚_𝟏=𝒈𝒄𝒅(𝒂,𝒃) ax1​+by1​=gcd(a,b)
𝒃 𝒙 𝟐 + ( 𝒂   𝒎 𝒐 𝒅   𝒃 ) 𝒚 𝟐 = 𝒈 𝒄 𝒅 ( 𝒃 , 𝒂   𝒎 𝒐 𝒅   𝒃 ) 𝒃𝒙_𝟐+(𝒂 \ 𝒎𝒐𝒅 \ 𝒃)𝒚_𝟐=𝒈𝒄𝒅(𝒃,𝒂 \ 𝒎𝒐𝒅 \ 𝒃) bx2​+(a mod b)y2​=gcd(b,a mod b)

求解: 𝒂 𝒙 𝟏 + 𝒃 𝒚 𝟏 = 𝒃 𝒙 𝟐 + ( 𝒂 𝒎 𝒐 𝒅 𝒃 ) 𝒚 𝟐 𝒂𝒙_𝟏+𝒃𝒚_𝟏=𝒃𝒙_𝟐+(𝒂 𝒎𝒐𝒅 𝒃)𝒚_𝟐 ax1​+by1​=bx2​+(amodb)y2​
𝒂 𝒙 𝟏 + 𝒃 𝒚 𝟏 = 𝒃 𝒙 𝟐 + ( 𝒂 − 𝒒 𝒃 ) 𝒚 𝟐 𝒂𝒙_𝟏+𝒃𝒚_𝟏=𝒃𝒙_𝟐+(𝒂−𝒒𝒃)𝒚_𝟐 ax1​+by1​=bx2​+(a−qb)y2​
𝒂 𝒙 𝟏 + 𝒃 𝒚 𝟏 = 𝒃 𝒙 𝟐 + 𝒂 𝒚 𝟐 − 𝒒 𝒃 𝒚 𝟐 𝒂𝒙_𝟏+𝒃𝒚_𝟏=𝒃𝒙_𝟐+𝒂𝒚_𝟐−𝒒𝒃𝒚_𝟐 ax1​+by1​=bx2​+ay2​−qby2​
𝒂 𝒙 𝟏 + 𝒃 𝒚 𝟏 = 𝒂 𝒚 𝟐 + 𝒃 ( 𝒙 𝟐 − 𝒒 𝒚 𝟐 ) 𝒂𝒙_𝟏+𝒃𝒚_𝟏=𝒂𝒚_𝟐+𝒃(𝒙_𝟐−𝒒𝒚_𝟐) ax1​+by1​=ay2​+b(x2​−qy2​)
𝒙 𝟏 = 𝒚 𝟐 𝒚 𝟏 = 𝒙 𝟐 − 𝒒 𝒚 𝟐 𝒙_𝟏= 𝒚_𝟐 \qquad \qquad 𝒚_𝟏= 𝒙_𝟐−𝒒𝒚_𝟐 x1​=y2​y1​=x2​−qy2​
(这里看了好久也没明白有什么用T^T,希望有小伙伴能解释下)

解等式 1759 x + 550 y = g c d ( 1759 , 550 ) 1759x + 550y = gcd(1759,550) 1759x+550y=gcd(1759,550)

a b q i   d x i y i 1759 550 3 1 − 111 355 550 109 5 1 22 − 111 109 5 21 1 − 1 22 5 4 1 1 1 − 1 4 1 4 1 0 1 1 0 1 1 0 \begin{array}{|c|c|c|c|c|c|} \hline a & b & q_{i} & \mathrm{~d} & x_{i} & y_{i} \\ \hline 1759 & 550 & 3 & 1 & -111 & 355 \\ \hline 550 & 109 & 5 & 1 & 22 & -111 \\ \hline 109 & 5 & 21 & 1 & -1 & 22 \\ \hline 5 & 4 & 1 & 1 & 1 & -1 \\ \hline 4 & 1 & 4 & 1 & 0 & 1 \\ \hline 1 & 0 & & 1 & 1 & 0 \\ \hline \end{array} a1759550109541​b5501095410​qi​352114​ d111111​xi​−11122−1101​yi​355−11122−110​​

因此 1759 × ( − 111 ) + 550 × 355 = g c d ( ) = 1 1759×(-111)+550×355 = gcd() = 1 1759×(−111)+550×355=gcd()=1

🕘 3.4 扩展欧几里得求乘法逆元 ☆

原理:
𝟏 𝟏   ( 𝒎 𝒐 𝒅 𝟏 𝟕 ) 𝟏𝟏 \ (𝒎𝒐𝒅 𝟏𝟕) 11 (mod17)
𝒈 𝒄 𝒅 ( 𝟏 𝟕 , 𝟏 𝟏 ) = 𝟏 𝒈𝒄𝒅(𝟏𝟕,𝟏𝟏)=𝟏 gcd(17,11)=1
𝟏 𝟏 𝒚 ( 𝒎 𝒐 𝒅 𝟏 𝟕 ) = 𝟏 𝟏𝟏𝒚(𝒎𝒐𝒅 𝟏𝟕)=𝟏 11y(mod17)=1
𝟏 𝟏 𝒚 = 𝟏 𝟕 𝒙 + 𝟏 𝟏𝟏𝒚=𝟏𝟕𝒙+𝟏 11y=17x+1
𝟏 𝟏 𝒚 − 𝟏 𝟕 𝒙 = 𝟏 𝟏𝟏𝒚−𝟏𝟕𝒙=𝟏 11y−17x=1
𝟏 𝟏 𝒚 + 𝟏 𝟕 𝒙 = 𝟏 = 𝒈 𝒄 𝒅 ( 𝟏 𝟕 , 𝟏 𝟏 ) 𝟏𝟏𝒚+𝟏𝟕𝒙=𝟏=𝒈𝒄𝒅(𝟏𝟕,𝟏𝟏) 11y+17x=1=gcd(17,11)

a b q i   d x i y i 17 11 1 1 2 − 3 11 6 1 1 − 1 2 6 5 1 1 1 − 1 5 1 5 1 0 1 1 0 1 1 0 \begin{array}{|c|c|c|c|c|c|} \hline a & b & q_{i} & \mathrm{~d} & x_{i} & y_{i} \\ \hline 17 & 11 & 1 & 1 & 2 & -3 \\ \hline 11 & 6 & 1 & 1 & -1 & 2 \\ \hline 6 & 5 & 1 & 1 & 1 & -1 \\ \hline 5 & 1 & 5 & 1 & 0 & 1 \\ \hline 1 & 0 & & 1 & 1 & 0 \\ \hline \end{array} a1711651​b116510​qi​1115​ d11111​xi​2−1101​yi​−32−110​​

( − 3 )   m o d   17 = 14 (-3) \ mod \ 17 = 14 (−3) mod 17=14,因此y = 14,即所求乘法逆元

练习题
计算乘法逆元: 5   m o d   17 5 \ mod \ 17 5 mod 17
5 y ( m o d 17 ) = 1 5y(mod17)=1 5y(mod17)=1
g c d ( 5 , 17 ) = 1 gcd(5,17)=1 gcd(5,17)=1
17 x + 5 y = 1 17x+5y=1 17x+5y=1
a b q i d x i y i 17 5 3 1 − 2 7 5 2 2 1 1 − 2 2 1 2 1 0 1 1 0 1 1 0 \begin{array}{|c|c|c|c|c|c|} \hline a & b & q_{i} & d & x_{i} & y_{i} \\ \hline 17 & 5 & 3 & 1 & -2 & 7 \\ \hline 5 & 2 & 2 & 1 & 1 & -2 \\ \hline 2 & 1 & 2 & 1 & 0 & 1 \\ \hline 1 & 0 & & 1 & 1 & 0 \\ \hline \end{array} a17521​b5210​qi​322​d1111​xi​−2101​yi​7−210​​
7   m o d   17 = 7 7 \ mod \ 17 = 7 7 mod 17=7,因此y = 7,即所求乘法逆元

🕒 4. RSA算法 ☆☆☆

在这里插入图片描述

  • RSA算法 由Ron Rivest、Adi Shamir、Leonard Adleman共同提出,于2002年得图灵奖

  • RSA 最早满足了公钥算法的全部要求,迄今为止被广泛接受并实现应用

  • RSA也是分组密码

  • 明文和密文均是0到某n-1之间的整数
    (n: 1024位二进制数、309位十进制数)

  • 数学基础:欧拉定理、大整数因子分解的困难性
    (已知整数n,n是两个素数的积,即n=pq 。求解p、q的值)

加密:对每组明文分组M和密文分组C,加密过程:
𝑪 = 𝑴 e   𝒎 𝒐 𝒅   𝒏 𝑪=𝑴^e \ 𝒎𝒐𝒅 \ 𝒏 C=Me mod n

解密:对密文分组M的解密运算为:
𝑴 = 𝑪 𝒅   𝒎 𝒐 𝒅   𝒏 = ( 𝑴 𝒆 ) 𝒅   𝒎 𝒐 𝒅   𝒏 = 𝑴 𝒆 𝒅   𝒎 𝒐 𝒅   𝒏 𝑴=𝑪^𝒅 \ 𝒎𝒐𝒅 \ 𝒏=(𝑴^𝒆)^𝒅 \ 𝒎𝒐𝒅 \ 𝒏= 𝑴^{𝒆𝒅} \ 𝒎𝒐𝒅 \ 𝒏 M=Cd mod n=(Me)d mod n=Med mod n

满足条件:
(1)可以找到e、d、n,使得对所有 𝑴 < 𝒏 𝑴<𝒏 M<n,有 𝑴 𝒆 𝒅   𝒎 𝒐 𝒅   𝒏 = 𝑴   𝒎 𝒐 𝒅   𝒏 𝑴^{𝒆𝒅} \ 𝒎𝒐𝒅 \ 𝒏=𝑴 \ 𝒎𝒐𝒅 \ 𝒏 Med mod n=M mod n → 𝒆 𝒅   ≡   𝟏   𝒎 𝒐 𝒅   ϕ ( 𝒏 ) \color{red}𝒆𝒅 \ ≡ \ 𝟏 \ 𝒎𝒐𝒅 \ \phi(𝒏) ed ≡ 1 mod ϕ(n)
(2)对所有𝑴<𝒏 ,计算𝑴e和𝑪𝒅是比较容易的。
(3)由e和n确定d是不可行的。

  1. 挑选p、q
    p = 17 , q = 11 p=17,q=11 p=17,q=11
  • Alice 现在要产生自己的公钥PU 与 私钥PR
  • 首先选择两个素数p、q,它们只能被1和自身整除,Alice选择了p=17,q=11
  • p、q保密,Alice选定得到
  1. 计算n
    𝒏 = 𝒑 𝒒 = 𝟏 𝟕 × 𝟏 𝟏 = 𝟏 𝟖 𝟕 𝒏=𝒑𝒒=𝟏𝟕×𝟏𝟏=𝟏𝟖𝟕 n=pq=17×11=187
  • 然后计算这两个素数pq的乘积n=187
  • n 公开,Alice计算得到
  1. 计算 ϕ ( 𝒏 ) \phi(𝒏) ϕ(n)
    ϕ ( 𝒏 ) = ϕ ( 𝒑 𝒒 ) \phi(𝒏) = \phi(𝒑𝒒) ϕ(n)=ϕ(pq)
    = ( 𝒑 − 𝟏 ) × ( 𝒒 − 𝟏 ) =(𝒑−𝟏)×(𝒒−𝟏) =(p−1)×(q−1)
    = 𝟏 𝟔 × 𝟏 𝟎 = 𝟏 𝟔 𝟎 =𝟏𝟔×𝟏𝟎=𝟏𝟔𝟎 =16×10=160
    计算乘积n的欧拉函数 ϕ ( 𝒏 ) = 160 \phi(𝒏)=160 ϕ(n)=160

  2. 挑选e
    𝒈 𝒄 𝒅 ( ϕ ( 𝒏 ) , 𝒆 ) = 𝟏 𝒈𝒄𝒅(\phi(𝒏),𝒆)=𝟏 gcd(ϕ(n),e)=1 𝟏 < 𝒆 < ϕ ( 𝒏 ) 𝟏<𝒆< \phi(𝒏) 1<e<ϕ(n)

  • 选出一个e,使得e与 ϕ ( 𝒏 ) \phi(𝒏) ϕ(n)互素,且保证e小于 ϕ ( 𝒏 ) \phi(𝒏) ϕ(n),Alice挑选的 e = 7 e=7 e=7
  • e 公开,Alice选定得到
  1. 计算d
    𝒅 ≡ 𝒆 ( − 𝟏 ) ( 𝒎 𝒐 𝒅 ϕ ( 𝒏 ) ) 𝒅\equiv𝒆^{(−𝟏) } ( 𝒎𝒐𝒅 \phi(𝒏) ) d≡e(−1)(modϕ(n))
  • 计算数值d,即求e在 m o d 160 mod 160 mod160下的乘法逆元,使用扩展欧几里得算法
  • d 保密,由Alice计算得到

插播:扩展欧几里得算法
7   ( 𝒎 𝒐 𝒅 160 ) 7 \ (𝒎𝒐𝒅 160) 7 (mod160)
𝒈 𝒄 𝒅 ( 160 , 7 ) = 𝟏 𝒈𝒄𝒅(160,7)=𝟏 gcd(160,7)=1
7 𝒚 ( 𝒎 𝒐 𝒅 160 ) = 𝟏 7𝒚(𝒎𝒐𝒅 160)=𝟏 7y(mod160)=1
7 𝒚 = 160 𝒙 + 𝟏 7𝒚=160𝒙+𝟏 7y=160x+1
7 𝒚 − 160 𝒙 = 𝟏 7𝒚−160𝒙=𝟏 7y−160x=1
7 𝒚 + 160 𝒙 = 𝟏 = 𝒈 𝒄 𝒅 ( 160 , 7 ) 7𝒚+160𝒙=𝟏=𝒈𝒄𝒅(160,7) 7y+160x=1=gcd(160,7)

ϕ ( n ) e q i   d x i y i 160 7 22 1 − 1 23 7 6 1 1 1 − 1 6 1 6 1 0 1 1 0 1 1 0 \begin{array}{|c|c|c|c|c|c|} \hline \phi(n) & e & q_{i} & \mathrm{~d} & x_{i} & y_{i} \\ \hline 160 & 7 & 22 & 1 & -1 & 23 \\ \hline 7 & 6 & 1 & 1 & 1 & -1 \\ \hline 6 & 1 & 6 & 1 & 0 & 1 \\ \hline 1 & 0 & & 1 & 1 & 0 \\ \hline \end{array} ϕ(n)160761​e7610​qi​2216​ d1111​xi​−1101​yi​23−110​​

因此x=23=d,即所求乘法逆元

  1. 组成公私钥
    𝑷 𝑼 𝒂 = { 𝒆 , 𝒏 } = { 𝟕 , 𝟏 𝟖 𝟕 } 𝑷𝑼_𝒂=\{𝒆,𝒏\}=\{𝟕,𝟏𝟖𝟕\} PUa​={e,n}={7,187}
    𝑷 𝑹 𝒂 = { 𝒅 , 𝒏 } = { 𝟐 𝟑 , 𝟏 𝟖 𝟕 } 𝑷𝑹_𝒂=\{𝒅,𝒏\}=\{𝟐𝟑,𝟏𝟖𝟕\} PRa​={d,n}={23,187}
  • 将数值组合{e,n}作为公钥公开,将{d,n}作为私钥保密
  1. 生成密文Y
  • Bob 要给Alice 发送消息X,使用Alice的公钥 𝑷 𝑼 𝒂 𝑷𝑼_𝒂 PUa​ 加密

  • 算法规定将公钥中的数值e作为幂值,将数值n作为模数
    𝒀 = 𝑬 ( 𝑷 𝑼 𝒂 , 𝑿 ) 𝒀=𝑬(𝑷𝑼_𝒂,𝑿) Y=E(PUa​,X)
    = 𝑬 ( 𝒆 , 𝒏 , 𝑿 ) =𝑬({𝒆,𝒏},𝑿) =E(e,n,X)
    = 𝑿 𝒆   𝒎 𝒐 𝒅   𝒏 =𝑿^𝒆 \ 𝒎𝒐𝒅 \ 𝒏 =Xe mod n
    = 𝟖 𝟖 𝟕   𝒎 𝒐 𝒅   𝟏 𝟖 𝟕 =𝟖𝟖^𝟕 \ 𝒎𝒐𝒅 \ 𝟏𝟖𝟕 =887 mod 187

  • RSA 也是分组密码,可以处理的明文X < n

  • 若Bob发送的明文X=88,Alice的公钥为{7,187},得出密文Y=11

  1. 还原明文X
  • Alice 收到密文Y后,使用她自己的私钥 𝑷 𝑹 𝒂 𝑷𝑹_𝒂 PRa​进行解密

  • 解密算法函数与加密相同,仍然将密钥第一部分d作为幂值,第二部分n作为模数
    𝑿 = 𝑫 ( 𝑷 𝑹 𝒂 , 𝒀 ) 𝑿=𝑫(𝑷𝑹_𝒂,𝒀) X=D(PRa​,Y)
    = 𝑫 ( { 𝒅 , 𝒏 } , 𝒀 ) =𝑫(\{𝒅,𝒏\},𝒀) =D({d,n},Y)
    = 𝒀 𝒅   𝒎 𝒐 𝒅   𝒏 =𝒀^𝒅 \ 𝒎𝒐𝒅 \ 𝒏 =Yd mod n
    = 𝟏 𝟏 𝟐 𝟑   𝒎 𝒐 𝒅   𝟏 𝟖 𝟕 =𝟏𝟏^{𝟐𝟑} \ 𝒎𝒐𝒅 \ 𝟏𝟖𝟕 =1123 mod 187

  • 私钥 𝑷 𝑹 𝒂 = { 23 , 187 } 𝑷𝑹_𝒂=\{23,187\} PRa​={23,187}

  • 计算得到的结果X=88,与Bob发送的原始数值相同

小结:

  1. 素数 p , q p, q p,q
  2. n = p × q \boldsymbol{n}=\boldsymbol{p} \times \boldsymbol{q} n=p×q
  3. ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \boldsymbol{\phi}(\boldsymbol{n})=(\boldsymbol{p}-\mathbf{1}) \times(\boldsymbol{q}-\mathbf{1}) ϕ(n)=(p−1)×(q−1)
  4. gcd ⁡ ( e , ϕ ( n ) ) = 1 \operatorname{gcd}(e, \phi(n))=1 gcd(e,ϕ(n))=1
  5. d ≡ e − 1 (   m o d   ϕ ( n ) ) d \equiv e^{-1}(\bmod \phi(n)) d≡e−1(modϕ(n))
  6. P U = { e , n } , P R = { d , n } P U=\{e, n\}, P R=\{d, n\} PU={e,n},PR={d,n}
  7. Y = X e   m o d   n Y=X^{e} \bmod n Y=Xemodn
  8. X = Y d   m o d   n X =Y^{d} \bmod n X=Ydmodn

视频资料
🔎 【推荐】探秘公钥加密算法 RSA
🔎 数学不好也能听懂的算法 - RSA加密和解密原理和过程
🔎 【软件科普】如何保证发出去的微信和QQ消息不被篡改?详解RSA加密算法
🔎 银行密码系统安全吗?质数(素数)到底有啥用?李永乐老师11分钟讲RSA加密算法
🔎 【RSA加密算法】| RSA加密过程详解 | 公钥加密| 密码学| 信息安全

🕘 4.1 RSA计算问题

🕤 4.1.1 模幂运算

𝟐 𝟑   𝒎 𝒐 𝒅   𝟏 𝟖 𝟕 = 𝟖   𝒎 𝒐 𝒅   𝟏 𝟖 𝟕  √ 𝟐^𝟑 \ 𝒎𝒐𝒅 \ 𝟏𝟖𝟕=𝟖 \ 𝒎𝒐𝒅 \ 𝟏𝟖𝟕 \ √ 23 mod 187=8 mod 187 √
𝟐 𝟏 𝟑   𝒎 𝒐 𝒅   𝟏 𝟖 𝟕 = ? 𝟐^{𝟏𝟑} \ 𝒎𝒐𝒅 \ 𝟏𝟖𝟕= ? 213 mod 187=?

【问题】

  • 在RSA中,加密和解密都需要进行模幂运算
  • 当指数e选取的比较大,若先计算幂值,乘法次数太多,中间结果较大,计算效率低

𝟐 𝟏 𝟑 𝒎 𝒐 𝒅 𝟏 𝟖 𝟕 = ( 𝟐 𝟏 × 𝟐 𝟒 × 𝟐 𝟖 ) 𝒎 𝒐 𝒅 𝟏 𝟖 𝟕 𝟐^{𝟏𝟑} 𝒎𝒐𝒅 𝟏𝟖𝟕=(𝟐^𝟏×𝟐^𝟒×𝟐^𝟖 ) 𝒎𝒐𝒅 𝟏𝟖𝟕 213mod187=(21×24×28)mod187
= ( ( 𝟐 𝟏 𝒎 𝒐 𝒅 𝟏 𝟖 𝟕 ) × ( 𝟐 𝟒 𝒎 𝒐 𝒅 𝟏 𝟖 𝟕 ) × ( 𝟐 𝟖 𝒎 𝒐 𝒅 𝟏 𝟖 𝟕 ) ) 𝒎 𝒐 𝒅 𝟏 𝟖 𝟕 =((𝟐^𝟏 𝒎𝒐𝒅 𝟏𝟖𝟕)×(𝟐^𝟒 𝒎𝒐𝒅 𝟏𝟖𝟕)×(𝟐^𝟖 𝒎𝒐𝒅 𝟏𝟖𝟕))𝒎𝒐𝒅 𝟏𝟖𝟕 =((21mod187)×(24mod187)×(28mod187))mod187

【解决方法】

  • 运用模运算的性质,将其分解为若干个因子,模运算的中间结果容易计算,算法效率提高了

𝟐 𝟏 𝟑 𝒎 𝒐 𝒅 𝟏 𝟖 𝟕 = ( 𝟐 𝟏 × 𝟐 𝟒 × 𝟐 𝟖 ) 𝒎 𝒐 𝒅 𝟏 𝟖 𝟕  √ 𝟐^{𝟏𝟑} 𝒎𝒐𝒅 𝟏𝟖𝟕=(𝟐^𝟏×𝟐^𝟒×𝟐^𝟖 ) 𝒎𝒐𝒅 𝟏𝟖𝟕 \ √ 213mod187=(21×24×28)mod187 √
𝟐 𝟏 𝟑 0   𝒎 𝒐 𝒅   𝟏 𝟖 𝟕 = ? 𝟐^{𝟏𝟑0} \ 𝒎𝒐𝒅 \ 𝟏𝟖𝟕= ? 2130 mod 187=?

【问题】
当指数e选取的非常大,RSA算法如何有效地对其因子分解呢?

【解决方法二】
使用快速模幂算法 增加 RSA的效率
a b 𝒎 𝒐 𝒅   n a^{b} 𝒎𝒐𝒅 \ n abmod n
如计算 𝟐 𝟏 𝟗 𝒎 𝒐 𝒅   𝟑 𝟑 𝟐^{𝟏𝟗} 𝒎𝒐𝒅 \ 𝟑𝟑 219mod 33

i 4 3 2 1 0 b i 1 0 0 1 1 c 1 2 4 9 19 f 2 4 16 17 17 \begin{array}{|c|c|c|c|c|c|} \hline \boldsymbol{i} & 4 & 3 & 2 & 1 & 0 \\ \hline \boldsymbol{b}_{\boldsymbol{i}} & 1 & 0 & 0 & 1 & 1 \\ \hline \boldsymbol{c} & 1 & 2 & 4 & 9 & 19 \\ \hline \boldsymbol{f} & 2 & 4 & 16 & 17 & 17 \\ \hline \end{array} ibi​cf​4112​3024​20416​11917​011917​​

其中 i i i表示2的幂, b i b_i bi​的 10011 10011 10011其实就是19的二进制数。

流程参考下面伪代码

k = 最高幂值 (本题是4)
c = 0; f = 1
for(i = k , i > 0 , i--)
	do c = 2 × c 
		f = (f × f) mod n
	if bi = 1
	    c = c + 1
		f = (f × a) mod n
return f

右下角的 f = 17 f = 17 f=17 即为所求结果。

练习题
已知RSA算法的公钥为{37,55},请使用 快速模幂算法 计算明文2所对应的密文。
i 5 4 3 2 1 0 b i 1 0 0 1 0 1 c 1 2 4 9 18 37 f 2 4 16 17 14 7 \begin{array}{|c|c|c|c|c|c|c|} \hline \boldsymbol{i} & 5& 4 & 3 & 2 & 1 & 0 \\ \hline \boldsymbol{b}_{\boldsymbol{i}} & 1 & 0 & 0 & 1 & 0 & 1 \\ \hline \boldsymbol{c} & 1 & 2 & 4 & 9 & 18 & 37 \\ \hline \boldsymbol{f} & 2 & 4 & 16 & 17 & 14 & 7\\ \hline \end{array} ibi​cf​5112​4024​30416​21917​101814​01377​​

🕤 4.1.2 使用公钥

𝑷 𝑼 = { 𝒆 , 𝒏 } 𝑷𝑼=\{𝒆,𝒏\} PU={e,n}
𝑿 𝒆 𝒎 𝒐 𝒅   𝒏 = 𝒀 𝑿^𝒆 𝒎𝒐𝒅 \ 𝒏=𝒀 Xemod n=Y

【问题】

  • 为了加快RSA使用公钥的运算速度,通常都会选择一个特定的e,如3、17、65537
  • 若e太小,如e=3,可使用中国剩余定理进行攻击

🕤 4.1.3 使用私钥

𝑷 R = { d , 𝒏 } 𝑷R=\{d,𝒏\} PR={d,n}
Y d 𝒎 𝒐 𝒅   𝒏 = X Y^d 𝒎𝒐𝒅 \ 𝒏=X Ydmod n=X

【问题】

  • 私钥d是选取了e后通过计算得来,无法控制大小
  • 可以借用中国剩余定理、费马定理简化运算,将算法效率提高4倍

🕤 4.1.3 密钥产生

𝑷 U = { e , 𝒏 } 𝑷U=\{e,𝒏\} PU={e,n} 𝑷 𝑹 = { 𝒅 , 𝒏 } 𝑷𝑹=\{𝒅,𝒏\} PR={d,n}

【问题】

  • 攻击者知道n,但不知道构成n的因子p、q
  • 为避免穷举得到因子,p、q应该足够大,目前还没有可靠的方法可以产生任意大素数,只能随机生成较大的奇数,使用Miller-Rabin算法测试

🕘 4.2 RSA的安全性

🕤 4.2.1 穷举攻击

攻击者试图穷举所有可能的私钥

🕤 4.2.2 数学攻击

𝒏 = 𝒑 × 𝒒 𝒏=𝒑×𝒒 n=p×q
ϕ ( 𝒏 ) = ( 𝒑 − 𝟏 ) × ( 𝒒 − 𝟏 ) \phi(𝒏)=(𝒑−𝟏)×(𝒒−𝟏) ϕ(n)=(p−1)×(q−1)
𝒅 ≡ 𝒆 ( − 𝟏 ) ( 𝒎 𝒐 𝒅 ϕ ( 𝒏 ) ) 𝒅≡𝒆^{(−𝟏)} (𝒎𝒐𝒅 \phi(𝒏)) d≡e(−1)(modϕ(n))

【数学攻击的途径】
①将n分解为两个素因子
②直接确定 ϕ ( 𝒏 ) \phi(𝒏) ϕ(n)而不确定p和q,这样同样能确定d
③直接确定d,而不确定 ϕ ( 𝒏 ) \phi(𝒏) ϕ(n)

因子分解问题的进展情况
 十进制位数   二进制位数(近似值)   完成日期  100 332 1991  年  4  月  110 365 1992  年  4  月  120 398 1993  年  6  月  129 428 1994  年  4  月  130 431 1996  年  4  月  140 465 1999  年  2  月  155 512 1999  年  8  月  160 530 2003  年  4  月  174 576 2003  年  12  月  200 663 2005  年  5  月  193 640 2005  年  11  月  232 768 2009  年  12  月  \begin{array}{|c|c|c|} \hline \text { 十进制位数 } & \text { 二进制位数(近似值) } & \text { 完成日期 } \\ \hline 100 & 332 & 1991 \text { 年 } 4 \text { 月 } \\ \hline 110 & 365 & 1992 \text { 年 } 4 \text { 月 } \\ \hline 120 & 398 & 1993 \text { 年 } 6 \text { 月 } \\ \hline 129 & 428 & 1994 \text { 年 } 4 \text { 月 } \\ \hline 130 & 431 & 1996 \text { 年 } 4 \text { 月 } \\ \hline 140 & 465 & 1999 \text { 年 } 2 \text { 月 } \\ \hline 155 & 512 & 1999 \text { 年 } 8 \text { 月 } \\ \hline 160 & 530 & 2003 \text { 年 } 4 \text { 月 } \\ \hline 174 & 576 & 2003 \text { 年 } 12 \text { 月 } \\ \hline 200 & 663 & 2005 \text { 年 } 5 \text { 月 } \\ \hline 193 & 640 & 2005 \text { 年 } 11 \text { 月 } \\ \hline 232 & 768 & 2009 \text { 年 } 12 \text { 月 } \\ \hline \end{array}  十进制位数 100110120129130140155160174200193232​ 二进制位数(近似值) 332365398428431465512530576663640768​ 完成日期 1991 年 4 月 1992 年 4 月 1993 年 6 月 1994 年 4 月 1996 年 4 月 1999 年 2 月 1999 年 8 月 2003 年 4 月 2003 年 12 月 2005 年 5 月 2005 年 11 月 2009 年 12 月 ​​

因子分解方法

  • 在20世纪90年代中期,分解算法都采用二次筛法, 如对RSA-129的分解.
  • RSA-130的分解则采用了一个新算法,称为一般数域筛法,该算法在分解RSA-130时所做的计算仅比分解RSA-129多20%.

在这里插入图片描述

  • 对特殊形式的数字,特殊数域筛法比一般数域筛法快得多。
  • 估计在未来一段比较长的时期,密钥长度介于1024比特至2048比特之间的RSA是安全的.

🕤 4.2.3 计时攻击

↓ ↓ ↓ ↓ ↓ \hspace{2.4em} \downarrow\hspace{1em} \downarrow\hspace{1.3em} \downarrow\hspace{1.5em} \downarrow\hspace{1.5em} \downarrow ↓↓↓↓↓
i 4 3 2 1 0 b i 1 0 0 1 1 c 1 2 4 9 19 f 2 4 16 17 17 \begin{array}{|c|c|c|c|c|c|} \hline \boldsymbol{i} & 4 & 3 & 2 & 1 & 0 \\ \hline \boldsymbol{b}_{\boldsymbol{i}} & 1 & 0 & 0 & 1 & 1 \\ \hline \boldsymbol{c} & 1 & 2 & 4 & 9 & 19 \\ \hline \boldsymbol{f} & 2 & 4 & 16 & 17 & 17 \\ \hline \end{array} ibi​cf​4112​3024​20416​11917​011917​​

【攻击】对解密过程(模幂运算)进行计时
【过程】
①从最左位 𝒃 𝒌 𝒃_𝒌 bk​开始,一位一位地进行
②若该位为1,则要执行 𝒇 = ( 𝒇 × 𝒂 ) 𝒎 𝒐 𝒅   𝒏 𝒇=(𝒇×𝒂) 𝒎𝒐𝒅 \ 𝒏 f=(f×a)mod n,对于一些𝒇 和 𝒂,执行的时间异常慢
③若该位为0,则整个过程执行得很快

【解决方法】

  • 不变的幂运算时间:保证所有幂运算的返回结果前的执行时间都相同
  • 随机延时:加入随机延时来迷惑计时攻击者,仍然可能被攻击
  • 隐蔽:执行幂运算前将密文乘上一个随机数

练习题:用下图所示的RSA算法对下列数据实现加密和解密
a .   p = 3 ; q = 11 , e = 7 ; M = 5 ; a. \ p=3;q=11,e=7;M=5; a. p=3;q=11,e=7;M=5;
b .   p = 5 ; q = 11 , e = 3 ; M = 9 ; b. \ p=5;q=11,e=3;M=9; b. p=5;q=11,e=3;M=9;
在这里插入图片描述
解答:
在这里插入图片描述
在这里插入图片描述


OK,以上就是本期知识点“公钥密码学与RSA”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

RSA公钥密码体制的简介及例题 目录标题传统密码体制传统的对称密码体制密钥管理密钥分发不支持“开放系统”公钥密码体制主要思想:公钥密码体制的优势:密钥分发:密钥管理:开放系统: 传统密码体制 传统的对称密码体制 • 对称密码体制(例如DES, AES) 允许两个用户利用提前共享的 秘密来建立“安全信道” • 通信双方共享秘密并不容易… 密钥管理 • 考虑一个具有N个用户的团体,如果用户两两之间都需要进行 安全通信: • 采用对称... 阅读详情

相关推荐

密码编码学之公钥密码学及RSA

文章目录一、公钥密码学1.公钥密码的基本原理2.公钥密码的应用场景3.公钥密码的依赖条件4.公钥密码的抗攻击性二、RSA1.RSA基本原理 一、公钥密码学 公钥密码与传统密码不同,传统密码是对称加密,而公钥密码是使用两个独立的密钥 非对称的。 使用两个密钥,在消息的保密性、密钥分配和认证领域意义非常很大。 公钥密码和传统密码同样重要,不存在哪个比哪个更重要之说。 1.公钥密码的基本原理 公钥算法依赖于一个加密密钥和一个与之相关的解密密钥。 有以下特点: 拿到加密密钥和加密算法,无法推导出解密密钥,在计算上

楼中望月 7943

第五章 公钥密码体制

公钥密码体制https://www.bilibili.com/video/BV1Hv41117zg/?p=19&spm_id_from=pageDriver&vd_source=7157e436c5f452e8a1706b96184e2699

m0_56696378的博客 1571

密码学之RSA算法

RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出,得名于他们姓氏的首字母。最初设计用于解决密钥分发问题,现已广泛应用于数据加密、数字签名等。fill:#333;color:#333;color:#333;fill:none;1976年 Diffie-Hellman密钥交换算法1977年 RSA算法提出1983年 MIT申请专利2000年代 分布式计算和量子计算理论挑战RSA安全性RSA算法以其安全性和广泛的应用在现代密码学中占据重要地位。

零度°C的博客 6372

公开密钥加密算法RSA的理论概述

RSA加密算法的最大优点就是不需要对密钥通信进行保密,所需传输的只有公开密钥,这样就省去了一条开销很大的密钥传输信道。其保密性强,密钥管理方便,并且具有数字签名、认证和签别等多种功能,特别适合于现代保密通信的需要。大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。RSA的安全性是基于大数因子分解的困难性。目前一般认为RSA需要1024位以上的字长才有安全保障。由于RSA所采用的模幂运算耗时太多,因此它通常只能用于加密少量数据或者加密密钥。

FPGA/MATLAB学习教程/源码/项目合作开发 4057

ctf 密码学入门总结&古典密码&现代密码学&RSA入门原理

以上是对crypto入门的初步总结,后续会持续更新。

2301_80976241的博客 1625

公钥密码学

从介绍非对称密码学开始,讨论了各处算法结构,如 RSA 和 ECC。另外还详细讨论了哈希函数及其属性和用法。此外,还介绍了其他一些概念,如帕特里夏树、分布式哈希表、数字签名、同态加密、签密、零知识证明、盲签名和编码方案。

禅与代码的艺术 1485

公钥密码体制(RSA,椭圆曲线密码,ElGamal

概述 密钥是需要定期更换的。如果采用对称密钥体制(分组密码和序列密码)更换密钥以及相应的“密钥分发”工作量相当大。 由于对称密码在实际应用中“密钥分发”的问题,非对称密码在这方面相对安全。 1976年,Diffie,Hellman发表了非对称密码的奠基性论文《密码学的新方向》,建立了公钥密码的概念。 序列密码在加密和解密时,无论是种子密钥还是生成密钥流,都是一样 分组密码初始密钥是一样的,子密钥使用顺序相反或者可以互推。 而非对称密码不一样,公钥公开,私钥藏好。 只有持有私钥的才能解密。.

weixin_52369224的博客 4003

网络信息安全学习笔记之公钥密码学与RSA

要点: 非对称密码是一种密码体制,其加密算法和解密算法使用不同的密钥,一个是公钥,一个是私钥,非对称密码也称为公钥密码 非对称密码用两个密钥中的一个和加密算法将明文加密成密文,再用另一个密钥和解密算法将密文恢复出明文 非对称密码可以用来保密或者认证都可以 非对称密码不建议加密大量数据,但是对小型消息如验证码的加密或者签名的加密更合适 应用最广泛的公钥密码体制是RSA,破解RSA的困难在于...

ZP_icenow的博客 1736

现代密码学(杨波)【第五版】(个人笔记)

本文为《现代密码学(杨波)第五版》的个人学习笔记摘要,涵盖密码学核心内容:从信息安全威胁(被动/主动攻击)、密码体制分类(对称/非对称)、流密码与分组密码(如AES、SM4)、公钥密码(RSA、ECC、SM2)、密钥管理、消息认证与哈希函数(MD5、SHA、SM3)、数字签名、密码协议(零知识证明、zk-SNARK、安全多方计算)到可证明安全及区块链应用。重点强调保密性、完整性、真实性与不可否认性,适用于考研与科研参考。

m0_73126623的博客 249

自相关互相关卷积的_相关性(Correlation)和相干性(Coherence)

1. 概念相关性(Correlation,或称相关系数或关联系数),显示两相关变量之间线性关系的强度和方向。在统计学中,相关的意义是用来衡量两个变量相对于其相互独立的距离。相干性(Coherence),与相关性计算得到的信息非常相似,都是衡量两个变量之间的相关程度,只是相干性多用于频域计算,可以在基于频率上给出更多的信息,而相关性多用于普通的数组计算和时域信号。这里其实应该有三个概念,c...

weixin_39963053的博客 3332

IEEE LaTeX模板中algorithm排版避坑指南:如何优雅地嵌入算法描述?

本文详细解析了在IEEE LaTeX模板中优雅排版algorithm的实用技巧,包括基础配置、高级自定义及常见问题解决方案。通过嵌套环境与[H]参数的应用,帮助研究者克服IEEEtran模板对算法排版的限制,实现专业且美观的算法呈现。

weixin_28340315的博客 409

公钥密码学与RSA

公钥密码学与RSA 公钥密码学的发展的是整个密码学发展历史中最伟大的革命,也可以说是唯一一次的革命。 公钥密码出现前,几乎所有的密码体制都是基于替换和置换这些初等方法,轮转机和DES是密码学发展的重要标志,但是还是基于替换和置换。 公钥密码学与其前的密码学完全不同。首先,公钥算法是基于数学函数而不是基于替换和置换,更重要的是公钥密码是非对称的,它使用两个独立的密钥,使用两个密钥在消息

土豆洋芋山药蛋的博客 3173

RPA实战:手把手教你打造抖音自动养号机器人(含避坑指南)

本文详细介绍了如何利用RPA技术从零构建一个智能化的抖音自动养号机器人。内容涵盖环境准备、核心工具选型、拟人化行为流程设计、代码实现模块拆解,并提供了关键的避坑指南与风控对抗策略,帮助开发者高效、稳定地实现账号自动化运营。

orange的博客 562

现代密码学入门:CyberSecurity课程教你理解RSA与公钥加密的核心原理

想要在数字时代保护隐私安全吗?CyberSecurity课程中的现代密码学模块为你揭开RSA公钥加密的神秘面纱!🚀 公钥加密技术是当今互联网安全的基石,从在线支付到即时通讯,无处不在保护着我们的数字生活。本文将带你轻松理解这一复杂概念,掌握RSA算法的核心原理。 ## 为什么需要公钥加密?🔐 在传统的对称加密中,加密和解密使用相同的密钥,就像用同一把钥匙锁门和开门。但问题来了:如何安全地把

gitblog_00426的博客 855

基于Simulink环境,提供一个关于如何对EMI抑制的DC-DC变换器进行仿真建模的示例

EMI定义:电磁干扰是指任何能中断、阻碍、降低或限制电气设备有效性能的电磁能量。重要性合规性:确保产品符合国际和地方的EMC标准。可靠性:减少因外部或内部EMI导致的系统故障风险。挑战滤波设计:合理设计输入输出滤波器以抑制传导EMI。布局与接地:良好的PCB设计对于减少辐射EMI至关重要。屏蔽:使用金属屏蔽来保护敏感电路不受外界干扰。首先明确要模拟的任务内容。设计一个能够在高频操作下有效抑制EMI的DC-DC变换器。根据工作频率和谐振元件值确定合适的滤波器参数。

xiaoheshang_123的博客 148

直捣黄龙~

这篇文章描述了一个矩阵寻路问题,要求计算从起点到终点的最短路径数量及长度。主要思路是通过BFS算法解决:首先标记哨兵警戒区域为禁区,然后从起点出发进行广度优先搜索,记录每个位置的最短步数和路径条数。当到达终点时,输出路径数和步数;若不可达则返回(0,0)。算法使用队列实现BFS,同时处理路径统计和步数记录,适用于网格寻路类问题。

面试高手的博客 217

现代密码学|密码学基本概念|流密码|分组密码|公钥体制|密码分配与管理|消息认证|数字签名|密码协议

现代密码学 文章目录**现代密码学**@[toc]第一章1、密码学的基本概念、分类2、安全目标与攻击类型3、信息安全的基本要求4、凯撒、弗吉尼亚密码5、Kerckhoffs原则6、单多表代换与置换密码单表代换多表代换置换密码7、频率分析攻击8、我国商用密码举例第二章1、完善保密性2、熵3、一次一密本4、流密码第三章1、分组密码概念、方法2、**Feistel**密码结构的特点3、常见分组密码算法4、运行模式及特点第四章1、对称与公钥密码对比2、公钥密码体制3、RSA算法4、椭圆曲线密码5、El Ganmal

qq_47234534的博客 6228

全球SAR卫星大盘点与回波数据处理专栏目录

本专栏将详细介绍各国各地区的SAR卫星的特点和性能,以及SAR回波数据的处理方法和技巧。主要介绍民用和商用SAR卫星,帮助你了解商业SAR卫星的最新动态和技术,MATLAB代码将全部开源。以下是专栏目录,持续更新中。

3165

【现代密码学原理】——期末复习(冲刺篇)

📖 前言:快考试了,做篇期末总结,都是重点与必考点。

HinsCoder的博客 6128

【IPC】ONVIF Device Manager 测试工具

介绍onvif 协议测试工具

以实战经验介绍行业知识 1961

4、高光图像滤镜显著改善文本图像的光学字符识别

本文介绍了高光图像滤镜在光学字符识别(OCR)中的应用,详细探讨了其技术原理、实现步骤和在多种场景下的效果。通过增强文本图像的边缘和对比度,高光滤镜显著提升了OCR的识别率,尤其适用于扫描文档、手写笔记和低质量图像。实验结果表明,该方法在不同类型的文本图像中均表现出色,并提出了未来优化方向,如深度学习集成和多模态融合,为OCR技术的发展提供了新的可能性。

ooo22的博客 96

公钥密码学,RSA算法

公钥密码学 1976年Diffie和Hellman针对上面的问题提出了单向函数加密方法,这种方法和之前数千年来密码学中的所有方法有根本的区别,即公钥密码体制。 非对称加密算法使用完全不同但又是完全匹配的一对钥匙: 公钥和私钥 公钥:公开的,任何人都知道 私钥:只有自己知道 算法:一对密钥中用公钥加密的结果可以用私钥解密,反过来用私钥加密的结果也可以用公钥解密。 公钥加密的使用方式 Alice和Bob互发(公布)各自的公钥,私钥只有自己知道 Alice用对称密钥加密信件,再用Bob的公钥加密

qq_45886314的博客 1166

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

密码学基础-公钥密码与RSA、SM2算法设计原理

公钥密码学是数字信任的基石,而RSA与SM2分别代表了经典与创新的技术路线。RSA的广泛应用验证了其可靠性,而SM2作为中国密码技术的突破,正以更高的效率和安全性引领国产化替代浪潮。在技术自主与全球化并行的今天,深入理解这两大算法,不仅是技术人员的必修课,更是守护数字主权的重要一环。

Sensitive_web_chaser的博客 1070

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RSA公钥密码算法的原理及实现(一)

一、公钥密码学概述。  公开密钥密码算法的提出是整个密码学历史上最大的而且也许是最唯一真正的变革。从最初一直到现代,几乎所有密码系统都建立在基本的替代和置换工具的基础上。在用了数千年的本质上可以手算完成的算法之后,常规的密码学随着转轮加密/解密机的发展才出现了一个重大进步。机电式变码旋转软件使得极其复杂的密码系统被研制出来。有了计算机后,更加复杂的系统被设计出来。但是不管是转轮机还是后来的DE

A00553344的专栏 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

古典密码学与现代密码学

一、古典密码学 何谓“加密” “密码”或“加密系统”用于“加密”数据。 对于原始的未加密的数据,我们称之为“明文” 对于加密的结果,我们称之为“密文”。 通过称为“解密”的过程,我们把密文恢复成原始的明文。 凯撒密码(公元前54年): 消息的加密是通过将当前字母替换为在常规字母表中第n个位置之后的那个字母来完成的。 换位密码保持所有字母数量不变,只改变字母的排列,一般是将明文写在一个给定大小的矩阵中,然后对行和列依据特定的序列进行置换操作。 理想的加密系统 过去的明文和密文攻击者可以知道 加密和解密的算法对

m0_52231503的博客 3347
上一篇: 【现代密码学原理】——分组加密的工作模式(学习笔记)
下一篇: 【C++详解】入门C++
HinsCoder
博客等级 码龄5年 1万+粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值