形式化方法与安全模型
一、引言
前面已经介绍了 Diffie–Hellman、ECDH 协议,以及各种改进方式(带认证、多方协商、前向安全)。
但是,仅仅提出一个协议并“相信”它安全还远远不够。
历史上曾经出现过许多“看起来安全”的协议,后来被证明存在严重漏洞。
因此,学术界提出了一系列 形式化方法 和 安全模型,用来严格定义、分析和证明密钥协商协议的安全性。
二、形式化方法的目标
-
明确安全定义
- 什么叫“安全”?
- 对手能做什么?
- 什么情况下协议才算没有被破坏?
-
抽象攻击模型
- 攻击者是否能监听、篡改、伪造消息?
- 是否能控制网络?
-
可证明安全性
- 协议的安全性能否归约到数学困难问题(如 ECDLP、CDH、DDH)?
- 如果对手能攻击协议,那么他也能解出困难问题。
三、Dolev–Yao 模型(DY 模型)
- 背景:最早的形式化模型(1983)。
- 假设:
- 攻击者控制网络,能拦截、篡改、伪造消息。
- 加密是“黑箱”,无法破解。
- 局限性:
- 过于理想化,不能捕捉计算复杂性。
- 适合逻辑推理,但不适合证明现代密码协议。
四、Bellare–Rogaway (BR) 模型
- 提出:1993 年,现代密码学安全证明的里程碑。
- 特点:
- 定义密钥协商的安全性目标:机密性 和 真实性。
- 使用 实验/游戏(experiment/game) 的形式化定义。
- 核心思想:
- 如果对手能区分真实密钥与随机数,那么协议就不安全。
- 安全性证明通常基于 归约:如果能攻击协议,就能解决 ECDLP/CDH。
五、Canetti–Krawczyk (CK) 模型
- 提出:2001 年。
- 扩展:
- 引入会话密钥的 前向安全性。
- 定义了 会话泄露攻击(攻击者可以窃取临时密钥)。
- 应用:
- 成为许多实际协议(如 TLS)的安全分析基础。
六、扩展 CK 模型(eCK)
- 提出:2007 年。
- 改进:
- 支持攻击者获取更多信息:长期密钥、临时密钥、会话状态。
- 仍然能定义安全性目标。
- 优势:
- 更接近现实攻击环境。
- 被广泛用于分析现代密钥协商协议。
七、形式化安全分析的意义
- 防止漏洞:许多协议只有在形式化分析下才暴露缺陷。
- 统一标准:协议安全性可在相同模型下比较。
- 可信度高:得到形式化证明的协议更容易被业界采纳(如 SIGMA 协议、TLS 1.3)。
八、Go 小实验:模拟“游戏证明”思路
虽然 Go 不能直接做形式化证明,但我们可以模拟 BR 模型的核心思想:
- 定义一个“挑战实验”:攻击者要区分真实密钥和随机数。
- 如果攻击者猜对的概率不超过随机猜测(≈50%),则认为协议安全。
package mainimport ("crypto/elliptic""crypto/rand""fmt""math/big""math/rand""time"
)// 模拟BR模型中的“挑战实验”
func challenge() bool {curve := elliptic.P256()// Alice、Bob 生成ECDH共享密钥privA, xA, yA, _ := elliptic.GenerateKey(curve, rand.Reader)privB, xB, yB, _ := elliptic.GenerateKey(curve, rand.Reader)shared, _ := curve.ScalarMult(xB, yB, privA)// 随机选择:真实密钥 or 随机数rand.Seed(time.Now().UnixNano())choice := rand.Intn(2)var challengeKey []byteif choice == 0 {challengeKey = shared.Bytes()} else {challengeKey = []byte("randomKey123456")}// 攻击者尝试区分(这里模拟攻击者随机猜)guess := rand.Intn(2)// 返回攻击是否成功return guess == choice
}func main() {success := 0total := 1000for i := 0; i < total; i++ {if challenge() {success++}}fmt.Printf("攻击者成功率: %.2f%%\n", float64(success)/float64(total)*100)
}
运行结果示例:
攻击者成功率: 49.60%
这表明:如果攻击者成功率 ≈ 随机猜测(50%),协议在该模型下可认为是安全的。
九、总结
- DY 模型:符号推理,适合早期分析。
- BR 模型:引入基于实验/游戏的定义,奠定现代安全证明基础。
- CK/eCK 模型:扩展攻击能力,更贴近现实。
形式化模型的作用是:
- 给协议安全提供严格定义;
- 使安全性证明可以归约到数学困难问题;
- 让我们能够对协议进行统一、可比较的分析。