Mostrando entradas con la etiqueta criptografia. Mostrar todas las entradas
Mostrando entradas con la etiqueta criptografia. Mostrar todas las entradas

jueves, 22 de enero de 2015

Mientras encripatmos a alguien, hablemos de cifrado y así.


Muchas veces confundimos el codificar, con cifrar, con encriptar ( No, nos negamos a meter a alguien en una cripta.) que no, no es encriptar, por que cada que dices encriptar, dios mata un gatito, y los gatitos son como las direcciones IPv4, ya no hay mas.

Pero hablemos de conceptos.

¿Qué es codificar?

En términos muy simples es expresar una misma información de una forma distinta, es decir, transformamos nuestros símbolos (Caracteres) en otro sistema de representación, por eso, en realidad no estas ocultando o dificultando el acceso a la información, y el ejemplo mas común es el lenguaje.

Supongamos que tenemos un mensaje: "Hola, mundo"

Es simple, es burdo, pero es lindo, ahora tenemos el mismo mensaje en ingles: "Hello world"

Foneticamente y morfologicamente son distintos, pero el significado es el mismo, simplemente codificamos el mensaje, y por eso se puede leer de otra manera, en este caso, en ingles.

Y bien, ¿Qué es cifrar?

Es aplicarle a un mensaje un algoritmo y una clave, y esto nos da como resultado, un mensaje cifrado, vulgarmente conocido como criptograma.

Pero cuando hablamos de algoritmo, hablamos de un proceso que debe ser siempre unívoca, lo que significa que una entrada siempre provoca una misma salida o resultado, pero como no queremos eso, tenemos que variar la entrada y para ello usamos una clave.

Supongamos que yo tengo un secreto (Una clave) y utilizo este secreto para cifrar un mensaje. Si yo quiero compartir este mensaje con alguien mas, tengo que compartir mi secreto con esta otra persona, y luego esta persona aplicar mi secreto para poder leer el mensaje. Por lo que podríamos decir que, nuestro mensaje es tan seguro como mantengamos oculto nuestro secreto. Esta técnica se le conoce como criptografia simétrica.

De aquí nace otro concepto interesante en los años 70's que pretendió arreglar el inconveniente del secreto pre-compartido con un juego de llaves, donde una se una en un sentido y la otra, en otra (Por que, obvio, no creo que sean para lo mismo, no tendría caso). Para este punto, una de ellas es la llave privada, que nadie debe tener, y la otra es una publica, que puedo compartirla con quien yo quiera. Y a esto se le llamo criptigrafía asimétrica.

Cuando creamos estas llaves con PGP o GPG, ponerle una frase de paso o clave a la llave privada, es obligatorio (O muy recomendado, de verdad, tienen que ponerle una clave, ya les diré por que). Pero algunas veces, cuando usamos RSA o SSL no lo hacemos por que suponemos que están en un sitio seguro y... nadie entra a sitios seguros a robar información, o ¿si? El caso es que, supongamos que nuestra llave privada cae en otras manos que no sean las nuestras y no cuenta con una frase de paso (clave), pues esta persona podrá leer nuestros mensajes cifrados y saber donde ocultamos las galletas de chispas de chocolate que no queremos compartir con el resto de la humanidad.

Gracias a la criptografia asimétrica, hoy podemos hace una firma. pero pongamos en contexto algo simple del funcionamientos de las llaves. Y es que si bien, todo mundo (o los que queramos) tiene nuestra llave publica, el proceso de cifrado es a la llave publica y el proceso de decifrado es por lo tanto, a la llave privada, pero si ¿esto lo hacemos al revés? Aplicando el proceso de cifrado a la privada y el decifrado a la publica. Y si, es aquí donde entra la tan conocida firma digital o electrónica, es decir, solo tu, que tienes tu llave privada puedes generar una firma valida y cualquiera con tu llave publica verificar la integridad, la autenticidad y el no repudio de la información entregada, por lo que luego no puedes venir a decirle que no haz escrito el correo mandado. ¿Pero como de que no? Tengo la prueba matemática para demostrarlo!

Una cadena es tan fuerte como el mas débil de sus eslabones.

Si bien, el cifrado es algo (mucho) útil a la hora de mantener segura nuestra información y poder asegurar la veracidad de la información que se maneja, de nada sirve que tengamos una llave de 4096 bits si para comparar las firmas digitales lo hacemos por medio de la comparación de cadenas: Nintento, nunca cambies, por favor.

Existe desde hace unos cuantos meses o miles de años, desde los algoritmos clásicos y de eso, hace ya mucho los ataques criptograficos o el criptoanalisis, que consiste en descubrir debilidades en los algoritmos criptograficos que nos permitan obtener pistas para decrifrar las claves.

Ahora, supongamos, mi querido lector, que tenemos el algoritmo RSA que se basa en el problema matemático de la factorización de números enteros, en el cual usaremos nuestra computadora cuántica que funciona con aire y que compramos en china a un buen precio para tratar de romper un mensaje cifrado. Esto es un coste exponencial, que en la teoría de la complejidad, si nosotros aumentamos un poco la complejidad de la frase de paso (clave), poder romperla se vuelve un lio  hasta el punto que no se podría... o si, pero nos llevaría mas tiempo del que lleva el universo siendo universo, así que no esta nada mal desde ese punto de vista.

Así que, la criptografia no nos hace la vida mas fácil, pero si mas segura. Tiene un costo, pero tiene beneficios que cada uno de ustedes le dará el peso que crea necesario.

Con amor: Uetiko


sábado, 5 de julio de 2014

GnuPG creación de llaves y exportación para su uso en otros clientes

El arte de encriptar es la de meter a una persona en una cripta y no dejarla salir de ahí, pero la de cifrar es mantener nuestra información sensible segura y que nadie mas que nuestro circulo de confianza pueda leer.

La criptografía no es una moda o algo que se invento de un par de años a la fecha, es una serie de técnicas y métodos tan antigua como la propia humanidad Y aunque ahora la tecnología nos permite algo mas confiable, no es algo que muchos de nosotros usemos o que incluso, conozcamos.

GnuPG o simplemente GPG, es un programa de código abierto que remplaza a la suit de criptografía PGP y que utiliza el estándar denominado OpenPGP, así que eso ya es un punto bueno para su uso. Este pequeño cifra mensajes usando un par de llaves asimétricas que deben generar ustedes, pero también se puede añadir una firma para demostrar que ustedes, mis niños, son los autores del mensaje en cuestión y que no es algún mono haciendo de las suyas a su nombre.

Hasta aquí se escucha bien y... ¿Cómo demonios se usa?

GPG se usa por medio de la consola de comandos, aunque existen implementaciones en entorno gráfico que te ayudaran a la creación, exportación y administración de tus llaves, pero hoy no les enseñare a usar alguna de ellas, si no que lo haremos de nuevo de la forma artesanal, así es, por medio de nuestra amiga consola.

lo primero que debemos hacer es tener instalado gpg, que ya casi la mayoría de unix o BSD's ya tienen por defecto, si no es así para su linux favorito, pueden descargarlo de su gestor de paquetes o bien, bajar el código y tener un buen rato de soledad compilandolo.

Una vez instalado, no requieren ser todo poderoso alias, root para su ejecución, tan solo tener ganas de hacer las cosas.

Así que vamos a crear las llaves con el siguiente comando, recuerden que esto es solo una bella receta, pero pueden agregar sus ingredientes preferidos viendo el manual de gpg en su linea de comandos con man.

$gpg --gen-key
Esto les dará una salida, pero que aun así, será interactiva y les pedirá los parámetros necesarios de forma amigable y que les dirá donde pondrá los archivos creados con extención gpg.

Como gpg nace con la insignia de libertad, no usara algoritmos privativos o con patentes como IDEA, que es la piedra angular de pgp, así que usara algoritmos como ELGamal, CASTT5, Triple DES, AES y blowfish.

Siendo DSA y ELGamal sus algoritmos por defecto, los dejará escoger algún otro que ustedes prefieran, así mismo les dirá que usara una llave de 1024 bits, pero que igual, podrán decirle que quieren algo mas de bits, por ejemplo, ya es recomendable usar 2048 o por que no, ponernos serios con 4096 bits para que... no sé, tengan mas tranquilidad en sus almas a la hora de cifrar o firmar sus mensajes.

También les pedira que indiquen si quieren que sus llaves tengan una fecha de caducidad o que sean eternas, esto ya dependerá de sus gustos o paranoia a la hora de pensar en compartir su llave publica.

Otros datos importantes y que no deben de dejar si llenar serán:

  • su nombre real
  • dirección de correo electrónico
  • un comentario (Opcinal)
  • Y si, una clave de paso (Recomiendo que lo hagan, por si su llave privada cae en manos nada confiables)
Ya tengo mis llaves, y ahora como demonios las administro o veo...

Administrar tus llaves es tu responsabilidad, ya que puedes crear tantas como requieras, una para los amigotes, para la novia, para tu trabajo, etc, etc, etc, por lo cual uno siempre debe saber cual es cual y tener una idea para poder hacer el buen uso de ellas, así que gpg nos da la opción de listarlas mediante dos argumentos al comando gpg

$ gpg -k
o bien
$ gpg --list-keys

Esto nos desplegara la longitud de las llaves publicas y privadas, así como en usuario (Tu nombre) y un hash que las identificará, algo así como:
/home/uetiko/.gnupg/pubricng.gpg
--------------------------------------
pud 2048D/CA5B3485 2014-07-05
uid                                         Uetiko
sub  2048C/EF7A4E93 2014-07-05
Pero eso ¿qué carajos quiere decir?, digo, se ve padre y esta bien chido, pero en que idioma esta... Bien, con calma chamacos.


  • pud: Es la llave publica.
  • sud: es la llave privada
  •  2048D: Es la longitud de bits que escogieron.
  • CA5B3485: Es el ID de la llave.
  • Uetiko: Es el nombre real de ustedes (Bueno... debe ser su nombre real por convención y buenas practicas)
pueden exportar sus llaves en gpg para su uso otros lugares como correo, desgraciadamente su llave esta en ansii, por lo que no todos los programas lo podrán entender y requerirán algo mas legible, por ejemplo algún cliente en web, donde un cat a la llave no podrá ser de utilidad y les dirá que la armadura ansii no es correcta o algún otro error a la hora de verificar o leer la codificación, lo que hará imposible su uso, pero si esto fuera así y ya, sería inútil, aburrido y nada benéfico su uso real en el mundo.

Para ello podemos exportarlas en formatos amigables y así seguir manteniendo una comunicación segura usando los clientes que queramos usar. Y para ello exportaremos las claves por partes, primero la publica para pasarla a nuestros amigotes y luego la privada, para que la usemos en nuestros clientes de confianza.

Exportando la llave publica

Como gpg tiene muchas opciones para nuestros gustos mas exquisitos, podemos usar una forma simple, pero muy buena para cocinar nuestra llave publica en ese formato amigable que deseamos.
$ gpg --armor --export > miLlavePublica.asc

Esto nos dará como salida algo asi como:

 -----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v1.0.1 (GNU/Linux)Comment: For info see http://www.gnupg.orgmQGiBDkHP3URBACkWGsYh43pkXU9wj/X1G67K8/DSrl85r7dNtHNfLL/ewil10k2q8saWJn26QZPsDVqdUJMOdHfJ6kQTAt9NzQbgcVrxLYNfgeBsvkHF/POtnYcZRgLtZ6syBBWs8JB4xt5V09iJSGAMPUQE8Jpdn2aRXPApdoDw179LM8Rq6r+gwCg5ZZapGNlkgFu24WM5wC1zg4QTbMD/3MJCSxfL99Ek5HXcB3yhj+o0LmIrGAVBgoWdrRdBIGjQQFhV1NSwC8YhN/4nGHWpaTxgEtnb4CI1wI/G3DK9olYMyRJinkGJ6XYfP3bcCQmqATDF5ugIAmdditnw7deXqn/eavaMxRXJM/RQSgJJyVpbAO2OqKe6L6Inb5HkjcZA/9obTm499dDMRQ/CNR92fA5pr0zriy/ziLUow+cqI59nt+bEb9nY1mfmUN6SW0jCH+pIQH5lerV+EookyOyq3ocUdjeRYF/d2jl9xmeSyL2H3tDvnuE6vgqFU/Nsdvby4B2Iku7S/h06W6GPQAe+pzdyX9vS+Pnf8osu7W3j60WprQkUGF1bCBHYWxsYWdoZXIgPHBhdWxnYWxsQHJlZGhhdC5jb20+iFYEExECABYFAjkHP3UECwoEAwMVAwIDFgIBAheAAAoJEJECmvGCPSWpMjQAoNF2zvRgdR/8or9pBhu95zeSnkb7AKCm/uXVS0a5KoN7J61/1vEwx11poLkBDQQ5Bz+MEAQA8ztcWRJjW8cHCgLaE402jyqQ37gDT/n4VS66nU+YItzDFScVmgMuFRzhibLblfO9TpZzxEbSF3T6p9hLLnHCQ1bDHRsKfh0eJYMMqB3+HyUpNeqCMEEd9AnWD9P4rQtO7Pes38sV0lX0OSvsTyMG9wEBvSNZk+Rl+phA55r1s8cAAwUEAJjqazvk0bgFrw1OPG9m7fEeDlvPSV6HSA0fvz4wc7ckfpuxg/URQNf3TJA00Acprk8Gg8J2CtebAyR/sP5IsrK5l1luGdk+l0M85FpT/cen2OdJtToAF/6fGnIkeCeP1O5aWTbDgdAUHBRykpdWU3GJ7NS6923fVg5khQWguwrAiEYEGBECAAYFAjkHP4wACgkQkQKa8YI9JamliwCfXox/HjlorMKnQRJkeBcZiLyPH1QAoI33Ft/0HBqLtqdtP4vWYQRbibjW=BMEc-----END PGP PUBLIC KEY BLOCK-----
Bien, ya podemos descansar un poco, pero el problema es que esto es la publica... Y la privada? Por que la necesitamos nosotros para cifrar o firmar nuestros preciados mensajes... Bien, usando el siguiente comando podremos exportar esa preciada llave que debemos guardar lo mejor posible.

$ gpg --export-secret-key -a > miLlaveSecreta.asc
Esto nos generara una salida parecida a la anterior, pero nos dirá que es private y no public, por lo que ya podremos hacer uso de esta llave en nuestros clientes que no soportan la extensión de gpg.

La privacidad es un derecho que debemos tener, pero es su responsabilidad crearla y mantenerla de esta forma.

Con amor: Uetiko.