diff --git a/documentos_entregables/contenidos/antecedentes/bloques/AES.tex b/documentos_entregables/contenidos/antecedentes/bloques/AES.tex index c7d1bc43b6..3c19c068fc 100644 --- a/documentos_entregables/contenidos/antecedentes/bloques/AES.tex +++ b/documentos_entregables/contenidos/antecedentes/bloques/AES.tex @@ -1,6 +1,6 @@ \subsection{Advanced Encryption Standard (AES)} -Dado que el tamaño de bloque y la longitud de la llave de DES +Dado que el tamaño de bloque y la longitud de la llave de DES se volvieron muy pequeños para resistir los embates del progreso de la tecnología, el NIST comenzó la búsqueda de un nuevo cifrado estándar en 1997; este cifrado debía tener un tamaño de bloque de, @@ -13,14 +13,15 @@ \subsection{Advanced Encryption Standard (AES)} tamaños mencionados anteriormente. Dependiendo del tamaño de la llave, se tiene el número de rondas: 10 para las de 128 bits, 12 para las de 192 y 14 para las de 256. -El cifrado requiere de una matriz de $4 \times 4$ denominada matriz de +El cifrado requiere de una matriz de $4 \times 4$ denominada matriz de estado. \begin{pseudocodigo}[caption={AES, cifrado.}, label={aes:1}] - entrada: 128 bits de texto en claro $M$; llave de $n$ bits $K$. - salida: bloque de texto cifrado de 64 bits $C = c_1 \dots c_{64}$. + entrada: 128 bits de texto en claro $M$; llave de $n$ bits $K$. + salida: bloque de texto cifrado de 64 bits $C = c_1 \dots c_{64}$. inicio - Obtener las subllaves de 128 bits necesarias: una para cada ronda y una extra. + Obtener las subllaves de 128 bits necesarias: una para + cada ronda y una extra. Iniciar matriz de estado con el bloque en claro. Realizar $AddRoundKey(matriz\_estado, k_0)$ Para $i$ desde 1 hasta $num\_rondas$: @@ -37,10 +38,10 @@ \subsection{Advanced Encryption Standard (AES)} fin \end{pseudocodigo} -Como todos los pasos realizados en las rondas son invertibles, el -proceso de descifrado consiste en aplicar las funciones inversas a -$SubBytes$, $ShiftRows$, $MixColumns$ y $AddRoundKey$ en el orden -opuesto. +Como todos los pasos realizados en las rondas son invertibles, el +proceso de descifrado consiste en aplicar las funciones inversas a +$SubBytes$, $ShiftRows$, $MixColumns$ y $AddRoundKey$ en el orden +opuesto. \subsubsection{SubBytes} Esta es la única transformación no lineal de Rijndael. Sustituye @@ -55,10 +56,10 @@ \subsubsection{ShiftRows} fila y dependen de la longitud del bloque ($N_b$). \subsubsection{MixColumns} -Esta transformación opera en cada columna de la matriz de estado -independientemente. Se considera una columna $a = (a_0, a_1, a_2, a_3)$ -como el polinomio $a(X) = a_3X^3 + a_2X^2 + a_1X + a_0$. -Entonces este paso transforma una columna $a$ al multiplicarla con el +Esta transformación opera en cada columna de la matriz de estado +independientemente. Se considera una columna $a = (a_0, a_1, a_2, a_3)$ +como el polinomio $a(X) = a_3X^3 + a_2X^2 + a_1X + a_0$. +Entonces este paso transforma una columna $a$ al multiplicarla con el siguiente polinomio fijo: \begin{equation} \label{cifrado_aes_poli} @@ -72,10 +73,10 @@ \subsubsection{MixColumns} \subsubsection{AddRoundKey} Esta es la única operación que depende de la llave secreta $k$. Añade una -llave de ronda para intervenir en el resultado de la matriz de estado. -Las llaves de ronda son derivadas de la llave secreta $k$ al aplicar el +llave de ronda para intervenir en el resultado de la matriz de estado. +Las llaves de ronda son derivadas de la llave secreta $k$ al aplicar el algoritmo de generación de llaves. Las llaves de ronda tienen la misma -longitud que los bloques. Esta operación es simplemente una operación +longitud que los bloques. Esta operación es simplemente una operación $XOR$ bit a bit de la matriz de estado con la llave de ronda en turno. Para obtener el nuevo valor de la matriz de estado se realiza lo siguiente: @@ -86,10 +87,10 @@ \subsubsection{AddRoundKey} Como se tiene una matriz\_estado, la llave de ronda ($k_i$) también es representada como una matriz de bytes con 4 columnas y $N_b$ columnas. -Cada una de las $N_b$ palabras de la llave de ronda corresponde a una -columna. Entonces se realiza la operación $XOR$ bit a bit sobre las -entradas correspondientes de la matriz de estado y la matriz de la llave +Cada una de las $N_b$ palabras de la llave de ronda corresponde a una +columna. Entonces se realiza la operación $XOR$ bit a bit sobre las +entradas correspondientes de la matriz de estado y la matriz de la llave de ronda. Esta operación, claro está, es invertible: basta con aplicar la misma -operación con la misma llave para revertir el efecto. \ No newline at end of file +operación con la misma llave para revertir el efecto. diff --git a/documentos_entregables/contenidos/antecedentes/bloques/DES.tex b/documentos_entregables/contenidos/antecedentes/bloques/DES.tex index e51948a616..2714036199 100644 --- a/documentos_entregables/contenidos/antecedentes/bloques/DES.tex +++ b/documentos_entregables/contenidos/antecedentes/bloques/DES.tex @@ -1,21 +1,21 @@ \subsection{Data Encryption Standard (DES)} -Este es, probablemente, el cifrado simétrico por bloques más conocido; -ya que en la década de los 70 estableció un precedente al ser el primer -algoritmo a nivel comercial que publicó abiertamente sus +Este es, probablemente, el cifrado simétrico por bloques más conocido; +ya que en la década de los 70 estableció un precedente al ser el primer +algoritmo a nivel comercial que publicó abiertamente sus especificaciones y detalles de implementación. Se encuentra definido en el estándar americano FIPS 46-2. DES es un cifrado Feistel que procesa bloques de $n=64$ bits y produce bloques cifrados de la misma longitud. Aunque la llave es de 64 bits, 8 son de paridad, por lo que el tamaño \textit{efectivo} de la llave es de -56 bits. Las $2^{56}$ llaves implementan, máximo, $2^{56}$ de las +56 bits. Las $2^{56}$ llaves implementan, máximo, $2^{56}$ de las $2^{64}!$ posibles biyecciones en bloques de 64 bits. -Con la llave $K$ se generan 16 subllaves $K_i$ de 48 bits; una para cada -ronda. En cada ronda se utilizan 8 \textit{cajas-s} (mapeos de +Con la llave $K$ se generan 16 subllaves $K_i$ de 48 bits; una para cada +ronda. En cada ronda se utilizan 8 \textit{cajas-s} (mapeos de sustitución de 6 a 4 bits). La entrada de 64 bits es dividida por la mitad -en $L_0$ y $R_0$. Cada ronda $i$ va tomando las entradas $L_{i-1}$ y +en $L_0$ y $R_0$. Cada ronda $i$ va tomando las entradas $L_{i-1}$ y $R_{i-1}$ de la ronda anterior y produce salidas de 32 bits $L_i$ y $R_i$ mientras $1 \leq i \leq 16$ de la siguiente manera: @@ -29,28 +29,32 @@ \subsection{Data Encryption Standard (DES)} R_i = L_{i-1} \oplus f(R_{i-1}, K_i); f(R_{i-1}, K_i) = P(S(E(R_{i-1})\oplus K_i)) \end{equation} -$E$ se encarga de expandir $R_{i-1}$ de 32 bits a 48, $P$ es una -permutación de 32 bits y $S$ son las cajas-s. +$E$ se encarga de expandir $R_{i-1}$ de 32 bits a 48, $P$ es una +permutación de 32 bits y $S$ son las cajas-s. \begin{pseudocodigo}[caption={DES, cifrado.}, label={des:1}] - entrada: 64 bits de texto en claro $M = m_1 \dots m_64$; llave de 64 bits $K = k_1 \dots k_{64}$. - salida: bloque de texto cifrado de 64 bits $C = c_1 \dots c_{64}$. + entrada: 64 bits de texto en claro $M = m_1 \dots m_64$; + llave de 64 bits $K = k_1 \dots k_{64}$. + salida: bloque de texto cifrado de 64 bits $C = c_1 \dots c_{64}$. inicio Calcular 16 subllaves $K_i$ de 48 bits partiendo de $K$. $(L_0, R_0) \leftarrow IP(m_1m_2\dots m_{64}$ - Para $i$ desde 1 hasta 16: Calcular $L_i$ y $R_i$ mediante las ecuaciones mostradas anteriormente. + Para $i$ desde 1 hasta 16: Calcular $L_i$ y $R_i$ mediante las ecuaciones + mostradas anteriormente. Obtener $f(R_{i-1}, K_i)$ así: - a) Expandir $R_{i-1} = r_1r_2\dots r_{32}$ de 32 a 48 bits usando $E$: $T \leftarrow E(R_{i-1})$. - b) $T^\prime \leftarrow T \oplus K_i$. Donde $T^\prime$ es representado como ocho cadenas de 6 bits cada una $(B_1, \dots, B_8)$. - c) $T'' \leftarrow (S_1(B_1), S_2(B_2), \dots S_8(B_8))$ - d) $T''' \leftarrow P(T'')$ + a) Expandir $R_{i-1} = r_1r_2\dots r_{32}$ de 32 a 48 bits + usando $E$: $T \leftarrow E(R_{i-1})$. + b) $T^\prime \leftarrow T \oplus K_i$. Donde $T^\prime$ es representado + como ocho cadenas de 6 bits cada una $(B_1, \dots, B_8)$. + c) $T'' \leftarrow (S_1(B_1), S_2(B_2), \dots S_8(B_8))$ + d) $T''' \leftarrow P(T'')$ fin $b_1b_2 \dots b_{64} \leftarrow (R_{16}, L{16})$. $C \leftarrow IP^{-1}(b_1b_2 \dots b_{64})$ fin \end{pseudocodigo} -El descifrado DES consiste en el mismo algoritmo de cifrado, con la +El descifrado DES consiste en el mismo algoritmo de cifrado, con la misma llave $K$, pero utilizando las subllaves en orden inverso: $K_{16}, K{15}, \dots, K_1$. @@ -58,16 +62,16 @@ \subsubsection{Llaves débiles} Tomando en cuenta las siguientes definiciones \begin{itemize} - \item Llave débil: una llave $K$ tal que $E_K(E_K(x)) = x$ para toda + \item Llave débil: una llave $K$ tal que $E_K(E_K(x)) = x$ para toda $x$. \item Llaves semidébiles: se tiene un par de llaves $K_1, K_2$ tal que $E_{K_1}(E_{K_2}(x)) = x$ \end{itemize} DES tiene cuatro llaves débiles y seis pares de llaves semidébiles. -Las cuatro llaves débiles generan subllaves $K_i$ iguales y, debido a -que DES es un cifrado Feistel, el cifrado es autorreversible. O sea que +Las cuatro llaves débiles generan subllaves $K_i$ iguales y, debido a +que DES es un cifrado Feistel, el cifrado es autorreversible. O sea que al final se obtiene de nuevo el texto en claro, pues cifrar dos veces con la misma llave regresa la entrada original. -Respecto a los pares semidébiles, el cifrado con una de las llaves del -par es equivalente al descifrado con la otra (o viceversa). +Respecto a los pares semidébiles, el cifrado con una de las llaves del +par es equivalente al descifrado con la otra (o viceversa). diff --git a/documentos_entregables/contenidos/antecedentes/bloques/FEAL.tex b/documentos_entregables/contenidos/antecedentes/bloques/FEAL.tex index ce1c7fd9ae..7faff63053 100644 --- a/documentos_entregables/contenidos/antecedentes/bloques/FEAL.tex +++ b/documentos_entregables/contenidos/antecedentes/bloques/FEAL.tex @@ -1,26 +1,27 @@ \subsection{Fast Data Encipherment Algorithm (FEAL)} Es una familia de algoritmos que ha tenido una participación crítica -en el desarrollo y refinamiento de varias técnicas del criptoanálisis, +en el desarrollo y refinamiento de varias técnicas del criptoanálisis, tales como el criptoanálisis lineal y diferencial. FEAL-N mapea bloques de texto en claro de 64 bits a bloques de 64 bits de texto -cifrado mediante una llave secreta de 64 bits. Es un cifrado Feistel de +cifrado mediante una llave secreta de 64 bits. Es un cifrado Feistel de $n-$rondas parecido a DES, pero con una función $f$ más simple. -FEAL fue diseñado para ser veloz y simple, especialmente para +FEAL fue diseñado para ser veloz y simple, especialmente para microprocesadores de 8 bits: usa operaciones orientadas a bytes, evita el uso de permutaciones de bit y tablas de consulta. La versión inicial -de cuatro rondas (FEAL-4), propuesto como una alternativa rápida a DES, +de cuatro rondas (FEAL-4), propuesto como una alternativa rápida a DES, fue encontrado mucho más inseguro de lo planeado; por lo que se propuso realizar más rondas (FEAL-16 y FEAL-32) para compensar y ofrecer un nivel de seguridad parecido a DES; sin embargo, el rendimiento se ve fuertemente -afectado mientras el número de rondas aumenta; y, mientras DES puede -mejorar su velocidad con tablas de consulta, resulta más complicado +afectado mientras el número de rondas aumenta; y, mientras DES puede +mejorar su velocidad con tablas de consulta, resulta más complicado para FEAL. \begin{pseudocodigo}[caption={FEAL-8, cifrado.}, label={feal8:1}] - entrada: 64 bits de texto en claro $M = m_1 \dots m_64$; llave de 64 bits $K = k_1 \dots k_64$. - salida: bloque de texto cifrado de 64 bits $C = c_1 \dots c_64$. + entrada: 64 bits de texto en claro $M = m_1 \dots m_64$; + llave de 64 bits $K = k_1 \dots k_64$. + salida: bloque de texto cifrado de 64 bits $C = c_1 \dots c_64$. inicio Calcular 16 subllaves de 16 bits para $K$. Definir $M_L = m_1 \dots m_32; M_R = m_33 \dots m_64$. @@ -36,12 +37,14 @@ \subsection{Fast Data Encipherment Algorithm (FEAL)} fin \end{pseudocodigo} +% ¿Qué demonios? Las tuplas de llaves se salen del margen. + Para descifrar se utiliza el mismo algoritmo, con la misma llave $K$ y el -texto cifrado $C = (R_8, L_8)$ se utiliza como la entrada $M$; sin -embargo, la generación de llaves se hace al revés: las subllaves -$((K_12, K_13), (K_14, K_15))$ se utilizan para la $\oplus$ inicial, las -$((K_8, K_9), (K_10, K_11))$ para la $\oplus$ final y en las rondas se +texto cifrado $C = (R_8, L_8)$ se utiliza como la entrada $M$; sin +embargo, la generación de llaves se hace al revés: las subllaves +$((K_12, K_13), (K_14, K_15))$ se utilizan para la $\oplus$ inicial, las +$((K_8, K_9), (K_10, K_11))$ para la $\oplus$ final y en las rondas se utiliza de la subllave $K_7$ a la $K_0$. -FEAL con una llave de 64 bits puede ser generalizado a $N-$ rondas con -$N$ par, aunque se recomienda $N = 2^x$. \ No newline at end of file +FEAL con una llave de 64 bits puede ser generalizado a $N-$ rondas con +$N$ par, aunque se recomienda $N = 2^x$. diff --git a/documentos_entregables/contenidos/antecedentes/bloques/IDEA.tex b/documentos_entregables/contenidos/antecedentes/bloques/IDEA.tex index 0e70f12071..db6eea967f 100644 --- a/documentos_entregables/contenidos/antecedentes/bloques/IDEA.tex +++ b/documentos_entregables/contenidos/antecedentes/bloques/IDEA.tex @@ -2,25 +2,27 @@ \subsection{International Data Encryption Algorithm (IDEA)} Cifra bloques de 64 bits utilizando una llave de 128 bits. Este cifrado está basado en una generalización de la estructura Feistel y consiste en -8 rondas idénticas seguidas por una transformación. Cada ronda $r$ -utiliza 6 subllaves $K^{(r)}_i$ ($1 \leq i \leq 6$) de 16 bits que se -encargan de transformar una entrada $X$ de 64 bits en una salida de -cuatro bloques de 16-bits, que son utilizados como entrada en la -siguiente ronda. La salida de la ronda 8 tiene como entrada la -transformación de salida que, al emplear cuatro llaves adicionales -$K^{(9)}_i$ ($1 \leq i \leq 4$), produce los datos cifrados +8 rondas idénticas seguidas por una transformación. Cada ronda $r$ +utiliza 6 subllaves $K^{(r)}_i$ ($1 \leq i \leq 6$) de 16 bits que se +encargan de transformar una entrada $X$ de 64 bits en una salida de +cuatro bloques de 16-bits, que son utilizados como entrada en la +siguiente ronda. La salida de la ronda 8 tiene como entrada la +transformación de salida que, al emplear cuatro llaves adicionales +$K^{(9)}_i$ ($1 \leq i \leq 4$), produce los datos cifrados $Y = (Y_1, Y_2, Y_3, Y_4)$. -% Lo siento, pero si corto la línea de la entrada, la entrada queda a +% Lo siento, pero si corto la línea de la entrada, la entrada queda a % la mitad y se ve muy raro. \begin{pseudocodigo}[caption={IDEA, cifrado.}, label={idea:1}] - entrada: $64-$bits de datos en claro $M = m_1 \dots m_64$; llave de $128-$bits $ K = k_1 \dots k_{128}$. - salida: bloque cifrado de $64-$bits $Y = (Y_1, Y_2, Y_3, Y_4)$. + entrada: $64-$bits de datos en claro $M = m_1 \dots m_64$; + llave de $128-$bits $ K = k_1 \dots k_{128}$. + salida: bloque cifrado de $64-$bits $Y = (Y_1, Y_2, Y_3, Y_4)$. inicio Calcular las subllaves $K^{(r)}_1, \dots, K^{(r)}_{6}$ para las rondas $1 \leq r \leq 8$ y $K^{(9)}_1, \dots, K^{(9)}_{4}$ para la transformación de salida. - $(X_1, X_2, X_3, X_4) \leftarrow (m_1 \dots m_{16}, m_{17} \dots m_{32}, m_{33} \dots m_{48}, m_{49} \dots m_{64})$ donde $X_i$ almacena 16 bits. + $(X_1, X_2, X_3, X_4) \leftarrow (m_1 \dots m_{16}, m_{17} \dots m_{32}, m_{33} \dots m_{48}, m_{49} \dots m_{64})$ + donde $X_i$ almacena 16 bits. Para la ronda $r$ desde 1 hasta 8: a) $X_1 \leftarrow X_1 \times K_1^{(r)} mod 2^{16} + 1$ $X_4 \leftarrow X_4 \times K_4^{(r)} mod 2^{16} + 1$ @@ -43,13 +45,13 @@ \subsection{International Data Encryption Algorithm (IDEA)} fin \end{pseudocodigo} -El descifrado se realiza con el mismo algoritmo de cifrado, pero +El descifrado se realiza con el mismo algoritmo de cifrado, pero utilizando como entrada los datos cifrados $Y$ como entrada $M$. Se usa la misma llave $K$; aunque las subllaves sufren una modificación al ser -generadas, pues se utiliza una tabla y se realizan las operaciones +generadas, pues se utiliza una tabla y se realizan las operaciones contrarias (inverso de la adición y el inverso del producto). -Descartando los ataques a las llaves débiles, no hay un mejor ataque +Descartando los ataques a las llaves débiles, no hay un mejor ataque publicado para el IDEA de 8 rondas que el de la búsqueda exhaustiva -en el espacio de llave. Por lo que la seguridad está ligada a la -creciente debilidad de su tamaño de bloque relativamente pequeño. \ No newline at end of file +en el espacio de llave. Por lo que la seguridad está ligada a la +creciente debilidad de su tamaño de bloque relativamente pequeño. diff --git a/documentos_entregables/documento_final.pdf b/documentos_entregables/documento_final.pdf index 99642a6f91..02e56d82ac 100644 Binary files a/documentos_entregables/documento_final.pdf and b/documentos_entregables/documento_final.pdf differ