惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
D
DataBreaches.Net
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
人人都是产品经理
人人都是产品经理
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
腾讯CDC
博客园_首页
The Cloudflare Blog
S
SegmentFault 最新的问题
C
Check Point Blog
美团技术团队
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale

博客园 - viphhs

【不好分类】第四届全国数据安全职业竞赛网络与信息安全管理员赛道 初赛 wp [读些好书]多年前张晓楠推荐的书,《追逐日光》 [办公自动化]我用workbuddy做什么-人工智能月报调研 【AI大模型】ai-bot.cn 【办公自动化】微软开源的Powertoys,可以探索其中的AI能力 【学点AI】跟着Trae官方学做项目 [职称英语考试]参加2026年4月中国石化专业技术人员外语水平考试后记及成绩查询 [学点编程]python workout,每天10分钟学会python 读书笔记 [读书笔记]如何汇报?如何回应批评?如何面对一堆说不清楚的任务?读脱不花《干得漂亮》有感 [网络安全]Zoomeye 永久社区版使用及购买指南(含注册邀请码) [办工自动化]免费的pdf编辑工具 [ctf入门]记录那些傻x的题目 [动手做做题]长期更新,题目来自各大佬 备赛数据安全大赛2025 miniforge 与vs code联动 [网络安全]知攻知攻善防应急响应靶场-linux2 【CTF】RCE-labs [办公自动化]我和deepseek的问答2 [办公自动化]我和DeepSeek的问答1 [办公自动化]deepseek解决不了的问题,“帮忙找到丢失的word文件” [ctf]跟着风二西复现NSSCTF流量题目 [CTF]2024 强网杯青少年专项赛 writeup [CTF]网鼎杯2024半决赛复盘 [ctf]buuoj 使用dirsearch扫描目录报错429该如何办?
[办公自动化]我和DeepSeek的对话3,学习RSA
viphhs · 2025-03-07 · via 博客园 - viphhs

我的问题:

请你帮忙再讲讲RSA的基本原理,用通俗的语言。

之前还问了一道GHCTF2025新生赛的题目:

from Crypto.Util.number import getPrime, bytes_to_long
p=getPrime(128)
q=getPrime(128)
n=p*q
phi=(p-1)*(q-1)
flag="NSSCTF{xxxxxx}"
print("p=",p)
print("q=",q)
m=bytes_to_long(flag.encode())
e=4
c=pow(m,e,n)
print("c=",c)
print("n=",n)
'''
p= 182756071972245688517047475576147877841
q= 305364532854935080710443995362714630091
c= 14745090428909283741632702934793176175157287000845660394920203837824364163635
n= 55807222544207698804941555841826949089076269327839468775219849408812970713531
'''

Deepseek答案:

RSA 加密可以想象成一种特殊的“数学锁”:你造一把锁(公钥),所有人都能用它来锁住信息,但只有你拿着钥匙(私钥)才能解开。它的核心是三个步骤:


1. 造锁(生成密钥)

  • 选两个大质数:比如 p=3p=3,q=11q=11(实际中这两个数极大,比如几百位)。

  • 计算锁的“齿数”n=p×q=3×11=33n=p×q=3×11=33(这就是公钥的一部分)。

  • 计算“隐藏的齿轮”ϕ(n)=(p−1)(q−1)=2×10=20ϕ(n)=(p1)(q1)=2×10=20(这是私钥的关键)。

  • 选一个“公开的开关”:比如 e=3e=3(要满足 ee 和 ϕ(n)=20ϕ(n)=20 互质,即没有公因数)。

  • 生成“钥匙”:找一个数 dd,使得 e×d≡1mod  ϕ(n)e×d1modϕ(n)。这里 d=7d=7,因为 3×7=21≡1mod  203×7=211mod20。

公钥是锁(n=33,e=3)(n=33,e=3);私钥是钥匙d=7d=7。


2. 上锁(加密)

假设你想加密数字 m=7m=7:

  • 用公钥加密:计算 c=memod  n=73mod  33=343mod  33=13c=memodn=73mod33=343mod33=13。

  • 加密后的密文是 c=13c=13。


3. 开锁(解密)

用私钥 d=7d=7 解密密文 c=13c=13:

  • 用钥匙解密:计算 m=cdmod  n=137mod  33m=cdmodn=137mod33。

  • 直接计算 137137 会很大,但可以用模运算简化:

    • 132=169mod  33=4132=169mod33=4

    • 134=42=16mod  33134=42=16mod33

    • 137=134×132×13=16×4×13=832mod  33=7137=134×132×13=16×4×13=832mod33=7。

  • 解密得到原文 m=7m=7。


为什么 RSA 安全?

  • 锁(公钥)是公开的:所有人都知道 n=33n=33 和 e=3e=3。

  • 钥匙(私钥)藏在质数里:如果攻击者想从 n=33n=33 反推出 p=3p=3 和 q=11q=11,需要做质因数分解。当 nn 是一个几百位的数时,分解它需要超级计算机算几百年。


特殊情况(比如你的题目中的 e=4e=4)

通常 ee 必须和 ϕ(n)ϕ(n) 互质,才能保证存在解密的 dd。但如果 ee 和 ϕ(n)ϕ(n) 不互质(比如你的题目中 e=4e=4,而 ϕ(n)ϕ(n) 可能被 4 整除),这时无法直接计算 dd。需要“暴力拆锁”:

  1. 分解 nn 得到 pp 和 qq(题目已给出)

  2. 分别在模 pp 和模 qq 下解方程

    • 解 m4≡cmod  pm4cmodp

    • 解 m4≡cmod  qm4cmodq

  3. 用中国剩余定理(CRT)组合所有可能的解,再筛选出有意义的明文(比如以 NSSCTF{ 开头)。


通俗总结

RSA 就像用两个大质数造了一把数学锁,加密是“用公开的开关把信息锁住”,解密是“用隐藏的钥匙解开”。如果钥匙的设计有问题(比如 ee 选得不好),就需要拆开锁的内部结构(分解 nn),在更小的锁芯(模 pp 和 qq)里逐个破解,最后拼出完整的钥匙。