RSA 私钥计算 解题 writeup
题目来源CryptoHack - Public-Key Cryptography 公钥密码学模块 难度20 分 · 15714 次解题 · 26 个解决方案 知识标签RSA、模乘法逆元、欧拉函数、扩展欧几里得算法一、题目背景题目给出了 RSA 中的两个素数和公钥指数p 857504083339712752489993810777 q 1029224947942998075080348647219 e 65537要求计算对应的私钥d≡e−1(modφ(N))其中 φ(N) 是欧拉函数Eulers totient functionNpq。二、RSA 加密原理简述在进入计算之前先理一下 RSA 的整体框架理解「为什么私钥是 e−1modφ(N)」。1. 密钥生成随机选取两个大素数 p,q计算 Npq。N 是模数会公开。计算欧拉函数 φ(N)(p−1)(q−1)。这是秘密因为分解 N 困难。选取公钥指数 e要求 gcd(e,φ(N))1。常用值是 655372161。计算私钥 d≡e−1(modφ(N))即 e⋅d≡1(modφ(N))。最终公钥(N,e)私钥(N,d)2. 加密与解密加密加密cmemodN解密解密mcdmodN3. 为什么 de−1modφ(N) 能解密由欧拉定理当 gcd(m,N)1 时mφ(N)≡1(modN)若 e⋅d≡1(modφ(N))即 edkφ(N)1则cd(me)dmedmkφ(N)1(mφ(N))k⋅m≡1k⋅m≡m(modN)这就是 RSA 能正确解密的数学基础。私钥 d 之所以被称为「陷阱门trapdoor」正是因为它让我们能快速反转 m↦memodN 这个函数而没有 d也就是没有 φ(N)的攻击者只能去分解 N。三、解题步骤Step 1计算 N 和 φ(N)Np⋅qφ(N)(p−1)(q−1)由于 p,q 都是素数φ(N) 直接由公式给出这是关键只有在已知 p,q 的情况下才能快速算出 φ(N)否则需要先分解 N。Step 2求 e 模 φ(N) 的乘法逆元我们需要找到 d 使得e⋅d≡1(modφ(N))这是一个模乘法逆元问题标准解法有两种扩展欧几里得算法Extended Euclidean Algorithm在求 gcd(e,φ(N)) 的同时得到一组系数 (x,y) 满足 exφ(N)ygcd1于是 d≡x(modφ(N))。费马小定理 / 欧拉定理当模数为素数时可用 a−1≡ap−2(modp)但这里 φ(N) 不是素数不能用此法。本题用扩展欧几里得即可。四、代码实现方法一Python 内置Python 3.8Python 3.8 起的pow(a, -1, m)直接支持模乘法逆元背后用的就是扩展欧几里得p 857504083339712752489993810777 q 1029224947942998075080348647219 e 65537 N p * q phi (p - 1) * (q - 1) # 模乘法逆元d e^(-1) mod phi(N) d pow(e, -1, phi) print(N , N) print(phi , phi) print(d , d) # 验证 assert (e * d) % phi 1 print(验证 (e*d) mod phi , (e * d) % phi, OK)方法二手写扩展欧几里得算法为了更直观地理解原理可以手写一遍 EEAdef egcd(a, b): 返回 (g, x, y) 使得 a*x b*y g gcd(a, b) if b 0: return a, 1, 0 g, x1, y1 egcd(b, a % b) return g, y1, x1 - (a // b) * y1 def modinv(a, m): g, x, _ egcd(a, m) if g ! 1: raise Exception(f{a} 在模 {m} 下无逆元 (gcd{g})) return x % m d modinv(e, phi) print(d , d) 两种方法得到的结果完全一致。运行结果N 882564595536224140639625987659416029426239230804614613279163 phi 882564595536224140639625987657529300394956519977044270821168 d 121832886702415731577073962957377780195510499965398469843281 验证 (e*d) mod phi 1 OK五、结果验证为确保正确性做两个检查检查 1e⋅d≡1(modφ(N))e * d 65537 * 121832886702415731577073962957377780195510499965398469843281 7986803722695006743881348245664854549172812954392417215712469148697 (e * d) mod phi(N) 1 ✓检查 2用 (N,e) 加密一个测试明文再用 d 解密能还原python m 20260704 # 任取一个测试明文 c pow(m, e, N) # 加密 m2 pow(c, d, N) # 解密 assert m m2 print(解密还原 m , m2, OK)运行后m2 20260704验证通过说明 d 确实是正确的私钥。六、Flag121832886702415731577073962957377780195510499965398469843281七、一点拓展1. 为什么 e 通常取 65537655372161 是一个费马素数。选择它的原因是素数能提高与 φ(N) 互素的概率二进制表示为1 0000 0000 0000 0001只有两个 1模平方算法只需 17 次乘法加密速度快比早期的 e3 更安全e3 时若消息过小或相同消息发给多个接收者容易遭受 Coppersmith / Håstad 攻击。2. 实际 RSA 的安全性依赖本题直接给出了 p,q所以计算 φ(N) 是 O(1) 的。但在真实 RSA 中攻击者只能拿到公开的 (N,e)必须先分解 N才能算出 φ(N) 和 d。当 N 足够大目前推荐 2048 位以上时大整数分解是公认的困难问题这就是 RSA 安全性的基石。3. Python 3.8 以下怎么办老版本 Python 没有pow(e, -1, m)可以用gmpy2.invert(e, phi)或者直接调用上面手写的modinv。竞赛/CTF 中gmpy2几乎是标配。八、小结这道题的核心知识点私钥的本质d 是 e 在模 φ(N) 下的乘法逆元由 ed≡1(modφ(N)) 定义。欧拉函数当 Npq 且 p,q 为素数时φ(N)(p−1)(q−1)这是 RSA 的「陷阱门」信息。求解方法扩展欧几里得算法Python 中即pow(e, -1, phi)。安全前提所有这些计算都依赖于已知 p,q若只知道 N则需先分解这正是 RSA 安全性的来源。

相关新闻

机器学习项目的完整流程:从原始数据到模型预测

机器学习项目的完整流程:从原始数据到模型预测

学完 AI、机器学习、训练集、指标和过拟合之后,下一步要把这些概念放进一个完整项目里。 很多初学者一上来就问:模型用什么?参数怎么调?准确率为什么不高?但真正做项目时,模型只是中间一环。一个项目能不能…

2026/7/6 13:30:26 阅读更多 →
GitLab CI Include 关键字完全指南:4种方式模块化编排你的流水线

GitLab CI Include 关键字完全指南:4种方式模块化编排你的流水线

GitLab CI Include 关键字完全指南:4种方式模块化编排你的流水线📈 Include 工作流程图一、核心概念:Include 的本质是"配置拼接"1. 处理时机2. 合并策略3. 嵌套限制二、方式一:include:local —— 引用同仓库文件场景示…

2026/7/6 13:28:26 阅读更多 →
Travis CI Matrix 多环境测试终极指南:15个版本组合并行构建的秘籍

Travis CI Matrix 多环境测试终极指南:15个版本组合并行构建的秘籍

Travis CI Matrix 多环境测试终极指南:15个版本组合并行构建的秘籍📈 Matrix 矩阵构建流程图一、核心概念:Matrix 的本质是什么?二、实战一:Node.js 多版本 多操作系统的前端测试场景描述三、实战二:Pytho…

2026/7/6 13:28:26 阅读更多 →

最新新闻

LangChain--04--消息与提示词模板

LangChain--04--消息与提示词模板

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录1.认识消息1.1 消息的内部结构1.6.3 多轮对话聊天机器人2.提示词模板(Prompt Templates)2.1 为什么推荐提示词模板?2.2 提示词机制演进2.3 ChatPromptTem…

2026/7/6 14:17:16 阅读更多 →
独立站搭建工具测评:BBWEYY/比文云/Supabase/Notion AI(2026年7月更新)含零代码SAAS、AI编程、源码定制交付

独立站搭建工具测评:BBWEYY/比文云/Supabase/Notion AI(2026年7月更新)含零代码SAAS、AI编程、源码定制交付

一、六个建站工具总表品牌建站方式适合谁价格BBWEYY全域全端全行业的AISAAS工具覆盖5000行业包括零售、工厂、外贸、教培行业本地生活,特别适合中小企业、工厂、商贸公司、外贸企业、教培机构和多行业经营项目。700元-3000元一年,买3送3年,年…

2026/7/6 14:17:16 阅读更多 →
YOLO11 深度解析:完整网络原理、TAL 标签分配、全量源码与工业落地实战

YOLO11 深度解析:完整网络原理、TAL 标签分配、全量源码与工业落地实战

目录 摘要 一、YOLO11算法迭代背景与核心优势 1.1 传统YOLO系列落地核心痛点 1.2 YOLO11核心迭代创新点 1.3 主流目标检测算法性能全面对标 二、YOLO11完整三层网络架构深度拆解 2.1 Backbone主干网络:轻量化CSPDarknet-P2架构 2.1.1 核心C3k2模块原理详解 2.1.2 C2P…

2026/7/6 14:17:16 阅读更多 →
AI进入下半场:模型不再稀缺,真正稀缺的是算力、场景和信任

AI进入下半场:模型不再稀缺,真正稀缺的是算力、场景和信任

过去一年,AI行业最显著的变化,是判断AI进展的方式变了。过去一年,AI行业最显著的变化,是判断AI进展的方式变了。 在更长一段时间里,外界习惯用参数规模、榜单排名、融资金额和产品发布节奏来理解AI。但进入2025年后&a…

2026/7/6 14:13:10 阅读更多 →
踩坑半年总结:C#部署YOLO最容易忽略的8个工业级细节

踩坑半年总结:C#部署YOLO最容易忽略的8个工业级细节

前言 网上关于C#部署YOLO的教程铺天盖地,但90%都停留在“跑通Demo”的阶段。真正把模型塞进产线、扛住724小时运行、应对各种边缘Case后,你才会发现:能跑和能用之间,隔着一整条护城河。 本文不讲基础环境搭建,只聊我在过去半年工业落地中用血泪换来的8个细节。每一个都是深…

2026/7/6 14:11:07 阅读更多 →
【VTG】T2SGrid: Temporal-to-Spatial Gridification for VTG

【VTG】T2SGrid: Temporal-to-Spatial Gridification for VTG

note T2SGrid 的最大贡献在于范式创新:它没有直接设计复杂的时间模块,而是巧妙地借用了视觉大模型原生的空间注意力机制,将时间流转化为空间网格。把视频多帧拼成一张网格图(把视频 clip 拼成网格图),让普…

2026/7/6 14:11:07 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻