简介这份资源是西安电子科技大学计算机科学与技术专业网络方向「应用密码学与网络安全」期末考试的复习要点整理面向正在备考该课程的学生尤其适合需要快速梳理考点、把握题型分布的学习者。内容紧扣PPT授课范围覆盖选择题与大题两类题型并系统归纳了计算题、问答题与应用题的常见考法。资源包内含1个PPT文件大小约1.94MB以课件形式集中呈现各章节重点。从内容预览看要点涉及OSI安全框架、安全攻击类型与安全服务机制DES、AES、Feistel结构、S盒与雪崩效应双重DES的中间相遇攻击、分组密码工作模式DH密钥交换与中间人攻击Hash函数、消息认证码与数字签名以及密钥分发、Kerberos认证、SSL握手、IPSec传输与隧道模式等核心章节。目前已有1048人学习下载适合考前对照PPT逐章查漏补缺快速建立知识框架并锁定高频考点。1. 应用密码学与网络安全期末从密钥交换到TLS握手哪些考点年年绕不开如果你正在准备应用密码学与网络安全的期末考试大概率已经发现一个规律这门课不像操作系统那样靠刷题量堆分数也不像数据结构那样有固定套路。它考的是你对“安全机制为什么成立”的理解以及“某个环节被替换后会发生什么”的推演能力。密钥交换、分组密码工作模式、消息认证码、数字签名、PKI证书链、TLS握手流程——这些名词在往年卷子里反复出现但每次换一个角度问就能筛掉一批只背了定义的人。我带过几轮复习也见过不少同学在这门课上翻车。最常见的误区是把密码学当成数学公式去记结果遇到“为什么CBC模式需要IV而ECB不需要”这种题就卡住了。其实这门课的复习逻辑很清楚先把安全目标机密性、完整性、认证性、不可否认性和对应机制加密、MAC、签名、证书的映射关系理清楚再逐个攻破每个机制的核心参数和典型攻击场景。这篇笔记就按这个思路把往年高频考点拆成可复现的复习路径从对称加密到公钥基础设施再到TLS握手抓包验证每一步都给出具体操作和参数含义。适合谁看如果你已经上过一轮课但知识点还是散的或者做题时总在“感觉见过但说不清楚”的状态这篇内容能帮你把零散概念串成一条线。如果你基础不错可以直接跳到第4章的避坑部分那里列了几个往年卷子里反复出现的陷阱题。2. 对称加密与分组模式从DES到AES工作模式怎么选怎么算2.1 分组密码的核心参数密钥长度、分组长度与轮数复习对称加密先抓住三个参数密钥长度、分组长度、轮数。DES的密钥表面是64位实际有效密钥56位8位奇偶校验分组64位16轮Feistel结构。AES分组固定128位密钥可选128/192/256位轮数分别是10/12/14轮。考试里常考的点不是让你背轮数而是问“为什么DES的56位密钥现在不安全”——答案要落到穷举空间2^56≈7.2×10^16以现代算力可以暴力破解而AES-128的2^128空间目前仍被认为安全。Feistel结构的核心性质是加密和解密可以共用同一套电路只要把子密钥顺序反过来。这个性质在简答题里经常出现比如“说明Feistel结构为什么解密不需要单独设计算法”。答题时要把“左右两半交换后异或”这个操作讲清楚而不是只写“因为对称”。AES的S盒设计涉及有限域GF(2^8)上的乘法逆元和仿射变换这部分如果课上没展开考试一般不会深究数学推导但可能考“S盒的作用是什么”——非线性替换抵抗线性密码分析和差分密码分析。2.2 工作模式对比ECB、CBC、CFB、OFB、CTR的适用场景工作模式是这门课最容易出计算题和对比题的地方。先看一张参数对比表模式是否需要IV是否可并行加密错误传播典型用途ECB否是无不推荐用于多块数据CBC是否加密一块影响两块文件加密、TLSCFB是否加密一块影响多块流式加密OFB是否无噪声信道CTR是计数器是无高速加密、随机访问ECB最大的问题是相同明文块产生相同密文块经典例子是“ECB模式加密图片后仍能看出轮廓”。CBC通过前一块密文与当前明文异或来消除这个规律但加密必须串行。CTR模式把分组密码变成流密码可以并行适合高吞吐场景。考试里常考的计算题是CBC模式的加密过程。给一个简单例子假设分组长度8位密钥K明文P110110001P201101001IV00000000加密函数E简化为按位取反。那么C1E(P1⊕IV)E(10110001)01001110C2E(P2⊕C1)E(01101001⊕01001110)E(00100011)11011100。这类题的关键是每一步都写清楚异或对象是谁。2.3 用Python验证CBC与CTR的加密差异光看表格不够动手跑一遍才能记住。下面用Python的cryptography库演示CBC和CTR对同一明文的不同输出from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.backends import default_backend import os key os.urandom(16) # AES-128密钥 iv os.urandom(16) # 初始化向量 plaintext bSecurityExam2024 # 16字节明文 # CBC模式 cipher_cbc Cipher(algorithms.AES(key), modes.CBC(iv), backenddefault_backend()) encryptor_cbc cipher_cbc.encryptor() ct_cbc encryptor_cbc.update(plaintext) encryptor_cbc.finalize() print(CBC密文:, ct_cbc.hex()) # CTR模式 nonce os.urandom(8) # CTR的nonce通常为8字节 cipher_ctr Cipher(algorithms.AES(key), modes.CTR(nonce), backenddefault_backend()) encryptor_ctr cipher_ctr.encryptor() ct_ctr encryptor_ctr.update(plaintext) encryptor_ctr.finalize() print(CTR密文:, ct_ctr.hex())这段代码的逻辑说明CBC模式需要16字节IV且IV必须随机且不可预测CTR模式需要nonce计数器从nonce开始递增。参数上key长度决定AES变体iv/nonce的长度必须与分组长度匹配CTR的nonce加计数器总长等于分组长度。运行后你会发现同一明文在两种模式下密文完全不同而且CBC的密文长度必须是分组的整数倍不足需要填充。考试里如果问“为什么CTR模式不需要填充”答案就是它本质上是流密码逐位或逐字节异或密文长度等于明文长度。3. 消息认证与数字签名HMAC、RSA签名与证书链验证3.1 HMAC的构造与密钥长度选择消息认证码解决的是完整性和认证性不解决机密性。HMAC的构造是H(K⊕opad || H(K⊕ipad || M))其中opad0x5c重复ipad0x36重复。考试常问“HMAC为什么要用两次哈希”——目的是防止长度扩展攻击。如果直接用H(K||M)攻击者可以在不知道K的情况下构造H(K||M||padding||M)因为哈希函数是迭代的。密钥长度方面HMAC的密钥如果短于哈希输出长度安全性会降低。推荐密钥长度不小于哈希输出长度的一半。比如HMAC-SHA256密钥至少128位。3.2 RSA签名与验签的数学步骤RSA签名的核心是私钥加密、公钥解密实际上是用私钥做模幂运算。步骤选择两个大素数p和q计算npqφ(n)(p-1)(q-1)选择e满足1eφ(n)且gcd(e,φ(n))1计算de^(-1) mod φ(n)。签名时sm^d mod n验签时ms^e mod n比较m与m。考试里常给一个小整数例子让你算。比如p3q11n33φ(n)20选e3则d7因为3×721≡1 mod 20。签名m5s5^7 mod 33。计算5^2255^425^2625 mod 33625-18×33625-594315^75^4×5^2×531×25×53875 mod 33。3875÷33117余14所以s14。验签14^3 mod 332744 mod 332744-83×332744-27395与m一致。这类题的关键是模幂运算不要算错建议用平方-乘算法逐步算。3.3 用OpenSSL验证证书链与签名理论讲完用OpenSSL实际验证一次证书链。假设你有一个服务器证书server.crt、中间证书intermediate.crt、根证书root.crt# 验证证书链 openssl verify -CAfile root.crt -untrusted intermediate.crt server.crt # 查看证书签名算法 openssl x509 -in server.crt -noout -text | grep Signature Algorithm # 验证签名用中间证书公钥验证服务器证书签名 openssl x509 -in server.crt -noout -pubkey server_pub.pem openssl dgst -sha256 -verify server_pub.pem -signature (openssl x509 -in server.crt -noout -text | grep -A1 Signature Value | tail -1 | xxd -r -p) (openssl x509 -in server.crt -noout -text | sed -n /TBSCertificate/,/Signature Value/p | head -n -1)上面第三条命令比较复杂实际考试不会要求这么细。但你要理解证书链验证的逻辑用上一级CA的公钥验证下一级证书的签名直到根证书。根证书是自签名的需要预先信任。参数说明-CAfile指定信任锚-untrusted指定中间证书-pubkey提取公钥。如果验证失败常见原因是中间证书缺失或根证书不在信任列表。4. 避坑与常见问题往年卷子里最容易翻车的五个点4.1 把“加密”和“认证”混为一谈现象题目问“如何保证消息既机密又完整”有同学只写“用AES加密”。原因加密只提供机密性不提供完整性。攻击者可以在不知道密钥的情况下篡改密文解密后得到乱码但系统可能不报错。解决加密和MAC要组合使用常见方案是Encrypt-then-MAC即先加密再对密文计算HMAC。4.2 CBC模式IV可预测导致选择明文攻击现象题目描述“IV按顺序递增”问有什么风险。原因CBC的IV如果可预测攻击者可以构造明文让第一块密文与目标密文比较从而逐字节猜测。解决IV必须随机且不可预测不需要保密但必须每次不同。4.3 RSA签名忘记填充导致伪造现象题目问“RSA签名直接对消息哈希值签名有什么问题”。原因没有填充的RSA签名存在可乘性攻击者可以将两个签名相乘得到第三个有效签名。解决使用PKCS#1 v1.5或PSS填充方案。4.4 证书链验证忽略有效期和吊销状态现象验证通过但证书已过期。原因openssl verify默认检查有效期但有些手动验证脚本会跳过。解决检查notBefore和notAfter字段必要时查询CRL或OCSP。4.5 TLS握手版本混淆现象题目问“TLS 1.2和TLS 1.3的握手有什么区别”答不上来。原因TLS 1.3把密钥交换和认证合并减少了往返次数且废除了RSA密钥交换。解决记住TLS 1.3的1-RTT和0-RTT模式以及它只支持前向安全的密钥交换。5. 用Wireshark抓一次TLS握手从ClientHello到ApplicationData5.1 抓包环境准备与过滤规则先在本机启动一个HTTPS服务或者直接访问一个HTTPS网站。打开Wireshark选择网卡设置过滤规则tcp.port443。为了只看到握手过程可以再加过滤条件tls.handshake。如果你访问的是TLS 1.3Wireshark可能显示为TLSv1.3但握手记录类型仍然是ClientHello、ServerHello等。注意如果网站使用了TLS 1.3ServerHello之后的证书等消息会被加密Wireshark无法直接解析。这时可以设置环境变量SSLKEYLOGFILE让浏览器导出密钥然后在Wireshark的TLS协议设置里指定该文件。5.2 逐字段解读ClientHello与ServerHelloClientHello里重点看版本号supported_versions扩展、随机数Random、会话ID、密码套件列表Cipher Suites、扩展Extensions。密码套件格式是TLS_密钥交换_认证_加密_哈希比如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。ServerHello里看选定的版本、随机数、会话ID、选定的密码套件。如果服务器支持TLS 1.3还会发送KeyShare扩展。考试里常考“ClientHello的随机数作用是什么”——用于生成会话密钥防止重放攻击。5.3 从握手到应用数据的密钥推导路径TLS 1.2的密钥推导pre_master_secret由密钥交换算法生成如ECDHE的共享密钥然后通过PRF伪随机函数用client_random、server_random、pre_master_secret生成master_secret再推导出会话密钥。TLS 1.3简化了这个过程直接用HKDF从共享密钥和握手上下文推导。验证方法在Wireshark里找到Encrypted Handshake Message和Application Data如果配置了SSLKEYLOGFILE可以解密看到HTTP请求内容。5.4 用tshark命令行提取握手关键字段如果不想开图形界面用tshark命令行# 提取ClientHello的密码套件列表 tshark -r capture.pcap -Y tls.handshake.type 1 -T fields -e tls.handshake.ciphersuite # 提取ServerHello选定的密码套件 tshark -r capture.pcap -Y tls.handshake.type 2 -T fields -e tls.handshake.ciphersuite # 统计TLS版本分布 tshark -r capture.pcap -Y tls.handshake.type 1 -T fields -e tls.handshake.version | sort | uniq -c参数说明-Y是显示过滤器-T fields指定输出字段-e指定字段名。这些命令在复习时可以用来快速验证你对握手字段的理解。我自己的习惯是考前把TLS 1.2和1.3的握手流程图各画一遍不看书画完再对照RFC检查。画错的地方就是知识盲区。另外密码学计算题一定要动手算模幂运算和CBC加密至少各做五道不然考场上容易在细节上丢分。希望帮到你。本文还有配套的精品资源点击获取