Question Secret pré-maître associé à la mise en œuvre de l'échange de clés Diffie-Hellman


J'essaie d'implémenter DHE_DSS dans le paquet crypto / tls de go. Malheureusement, je ne peux pas sembler avoir le PreMasterSecret (Z) identique, mon workflow de base est le suivant:

Recevoir un message d'échange de clé de serveur

  • Extrait P, G, Ys
  • Vérifier à l'aide de la signature numérique fournie

Préparer un message d'échange de clés client

  • Créer le client Xc
  • Générer Yc (Yc = G ^ Xc% P)
  • Générer Z (Z = Ys ^ Xc% P)
  • Renvoyer 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 le Yc retourné, ou peut-être le remplir autrement? Je ne peux rien voir dans RFC 5246 pour suggérer ceci.

<- EDIT ->

Voici un patch de mes changements:

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


42
2017-09-14 10:43


origine


Réponses:


L'échange de clés client contiendra:

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

J'ai implémenté TLS en Java et je suis la même structure et fonctionne bien pour moi.

Dois-je signer le Yc retourné?

Non


1
2017-08-31 11:09