Sigue a Genbetadev

Máquina enigma - historia de la criptografía

La criptografía es una necesidad derivada de realizar comunicaciones por escrito (en su origen) creada para preservar la privacidad de la información que se transmite, garantizando que una persona que no esté autorizada no pueda leer el contenido del mensaje.

En la historia hemos tenido multitud de ejemplos de formas de encriptar mensajes como los métodos espartanos de hace 2.500 años, el cifrado de Polybios (de los griegos) o el cifrador del César (de los romanos), y sin olvidarnos de la máquina de encriptación más famosa de la historia: la máquina Enigma.

Historia de la criptografía

En este artículo voy a tratar solamente de la historia de la criptografía y pondré unos ejemplos prácticos, posteriormente me adentraré en los distintos tipos de criptografía moderna y posteriormente su uso.

La escítala espartana (siglo V a. C.)

Escítala - historia de la criptografía

Los primeros mensajes cifrados que conocemos datan del siglo V antes de Cristo, de procedencia espartana, que ponían en práctica un método simple y rudimentario que consistía en coger una vara (llamada escítala), se le enroscaba una cinta de cuero o papiro y posteriormente se escribía de forma longitudinal (como en la imagen).

Y por último se desenrollaba la cinta, con un puñado de letras sin sentido y se mandaba a través del seur mensajero de turno al trote.
Supuestamente solo se podía desencriptar la información con una vara del mismo diámetro que la original sobre la que se escribió (obviamente si te pones a intentar cuadrar las letras acabas sacando algo en claro, pero en la época no se sabía demasiado leer, tampoco el idioma origen y mucho menos tenían la cultura general necesaria para pensar que la información estaba encriptada).

Uso

El diámetro de la escítala es la clave de este método de encriptación (o simplemente cada cuantos caracteres empieza una vuelta).

En el ejemplo encriptaremos la siguiente entrada de texto:

Genbeta Dev – Historia de la criptografía – Método usado por los espartanos

Y como clave o diámetro de la escítala (n) tomaremos el número 7, es decir, en cada vuelta de la cinta enroscada en el la vara pondremos 7 caracteres.
El resultado es el siguiente:

G tMose-doé pn egtpabH rooreiladrttsafo aat í ln ocauooDrr ssseii-a vap de

Podéis poner la técnica en marcha con este ejemplo que he realizado y el código JavaScript es el siguiente:

function escitala(txt,n){ 
	//Convertimos "n" en entero 
	var n=Math.floor(Number(n)) 
	//"e" nos indica si entra justo en las filas 
	var e=(txt.length%n>0?1:0) 
	//Calculamos el número de filas resultantes 
	var lin=Math.floor((txt.length/n)+e) 
	//"r" contiene la respuesta 
	var r='' 
	//Añadimos el carácter a la respuesta 
	for(var a=0;a<lin;a++)	for(var b=0;b<n;b++)	r+='<span>'+txt.charAt(a+(b*lin))+'</span>' 
	return r 
}

La función necesita dos argumentos, el texto y el diámetro que usaremos de clave (n) de la siguiente forma: escitala([Texto],[Entero: diámetro]).

El cifrador de Polybios (siglo II a. C.)

Este sistema es el primer cifrado por sustitución de caracteres. Se atribuye la invención a el historiador griego Polybios y el sistema de cifrado consiste en sustituir un carácter por el numero o letra de una columna o fila (como si jugásemos al hundir la flota).

Polybios - historia de la criptografía

En el ejemplo de este sistema introduciremos la siguiente cadena:

Genbeta Dev Historia de la criptografia Metodo usado por los griegos

Nota: tenemos que tener en cuenta que en este método se sustituye la letra “J“ por la “I“.
El resultado de encriptar con la tabla de la imagen (la teóricamente real) es el siguiente:

BBAECCABAEDDAA ADAEEA BCBDDCDDCDDBBDAA ADAE CAAA ACDBBDCEDDCDBBDBAABABDAA CBAEDDCDADCD DEDCAAADCD CECDDB CACDDC BBDBBDAEBBCDDC

Y podéis probarlo con este ejemplo para encriptar y desencriptar con el sistema griego (Polybios).

var let='abcdefghiklmnopqrstuvwxyz' 
var tra='ABCDE' 
//función de encriptación 
function polybios_enc(txt){ 
	//Comprobamos que el texto es válido 
	var pat=/^[0-9A-z\s]*$/ 
	if(!pat.test(txt)) return 'Texto no válido' 
	//Lo pasamos a minúsculas y convertimos la "j" en "i" (como requiere el método) 
	var txt=txt.toLowerCase().replace('j','i') 
	var r='' 
	for(var a=0;a<txt.length;a++){ 
		//Comprobamos si el carácter es un espacio 
		if(txt.charAt(a)!=' '){ 
			//Buscamos la posición del carácter en el abecedario 
			var l=txt.charAt(a) 
				l=let.indexOf(l) 
			//Comprobamos la posición de la fila y columna 
			var c1=Math.floor(l/let.length*tra.length) 
			var c2=Math.round(((l/let.length*tra.length)*tra.length)-(c1*tra.length)) 
			//Añadimos la letra correspondiente a la fila y columna 
			r+=tra.charAt(c1)+tra.charAt(c2) 
		}else{ 
			r+=' ' 
		} 
	} 
	return r 
} 
//función de desencriptación 
function polybios_dec(txt){ 
	var pat=/^[ABCDE\s]*$/ 
	if(!pat.test(txt)) return 'Texto no válido' 
	var t=txt,r='',c 
	while(t.length>0){ 
		if(t.substr(0,1)==' '){ 
			r+=' ' 
			c=1 
		} 
		else{ 
			var s=t.substr(0,2).split('') 
			r+=let.charAt((tra.indexOf(s[0])*tra.length)+tra.indexOf(s[1])) 
			c=2 
		} 
		t=t.substr(c,t.length-c) 
	} 
	return r 
}

Ambas funciones solo necesitan el argumento con el texto a encriptar o desencriptar.

El cifrador del César (siglo I a. C.)

Los romanos hace 2100 años idearon su propio sistema de enscriptación (a la altura de los anteriores) que consistía en sustituir cada letra por otro que es el resultado de desplazar tres posiciones hacia la derecha desde el carácter origen en el abecedario (con la imagen de abajo se entenderá a la perfección).

Cifrado del César - Historia de la criptografía

Esta técnica se podría mejorar cambiando el abecedario “desplazado” por uno aleatorio, por ejemplo, pero el método en principio es desplazando tres caracteres a la derecha (y para desencriptarlo hacerlo al contrario, a la izquierda).
Nota: este sistema puede admitir también los espacios, que se añadirán como un carácter más o de no usarse se omitirán.

Para poner otro ejemplo vamos a encriptar la siguiente cadena (contaremos los espacios):

Genbeta Dev Historia de la criptografia Metodo usado por los romanos

Y el resultado es el siguiente:

jhqehwdcghycklvwruldcghcodcfulswrjudildcphwrgrcxvdgrcsrucorvcurpdqrv

Y por último he hecho este otro ejemplo funcional del sistema de enscriptación del César, que admite distinto número de desplazamiento (n), sea positivo o negativo (si lo encriptamos con n=3 debemos de desencriptarlo con n=-3).

function cesar(txt,n,space){ 
	//Comprobamos que el texto es válido 
	var pat=/^[0-9A-z\s]*$/ 
	if(!pat.test(txt)) return 'Texto no válido' 
	//Adaptamos el texto según si admitimos espacios 
	var let='abcdefghijklmnopqrstuvwxyz'+(space?' ':'') 
	var txt=txt.toLowerCase() 
	if(!space) for(var a=0;a<txt.length;a++) txt=txt.replace(' ','') 
	//Ajustamos el desplazamiento de "n" 
	var n=n%let.length,r='' 
		n=n<0?let.length+n:n 
	for(var a=0;a<txt.length;a++){ 
		//Desplazamos el abecedario 
		l=let.charAt((let.indexOf(txt.charAt(a))+n)%let.length) 
		r+=l.length==0?' ':l 
	} 
	return r 
}

Esta función sirve para encriptar y desencriptar (debemos de restar el desplazamiento simplemente) y necesita los siguientes argumentos: cesar([Texto],[Entero: desplazamiento],[Booleano: con o sin espacios]).

Resumen

Esta es una pequeña introducción a la criptografía mezclada con un poco de historia (y es solo tres ejemplos, si nos pusiésemos a nombras métodos y métodos que no necesitasen computación tendríamos para rato). En la próxima parte comentare los tipos de encriptación… moderna.

En Genbeta Dev | Criptografía


Los comentarios se han cerrado

Ordenar por:

26 comentarios