DSA

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 12 de septiembre de 2016; las comprobaciones requieren 76 ediciones .
DSA, algoritmo de firma digital
Creador NIST
Creado 1991
publicado 1998
Tamaño de clave cerrado: 160-256 bits, abierto: 1024-3072 bits
Tamaño de la firma dos números de 160-256 bits

DSA ( algoritmo de firma digital - algoritmo de firma digital ): un algoritmo criptográfico que  utiliza una clave privada (de un par de claves: <pública; privada>) para crear una firma electrónica , pero no para el cifrado (a diferencia de RSA y el esquema ElGamal ). La firma se crea en secreto (clave privada) pero se puede verificar públicamente (clave pública). Esto significa que solo un sujeto puede crear una firma de mensaje, pero cualquiera puede verificar que sea correcta. El algoritmo se basa en la complejidad computacional de tomar logaritmos en campos finitos .

El algoritmo fue propuesto por el Instituto Nacional de Estándares y Tecnología ( EE . UU .) en agosto de 1991 y está patentado [1] (autor de la patente: David W. Kravitz), NIST puso esta patente a disposición para su uso sin regalías . DSA es parte del DSS ( Digital  Signature Standard), publicado por primera vez el 15 de diciembre de 1998 (documento FIPS-186 [2] ( Federal Information Processing Standards ) . El estándar ha sido actualizado varias veces [3] [4] , la última versión es FIPS-186-4 [5] . (Julio 2013).  

Descripción del algoritmo

DSA incluye dos algoritmos (S, V): para crear una firma de mensaje (S) y para verificarla (V).

Ambos algoritmos calculan primero el hash del mensaje utilizando una función hash criptográfica . El algoritmo S usa el hash y la clave secreta para crear la firma, el algoritmo V usa el hash del mensaje, la firma y la clave pública para verificar la firma.

Vale la pena enfatizar que no es el mensaje (de longitud arbitraria) lo que realmente está firmado, sino su hash (160 - 256 bits), por lo que las colisiones son inevitables y una firma, en general, es válida para varios mensajes con el mismo hash. . Por lo tanto, la elección de una función hash suficientemente "buena" es muy importante para todo el sistema en su conjunto. La primera versión del estándar usó la función hash SHA-1 [6] [2] (  Secure Hash Algorithm - algoritmo hash seguro) , en la última versión también puede usar cualquier algoritmo de la familia SHA-2 [6] [5 ] . En agosto de 2015, se publicó FIPS-202 [7] , que describe la nueva función hash SHA-3 . Pero hoy en día no está incluido en el estándar DSS [5] .

El sistema requiere una base de correspondencia entre los datos reales del autor (puede ser un individuo o una organización) y las claves públicas , así como todos los parámetros necesarios del esquema de firma digital (función hash, números primos ). Por ejemplo, una autoridad de certificación puede servir como base .

Opciones del esquema de firma digital

Para construir un sistema de firma digital, debe realizar los siguientes pasos:

  1. Elección de la función hash criptográfica H(x).
  2. Elegir un número primo q cuya dimensión N en bits sea la misma que la dimensión en bits de los valores hash H(x).
  3. Elegir un número primo p tal que (p-1) sea divisible por q . La longitud de bits p se denota por L .
  4. Elegir un número g ( ) tal que su orden multiplicativo módulo p sea igual a q . Para calcularlo, puedes usar la fórmula , donde h  es un número arbitrario tal que . En la mayoría de los casos, el valor h = 2 satisface este requisito. [5]

Como se mencionó anteriormente, el parámetro principal del esquema de firma digital es la función hash criptográfica utilizada para convertir el texto del mensaje en un número para el cual se calcula la firma. Una característica importante de esta función es la longitud en bits de la secuencia de salida, indicada como N a continuación . En la primera versión del estándar DSS , se recomienda la función SHA-1 [2] y, en consecuencia, la longitud de bits del número con signo es de 160 bits. Ahora SHA-1 ya no es lo suficientemente seguro [8] [9] . La norma especifica los siguientes posibles pares de valores para los números L y N :

  1. L=1024, N=160
  2. L=2048, N=224
  3. L=2048, N=256
  4. L=3072, N=256

Las funciones hash de la familia SHA-2 se recomiendan bajo este estándar . Las organizaciones del gobierno de los EE. UU. deben usar una de las tres primeras opciones, las CA deben usar un par que sea igual o mayor que el par que usan los suscriptores [5] . El diseñador del sistema puede elegir cualquier función hash válida. Por lo tanto, no se centrará más atención en el uso de una función hash particular.

La fuerza de un criptosistema basado en DSA no supera la fuerza de la función hash utilizada y la fuerza del par (L,N), cuya fuerza no es mayor que la fuerza de cada uno de los números por separado. También es importante considerar cuánto tiempo debe permanecer seguro el sistema. Actualmente, para los sistemas que deben ser persistentes hasta 2010 ( 2030 ), se recomienda una longitud de 2048 (3072) bits. [5] [10]

Claves públicas y privadas

  1. La clave secreta es un número.
  2. La clave pública se calcula mediante la fórmula

Los parámetros públicos son números (p, q, g, y) . Solo hay un parámetro privado: el número x . En este caso, los números (p, q, g) pueden ser comunes para un grupo de usuarios, y los números x e y son las claves pública y privada de un usuario en particular, respectivamente. Al firmar un mensaje, se utilizan números secretos x y k , y el número k debe elegirse aleatoriamente (en la práctica, pseudoaleatoriamente) al calcular la firma de cada mensaje siguiente.

Dado que (p, q, g) puede utilizarse para varios usuarios, en la práctica los usuarios suelen dividirse según algunos criterios en grupos con el mismo (p, q, g) . Por lo tanto, estos parámetros se denominan Parámetros de Dominio. [5]

Firma del mensaje

La firma del mensaje se realiza de acuerdo con el siguiente algoritmo [5] :

  1. Escoger un número al azar
  2. cálculo
  3. Elegir otro k si
  4. cálculo
  5. Elegir otro k si
  6. La firma es un par de largo total

Las operaciones computacionalmente complejas son módulo de exponenciación (cálculo ), para el cual existen algoritmos rápidos , cálculo hash , donde la complejidad depende del algoritmo hash elegido y del tamaño del mensaje de entrada, y encontrar el elemento inverso usando, por ejemplo, el euclidiano extendido algoritmo o pequeño teorema de Fermat en forma .

Verificación de firma

La verificación de la firma se realiza de acuerdo con el algoritmo [5] :

1 Cálculo 2 Cálculo 3 Cálculo 4 Cálculo 5 La firma es correcta si

Cuando está marcada, las operaciones computacionalmente complejas son dos exponenciaciones , un cálculo hash y la búsqueda del elemento inverso .

Corrección del esquema

Este esquema de firma digital es correcto en la medida en que una persona que desee verificar la autenticidad de la firma siempre recibirá un resultado positivo en caso de autenticidad. Vamos a mostrarlo:

Primero, si , entonces por el Pequeño Teorema de Fermat se sigue que . Dado que g > 1 y q es primo, entonces g debe tener el orden multiplicativo q módulo p .

Para firmar un mensaje, calcula

Por lo tanto

Como g es de orden q , obtenemos

Finalmente, la corrección del esquema DSA se sigue de

[5]

Ejemplo de trabajo

Demos un ejemplo de cómo funciona el algoritmo para números pequeños. Dejemos el valor hash de nuestro mensaje .

Generación de parámetros

  1. longitud de hash , para que pueda elegir
  2. elegir porque
  3. elegir

Creación de claves

  1. elegir como la clave secreta
  2. entonces la clave publica

Firma del mensaje

  1. elegir
  2. después
  3. , siga adelante
  4. , donde se tiene en cuenta que
  5. , siga adelante
  6. la firma es un par de numeros

Verificación de firma

  1. recibido, lo que significa que la firma es correcta.

Análogos

El algoritmo DSA se basa en la dificultad de calcular logaritmos discretos y es una modificación del esquema clásico de ElGamal [11] , en el que se agrega hash de mensajes y todos los logaritmos se calculan mediante , lo que hace posible que la firma sea más corta en comparación con los análogos. [12] . Con base en el esquema de ElGamal, también se construyeron otros algoritmos, por ejemplo, el ruso GOST 34.10-94 , que ahora se considera obsoleto. Fue reemplazado por el estándar GOST R 34.10-2012 [13] , que utiliza un grupo de puntos de una curva elíptica .

Tal modificación, i.e. la transición del grupo multiplicativo módulo un número primo al grupo de puntos de curva elíptica también existe para DSA - ECDSA [14] ( Algoritmo de firma digital de curva  elíptica - algoritmo de firma digital en curvas elípticas) . Se utiliza, por ejemplo, en la criptomoneda bitcoin para confirmar transacciones. Esta traducción le permite reducir el tamaño de las claves sin sacrificar la seguridad: en el sistema bitcoin, el tamaño de la clave privada es de 256 bits y la clave pública correspondiente es de 512 bits.

Otro algoritmo común de clave pública (utilizado tanto para el cifrado como para la firma digital), RSA (llamado así por los autores: RivestShamir , Adleman ), se basa en la dificultad de factorizar números grandes.

Fuerza criptográfica

Cualquier ataque al algoritmo se puede describir de la siguiente manera: un atacante recibe todos los parámetros de la firma pública y un determinado conjunto de pares (mensaje, firma) e intenta, utilizando este conjunto, crear una firma válida para un nuevo mensaje no representado en el conjunto. .

Estos ataques se pueden dividir condicionalmente en dos grupos: en primer lugar, un atacante puede intentar recuperar la clave secreta e inmediatamente tiene la oportunidad de firmar cualquier mensaje y, en segundo lugar, puede intentar crear una firma válida para un nuevo mensaje sin recuperar directamente la clave secreta.

Previsibilidad de un parámetro aleatorio

La distribución uniforme del parámetro aleatorio es muy importante para la seguridad del sistema. Si se conocen varios bits de parámetros consecutivos para una serie de firmas, la clave secreta se puede recuperar con una alta probabilidad. [quince]

Repetir el parámetro para dos mensajes conduce a una simple piratería del sistema. Esto puede suceder cuando se utiliza un generador de números pseudoaleatorios defectuoso . Esta vulnerabilidad en el sistema PlayStation 3 permitía firmar cualquier programa en nombre de Sony . En algunas implementaciones del sistema bitcoin para Android, un atacante podría acceder a la billetera. [16] [17] Ambos ejemplos utilizaron el sistema ECDSA [14] .

Si se usó el mismo parámetro para dos mensajes , entonces sus firmas tendrán la misma pero diferente , llamémoslos .

De la expresión para podemos expresar el total :

.

Y equiparar común para diferentes mensajes:

Desde aquí es fácil expresar la clave secreta :

Falsificación existencial

Algunos algoritmos de firma digital pueden ser atacados por una falsificación existente (falsificación existencial) . Se encuentra en el hecho de que para una firma (ya sea aleatoria o creada de acuerdo con alguna regla) es posible crear un mensaje correcto (que, sin embargo, generalmente no tiene sentido) utilizando solo parámetros públicos.

Para el esquema DSA, la firma , en cualquier caso , es válida para un mensaje con hash .

Esta es una de las razones para codificar el mensaje de entrada. Si la función hash se elige correctamente, el algoritmo DSA está protegido de este ataque, porque la inversión de la función hash criptográfica (es decir, para un hallazgo dado tal que ) es computacionalmente difícil. [Dieciocho]

Recuperación de clave

la condición de corrección de la firma se puede reescribir en una forma diferente:

esta ecuación es equivalente (porque el orden multiplicativo de g   módulo p  es igual  a q)

por lo que podemos suponer que para recuperar la clave, el atacante necesita resolver un sistema de ecuaciones de la forma

pero en este sistema es incógnita y nada más , lo que quiere decir que el número de incógnitas es una más que las ecuaciones, y para cualquiera existen las que satisfacen el sistema. Dado que q es un número primo grande, se requerirá un número exponencial de pares (mensaje, firma) para la recuperación. [una]

Falsificación de firma

Puedes intentar falsificar una firma sin conocer la clave secreta, es decir, intentar resolver la ecuación

con respecto a y . Para cada fijo , la ecuación es equivalente a calcular el logaritmo discreto. [una]

Sistema de Verificación de Implementación de Algoritmos

Los términos de la licencia le permiten implementar el algoritmo en software y hardware. NIST creó DSAVS [19] ( Ing.  The Digital Signature Algorithm Validation System - un sistema para verificar el algoritmo de firma digital ). DSAVS consta de varios módulos de prueba de cumplimiento que prueban cada componente del sistema independientemente de los demás. Componentes de implementación probados:

  1. Generación de parámetros de dominio
  2. Comprobación de la configuración del dominio
  3. Generación de un par de claves pública-privada
  4. crear una firma
  5. Verificación de firma

Para probar la implementación, el desarrollador debe enviar una solicitud para probar su implementación al laboratorio CMT ( Laboratorio de Pruebas de Módulos Criptográficos ) .  [5]

Generación de números primos

El algoritmo DSA requiere dos primos ( y ), por lo que se necesita un generador de primos o pseudo -primos .

El algoritmo de Shaw-Taylor [20] se utiliza para generar números primos .

Los pseudoprimos se generan usando una función hash y la prueba probabilística de Miller-Rabin se usa para probar la primalidad . Se le puede agregar una sola prueba de primalidad de Luke . [5]

El número requerido de iteraciones depende de la longitud de los números utilizados y del algoritmo de verificación [5] :

opciones solo prueba M-R Prueba M-R + prueba de Luke
p: 1024 bits

q: 160 bits

probabilidad de error

40 pag: 3

q:19

p: 2048 bits

q: 224 bits

probabilidad de error

56 pag: 3

q:24

p: 2048 bits

q: 256 bits

probabilidad de error

56 pag: 3

q:27

p: 3072 bits

q: 256 bits

probabilidad de error

64 pag: 2

q:27

Generación de números aleatorios

El algoritmo también requiere un generador de números aleatorios o pseudoaleatorios . Este generador es necesario para generar una clave privada de usuario x , así como para generar un parámetro aleatorio secreto .

El estándar ofrece varias formas de generar números pseudoaleatorios utilizando cifrados de bloques o funciones hash. [5] [21]

Notas

  1. 123 Patente de EE. UU. 5231668 A .
  2. 123 FIPS 186-1 ._ _
  3. FIPS 186-2 .
  4. FIPS 186-3 .
  5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 FIPS 186-4 .
  6. 12 FIPS 180-4 .
  7. FIP 202 .
  8. Encontrar colisiones en el SHA-1 completo .
  9. Colisión de inicio libre para SHA-1 completo .
  10. Publicación especial del NIST 800-57 .
  11. Elgamal, 1985 .
  12. CP Schnorr. Identificación y Firmas Eficientes para Tarjetas Inteligentes  //  Avances en Criptología - CRYPTO' 89 Proceedings / Gilles Brassard. — Nueva York, NY: Springer, 1990. — P. 239–252 . - ISBN 978-0-387-34805-6 . -doi : 10.1007/ 0-387-34805-0_22 . Archivado desde el original el 12 de abril de 2022.
  13. GOST R 34.11-2012
  14. 1 2 El algoritmo de firma digital de curva elíptica (ECDSA) .
  15. La inseguridad del algoritmo de firma digital con nonces parcialmente conocidos .
  16. ^ ECDSA: fallas de aplicación e implementación .
  17. Criptografía de curva elíptica en la práctica .
  18. Argumentos de seguridad para firmas digitales y firmas ciegas .
  19. El sistema de validación del algoritmo de firma digital .
  20. Generación de números primos fuertes .
  21. Generación de números aleatorios .

Literatura

Normas y patentes

Artículos