jueves, 22 de octubre de 2015

CRIPTOGRAFIA



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).

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.

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