¿Qué es y como surge la criptografía?: un repaso por su historia

26 comentarios

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


¿Quieres saber más?

Artículos

Artículos relacionados que probablemente también te interesen

Ver más

Respuestas

Preguntas sobre este tema que ha contestado la comunidad

+ Deja tu comentario

Comentarios

  • 1

    interesante

    Avatar de sergio.mendez !

    Muy curioso el articulo, lo de los romanos me ha llamado un monton la atención.

  • Respondiendo a #1:
  • 4

    Avatar de Pedro Gutierrez !

    En principio no pensé en incluir esto en el pequeño repaso a la criptografía, pero me parecía curioso para compartirlo con vosotros, que no viene mal para aprender algo nuevo :P

    PD: a mi lo curioso creo que es que veo tan simples los métodos que no se como a nadie de la época se le ocurría reventar el método, ya que hoy en día creo que cualquiera podría darse cuenta de que hay un sistema criptográico tras las letras sin sentido (pero la cultura de la época y la actual es muy distinta).

    Un saludo.

  • Respondiendo a #4:
  • 12 Comentario moderado

  • Respondiendo a #4:
  • 21

    Avatar de iberhack !

    Pedro aunque te parezca que es muy obvio como reventar esos métodos, pues lo primero es que no estas pensando en como era la situación en esa época y además te olvidas cual es la finalidad de la criptografía.

    Lo primero es que hoy en día te parece muy sencillo porque sabes que es la criptografía, conoces las técnicos básicas (como las mostradas), etc. Y lo principal, sabes leer y escribir y además tienes una base de conocimientos muy amplia comparado con solo hace 200 años (ya no digamos hace dos mil años).

    Por ejemplo la cesar que puede parecer la más sencilla, especialmente en la forma que se ha puesto, pues para descifrarlo, lo primero es que tienes que saber en que idioma está el texto... y pensando ya que te engañen con otro abecedario y se usara siempre el del latín que era el materno de los romanos, por ejemplo en la época de Julio Cesar (del cual toma el nombre ese método), empezaba a ser popular que los romanos de alta alcurnia hablaran al menos latín y algo de griego, pero solían tener esclavos de medio mundo conocido y por tanto es facilísimo poder haber acordado enviar el texto y sobre él como protección adicional aplicar el cifrado. Ten en cuenta que a día de hoy ni se sabe la cantidad de idiomas que se hablaban en el imperio romano durante el siglo 1ºa.C. Pero la cifra podría rondar los 80 (aunque realmente si tomamos por dialectos a muchos de ellos, pues la cifras sería menor, ya que aunque había importantes diferencia aun mantenían grandes inteligibilidad). Y hoy con tanta educación y demás, pues nuestro sistema es vergonzoso comparado con lo que pasaba en la época de Julio Cesar, menos en los grandes núcleos culturales. Por ejemplo, por haber muchísima documentación (en gran medida por el cristianismo y el judaísmo), en Judea, tierra de comerciantes (que no todo el imperio era igual, y además esto era más común en la parte oriental que la occidental). Judea entro en el imperio en ese periodo, pues en judea, la inmensa mayor parte de la población entendía y hablaba (con distinto nivel de conocimiento por supuesto, de algunos solo lo básico y otros muy profundamente), pues al menos unos 5 idiomas. Por ejemplo en torno al año 30 de nuestra era, un judío solía hablar el arameo (era el idioma materno puro del territorio), el hebreo (por motivos religiosos, aunque solía aprenderse con el tiempo en las sinagogas, pero estaba vivo, aunque restringido al ámbito religioso), el griego (en varias variantes, como el siriaco, el copto y el de Corinto), el latín (básico para la administración), algún otro idioma del tronco cananeo de la rama fenicia (fenicio o púnico por ejemplo), que se mantuvo incluso la escritura durante el siglo II d.C. lo que muestra que era aun muy vivo (aunque el griego se lo comió en el siglo 3 o 4 de nuestra era, pero un idioma pasa de la cima a perder su papel en un par de generaciones, por ejemplo en España y durante más de un siglo, como segundo idioma en educación se daba el francés y la gente lo hablaba que no veas, pues a pesar de que fue tan recientemente como durante la transición que se paso al inglés, pues en cuestión de 40 años paso de ser un idioma conocido por todos los que tenían secundaria en España, a ser solo muy minoritario por unos ahora viejos y algunos que por circunstancias o por gusto lo han aprendido, cuando en 1980 podías hablar en francés en casi cualquier parte de España, que malo sería que no toparas con alguien con estudios medios que se defendiera un mínimo)...

    Pero realmente la seguridad la daba a que estos sistemas (en esa época no solo había estos), sino que había muchos y realmente la seguridad es que no había textos ni tal que te enseñaran la base... y después que no siempre se usaba 3, 3 esa la clave que parece que usaba Cesar con sus generales, pero por ejemplo Augusto usaba un 1... pero aun así parece que para el siglo 1ºd.C. (unas décadas después), pues ya eran más común usar desplazamientos de 8 a 15, o irse a alfabetos modificados. Y aun así, con los recursos de la época sin clave (con clave se puede hacer al vuelo), pues era de prueba y error.

    Pero variantes ligeramente mejoradas se siguieron usando masivamente hasta la edad moderna, ya que con un poco de cuidado, la única forma fácil de reventar es si tienes un sistema de pesos para cambiar las letras... por ejemplo en Español, la letra más común (dejando de lado espacios) es la "e" y con las 10 letras más comunes (algunos rebajan a 7), pues si el texto es lo suficientemente largo, ya que has roto el cifrado, solo tienes que hacer esas sustituciones y como máximo tendrás que cambiar un par de ellas de orden. Y tendrás en limpio el 90% del texto y el resto ni siquiera hay que complicarse la vida, porque por palabras comunes, lo sacas enseguida.

    saludos

  • Respondiendo a #4:
  • 23

    Avatar de iberhack !

    Por cierto que me acorde tarde, un ejemplo para que veas que un Cesar ligeramente actualizado, bien ejecutado, pues un en pleno siglo XXI aun se puede usar con éxito. Un grupo mafioso lo usaba para cifrar SMS (cifraban mensajes usando el típico lenguaje SMS con abreviaturas y demás) y la mafia italiana también. Al punto de que cuando los han pillado en los últimos 3 o 4 años varios casos, pues se sorprendieron los investigadores porque con algo tan básico consiguieron mantener a la policía despistada por años o décadas.

    Y ya en territorio español, aunque en este caso la versión del siglo XVI del cifrado Cesar, el vigenere, pues aunque actualmente es muy conocido y supuestamente es muy poco seguro ya (en otra época se consideraba irrompible en la mayor parte de los casos). Pues una de estas redes de narcotráfico detenida en 2010 o 2011... una red con una gran infraestructura. Pues la policía se paso años detrás de ellos y siempre un paso por detrás. Y su truco fue usar teléfonos prepago (por mucho que haga 6 años que hay que dar tu DNI para cuando te haces con uno, pues le pagas 100€ a un drogata para que dé su DNI y adiós lo de que se controla con eso a los "terroristas") y SMSs usando palabras clave en los mensajes... pero principalmente la seguridad venía que recurrir a ese vieja técnica de cifrado y que muchos consideran obsoleta.

    Muchas veces lo más simple es lo más eficaz.

    Pero bueno, si aun en Enero del 2013 aun hay quien usa o usaba hace tan solo un par de años, variantes de esos métodos aparentemente tan vulnerables... de forma aun eficiente. Pues hace 2000 años era una herramienta estupenda.

    salu2

  • Respondiendo a #23:
  • 24

    Avatar de Pedro Gutierrez !

    Si, es lo que he comentado, que esto hoy en día con la cultura general que tenemos podríamos más o menos saber un poco de que se trata, pero en la época era casi imposible.

    PD: el resto de datos son bastante curiosos, gracias por compartirlos.

  • 2

    !
    | 1 estrellas

    Buen articulo, Pedro.

  • Respondiendo a #2:
  • 3

    Avatar de Pedro Gutierrez !

    Muchas gracias = )

  • Respondiendo a #3:
  • 22

    Avatar de iberhack !

    si muy bueno, te animo a que otro día sigas con los siguientes, que ya entramos en terreno más interesante.

    salu2

  • 5

    !
    | 1 estrellas

    No es por darmelas de listillo ni nada, pero la palabra encriptar no existe según la RAE o significaría "meter en una cripta". El término correcto es cifrar...

    Me gustan mucho vuestros artículos y estan muy bien cuidados y documentados.

    Saludos!

  • Respondiendo a #5:
  • 6

    Avatar de Pedro Gutierrez !

    Realmente hace un tiempo hice un artículo y busque "encriptar" en la RAE y encontré esa acepción, pero decidí seguir usándolo por adoptar el anglicismo (que además está muy extendido su uso), pero gracias por comentarlo, podría haber sido un error mio : )

    Un saludo.

    -- editado por última vez a las 17:51

  • Respondiendo a #6:
  • 8

    interesante

    !
    | 1 estrellas

    No existe como tal, la palabra correcta es cifrar, también se emplea otra palabra codificar

    -- editado por última vez a las 20:08

  • 7

    !

    Muy interesante el articulo, de hecho en la escuela yo apliqué el método del César y uno que se llama códigos de Huffman, en C claro y pues fue algo divertido, a mi me interesa mucho eso de la criptografía a pesar de que apenas comienzo en esto de la programación xD

  • Respondiendo a #7:
  • 13

    interesante

    !
    | 1 estrellas

    Existe una web en español dedicado a la Criptografía y Seguridad, se llama Kriptopolis échale un vistazo, yo me estoy leyendo la historia de la maquina Enigma en capítulos, ahora va por el 93.

    Si quieres hacer un curso online sobre ello, prueba el de la UPM: MOOC Cryt4you

  • Respondiendo a #13:
  • 14

    Avatar de Pedro Gutierrez !

    Alguna ves he visitado Kriptopolis, está fenomenal, me acuerdo de una explicación de como funciona AES.

  • Respondiendo a #13:
  • 15

    !

    gracias ya ando viendo los enlaces

  • 9 Comentario moderado

  • 10 Comentario moderado

  • 11 Comentario moderado

  • 16

    !

    Se podrían usar algunos de éstos métodos para encriptar mensajes que van a ser guardados en una base de datos? O mejor me espero a la encriptación 'moderna'? jejeje

    Creo que la idea de combinar un par de ellos sería buena... O es mejor usar MD5?

  • Respondiendo a #16:
  • 17

    Avatar de Pedro Gutierrez !

    Probablemente nadie pensaría que has usado el cifrado del César jeje...

    Lo que trataré con la encriptación moderna será los tipos de clave (simétrica y asimétrica) y ya que lo has nombrado hablaré de los hash.

    PD: lo mejor para meter claves en una base de datos es usar la función en especial que haya para ella (y elegir entre ellas) en MySQL tienes MD5() y SHA()

  • 18

    !
    | 1 estrellas

    Les recomiendo el curso gratuito de la universidad de Stanford crypto-class eso sí, todo en inglés y hay un certificado de culminación al final del curso.

  • 19

    Avatar de cs4r !

    El artículo es bueno, pero el uso términos como "encriptar", "desencriptar", "encriptación", "desencriptación"... (si es que suenan hasta mal) y que no se cite ningún libro ni sitio web como fuentes lo desprestigia un poco.

    -- editado por última vez a las 14:37

  • Respondiendo a #19:
  • 20

    Avatar de Pedro Gutierrez !

    No tiene porque desprestigiarlo, todo esto lo he hecho con cosas que se y he tenido que estudiar (por poco útiles que sean), y lo que tengo son apuntes...

  • 25 Comentario moderado

  • 26

    !
    | 1 estrellas

    Buenas, me llamo la atención el texto encriptado del primer método y quise volver al original partiendo desde el. No me fue posible, así es que hice mis propias funciones para codificar y decodificar bajo este método:

    function decode(txt, diam){var res = ''; for(var i = 0; i < diam; i++){ for(var j = i; j < txt.length; j += diam){ res += txt[j]; } } return res; } 

    function encode(txt, diam){ var enc = []; var k = 0; for(var i = 0; i < diam; i++) { for(var j = i; j < txt.length; j += diam) { enc[j] = txt[k++]; } } return enc.join(''); }

    Muy buenos los artículos, los leo bastante seguido y me resultan muy interesantes. Gracias GENBETA:dev por el tiempo que dedican a componer los artículos.

    -- editado por última vez a las 15:15