Blog Blog

DSA (Digital Signature Algorithm)

DSA (Digital Signature Algorithm)

1. Introducción

El Digital Signature Algorithm (DSA) es un algoritmo de firma digital diseñado para validar la autenticidad e integridad de un mensaje o documento. A diferencia de los algoritmos de cifrado simétrico o de clave pública como RSA o ECC, DSA no cifra datos: su objetivo es generar y verificar firmas digitales. Esto permite asegurar que un mensaje proviene efectivamente de quien dice enviarlo y que no fue alterado en el camino.

En este artículo, exploraremos en detalle cómo funciona DSA, su historia, aplicaciones prácticas, ventajas y desafíos actuales, así como un ejemplo de implementación en Python. El texto está dirigido a profesionales de IT, desarrolladores, técnicos junior y entusiastas de la ciberseguridad.

2. Contexto histórico o técnico

A comienzos de la década de 1990, la criptografía comenzaba a integrarse en estándares gubernamentales y comerciales. En ese contexto, el National Institute of Standards and Technology (NIST) de EE. UU. buscó definir un estándar federal para la firma digital. En 1991, se propuso el DSA como parte del Digital Signature Standard (DSS) y se convirtió oficialmente en FIPS 186.

A diferencia de RSA, que podía utilizarse tanto para cifrado como para firma, DSA fue creado exclusivamente para la autenticación de mensajes mediante firmas digitales. Se basa en la dificultad computacional del problema del logaritmo discreto sobre campos finitos, similar a lo que ocurre con Diffie-Hellman.

Con el paso del tiempo, DSA evolucionó y se introdujeron variantes más seguras, como DSA-2, que permite tamaños de clave más grandes y algoritmos hash más robustos.

3. Explicación técnica detallada

3.1 Fundamento matemático

DSA se basa en el mismo principio que Diffie-Hellman: la dificultad de resolver logaritmos discretos en un grupo multiplicativo modular. El proceso se divide en dos partes principales: generación de firma y verificación.

3.2 Parámetros del sistema

  • p: un número primo grande (tamaño de 1024, 2048 o 3072 bits)
  • q: un divisor primo de p - 1 (160, 224 o 256 bits)
  • g: generador del subgrupo de orden q en Z_p*, calculado como g = h^((p-1)/q) mod p, donde h es un valor entre 1 < h < p - 1
  • x: clave privada del usuario (un número aleatorio tal que 0 < x < q)
  • y: clave pública, calculada como y = g^x mod p

3.3 Proceso de firma digital

Para firmar un mensaje M:

Se calcula el hash del mensaje: H = hash(M)

Se selecciona un número aleatorio k, tal que 0 < k < q

Se calcula:

  • r = (g^k mod p) mod q
  • s = (k⁻¹ * (H + x * r)) mod q

La firma es el par (r, s)

3.4 Verificación de la firma

Dado el mensaje M, la firma (r, s) y la clave pública y, se verifica de la siguiente forma:

Verificar que 0 < r < q y 0 < s < q

Calcular el hash: H = hash(M)

Calcular:

  • w = s⁻¹ mod q
  • u1 = (H * w) mod q
  • u2 = (r * w) mod q

Calcular v = ((g^u1 * y^u2) mod p) mod q

La firma es válida si v == r

4. Casos de uso o aplicaciones reales

DSA ha sido implementado en varios estándares y aplicaciones, entre ellas:

  • Firmas digitales de software: para autenticar la procedencia de código firmado, especialmente en entornos gubernamentales.
  • GPG/PGP: DSA fue durante años una de las principales opciones de firma en herramientas de cifrado de correos.
  • SSH: algunas versiones de OpenSSH soportaron claves DSA (aunque hoy están desaconsejadas).
  • TLS y certificados digitales: aunque RSA es más común, DSA fue permitido como algoritmo de firma en certificados X.509.
  • Documentación legal o administrativa electrónica: en ciertos países fue adoptado en marcos normativos de firma electrónica.

En la actualidad, su uso ha sido en gran medida reemplazado por alternativas como ECDSA o RSA con claves mayores, aunque sigue vigente en sistemas heredados o donde se requiere cumplimiento con estándares específicos.

5. Riesgos, limitaciones o desafíos

A pesar de ser seguro en términos teóricos, DSA presenta limitaciones prácticas y desafíos de implementación:

  • Dependencia del valor k: Si el valor aleatorio k se reutiliza o es predecible, la clave privada x puede ser recuperada fácilmente. Este fue el caso del hackeo a Sony en 2010.
  • Tamaño de clave limitado: La versión original de DSA usaba p = 1024 bits, considerado inseguro hoy.
  • Velocidad: DSA es más lento que ECDSA y RSA en la verificación de firmas, especialmente con claves grandes.
  • Compatibilidad reducida: Muchas aplicaciones modernas ya no ofrecen soporte para claves DSA por razones de seguridad y eficiencia.
  • No apto para cifrado: A diferencia de RSA, DSA no puede utilizarse para cifrar ni intercambiar claves.

Por estos motivos, el uso de DSA está en desuso progresivo y se recomienda para sistemas actuales optar por ECDSA (basado en curvas elípticas) o firmas basadas en RSA de 2048 bits o más.

6. Código ilustrativo

A continuación, se presenta un ejemplo en Python utilizando cryptography para generar claves DSA, firmar y verificar un mensaje:

https://github.com/CodeBugBox/CodeBugBox/blob/main/DSA%20(Digital%20Signature%20Algorithm)

7. Conclusión

DSA fue una pieza clave en la evolución de la criptografía moderna, especialmente al introducir un algoritmo de firma respaldado por un estándar gubernamental. Su estructura basada en logaritmos discretos y la separación clara entre claves públicas y privadas lo convirtieron en una opción segura durante muchos años.

Sin embargo, las mejoras en capacidad de cómputo y los avances en criptografía han expuesto sus limitaciones. Hoy, DSA ocupa un lugar más académico o de compatibilidad que funcional en sistemas de producción modernos.

8. Reflexión final

El caso de DSA muestra cómo incluso algoritmos diseñados con solidez matemática pueden quedar obsoletos por errores de implementación, deficiencias en parámetros o avances tecnológicos. La criptografía no solo debe ser segura hoy, sino estar preparada para el mañana.

Para quienes trabajan con sistemas que aún utilizan DSA, es esencial conocer sus fundamentos para poder mantener, auditar o migrar esos entornos con criterio técnico. Y para quienes diseñan nuevos sistemas, entender DSA es comprender un paso clave en la evolución hacia firmas digitales más seguras, eficientes y resilientes.

Nestor Martin Guerra Garcia (Dr. Plaga)

Nestor Martin Guerra Garcia (Dr. Plaga)

Consultor de Ciberseguridad | Protección de Datos y Gestión de Riesgos | Pentester old school