密码学基础(对称/非对称/哈希/签名/证书)

共 21 题
📑 题目列表 21 题
#
★★★

1. 对称加密与非对称加密的核心区别是什么(密钥管理、加解密性能、适用场景),典型算法各举一例?

请说明对称加密与非对称加密的核心区别,包括密钥管理、加解密性能与适用场景三个方面,并各举一个典型算法?

  • 对称加密单一密钥、密钥分发困难、性能高
  • 非对称加密公私钥分离、密钥分发容易、性能低
  • 两种体制的典型适用场景

对称加密使用同一把密钥进行加解密(如 AES),密钥管理简单但必须通过安全信道共享密钥,密钥分发是难点;由于算法结构简单、硬件(AES-NI)支持完善,性能非常高,适合批量加密数据。非对称加密使用公钥加密、私钥解密(或反之),公钥可以公开分发、无需预共享密钥,解决了密钥分发问题,但基于大整数分解或椭圆曲线离散对数,运算开销大,性能低,通常只用于加密少量数据(如会话密钥)。典型算法:对称加密为 AES,非对称加密为 RSA 或 ECC。

二者本质是"密钥共享"与"密钥分发"的不同权衡。实际工程中不会单独使用某种,而是用非对称加密协商生成对称加密的密钥,再由对称加密承担数据加密,即混合加密(数字信封)。

# 对称加密:AES-GCM(cryptography)
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
key = AESGCM.generate_key(bit_length=256)
nonce = b"123456789012"   # 12字节,必须唯一
ct = AESGCM(key).encrypt(nonce, b"hello", None)

# 非对称加密:RSA-OAEP
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
aes_key = AESGCM.generate_key(bit_length=256)
cipher = key.public_key().encrypt(aes_key, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
#
★★★

2. 公钥密码体制中公钥与私钥的数学关系是什么,为什么公钥可以公开分发而不会泄露私钥?

在公钥密码体制中,公钥与私钥之间的数学关系是什么?为什么公钥可以公开分发而不会泄露私钥?

  • RSA 中大整数分解问题的单向性
  • ECC 中椭圆曲线离散对数问题的单向性
  • 单向陷门函数的概念

公钥与私钥通过单向陷门函数相耦合。RSA 中,公钥是 (n, e),其中 n=pq 是两个大素数的乘积,私钥是 d(e 关于 φ(n) 的模逆元)。加密是 c=m^e mod n,解密是 m=c^d mod n。只知道 n 和 e,要恢复 d 需要分解 n,而大整数分解在计算上不可行,因此公钥可公开。ECC 中,私钥是随机标量 k,公钥是 Q=kG(曲线上的点乘),恢复 k 需要求解椭圆曲线离散对数问题,同样不可行。公钥公开不泄露私钥,是因为"由公钥反推私钥"所需的数学逆向运算在计算上不可行。

核心是单向陷门函数:正向计算容易,逆向计算困难,但私钥持有者利用陷门(私钥信息)可以高效逆向。安全性建立在计算复杂度假设(大整数分解、离散对数)之上,而非绑定的保密性。

#
★★★

3. 混合加密(数字信封)如何工作,为什么 HTTPS 用非对称协商/传递对称密钥、用对称加密数据?

混合加密(数字信封)是如何工作的?为什么 HTTPS 使用非对称加密协商或传递对称密钥,而用对称加密加密实际数据?

  • 数字信封的流程
  • 非对称与对称的性能差异
  • 前向保密与 ECDHE 的引入

数字信封把非对称加密用于传输对称密钥,把对称加密用于加密数据。HTTPS 中,客户端用服务器的公钥加密一个临时生成的对称密钥(或通过 ECDHE 协商会话密钥),服务器用私钥解密获得对称密钥,随后双方用该对称密钥通过 AES-GCM/ChaCha20 加密所有数据。这样既利用了非对称加密的密钥分发能力,又利用了对称加密的高吞吐性能。现代 TLS 1.3 更进一步,用 ECDHE 临时密钥对协商会话密钥,而非直接用 RSA 加密传输,从而获得前向保密。

若只用非对称加密数据,性能会下降几个数量级且无法处理大量数据;若只用对称加密,密钥分发无法在不可信信道上完成。数字信封取两者之长。ECDHE 用临时密钥做 ECDH 协商,即使服务器长期私钥泄露,历史会话也无法被解密,这是前向保密的关键。

#
★★★

4. 数字签名为什么能同时提供完整性、身份认证与不可否认性,签名与加密使用公私钥的方向有何不同?

数字签名为什么能同时提供完整性、身份认证与不可否认性?签名与加密在使用公私钥的方向上有何不同?

  • 私钥签名、公钥验签的方向
  • 完整性、身份认证、不可否认性的定义
  • 加密是公钥加密、私钥解密

数字签名用私钥对数据的哈希值签名,任何人用对应公钥验证,从而提供三种性质:完整性(数据改动会导致验签失败)、身份认证(只有持有私钥者能生成有效签名,公钥可验证来源)、不可否认性(私钥只有签名者掌握,签名无法被他人伪造或抵赖)。签名与加密使用公私钥的方向相反:加密用公钥加密、私钥解密(保证只有私钥持有者能读);签名用私钥签名、公钥验证(保证只有私钥持有者能产生)。私钥既用于解密也用于签名,但语义不同。

签名本质是"私钥持有者"的证明,安全性依赖私钥保密。签名通常先哈希再签,既提高性能又避免对超大消息直接运算。不可否认性依赖私钥不被泄露、且签名算法与含义绑定(如 RSA-PSS,而非直接 m^d mod n)。

#
★★★

5. 哈希函数的抗原像、抗第二原像、抗碰撞三种安全性如何定义,分别支撑完整性、口令存储与数字签名?

哈希函数的抗原像、抗第二原像、抗碰撞三种安全性如何定义?它们分别支撑完整性、口令存储与数字签名中的哪些需求?

  • 抗原像(one-way)
  • 抗碰撞(collision resistance)
  • 三者强度关系与各自应用

抗原像指给定哈希值 h,无法找到 m 使 H(m)=h,计算复杂度约 2^n,用于口令存储(攻击者无法从哈希反推口令)。抗第二原像指给定 m1,无法找到 m2≠m1 使 H(m1)=H(m2),复杂度约 2^n,用于防篡改签名数据的替代。抗碰撞指无法找到任意两个不同消息 m1、m2 使 H(m1)=H(m2),复杂度约 2^(n/2)(生日攻击),用于数字签名(阻止攻击者伪造能产生相同签名的消息)。三者强度从弱到强依次为抗原像、抗第二原像、抗碰撞,抗碰撞最难满足。

完整性与签名场景中,攻击者可以自由选择消息,因此需要最强的抗碰撞性;口令存储场景攻击者目标是反推原值,只需抗原像。SHA-256 提供 256 位抗原像、128 位抗碰撞强度,因此常被认为"128 位安全级别"。

#
★★★

6. 数字证书与 PKI 信任链,CA 如何签发证书,浏览器验证证书链、吊销状态(CRL/OCSP)的过程是什么?

数字证书与 PKI 信任链是如何工作的?CA 如何签发证书,浏览器验证证书链与吊销状态(CRL/OCSP)的过程是什么?

  • 证书链验证
  • CRL 与 OCSP 吊销检查
  • 信任锚(根证书)

CA 签发证书时,申请者生成密钥对并向 CA 提交 CSR,CA 验证身份后用自己的私钥对申请者的公钥、身份信息、有效期等字段签名,生成 X.509 证书。浏览器验证时,从叶子证书开始,用上层 CA 的公钥验证其签名,逐级上升到用户信任的根 CA,构成信任链。同时检查证书有效期、域名(SAN)匹配,并查询吊销状态(离线 CRL 或在线 OCSP/OCSP stapling)。根 CA 证书预装在浏览器或系统中,是信任锚。

信任链的本质是"信任从根 CA 传递到叶子证书"。吊销检查防止已签发的证书在到期前被撤销后仍被使用。OCSP stapling 由服务器主动提供 OCSP 响应,减少客户端隐私泄露与查询延迟;现代主流还采用 CRL 分发点与 OCSP 结合。

#
★★★

7. 分组密码与流密码的加密模式差异是什么,AES 属于哪类,ChaCha20 为什么是流密码?

分组密码与流密码的加密模式差异是什么?AES 属于哪类,ChaCha20 为什么是流密码?

  • 分组密码处理固定长度块
  • 流密码逐字节/逐比特生成密钥流
  • AES 与 ChaCha20 的分类

分组密码把明文分成固定长度块(如 AES 的 128 位)分别加密,需要工作模式(如 CBC、GCM)来支持任意长度数据;流密码通过密钥流生成器(内部状态 + 密钥)产生与明文等长的密钥流,与明文逐位异或加密,天然支持任意长度且无需填充。AES 属于分组密码。ChaCha20 基于 ARX(加法、旋转、异或)运算,通过 20 轮作用在 512 位状态上生成密钥流,加密时与明文异或,因此是流密码。

流密码的加密就是密钥流与明文的异或,解密同样用密钥流异或,结构简单、适合软件高效实现。分组密码在工作模式下本质上也产生类似密钥流的效果(如 CTR 模式),因此在分类上有时也可视为流式。

#
★★

8. 分组密码工作模式 ECB/CBC/CTR/GCM 各自特点是什么,为什么 ECB 不安全、GCM 成为现代推荐?

分组密码工作模式 ECB、CBC、CTR、GCM 各自的特点是什么?为什么 ECB 不安全,而 GCM 成为现代推荐?

  • CBC 链式依赖 IV
  • CTR 计数器流式
  • GCM 认证加密 + 并行

ECB 每块独立加密,相同明文块得到相同密文块,泄露模式信息,极不安全。CBC 前一块密文与当前明文异或后再加密,提供块间扩散,但加密是串行的、需 IV、且无完整性保护。CTR 用计数器加密生成密钥流,与明文异或,可并行、随机访问,但无认证。GCM 是 CTR 模式 + GMAC 认证标签,同时提供机密性与完整性,支持并行、有 AEAD 语义,是现代推荐。ECB 不安全是因为块间无关联,图像等数据会保留原始模式,无法隐藏明文分布。

现代要求"认证加密"(confidentiality + integrity),GCM 同时满足,且 AES-NI 硬件可高效并行,因此成为 TLS 1.3 等首选。相比之下 CBC+HMAC 需要额外认证步骤,实现复杂且易出错。

#
★★

9. 加密、编码与哈希的本质区别是什么(可逆性、是否需要密钥、能否保证完整性)?

加密、编码与哈希的本质区别是什么?请从可逆性、是否需要密钥、能否保证完整性三个维度说明?

  • 编码可逆但无需密钥
  • 哈希不可逆
  • 完整性保证

加密是密钥控制的可逆变换,有密钥才能加解密,保证机密性,是可逆的。编码(如 Base64、UTF-8)是可逆但无需密钥的确定性变换,用于数据传输或表示,不提供任何安全属性。哈希是单向不可逆运算,不能逆出原值,用于完整性校验与口令存储,但不提供机密性。三者的关系:加密可逆、需密钥、保证机密性;编码可逆、不需密钥、不保证安全;哈希不可逆、不需密钥、可检验完整性。

常见误区是把 Base64 当作加密,它只是编码。哈希的完整性保证是"检测意外或恶意篡改",但要防止攻击者同时篡改哈希值,需结合 MAC 或数字签名。

#
★★

10. Diffie-Hellman 密钥交换如何在不安全信道上协商共享密钥,中间人攻击为何需要证书体系解决?

Diffie-Hellman 密钥交换如何在不安全信道上协商共享密钥?中间人攻击为何需要证书体系解决?

  • 共享密钥计算
  • 中间人攻击机理
  • 认证与证书的作用

DH 交换中,双方各自选择私钥 a、b,计算 A=g^a、B=g^b 并发送,对方计算 s=B^a=(g^b)^a=g^(ab) 和 s=A^b=(g^a)^b=g^(ab),得到相同共享密钥。窃听者虽然看到 A、B,但无法由 g^a 求 a(离散对数问题),无法计算 g^(ab)。但 DH 本身不认证对方身份,中间人可分别与双方建立自己的密钥,冒充双方,这就是中间人攻击。解决方法是把 DH 公钥通过证书认证,确保证书中的公钥确实属于声称的对方,从而阻断中间人伪造。

DH 解决"密钥协商"而非"身份认证"。HTTP 的信任模型要求密钥与身份绑定,证书由 CA 签发保证公钥真实性,双方先验证证书再 DH 协商,才能防止中间人。

#
★★

11. 前向保密(PFS)的含义是什么,为什么 ECDHE 每次会话生成临时密钥能让历史流量不被解密?

前向保密(PFS)的含义是什么?为什么 ECDHE 每次会话生成临时密钥能让历史流量不被解密?

  • 前向保密定义
  • 临时密钥 vs 长期密钥
  • ECDHE 的会话密钥派生

前向保密指即使服务器的长期私钥(如签名私钥)在未来被泄露,历史上已完成的会话流量也无法被解密。ECDHE 中,会话密钥由服务器与客户端每次会话临时生成的 ECDH 临时密钥(ephemeral)协商得到,双方在握手结束后销毁临时密钥,因此长期私钥只用于签名认证握手消息,不参与会话密钥派生。攻击者即使获得长期私钥,也无法还原已销毁的临时密钥,进而无法解密历史会话。

旧式 RSA 密钥交换中,服务器用长期私钥直接加解密会话密钥,长期私钥泄露即可解密所有历史会话,无前向保密。ECDHE 的临时密钥"用完即弃"是前向保密的核心。

#
★★

12. 彩虹表攻击与加盐的作用是什么,为什么口令哈希要使用 bcrypt/scrypt/Argon2 等慢哈希?

彩虹表攻击与加盐的作用是什么?为什么口令哈希要使用 bcrypt、scrypt、Argon2 等慢哈希?

  • 加盐的作用
  • 慢哈希与内存硬度
  • 抗 GPU/ASIC

彩虹表是预计算的哈希值到明文的查找表,攻击者用它能快速反查常见口令的哈希。加盐(salt)是在口令后追加随机值再哈希,使每条口令的哈希都不同,破坏彩虹表的预计算复用,迫使攻击者逐条单独破解。但普通哈希(如 MD5/SHA)速度极快,GPU 可并行暴力破解,因此口令哈希需用 bcrypt(Blowfish 迭代)、scrypt(内存困难)、Argon2(内存+时间+并行度可调)等慢哈希,通过大量迭代和内存占用显著提高每次破解成本,并支持参数升级。

口令的熵远低于密钥,必须用"慢+内存困难"的 KDF 而非普通哈希。加盐防彩虹表,慢哈希防暴力破解,二者结合是口令存储的标准做法。

#
★★

13. 为什么加密密钥与签名密钥必须分离使用,把 RSA 同一对密钥既用于加密又用于签名有何风险?

为什么加密密钥与签名密钥必须分离使用?把 RSA 同一对密钥既用于加密又用于签名有何风险?

  • 密钥用途分离原则
  • 签名与加密的数学结构
  • 相关攻击与 RSA 结构攻击

加密保证机密性,签名保证真实性,二者语义不同且安全要求不同。若用同一对密钥,攻击者可能利用签名的结构(如让受害者解密"签名")来诱导签名,或利用加密的填充结构伪造签名,破坏安全边界。RSA 中,若用同一密钥对且无正确填充,攻击者可能利用"符号性"操作(如选择其希望被解密的密文让它"签名")发起攻击;长密钥分事故发生率高,且某环节泄露会同时影响两类安全。因此密码学最佳实践是加密密钥与签名密钥完全分离,各自独立生命周期与轮换策略。

密钥用途分离(key separation)是密码学设计原则,防止一个用途的安全漏洞波及其他用途。HSM/KMS 也常区分 key usage 限制密钥用途。

#
★★

14. 量子计算对密码学的威胁,Shor 算法为什么威胁 RSA/ECC,Grover 算法为什么只是降低对称加密安全强度?

量子计算对密码学有哪些威胁?Shor 算法为什么能威胁 RSA/ECC,Grover 算法为什么只是降低对称加密的安全强度?

  • Shor 算法破解大整数分解与离散对数
  • Grover 算法平方加速
  • 对称加密的密钥长度调整

Shor 算法能在多项式时间内解决大整数分解和离散对数问题,直接威胁 RSA、ECC、DH 等基于这些难题的密码体制,因此未来需要后量子密码(ML-KEM、ML-DSA)。Grover 算法通过振幅放大对无序搜索提供平方加速,能使暴力破解密钥的复杂度从 2^n 降到 2^(n/2),但只是降低安全强度,而非彻底破解。因此对称加密(如 AES-128)只需把密钥长度翻倍(用 AES-256)即可恢复到 128 位安全级别,哈希函数同理需延长输出。

二者的本质区别:Shor 是"多项式时间破解",是致命威胁;Grover 是"平方加速",是强度减半。因此非对称密码需要替换算法,而对称密码只需加长密钥。

#
★★

15. HMAC 与 MAC 的作用,为什么"哈希+密钥"不能直接当作 MAC,HMAC 的构造与防长度扩展攻击,以及与数字签名的区别?

HMAC 与 MAC 的作用是什么?为什么"哈希+密钥"不能直接当作 MAC?HMAC 的构造如何防长度扩展攻击,它与数字签名有何区别?

  • 长度扩展攻击
  • HMAC 的 ipad/opad 构造
  • MAC 与数字签名区别

MAC(消息认证码)用共享密钥对消息生成认证标签,用于验证消息完整性与来源,双方需共享密钥。naive 的 H(key||msg) 易受长度扩展攻击:攻击者不知道 key 也能构造出原消息的扩展消息的合法哈希。HMAC 通过 key 分别与 ipad、opad 异或后做两次哈希,即 HMAC=H((key'⊕opad)||H((key'⊕ipad)||msg)),使密钥参与内部状态填充,从而抵抗长度扩展攻击。HMAC 与数字签名的区别:HMAC 用对称共享密钥,双方都能生成和验证,无法提供不可否认性;数字签名用私钥签名、公钥验证,可公开验证且提供不可否认。

HMAC 是"对称认证",数字签名是"非对称认证"。HMAC 安全性依赖密钥保密,适合双方互信场景;签名适合多方需要公开验证的场景。

#
★★

16. AEAD 与 nonce 管理,GCM/ChaCha20-Poly1305 的 nonce 复用为何致命,认证加密如何同时保证机密性与完整性?

AEAD 与 nonce 管理:GCM/ChaCha20-Poly1305 的 nonce 复用为何致命?认证加密如何同时保证机密性与完整性?

  • nonce 复用导致密钥流重用
  • GCM 的 nonce 与计数器
  • AEAD 的机密性+认证

AEAD(认证加密)同时提供机密性与完整性,常见于 GCM、ChaCha20-Poly1305。GCM 由 CTR 加密 + GHASH 认证构成,nonce 用于初始化计数器;ChaCha20-Poly1305 用 nonce 初始化 ChaCha20 密钥流并派生子密钥 Poly1305。若同一把 key 下 nonce 复用,CTR 密钥流会重复,两个相同 nonce 的密文异或可恢复明文,且 GCM 的 GHASH 认证也会被破坏(可推导认证密钥),因此 nonce 复用是致命的。机制上,机密性由加密保证,完整性由认证标签(如 GHASH、Poly1305)保证,二者结合即为 AEAD。

nonce 是为"保证每次加密的密钥流唯一"而存在,必须保证 key 生命周期内唯一。工程上常用 12 字节随机 nonce(碰撞概率低)或计数器非递减,并强调"一次一密"。

#
★★

17. 端到端加密与密钥交换协议,Signal 协议(X3DH/双棘轮)如何实现前向保密与后向保密,与 TLS 的差异如何?

端到端加密与密钥交换协议:Signal 协议(X3DH/双棘轮)如何实现前向保密与后向保密?它与 TLS 有何差异?

  • X3DH 初始密钥协商
  • 双棘轮的前向保密与后向保密
  • E2E 与 TLS 的信任模型差异

Signal 协议先用 X3DH 完成认证的初始密钥协商,生成初始链密钥;随后用双棘轮(Double Ratchet)持续更新密钥:对称棘轮(KDF 链)每次消息派生新密钥,迪菲-赫尔曼棘轮(DH 棘轮)每次交换临时公钥,实现前向保密(历史消息密钥不可恢复)与后向保密/自愈(未来消息密钥安全)。与 TLS 的差异:TLS 保护的是客户端与服务器之间的链路,服务器可访问明文;Signal 是端到端加密,只有通信双方能解密明文,服务器仅转发密文,信任模型从"信任服务器"变为"信任双方密钥"。

双棘轮的核心是"每次消息都向前推进密钥",某个密钥泄露不影响前后消息。E2E 的安全边界比 TLS 更严格,但也要求密钥恢复与设备管理有更复杂的设计。

#
★★

18. 后量子密码(PQC),NIST 标准化的 ML-KEM/ML-DSA 与现有 RSA/ECC 的过渡策略(混合模式)如何?

后量子密码(PQC):NIST 标准化的 ML-KEM、ML-DSA 与现有 RSA/ECC 的过渡策略(混合模式)是什么?

  • ML-KEM/ML-DSA 的定位
  • 混合模式的双签双验
  • 过渡兼容性

ML-KEM(原 CRYSTALS-Kyber)是后量子 KEM,ML-DSA(原 CRYSTALS-Dilithium)是后量子签名,均由 NIST FIPS 203/204 标准化。过渡策略上,主流采用混合模式(Hybrid):在 TLS 中用经典 X25519 与后量子 ML-KEM 的密钥协商结果联合派生会话密钥(如 X25519MLKEM768),证书中用经典 ECDSA 与后量子 ML-DSA 双签名,因此安全性取两者取强,只要其中一个未破就能保证安全。这样既满足量子威胁,又兼容现有经典算法与中间件。

混合模式是关键工程策略,因为 PQC 算法成熟度与实现尚在完善,混合可平滑过渡(crypto-agility),避免"仓促切换"导致兼容性风险,同时保留经典算法作为后备。

#

19. 密钥生命周期管理(生成、分发、存储、轮换、吊销)的工程要点是什么,HSM/KMS 在其中扮演什么角色?

密钥生命周期管理(生成、分发、存储、轮换、吊销)的工程要点是什么?HSM/KMS 在其中扮演什么角色?

  • 生成与存储安全
  • 轮换与吊销策略
  • HSM/KMS 的作用

密钥生命周期包括生成、分发、存储、使用、轮换、吊销、销毁。生成必须用 CSPRNG;存储要加密保护并限制访问;分发要确保机密性与完整性;轮换要定期更换以限制单一密钥泄露的影响;吊销用于已损坏或泄露的密钥,要及时作废。HSM(硬件安全模块)是防篡改硬件,在内部生成并保管密钥,密钥永不离开硬件;KMS(密钥管理服务)基于 HSM 提供密钥管理 API,支持密钥版本(轮换)、权限控制(IAM)、审计日志,实现对密钥的集中、合规管理。

密钥管理是密码系统安全性的基础,密钥泄露等同于加密失效。HSM 提供物理隔离,KMS 提供软件化、可审计、可轮换的管理面,二者结合是现代企业密钥管理的标准。

#

20. 为什么密码学随机数必须使用 CSPRNG,用普通随机数或时间种子生成密钥/Nonce 会导致什么后果?

为什么密码学随机数必须使用 CSPRNG?用普通随机数或时间种子生成密钥/Nonce 会导致什么后果?

  • CSPRNG 的不可预测性
  • 普通随机数与时间种子的可预测性
  • 密钥/Nonce 泄露的后果

CSPRNG(密码学安全伪随机数生成器)产生的随机数满足不可预测性:即使知道部分输出,也无法预测前后输出,且种子来自高熵源。普通随机数(如 rand()、时间种子)可预测,攻击者若在生成密钥时使用时间种子,可枚举时间推断种子,从而重建密钥;Nonce 若可预测或复用,会导致加密密钥流重用("一次一密"失效),破坏机密性。因此密钥、Nonce、会话标识等必须用 CSPRNG(如 Linux 的 /dev/urandom、getrandom)生成。

密码学要求"随机性=不可预测性",而普通随机数只要求"均匀分布"。用可预测种子生成密钥等于把密钥强度降到种子熵,极易被暴力重建。

#

21. 密码学算法的工程陷阱,ECB 误用、CBC padding oracle、常量时间比较(防止时序侧信道)等经典实现漏洞如何规避?

密码学算法的工程陷阱有哪些?请说明 ECB 误用、CBC padding oracle、常量时间比较(防止时序侧信道)等经典实现漏洞?

  • CBC padding oracle 攻击
  • 常量时间比较
  • 时序侧信道

常见工程陷阱包括:ECB 误用导致相同明文块产生相同密文块,泄露模式;CBC padding oracle 攻击利用解密时对 padding 的错误提示反复探测,逐字节恢复明文;常量时间比较是为了防止时序侧信道,若用普通逐字节比较(首个不匹配即返回),攻击者可通过响应时间差异推断字节位置,而常量时间比较(如 XOR 累积后比较)保证所有比较耗时相同。此外还有随机数质量问题、nonce 复用、错误信息泄露等。规避方法是使用 AEAD 模式、统一错误提示、采用 constant-time 比较、使用成熟库。

这些漏洞往往源自"算法正确但实现不当"。正确使用认证加密(AEAD)、统一错误处理、常量时间代码是工程防范的关键。