我正在尝试将DHE_DSS实现到go的crypto / tls包中。不幸的是,我似乎无法使PreMasterSecret(Z)变得相同,我的基本工作流程是:
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中看不到任何建议。
< - 编辑 - >
以下是我的更改补丁:
答案 0 :(得分:1)
客户密钥交换将包含:
length (2 bytes) --> Y_C (in plain text)
我已经用Java实现了TLS,我遵循相同的结构,对我来说很好。
我是否需要签署退回的Yc?
否 无需签署客户端DH公共值,它以纯文本格式传输。
您可以使用pcap并检查数据包中是否传输了相同的值。此外,如果GNU TLS具有用于打印收到的Y_C
的记录器,那么您可以检查是否正在接收正确的数据。
如果你仍然得到不同的Pre-Master秘密,那么生成秘密的逻辑似乎存在一些问题。