{"id":267,"date":"2026-10-05T08:15:36","date_gmt":"2026-10-05T06:15:36","guid":{"rendered":"https:\/\/clases.jesussoto.es\/?p=267"},"modified":"2026-09-24T21:56:43","modified_gmt":"2026-09-24T19:56:43","slug":"alg-criptografia-con-matrices","status":"publish","type":"post","link":"https:\/\/clases.jesussoto.es\/?p=267","title":{"rendered":"ALG: Criptograf\u00eda con matrices"},"content":{"rendered":"<p>El cifrado matricial (conocido hist\u00f3ricamente como una variante del <strong>Cifrado de Hill<\/strong>) es una aplicaci\u00f3n directa del \u00e1lgebra lineal donde la <strong>clave secreta<\/strong> es una matriz invertible.<\/p>\n<h2>\u00bfC\u00f3mo funciona el Cifrado Matricial?<\/h2>\n<p>El proceso consta de cuatro pasos fundamentales:<\/p>\n<p>1. <strong>Sustituci\u00f3n num\u00e9rica<\/strong>: Convertimos cada letra del mensaje en un n\u00famero siguiendo un diccionario prefijado.<\/p>\n<p>2. <strong>Vectorizaci\u00f3n<\/strong>: Agrupamos la secuencia de n\u00fameros en vectores fila de tama\u00f1o $1 \\times n$. Si la longitud total del texto no es m\u00faltiplo de $n$, a\u00f1adimos letras de relleno (padding) al final.<\/p>\n<p>3. <strong>Cifrado<\/strong>: Elegimos una matriz cuadrada $A$ de dimensi\u00f3n $n \\times n$ que sea invertible ($\\det(A) \\neq 0$). Multiplicamos cada vector fila $X$ por la derecha por la matriz $A$:<\/p>\n<p>$$Y = X \\cdot A$$<\/p>\n<p>4. <strong>Descifrado<\/strong>: El receptor multiplica cada vector cifrado $Y$ por la derecha por la matriz inversa $A^{-1}$ para recuperar el mensaje original:<\/p>\n<p>$$Y \\cdot A^{-1} = (X \\cdot A) \\cdot A^{-1} = X \\cdot I = X$$<\/p>\n<h3> Ejemplo pr\u00e1ctico: \u00abLas matem\u00e1ticas en criptograf\u00eda\u00bb <\/h3>\n<h4> 1. Definici\u00f3n del Alfabeto<\/h4>\n<p>Utilizaremos el alfabeto castellano de 27 letras (A\u2013Z incluyendo la \u00d1), sin espacios, mapeado de 1 a 27:<\/p>\n<table class=\"tabla-alfabeto\">\n<thead>\n<tr>\n<th>Letra<\/th>\n<th>Valor<\/th>\n<th>Letra<\/th>\n<th>Valor<\/th>\n<th>Letra<\/th>\n<th>Valor<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>A<\/strong><\/td>\n<td>1<\/td>\n<td><strong>J<\/strong><\/td>\n<td>10<\/td>\n<td><strong>R<\/strong><\/td>\n<td>19<\/td>\n<\/tr>\n<tr>\n<td><strong>B<\/strong><\/td>\n<td>2<\/td>\n<td><strong>K<\/strong><\/td>\n<td>11<\/td>\n<td><strong>S<\/strong><\/td>\n<td>20<\/td>\n<\/tr>\n<tr>\n<td><strong>C<\/strong><\/td>\n<td>3<\/td>\n<td><strong>L<\/strong><\/td>\n<td>12<\/td>\n<td><strong>T<\/strong><\/td>\n<td>21<\/td>\n<\/tr>\n<tr>\n<td><strong>D<\/strong><\/td>\n<td>4<\/td>\n<td><strong>M<\/strong><\/td>\n<td>13<\/td>\n<td><strong>U<\/strong><\/td>\n<td>22<\/td>\n<\/tr>\n<tr>\n<td><strong>E<\/strong><\/td>\n<td>5<\/td>\n<td><strong>N<\/strong><\/td>\n<td>14<\/td>\n<td><strong>V<\/strong><\/td>\n<td>23<\/td>\n<\/tr>\n<tr>\n<td><strong>F<\/strong><\/td>\n<td>6<\/td>\n<td><strong>\u00d1<\/strong><\/td>\n<td>15<\/td>\n<td><strong>W<\/strong><\/td>\n<td>24<\/td>\n<\/tr>\n<tr>\n<td><strong>G<\/strong><\/td>\n<td>7<\/td>\n<td><strong>O<\/strong><\/td>\n<td>16<\/td>\n<td><strong>X<\/strong><\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<td><strong>H<\/strong><\/td>\n<td>8<\/td>\n<td><strong>P<\/strong><\/td>\n<td>17<\/td>\n<td><strong>Y<\/strong><\/td>\n<td>26<\/td>\n<\/tr>\n<tr>\n<td><strong>I<\/strong><\/td>\n<td>9<\/td>\n<td><strong>Q<\/strong><\/td>\n<td>18<\/td>\n<td><strong>Z<\/strong><\/td>\n<td>27<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4> 2. Preparaci\u00f3n y Vectorizaci\u00f3n del Texto <\/h4>\n<p>* <strong>Frase limpia<\/strong>: \u00abLASMATEMATICASENCRIPTOGRAFIA\u00bb<br \/>\n* <strong>Longitud<\/strong>: 28 letras.<br \/>\n* <strong>Agrupaci\u00f3n ($3 \\times 3$)<\/strong>: Para usar una matriz de $3 \\times 3$, necesitamos que la longitud sea m\u00faltiplo de 3. A\u00f1adimos dos letras \u00abX\u00bb (valor 25) al final para completar 30 caracteres.<br \/>\n* <strong>Texto final con relleno<\/strong>: \u00abLASMATEMATICASENCRIPTOGRAFIAXX\u00bb<\/p>\n<p>Agrupamos el texto en 10 bloques de 3 caracteres (vectores de $1 \\times 3$):<\/p>\n<p>1. \u00abL A S\u00bb $\\rightarrow [12, 1, 20]$<br \/>\n2. \u00abM A T\u00bb $\\rightarrow [13, 1, 21]$<br \/>\n3. \u00abE M A\u00bb $\\rightarrow [5, 13, 1]$<br \/>\n4. \u00abT I C\u00bb $\\rightarrow [21, 9, 3]$<br \/>\n5. \u00abA S E\u00bb $\\rightarrow [1, 20, 5]$<br \/>\n6. \u00abN C R\u00bb $\\rightarrow [14, 3, 19]$<br \/>\n7. \u00abI P T\u00bb $\\rightarrow [9, 17, 21]$<br \/>\n8. \u00abO G R\u00bb $\\rightarrow [16, 7, 19]$<br \/>\n9. \u00abA F I\u00bb $\\rightarrow [1, 6, 9]$<br \/>\n10. \u00abA X X\u00bb $\\rightarrow [1, 25, 25]$<\/p>\n<h4> 3. Matriz Clave ($A$) y Multiplicaci\u00f3n<\/h4>\n<p>Elegimos la matriz invertible $A$ de $3 \\times 3$:<\/p>\n<p>$$A = \\begin{bmatrix} 1 &#038; -2 &#038; 2 \\\\ -1 &#038; 1 &#038; 3 \\\\ 1 &#038; -1 &#038; -4 \\end{bmatrix}$$<\/p>\n<p>Al realizar el producto matricial $Y_i = X_i \\cdot A$ para cada bloque:<\/p>\n<p>* $[12, 1, 20] \\cdot A = [31, -43, -53]$<br \/>\n* $[13, 1, 21] \\cdot A = [33, -46, -55]$<br \/>\n* $[5, 13, 1] \\cdot A = [-7, 2, 45]$<br \/>\n* $[21, 9, 3] \\cdot A = [15, -36, 57]$<br \/>\n* $[1, 20, 5] \\cdot A = [-14, 13, 42]$<br \/>\n* $[14, 3, 19] \\cdot A = [30, -44, -39]$<br \/>\n* $[9, 17, 21] \\cdot A = [13, -22, -15]$<br \/>\n* $[16, 7, 19] \\cdot A = [28, -44, -23]$<br \/>\n* $[1, 6, 9] \\cdot A = [4, -5, -16]$<br \/>\n* $[1, 25, 25] \\cdot A = [1, -2, -23]$<\/p>\n<p>Criptograma final enviado por el canal de comunicaci\u00f3n:<br \/>\n\u00ab31, -43, -53, 33, -46, -55, -7, 2, 45, 15, -36, 57, -14, 13, 42, 30, -44, -39, 13, -22, -15, 28, -44, -23, 4, -5, -16, 1, -2, -23\u00bb<\/p>\n<h2>Con maxima<\/h2>\n<p><!-- Text cell --><\/p>\n<div class=\"comment\">Nuestro prop\u00f3sito es cifrar el mensaje: &#34;La clave est\u00e1 en Rebeca&#34;<\/p>\n<p>Necesitamos una matriz regular, por ejemplo:<\/p><\/div>\n<p><!-- Code cell --><\/p>\n<table>\n<tr style=\"border: 0px;\">\n<td style=\"width: 70px;vertical-align: top;padding: 1mm;\"><span class=\"prompt\">(%i1)<\/span><\/td>\n<td style=\"vertical-align: top;padding: 1mm;\"><span class=\"input\"><span class=\"code_variable\">A<\/span><span class=\"code_operator\">:<\/span><span class=\"code_function\">matrix<\/span><span class=\"code_operator\">(<\/span><span class=\"code_operator\">[<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_operator\">\u2212<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">0<\/span><span class=\"code_operator\">]<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_operator\">[<\/span><span class=\"code_operator\">\u2212<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_operator\">\u2212<\/span><span class=\"code_number\">3<\/span><span class=\"code_operator\">]<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_operator\">[<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_operator\">\u2212<\/span><span class=\"code_number\">3<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_operator\">\u2212<\/span><span class=\"code_number\">1<\/span><span class=\"code_operator\">]<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">$<\/span><\/span><\/td>\n<\/tr>\n<\/table>\n<p><!-- Text cell --><\/p>\n<div class=\"comment\">Codificamos el mensaje considerando el alfabeto espa\u00f1ol y tomando todas las letras juntas sin espacios. Como nuestra matriz clave es de dimensi\u00f3n tres necesitaremos bloques de tres letras: LAC LAV EES TAE NRE BEC AXX<br \/>Concluimos con el caracter X para que sea un bloque de tres.<\/div>\n<p><!-- Code cell --><\/p>\n<table>\n<tr style=\"border: 0px;\">\n<td style=\"width: 70px;vertical-align: top;padding: 1mm;\"><span class=\"prompt\">(%i4)<\/span><\/td>\n<td style=\"vertical-align: top;padding: 1mm;\"><span class=\"input\"><span class=\"code_variable\">alfabeto<\/span><span class=\"code_operator\">:<\/span><span class=\"code_string\">&#34;ABCDEFGHIJKLMN\u00d1OPQRSTUVWXYZ&#34;<span><span class=\"code_endofline\">$<\/span><span class=\"code_endofline\"><br \/><\/span><span class=\"code_variable\">text<\/span><span class=\"code_operator\">:<\/span><span class=\"code_operator\">[<\/span><span class=\"code_string\">&#34;L&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;A&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;C&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;L&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;A&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;V&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;E&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;E&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;S&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;T&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;A&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;E&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;N&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_endofline\"><br \/><\/span> \u00a0\u00a0 <span class=\"code_string\">&#34;R&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;E&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;B&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;E&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;C&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;A&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;X&#34;<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_string\">&#34;X&#34;<span><span class=\"code_operator\">]<\/span><span class=\"code_endofline\">$<\/span><span class=\"code_endofline\"><br \/><\/span><span class=\"code_variable\">num<\/span><span class=\"code_operator\">:<\/span><span class=\"code_function\">makelist<\/span><span class=\"code_operator\">(<\/span><span class=\"code_function\">sposition<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">text<\/span><span class=\"code_operator\">[<\/span><span class=\"code_variable\">i<\/span><span class=\"code_operator\">]<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">alfabeto<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">i<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">21<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">;<\/span><\/span><\/td>\n<\/tr>\n<\/table>\n<p>\\[{ }[ 12{,}1{,}3{,}12{,}1{,}23{,}5{,}5{,}20{,}21{,}1{,}5{,}14{,}19{,}5{,}2{,}5{,}3{,}1{,}25{,}25] \\]<\/p>\n<p><!-- Text cell --><\/p>\n<div class=\"comment\">Ahora hacemos bloques de tres:<\/div>\n<p><!-- Code cell --><\/p>\n<table>\n<tr style=\"border: 0px;\">\n<td style=\"width: 70px;vertical-align: top;padding: 1mm;\"><span class=\"prompt\">(%i5)<\/span><\/td>\n<td style=\"vertical-align: top;padding: 1mm;\"><span class=\"input\"><span class=\"code_variable\">bloques<\/span><span class=\"code_operator\">:<\/span><span class=\"code_function\">makelist<\/span><span class=\"code_operator\">(<\/span><span class=\"code_function\">makelist<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">num<\/span><span class=\"code_operator\">[<\/span><span class=\"code_number\">3<\/span><span class=\"code_operator\">\u00b7<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">i<\/span><span class=\"code_operator\">\u2212<\/span><span class=\"code_number\">1<\/span><span class=\"code_operator\">)<\/span><span class=\"code_operator\">+<\/span><span class=\"code_variable\">j<\/span><span class=\"code_operator\">]<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">j<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">3<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">i<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">7<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">;<\/span><\/span><\/td>\n<\/tr>\n<\/table>\n<p>\\[{ }\\left[ \\left[ 12{,}1{,}3\\right] {,}\\left[ 12{,}1{,}23\\right] {,}\\left[ 5{,}5{,}20\\right] {,}\\left[ 21{,}1{,}5\\right] {,}\\left[ 14{,}19{,}5\\right] {,}\\left[ 2{,}5{,}3\\right] {,}\\left[ 1{,}25{,}25\\right] \\right] \\]<\/p>\n<p><!-- Text cell --><\/p>\n<div class=\"comment\">Ya estamos en condiciones de cifrar:<\/div>\n<p><!-- Code cell --><\/p>\n<table>\n<tr style=\"border: 0px;\">\n<td style=\"width: 70px;vertical-align: top;padding: 1mm;\"><span class=\"prompt\">(%i6)<\/span><\/td>\n<td style=\"vertical-align: top;padding: 1mm;\"><span class=\"input\"><span class=\"code_variable\">cifrado<\/span><span class=\"code_operator\">:<\/span><span class=\"code_function\">makelist<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">A<\/span><span class=\"code_endofline\">.<\/span><span class=\"code_function\">transpose<\/span><span class=\"code_operator\">(<\/span><span class=\"code_function\">matrix<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">bloques<\/span><span class=\"code_operator\">[<\/span><span class=\"code_variable\">i<\/span><span class=\"code_operator\">]<\/span><span class=\"code_operator\">)<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">i<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">7<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">;<\/span><\/span><\/td>\n<\/tr>\n<\/table>\n<p>\\[{ }\\left[ \\begin{bmatrix}11\\\\-20\\\\6\\end{bmatrix}{,}\\begin{bmatrix}11\\\\-80\\\\-14\\end{bmatrix}{,}\\begin{bmatrix}0\\\\-60\\\\-30\\end{bmatrix}{,}\\begin{bmatrix}20\\\\-35\\\\13\\end{bmatrix}{,}\\begin{bmatrix}-5\\\\-10\\\\-48\\end{bmatrix}{,}\\begin{bmatrix}-3\\\\-6\\\\-16\\end{bmatrix}{,}\\begin{bmatrix}-24\\\\-51\\\\-99\\end{bmatrix}\\right] \\]<\/p>\n<p><!-- Text cell --><\/p>\n<div class=\"comment\">Nuestro c\u00f3digo cifrado ser\u00e1:<\/div>\n<p><!-- Code cell --><\/p>\n<table>\n<tr style=\"border: 0px;\">\n<td style=\"width: 70px;vertical-align: top;padding: 1mm;\"><span class=\"prompt\">(%i7)<\/span><\/td>\n<td style=\"vertical-align: top;padding: 1mm;\"><span class=\"input\"><span class=\"code_variable\">cod_cif<\/span><span class=\"code_operator\">:<\/span><span class=\"code_function\">create_list<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">cifrado<\/span><span class=\"code_operator\">[<\/span><span class=\"code_variable\">i<\/span><span class=\"code_operator\">]<\/span><span class=\"code_operator\">[<\/span><span class=\"code_variable\">j<\/span><span class=\"code_operator\">]<\/span><span class=\"code_operator\">[<\/span><span class=\"code_number\">1<\/span><span class=\"code_operator\">]<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">i<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">7<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">j<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">3<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">;<\/span><\/span><\/td>\n<\/tr>\n<\/table>\n<p>\\[{ }[ 11{,}-20{,}6{,}11{,}-80{,}-14{,}0{,}-60{,}-30{,}20,\\]\\[\\left.-35{,}13{,}-5{,}-10{,}-48{,}-3{,}-6{,}-16{,}-24{,}-51{,}-99\\right] \\]<\/p>\n<p><!-- Text cell --><\/p>\n<div class=\"comment\">El proceso de descifrado es el resultado de multiplicarlo por la inversa de A:<\/div>\n<p><!-- Code cell --><\/p>\n<table>\n<tr style=\"border: 0px;\">\n<td style=\"width: 70px;vertical-align: top;padding: 1mm;\"><span class=\"prompt\">(%i11) <\/span><\/td>\n<td style=\"vertical-align: top;padding: 1mm;\"><span class=\"input\"><span class=\"code_variable\">iA<\/span><span class=\"code_operator\">:<\/span><span class=\"code_function\">invert<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">A<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">$<\/span><span class=\"code_endofline\"><br \/><\/span><span class=\"code_variable\">bloques<\/span><span class=\"code_operator\">:<\/span><span class=\"code_function\">makelist<\/span><span class=\"code_operator\">(<\/span><span class=\"code_function\">makelist<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">cod_cif<\/span><span class=\"code_operator\">[<\/span><span class=\"code_number\">3<\/span><span class=\"code_operator\">\u00b7<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">i<\/span><span class=\"code_operator\">\u2212<\/span><span class=\"code_number\">1<\/span><span class=\"code_operator\">)<\/span><span class=\"code_operator\">+<\/span><span class=\"code_variable\">j<\/span><span class=\"code_operator\">]<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">j<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">3<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">i<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">7<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">$<\/span><span class=\"code_endofline\"><br \/><\/span><span class=\"code_variable\">descifrado<\/span><span class=\"code_operator\">:<\/span><span class=\"code_function\">makelist<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">iA<\/span><span class=\"code_endofline\">.<\/span><span class=\"code_function\">transpose<\/span><span class=\"code_operator\">(<\/span><span class=\"code_function\">matrix<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">bloques<\/span><span class=\"code_operator\">[<\/span><span class=\"code_variable\">i<\/span><span class=\"code_operator\">]<\/span><span class=\"code_operator\">)<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">i<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">7<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">$<\/span><span class=\"code_endofline\"><br \/><\/span><span class=\"code_function\">create_list<\/span><span class=\"code_operator\">(<\/span><span class=\"code_variable\">descifrado<\/span><span class=\"code_operator\">[<\/span><span class=\"code_variable\">i<\/span><span class=\"code_operator\">]<\/span><span class=\"code_operator\">[<\/span><span class=\"code_variable\">j<\/span><span class=\"code_operator\">]<\/span><span class=\"code_operator\">[<\/span><span class=\"code_number\">1<\/span><span class=\"code_operator\">]<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">i<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">7<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_variable\">j<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">1<\/span><span class=\"code_endofline\">,<\/span><span class=\"code_number\">3<\/span><span class=\"code_operator\">)<\/span><span class=\"code_endofline\">;<\/span><\/span><\/td>\n<\/tr>\n<\/table>\n<p>\\[{ }\\left[ 12{,}1{,}3{,}12{,}1{,}23{,}5{,}5{,}20{,}21{,}1{,}5{,}14{,}19{,}5{,}2{,}5{,}3{,}1{,}25{,}25\\right] \\]<\/p>\n<p><!-- Text cell --><\/p>\n<div class=\"comment\">Como observamos, coincide con los n\u00famero iniciales de nuestra frase.<\/div>\n<h2>En b\u00fasqueda de la matriz de cifrado<\/h2>\n<p>Pensemos que tenemos un texto cifrado y sabemos cu\u00e1l es el texto, pero no sabemos la matriz con la que se ha cifrado, pero s\u00ed su orden. Nuestro prop\u00f3sito: encontrar la matriz de cifrado. <\/p>\n<p>Para plantear el proceso de hallazgo de la matriz clave $A$ mediante un sistema de ecuaciones lineales, convertimos el texto claro a su representaci\u00f3n num\u00e9rica usando el alfabeto espa\u00f1ol de 27 letras (donde A=1, B=2, &#8230;, \u00d1=15, &#8230;, Z=27), ignorando espacios y tildes.<\/p>\n<p>Qu\u00e9 sabemos:<\/p>\n<ul>\n<li><strong>Texto original<\/strong>: \u00abLa clave est\u00e1 en Rebeca\u00bb<\/li>\n<li><strong>Cifrado<\/strong>:[23,-35,-6,3,-21,20,5,-10,19,-39,-3,2,9,-23,8,-13,7,-12,-23,22]<\/li>\n<li>\\(A\\in\\mathcal{M}_2(\\mathbb{R})\\)<\/li>\n<\/ul>\n<h3> 1. Conversi\u00f3n de texto a vectores<\/h3>\n<p>El texto \u00abLa clave est\u00e1 en Rebeca\u00bb se procesa agrupando las letras en pares (columnas de 2 elementos) para coincidir con la matriz $A_{2 \\times 2}$:<\/p>\n<p>* <strong>Par 1:<\/strong> L (12), a (1)<br \/>\n* <strong>Par 2:<\/strong> c (3), l (12)<br \/>\n* <strong>Par 3:<\/strong> a (1), v (23)<br \/>\n* <strong>Par 4:<\/strong> e (5), e (5)<br \/>\n* &#8230;y as\u00ed sucesivamente.<\/p>\n<p>El texto cifrado proporcionado se organiza en columnas correspondientes:<\/p>\n<p>$$C = \\begin{bmatrix} 23 &#038; -6 &#038; -21 &#038; 5 &#038; \\dots \\\\ -35 &#038; 3 &#038; 20 &#038; -10 &#038; \\dots \\end{bmatrix}$$<\/p>\n<h3> 2. Planteamiento matricial $A \\cdot t_i = C_i$<\/h3>\n<p>Definimos la matriz inc\u00f3gnita $A$ y la matriz de texto claro $P$:<\/p>\n<p>$$\\begin{bmatrix} a_{11} &#038; a_{12} \\\\ a_{21} &#038; a_{22} \\end{bmatrix} \\begin{bmatrix} 12 \\\\ 1  \\end{bmatrix} = \\begin{bmatrix} 23  \\\\  3 \\end{bmatrix}$$<\/p>\n<p>$$\\begin{bmatrix} a_{11} &#038; a_{12} \\\\ a_{21} &#038; a_{22} \\end{bmatrix} \\begin{bmatrix} 3 \\\\ 12 \\end{bmatrix} = \\begin{bmatrix}  -6 \\\\  3 \\end{bmatrix}$$<\/p>\n<p>Al multiplicar la matriz $A$ por las dos primeras columnas de texto claro, se generan las ecuaciones necesarias para determinar las 4 inc\u00f3gnitas.<\/p>\n<h3> 3. Sistema de ecuaciones lineales<\/h3>\n<p>El sistema completo de 4 ecuaciones se descompone en dos sistemas independientes de $2 \\times 2$:<\/p>\n<h4> Sistema para la primera fila de $A$ ($a_{11}$ y $a_{12}$):<\/h3>\n<p>$$\\begin{cases} 12 a_{11} + 1 a_{12} = 23 \\\\ 3 a_{11} + 12 a_{12} = -6 \\end{cases}$$<\/p>\n<h4> Sistema para la segunda fila de $A$ ($a_{21}$ y $a_{22}$):<\/h3>\n<p>$$\\begin{cases} 12 a_{21} + 1 a_{22} = -35 \\\\ 3 a_{21} + 12 a_{22} = 3 \\end{cases}$$<\/p>\n<h3> 4. Resoluci\u00f3n de los sistemas<\/h3>\n<p><strong>Resolviendo el primer sistema:<\/strong><\/p>\n<p>1. De la primera ecuaci\u00f3n: $a_{12} = 23 &#8211; 12 a_{11}$<br \/>\n2. Sustituyendo en la segunda ecuaci\u00f3n:<\/p>\n<p>$$3 a_{11} + 12(23 &#8211; 12 a_{11}) = -6$$<\/p>\n<p>$$3 a_{11} + 276 &#8211; 144 a_{11} = -6$$<\/p>\n<p>$$-141 a_{11} = -282 \\implies a_{11} = 2$$<\/p>\n<p>3. Sustituyendo el valor de $a_{11}$:<\/p>\n<p>$$a_{12} = 23 &#8211; 12(2) = -1$$<\/p>\n<p><strong>Resolviendo el segundo sistema:<\/strong><\/p>\n<p>1. De la primera ecuaci\u00f3n: $a_{22} = -35 &#8211; 12 a_{21}$<br \/>\n2. Sustituyendo en la segunda ecuaci\u00f3n:<\/p>\n<p>$$3 a_{21} + 12(-35 &#8211; 12 a_{21}) = 3$$<\/p>\n<p>$$3 a_{21} &#8211; 420 &#8211; 144 a_{21} = 3$$<\/p>\n<p>$$-141 a_{21} = 423 \\implies a_{21} = -3$$<\/p>\n<p>3. Sustituyendo el valor de $a_{21}$:<\/p>\n<p>$$a_{22} = -35 &#8211; 12(-3) = 1$$<\/p>\n<h3> Matriz Clave $A$<\/h3>\n<p>La matriz de cifrado que satisface el sistema es:<\/p>\n<p>$$A = \\begin{bmatrix} 2 &#038; -1 \\\\ -3 &#038; 1 \\end{bmatrix}$$<\/p>\n<p>Veamos si hemos acertado:<br \/>\n$$\\begin{bmatrix} 2 &#038; -1 \\\\ -3 &#038; 1 \\end{bmatrix}\\begin{bmatrix} 1 \\\\ 23  \\end{bmatrix} = \\begin{bmatrix}  -21 \\\\ 20  \\end{bmatrix}$$<br \/>\n$$\\begin{bmatrix} 2 &#038; -1 \\\\ -3 &#038; 1 \\end{bmatrix}\\begin{bmatrix} 5 \\\\ 5  \\end{bmatrix} = \\begin{bmatrix} 5  \\\\ -10  \\end{bmatrix}$$<br \/>\n$$\\begin{bmatrix} 2 &#038; -1 \\\\ -3 &#038; 1 \\end{bmatrix}\\begin{bmatrix} 20 \\\\ 21  \\end{bmatrix} = \\begin{bmatrix} 19  \\\\ -39  \\end{bmatrix}$$<br \/>\nY as\u00ed sucesivamente. Hemos probado que la matriz hallada es la buscada.<\/p>\n<h2>Aumentando la dificultad<\/h2>\n<p>Supongamos que no conocemos el orden de la matriz con la que hemos cifrado el texto.<br \/>\nQu\u00e9 sabemos:<\/p>\n<ul>\n<li><strong>Texto original<\/strong>: \u00abSol, sol y luna. Sol, sol y tierra quemada\u00bb<\/li>\n<li><strong>Cifrado<\/strong>:[4, -40, -40, 4, -40, -40, 14, -80, -32, 13, -73, -9, 4, -64, -40, 4, -82, -46, 12, -27, -11, 0, -3, -39, -4, -11, -53, 12, -24, 6]<\/li>\n<li>\\(A\\in\\mathcal{M}_n(\\mathbb{R})\\) (No sabemos el valor de \\(n\\))<\/li>\n<\/ul>\n<p>Utilizaremos el alfabeto est\u00e1ndar de 27 letras ($A=1, B=2, \\dots, \u00d1=15, \\dots, Z=27$). Limpiando espacios y signos de puntuaci\u00f3n, las 30 letras del texto limpio se traducen num\u00e9ricamente as\u00ed: Secuencia: [20, 16, 12, 20, 16, 12, 26, 12, 22, 14, 1, 20, 16, 12, 20, 16, 12, 26, 21, 9, 5, 19, 19, 1, 18, 22, 5, 13, 1, 4].<\/p>\n<h3>Hip\u00f3tesis: Supongamos que la matriz es de $2 \\times 2$<\/h3>\n<p>Imaginemos que un analista asume que la matriz clave $A$ es de dimensi\u00f3n $2 \\times 2$. En ese caso, dividimos el texto en bloques de 2 letras (vectores fila de $1 \\times 2$):<\/p>\n<p>1. Primer bloque <strong>\u00abS O\u00bb<\/strong>: $[20, 16]$ $\\rightarrow$ Cifrado interceptado: $[4, -40]$<br \/>\n2. Segundo bloque <strong>\u00abL S\u00bb<\/strong>: $[12, 20]$ $\\rightarrow$ Cifrado interceptado: $[-40, 4]$<\/p>\n<p>Planteamos la multiplicaci\u00f3n matricial para encontrar la matriz inc\u00f3gnita $A = \\begin{bmatrix} a_{11} &#038; a_{12} \\\\ a_{21} &#038; a_{22} \\end{bmatrix}$:<\/p>\n<p>$$\\begin{bmatrix} a_{11} &#038; a_{12} \\\\ a_{21} &#038; a_{22} \\end{bmatrix}\\begin{bmatrix} 20 \\\\ 12  \\end{bmatrix} = \\begin{bmatrix}  4 \\\\ 40  \\end{bmatrix}$$<br \/>\n$$\\begin{bmatrix} a_{11} &#038; a_{12} \\\\ a_{21} &#038; a_{22} \\end{bmatrix}\\begin{bmatrix} 16 \\\\ 20  \\end{bmatrix} = \\begin{bmatrix}  -40 \\\\ 1  \\end{bmatrix}$$<\/p>\n<p>Al resolver este sistema de 4 ecuaciones lineales con 4 inc\u00f3gnitas, <strong>obtenemos una soluci\u00f3n matem\u00e1tica \u00fanica<\/strong>:<\/p>\n<p>$$A_{cand} = \\begin{bmatrix} \\frac{45}{13} &#038; -\\frac{54}{13} \\\\ -\\frac{53}{13} &#038; \\frac{35}{13} \\end{bmatrix} $$<\/p>\n<p>Matem\u00e1ticamente, esta matriz satisface de forma perfecta los dos primeros bloques. \u00bfSignifica eso que hemos descubierto la clave secreta?<\/p>\n<h3> La prueba de fuego: Validaci\u00f3n global<\/h3>\n<p>Para comprobar si $A_{cand}$ es v\u00e1lida, intentamos cifrar el <strong>tercer bloque<\/strong> del texto, <strong>\u00abO L\u00bb<\/strong> $= [16, 12]$:<\/p>\n<p>$$ \\begin{bmatrix} \\frac{45}{13} &#038; -\\frac{54}{13} \\\\ -\\frac{53}{13} &#038; \\frac{35}{13} \\end{bmatrix} \\begin{bmatrix} 16 \\\\ 12  \\end{bmatrix} = \\begin{bmatrix}  \\frac{84}{13}\\\\ -\\frac{444}{13}  \\end{bmatrix} \\approx \\begin{bmatrix} 6.46 \\\\ -34.15  \\end{bmatrix}$$<\/p>\n<p>Sin embargo, los n\u00fameros 5 y 6 que realmente aparecen en el texto cifrado interceptado son $[-40, -40]$.<\/p>\n<p>El resultado obtenido no coincide en absoluto con el cifrado real (adem\u00e1s de no ser siquiera valores enteros). La matriz $A_{cand}$ <strong>falla estrepitosamente al intentar codificar el resto del mensaje<\/strong>.<\/p>\n<p>Este es un error conceptual muy com\u00fan al intentar <strong>romper<\/strong> o descifrar un mensaje mediante un ataque de <em>texto claro conocido<\/em>.<\/p>\n<p>A menudo, los alumnos asumen que, si logran plantear y resolver un sistema de ecuaciones para encontrar una matriz clave candidata, esa matriz es autom\u00e1ticamente la correcta.<\/p>\n<p>En resumen, forzar la resoluci\u00f3n de un sistema tomando solo los primeros datos nos dar\u00e1 una soluci\u00f3n matem\u00e1tica para esos datos en concreto, pero <strong>no garantiza la validez global si la hip\u00f3tesis de partida es falsa<\/strong>. En criptograf\u00eda y en aprendizaje autom\u00e1tico (<em>machine learning<\/em>), verificar la consistencia con todo el conjunto de datos es indispensable para validar cualquier modelo.<\/p>\n<h2>Independencia lineal en la pr\u00e1ctica<\/h2>\n<p>Para resolver el problema anterior, vemos que una matriz de $2 \\times 2$ no serv\u00eda. El siguiente paso natural es probar si el mensaje fue cifrado mediante una matriz de $3 \\times 3$.<\/p>\n<p>Como una matriz de $3 \\times 3$ tiene <strong>9 inc\u00f3gnitas<\/strong> ($a_{11}, a_{12}, \\dots, a_{33}$), la teor\u00eda nos dice que necesitaremos al menos <strong>9 ecuaciones escalares<\/strong> para encontrarla. Dado que cada bloque de 3 letras nos genera 3 ecuaciones, parece que bastar\u00eda con tomar los 3 primeros bloques del texto.<\/p>\n<p>Sin embargo, aqu\u00ed es donde muchos estudiantes tropiezan con un concepto clave del \u00e1lgebra lineal: <strong>no basta con tener 9 ecuaciones, tienen que ser linealmente independientes<\/strong>.<\/p>\n<h3>1. El problema de las 9 primeras ecuaciones<\/h3>\n<p>Escribamos el texto claro agrupado en bloques de 3 letras ($1 \\times 3$) y sus correspondientes valores num\u00e9ricos:<\/p>\n<p>1. Bloque 1 <strong>\u00abS O L\u00bb<\/strong>: $[20, 16, 12]$ $\\rightarrow$ Cifrado: $[4, -40, -40]$<br \/>\n2. Bloque 2 <strong>\u00abS O L\u00bb<\/strong>: $[20, 16, 12]$ $\\rightarrow$ Cifrado: $[4, -40, -40]$<br \/>\n3. Bloque 3 <strong>\u00abY L U\u00bb<\/strong>: $[26, 12, 22]$ $\\rightarrow$ Cifrado: $[14, -80, -32]$<\/p>\n<p>Si intentamos plantear el sistema matricial $X \\cdot A = Y$ tomando los 3 primeros bloques de texto claro para formar la matriz $X$:<\/p>\n<p>$$X = \\begin{bmatrix} 20 &#038; 16 &#038; 12 \\\\ 20 &#038; 16 &#038; 12 \\\\ 26 &#038; 12 &#038; 22 \\end{bmatrix}$$<br \/>\nObservar que, en este ejemplo, estamos tomando el sistema traspuesto; es decir, $X \\cdot A = Y$ en vez de $A \\cdot X = Y$, donde pondr\u00edamos los vectores en columna en la matriz.<\/p>\n<p>Al calcular el determinante de esta matriz de coeficientes: $$\\det(X) = 0$$<br \/>\nEl considerar el sistema traspuesto no afecta a este resultado, ya que \\(\\det(X)=\\det(X^t)\\)<\/p>\n<p><strong>\u00bfPor qu\u00e9 el determinante es 0?<\/strong><br \/>\nPorque la primera y la segunda fila son <strong>id\u00e9nticas<\/strong> (corresponden a la palabra \u00abSOL\u00bb repetida).<\/p>\n<h4>Conclusi\u00f3n matem\u00e1tica<\/h4>\n<p>El sistema de 9 ecuaciones resultante es <strong>compatible indeterminado.<\/strong> No nos falta informaci\u00f3n por cantidad de datos, sino por <strong>calidad<\/strong> (rango). La segunda fila no aporta ninguna informaci\u00f3n nueva sobre la matriz $A$; tenemos en realidad un sistema de rango 2 con infinitas soluciones.<\/p>\n<h3>2. C\u00f3mo descubrir la matriz de $3 \\times 3$ real<\/h3>\n<p>Para poder calcular una matriz clave \u00fanica $A$, necesitamos que las filas de la matriz de texto claro $X$ formen una <strong>base<\/strong> en $\\mathbb{R}^3$ (es decir, que sean 3 vectores linealmente independientes).<\/p>\n<p>Simplemente descartamos el bloque repetido y elegimos el siguiente bloque disponible en el texto que no sea combinaci\u00f3n lineal de los anteriores, por ejemplo, el cuarto bloque <strong>\u00abN A S\u00bb<\/strong> $= [14, 1, 20]$.<\/p>\n<p>Construimos la nueva matriz de texto claro $X_{indep}$ y su correspondiente matriz cifrada $Y_{indep}$:<\/p>\n<p>$$X_{indep} = \\begin{bmatrix} 20 &#038; 16 &#038; 12 \\\\ 26 &#038; 12 &#038; 22 \\\\ 14 &#038; 1 &#038; 20 \\end{bmatrix}, \\quad Y_{indep} = \\begin{bmatrix} 4 &#038; -40 &#038; -40 \\\\ 14 &#038; -80 &#038; -32 \\\\ 13 &#038; -73 &#038; -9 \\end{bmatrix}$$<\/p>\n<p>Comprobamos el determinante de $X_{indep}$:<\/p>\n<p>$$\\det(X_{indep}) = -736 \\neq 0$$<\/p>\n<p>Como el determinante es distinto de cero, el rango es 3 y la matriz $X_{indep}$ es <strong>invertible<\/strong> (o regular).<\/p>\n<h3> 3. C\u00e1lculo de la clave secreta $A$<\/h3>\n<p>Multiplicando por la izquierda por la inversa de $X_{indep}$:<\/p>\n<p>$$A = X_{indep}^{-1} \\cdot Y_{indep}$$<\/p>\n<p>Al realizar el c\u00e1lculo (o resolver el sistema), obtenemos de forma \u00fanica la matriz clave:<\/p>\n<p>$$A = \\begin{bmatrix} 1 &#038; -1 &#038; 1 \\\\ -1 &#038; 1 &#038; -3 \\\\ 0 &#038; -3 &#038; -1 \\end{bmatrix}$$<\/p>\n<p>Solo nos quedar\u00eda verificar que con esta matriz podemos cifrar el resto del mensaje y obtener los mismos resultados.<\/p>\n<h2>Lecci\u00f3n a recordad<\/h2>\n<p>1. <strong>La dependencia lineal destruye la unicidad<\/strong>: Un sistema con el n\u00famero \u00abcorrecto\u00bb de ecuaciones puede ser no resoluble de forma \u00fanica si los datos de entrada son redundantes.<br \/>\n2. <strong>Cuidado con los patrones en el texto claro<\/strong>: Las palabras repetidas en el mensaje original (\u00abSOL\u00bb, \u00abSOL\u00bb) producen ecuaciones linealmente dependientes en el criptoan\u00e1lisis.<br \/>\n3. <strong>Validaci\u00f3n<\/strong>: La independencia lineal nos permite <em>hallar<\/em> la matriz, pero probar la matriz en bloques no usados es lo que nos confirma que el modelo de dimensi\u00f3n $3 \\times 3$ era el correcto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El cifrado matricial (conocido hist\u00f3ricamente como una variante del Cifrado de Hill) es una aplicaci\u00f3n directa del \u00e1lgebra lineal donde la clave secreta es una matriz invertible. \u00bfC\u00f3mo funciona el Cifrado Matricial?&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[20],"class_list":["post-267","post","type-post","status-publish","format-standard","hentry","category-algebra","tag-practicas-algebra"],"_links":{"self":[{"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=\/wp\/v2\/posts\/267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=267"}],"version-history":[{"count":15,"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=\/wp\/v2\/posts\/267\/revisions"}],"predecessor-version":[{"id":269,"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=\/wp\/v2\/posts\/267\/revisions\/269"}],"wp:attachment":[{"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/clases.jesussoto.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}