uso qué que protocolo programar paso intercambio hellman ejercicios diffie consiste claves clave asignaría aplicaciones algoritmo ssl cryptography go diffie-hellman

ssl - qué - protocolo de intercambio de claves



El secreto premaster se empañó cuando se implementó el intercambio de claves Diffie-Hellman (1)

El intercambio de claves del cliente contendrá:

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

Implementé TLS en Java y sigo la misma estructura y funciona bien para mí.

¿Debo firmar el Yc devuelto?

No, no es necesario firmar el valor público DH del cliente , se transfiere en texto sin formato.

Puede tomar un pcap y verificar si se están transfiriendo los mismos valores en el paquete. Además, si GNU TLS tiene un registrador para imprimir el Y_C recibido, entonces puede verificar si se están recibiendo los datos correctos.

Si en caso de que sigas recibiendo un secreto de Pre-Master diferente, entonces parece haber algún problema con la lógica de generación de secretos.

Estoy tratando de implementar DHE_DSS en el paquete de crypto / tls de go. Desafortunadamente, parece que no puedo hacer que PreMasterSecret (Z) sea el mismo, mi flujo de trabajo básico es:

Recibir mensaje de intercambio de clave de servidor

  • Extracto P, G, Ys
  • Verificar utilizando la firma digital provista

Preparar mensaje de intercambio de clave de cliente

  • Crear Xc del cliente
  • Generar Yc (Yc = G ^ Xc% P)
  • Generar Z (Z = Ys ^ Xc% P)
  • Envíe de vuelta a Yc, empacado así:

ckx := make([]byte, len(yC)+2) ckx[0] = byte(len(Yc)>>8) ckx[1] = byte(len(Yc)) copy(ckx[2:], yBytes)

Sin embargo, cuando estoy depurando esto con gnutls-serv, los dos PreMasterSecrets (Z) son diferentes. ¿Debo firmar el Yc devuelto, o quizás empacarlo de otra manera? No puedo ver nada en RFC 5246 para sugerir esto.

<- EDITAR ->

Aquí hay un parche de mis cambios:

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