sábado, 20 de julio de 2019

Tutorial como enviar correos con el estilo de Edward Snowden en Python (Parte 1)

Tutorial como enviar correos con el estilo de Edward Snowden en Python (Parte 1)


Muchas veces hemos escuchado o leído en la red de redes, casos inimaginables sobre personas que se atreven a sacrificar parte de su vida solo para que nosotros podamos ver la verdad. Verdad que por el control total de empresas poderosas o agencias gubernamentales nos frenan a que podamos percibirla.

En esta entrada te hablare de una persona y un método que uso para enviar un correo electrónico a su confidente:


Ese mis queridos lectores es "Edward Snowden", un consultor tecnológico estadounidense, informante, antiguo empleado de la CIA (Agencia Central de Inteligencia) y de la NSA (Agencia de Seguridad Nacional).

Famoso por que en junio de 2013, Snowden hizo públicos, a través de los periódicos The Guardian y The Washington Post, documentos clasificados como alto secreto sobre varios programas de la NSA, incluyendo los programas de vigilancia masiva PRISM y XKeyscore.

En esta entrada yo les quiero enseñar un método que uso Snowden para que no pudieran leer los mensajes de correo electrónico pero usando el todopoderoso lenguaje de la serpiente "Python".

GNUPG (GNU Privacy Guard)

Es una herramienta de cifrado y firmas digitales desarrollado por Werner Koch, que viene a ser un reemplazo del PGP (Pretty Good Privacy) pero con la principal diferencia que es software libre licenciado bajo la GPL. GPG utiliza el estándar del IETF denominado OpenPGP.

Esta herramienta nos servira para poder tener confidencialidad punto a punto, lo que quiere decir es que los únicos que podrán ser lectores de los mensajes, son el receptor y transmisor.

Sistema de clave pública o asimétrico

No pudiera morir en paz si no les explicara esto ya que es necesario para que entiendan GPG. La criptografía asimétrica también llamada criptografía de clave pública o criptografía de dos claves, es el método criptográfico que usa un par de claves para el envío de mensajes. Las dos claves pertenecen a la misma persona que recibirá el mensaje. Una clave es pública y se puede entregar a cualquier persona, la otra clave es privada y el propietario debe guardarla de modo que nadie tenga acceso a ella. Además, los métodos criptográficos garantizan que esa pareja de claves sólo se puede generar una vez, de modo que se puede asumir que no es posible que dos personas hayan obtenido casualmente la misma pareja de claves.

Un ejemplo típico que se encuentra en internet pero es muy bueno para aclarar es el siguiente: Imagina que tienes un caja fuerte abierta que te envío tu amigo Josef, en esa caja tu introducirás y cerraras con un mensaje que contenga "Hola!", lo envías por un bote para que le llege a Josef, este lo abre y lo lee. El único que conoce la combinación de la cerradura es Josef por lo tanto el único que puede ver el contenido.

Que empiece el juego ...


Ahora si como dice el titulo de la entrada les mostrare como enviar mensajes por correo electrónico, aunque debo aclarar que esto es algo más que un simple envío por correo, ya que podrás hacerlo hasta usando los principales medios de comunicación.

Un resumen de toda la explicación es que necesitaremos:


  1. Dos claves: Una Pública y Una Privada
  2. Pública: Se la envías a el que quieras que te envíe un mensaje cifrado
  3. Privada: La tendrás y nunca la revelaras
  4. Necesitamos la clave pública de la persona que queremos enviar el mensaje. En mi caso y también en el tuyo para este ejemplo usa tu misma clave pública

Instalación:

Quiero aclarar que puede funcionar en "Windows", pero es recomendable usar cygwin o WSL (Windows Sub-System for Linux), ya que si usamos e instalamos GNUPG desde python en Windows tendremos errores por parte de la aplicación:

# Primero instalamos GNUPG en nuestra distribución/Sistema operativo y luego lo instalamos para python

sudo apt-get install gpg
sudo pip install python-gnupg

# Generamos nuestras llaves. En este paso nos mostrara información que tenemos que rellenar, como correo electrónico (No es necesario que coloques el de gmail, hotmail, etc; puede ser uno inventado pero procura que sea único o poco conocido), nombre y apellido, comentarios, etc.

gpg --gen-key
...

# Ejecutamos python y empezamos a usarlo

from gnupg import GPG # Importamos el modulo
gpg = GPG() # Como esto es manejado por objetos creamos una variable llamada gpg y empezamos a escribir y usar sus atributos, metodos, etc
dato = 'Hola!, soy un mensaje que sera cifrado :D ...' # Creamos una variable que contendrá el dato a cifrar
encrypted = gpg.encrypt(dato, "prueba@ejemplo.org") # Creamos una variable llamada encrypted que cifrara la variable dato usando como destinatario prueba@ejemplo.org. Tengo que aclarar que es una dirección de prueba a la que se la quieren enviar
print(encrypted.data) # Usamos el atributo de la instancia para poder leer el dato cifrado. verán que les mostrara un mensaje ilegible
decrypted = gpg.decrypt(encrypted.data, "1234567890abc") # Ahora supongamos que somos el receptor del mensaje. Colocaremos como primer argumento el dato cifrado que nos enviaron por correo y segundo parámetro la clave de descifrado
print(encrypted.data) # Imprimimos el dato
print(encrypted.data == dato) # Comparamos si el dato decifrado es igual a la variable dato

Imágenes:



Espero les guste, mientras se familiarizan con la criptografia asimétrica, háganme comentarios si desean una segunda parte donde comenzaremos a crear nuestro cliente de correo electrónico con cifrado asimétrico y veremos a fondo lo que nos trae GPG usando solamente python (Como generar claves desde python, firmar datos, entre otros).

- DtxdF

5 comentarios :
Write comentarios
  1. Excelente. En estos días ya no se respeta la privacidad y esto ayuda a que no se vulneren nuestros mensajes privados.
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tu comentario. Tienes totalmente la razón, falta la parte 2 (dos) donde explico mucho más y ademas de como enviarlo por correo electrónico u otro medio de comunicación.

      Eliminar
  2. Excelente aporte... seria interesante la parte 2 de crear un cliente de correo con python

    ResponderEliminar
  3. Interesante y muy necesario el cifrado con GPG de nuestro correos, por lo que veo gmail no cifra nuestros email y cualquier persona con el conocimiento necesario los puede leer, ¿o estoy equivocado?.

    ResponderEliminar
    Respuestas
    1. Es sumamente importante este u otro algoritmo de cifrado robusto, pero la discusión radica en que la conexión ya esta cifrada con starttls/tls, pero eso lo único que nos resguarda es de que un intermediario (Atacante-Hacker malicioso), no nos intercepte los mensajes en el envío, el problema esta en Google u otra organización/empresa/compañía/etc; Ya que ellos a pesar de que tengan sus propios cifrados dentro de sus aplicaciones, pueden visualizar nuestro mensajes e incluso una persona que entrara a nuestra cuenta (Ejemplo: Nos roben el teléfono y tengamos la sesión de Gmail abierta); Si usamos esta técnica evitamos esto, "Al menos hasta que se logre hacer una computadora cuántica y usen el algoritmo de Shor".

      Eliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .