0Pricing
Cryptology Academy · 课时

对策:掩码、盲化与恒定时间代码

实现掩码、点盲化和恒定时间比较

对策:掩码、盲化与恒定时间代码 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

三类防护措施

侧信道防护措施分为三类:掩码(将中间值随机化)、盲化(将输入和输出随机化)以及常数时间代码(消除依赖数据的时序差异)。

布尔掩码

将每个中间值与一个新生成的随机掩码 r 进行 XOR。处理经过掩码的值 x⊕r,并在最后去除掩码。这样,功耗迹线依赖于 x⊕r,而不是 x。

乘法的算术掩码

对于乘法运算,请使用乘法掩码:将 x 替换为 x·r mod p。掩码方案必须与密码算法中的每一种代数运算相兼容。

RSA 盲化

在解密密文 c 之前,选择随机数 r,并计算 c' = c·r^e mod n。解密 c' 得到 m·r mod n,然后再除以 r。实际的模幂运算从未接触真实的 c。

ECC 点盲化

将射影坐标随机化:不使用仿射点 (x,y),而是针对随机的 λ 使用 (λx : λy : λ)。标量乘法在随机化后的坐标上运行,因此每次都会产生不同的功耗迹线。

常数时间编程规则

1. 不使用依赖秘密的分支。2. 不使用依赖秘密的内存索引。3. 不提前退出。4. 在可用时使用平台内建的常数时间操作(例如 crypto_verify_32)。

Python 中的常数时间比较

在对时序敏感的路径中,绝不要对原始字节使用 == 或 hmac.compare_digest。请使用:

import hmac

def constant_time_compare(a: bytes, b: bytes) -> bool:
    """Uses HMAC double-HMAC trick for constant-time equality."""
    # hmac.compare_digest is constant-time in CPython
    return hmac.compare_digest(a, b)

# Example
secret = b"expected_mac_value"
received = b"attacker_provided__"
print(constant_time_compare(secret, received))  # False, but no timing leak

编译器和体系结构中的陷阱

编译器可能会优化掉常数时间代码。请使用易失存储、内存屏障或汇编内建函数。C 编译器提供了 -fno-delete-null-pointer-checks,但没有通用的常数时间保证。

随机置换与虚拟操作

随机改变 S 盒查表的顺序,或插入不影响结果但会消耗功耗的虚拟操作。这可以提高 DPA 的攻击难度,但无法消除泄漏。

硬件防护措施

专用密码加速器(ARM TrustZone、STM32 硬件 AES)会在芯片中应用掩码。ASIC 实现还会加入金属屏蔽层和主动网格,以检测物理探测。

知识检查

哪种防护措施会在模幂运算之前将密文随机化,从而防止 RSA 时序攻击?

课程回顾

掩码将中间值随机化;盲化将 RSA/ECC 的输入随机化;常数时间代码消除时序分支。纵深防御会结合这三种方法。硬件加速器在芯片中应用这些方法,从而提供最强的保证。

常见问题解答

「对策:掩码、盲化与恒定时间代码」课时是免费的吗?

是的 — 「对策:掩码、盲化与恒定时间代码」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「对策:掩码、盲化与恒定时间代码」这节课中我会学到什么?

实现掩码、点盲化和恒定时间比较 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「对策:掩码、盲化与恒定时间代码」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 时序攻击:从执行时间提取密钥
  2. 功耗分析:SPA 与 DPA
  3. 电磁与声学侧信道
  4. 对策:掩码、盲化与恒定时间代码
← 返回 Cryptology Academy