Implementación Práctica de Criptografía RSA, DHKE y Elgamal: Ejercicios Resueltos
Enviado por Chuletator online y clasificado en Otras materias
Escrito el en
español con un tamaño de 6,76 KB
Algoritmos Criptográficos y Procedimientos de Seguridad
Firma Digital RSA: Procedimiento con Mensaje x=5
Objetivo: Firmar digitalmente un mensaje x=5 con parámetros p=5, q=17 y e=3.
Cálculo de n (Módulo):
$$n = p \cdot q$$
Cálculo de $\phi(n)$ (Función Totiente de Euler):
$$\phi(n) = (p - 1) \cdot (q - 1)$$
Verificación de e (Exponente Público):
Si e no es dado, se buscan valores que cumplan que $\text{MCD}(e, \phi(n))=1$.
- Ejemplo: Si $e=2$ y $\phi(n) = 2^6$. $\text{MCD} = 2$. NO VÁLIDO.
- Ejemplo: Si $e=3$ y $\phi(n) = 2^6$. $\text{MCD} = 1$ (no hay comunes). SÍ VÁLIDO.
Cálculo de d (Exponente Privado):
Se resuelve la congruencia: $$d \cdot e \equiv 1 \pmod{\phi(n)}$$
Esto es equivalente a: $$d \cdot e = 1 + \phi(n) \cdot k$$
Se asignan valores a k hasta que d sea un número entero.
Definición de la Clave Privada:
$$\text{Clave privada} = (n, d)$$
Generación de la Firma (Descifrado):
$$\text{Firma} = (x^d) \pmod{n}$$
Firma Digital RSA: Caso Específico con Claves d Dadas
Objetivo: Firmar digitalmente un mensaje x=12 con p=5, q=17. Se asumen claves privadas dadas para Alice ($d_{Alice}=13$) y Bob ($d_{Bob}=61$).
Cálculo de n (Módulo):
$$n = p \cdot q$$
Cálculo de $\phi(n)$ (Función Totiente de Euler):
$$\phi(n) = (p - 1) \cdot (q - 1)$$
Hallar e (Exponente Público) a partir de d:
Se resuelve la congruencia: $$d \cdot e \equiv 1 \pmod{\phi(n)}$$
Se asignan valores a k hasta que e sea un número entero.
Definición de la Clave Privada:
$$\text{Clave privada} = (n, d)$$
Generación de la Firma (Cifrado):
$$\text{Firma} = (x^e) \pmod{n}$$
Cálculo de Capacidad Máxima de Ocultación (Esteganografía LSB)
Contexto: Imagen RGBA de tamaño $100 \times 100$ (filas $\times$ columnas).
La capacidad máxima de bits ocultos se calcula mediante la siguiente fórmula:
$$\text{Máx bits ocultos} = \text{columnas} \cdot \text{filas} \cdot \text{canales} \cdot n$$
- En RGBA, el número de canales es 4.
- Si n (bits por canal) no se especifica, se asume $n=1$ (un bit por píxel por canal).
Ejecución de Código Python: Conversión de Base Binaria
Instrucción: Si $r = \text{'00001111'}$, determinar el resultado al ejecutar $\text{int}(r[:-2], 2)$.
Definición de la cadena r:
$$r = \text{0 0 0 0 1 1 1 1}$$
Índices negativos: $$-8 -7 -6 -5 -4 -3 -2 -1$$
Aplicación del slicing $r[:-2]$:
La operación $r[:-2]$ elimina los dos últimos caracteres (los correspondientes a los índices -2 y -1).
$$\text{Resultado del slicing} = \text{'000011'}$$
Conversión a entero en base 2:
$$\text{int}(\text{'000011'}, 2) = 0 \cdot 32 + 0 \cdot 16 + 0 \cdot 8 + 0 \cdot 4 + 1 \cdot 2 + 1 \cdot 1 = 3$$
Resultado: 3
Intercambio de Claves Diffie-Hellman (DHKE)
Parámetros: $p = 19$, $\alpha = 4$. Claves privadas: Alice ($a = 10$) y Bob ($b = 3$).
Cálculo de la Clave Pública de Alice (A):
$$A = (\alpha^a) \pmod{p} \rightarrow A = (4^{10}) \pmod{19}$$
$$A = 1048576 \pmod{19}$$
Procedimiento para el módulo:
- División: $1048576 \div 19 \approx 55188.21053$
- Cálculo del residuo: $0.21053 \cdot 19 \approx 4$
$$\mathbf{A = 4}$$
Cálculo de la Clave Pública de Bob (B):
$$B = (\alpha^b) \pmod{p} \rightarrow B = (4^3) \pmod{19}$$
$$B = 64 \pmod{19}$$
Procedimiento para el módulo:
- División: $64 \div 19 \approx 3.36842$
- Cálculo del residuo: $0.36842 \cdot 19 \approx 7$
$$\mathbf{B = 7}$$
Cálculo de la Clave Común $K_{AB}$ (Secreto Compartido):
- Alice: $$K_{AB} = (B^a) \pmod{p} \rightarrow K_{AB} = (7^{10}) \pmod{19} = 7$$
- Bob: $$K_{AB} = (A^b) \pmod{p} \rightarrow K_{AB} = (4^3) \pmod{19} = 7$$
Verificación: Si ambas partes obtienen el mismo resultado ($K_{AB}=7$), la clave común se ha establecido correctamente.
Cifrado y Descifrado Elgamal
Parámetros: Mensaje $x = 14$, primo $p = 23$, generador $\alpha = 3$. Clave privada de Bob $d = 8$. Clave efímera de Alice $i = 4$.
1. Generación de Claves Públicas y Efímeras
Clave Pública de Bob ($\beta$):
$$\beta = (\alpha^d) \pmod{p} \rightarrow \beta = (3^8) \pmod{23}$$
$$\beta = 6561 \pmod{23} = 6$$
Clave Efímera de Alice ($K_E$):
$$K_E = (\alpha^i) \pmod{p} \rightarrow K_E = (3^4) \pmod{23}$$
$$K_E = 81 \pmod{23} = 12$$
2. Cálculo de la Clave de Mensaje Común ($K_M$)
Ambas partes deben calcular la clave de mensaje $K_M$ para cifrar/descifrar.
- Bob: $$K_M = (K_E^d) \pmod{p} \rightarrow K_M = (12^8) \pmod{23} = 8$$
- Alice: $$K_M = (\beta^i) \pmod{p} \rightarrow K_M = (6^4) \pmod{23} = 8$$
Verificación: La clave común $K_M=8$ es correcta.
3. Cifrado del Mensaje (Encriptación)
Se busca el mensaje cifrado y:
$$y = x \cdot K_M \pmod{p}$$
$$y = 14 \cdot 8 \pmod{23} \rightarrow y = 112 \pmod{23} = 20$$
4. Descifrado del Mensaje
Se busca el mensaje original x a partir del mensaje cifrado y:
$$x = y \cdot (K_M^{-1}) \pmod{p}$$
$$x = 20 \cdot 8^{-1} \pmod{23}$$
Cálculo del Inverso Modular ($K_M^{-1}$):
Se busca $K_M^{-1}$ tal que $K_M \cdot K_M^{-1} \equiv 1 \pmod{23}$.
Buscamos un múltiplo de 8 que sea congruente con 1 módulo 23. Probamos múltiplos de 8:
- $8 \cdot 1 = 8$
- $8 \cdot 2 = 16$
- $8 \cdot 3 = 24$. Como $24 \equiv 1 \pmod{23}$, entonces $8^{-1} = 3$.
Sustitución y Resultado:
$$x = 20 \cdot 3 \pmod{23}$$
$$x = 60 \pmod{23} = 14$$