【发布时间】:2012-09-07 12:33:59
【问题描述】:
我正在尝试将 DHE_DSS 实现到 go 的 crypto/tls 包中。不幸的是,我似乎无法让 PreMasterSecret (Z) 相同,我的基本工作流程是:
接收服务器密钥交换消息
- 提取 P、G、Ys
- 使用提供的数字签名进行验证
准备客户端密钥交换消息
- 创建客户的 Xc
- 生成 Yc (Yc = G^Xc % P)
- 生成 Z (Z = Ys^Xc % P)
- 寄回 Yc,包装如下:
ckx := make([]byte, len(yC)+2)
ckx[0] = byte(len(Yc)>>8)
ckx[1] = byte(len(Yc))
copy(ckx[2:], yBytes)
但是,当我使用 gnutls-serv 调试它时,两个 PreMasterSecrets (Z) 是不同的。我是否需要在退回的 Yc 上签名,或者以其他方式打包?我在RFC 5246 中看不到任何建议。
这是我的更改补丁:
【问题讨论】:
-
作为提示,Wireshark 的最新版本(1.8 及更高版本)将解析客户端和服务器密钥交换消息,这将有助于调试。
-
@Jumbogram 可能有点棘手,但它确实可以解析 SSL。
-
你能给我们看一些代码吗?我有一种感觉,这将是一个“多眼”问题。
-
是的,如果你能做一个 SSCCE 真的很有帮助:sscce.org
-
你确定你使用原始根模 N 作为 G 吗?en.wikipedia.org/wiki/Primitive_root_modulo_n
标签: ssl cryptography go diffie-hellman