Está en la página 1de 12

AFIN III 1

Encriptación de AFIN III mediante C++


Pinto Castro Erika Alexandra
Universidad Militar Nueva Granada
AFIN III 2

Introducción.

La criptografía se encarga de cifrar o enmascarar una determinada información con el fin de que
dicha información sea confidencial y que solo pueda ser conocida por las personas a las que les pertenece
saber acerca de ella. Para obtener el mensaje original se emplea otra disciplina conocida como
criptoanálisis, encargada de decodificar el mensaje enviado para recuperar la información original. Esta
tecnica criptografica se ha venido aplicando desde hace muchos siglos atrás, una de las tecnicas mas
antiguas y basicas es el cifrado César, el cual consiste en realizar un desplazamiento simple del alfabeto y
compararlo con el orden comun del alfabeto para relacionar las letras. Otro de los importantes casos de
criptografia se presento en la segunda guerra mundial y fue la implementacion de una maquina llamada
Enigma, la cual realizaba un cifrado rotatorio haciendolo aparentemente seguro ante cualquier forma de
criptoanalisis. Uno de los ultimos procesos de criptografia es el algoritmo DES, el cual se realiza
mediante diferentes bloques anidados, con sus respectivas generacion de claves, para el cifrado de datos
informaticos (bits). Para el analisis a realizar se implementa el metodo AFIN, el cual consiste en aplicar
diferentes ecuaciones para relacionar las letras del alfabeto con numeros y visceversa. El objetivo de este
proceso es entender el proceso de cifrado y criptoanalisis de este tipo de metodo y aplicarlo a un lenguaje
de programacion con el que se pueda crear una interfaz de usuario.
AFIN III 3

Marco Teórico.

Para la realización del tema a presentar es necesario tener un conocimiento previo de los
siguientes conceptos:
El algoritmo o metodo de cifrado AFIN, es un metodo de sustitucion en donde a cada letra del
alfabeto se le asigna un valor numerico por medio de una ecuacion matematica, y de la misma manera se
asigna una nueva letra a cada valor numerico por medio de otra ecuacion. En si, el metodo se rige por
diferentes ecuaciones, en donde el cifrado cambia dependiendo de la clave que se le asigne. Este tipo de
ecuaciones son asignadas con matematica modular. Se encuentran diferentes versiones de AFIN, para el
proceso que se describe a continuacion se utiliza AFIN III.
AFIN III, indica el numero de letras que se agruparan, es decir, cada palabra se agrupa de a tres
letras hasta completar el total de la palabra. Llegado el caso de que falte alguna letra se añade una o dos
letras definidas dependiendo del tipo de alfabeto que se utilice, sin olvidar la asignacion nuemerica ya
establecida para cada letra del alfabeto: a=0, b=1, c=2, etc. Ademas se debe tener una clave previa de dos
numeros enteros, en donde el primer valor de la clave correspondera a un numero que sea primo relativo
del numero total de combinaciones del alfabeto a utilizar y el segundo numero es un valor cualquiera que
no sea mayor al numero total de combinaciones del alfabeto.
Al tener agrupada las letras se aplica (1) para determinar el numero correspondiente a ese grupo,
y asi se podra realizar (2) para la encriptacion. Por ultimo se debe conocer cuales son las nuevas letras
asignadas a la encriptacion, para ello se sigue (3a), (3b) y (3c), de esta manera la palabra quedara
totalmente encriptada.

x=( 1 letra∗z 2) + (2 letra∗z )+ 3letra (1)


Donde x, es la agrupacion de tres letras, z es el valor del alfabeto, y 1letra, 2letra, 3letra es el
valor numerico correspondiente a dicha letra.
e ( x )= [ ( a∗x ) +b ] mod n (2)
Donde a corresponde al primer numero de la clave, b es el segundo numero de la clave y n es el
numero total de combinaciones del alfabeto.
e( x )
letra 1=∫ ( ) (3a)
z2
2

letra 2=
[∫ (e ( x ) mod z )] (3b)
z
letra 3=( e ( x ) mod z 2) mod z (3c)
AFIN III 4

Donde letra1, letra2 y letra3 son las nuevas letras correspondientes a la encripcion e Int indica
que se debe tomar el valor entero de la operación a realizar.

Para poder realizar el proceso de criptoanalisis, es necesario conocer el inverso del valor de a de
la clave, para ello se aplica el algoritmo extendido de Euclides. Este algoritmo permite calcular el
maximo comun divisor de un numero y expresarlo como una combinacion lineal. Para el calculo de este
valor se tiene en cuenta diferentes ecuaciones, lo primero es encontrar (4), luego se debe encontrar el
valor de (5), para asi determinar mediante (6) el inverso de a.

r 0=(q 1∗r 1)+r 2 (4)

r0
Donde r 0=n ; r 1=a ; q 1= ; r 2=r 0−q 1∗r 1, esta ecuacion va avanzando hasta que el
r1
valor de “r2” llegue a ser 1.

t j=t j−2−(q j −1∗t j−1) (5)


Teniendo en cuenta los valores de t 0=0 ; t 1=1. Este proceso se realiza hasta el ultimo valor de q
hallado en (4).

a−1=t e mod n (6)

Donde t e es el ultimo valor obtenido en (5).

Al conocer el inverso multiplicativo de a, se procede a realizar (7), para desencriptar. Luego se


aplican (3a), (3b) y (3c) y asi se dermina si la encripcion se realizo correctamente.

d ( y )=[ ( y−b) a−1 ] mod n (7)


AFIN III 5

Procedimiento y Resultados.

Para la realizacion del codigo en el lenguaje de programacion C++, es necesario conocer el


procedimiento adecuado de lo que se quiere realizar. Por ello se presentan los siguientes esquemas de
bloques, teniendo en cuenta que el valor de z es 27, ya que se utilizara el abecedario con la letra ñ, lo que
nos indica que el valor de n es de 19683. Como se mencianba anteriormente al agrupar las letras se debe
agregar una o dos letras dependiendo de si es necesario para completar la agrupacion, para este caso la
letra agregada es la ñ. Ademas se definen los valores de a y b.

Proceso para dejar el Texto de acuerdo al abecedario escogido:

Quitar caracteres Cambiar vocales


Dejar el texto en
que no van de con acento por
Leer un Texto .txt mayusculas o en
acuerdo al vocales sin
minusculas
abecedario acento

Proceso de Encriptacion:
AFIN III 6

A cada grupo Se aplican las


Separar de a Se encripta
Agregar ñ si de letras se ecuaciones
grupos de 3 con la
corresponde realiza la (3a), (3b) y
cada palabra ecuacion (2)
ecuacion (1) (3c)

Proceso de Desencripcion:

Encontrar el inverso
Se aplican las
de a con el Aplicar la ecuacion
ecuaciones (3a),
Algoritmo extendido (7)
(3b) y (3c)
de Euclides

Para el desarrollo del programa se debe tener en cuenta el tipo de variables a utilizar, el archivo
de texto que se quiere implementar y las diferentes funciones.
Como se indica en el primer esquema de bloques, se debe leer un archivo de texto .txt, para ello
se implemneta el siguinete codigo, donde muestra el tipo de librería que se utiliza para leer el archivo,
ademas de crear uno nuevo donde se observaran los cambios realizados al texto original y el tipo de
variables a desarrollar.

ifstream in("Libro.txt"); //Lee el archivo .txt


ofstream out("Copia.txt"); //Muestra los cambios realizados
string Texto,copia;
while (!in.eof()){ //Lee el archivo .txt hasta el final del archivo
getline(in, Texto); //Obtiene cada una de las palabras del texto
AFIN III 7

Para realizar el proceso de suprimir o eliminar aquellos caracteres que no estan determinados en
el abecedario escogido se utiliza la siguiente funcion, en donde cada vez que encuentre uno de los valores
indicados según el carácter ASCII los elimina del archivo:

void sololetras(string &T)


{
size_t pos;
while ((pos = T.find("¿")) != string::npos){
T.erase(pos, 1);
}
while ((pos = T.find("¡")) != string::npos){
T.erase(pos, 1);
}
for (int i =33; i < 65; i++) {
while ((pos = T.find(i)) != string::npos){
T.erase(pos, 1);
}
}
}
Para que el texto quede en minusculas, se implementa el siguiente codigo, si se quiere dejar el
texto en mayusculas se debe cambiar el comando tolower por toupper:
void Minuscula(string &s){
for (int i = 0; i < s.length(); i++){
s[i] = tolower(s[i]);
}
}

Por ultimo se cambian las vocales con acento por sus respectivas vocales sin acento, ya que el
abecedario no reconoce las vocales con acento, para ello la funcion de este codigo es que cada vez que
encuentre una vocal con acento la reemplazara con la vocal sin acento correspondiente:

void tildes(string &Texto){


size_t pos;
while ((pos = Texto.find("á")) != string::npos){
Texto.replace(pos, 1, "a");
}
while ((pos = Texto.find("é")) != string::npos){
Texto.replace(pos, 1, "e");
}
while ((pos = Texto.find("í")) != string::npos){
Texto.replace(pos, 1, "i");
}
while ((pos = Texto.find("ó")) != string::npos){
Texto.replace(pos, 1, "o");
}
while ((pos = Texto.find("ú")) != string::npos){
Texto.replace(pos, 1, "u");
AFIN III 8

}
while ((pos = Texto.find("Á")) != string::npos){
Texto.replace(pos, 1, "a");
}
while ((pos = Texto.find("É")) != string::npos){
Texto.replace(pos, 1, "e");
}
while ((pos = Texto.find("Í")) != string::npos){
Texto.replace(pos, 1, "i");
}
while ((pos = Texto.find("Ó")) != string::npos){
Texto.replace(pos, 1, "o");
}
while ((pos = Texto.find("Ú")) != string::npos){
Texto.replace(pos, 1, "u");
}
}

Al tener el texto completamente listo para encriptar, se aplica el proceso de encriptacion, asi se
separarn de a grupos de a tres las palabras y se le agrgara la ñ, cuando corresponda. El siguiente codigo
describe el proceso de revisar palabra por palabra, al llegar a la primera palabra revisa si esta es multiplo
de 3, si no es multiplo de 3 se le agrga la ñ, hasta que la palabra sea multiplo de 3:

string c(string &t, string &c)


{
int con = 0;
t = t + " \n";
for (int i = 0; i < t.length(); i++){
if (t[i] == (32)){
if ((con % 3) == 0){
c = c + t[i];
con = 0;}
else{c = c + "ñ";
con++;
if ((con % 3) == 0){
c = c + t[i];
con = 0;}
else{c = c + "ñ";
c = c + t[i];
con = 0;}
}
}
else{c = c + t[i];
con++;}
}
return c;
}

Para el proceso de asignacion del numero a cada grupo de letras (1), se debe crear un vector con
las letras del abecedario que se desea utilizar y se relacionan con los numeros correspondientes, es decir,
AFIN III 9

a=0, b=1, c=2, etc. Teniendo asignado el valor de las letras se puede implemnetar la ecuacion (2), para asi
llegar a (3a), (3b) y (3c), y tener el texto encriptado.
Para el proceso de desencripcion se utiliza el siguiente codigo que realiza el algoritmo extendido
de Euclides, este puede ser encontrado en internet de diferentes formas dependiendo la necesidad:

long* alg_euc_ext(int a, int b)


{
long array[3], x = 0, y = 0, d = 0, x2 = 1, x1 = 0, y2 = 0, y1 = 1, q = 0,
r = 0;
if (a == 0)
{
array[0] = a;
array[1] = 1;
array[2] = 0;
}
else
{
while (b>0)
{
q = (a / b);
r = a - q*b;
x = x2 - q*x1;
y = y2 - q*y1;
a = b;
b = r;
x2 = x1;
x1 = x;
y2 = y1;
y1 = y;
}
array[0] = a; // mcd (a,b)
array[1] = x2; // x
array[2] = y2; // y
}
return array;
}

Al tener el valor del inverso de a, se puede aplicar (7), para finalmente tener la desencripcion con
(3a), (3b) y (3c).
AFIN III 10

Conclusiones

Esta tecnica de encriptacion es una tecnica que ya no es comun de utilizar, debido a la facilidad
que brindan los nuevos softwares y tecnologia al hallar las diferentes claves que pueden existir para
AFIN, independientemente del tipo de AFIN que se utilice. Una de las formas en las que se podria
mejorar el sistema es aplicando el principio perfecto de Shannon este principio es denominado como un
sistema incondicionalmente seguro, este principio se logra cuando el conjunto de todos los mensajes
secretos es igual al conjunto de todos los mensajes cifrados y a su vez al conjunto de todas las claves.
Al moemto de realizar la programacion se presentan diferentes problemas, uno de los principales
problemas es poder implementar la logica que se quiere al codigo en C++, debido a la falta de
conocimientos del mismo. Pero gracias a este programa se puede entender mejor el proceso de cifrado y
criptoanalisis de AFIN III, asi como se obtienen mas conocimientos en el lenguaje de programacion C++.
Otro de los problemas presentados es saber manejar los objetos en C++, y buscar las funciones correctas
para procesos especificos, ya que muchas de las implementaciones se pueden encontrar en internet.
AFIN III 11

References

Leudis,S Seminario-Seguridad en Desarrollo de Software, Criptografía. Retrieved from


http://manglar.uninorte.edu.co/bitstream/handle/10584/2204/Criptograf%EDa
%20I.pdf;jsessionid=EA97C813C4C3CAFB40FBDC93939FAB97?sequence=1.
Corrales, H. Cilleruelo, Carlos. Cuevas, Alejandro. Criptografia y Metodos de Cifrado. Page 4, 7.
Retrieved from http://www2.uah.es/libretics/concurso2014/files2014/Trabajos/Criptograf%EDa%20y
%20M%E9todos%20de%20Cifrado.pdf.
Docsetools. Cifrado Afin. Retrieved from http://docsetools.com/articulos-noticias-
consejos/article_129284.html
Blogger. Algoritmo de Euclides Extendido. Retrieved from http://site-
informatica.blogspot.com/2010/09/algorimo-de-euclides-extendido.html.
C. E. SHANNON: A Mathematical Theory Communication, The Bell System Technical Journal,
Vol. 27, pp. 379-423, 623-656, July, October, 1948.
C. E. SHANNON: Communication Theory of Secrecy Systems, The Bell System Technical
Journal, Vol. 28-4, pp. 656-715, 1949. Retrieved from http://www.cryptores.com/aportacion-de-la-
criptografia-de-residuos-a-la-criptografia-moderna/

Anexos
AFIN III 12

También podría gustarte