Expandido del comentario para el cierre, aunque francamente esto me parece más bien como el viejo personaje, "¿quién está enterrado en la tumba de Grant?"
TLDR: la clave pública (estática) está en el certificado de clave pública
SSL / TLS utiliza certificados X.509 para las claves públicas estáticas, o para ser exactos: SSL referenciado X.509v3, un estándar entonces recientemente publicado por lo que entonces era CCITT y desde entonces se ha convertido en UIT-T; los RFC para TLS hacen referencia a PKIX, que es un subconjunto (formalmente un perfil) de X.509v3 definido por una serie de RFC actualmente encabezados por rfc5280 .
Un certificado X.509 / PKIX contiene información sobre la clave pública del sujeto en una estructura de datos prosaicamente denominada SubjectPublicKeyInfo definida en 5280 sección 4.1 4.1.1.2 y 4.1.2.7 como:
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }
que admite una variedad de algoritmos al especificar el algoritmo en sí y los parámetros dependientes del algoritmo, así como la clave pública dependiente del algoritmo "ajustada" dentro de una BIT STRING.
SPKI (como yo lo llamo) se especifica en detalle para varios algoritmos, incluido DSA (llamado de forma imprecisa DSS en el conjunto de cifrado SSL / TLS y nombres de intercambio de claves) en rfc3279 sección 2.3.2 . La parte de 'algoritmo' consiste en el OID (Identificador de objeto) para DSA, y parámetros que consisten normalmente en p, q, g como una SECUENCIA ASN.1 de INTEGERs - con una opción para omitir estos parámetros de un certificado si son 'heredados' del certificado de CA del emisor (una opción que nunca he visto usada). La parte 'subjectPublicKey' es simplemente el valor y (= g ^ x mod p) como un INTEGER ASN.1 en la envoltura BIT STRING.
La firma DSA (bajo la clave privada que coincide con la publicación en el certificado) en los valores DHE (p, g, y) en el mensaje ServerKeyExchange utiliza un valor 'aleatorio' convencionalmente anotado k (no x) para producir un par de enteros r, s que se transmiten (en ASN.1) en ese mismo mensaje ServerKeyExchange. (Técnicamente, k no necesita ser aleatorio siempre y cuando no se repita para datos diferentes; consulte rfc6979 para una alternativa determinista).