Get Firefox

Firefox 3.5

stopsoftwarepatents.eu petition banner Manifiesto por la liberación de la cultura 
No a la traza privada
Últimos cambios
Últimos Cambios
Vote for Public Maps - Reject INSPIRE! Geocaching
Mi estado actual en Jabber/XMPP: - jabberES - jabber.org

BulletProof

Última Actualización: 24 de abril de 2006 - Martes

Suscríbete a la lista de correo de BulletProof, o revisa los archivos de la lista.


Introducción

BulletProof es un programa escrito en Python y que debería funcionar en casi cualquier sistema que disponga de un intérprete Python. El programa se ha probado en Microsoft Windows y en diversos sistemas Unix, pero no dispongo de ningún sistema Apple Macintosh para poder probarlo también en esas máquinas.

BulletProof nació para dar respuesta a la necesidad de poder tener conversaciones absolutamente privadas y confidenciales a través de una infraestructura ajena como puede ser una red de IRC. Administro varios servidores de IRC y sé perfectamente que no se graban conversaciones, pero cuando se está haciendo una entrevista de trabajo, se están discutiendo temas de empresa o ligando :-), y nuestras conversaciones atraviesan decenas de líneas de datos y de máquinas, toda prevención es poca.

He aprovechado mis conocimientos y experiencia en el mundo de la criptografía para crear un producto que garantiza confidencialidad incluso cuando se usan redes "enemigas".

El programa está escrito en Python porque es un lenguaje que me encantó desde el primer momento que lo ví, y me asegura una portabilidad muy simple entre diferentes plataformas. La prueba de ello es que el mismo código BulletProof funciona tanto en máquinas con MS Windows, como en máquinas Unix (incluyendo Linux, Solaris, etc). No he podido probarlo en Macintosh, desgraciadamente.


Instalación y configuración


Comandos y modo de empleo

BulletProof interactúa con el usuario a través de comandos que se introducen a través del cliente IRC que se esté utilizando.

Los detalles dependen del cliente de IRC concreto, pero lo normal es enviar comandos a BulletProof utilizando el modo "raw". Es decir, si queremos ver la versión de BulletProof que estamos utilizando, podemos hacer "/raw bulletproof version". Todos los comandos siguen el mismo esquema, con el "raw", y el comando "bulletproof".

Los comandos disponibles son:

El sistema funciona de la siguiente manera:


Ejemplo de Script

No es mi trabajo hacer scripts, pero pongo un ejemplo para que se vean las posibilidades de integración sencilla con los clientes típicos:


Detalles técnicos de funcionamiento

BulletProof utiliza RC4 como mecanismo de cifrado y descifrado. Se eligió ese sistema por ser muy eficiente y seguro, y no incrementar el tamaño del texto cifrado respecto al texto sin cifrar (algo que sí ocurriría si emplease un cifrado de "bloque").

Lamentablemente RC4 es un cifrado en flujo ("stream") y exige que el emisor y el receptor estén perfectamente sincronizados, lo que no es posible en un entorno IRC en el que puede haber split, lag, varios emisores enviando al mismo canal simultaneamente, etc.

El enfoque adoptado consiste en inicializar el sistema RC4 en cada línea transmitida y recibida, para sincronizar el transmisor y el receptor. Ello incrementa ligeramente el tamaño de los datos intercambiados, pero se logra que el sistema funcione sin que el emisor y el receptor tengan que cumplir ninguna restricción en absoluto.

Los detalles de implementación del cifrado son los siguientes:

A la hora de decodificar, procedemos a la inversa:

La estructura del paquete de datos, prescindiendo de la codificación para hacerlo transparente al IRC, es la siguiente:

   inicialización RC4                      verificación
+-----------------------+                  +---------+
[aleatorio1] [aleatorio2] [texto original] [aletorio1]
  4 bytes      4 bytes        n bytes        4 bytes
+-----------------------+ +--------------------------+
       no cifrado                   cifrado

ATENCIÓN:

A partir de la versión 1.71, se incluye una admiración cerrada ("!") al principio de cada línea codificada, a modo de control de versión del programa. Ello permite ampliar en el futuro el programa para que soporte una gran variedad de sistemas de autentificación, cifrado, intercambio de clave, etc.

La codificación y decodificación se realiza exactamente igual que se ha descrito más arriba, salvo por la adición de una admiración cerrada al principio de la línea transmitica, una vez cifrada y codificada.

CLAVE DE LÍNEA


Historia



Get Firefox Python Zope ©2000-2006 jcea@jcea.es