☰
AI辅助密码学解题实战:以RSA低加密指数攻击为例
2026/10/6 4:27:44 网站建设 项目流程

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两个大素数和一个较小的公钥指数e=3,以及一段很短的密文c,它第一反应是“可能存在低加密指数攻击”,这个方向是对的,但让它判断“直接对c开三次方根”是否可行时,它却支支吾吾,因为它不知道c的数值到底多大,需要人先算一下c和n的数量级关系。AI的推理是“模式匹配”而不是“数学计算”,必须由人来做具体的数值判断。

2.3 实操:让AI生成多种候选解并自动评分

为了让学生直观看到AI的能力边界,我在课堂上做了一个小实验:从一道简单的替换密码题开始,让AI生成五种不同的候选破解方案,并且实现了一个自动评分函数,用英文单词命中率来打分。这个实验的代码很简单,但效果很有说服力。

先定义几个候选解密函数,每个函数用AI生成的逻辑,比如“按字母频率替换”“按二元组频率替换”“用模拟退火搜索替换表”等等。AI负责编写每个函数的实现代码,我负责写一个统一的调用接口和评分函数。评分函数的核心是统计解密后的文本里有多少个常见英文单词,命中率高的排名靠前。经过一轮测试,AI写的模拟退火搜索脚本效果最好,但它在实现贪心算法时忽视了一个细节:替换表不能出现映射冲突。这个坑在我加了“唯一性检查”后才暴露出来,正好成为后续讨论“AI幻觉与调试”的引子。

这种“多方案并行+自动评分”的思路,后来被我做成了课堂上的一个固定工具,也让同学们明白:AI的价值在于快速给你一堆“可能可行”的路径,而你的工作是把这些路径变成可执行脚本,再设置一个清晰的指标让它们互相竞争。

3. 一堂课上的完整AI解题流程:以RSA低加密指数攻击为例

3.1 题目背景与破题点

这堂课的核心实战,是一道经典的RSA低加密指数攻击题。题目给了三个参数:n是一个很大的合数,e是3,c是密文。乍一看,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、e=3、c,请判断是否存在低加密指数攻击。请先计算c和n的位数,再给出结论和攻击脚本。”
  • 第三版(带格式约束):“你是CTF密码学助手。已知n=[...], e=3, 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“请证明n=pq时,已知φ(n)能分解n”,它洋洋洒洒写了一大段,最后一步“显然我们可以从φ(n)直接推出p和q”其实是错误的,正确做法是解一个一元二次方程。这种幻觉非常隐蔽,因为它把最关键的一步混在大量正确公式里,让人很难察觉。

对策也很简单:永远不要相信AI的数学证明,尤其是那些“显然”“易得”的步骤。一旦AI给出结论,手动找几个小数值验算一下,比如取p=5, q=11, n=55, φ(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密码学解题助手,擅长分析古典密码和现代密码算法的攻击方法。 已知题目信息: - 加密方式:RSA,e=3 - 参数:n=[...],c=[...] 第一步:请判定是否存在低加密指数攻击,给出判定依据(要求写出位数比较)。 第二步:如果存在,给出Python攻击脚本,使用gmpy2。 第三步:给出运行脚本后的预期输出格式,并说明如何验证明文的正确性。 不要解释RSA原理,不要输出与解题无关的内容。

这个模板的效果非常好,直接避开了AI“从盘古开天讲起”的毛病。关键词“预设步骤+排除项”是我觉得最值得借鉴的点。

5.2 分步拆分:让AI先讲思路再写代码

很多人让AI直接写代码,这其实是个大坑。AI直接写的代码只要跑不通,你连该改哪里都不知道。我的做法是强制AI“先讲思路再写代码”,而且思路要用伪代码的形式输出,不能写句子。比如:

  1. 读取n和c
  2. 计算c的位数,与n的位数比较
  3. 若位数差距大,则尝试对c开e次方根
  4. 将结果转为字节串,输出

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让你解题变快,但不会让你变强。变强的核心仍然是对数学结构的敏感度。比如看到e=3,你能立刻联想到低加密指数攻击;看到两个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暂时还给不了,而正是我们人可以守住的核心竞争力。希望这篇博文能帮你少踩几个坑,同时让你对“人机协作”这件事有更清醒的认识。下次课堂见。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询