El cifrado afín es un tipo de cifrado de sustitución monoalfabético , en el que cada letra de un alfabeto se asigna a su equivalente numérico, se cifra mediante una función matemática simple y se convierte de nuevo en una letra. La fórmula utilizada significa que cada letra se cifra a otra letra y viceversa, lo que significa que el cifrado es esencialmente un cifrado de sustitución estándar con una regla que rige qué letra va a cuál. Como tal, tiene las debilidades de todos los cifrados de sustitución. Cada letra está cifrada con la función ( ax + b ) mod 26 , donde b es la magnitud del cambio.
Descripción
En el cifrado afín, las letras de un alfabeto de tamaño m se asignan primero a los números enteros en el rango 0… m - 1 . Luego usa aritmética modular para transformar el número entero al que corresponde cada letra de texto plano en otro número entero que corresponde a una letra de texto cifrado. La función de cifrado para una sola letra es
donde el módulo m es el tamaño del alfabeto y un y b son las claves de la cifra. El valor de un debe ser elegido de tal manera que una y m son primos entre sí . La función de descifrado es
donde a −1 es el inverso multiplicativo modular de un módulo m . Es decir, satisface la ecuación
El inverso multiplicativo de a solo existe si a y m son coprimos. Por lo tanto, sin la restricción de a , es posible que el descifrado no sea posible. Se puede mostrar de la siguiente manera que la función de descifrado es la inversa de la función de cifrado,
Debilidades
Dado que el cifrado afín sigue siendo un cifrado de sustitución monoalfabético, hereda las debilidades de esa clase de cifrados. El cifrado Caesar es un cifrado afín con a = 1 ya que la función de cifrado simplemente se reduce a un desplazamiento lineal. El cifrado Atbash usa a = −1 .
Teniendo en cuenta el caso específico de cifrar mensajes en inglés (es decir, m = 26 ), hay un total de 286 cifrados afines no triviales, sin contar los 26 cifrados César triviales. Este número proviene del hecho de que hay 12 números que son coprime con 26 que son menores que 26 (estos son los valores posibles de a ). Cada valor de a puede tener 26 cambios de suma diferentes (el valor b ); por lo tanto, hay 12 × 26 o 312 claves posibles. Esta falta de variedad hace que el sistema sea muy inseguro cuando se considera a la luz del principio de Kerckhoffs .
La principal debilidad del cifrado proviene del hecho de que si el criptoanalista puede descubrir (mediante análisis de frecuencia , fuerza bruta , adivinando o de otro modo) el texto llano de dos caracteres de texto cifrado, entonces la clave puede obtenerse resolviendo una ecuación simultánea . Ya que sabemos que una y m son primos esto puede ser usado para rápidamente descarte muchas claves "falsos" en un sistema automatizado.
El mismo tipo de transformación que se usa en los cifrados afines se usa en los generadores congruentes lineales , un tipo de generador de números pseudoaleatorios . Este generador no es un generador de números pseudoaleatorios criptográficamente seguro por la misma razón que el cifrado afín no es seguro.
Ejemplos de
En estos dos ejemplos, uno cifrado y otro descifrado, el alfabeto serán las letras de la A a la Z, y tendrá los valores correspondientes que se encuentran en la siguiente tabla.
A | B | C | D | mi | F | GRAMO | H | I | J | K | L | METRO | norte | O | PAG | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | dieciséis | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
Encriptando
En este ejemplo la encriptación, [1] el texto en claro a cifrar es "AFFINE CIPHER" usando la tabla mencionada anteriormente para los valores numéricos de cada letra, teniendo un ser 5, b a ser 8, y m ser 26 ya que hay 26 caracteres del alfabeto en uso. Sólo el valor de una tiene una restricción ya que tiene que ser primos entre sí con 26. Los valores posibles que un ser podría son 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, y 25. El valor de b puede ser arbitrario siempre que a no sea igual a 1, ya que este es el desplazamiento del cifrado. Por lo tanto, la función de cifrado para este ejemplo será y = E ( x ) = (5 x + 8) mod 26 . El primer paso para cifrar el mensaje es escribir los valores numéricos de cada letra.
Texto sin formato | A | F | F | I | norte | mi | C | I | PAG | H | mi | R |
---|---|---|---|---|---|---|---|---|---|---|---|---|
X | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Ahora, toma cada valor de x y resuelve la primera parte de la ecuación, (5 x + 8) . Después de encontrar el valor de (5 x + 8) para cada carácter, tome el resto al dividir el resultado de (5 x + 8) entre 26. La siguiente tabla muestra los primeros cuatro pasos del proceso de cifrado.
Texto sin formato | A | F | F | I | norte | mi | C | I | PAG | H | mi | R |
---|---|---|---|---|---|---|---|---|---|---|---|---|
X | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
(5 x + 8) | 8 | 33 | 33 | 48 | 73 | 28 | 18 | 48 | 83 | 43 | 28 | 93 |
(5 x + 8) mod 26 | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
El paso final para encriptar el mensaje es buscar cada valor numérico en la tabla para las letras correspondientes. En este ejemplo, el texto cifrado sería IHHWVCSWFRCP. La siguiente tabla muestra la tabla completa para cifrar un mensaje en el cifrado afín.
Texto sin formato | A | F | F | I | norte | mi | C | I | PAG | H | mi | R |
---|---|---|---|---|---|---|---|---|---|---|---|---|
X | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
(5 x + 8) | 8 | 33 | 33 | 48 | 73 | 28 | 18 | 48 | 83 | 43 | 28 | 93 |
(5 x + 8) mod 26 | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
texto cifrado | I | H | H | W | V | C | S | W | F | R | C | PAG |
Descifrando
En este ejemplo de descifrado, el texto cifrado que se descifrará es el texto cifrado del ejemplo de cifrado. La función de descifrado correspondiente es D ( y ) = 21 ( y - 8) mod 26 , donde a −1 se calcula que es 21 y b es 8. Para comenzar, escriba los equivalentes numéricos de cada letra en el texto cifrado, como se muestra. en la siguiente tabla.
texto cifrado | I | H | H | W | V | C | S | W | F | R | C | PAG |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
Ahora, el siguiente paso es calcular 21 ( y - 8) y luego tomar el resto cuando el resultado se divide por 26. La siguiente tabla muestra los resultados de ambos cálculos.
texto cifrado | I | H | H | W | V | C | S | W | F | R | C | PAG |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
21 ( y - 8) | 0 | −21 | −21 | 294 | 273 | −126 | 210 | 294 | −63 | 189 | −126 | 147 |
21 ( y - 8) mod 26 | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
El último paso para descifrar el texto cifrado es utilizar la tabla para convertir los valores numéricos en letras. El texto sin formato de este descifrado es AFFINECIPHER. A continuación se muestra la tabla con el paso final completado.
texto cifrado | I | H | H | W | V | C | S | W | F | R | C | PAG |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
21 ( y - 8) | 0 | −21 | −21 | 294 | 273 | −126 | 210 | 294 | −63 | 189 | −126 | 147 |
21 ( y - 8) mod 26 | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Texto sin formato | A | F | F | I | norte | mi | C | I | PAG | H | mi | R |
Alfabeto completo codificado
Para que el cifrado y el descifrado sean más rápidos, se puede cifrar todo el alfabeto para crear un mapa uno a uno entre las letras del texto sin cifrar y el texto cifrado. En este ejemplo, el mapa uno a uno sería el siguiente:
letra en texto claro | A | B | C | D | mi | F | GRAMO | H | I | J | K | L | METRO | norte | O | PAG | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
número en texto claro | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | dieciséis | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
(5 x + 8) mod 26 | 8 | 13 | 18 | 23 | 2 | 7 | 12 | 17 | 22 | 1 | 6 | 11 | dieciséis | 21 | 0 | 5 | 10 | 15 | 20 | 25 | 4 | 9 | 14 | 19 | 24 | 3 |
letra de texto cifrado | I | norte | S | X | C | H | METRO | R | W | B | GRAMO | L | Q | V | A | F | K | PAG | U | Z | mi | J | O | T | Y | D |
Ejemplos de programación
El siguiente código de Python se puede utilizar para cifrar texto con el cifrado afín:
# Imprime una tabla de transposición para un cifrado afín. # a debe ser coprime am = 26. def affine ( a : int , b : int ) -> None : for i in range ( 26 ): print ( chr ( i + ord ( 'A' )) + ":" + chr ((( a * i + b ) % 26 ) + ord ( 'A' )))# Un ejemplo de llamada afín ( 5 , 8 )
Ver también
Referencias
- ^ Kozdron, Michael. "A ne Ciphers" (PDF) . Consultado el 22 de abril de 2014 .