Saltar al contenido

Diario de clases

Clases de Jesús Soto

Menú
  • Fórmulas
Menú

Navegación de entradas

ALG: Espacios vectoriales ←
→ ALG: Subespacios vectoriales

ALG: Criptografía basada en matrices

Posted on 17 de octubre de 2025

En criptografía clásica, el Cifrado Hill es un cifrado de sustitución poligráfica basado en el álgebra lineal. Inventado por Lester S. Hill en 1929, fue el primer cifrado poligráfico que era práctico para operar sobre más de tres símbolos inmediatamente. El artículo siguiente supone un conocimiento elemental de matrices.

Método

Cada letra está representada por un número. A menudo el esquema más sencillo es A = 1, B = 2, …, Z = 26 (o Z=27 si incluimos Ñ), pero esto no es una característica esencial del cifrado. Para encriptar un mensaje, cada bloque de n letras (considerados como un vector) está multiplicado por una matriz invertible n×n (modular 26). Para desencriptar el mensaje, cada bloque es multiplicado por el inverso de la matriz usada para la encriptación.

La matriz usada para la encriptación es la llave de cifrado, y tiene que ser escogida aleatoriamente del conjunto de matrices invertibles n×n (modular 26). El cifrado puede, naturalmente, ser adaptado a un alfabeto representado con cualquier orden numérico y/o cambiando el número (modular 26) siempre y cuando la matriz n×n (modular x) sea invertible.

En nuestro caso, y para facilitar el trabajo, consideraremos una matriz invertible sin tener en cuenta el paso a módulo 26. Veámoslo con un ejemplo.

Proceso de cifrado

Nuestro propósito es cifrar el mensaje: "La clave está en Rebeca"

Necesitamos una matriz regular, por ejemplo:

(%i1) A:matrix([1,−1,0],[−1,1,−3],[1,−3,−1])$

Codificamos el mensaje considerando el alfabeto español y tomando todas las letras juntas sin espacios. Como nuestra matriz clave es de dimensión tres necesitaremos bloques de tres letras: LAC LAV EES TAE NRE BEC AXX
Concluimos con el caracter X para que sea un bloque de tres.

(%i4) alfabeto:"ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"$
text:["L","A","C","L","A","V","E","E","S","T","A","E","N",
   "R","E","B","E","C","A","X","X"]$
num:makelist(sposition(text[i],alfabeto),i,1,21);

\[{ }[ 12{,}1{,}3{,}12{,}1{,}23{,}5{,}5{,}20{,}21{,}1{,}5{,}14{,}19{,}5{,}2{,}5{,}3{,}1{,}25{,}25] \]

Ahora hacemos bloques de tres:

(%i5) bloques:makelist(makelist(num[3·(i−1)+j],j,1,3),i,1,7);

\[{ }\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] \]

Ya estamos en condiciones de cifrar:

(%i6) cifrado:makelist(A.transpose(matrix(bloques[i])),i,1,7);

\[{ }\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] \]

Nuestro código cifrado será:

(%i7) cod_cif:create_list(cifrado[i][j][1],i,1,7,j,1,3);

\[{ }[ 11{,}-20{,}6{,}11{,}-80{,}-14{,}0{,}-60{,}-30{,}20,\]\[\left.-35{,}13{,}-5{,}-10{,}-48{,}-3{,}-6{,}-16{,}-24{,}-51{,}-99\right] \]

El proceso de descifrado es el resultado de multiplicarlo por la inversa de A:

(%i11) iA:invert(A)$
bloques:makelist(makelist(cod_cif[3·(i−1)+j],j,1,3),i,1,7)$
descifrado:makelist(iA.transpose(matrix(bloques[i])),i,1,7)$
create_list(descifrado[i][j][1],i,1,7,j,1,3);

\[{ }\left[ 12{,}1{,}3{,}12{,}1{,}23{,}5{,}5{,}20{,}21{,}1{,}5{,}14{,}19{,}5{,}2{,}5{,}3{,}1{,}25{,}25\right] \]

Como observamos, coincide con los número iniciales de nuestra frase.

Subespacio generador

Hoy veremos cómo utilizamos maxima para tratar espacios vectoriales. Por ejemplo, podemos determinar la relación lineal de un conjunto de vectores haciendo transformaciones elementales.

Comencemos con un ejercicio que hicimos anteriormente:

Ejercicio: Determinar si \(\begin{bmatrix}-3&2&8\\ -1&9&3\end{bmatrix}\) pertenece al subesapcio \(S=\mathbf{Gen}\left\{\begin{bmatrix}-1&0&4\\ 1&1&5\end{bmatrix},\begin{bmatrix}0&1&-2\\ -2&3&-6\end{bmatrix}\right\}\).

Recordemos que es suficiente con considerar la matriz formada por las coordenadas de cada vector respecto de la base canónica del conjunto de las matrices 2×3.

(%i5) a:[−3,2,8,−1,9,3]$
b:[−1,0,4,1,1,5]$
c:[0,1,−2,−2,3,−6]$
M:matrix(a,b,c);
rank(M);

\[{ }\begin{bmatrix}-3 & 2 & 8 & -1 & 9 & 3\\-1 & 0 & 4 & 1 & 1 & 5\\0 & 1 & -2 & -2 & 3 & -6\end{bmatrix}\]

\[{ }2\]


Sabemos que un conjunto de vectores \(\textbf{v}_1,\textbf{v}_2,\ldots,\textbf{v}_n\) son linealmente independientes si \(\textbf{rank}([\textbf{v}_1,\textbf{v}_2,\ldots,\textbf{v}_n])=n\), luego \(\textbf{u}\in \textbf{Gen}\{\textbf{v}_1,\textbf{v}_2,\ldots,\textbf{v}_n\}\) si \(\textbf{rank}([\textbf{v}_1,\textbf{v}_2,\ldots,\textbf{v}_n,\textbf{u}])=n\).

De este modo, si consideramos \(A\in\mathcal{M}_{(n+1)\times m}\) la matriz cuyas filas son \([\textbf{v}_1,\textbf{v}_2,\ldots,\textbf{v}_n,\textbf{u}]\) y mediante transformaciones elementales obtenemos \[[I_{n+1}\, |\, A] \sim [P\, |\, E],\] donde \(E\) es una matriz con la última fila todo ceros, entonces, si \(P=[p_{ij}]\), \[p_{(n+1)1}\textbf{v}_1+p_{(n+1)2}\textbf{v}_2+\ldots+p_{(n+1)n}\textbf{v}_n=-\textbf{u}.\]

Este procedimiento es ampliable a un conjunto \(\textbf{u}_i\in \textbf{Gen}\{\textbf{v}_1,\textbf{v}_2,\ldots,\textbf{v}_n\}\), \(i\in I=\{1,\ldots,k\}\): si \[[I_{n+k}\, |\, A] \sim [P\, |\, E],\] donde \(E\) es una matriz con las filas \(i>n\) todas ceros, entonces, \[-\textbf{u}_i=\sum_{j=1}^{n}p_{(n+i)j}\textbf{v}_j.\]

Veámoslo con algunos de los ejercicio realizados.

Ejercicio: ¿Quienes serían \(a\) y \(b\),números reales, tales que \(7X^3-3X^2-X-4\) es combinación lineal de \(-3X^3+X^2-X+2\), y, \(-X^3-2X+1\)?

Consideremos los vectores coordenadas de nuestros polinomios:

(%i4) v:[2,−1,1,−3]$
u:[1,−2,0,−1]$
w:[−4,−1,−3,7]$
A:addcol(ident(3),matrix(u,v,w));

\[{ }\begin{bmatrix}1 & 0 & 0 & 1 & -2 & 0 & -1\\0 & 1 & 0 & 2 & -1 & 1 & -3\\0 & 0 & 1 & -4 & -1 & -3 & 7\end{bmatrix}\]

(%i6) A:rowop(A,2,1,2)$
A:rowop(A,3,1,−4);

\[{ }\begin{bmatrix}1 & 0 & 0 & 1 & -2 & 0 & -1\\-2 & 1 & 0 & 0 & 3 & 1 & -1\\4 & 0 & 1 & 0 & -9 & -3 & 3\end{bmatrix}\]

(%i7) A:rowop(A,3,2,−3);

\[{ }\begin{bmatrix}1 & 0 & 0 & 1 & -2 & 0 & -1\\-2 & 1 & 0 & 0 & 3 & 1 & -1\\-2 & 3 & 1 & 0 & 0 & 0 & 0\end{bmatrix}\]

(%i8) w−(−(A[3,1]·u+A[3,2]·v));

\[\left[ 0,0,0,0\right] \]


Ejercicio: Sea \(\textbf{u}=[7,11,20,-9]\in Gen\{[-1,-3,0,1],[3,5,8,-3],[0,-1,2,1]\}\), ¿cuál es la suma de las coordenadas de \(\textbf{u}\) respecto de los vectores del espacio generador al que pertenece?.


Ejercicio: Cuál es la dimensión del subespacio \(S\) generado por los vectores (1, −1, 0, 2, 1), (2, 1, −2, 0, 0), (0, −3, 2, 4, 2), (2, 4, 1, 0, 1), (3, 3, −4, −2, −1), (5, 7, −3, −2, 0)

  • 3
  • 4
  • 5

A). Solo necesitamos verificar que
\[\mathbf{rank}\begin{bmatrix}1& −1& 0& 2& 1\\ 2& 1& −2& 0& 0\\ 0& −3& 2& 4& 2\\ 2& 4& 1& 0& 1\\ 3& 3& −4& −2& −1\\ 5& 7& −3& −2& 0\end{bmatrix}=3\]

Navegación de entradas

MathBio: Funciones reales de una variable real
ALG: Subespacios vectoriales

Novela

La Loba, la lucha fraticida por un reino

La Loba, la lucha fratricida por un reino.

Urraca, señora de Zamora, acusada de instigar la muerte de su hermano, el rey Sancho de Castilla, deberá defenderse de la acusación, al tiempo que luchará por mantener la cohesión entre los hermanos y los reinos cristianos: una lobera de fieros lobeznos.

👉 En amazon

Entradas recientes

  • MAD: Presentación
  • ALG: Ejercicios de repaso
  • ALG: Diagonalización de una matriz
  • ALG: Autovectores y autovalores con maxima
  • ALG: Autovectores y autovalores
febrero 2026
L M X J V S D
 1
2345678
9101112131415
16171819202122
232425262728  
« Dic    

Categorías

  • Álgebra Lineal
  • general
  • Matemática Discreta
  • MathBio

Etiquetas

Prácticas MathBio Prácticas Álgebra

Meta

  • Acceder
  • Feed de entradas
  • Feed de comentarios
  • WordPress.org
©2026 Diario de clases | Diseño: Tema de WordPress Newspaperly