Un investigador ha demostrado que es posible ocultar mensajes de vanidad —como bromas o texto— directamente dentro de la clave pública de un certificado SSL confiable. Al manipular el módulo RSA (n) para incluir caracteres específicos codificados en base64, el propietario de un sitio web puede generar un certificado que siga siendo lo suficientemente funcional matemáticamente para ser firmado por una Autoridad de Certificación (CA), mientras muestra un mensaje oculto a cualquiera que inspeccione los datos brutos del certificado.

Listado de código que muestra técnicas de manipulación de claves públicas RSA
El proyecto del investigador demuestra varios métodos para manipular claves públicas para incrustar datos.maurycyz.com

Esta captura de pantalla ilustra la implementación técnica de los trucos de claves públicas discutidos en la investigación.

El mecanismo de los módulos de vanidad

En el criptosistema RSA, una clave pública se compone de un módulo (n) y un exponente público (e). El módulo es el producto de dos números primos grandes, p y q. Debido a que el módulo está controlado por el usuario, puede tratarse como un espacio de almacenamiento para datos.

Para incrustar un mensaje, el método del investigador comienza eligiendo un número primo aleatorio (p) y calculando un módulo objetivo (n) que contiene el mensaje deseado en su codificación base64. Dado que el valor resultante no es un producto perfecto de p y q, el investigador calcula un nuevo q dividiendo el objetivo n por p y redondeando al número primo más cercano.

Fragmento de código técnico para la generación de módulos de vanidad
Código de ejemplo que demuestra la lógica utilizada para calcular un módulo objetivo con mensajes incrustados.maurycyz.com

Esta imagen proporciona un ejemplo concreto del código utilizado para generar el módulo de vanidad.

Debido a que p y q tienen un tamaño similar, un pequeño cambio en q solo afecta a la mitad menos significativa del producto. Esto garantiza que, si el mensaje se incrusta en la mitad superior del módulo, permanezca intacto y legible.

“El valor de q resultante es muy poco probable que sea un número primo (o entero), así que lo redondeo y encuentro el siguiente primo después del q ideal: lo cual usualmente solo requiere cambiar el valor de q por unos pocos cientos.”

— Horible public key tricks:

Obtención de un certificado confiable

Una vez establecido el módulo de vanidad, el investigador utiliza el p y q resultantes para construir una clave privada RSA funcional. Esta clave puede entonces ser enviada a una Autoridad de Certificación a través de una Solicitud de Firma de Certificado (CSR).

Código fuente para la generación de certificados e incrustación de mensajes
Listado de código adicional que muestra la integración de módulos de vanidad en el proceso de generación de certificados.maurycyz.com

Esta imagen complementa la explicación técnica de cómo se modifica el módulo manteniendo la funcionalidad.

El investigador demostró que herramientas estándar como OpenSSL y clientes ACME (como Certbot) pueden usarse para obtener un certificado válido para estas claves. Debido a que el diseño de un certificado es estático, la ubicación del mensaje puede ajustarse hasta que esté correctamente alineado para la legibilidad en base64.

El resultado es un certificado que parece perfectamente normal para un navegador web pero contiene una cadena de texto oculta cuando se visualiza en un visor de certificados o mediante una herramienta de línea de comandos como `openssl s_client`.

Compensaciones de seguridad y limitaciones

Esta técnica reduce intencionadamente la entropía de la clave privada. El investigador señala que, si bien esta es una forma de compresión, teóricamente podría facilitar la factorización de la clave si los números primos p y q están demasiado cerca entre sí o si el exponente privado (d) se vuelve demasiado pequeño.

Sin embargo, para sitios web públicos, el riesgo se mitiga mediante los protocolos TLS modernos. Debido a que el TLS moderno proporciona confidencialidad directa, el compromiso de la clave privada RSA a largo plazo no permite a un atacante descifrar sesiones pasadas; solo facilitaría un ataque de hombre en el medio.

El investigador reconoce que su script de generación no verifica actualmente estos valores inseguros específicos, pero sostiene que el 'certificado de protesta' sigue siendo una forma viable de cifrar el tráfico mientras se hace una declaración sobre la complejidad del sistema de certificados estándar.