gpt4 book ai didi

ssl - 实现 Diffie-Hellman key 交换时预主 key 不匹配

转载 作者:IT老高 更新时间:2023-10-28 12:59:13 25 4
gpt4 key购买 nike

我正在尝试将 DHE_DSS 实现到 go 的 crypto/tls 包中。不幸的是,我似乎无法让 PreMasterSecret (Z) 相同,我的基本工作流程是:

接收服务器 key 交换消息

  • 提取 P、G、Ys
  • 使用提供的数字签名进行验证

准备客户端 key 交换消息

  • 创建客户的 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 中看不到任何内容建议这个。

<-- 编辑-->

这是我的更改补丁:

https://08766345559465695203.googlegroups.com/attach/48587532c74b4348/crypto.patch?part=4&view=1&vt=ANaJVrHbwydqEZc3zjUWqQ5C8Q5zEkWXZLdL0w6JJG3HYntOlBurUTY7mc9xR9OTfE0bJxs4eeL5a5SGd2jj9eIfXcwJQgLvJchXOgkYKBBynbPfshY8kuQ

最佳答案

客户端 key 交换将包含:

length (2 bytes) --> Y_C (in plain text)

我已经在 J​​ava 中实现了 TLS,并且我遵循相同的结构并且工作正常。

Do I need to sign the returned Yc?

不需要签署客户端DH公有值,是明文传输的。

您可以使用 pcap 并检查数据包中是否正在传输相同的值。此外,如果 GNU TLS 具有用于打印收到的 Y_C 的记录器,那么您可以检查是否收到了正确的数据。

如果你仍然得到不同的 Pre-Master secret,那么似乎秘钥的生成逻辑有问题。

关于ssl - 实现 Diffie-Hellman key 交换时预主 key 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com