2. DSA
DSA o Algoritmo de Firma digital es un estándar del Gobierno Federal de los Estados
Unidos de América o FIPS para firmas digitales. Fue un Algoritmo propuesto por el Instituto
Nacional de Normas y Tecnología de los Estados Unidos para su uso en su Estándar de
Firma Digital (DSS), especificado en el FIPS 186. DSA se hizo público el 30 de agosto de
1991, este algoritmo sirve para firmar y no para cifrar información. Una desventaja de este
algoritmo es que requiere mucho más tiempo de cómputo que RSA.
3. Características
Requisitos de la firma digital:
a) Debe ser fácil de generar.
b) Será irrevocable, no rechazable por su propietario.
c) Será única, sólo posible de generar por su propietario.
d) Será fácil de autenticar o reconocer por su propietario y los usuarios receptores.
e) Debe depender del mensaje y del autor
4. Firma Digital
Supongamos que A quiere enviar un mensaje a B. Este mensaje puede ir cifrado o no, pero
A está interesado en "firmar" el mensaje de forma que B pueda estar seguro que el
mensaje que le llega ha sido originado por A y no por ninguna otra entidad. Los pasos que
A seguirá son:
1. Crea un resumen (digest) del mensaje que quiere enviar, utilizando una función hash
2. Representa este resumen como un entero M entre 0 y n-1
3. Usa su propia clave privada (dA,nA) para computar la firma S= (M)dA mod nA
4. Envía esa firma S al receptor B conjuntamente con el mensaje original (que puede ir
cifrado o no, según se quiera). Evidentemente, la firma S no podrá ser manipulada
por nadie una vez generada, porque si se cambia un sólo bit de la firma fallaría la
verificación de ésta en destino.
5. Verificación de Firma Digital
Cuando B recibe la firma S y el mensaje de A, sigue estos pasos:
● Utiliza la clave pública del remitente A para computar V = (S)eA mod nA
● Del entero V obtiene el resumen r del mensaje tal y como fue computado por A
● Paralelamente, computa un resumen r' del mensaje que le ha llegado utilizando la
función hash correspondiente
● Si ambos resúmenes r y r' coinciden, entonces queda verificada la firma. Entonces
puede asegurarse que el mensaje solo ha podido ser originado por A y además el
mensaje ha llegado íntegramente (sin ver alterado su contenido durante la
transmisión por el canal inseguro) hasta B.
6.
7.
8. Criptosistema de Merkle-Hellman
Merkle-Hellman (MH) fue uno de los primeros criptosistemas de
llave pública y fue inventado por Ralph Merkle y Martin Hellman en
1978.
Es un criptosistema asimétrico, esto significa que para la
comunicación, se necesitan dos llaves:
- Una llave pública (Sólo para cifrar)
- Una privada (Sólo para descifrar)
Sirve sólo para cifrado. De este modo, no se puede usar para tareas
de autentificación por firma electrónica.
9. Basado en el problema de la suma del subconjunto (un caso especial del problema de la
mochila). Tenemos lo siguiente: dado un conjunto de números "a" y un número "b",
encuentre un subconjunto de "a", que dada su suma salga "b". Por ejemplo:
a = [ 1 ,3, 6, 2, 5] b = 8
Sa = [ 3 , 5 ]
Usaremos esto en la operación de descifrado.
NOTA: Merkle-Hellman no se utiliza actualmente puesto que fue rota a principios de los
años 80 por Adi Shamir.
10. Ataque por fuerza bruta
Un sistema de Merkle-Hellman que utilice una mochila de n = 100 elementos no es
sensible a un ataque por fuerza bruta (un ordenador capaz de 10⁶ operaciones por
segundo tardaría 1046 años en probar todas las mochilas super crecientes)
Debilidades
Adi Shamir y Richard Zippel encontraron debilidades cuando:
- Se conoce el módulo (q) o puede deducirse.
- Los dos primeros elementos de la clave pública corresponden con los dos
primeros elementos de la clave privada y son primos con el módulo “q”.
- Con estos datos, podemos generar la clave privada a partir de la pública ya
que encontraremos el inverso multiplicativo modular s’ = inv(q,r).
11. Generación de las claves
Las claves están compuestas por secuencias.
Restricciones de la clave:
- Clave pública es una secuencia "difícil".
- Clave privada es una secuencia "fácil" (de “n” valores super crecientes),
acompañados de un multiplicador(r) y un módulo(q), los cuales se usan para
convertir la secuencia super creciente en una secuencia difícil.
- Se recomienda que “n” sea mayor o igual que 100.
- r y q son coprimos, es decir, mcd ( r, q) = 1.
- El módulo (q) debe ser mayor a la sumatoria de los valores de la clave privada.
- La clave privada genera la clave pública (su longitud también será “n”).
13. Cifrado
Para cifrar un mensaje, se lo divide en subsecuencias que tengan la longitud (n) de la clave
pública, luego se eligen los elementos de la secuencia difícil (clave privada) emparejando las
posiciones. Finalmente se suman los elementos elegidos, y nos sale el texto cifrado.
Secuencia difícil (Clave pública) : [81, 108, 88, 48, 96, 64]
Palabra=000010000000001110001101
Deberá dividir el mensaje en cadenas de 6 : 000010 000000 001110 001101
El primero: 81x0 + 108x0 + 88x0 + 48x0 + 96x1 + 64x0 = 96.
El segundo: 81x0 + 108x0 + 88x0 + 48x0 + 96x0 + 64x0 = 0.
El tercero: 81x0 + 108x0 + 88x1 + 48x1 + 96x1 + 64x0 = 232.
El cuarto: 81x0 + 108x0 + 88x1 + 48x1 + 96x0 + 64x1 = 200.
El mensaje codificado es: [ 96,0,232,200 ]
14. Descifrado
El descifrado es posible, porque el multiplicador y el módulo usados para transformar la
llave privada en la llave pública, también pueden ser usados para transformar el texto
cifrado (representado por un número) en la suma de los elementos que conforman la
subsecuencia super creciente.
Aplicando la fórmula para descifrar:
c’ : texto descifrado
c : texto cifrado
15. Si el mensaje codificado es: [ 96,0,232,200 ] , q = 155
Aplicando:
96x23 (módulo 155) = 2208 (módulo 155) = 38 = 000010.
Donde s es el inverso del módulo (inverso multiplicativo modular) de q y r.
De tal manera que se cumple:
r * s(mod q) = 1
16. EJEMPLO
Clave privada:
[3, 4, 9, 19, 38, 77]
con r = 27 y q = 155
Clave pública:
3 x 27 (mod 155) = 81
4 x 27 (mod 155) = 108
9 x 27 (mod 155) =88
19 x 27 (mod 155) =48
38 x 27 (mod 155) =96
77 x 27 (mod 155) =64
[81, 108, 88, 48, 96, 64]