Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tipos de Criptografia
Tipos de Criptografia
MsgBox cifrado.StringValue(0,15)
MsgBox descifrado.StringValue(0,15)
End If
End If
Una vez cifrado, slo es necesario utilizar a continuacin la clave privada para
volver a convertirlo en texto claro.
Ahora bien, una particularidad de trabajar con bloques de memoria es que
desaparece toda la informacin de codificacin asociada con el texto (por
ejemplo UTF-8), de modo que es preciso tenerlo en cuenta a la hora de volver a
recuperar dicha informacin otra vez desde un bloque de memoria que
hayamos descifrado.
Acceso a Llaveros
Tambin hay que tener en cuenta que si bien el mdulo Crypto incluye todas
las funciones necesarias para cifrar, firmar o generar huellas digitales de
nuestra informacin, depende de nosotros poner a buen recaudo las claves
privadas que generemos.
Existen muchas formas de hacerlo, y de hecho no debera de suponer ningn
problema mediante las clases incluidas en el framework de Xojo. Ahora bien,
los usuarios de OS X lo tienen aun un poco ms sencillo gracias a que Xojo
incluye soporte para la caracterstica Acceso a Llaveros (Keychain) mediante
la que se facilita sobremanera el guardado y recuperacin de contraseas
utilizadas por las aplicaciones.
Los hash o funciones de resumen son algoritmos que consiguen crear a partir
de una entrada (ya sea un texto, una contrasea o un archivo, por ejemplo)
una salida alfanumrica de longitud normalmente fija que representa un
resumen de toda la informacin que se le ha dado (es decir, a partir de los
datos de la entrada crea una cadena que solo puede volverse a crear con esos
mismos datos).
Estas funciones no tienen el mismo propsito que la criptografa simtrica y
asimtrica, tiene varios cometidos, entre ellos est asegurar que no se ha
modificado un archivo en una transmisin, hacer ilegible una contrasea o
firmar digitalmente un documento
Gutirrez
Puente
(Clave
pblica)
Junto con este artculo sobre los hash tenemos el que habla sobre los tipos de
criptografa (simtrica y asimtrica) que son la base para comprender el
siguiente y ltimo de la serie sobre criptografa, donde pondremos en prctica
estos conceptos junto a GPG.
para
preservar
la
privacidad de
la
informacin
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 mtodos espartanos de hace 2.500 aos, el cifrado de Polybios (de los griegos) o
el cifrador del Csar (de los romanos), y sin olvidarnos de la mquina de encriptacin
ms famosa de la historia: la mquina Enigma.
Historia de la criptografa
En este artculo voy a tratar solamente de la historia de la criptografa y pondr unos
ejemplos prcticos, posteriormente me adentrar en los distintos tipos de criptografa
moderna y posteriormente su uso.
Los primeros mensajes cifrados que conocemos datan del siglo V antes de Cristo, de
procedencia espartana, que ponan en prctica un mtodo simple y rudimentario que
consista en coger una vara (llamada esctala), se le enroscaba una cinta de cuero o
papiro y posteriormente se escriba de forma longitudinal (como en la imagen).
Y por ltimo se desenrollaba la cinta, con un puado de letras sin sentido y se mandaba a
travs
de
turno
al
trote.
Supuestamente solo se poda desencriptar la informacin con una vara del mismo
dimetro 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 saba demasiado
leer, tampoco el idioma origen y mucho menos tenan la cultura general necesaria para
pensar que la informacin estaba encriptada).
Uso
El dimetro de la esctala es la clave de este mtodo de encriptacin (o simplemente cada
cuantos caracteres empieza una vuelta).
En el ejemplo encriptaremos la siguiente entrada de texto:
Genbeta Dev Historia de la criptografa Mtodo usado por los espartanos
Y como clave o dimetro de la esctala (n) tomaremos el nmero 7, es decir, en cada
vuelta
de
la
cinta
enroscada
en
el
la
vara
pondremos
caracteres.
El resultado es el siguiente:
G tMose-do pn egtpabH rooreiladrttsafo aat ln ocauooDrr ssseii-a vap de
Podis poner la tcnica en marcha con este ejemplo que he realizado y el
cdigo 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 nmero de filas resultantes
var lin=Math.floor((txt.length/n)+e)
b=0;b<n;b++)
r+='<span>'+txt.charAt(a+(b*lin))+'</span>'
return r
}
La funcin necesita dos argumentos, el texto y el dimetro que usaremos de clave (n) de
la siguiente forma: escitala([Texto],[Entero: dimetro]).
var let='abcdefghiklmnopqrstuvwxyz'
var tra='ABCDE'
//funcin de encriptacin
function polybios_enc(txt){
//Comprobamos que el texto es vlido
var pat=/^[0-9A-z\s]*$/
if(!pat.test(txt)) return 'Texto no vlido'
//Lo
pasamos
minsculas
convertimos
la
"j"
en
"i"
(como
requiere el mtodo)
var txt=txt.toLowerCase().replace('j','i')
var r=''
for(var a=0;a<txt.length;a++){
//Comprobamos si el carcter es un espacio
if(txt.charAt(a)!=' '){
//Buscamos
la
posicin
del
carcter
en
el
abecedario
var l=txt.charAt(a)
l=let.indexOf(l)
//Comprobamos la posicin 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))
//Aadimos la letra correspondiente a la fila y
columna
r+=tra.charAt(c1)+tra.charAt(c2)
}else{
r+=' '
}
}
return r
}
//funcin de desencriptacin
function polybios_dec(txt){
var pat=/^[ABCDE\s]*$/
if(!pat.test(txt)) return 'Texto no vlido'
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
}
Esta tcnica se podra mejorar cambiando el abecedario desplazado por uno aleatorio,
por ejemplo, pero el mtodo en principio es desplazando tres caracteres a la derecha (y
para
desencriptarlo
hacerlo
al
contrario,
la
izquierda).
Nota: este sistema puede admitir tambin los espacios, que se aadirn como un carcter
ms o de no usarse se omitirn.
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 enscriptacin del Csar,
que admite distinto nmero 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 vlido
var pat=/^[0-9A-z\s]*$/
if(!pat.test(txt)) return 'Texto no vlido'
//Adaptamos el texto segn 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
}
necesita
los
siguientes
argumentos: cesar([Texto],[Entero:
El
CheckSum
PGP
SIGNED
MESSAGE----SHA256
#
The
image
checksum(s)
are
generated
with
sha256sum.
6e7e263e607cfcadc90ea2ef5668aa3945d9eca596485a7a1f8a9f2478cc7084
*Fedora-19-x86_64-DVD.iso
ef9eb28b6343e57de292f2b2147b8e74a2a04050655e0dc959febd69b0d5d030
*Fedora-19-x86_64-netinst.iso
Descarga
code.kliu.org/hashcheck/
Criptografa simtrica
La criptografa simtrica solo utiliza una clave para cifrar y descifrar el mensaje, que tiene
que conocer el emisor y el receptor previamente y este es el punto dbil del sistema, la
comunicacin de las claves entre ambos sujetos, ya que resulta ms fcil interceptar una
clave que se ha transmitido sin seguridad (dicindola en alto, mandndola por correo
electrnico u ordinario o haciendo una llamada telefnica).
Para poner un ejemplo la mquina Enigma (que era una maquina de cifrado
electromecnica que generaba abecedarios segn la posicin de unos rodillos que
podran tener distintas ordenes y posiciones) usaba un mtodo simtrico con un algoritmo
que dependa de una clave (que ms que clave parece un ritual) que est formada por:
los rotores o rodillos que usaba, su orden y la posicin de cada anillo, siendo esto lo ms
bsico.
La mquina Enigma contaba tambin con un libro de claves que contena la clave del
da y hacia un poco ms difcil encontrar la clave, pero no es una clave lo suficientemente
segura como para que no se pudiese reventar, sobretodo cuando los ingleses gracias a
los polacos consiguieron el algoritmo, por este motivo la mayora de los das conseguan
la clave.
Y otro inconveniente que tiene este sistema es que si quieres tener un contenido
totalmente confidencial con 10 personas tienes que aprenderte o apuntarte (siendo esta
forma menos segura) las 10 claves para cada persona.
Criptografa asimtrica
La criptografa asimtrica se basa en el uso de dos claves: la pblica (que se podr
difundir sin ningn problema a todas las personas que necesiten mandarte algo cifrado)
y la privada (que no debe de ser revelada nunca).
Sabiendo lo anterior, si queremos que tres compaeros de trabajo nos manden un archivo
cifrado debemos de mandarle nuestra clave pblica (que est vinculada a la privada) y
nos podrn mandar de forma confidencial ese archivo que solo nosotros podremos
descifrar con la clave privada.
Puede parecer a simple vista un sistema un poco cojo ya que podramos pensar que
sabiendo la clave pblica podramos deducir la privada, pero este tipo de sistemas
criptogrficos usa algoritmos bastante complejos que generan a partir de la frase de paso
(la contrasea) la clave privada y pblica que pueden tener perfectamente un tamao de
2048bits (probablemente imposible de reventar).
Como os habris dado cuenta solo cifra una persona (con la clave pblica) y la otra se
limita a mirar el contenido, por lo que la forma correcta de tener una comunicacin
bidireccional sera realizando este mismo proceso con dos pares de claves, o una por
cada comunicador.
Otro propsito de este sistema es tambin el de poder firmar documentos, certificando
que el emisor es quien dice ser, firmando con la clave privada y verificando la identidad
con la pblica.
Nota: todo esto puede parecer lioso (y lo es) pero hablar de como poner en prctica esto
conGnuPG (una herramienta de cifrado libre muy usada para este propsito) y ser ms
fcil de comprender.
Criptografa hbrida
Este sistema es la unin de las ventajas de los dos anteriores, debemos de partir que el
problema de ambos sistemas criptogrficos es que el simtrico es inseguro y el asimtrico
es lento.
El proceso para usar un sistema criptogrfico hbrido es el siguiente (para enviar un
archivo):
Ciframos la clave que hemos usado para encriptar el archivo con la clave pblica
del receptor.
Hemos hablado ya sobre la criptografa simtrica y asimtrica y sobre la firma digital, solo
toca ponerlo en prctica con GnuPG (la versin libre de PGP o mejor dicho Pretty Good
Privacy), con el que cifraremos cualquier tipo de archivo que podremos mandar
libremente con cierta seguridad de que nadie lo podr leer. Y puede que a muchos os
ayude a entender como funciona la criptografa y como funciona el polmico cifrado
de Mega, que tanto est dando que hablar estos das.
Qu es GnuPG?
Antes de empezar con lo interesante tenemos que saber que es GPG (GNU Privacy
Guard), que es un derivado libre de PGP y su utilidad es la de cifrar y firmar digitalmente,
siendo adems multiplataforma (podis descargarlo desde la pgina oficial) aunque viene
incorporado en algunos sistemas Linux, como en Ubuntu (ser con el sistema que har
todos los ejemplos, en Windows se encuentra solo con gestor grfico).
Anillo de claves
GPG tiene un repositorio de claves (anillo de claves) donde guarda todas las que tenemos
almacenadas en nuestro sistema, ya sean privadas o pblicas (como coment, con la
clave pblica cifraremos un mensaje que solo podr descifrar el que posee la clave
privada).
Ms adelante cuando veamos un anillo de claves debemos de recordar que pub hace
referencia a la clave pblica y sub hace referencia a la privada (y que tenemos que tener
a buen recaudo).
Servidores de claves
Para que nos cifren un mensaje tenemos que compartir la clave pblica de nuestro par de
claves para cifrar, y como es un poco engorroso difundir una clave a muchas personas
existen los servidores de claves PGP (compatibles con GPG), donde subir una clave
pblica
para
el
que
quiera
probar
los
ejemplos.
Cifrado simtrico
Tras crear un archivo de texto usamos el comando gpg -c [archivo], nos aparecer
un cuadro que nos pide la contrasea y se generar un archivo .gpg. Y despus lo
descifraremos con el comando gpg -d [archivo] (e introduciendo la clave de alta
seguridad, en este caso qwerty).
pedro@ubuntu:~/gpg$ gpg -d texto.txt.gpg
gpg: datos cifrados CAST5
gpg: cifrado con 1 frase contrasea
Genbeta Dev
gpg: AVISO: la integridad del mensaje no est protegida
Cifrado asimtrico
GPG nos permite elegir el tipo de clave que queremos usar, hay opciones que solo
permiten firmar y otras que permiten firmar y cifrar, en este caso usaremos DSA y
Elgamal.
las claves DSA pueden tener entre 1024 y 3072 bits de longitud.
De qu tamao quiere la clave? (2048)
Nos piden el tamao de la clave que puede variar entre 1024 bits y 3072, esto es de libre
eleccin, yo tomar el trmino medio que es el que propone por defecto (2048).
A partir de aqu todo es ms trivial, nos pide la fecha en la que expirar la clave, la
informacin del emisor de la clave (nombre, mail y algunos datos extra que queramos dar)
y por ltimo nos pedir la contrasea que salvaguarda la clave privada.
Tras generar las claves podemos verlas con el comando gpg -k que nos muestra
nuestro anillo de claves, lo importante de este paso es que veremos la identificacin de
cada una, que es necesaria para poderlas exportar y enviar.
pedro@ubuntu:~/gpg$ gpg -k
/home/pedro/.gnupg/pubring.gpg
-----------------------------pub
2048D/18384645 2013-01-23
uid
<info@xitrus.es>
sub
2048g/C4A9EA7A 2013-01-23
pedro@ubuntu:~/gpg$ ls
CPub.gpg
Este archivo ahora se puede difundir por el medio que queramos, tenemos que tener en
cuenta que el nico problema de seguridad que habra en difundir la clave es que alguien
se hiciese pasar por otro al mandarnos un mensaje, algo que pasara igual si no estuviese
cifrado, por eso el que nos enve algo lo debera de firmar (si fuese pertinente).
Podis descargar esta clave pblica, que ahora veremos como importar y sirve para
mandarme un archivo cifrado o para comprobar que un archivo lo he firmado yo.
usando
el
comando gpg
--send-keys
--keyserver
[Direccin del servidor] [ID de la clave pblica] (al igual que antes la
ID es 18384645).
pedro@ubuntu:~/gpg$ gpg --send-keys --keyserver pgp.mit.edu 18384645
gpg: enviando clave 18384645 a hkp servidor pgp.mit.edu
A partir de este momento la clave estar accesible desde este servidor especfico.
--import
[Archivo
de
la
clave
descargado anteriormente).
pedro@ubuntu:~/gpg$ gpg --import CPub.gpg
gpg:
clave
18384645:
Pedro
Gutirrez
(Manual
GPG
Genbeta
Dev)
sin cambios: 1
clave
18384645:
Pedro
Gutirrez
(Manual
GPG
Genbeta
Dev)
sin cambios: 1
usuario:
"Pedro
Gutirrez
(Manual
GPG
Genbeta
Dev)
<info@xitrus.es>"
clave ELG-E de 2048 bits, ID C4A9EA7A, creada el 2013-01-23 (ID de clave
primaria 18384645)
gpg: cifrado con clave ELG-E de 2048 bits, ID C4A9EA7A, creada el 201301-23
Pedro Gutirrez (Manual GPG - Genbeta Dev) <info@xitrus.es>
Genbeta Dev
Firmar archivos
Una de las medidas de seguridad bsicas al pasar un mensaje es asegurarnos que el
emisor es quien dice ser, para asegurarnos de esto digitalmente existe la firma digital, en
el artculo anteriorexpliqu como GPG usaba los hash para crear una firma simple, pero
tambin podemos cifrarlo y a su vez firmarlo, que es lo que haremos con el comando gpg
-u [ID de la clave privada] --output [Archivo resultante] --sign
[Archivo para firmar] e introduciendo la contrasea de la clave privada.
pedro@ubuntu:~/gpg$ echo "Genbeta Dev" > firmar.txt
pedro@ubuntu:~/gpg$
gpg
-u
C4A9EA7A
--output
firmar.txt.gpg
--sign
firmar.txt
Necesita una frase contrasea para desbloquear la clave secreta
del
usuario:
"Pedro
Gutirrez
(Manual
GPG
Genbeta
Dev)
<info@xitrus.es>"
clave DSA de 2048 bits, ID 18384645, creada el 2013-01-23
Y ahora para asegurarse la confidencialidad del documento (ahora que esta firmado por
nosotros) deberamos de cifrarlo con la clave pblica del destinatario.
Cualquiera con la clave pblica asociada a la que ha firmado el documento puede leerlo,
de la misma forma que desciframos un archivo (gpg -d [Archivo]) o verificndolo
nicamente con el comandogpg --verify [Archivo].
pedro@ubuntu:~/gpg$ gpg --verify firmar.txt.gpg
gpg: Firmado el mi 23 ene 2013 05:25:18 CET usando clave DSA ID 18384645
gpg:
Firma
correcta
de
Pedro
Gutirrez
(Manual
GPG
Genbeta
Dev)
<info@xitrus.es>
Y el resultado es la informacin del remitente, que podis comprobar vosotros con este
archivo y con la clave pblica de los pasos anteriores.
Resumen
GPG es una herramienta de cifrado muy potente y fcil de usar, que en principio, a la
mayora no nos hace falta, pero puede que se nos presente la necesidad de enviar algo
por medio inseguros (porque no haya ms remedio), hacindolo de esta forma podremos
hacerlo sin miedo ha que lean el contenido del archivo o nos den el cambiazo.
Este es un tema bastante extenso y si no lo acabas de entender puede ser un lo, pero
para preguntar estn los comentarios.
http://www.genbetadev.com/