# Creando un certificado digital utilizando un algoritmo de encriptación post-cuántica

Es posible crear un certificado digital que implemente [algoritmos PQC (Post-Quantum Crypto)](https://www.cloudflare.com/es-es/learning/ssl/quantum/what-is-post-quantum-cryptography/). Vamos a demostrar como es posible generar un par de llaves ML-DSA y utilizarlas dentro de un certificado X.509, ya sea self-signed o firmado por un CA privado usando las herramientas CLI de OpenSSL.

# Pre-requisitos

* El soporte para ML-DSA fue introducido a partir de OpenSSL 3.5.
    
* Existen algoritmos PQC para varios propósitos, pero en esta guía nos vamos a enfocar en algoritmos stateless y asimétricos para firmas digitales: ml-dsa-44, ml-dsa-65 y ml-dsa-87 (categorías de seguridad 128/192/256-bit).
    
* Tome en cuenta que el soporte en la actualidad a nivel de industria para este tipo de certificados sigue siendo limitado. No se recomienda utilizar este tipo de certificados **TODAVIA** en producción a no ser que sepa **MUY BIEN** lo que está haciendo.
    
* Esta vez vamos a utilizar Windows para nuestro tutorial, pero las instrucciones funcionan para cualquier sistema operativo en el que se pueda utilizar openssl 3.5+.
    

# Utilizando la versión correcta de OpenSSL

* Bajar la versión más reciente de OpenSSL en versión ZIP para **Windows** de [aquí](https://kb.firedaemon.com/support/solutions/articles/4000121705-openssl-binary-distributions-for-microsoft-windows):
    
    ```plaintext
    https://download.firedaemon.com/FireDaemon-OpenSSL/FireDaemon-OpenSSL-x64-3.6.0.exe
    ```
    
* Ejecute el instalador y asegúrese de habilitar la opción de agregar al PATH:
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1759471000168/4e535b7e-61e1-4488-b8ef-1f8849968c17.png align="center")
    
* Abra una sesión de DOS/command prompt y asegúrese de tener permisos de lectura/escritura en el directorio de trabajo que decida utilizar
    
    ![Command Prompt](https://www.geog.leeds.ac.uk/courses/other/programming/info/software/command.jpg align="center")
    

# Creando un CA

Vamos a enfocarnos en un ejemplo básico que no incluya un [RA](https://es.wikipedia.org/wiki/Autoridad_de_registro), el cual es un componente clave cuando se construye una infrastuctura de PKI. Por lo pronto, comenzamos creando el [CA](https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n):

* Generar una llave privada ML-DSA (escoja ml-dsa-44 / -65 / -87)
    
    ```plaintext
    openssl genpkey -algorithm ml-dsa-87 -out ca-priv.pem
    ```
    
* Generamos un CA temporal para pruebas utilizando un certificado self-signed con una validez de 10 años:
    
    ```plaintext
    openssl req -x509 -new -key ca-priv.pem -subj "/CN=Test CA" -days 3650 -nodes -keyout ca.key -out ca.crt
    ```
    

# Creación del certificado firmado por el CA

* Generar una llave privada ML-DSA (escoja ml-dsa-44 / -65 / -87)
    
    ```plaintext
    openssl genpkey -algorithm ml-dsa-65 -out mldsa65-priv.pem
    ```
    
* Extraiga la llave pública
    
    ```plaintext
    openssl pkey -in mldsa65-priv.pem -pubout -out mldsa65-pub.pem
    ```
    
* Crear un [CSR](https://es.wikipedia.org/wiki/Certificate_Signing_Request)
    
    ```plaintext
    openssl req -new -key mldsa65-priv.pem -subj "/CN=example.local" -out mldsa65.csr
    ```
    
* Crear un certificado self-signed con una validez de 1 año:
    
    ```plaintext
    openssl req -x509 -new -key mldsa65-priv.pem -subj "/CN=example.local" -days 365 -out mldsa65-self.crt
    ```
    
* Firmar el CSR con un CA cert+key
    
    ```plaintext
    openssl x509 -req -in mldsa65.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -out mldsa65-by-ca.crt
    ```
    

# Verificación

* Obtener una versión texto del certificado privado:
    
    ```plaintext
    openssl x509 -in mldsa65-by-ca.crt -text -noout
    ```
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1759472808988/2aed15fa-d045-47c8-9a80-a60978de5e78.png align="center")
    
* Verificar el certificado firmado por el CA:
    
    ```plaintext
    openssl verify -CAfile ca.crt mldsa65-by-ca.crt
    ```
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1759472698278/833b8430-edd2-489b-bb92-2ffeb61e4e61.png align="center")
    

# Conclusión

El Post-Quantum Cryptography (PQC) es el futuro, Microsoft [ya comenzó a soportar librerías de PQC en .NET 10](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/libraries), Chrome Browser desde hace varios años [empezó la adopción](https://thehackernews.com/2024/09/google-chrome-switches-to-ml-kem-for.html?m=1) de PQC, y existen muchos otros ejemplos más de los gigantes de la industria adoptando estas prácticas.

Este laboratorio permite tener acceso a los mismos algoritmos y tecnología criptográfica que los gigantes de la industria están empezando a adoptar alrededor del planeta.
