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.
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.)
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).
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).
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.
Este es un código de ejemplo de como funcionaria esta encriptación
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
Hola = bcca
Nota: tenemos que tener en cuenta que en este método se
sustituye la letra “J“ por la “I“.
Ese es un ejemplo en código para encriptar y desencriptar el
sistema griego
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
}
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).
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.
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.
Anexo otro ejemplo en código 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
}
No hay comentarios:
Publicar un comentario