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.

  1. Cálculo de n (Módulo):

    $$n = p \cdot q$$

  2. Cálculo de $\phi(n)$ (Función Totiente de Euler):

    $$\phi(n) = (p - 1) \cdot (q - 1)$$

  3. 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.
  4. 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.

  5. Definición de la Clave Privada:

    $$\text{Clave privada} = (n, d)$$

  6. 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$).

  1. Cálculo de n (Módulo):

    $$n = p \cdot q$$

  2. Cálculo de $\phi(n)$ (Función Totiente de Euler):

    $$\phi(n) = (p - 1) \cdot (q - 1)$$

  3. 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.

  4. Definición de la Clave Privada:

    $$\text{Clave privada} = (n, d)$$

  5. 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)$.

  1. 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$$

  2. 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'}$$

  3. 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$).

  1. 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:

    1. División: $1048576 \div 19 \approx 55188.21053$
    2. Cálculo del residuo: $0.21053 \cdot 19 \approx 4$

    $$\mathbf{A = 4}$$

  2. 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:

    1. División: $64 \div 19 \approx 3.36842$
    2. Cálculo del residuo: $0.36842 \cdot 19 \approx 7$

    $$\mathbf{B = 7}$$

  3. 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$$
  4. 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

  1. Clave Pública de Bob ($\beta$):

    $$\beta = (\alpha^d) \pmod{p} \rightarrow \beta = (3^8) \pmod{23}$$

    $$\beta = 6561 \pmod{23} = 6$$

  2. 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$$

Entradas relacionadas: