ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI辅助密码学解题实战:以RSA低加密指数攻击为例

AI辅助密码学解题实战:以RSA低加密指数攻击为例 2026年1月25日晚上我的密码学解题课堂开到了新的一期。和以往不同的是这堂课我全程让AI参与了从读题、拆解思路、编写攻击脚本到验证结果的全过程。结果很有意思AI确实帮我省掉了大量重复劳动但也犯了好几个非常典型的错误甚至一度把问题带偏了。这节课之后很多同学私信问我“AI解题到底靠不靠谱”“提示词怎么写的”所以干脆把这堂课的完整过程和踩坑点整理成一篇博文分享给所有正在用或准备用AI辅助密码学学习和CTF训练的朋友。这堂课的核心内容是用一个真实的RSA低加密指数攻击案例展示“人类出思路、AI补细节、脚本做验证”的协作模式。同时我也梳理了AI在古典密码、现代密码结构里的能力边界以及我在实际使用中遇到的五个大坑。无论你是刚开始学密码学的小白还是想提升CTF解题效率的老手这篇文章应该都能给你一些可复用的经验。1. 为什么我会在密码学课堂上引入AI解题1.1 密码学这门课的特殊性密码学大概是计算机领域里最“两头大”的方向古典密码简单到可以手动破译现代密码又抽象到需要用数论和概率论堆出安全性证明。很多初学者卡住的地方不是某个具体算法而是不知道“拿到一道题该往哪个方向想”。比如说给你一串十六进制密文到底是先考虑Base64解码还是先看长度给了你n、e、c三个大整数第一反应是分解n还是查已知模数这些判断依赖经验书里不会明说而AI恰好擅长把这种经验性的“下一步动作”快速枚举出来。另一个原因是密码学解题特别适合“可验证的试错”。你让AI猜一种加密方式猜错了不会造成任何损失写个脚本跑一下就知道答案不对这种低成本的尝试让AI的幻觉也不至于太致命。只要人还保留验证能力AI就能当一个不错的“快速试错器”。1.2 AI解题不是代做而是“思路外挂”我一开始也担心让学生用AI解题会让练习失去意义。但后来我发现真正危险的不是AI帮你算凯撒位移而是你根本不知道AI在算什么。所以我在课堂上立了一个规矩AI只能用来生成候选思路和草稿脚本最终的判断、解释和提交必须由人来完成。换句话说AI是计算器和搜索引擎的合体不是大脑。实际操作下来这种“思路外挂”模式很香。遇到一道CTF密码题传统做法是翻博客、查工具、跑脚本前后可能要折腾半小时。现在我可以先让AI列出五到十种可能的攻击路径再根据题目条件逐一排除准确率高很多。特别是那些历史上已经被人反复研究过的密码系统AI训练语料里大把相关代码它生成的基础攻击脚本往往可以直接用省下的时间足够我去琢磨题目里的隐藏陷阱。1.3 这堂课面向谁能解决什么问题这一期“Yusa的密码学课堂”主要面向三类人一是CTF新手想快速建立密码学题目的解题手感二是正在自学现代密码学的学生需要用可运行的代码来理解算法流程三是对AI辅助学习感兴趣但不知道如何设计提示词、如何避坑的朋友。对这堂课的定位我反复强调过不是教“用AI抄答案”而是教“如何和AI协作解决一个本来需要查很多资料才能搞定的问题”。比如后面要讲的RSA低加密指数攻击传统做法是找到一套能跑的Wiener攻击代码再手动调整参数。而用AI协作你只需要明确告诉它“e特别小、密文c的e次方小于n”这两个条件它就能把攻击脚本的骨架写出来剩下的校验和参数修正由人来完成。这种能力是可以迁移的对以后用AI辅助其他方向也有帮助。2. 从古典密码到现代密码AI擅长与不擅长的分界线2.1 古典密码暴力枚举与频率分析的AI优势课堂上的第一个环节我先带大家快速过了一遍古典密码的AI解题体验。凯撒密码、栅栏密码、维吉尼亚密码这类老古董核心问题就两个密钥空间小或者有统计特征可循。AI在这类题上的表现相当好因为它本质上是个概率模型对字母频率、单词模式这些统计规律非常敏感。比如一道维吉尼亚密码题密文只有几百个字符传统做法是先猜密钥长度再逐列做频率分析。AI一步到位的能力很强你只要给它密文让它“尝试常见密钥长度并计算重合指数”它基本能直接给出正确的密钥长度。不过这里有个致命的前提密文必须是标准的纯字母文本如果题目做了变异比如去空格、转小写、混入数字AI的输出就会乱掉你还是得自己手动清洗数据。所以我的结论是古典密码阶段AI可以当主力但人必须保留数据清洗和结果校验的能力。千万别把AI给的答案直接填进提交框我遇到过AI把“IS”解成“ZH”的情况原因只是密文里掺了一个非法字符。2.2 现代密码结构AI的推理短板到了RSA、AES、椭圆曲线这一层AI的表现就明显两极分化了。只要涉及具体算法流程的“套用型”问题AI非常强比如告诉你这是RSA且已知p、q它马上能写出计算私钥d的脚本但涉及“为什么这个参数是安全的”“这里为什么要用OAEP填充”这类需要数学直觉的问题AI的回复就变得很飘经常把书本上的话绕一大圈再吐出来。更麻烦的是AI对“题目给出的一组数到底意味着什么”这种开放性的判断并不靠谱。我测试过一个场景给AI两个大素数和一个较小的公钥指数e3以及一段很短的密文c它第一反应是“可能存在低加密指数攻击”这个方向是对的但让它判断“直接对c开三次方根”是否可行时它却支支吾吾因为它不知道c的数值到底多大需要人先算一下c和n的数量级关系。AI的推理是“模式匹配”而不是“数学计算”必须由人来做具体的数值判断。2.3 实操让AI生成多种候选解并自动评分为了让学生直观看到AI的能力边界我在课堂上做了一个小实验从一道简单的替换密码题开始让AI生成五种不同的候选破解方案并且实现了一个自动评分函数用英文单词命中率来打分。这个实验的代码很简单但效果很有说服力。先定义几个候选解密函数每个函数用AI生成的逻辑比如“按字母频率替换”“按二元组频率替换”“用模拟退火搜索替换表”等等。AI负责编写每个函数的实现代码我负责写一个统一的调用接口和评分函数。评分函数的核心是统计解密后的文本里有多少个常见英文单词命中率高的排名靠前。经过一轮测试AI写的模拟退火搜索脚本效果最好但它在实现贪心算法时忽视了一个细节替换表不能出现映射冲突。这个坑在我加了“唯一性检查”后才暴露出来正好成为后续讨论“AI幻觉与调试”的引子。这种“多方案并行自动评分”的思路后来被我做成了课堂上的一个固定工具也让同学们明白AI的价值在于快速给你一堆“可能可行”的路径而你的工作是把这些路径变成可执行脚本再设置一个清晰的指标让它们互相竞争。3. 一堂课上的完整AI解题流程以RSA低加密指数攻击为例3.1 题目背景与破题点这堂课的核心实战是一道经典的RSA低加密指数攻击题。题目给了三个参数n是一个很大的合数e是3c是密文。乍一看RSA解密需要私钥d而d依赖n的分解这似乎是一道困难题。但熟悉这类题目的人会立刻想到如果m的e次方小于n那么密文c其实是m^3的精确值没有经过模n的归约这时候直接对c开三次方根就能拿到明文m。关键是判断c是否远小于n。在课堂上我没有直接告诉学生答案而是让大家先“问AI”。有同学给AI发了一句“帮我看看这题能不能直接开三次方”AI的回答是“如果c的立方根是整数就可以”这显然是一句正确的废话。于是我引导大家换一种提问方式“请帮我计算c的十进制位数和n的十进制位数并比较它们”。这一步让AI精确地输出了两者的长度一对比发现c的位数只有n的十分之一破题点就出来了。3.2 向AI提问的提示词设计这里要重点说提示词的设计。同样是“帮我看这道题”不同问法结果差距巨大。我把课堂上实际用过的三版提示词列出来大家可以感受一下第一版太泛“你是密码学专家请帮我解题。”AI只能给出一堆理论说明没有任何可用的步骤。第二版带条件“这是一道RSA题目已知n、e3、c请判断是否存在低加密指数攻击。请先计算c和n的位数再给出结论和攻击脚本。”第三版带格式约束“你是CTF密码学助手。已知n[...], e3, c[...]。先输出c和n的十进制位数再判断是否可以直接开立方根。如果可以请用Python写一个利用gmpy2.iroot的脚本并说明依赖安装方式。不要输出多余解释。”第三版效果最好。关键在于“先输出位数再判断”这个流程强制的中间步骤让AI不能直接跳过计算瞎猜。输出格式约束也很重要能够避免AI扯一大堆背景知识。当然即便这样AI也可能在具体代码上出错需要后续验证。3.3 验证与修正AI给出错误脚本后的排查过程AI生成的开三次方根脚本一开始长这样from gmpy2 import iroot m iroot(c, 3)[0] print(bytes.fromhex(hex(m)[2:]).decode())粗略一看没什么问题但运行时报错bytes.fromhex遇到奇数长度的十六进制字符串。这是因为iroot返回的大整数转为十六进制后如果最高位字节小于0x10字符串会变成奇数长度。我让AI修正它给出的方案是补一个前导零h hex(m)[2:] if len(h) % 2: h 0 h print(bytes.fromhex(h).decode())这个修正是对的。但紧接着又出现第二个问题decode默认utf-8如果明文里含非UTF-8字符会抛异常。题目里的明文一般是纯英文文本但保险起见我让AI把decode改成latin1或者先尝试utf-8失败再回退。这些细节不是AI一次性能想全的需要人来判断。这正好说明AI能写80%的代码剩下的20%修复工作依赖你对Python字符串处理和编码知识的熟悉程度。4. AI在密码学解题中的坑与边界我踩过的五个问题4.1 幻觉AI会一本正经地瞎编数学证明最经典的翻车场景是让AI解释“为什么RSA是安全的”。它会引用大整数分解困难性、中国剩余定理、欧拉定理等一堆名词然后拼出一个看起来逻辑通顺但细看完全站不住脚的“证明”。有一次我故意问AI“请证明npq时已知φ(n)能分解n”它洋洋洒洒写了一大段最后一步“显然我们可以从φ(n)直接推出p和q”其实是错误的正确做法是解一个一元二次方程。这种幻觉非常隐蔽因为它把最关键的一步混在大量正确公式里让人很难察觉。对策也很简单永远不要相信AI的数学证明尤其是那些“显然”“易得”的步骤。一旦AI给出结论手动找几个小数值验算一下比如取p5, q11, n55, φ(n)40看它的方法能不能还原出5和11。验算不通过就是幻觉直接让它重新推导。4.2 依赖库版本与Python环境问题密码学解题大量用到gmpy2、pycryptodome、sympy这些库。AI生成的脚本默认假设这些库已经安装且版本兼容实际怎么可能。我踩过的坑包括gmpy2在Python 3.12下编译失败、Crypto.Util.number在新版里改名为Cryptodome、sympy的factorint在某些版本返回的因子顺序不同等等。我的建议是在所有AI生成的脚本顶部强制加一段环境检查代码比如import sys assert sys.version_info (3, 9) try: import gmpy2 except ImportError: raise SystemExit(请先安装 gmpy2: pip install gmpy2)同时准备一个统一的需求清单直接在课堂仓库里让AI参考版本号生成命令。这样能减少很多无意义的报错。4.3 数据格式问题十六进制、Base64、换行符密码学题目里的密文格式五花八门有的给十六进制字符串有的给Base64还有的给大整数。AI对格式的判断经常出错。比如给一段Base64密文AI默认按ASCII处理解出乱码给它一个大整数它可能当成十六进制字符串去long_to_bytes结果南辕北辙。我的经验是在喂给AI之前人先做一次简单的格式识别长度是偶数且只含0-9a-f多半是hex末尾带且字符集是A-Za-z0-9/多半是Base64纯数字且远超64位多半是十进制大整数。识别完以后在提示词里明确告诉AI“这是十六进制字符串长度是xxx”AI的出错率会直线下降。4.4 无法理解题目陷阱和隐含规则CTF题目的难点往往在“陷阱”而不在“算法”。AI很难理解出题人的心理。举课堂上的一个例子题目给了一个看起来像AES加密的结果密钥藏在图片的EXIF信息里AI读题后只盯着字符串分析完全没往图片方向想。这种跨模态的信息线索AI模型不是不能处理但你没有主动要求它分析图片它就不会去管。说白了AI缺乏“破案”思维它只会按你给的输入做单一维度的推理。解决方法是把题目描述原封不动地发给AI并且加一句“请列出所有非文本形式的附件并推测它们可能包含什么”。这一步能激活AI对附件的敏感度。但最终的判断仍要人来落定因为AI经常给出“图片里可能有LSB隐写”这种选项但不会告诉你到底哪张图有。4.5 多轮对话中的“上下文漂移”用AI解题不是一轮对话就结束的经常要来回十几轮。这时候问题就来了AI会把前面对话里的错误假设继续用下去哪怕你已经在后面纠正了。比如我让AI分析一个密文它第一轮猜是凯撒后来发现是维吉尼亚但之后它写的代码里还残留着凯撒位移的变量名。这就是“上下文漂移”。应对方法有两个一是每轮修改提示词时附加上一条关键结论比如“我们已经确认这是维吉尼亚密码密钥长度为5请基于此修改代码”二是遇到重大转向直接重开一个会话把之前确认的信息整理成一段干净的任务描述发进去。我更喜欢后者干净利落也方便保存每一步的中间结论。5. 让AI成为更好的密码学助手提示词与工作流设计5.1 角色设定与输出格式约束经过十几节课的摸索我总结了一套比较稳定的提示词模板。角色设定不是可有可无的明确“你是CTF密码学解题助手”能显著提升AI输出的细节质量因为它会激活训练数据里大量CTF解题的对话模式。输出格式一定要强制为“结论代码验证方式”三段式避免AI写成长篇散文。我在课堂上给过一个标准模板你是CTF密码学解题助手擅长分析古典密码和现代密码算法的攻击方法。 已知题目信息 - 加密方式RSAe3 - 参数n[...]c[...] 第一步请判定是否存在低加密指数攻击给出判定依据要求写出位数比较。 第二步如果存在给出Python攻击脚本使用gmpy2。 第三步给出运行脚本后的预期输出格式并说明如何验证明文的正确性。 不要解释RSA原理不要输出与解题无关的内容。这个模板的效果非常好直接避开了AI“从盘古开天讲起”的毛病。关键词“预设步骤排除项”是我觉得最值得借鉴的点。5.2 分步拆分让AI先讲思路再写代码很多人让AI直接写代码这其实是个大坑。AI直接写的代码只要跑不通你连该改哪里都不知道。我的做法是强制AI“先讲思路再写代码”而且思路要用伪代码的形式输出不能写句子。比如读取n和c计算c的位数与n的位数比较若位数差距大则尝试对c开e次方根将结果转为字节串输出AI把伪代码写好以后我再让它按伪代码逐行实现。这样做的好处很多首先是伪代码能让你快速检查算法逻辑对不对其次AI在实现时也会更贴合伪代码后续要改某个步骤直接说“修改第3步”它不会动其他部分。5.3 自动化校验写一个简单的测试框架课堂上我反复给大家安利一个习惯给AI生成的脚本配一个自动校验的单元测试。不需要很复杂一个列表就行。比如对RSA题目校验函数可以检查两点解密结果能否转为UTF-8字符串以及是否包含英文单词。对替换密码可以检查英文单词命中率。我把这个测试框架做成了一个小工具输入是密文和AI脚本输出是测试结果。这样每次AI改完代码我都能快速判断它有没有在正确的轨道上。有个同学把这一步自动化之后他解密码题的速度快了一倍因为他把大部分时间都花在了“让AI改代码”和“测试”上而不是盯着报错信息发呆。5.4 用AI agent串联多个工具的思路最近圈里都在聊AI agent我也试了试把agent框架用在密码学解题上。大致思路是让一个agent负责调用多个专用工具openssl命令行、CyberChef、Python脚本、甚至在线词频统计接口。agent根据题目类型决定调用哪个工具并且把工具输出汇总到上下文里。理想很美好实际操作时发现agent最大的问题不是不会调用工具而是不知道什么时候该停止。它可能会反复尝试同一个错误的攻击路径或者在没有新信息的情况下继续增加无用的工具调用。所以我目前还是倾向于“人控制流程AI负责单点任务”比如让AI生成某段脚本而不是让它一口气从读题到提交全干完。等哪天真有一个可靠的密码学agent我再更新这套方法论。6. 课后复盘AI时代学密码学人该守住什么6.1 数学直觉仍然不可替代这堂课结束前我跟同学们说了一句实话AI让你解题变快但不会让你变强。变强的核心仍然是对数学结构的敏感度。比如看到e3你能立刻联想到低加密指数攻击看到两个n共用相同的p你想到GCD分解看到同样的明文用不同指数加密你想到共模攻击。这些都是AI可以告诉你的但当你面对一道全新的、没有历史题可参考的密码题时AI帮不上忙只有你自己的数学直觉能带路。所以我的建议是用AI解题时每道题做完以后一定要把AI给你的思路重新用纸笔推一遍特别是那些涉及数论推导的步骤。你可以把AI当老师但它说的每句话都要经过自己大脑的审查。这个过程很枯燥但能让你真正建立“密码感觉”。6.2 用AI做“陪练”的三个技巧如果你也想和我一样把AI当成密码学学习的陪练这里有三个经过验证的小技巧第一让AI给你出题。你把学过的攻击类型列出来让AI生成对应的弱参数题目然后你手动设计加密过程再用AI脚本破解。这相当于把你从“解题者”变成“出题者”理解会深很多。第二故意让AI犯错。你可以给AI一个不完整的密文问它“这像什么加密”它大概率会胡猜。你借这个机会观察它是怎么错的然后总结出题目的哪些信息是关键的破题线索这比直接看正确答案有用得多。第三把AI的解题过程保存下来做成自己的笔记。我每节课后都会把AI的提示词和输出整理成一份markdown文档按攻击类型归档。几个月下来这就变成了一个个性化的“密码学AI手册”遇到类似题目直接翻效率极高。6.3 下一堂课预告与个人体会这一期的内容大概就是这些。下一堂课的题目我已经想好了打算专门聊聊AES的padding oracle攻击我会继续让AI参与辅助重点看看它在实现字节翻转和逐字节爆破时会不会犯低级错误到时候再来更新。按照惯例最后分享一点我个人的体会AI解题技术再怎么进步它本质上还是一个“见过很多题”的重现机器。密码学真正迷人的地方是那些从无到有构造出新协议、新攻击的创造性瞬间。这些东西AI暂时还给不了而正是我们人可以守住的核心竞争力。希望这篇博文能帮你少踩几个坑同时让你对“人机协作”这件事有更清醒的认识。下次课堂见。
返回列表