J'essaie d'implémenter DHE_DSS dans le paquet crypto/tls de Go. Malheureusement, je n'arrive pas à faire en sorte que le PreMasterSecret (Z) soit le même, mon flux de travail de base est le suivant :
Recevoir le message d'échange de clés du serveur
- Extraire P, G, Ys
- Vérifier en utilisant la signature numérique fournie
Préparer le message d'échange de clés du client
- Créer le Xc du client
- Générer Yc (Yc = G^Xc % P)
- Générer Z (Z = Ys^Xc % P)
-
Renvoyez Yc, emballé comme ça :
ckx := make([]byte, len(yC)+2) ckx[0] = byte(len(Yc)>>8) ckx[1] = byte(len(Yc)) copy(ckx[2:], yBytes)
Cependant, lorsque je débogue avec gnutls-serv, les deux PreMasterSecrets (Z) sont différents. Dois-je signer l'Yc retourné, ou peut-être l'emballer d'une autre manière ? Je ne vois rien dans RFC 5246 pour suggérer cela.
<-- EDIT -->
Voici un patch de mes changements :