
很多人手里都有一份《应用密码学第三版》第一章的习题答案——网上到处是几乎每个版本都是课后题填空题抄一遍选择填个字母问答题给个两三行的“标准答案”。但你照着背完期末考试碰到“请说明为什么这个方案不安全”还是会懵。第一章是整本教材的地基它管的东西不是“哪道题选什么”而是“你拿到一个密码系统到底该从哪些角度去审视它”。这篇内容我会按第一章常见的考察范围来拆核心概念怎么辨析、古典密码题怎么推、数论工具怎么用、现代密码学的安全定义到底在说什么再补上做作业和复习时的自查方法顺带聊聊这些东西和CTF、蓝桥杯之间的关系。不管你是刚入门的大学生、考研党还是想打比赛的萌新按这个思路过一遍比背答案有用得多。1. 第一章究竟考什么先搞清楚整章的主线1.1 版本差异与复习重点取舍先说个很现实的问题《应用密码学》不同印次、不同学校选用的版本第一章范围不完全一致。有的版本第一章叫“Introduction”大量讲历史脉络和信息安全金三角有的版本第一章就开始引入流密码和分组密码的概念还有的版本把数论基础放到第一章末尾作为第二章对称加密的预备知识。所以不要抓到题就背。你先翻开自己的教材目录确认第一章到底覆盖到哪里。按大多数高校的教学节奏第一章的核心主线一般跑不出这几条密码学基本术语明文、密文、密钥、加密算法、解密算法、Kerckhoffs原则、古典密码体制、现代密码学的安全目标、以及后续章节要用到的初等数论工具。1.2 高频考点分布下面这些概念几乎每一版第一章的填空、选择、简答题都会重复出现。我按考察频率列一张表你复习的时候按这个优先级安排时间知识点常见考法优先级密码体制五元组 (P,C,K,E,D)填空题、简述五个要素非常高Kerckhoffs原则简答题为什么算法可以公开密钥必须保密非常高保密性/完整性/可用性选择题给事故案例判断破坏了哪个目标非常高对称密码 vs 非对称密码表格题比较密钥关系、速度、用途很高古典密码凯撒、仿射、维吉尼亚、Hill计算题给你密文或加密参数求明文或密钥很高攻击类型唯密文、已知明文、选择明文、选择密文辨析题给攻击场景选类型中高模运算、gcd、模逆元计算题求乘法逆元中高但后续章节也一直用隐写术 vs 密码学选择题定义区分中一个字总结第一章的目标建立一套“安全思维”。后面每一章的习题都是在反复使用第一章定义好的这套语言。你第一章的概念如果模糊后续学RSA、AES会很吃力。2. 古典密码习题的精解套路别只背公式要会推2.1 凯撒与移位密码最朴素的穷举思路凯撒密码的习题一般是“给你一段用某个位移加密的密文请破解”。教材后面经常附一个字母频数统计表很多同学的解法是“用暴力枚举看哪一条像英文”。这没错但要理解为什么它能破解——密钥空间只有25个穷举成本低到可以忽略。举个例子密文YMNX JKWJ。我用位移1到25逐个试位移为1时得到XLMW IJV I位移为5时得到THIS FIVE。所以明文是“THIS FIVE”密钥k5。实际做题时注意三点字母大小写通常不参与加密逻辑统计时统一转大写。空格和标点一般保留原样。很多判断题故意在密文里保留空格就是为了让你用“单词长度”辅助判断这不算破题技巧就是出题人的善意。如果位移量用负数表示比如“k-3”其实等同于移位23别在这里扣分。2.2 仿射密码gcd条件与模逆元的第一次实战仿射加密的表达式是y (a * x b) mod 26其中x是明文字母编号a0b1……z25a和b是密钥且必须满足gcd(a, 26) 1否则不是一个单射函数解密时会有多义。习题里最常见的两类考法第一类给定a和b求密文。这个直接套公式注意取模运算的负数结果绕回0-25。比如明文字母x24a5b7则y(5×247) mod 26 127 mod 26 23即字母x。第二类给定两组明密文对应关系反求a和b。这是重点题。教材里经常给一个条件明文“if”加密得到密文“ed”。设i8加密成e4f5加密成d3。列方程组4 a*8 b (mod 26) 3 a*5 b (mod 26)两式相减得1 a*3 (mod 26)于是需要求3关于26的乘法逆元。因为3 * 9 27 ≡ 1 (mod 26)所以逆元是9a 1 × 9 mod 26 9。代回任意一式得b 4 - 72 MOD 26 4 - 20 -16 ≡ 10。所以密钥是(a9, b10)。这个流程你最好自己动手推一遍因为它把“模逆元”这个第一要点和“联立方程消元”结合了。考试不会只考你能不能算逆元更多是考你能不能把问题转化成逆元求解。2.3 单表替换的频率分析别忽略短词和双字母组合单表替换比凯撒更进一步每个明文字母固定映射为一个不同的密文字母密钥是26个字母的一个置换。课上例题很喜欢给一段一两行的密文要求破解并说明频率分析过程。拿到单表替换密文严格的操作顺序先统计每个密文字母出现次数得频率表。把最高频字母临时替换成e英语里e最常见次高频试t或a、o。看单字母单词和两字母单词。单个密文字母几乎一定是a或i常见的两字母词of、to、in、is能迅速定出几个关系。边填边看部分解码后的文字是否具备“词干”结构再用字典头脑补。常见错误是只按频率表机械替换忽略了短文里频率统计可能失真。教材第一章的小字题里会特意给一段短密文这时直接按最高频就是e来打容易翻车。我的经验是短文本里优先处理结构标点、空格、单字母词而不是频率。2.4 维吉尼亚密码与多表替换Kasiski测试入门维吉尼亚是第一章的压轴古典密码。计算题通常问你“已知密钥长度和某个加密片段求密钥”或者“判断密钥长度”。求密钥长度的经典工具是Kasiski测试在密文中寻找重复出现的子串重复子串起始位置之间的距离大多是密钥长度的整数倍取公因数就是最可能的密钥长度。在作业题里出题人经常会把明文故意写成有重复单词的短文比如“The sun is hot the moon is cold”让Kasiski测试能顺利生效。找到密钥长度n之后把密文按位置模n拆成n列每一列变成一次凯撒/移位密码破译用频率分析求每一位的位移量连起来就是密钥。这个思路在CTF里也是维吉尼亚题的通用解法掌握了就能直接迁移后面第6部分我会再展开。2.5 Hill密码矩阵与模逆元Hill密码涉及二阶矩阵运算。加密时把明文两两分组每组向量左乘密钥矩阵再模26。作业题最常考的是“给定密钥矩阵[[3, 3], [2, 5]]求其模26逆矩阵并解密给定密文。”求模逆矩阵的一个省事路径是先求普通伴随矩阵再求行列式的模26乘法逆元然后整体乘回去。对于2×2矩阵密钥矩阵K [[a,b],[c,d]]伴随矩阵是[[d,-b],[-c,a]]行列式det ad - bc。如果det mod 26有乘法逆元则K^{-1} (det^{-1}) * 伴随矩阵 mod 26。特别注意如果det和26不互质解密密钥不存在这本身就是一道判断题陷阱。有同学算出det2或det13就继续往后除结果全乱。要形成肌肉记忆看到矩阵第一先算det立刻判断gcd(det,26)是不是1。3. 现代密码学基础的习题陷阱安全性定义才是考试分水岭3.1 一次一密与信息论安全Shannon的完美保密“一次一密”在第一章中的地位很特殊它既是古典密码的终点也是现代密码学的思想出发点。常见习题是“为什么一次一密在理论上是不可破的既然这样为什么实际很少用”要拿全分必须说清楚三点密钥长度必须等于明文长度且每加密一条消息就更换密钥。如果密钥是均匀随机且仅用一次那么对任意密文任何明文都可能与之对应从信息论角度看密文不含任何关于明文的信息。这就是“无条件安全”或“Shannon完美保密”。实际使用困难在于密钥分发和密钥量过大管理成本远高于分组密码。于是现代密码学放弃了“无条件安全”改为“计算安全”。还有一道经典判断题“只要密钥足够长AES是完全不可破解的。”这句话是错的AES只是计算安全。所谓的“足够长”也只是把穷举难度推高到当前算力不可行理论上存在唯一正确明文。答这种题时把“理论可破”和“实际难破”分开论述分数才牢。3.2 计算安全与可忽略函数不要只会背名词简答题“什么是计算安全”的标准回答是如果一个密码体制的破译成本超出攻击者能够承受的计算资源和时间那么它就是计算安全的。但有些教材会在习题里再深挖一层什么是“可忽略函数”。你只需要理解到可忽略函数表示随参数通常是密钥长度或安全参数n增长破解优势衰减的速度比任何多项式的倒数都快。做题时不用真的去推导极限但选择题常拿它来区分“可忽略”和“小概率”——即使某个破译概率是2的负60次方在密码学里也是可忽略但如果破译概率是1/n则不是可忽略。3.3 CIA金三角与认证、不可否认案例题的核心题库第一章课后题里出题率极高的还有给一个具体场景判断破坏了哪个安全目标。我梳理一份对照场景受影响的安全目标张三把文件里的工资数据改了完整性黑客窃走银行卡密码保密性服务器遭受DoS用户无法访问可用性王五否认自己发过那条消息不可否认性邮件声称来自李四实际来自赵六认证/真实性注意“完整性”和“认证”的选择题最容易混淆。关键区分是完整性问题关注“数据是否被改动”认证问题关注“数据到底是谁发出来的”。一个篡改邮件内容的攻击同时破坏完整性也可能破坏认证但如果是量级比较小的题目出题人通常只要求你说出最主要目标。3.4 四种攻击类型做题判断顺序唯密文、已知明文、选择明文、选择密文这个知识点很少直接考定义更多是以“攻击者获得什么能力”来出题。我建议按能力从小到大排唯密文攻击者只有密文。已知明文有一组对应的明文和密文。选择明文攻击者能选择任意明文获得对应密文。选择密文攻击者能选择任意密文获得对应明文。判断题的关键词很容易识别句子里出现“加密机”、“可以加密任意明文”通常指向选择明文出现“解密服务”、“提交任意密文”指向选择密文。4. 数论与模运算基础第一章习题里最容易白丢分的环节4.1 整除与辗转相除法所有逆元题的第一步第一章后面通常附了初等数论基础专门的习题就是“求gcd(1120, 840)之类”。直接用辗转相除法我建议按下面的书写格式来1120 840 × 1 280 840 280 × 3 0 所以gcd(1120, 840) 280。这种题丢分基本不是不会算而是乱跳步。考试时保留完整步骤至少能拿过程分。4.2 扩展欧几里得求乘法逆元最稳的写法求a关于模m的乘法逆元本质是解a*x m*y 1。用扩展欧几里得算法反推。举个例子求7 mod 26的逆元26 7 × 3 5 7 5 × 1 2 5 2 × 2 1从下往上回代 1 5 - 2 × 2 2 7 - 5 × 1 代入得1 5 - (7 - 5) × 2 3×5 - 2×7 5 26 - 7×3 代入得1 3×(26 - 7×3) - 2×7 3×26 - 11×7所以 x ≡ -11 ≡ 15 (mod 26)即7的逆元是15。验证7×15105105 mod 261正确。我个人在这些作业题上的经验是别偷懒用“试除法”找逆元。虽然模数26很小试几个数就能撞出来但后续学RSA的模数是大素数试除法根本走不通。第一章就是养成规范算法的关键时期老老实实用扩展欧几里得。4.3 欧拉函数与费马小定理第一章埋下的两个引线有些版本第一章只提概念不要求计算但也有版本习题里直接要你计算φ(77)或判断“3的20次方模11等于多少”。欧拉函数φ(n)的标准计算套路如果n是质数pφ(p) p - 1。如果n p×q且p、q都是质数φ(n) (p-1)(q-1)。一般情况先把n分解成质因数幂乘积再用公式。快速判断φ(77)777×11都与26不同命φ(77)6×1060。费马小定理的考法通常是“简化大指数幂”。比如求3^100 mod 11。因为11是质数由费马小定理3^10 ≡ 1 (mod 11)。100 10×10所以3^100 (3^10)^10 ≡ 1^10 ≡ 1 (mod 11)。4.4 中国剩余定理有印象即可如果你们的教材第一章就讲中国剩余定理那通常是配套一个“解同余式组”的作业题。例如x ≡ 2 (mod 3) x ≡ 3 (mod 5) x ≡ 2 (mod 7)这类标准解法是“分解-求逆元-合并”。我用一个小例子演示M 105。 M1 35逆元35 mod 3 22的逆元是2 → 35×270。 M2 21逆元21 mod 5 11的逆元是1 → 21×121。 M3 15逆元15 mod 7 11的逆元是1 → 15×115。x ≡ 2×70 3×21 2×15 140 63 30 233 ≡ 23 (mod 105)。答案写“x ≡ 23 (mod 105)”就行。这一步注意求逆元时时模的对象分别是M1模第一个同余式的3不是M本身顺序不要搞反。5. 做题必备工具与自查流程从手算到验证5.1 手算能力怎么练我知道很多同学会直接用在线工具算出答案然后倒推过程。我不反对工具做验证但第一章的古典密码、模逆元这类题考场上没有工具可用所以每一步操作都要练到“条件反射”。我的练习题方式是每天拿5组随机数练扩展欧几里得拿3段短英文练频率分析坚持一周速度就能从每题10分钟压到3分钟。不要小看这种笨功夫第一章的计算量不大考试时间主要耗在概念简答题上计算题抢时间就是抢分数。5.2 工具清单作业辅助与自我验证平时做作业时下面这几个工具很好用工具用途适用场景CyberChef在线转换、凯撒/维吉尼亚/仿射解密模板快速试密码验证答案dCode古典密码的破解工具集合自动频率分析破解单表替换、维吉尼亚Pythonpycryptodome手写加密/解密脚本加深理解处理长明文WolframAlpha模运算、模逆元、矩阵求逆检查数论计算结果但提醒一句工具里给出的明文答案不能直接抄到作业本上。作业要求的是推导过程和参数计算你把工具的结论拿来对答案即可。用工具的另一个好处是你可以随机生成大量测试数据检验自己手算的结果对不对。5.3 Python脚本自查示例以仿射密码为例我写一个简短的校验脚本方便你自己验算import math def modinv(a, m): g, x, _ extended_gcd(a, m) if g ! 1: return None return x % m def extended_gcd(a, b): if b 0: return a, 1, 0 g, x, y extended_gcd(b, a % b) return g, y, x - (a // b) * y def affine_encrypt(text, a, b): a, b a % 26, b % 26 if math.gcd(a, 26) ! 1: raise ValueError(a must be coprime with 26) res for ch in text.upper(): if ch.isalpha(): res chr(((a * (ord(ch) - 65) b) % 26) 65) else: res ch return res def affine_decrypt(cipher, a, b): a_inv modinv(a, 26) if a_inv is None: raise ValueError(no inverse) res for ch in cipher.upper(): if ch.isalpha(): res chr((a_inv * ((ord(ch) - 65) - b) % 26) 65) else: res ch return res text HELLOWORLD c affine_encrypt(text, 5, 8) print(cipher:, c) print(decrypt:, affine_decrypt(c, 5, 8))脚本跑出来如果解密串等于原明文说明你手算的参数没问题。如果不等优先检查a的逆元有没有求对。5.4 综合自查流程清单完成第一章习题后按下面这个顺序自查所有涉及mod m的运算结果是否落在0到m-1范围内负结果是否回绕。仿射密码的a是否满足gcd(a,26)1Hill密钥矩阵行列式是否满足gcd(det,26)1。古典密码解密时是否处理了空格、大小写、非字母字符。简答题是否区分了“理论安全”和“计算安全”是否同时说明“可破”与“难破”。信息安全的案例题是否答出了主要安全目标而不是只写“数据泄露”这种口语化描述。6. 从期末题到CTF与蓝桥杯第一章知识到底能走多远6.1 CTF密码学里那些熟悉的面孔如果你对热词里的“CTF密码学”感兴趣我可以明确说CTF的入门级古典密码题跟第一章作业几乎是一个模子刻出来的。凯撒、仿射、单表替换、维吉尼亚、Hill全部是CTF crypto的“新手村怪”。但竞赛题比教材习题多了两个变化题目会故意混淆编码方式比如先Base64再加密或者把明文先做异或处理再套维吉尼亚。密钥不会像作业题那样温和可能是一段话里的某个词也可能来自一个图片文件的元数据。所以我的建议是先把第一章这些古典密码的破解代码每个都写一遍不要满足于会手算小例子。CTF里明文往往很长手算不现实但原理一样。频率分析、Kasiski测试、模逆元矩阵求逆这些代码写熟练后遇到常规题就能秒出思路。6.2 蓝桥杯和密码学的关系“密码学能去蓝桥杯吗”这个问题要看赛道。蓝桥杯的传统软件类赛道核心是算法和数据结构直接考密码学的比例不高但模运算、快速幂、欧几里得算法这些数论基础在蓝桥杯的算法题里是高频工具。换句话说第一章的数学基础不会白学它会在“无法直接归类到密码学”的算法题里以另一种形式出现比如求模逆元处理大数、用费马小定理做快速幂取模。如果你参加的是蓝桥杯的数字科技创新赛或网络安全类赛道那密码学就是实打实的考查内容。第一章建立的古典密码概念与数论直觉是后续学习RSA、AES、数字签名的必要条件。所以答案是不能只靠“密码学”这门课去横扫蓝桥杯但学透第一章的数学与算法内核确实是个合理的切入点。6.3 以赛代练的学习路径建议我根据不同的目标给两条路线路线A以期末高分和考研为目标。重点放在概念辨析、古典密码手算熟练度、数论计算的规范性。不需要扩展太多竞赛知识但一定要把教材中的安全目标和攻击类型想清楚。路线B以CTF和竞赛为目标。完成教材习题后立刻去Crypto专题刷题从“凯撒变种”开始逐步过渡到“nihilist cipher”、“AFFINE-CBC组合”这类综合题。刷题时请强迫自己用脚本实现自动化攻击而不是手动解密。无论哪条路教材习题都是最低门槛的试炼场。你如果连第一章的课后题都要靠网络答案“临摹”后面的章节几乎没有可能建立真正的密码学思维。7. 做完答案之后再补几个现代密码学的坑7.1 编码不是加密第一章选择题经常混入这类陷阱Base64、十六进制、URL编码这些统统不是加密。它们的目的是可逆地转换数据表示形式不涉及密钥。一个简单判断方法如果整个转换过程不依赖“密钥”那它就只是编码。7.2 保密算法不等于安全算法有一道经典论述题“Charlie自己设计了加密算法只要不让别人知道算法细节消息就安全。”答案是否定的。这里要搬出Kerckhoffs原则算法应当公开安全性应完全依赖密钥。我在改作业时见过不少同学嘴上说“Kerckhoffs”却写不出一句完整论述。答题模板可以这样背算法公开便于安全分析和标准化隐藏算法并非可行的长期策略因为攻击者可以通过逆向工程获得算法而密钥可以更换算法公开的成本远小于密钥泄露的成本。7.3 安全目标不等于只有“别人看不懂”第一章不止讲保密性。课后简答题常问“密码学能保护什么”标准的完整回答应包含四项机密性、完整性、认证和不可否认性。只写“加密防偷看”会扣一半分。我建议答题时配合一个微例子比如“发送方用数字签名确保消息没被篡改且不能抵赖”这段话能区分开你是不是真懂。7.4 密钥长度不是唯一安全指标教材常对比不同密钥长度但判断题会挖坑“密钥长度越长密码一定越安全。”正确的看法是密钥长度只是安全性的必要条件之一。DES密钥56位太短但哪怕密钥长到1024位如果加密模式用错了比如ECB模式下分组内容重复依然可能从统计特征中泄露信息。第一章不需要你掌握所有模式但至少要有“安全是系统层面的”这个意识。我个人批这类题目时最明显的体会是能拿满分的学生往往不是因为背得熟而是因为能举出反例。你可以试着把教材里每个安全概念都对应到一个“如果这样做就失败了”的案例这才是比参考答案更值钱的学习成果。做完第一章习题别急着扔掉那几张草稿纸——上面那些辗转相除余数、频率统计表和矩阵行列式会在后面RSA、AES、数字签名章节里一次一次回来找你。