密码学期末复习:从RSA到AES,核心考点一次通关 虽然教材目录已经翻烂了但每到期末面对密码学这种看起来全是数学背起来全是概念的课很多同学还是会慌。我见过太多人抱着几百页的PPT从头啃结果三天过去还在前两章打转。这篇复习版不是要把教材重抄一遍而是帮你把散落的知识点按考试逻辑重新组装起来直接照着背、照着练、照着写就行。シラバス教学大纲里那些看似独立的章节——古典密码、对称加密、公钥体制、哈希签名、密钥管理其实在考卷上是有一条暗线的从怎么加密到怎么安全地分发密钥再到怎么证明数据没被篡改整门课就是在回答这几个问题。你只要抓住这条线复习效率完全不一样。这篇文适合马上要考密码学、但还没形成系统框架的同学也适合那些想用最短时间从眼熟变成能写的人。里面的重点我都按高频考点标注了计算题给了可以直接抄作业的步骤概念题给了不容易丢分的标准表述。看完之后你应该能合上书本在草稿纸上把RSA的流程、DES的结构、哈希的性质这些核心内容默写出来这基本就稳了。1. 期末考前的复习战略先分清必考点与边角料密码学的内容体量很大但期末考试的出题规律非常明显。我每年帮人划重点都会从历年真题往回推发现绝大多数学校的卷面结构就三种题型名词解释与简答、计算与推导、综合分析应用题。分值分布上对称密码和非对称密码合计能占到百分之五十以上哈希与数字签名占了大概百分之三十剩下的才是古典密码、密钥管理和一些边缘概念。1.1 按出题概率分配复习时间而不是按章节页数很多同学吃亏在复习顺序上。教材通常把古典密码放在最前面你就从凯撒密码开始逐页往后看等看到AES的时候已经耗掉了大半精力后面的公钥密码反而没力气啃了。这是典型的按章节顺序复习陷阱正确的做法应该是按考试权重倒着刷。我的建议是这样排优先级RSA和Diffie-Hellman这类公钥算法是计算题重灾区必须达到看到题目就能列式的热练程度AES和DES的加解密结构一定要能默画出来每一轮的步骤不能含糊哈希的性质和数字签名流程是简答题最爱要能写出完整定义和三大性质的表述古典密码虽然分值不高但考得极其死板记住几个代表算法的时间线就够用了。复习时间分配可以参考四比三比二比一的比例四成给公钥密码三成给对称密码与分组模式两成给哈希和签名一成给古典密码与杂项。这样即使时间紧张损失的也只是低权重部分核心计算题和概念题都能保住。1.2 考场上能写出来和看着眼熟是两码事我在模拟测试的时候经常发现一个现象看着PPT复习觉得这个我知道一到闭卷写题就卡壳。密码学考试的最大特点就是考输出能力你脑子里有再多知识写不到卷面上就等于零。所以从复习第一天开始就要用默写导向来检验自己。每学完一个算法不要马上翻书先拿张白纸把流程画出来能画出多少算多少再对照课本补充遗漏的部分。比如RSA那一套你如果能在三分钟之内完整写出选择两个大素数p和q、计算n和φ(n)、选取公钥e、求逆元得到私钥d这一整串流程并且能带着具体数字算一遍那才是真正掌握了。单纯停留在我知道RSA是公钥加密算法这种程度上考场只能干瞪眼。后面每个板块我都会给你整理出这种背诵清单级别的核心内容你照着清单逐条打勾就行能打满勾的考点基本就安全了。2. 重重心之重RSA与Diffie-Hellman的计算题兵工厂公钥密码在期末卷面上几乎是必出计算题的存在RSA更是年年坐镇。你要是不信翻翻你们学校近五年的卷子肯定至少有一道RSA的题目没有的话就是Diffie-Hellman密钥交换这两块跑不掉。而且这种题一旦会做就是白送分计算流程固定、套路明显是性价比最高的得分点。2.1 RSA密钥生成到加解密只需要记住这五个步骤RSA的核心流程说穿了就是一个选数、算数、求逆元的过程。你别看公式符号吓人实际做题就是套模板。第一步选择两个大素数p和q。题目通常会直接给你比如p3q11这种小数字为了让你能算出来。第二步计算模数np×q这个n就是公钥和私钥共同的模数后面所有运算都在模n的意义下进行。第三步计算欧拉函数φ(n)(p-1)(q-1)这个值的意义是小于n且与n互素的正整数个数在RSA里它的作用非常关键推导加解密的互逆性全靠它。第四步选取一个与φ(n)互素的加密指数e通常题目会给e3或e7这种小值方便你手算。第五步求解密指数d满足e×d≡1 mod φ(n)也就是d是e在模φ(n)下的乘法逆元。一旦有了公钥(e, n)和私钥(d, n)加密就是计算密文cm^e mod n解密就是计算明文mc^d mod n。这两条公式不仅会出现在计算题里简答题让你简述RSA加密过程的时候也要原样写出来一个字都别漏。2.2 破解RSA的三种手段必背的简答题素材考试不仅考你会不会算还喜欢考你会不会分析。RSA的安全性建立在大整数分解困难这个前提上这句话几乎是标准答案级别的存在得能默写。具体到攻击手段你至少要知道三种。首先是暴力分解当n足够大时没有高效的分解算法只能穷举试除。但题目里如果故意给了一个很小的n比如143你立马就能分解成11乘13那整个体制就直接崩了。所以密钥长度必须足够大不是一个口号而是安全性根基。第二种是共模攻击当两个用户共享同一个模数n却用不同的指数加密同一条消息时攻击者不需要分解n就能恢复明文。这个有数学背景的同学容易理解普通人只要记住结论就行RSA协议实现里绝对不能共享模数。第三种是低指数攻击当e取3或这种小值且被加密的消息很短时密文的e次方可能小于n那直接对密文开e次方就能还原明文根本不用去碰私钥。这也是为什么实际系统中公钥指数不会用3而是固定用65537因为它在几乎不降低加密速度的前提下能有效抵御这种攻击。2.3 Diffie-Hellman密钥交换三步就能说清楚Diffie-Hellman解决的是两个人隔着一根不安全的网线怎么安全地商量出一把对称密钥这个问题。它的精妙之处在于交换过程的中间产物全部公开而最终算出来的共享密钥却只有两个人知道。具体流程是这样的。第一步双方公开选取一个大素数p和一个本原根g这两个数完全可以被窃听者看见没关系。第二步A私下选一个随机数a计算Ag^a mod p后发给B同时B私下选一个随机数b计算Bg^b mod p后发给A。到这里为止窃听者掌握了p、g、A、B四个数唯独不知道a和b。第三步A用B和自己的a计算密钥KB^a mod pB用A和自己的b计算密钥KA^b mod p两个人算出来的K是同一个值因为g^(ab)无论先代哪个指数结果都一样。期末考DH的时候计算题通常这样给p23g5A的私钥a6B的私钥b15让你算共享密钥。这时候你要先算出A6、B19然后K19^6 mod 232或者用B的角度算6^15 mod 23也等于2两边结果一致才是正确。顺便记住窃听者面对的难题是所谓的离散对数问题——知道g和g^a逆推a非常困难这就保证了DH的安全性。2.4 手算大数模幂的三个技巧期末考场上禁止用计算器的情况不少遇到大点的幂运算很容易算崩。我自己的经验是掌握三个技巧就能扛住百分之九十的题目。第一个技巧是快速模重复平方法把指数拆成二进制表示然后从左往右边平方边取模。比如算5^15 mod 23先把15拆成1111也就是1248然后算出5^1、5^2、5^4、5^8的模值再相乘取模。这个方法手算非常稳定熟练之后五分钟内可以搞定两位数的指数。第二个技巧是及时取模。很多同学算出完整的大数再去取模中间数字根本写不下。秘诀是每乘一步就立刻取一次模让中间结果一直保持在mod n范围内数字小、计算快、不容易出错。第三个技巧是观察规律。模运算里的底数如果和模数之间存在简单关系可以提前化简。比如模23的底数11可以看成11≡-12 mod 23有些时候反而好算。这些经验多做几道题就有了考场上能省出大量时间。3. 对称加密DES的结构缺陷与AES的条理之美对称密码那块儿期末考试很少让你真的手算完整的一轮AES因为实在太繁琐了。但正因为繁琐老师才喜欢考结构让你填空、排序、写轮数。所以你对它们要熟悉得像自己家钥匙一样随手就能画出流程图。3.1 DES的Feistel结构与56位密钥的由来DES出生于1970年代它的骨架叫Feistel网络这种结构有一个极其好记的特点加密和解密可以用完全相同的算法只是轮子密钥的顺序反过来。原理上每一轮把64位数据切成左右两半右半经过轮函数f变换后和左半异或再交换位置重复16轮。这样的铁律让DES的实现变得极其简洁硬件做起来便宜当时这个特性非常加分。但DES要背的重点里最坑的就是密钥长度的计算。题目要是问DES的有效密钥长度是多少标准答案是56位可DES实际用的密钥是64位其中第8、16、24、32、40、48、56、64位是奇偶校验位不参与加密过程。这个细节极容易丢分我记得有同学在考场上自信满满地写了个64直接送掉两分心疼。DES的另一个必考知识点是S盒它是整个轮函数里唯一的非线性部分也是DES安全性的大半壁江山。老师说得好没有S盒的抗差分分析设计DES早在公布不久就该被攻破了。记住一句话就行DES的强度主要来自S盒的非线性替换。3.2 AES的四轮操作与密钥扩展一个动作都不能记错AES和DES完全是两套思路。DES是Feistel网络轮函数处理一半数据AES是所谓的SPN结构每一轮对完整的128位状态矩阵整体操作。你要能默写出每一轮那四个动作的名称和顺序字节代换SubBytes、行移位ShiftRows、列混合MixColumns、轮密钥加AddRoundKey。字节代换是查固定的S盒表把每个字节替换成另一个字节这是唯一的非线性步骤。行移位是把状态矩阵每一行按行号循环左移不同的字节数。列混合是最有数学味道的一步每一列四个字节看成多项式在一个特定的有限域上和固定多项式相乘这一步提供了AES的扩散性。轮密钥加是把状态矩阵和这一轮的扩展密钥逐字节异或。还有个特别容易被问到的地方AES最后一轮没有列混合。轮数规则也要记牢AES-128、AES-192、AES-256分别对应10轮、12轮、14轮名字里的数字就是密钥长度。这些数字几乎每年都考属于死记硬背型送分题一个都不能错。3.3 补充进阶RSA和对称攻击可以互相结合吗我在复习过程中经常被同学问到学了RSA又学AES这门课到底是让用哪个这个问题的标准答案就是混合加密实际系统里用AES这种对称算法加密大量数据因为对称算法速度快、能处理长消息但是对称密钥本身怎么安全地传给对方这时候就轮到RSA上场了用接收方的公钥加密这把会话密钥传递过去之后双方都用对称密钥来聊天。这种混合方案又叫做数字信封在期末简答里出现的概率不低。答题的时候要写清楚对称算法负责加解密效率与数据量非对称算法负责密钥分发与身份认证两者各司其职缺一不可。这个思路你在复习的时候可以自己画一个流程图比死记硬背管用得多。3.4 分组密码的五种工作模式怎么选、怎么用如果考试考一个表格题让你填分组密码的ECB、CBC、CFB、OFB、CTR各自的特点你最好能在三十秒之内写完。这五种模式我给你的记忆锚点是这样的。ECB是最朴素的每个分组独立加密同样明文得到同样密文缺点是模式化明显、容易被统计分析攻击实际场景里除了加密随机数基本不用。CBC是最经典的每个分组先和前一个密文分组异或再加密这样相同的明文块在不同位置会得到不同密文安全性明显好于ECB但加密过程是串行的没法并行加速。CFB和OFB都是把分组密码当流密码用的祖宗区别在于CFB反馈的是密文OFB反馈的是加密器的输出。CTR是近些年最受宠的模式它用一个计数器的值加密后再和明文异或支持完全并行错误传播范围也极小。你只要记住CTR并行性好CBC安全性均衡ECB有模式泄露这三个关键词遇到综合题会分析就够了。4. 哈希与数字签名防篡改与防抵赖的黄金搭档哈希函数和数字签名是很多同学的丢分重灾区因为总觉得这不就是个校验和吗有什么可学的。可恰恰是这种轻视让期末卷面上简述哈希函数的三大性质这种基础题也拿不满分。这一块考得不算深但覆盖面广概念辨析是重点。4.1 哈希的三大性质每一句都要能默写哈希函数的重要性质你知道是三个但它们各自的含义和用途一定要掰开揉碎地理解。第一是单向性给定输入x可以高效算出哈希值H(x)但反过来给定哈希值y要找出满足H(x)y的x在计算上不可行。这个性质保证了就算攻击者拿到了你的密码哈希值也推不出明文密码。第二是抗弱碰撞性给定一个具体的输入x要找到另一个输入x使得H(x)H(x)是困难的。第三是抗强碰撞性任意找两个不同的输入x和y要让H(x)H(y)在计算上不可行。弱碰撞性和强碰撞性之间的差异经常被拿来出辨析题你得能说清楚弱是给定了一个起点强是随便找一对。这三种性质是数字签名、消息认证、密码存储的基石。没有单向性密码存储就是裸奔没有抗碰撞性攻击者就能伪造一个内容不同但哈希相同的文件蒙混过关。4.2 从MD5到SHA-3为什么老算法都被判了死刑哈希算法的发展史就是一部攻破史。MD5和SHA-1都曾经风光无限后来都因为碰撞攻击而退场。MD5的碰撞在2004年前后被找到当时的研究者能在普通电脑上用很短时间构造出两个内容不同但MD5值相同的文件。SHA-1的碰撞也是在2017年由谷歌那个团队用大规模算力完成的至此整个SHA-1家族都不再推荐使用。期末考到这部分最常见的题目就是为什么SHA-1不安全和抗强碰撞性被打破意味着什么。你只要答出已找到理论可行的碰撞攻击手段不再满足抗强碰撞性质因此数字签名场景中存在伪造风险这条逻辑链分数就到手了。SHA-2家族目前是绝对主流SHA-224、SHA-256、SHA-384、SHA-512后面的数字就是输出比特长度。SHA-3则赢了算法竞赛结构上完全不同于SHA-2用的是海绵结构你看到海绵两个字能想起来它的设计思路就行。顺便记几个长度值SHA-256输出256位、SHA-512输出512位选择题和填空题爱考。4.3 数字签名流程私钥签名、公钥验证方向千万别反数字签名是公钥密码最典型的应用之一但每年都有一大票同学把签名和加密的方向搞反。我在这里再说一遍这个方向要是错了整道论述题直接报废。用RSA做签名发送方用私钥对消息的哈希值做加密运算得到的结果就是签名别人拿到消息和签名后用发送方的公钥解开签名拿到里面的哈希值再和自己算出来的消息哈希比对一致就说明消息确实是发送方签发的且内容没有被改动。所以加密是公钥加密、私钥解密签名是私钥签名、公钥验证两个方向正好相反。为什么要签哈希而不是签原文因为签名运算本质上是个大数模幂运算成本不低算一个几百字节的消息哈希再签哈希效率比签整个消息高得多同时安全性不受影响。这个设计思想是期末简答题的高频考点答出效率与安全兼顾就是满分点。4.4 证书与PKI信任是怎么一层一层传递下去的数字签名自己没法解决一个问题你拿到的公钥怎么确定它真的是对方的而不是中间人塞给你的这道问题的答案就是证书与公钥基础设施PKI。证书本质上是认证机构CA对某个公钥属于某个实体这个声明做的数字签名“实体”信息连同公钥打包在一起CA用它的私钥一签这张证书就具有了防伪能力。你只要信任CA的公钥就能通过验证CA的签名来信任每一张由它签发的证书这就是所谓的信任锚。证书链的结构是树状的根CA在最上层它给自己签发自签名证书根CA给二级CA签发证书二级CA再给终端实体签发证书。验证证书的时候从底向上逐级回溯每一级都通过上一级的公钥验证签名直到信任的根证书。这个信任链模型在期末综合题里出现频率极高你脑子里要有一张根证书往下逐级签发、验证时逐级回溯的图景。5. 密钥管理与密码学应用全景你要是觉得密钥管理没什么可考的那就错了。期末大题里十有八九藏着结合密钥管理分析某系统安全性这类应用型问题。这类题不难但要求你能把整门课的知识拧成一股绳来用。5.1 密钥全生命周期生成、分发、存储、轮换到销毁密钥管理的核心思想可以用一句话概括算法可以公开密钥必须保密。考的也就是密钥从生到死的每个环节如何保护。生成端最容易踩坑的是伪随机性不够如果密钥生成用的随机数源可预测那密钥强度再高也没意义所以标准要求使用密码学安全的随机数生成器。分发端是整个链条里最脆弱的环节密钥一旦在传输途中被截获后续所有加密都形同虚设所以实际系统要么用前面讲的Diffie-Hellman在线协商要么用CA签发的证书来加密分发。存储端的关键词是加密存储和硬件保护密钥本身要以密文形态躺在存储介质上或者塞进硬件密码模块里绝不能明文落盘。轮换和销毁这两个词也经常出现在论述题里密钥用久了被分析、被泄露的风险会累积所以要有定期轮换机制退下来的密钥要及时销毁防止攻击者翻旧账解密历史数据。答题时把这五个环节串一条线说出来综合分析题一般就能拿高分。5.2 用一张表打通HTTPS、SSH、全盘加密的密码组件把密码学知识投射到身边的应用场景你才能真正理解它为什么这么设计。期末的综合题经常给一个场景让你分析用了哪些密码技术分别解决什么问题。我整理了一张高频对照表考前最后一天把它过一遍非常管用。常见应用用到的密码技术解决的核心问题HTTPS证书身份认证、RSA/ECDHE密钥协商、AES数据加密、HMAC完整性防窃听、防篡改、防冒充SSH远程登录非对称密钥交换 对称会话加密 主机密钥认证在不可信网络上建立安全信道全盘加密如BitLockerAES加密整个磁盘密钥由TPM或口令派生防止硬盘被物理窃取后数据泄露代码签名开发者私钥签名用户用公钥验证防止恶意代码假冒更新包电子邮件签名加密S/MIME或OpenPGP公钥加密 数字签名邮件内容的机密性与发信人身份认证这种表格你要能自己填出来才算真的熟了。我个人习惯在复习最后一天拿张白纸默写一遍写不出来就回去翻教材对应章节往往一张表能把我所有薄弱环节翻出来。5.3 密码学不是万能的常见安全管理盲区期末卷子偶尔会出那种某系统用了AES-256所以绝对安全请评价的题。这种题考的是你对密码学边界的理解答案的核心是算法安全不等于系统安全。加密算法本身数学上安全但如果密钥被硬编码在源码里、随机数生成器被植入后门、或者加密实现代码存在内存泄漏漏洞那攻击者根本不需要破解AES就能拿到明文。密码学只是安全体系里的一块积木配套的密钥管理、安全协议、实现规范甚至人的安全意识缺一不可。答题的时候你要会说任何密码系统的安全性最终都要落到密钥安全、协议正确实现和物理环境可信这三件事上。6. 考前冲刺的三件宝公式卡、必练题与易错点到了考前一天我不建议你再从头翻课本了。你需要的是一套不带水分的硬核冲刺材料——把公式和特征浓缩成一张卡把高频计算题练到手熟再把那些年年有人掉的坑标出来。6.1 一张卡默写整本书考前半小时只看这一页我考前复习从来只用一张A4纸找手感左边写公式右边写特征来回盖着默写。你也可以这样做RSAnpqφ(n)(p-1)(q-1)e与φ(n)互素d≡e⁻¹ mod φ(n)cm^e mod nmc^d mod n。RSA安全性基于大整数分解困难性典型攻击有暴力分解、共模攻击、低指数攻击。Diffie-Hellman公开参数素数p、本原根gAg^a mod pBg^b mod pKB^a mod pA^b mod p安全性基于离散对数困难性。DES64位分组56位有效密钥实际密钥64位含8位校验16轮FeistelS盒提供非线性。AES128位分组密钥128/192/256位轮数10/12/14每轮四步骤字节代换、行移位、列混合、轮密钥加最后一轮无列混合。分组模式ECB独立加密有模式泄露CBC前块密文参与异或串行CTR计数器方式可并行。哈希性质单向性、抗弱碰撞、抗强碰撞MD5/SHA-1已碰撞攻破SHA-2/SHA-3为现行主流。签名方向私钥签名、公钥验证先算哈希再签哈希。这张卡如果有一半你遮住后默不出来就赶紧回上一章找对应概念别硬着头皮进考场。6.2 期末考试必练的八道题每一道都拆给你看计算题不是看会的是练会的。下面这八道题是我从高频真题里提炼出来的代表每一道都给出过程和答案你自己先盖住答案做一遍再对照检查。第一道RSA密钥生成p3q11求n和φ(n)选e3求d。解n33φ(n)2×1020d是3在模20下的逆元因为3×721≡1 mod 20所以d7。第二道RSA加密沿用上题公钥为(3,33)加密明文m2。解c2^3 mod 338密文8。第三道RSA解密沿用上题私钥为(7,33)解密密文c8。解m8^7 mod 33快速模幂算出8^264≡318^4≡31²961≡4所以8^78^4×8^2×8≡4×31×8992≡2 mod 33明文为2解对了。第四道Diffie-Hellman参数题p23g5A私钥a6B私钥b15求共享密钥。解Ag^a mod p5^6 mod 235^225≡25^4≡45^6≡4×28B5^15 mod 235^8≡165^155^8×5^4×5^2×5≡16×4×2×5640≡19KB^a mod p19^6 mod 2319^2361≡1619^4≡256≡319^6≡3×1648≡2验算A^b mod p8^15 mod 232一致。第五道DES结构填空DES分组长度是64位密钥有效长度是56位轮数是16轮函数中的S盒是唯一的非线性部分。第六道AES结构填空AES-128的轮数是10明文分组长度是128位每轮包含字节代换、行移位、列混合、轮密钥加四个步骤最后一轮不执行列混合。第七道CBC模式计算给定初始向量IV0、明文分组P₁1、密钥加密为单字节模加题目简化模型密文C₁E(P₁⊕IV)E(1)某值第二组密文C₂E(P₂⊕C₁)。考场上要注意CBC每个明文分组在加密前一定要先和上一个密文分组异或第一组和IV异或。这个题目简化只是为了让你看清模式逻辑真实题目会用替换表代替但思路完全一样。第八道哈希应用用户密码存储时为什么不能存的明文答数据库一旦泄露明文密码直接暴露且用户在多平台复用会连带遭殃正确做法是存哈希值配合随机盐验证时重新哈希比对。盐的作用是让相同密码在不同用户名下产生不同哈希抵抗彩虹表预计算攻击。练完这八道你对计算题的手感应该就起来了。如果哪一步卡住了就回头找对应章节重新过一遍别带着疑点进考场。6.3 这本课最常踩的五个坑你最好一个都别踩第一古典密码用暴力破解思路硬解凯撒移位实际上期末让你做的一般是高频分析或维吉尼亚密钥猜测暴力穷举只是最后手段。第二DES密钥长度直接写64忽略了8位校验位标准答案必须是56位有效密钥。第三RSA里把加密指数e和私钥指数d搞混记不住哪个是公钥哪个是私钥的话就记住公钥是公开到处发的那个加密用私钥是藏起来不给人看的那个解密和签名用。第四哈希性质和数字签名概念互串签名是用来防抵赖的哈希是用来验完整性的两者常一起用但不是一个东西。第五问RSA安全性基于什么时只会答数学难题却不说是大整数分解困难这两个表述的得分完全不同。避开这些坑你的卷面至少能多保住五分。这五分在期末排名里往往就是划开档次的那一点差距。6.4 考前48小时的操作清单考前一天晚上把公式卡放枕头边睡前扫一遍第二天早上起来再扫一遍。考前两小时拿草稿纸把RSA的五步流程和AES的四步轮函数默写出来错一个就翻书补一眼。进考场前最后一眼看分组密码那五种模式的对比表这几个名词最容易被临场搞混。进了考场遇到卡壳的题不要慌先把题目里出现的参数列出来数值带进去一步一步算模运算每一步都取模中间结果保持在可处理的大小。遇到简答题就按定义原理例子安全性的四段结构写顺序要清晰别挤成一团。到最后手里有粮、心里不慌把这篇复习版里列出来的东西逐项打勾你的密码学期末基本就到手了。祝考试顺利。