31 enero 2011

"Este mensaje se auto-destruirá en cinco segundos", hace tiempo que ésta frase de película ha pasado a ser una realidad gracias a algunos servicios de comunicación, cuyos mensajes solo pueden ser leídos una vez.

Uno de ellos es Privnote, una web en la que guardamos un mensaje, se genera un link, y al ser abierto por el receptor se muestra el mensaje a la vez que se destruye y el link es dado de baja. Aquí tenéis una breve explicación técnica de cómo funciona escrita por el autor.

Sin quitarle méritos a tan genial idea, para usarlo tenemos que depositar nuestra confianza en el servicio de un tercero que no sabemos cómo está funcionando por debajo, y que, si pensamos de una forma un poco escéptica, puede estar aprovechándose de alguna manera. Por ésto mismo, llevaba tiempo dándole vueltas a la cabeza para montar mi propio "privnote" personal.

El funcionamiento del servicio es sencillo y además teniendo una pequeña descripción de cómo funciona podemos mejorarlo.

Al final, lo que ha salido como alternativa es: https://notes.pentbox.net/

La web trabaja de la siguiente forma:
  1. La nota es subida por el usuario.
  2. Se genera un ID único de 25 caracteres alfanuméricos.
  3. Se genera una clave de cifrado de 32 caracteres alfanuméricos que mezcla mayúsculas y minúsculas.
  4. La nota se cifra con la clave usando Rijndael de 256 bits en modo CBC y se almacena en un fichero del servidor.
  5. Se guarda el ID y la clave en una base de datos. Antes de almacenarse, la clave se cifra con un doble SHA1.
  6. Se le proporciona al cliente un link que contiene el ID y la clave.
  7. Cuando el receptor visita el link se hace un doble SHA1 de la clave y se comprueban ID y clave en la base de datos.
  8. Si coinciden se descifra, muestra y elimina el mensaje, además de eliminar ID y clave de la base de datos.

¿Cuáles son las ventajas de este modelo?

  • El administrador del sitio no puede ver las notas, ya que la clave de cifrado está almacenada con un doble SHA1.
  • Si se comprometiera la base de datos, las notas seguirían a salvo ya que se encuentran en el servidor web. En caso de comprometerse el servidor web o ambos, todo seguiría a salvo, ya que un atacante no puede recuperar las claves de cifrado, al igual que el administrador del sitio.
  • En caso de realizar fuerza bruta sobre la clave, tiene 32 caracteres alfanuméricos que mezclan mayúsculas / minúsculas en doble SHA1 por lo que es (aún) demasiado compleja como para romperla en un tiempo razonable.

El problema es que volvemos a lo de siempre, ¿podemos fiarnos de un desconocido?

En este caso no hay problema (y aquí la verdadera novedad), ya que os dejamos disponible la descarga del código fuente de la aplicación y las instrucciones de instalación para que cualquiera pueda ver de verdad cómo funciona, e incluso montarse su propio sitio web. Todo el trabajo está licenciado bajo GNU/GPLv3.

Por supuesto podéis usar el que hemos nombrado, ya que para algo es público y lo hemos compartido.

- Descarga de Safe Webnotes
- Instrucciones de instalación

20 comments :

fossie dijo...

Es una buena idea la de hacer notas seguras pero a fin de cuentas la idea es algo que ya se venia usando hace mucho tiempo con las postales virtuales que enviaban un link al destinatario para visitarlas y se destruian a los 30 días. Se que no es exactamente lo mismo pero es básicamente eso salvo que el período de tiempo es inmediato (con tal que se visita el link).

Creo que la pega del sistema es poder asegurar que se ha leído la nota ya que se puede hacer la petición de la url pero que el cliente no llegue a verla por ejemplo, por un corte de conexión. Y la nota se destruiría sin que el destinatario pudiera acceder a ella.

Otro problema con el modelo que comentáis es que solo es 100% seguro si lo instalamos en nuestro servidor web y lo usamos nosotros solos ya que somos los únicos que sabemos lo que hace el código. Si dejamos que otros utilicen el servicio los demás tendrán que fiarse de nosotros porque, aunque se ponga el código fuente a disposición del público ¿como pueden saber que es ese código fuente el que se está utilizando?. En resumen ¿que sentido tiene hacerlo público si solo nosotros podemos fiarnos?

Otra cosa que no tengo clara es que se comenta que el administrador del sitio web no tendría acceso a las notas ni a las claves por estar cifradas pero yo creo que como tiene el código fuente puede "parchearlo" y guardar la nota en texto plano antes de cifrarla para así poder leerla posteriormente así que cifrarla es la mejor opción para que nadie pueda comprometer el servidor pero no nos garantiza que el webmaster no pueda ver las notas. Incluso si se vulnera el servidor un atacante podría modificar el código de la web para guardar las notas en texto plano y poder verlas... jo que paranoico me estoy volviendo ;)

Saludos!
Buen artículo. Siempre es bueno conocer este tipo de servicios, nunca se sabe cuando nos serán de utilidad.

Anónimo dijo...

Es una idea muy interesante, al igual que la herramienta.

Da la sensación que podría tener utilidad en algún tipo de software más complejo de distribución de "material"... estoy en ello :). Es más, quizás si se introduce algún esquema de compartición de secretos, el emisor de la nota jugaría con dos sub-claves una que proporciona al proveedor y otra al destinatario. El proveedor solo almacenaría (le damos la confianza al algoritmo criptografico), no podría descifrar pq no genera la clave. El receptor necesitaría el enlace y la otra subclave (que le envia el emisor) para recuperar...

Es una idea mañanera :)
Alfonso Muñoz

Luis dijo...

@fossie
Alberto lo dice desde el primer momento (y yo creo que todos somos conscientes), todo queda supeditado a que confíes o no en el prestador del servicio, que es como todo en esta vida... o eres tu el que te encargas del servicio y por tanto sabes como funciona, o confías en las buenas maneras del otro :)

Luis Pérez Meliá dijo...

Me he gustado tanto la idea que he estado trasteando el código, le he metido de quien viene la nota, y el email. Sería interesante como dice anónimo que al entrar te pidiera una clave pre-compartida por ejemplo por teléfono.
http://notas.linvx.org/

fossie dijo...

@Luis, se que Alberto dice desde el primer momento que solo podemos confiar en el administrador pero me ha dado la sensación que al decir que las notas se guardaban encriptadas en la BD garantizaba que ni el admin pudiera verlas cosa que no es cierta.

Tal vez solo haya sido una sensación mia que lo he leído rápido.

Alberto Ortega dijo...

@fossie @Luis
Al final todo se basa en la confianza, pero esa es la razón por la que el código es libre, para dar más confianza, cosa que no pueden decir el resto de servicios del estilo :)
Siempre hay que fiarse de algo, el admin desconocido, el coleguilla que lo monta, el grupo de amigos que os lo montais, el servidor, la BD, la línea ...

@Alfonso
Me alegra :) Es una buena idea, de hecho, el funcionamiento se puede retocar bastante en aspectos de compartición de claves, etc.

FErArg dijo...

Muy bueno, estuve un tiempo uniendo 2 script PHP que encontré.

Uno generaba una "clave" aleatoria de 16 caracteres y el segundo encriptaba el texto, al unirlos, el resultado era el texto encriptado con una clave aleatoria, pero este tiene mejor pinta mucho mejor

Anónimo dijo...

Gracias

Anónimo dijo...

Estoy con fossie. El server llega a tener la nota en claro.

Y que el código sea abierto no quiere decir nada. A no ser que puedas leer el disco duro del servidor donde está alojada la copia del mismo utilizada en cada momento ;)

Anónimo dijo...

@Anónimo de las notas en claro
Volvemos a lo de siempre, al final te tienes que fiar de algo, sino NO uses la tecnología.

¿Leer el código fuente del servidor? Ok, y que lean los credenciales de la base de datos y la destrocen, ¿no?

El código abierto no quiere decir nada, ¿tampoco que te puedas montar tu propio servicio? Si lo montais en un grupo privado de confianza en el que todos teneis acceso al servidor, tampoco puedes fiarte, ¿no?

Que facilidad para descalificar tienen algunos ...

fossie dijo...

Para el otro "Anónimo"

¿Quien ha descalificado nada? solo comentamos que el código abierto no garantiza que lo que hay en el servidor sea el mismo código que te descargas por lo tanto no puedes garantizar que una web sea segura por ser de código abierto (cosa que no se estaba indicando aquí pero que yo lo comenté porque si se decia que el admin no podia tener acceso a las notas por estar cifradas)

Total que esta claro que si nos montamos nuestro propio servicio web con ese código si que nos podremos fiar pero nos podremos fiar yo y mi grupo de amigos que utilicemos el servicio pero TU no te podrás fiar si utilizas MI servicio ya que no sabes si he modificado el código fuente o no así que la idea sirve para una "red local" o algo muy particular o bien simplemente que nos fiemos de los servicios "en la nube"

La idea de las notas esta muy bien pero vamos que no es por crear polémica. Mi comentario solo fue que por mucho que hagamos con el código y por mucha seguridad que pongamos estamos a merced del admin.

José Angel dijo...

Mal comienzo, cuando pico el link, me sale un mensaje de "conexión no confiable".......

Alberto Ortega dijo...

@José Angel
Si, el certificado no está firmado para ese subdominio.

José Angel dijo...

Mal comienzo, cuando pico el link, me sale un mensaje de "conexión no confiable".......

Anonymous dijo...

Estoy con fossie. El server llega a tener la nota en claro.

Y que el código sea abierto no quiere decir nada. A no ser que puedas leer el disco duro del servidor donde está alojada la copia del mismo utilizada en cada momento ;)

Alberto Ortega dijo...

@fossie @Luis
Al final todo se basa en la confianza, pero esa es la razón por la que el código es libre, para dar más confianza, cosa que no pueden decir el resto de servicios del estilo :)
Siempre hay que fiarse de algo, el admin desconocido, el coleguilla que lo monta, el grupo de amigos que os lo montais, el servidor, la BD, la línea ...

@Alfonso
Me alegra :) Es una buena idea, de hecho, el funcionamiento se puede retocar bastante en aspectos de compartición de claves, etc.

Luis Pérez Meliá dijo...

Me he gustado tanto la idea que he estado trasteando el código, le he metido de quien viene la nota, y el email. Sería interesante como dice anónimo que al entrar te pidiera una clave pre-compartida por ejemplo por teléfono.
http://notas.linvx.org/

Luis dijo...

@fossie
Alberto lo dice desde el primer momento (y yo creo que todos somos conscientes), todo queda supeditado a que confíes o no en el prestador del servicio, que es como todo en esta vida... o eres tu el que te encargas del servicio y por tanto sabes como funciona, o confías en las buenas maneras del otro :)

fossie dijo...

Es una buena idea la de hacer notas seguras pero a fin de cuentas la idea es algo que ya se venia usando hace mucho tiempo con las postales virtuales que enviaban un link al destinatario para visitarlas y se destruian a los 30 días. Se que no es exactamente lo mismo pero es básicamente eso salvo que el período de tiempo es inmediato (con tal que se visita el link).

Creo que la pega del sistema es poder asegurar que se ha leído la nota ya que se puede hacer la petición de la url pero que el cliente no llegue a verla por ejemplo, por un corte de conexión. Y la nota se destruiría sin que el destinatario pudiera acceder a ella.

Otro problema con el modelo que comentáis es que solo es 100% seguro si lo instalamos en nuestro servidor web y lo usamos nosotros solos ya que somos los únicos que sabemos lo que hace el código. Si dejamos que otros utilicen el servicio los demás tendrán que fiarse de nosotros porque, aunque se ponga el código fuente a disposición del público ¿como pueden saber que es ese código fuente el que se está utilizando?. En resumen ¿que sentido tiene hacerlo público si solo nosotros podemos fiarnos?

Otra cosa que no tengo clara es que se comenta que el administrador del sitio web no tendría acceso a las notas ni a las claves por estar cifradas pero yo creo que como tiene el código fuente puede "parchearlo" y guardar la nota en texto plano antes de cifrarla para así poder leerla posteriormente así que cifrarla es la mejor opción para que nadie pueda comprometer el servidor pero no nos garantiza que el webmaster no pueda ver las notas. Incluso si se vulnera el servidor un atacante podría modificar el código de la web para guardar las notas en texto plano y poder verlas... jo que paranoico me estoy volviendo ;)

Saludos!
Buen artículo. Siempre es bueno conocer este tipo de servicios, nunca se sabe cuando nos serán de utilidad.

ductoreus dijo...

UN SERVICIO, SUPUESTAMENTE CONFIDENCIAL Y QUE ABOGA POR LA PRIVACIDAD, NO PUEDE NI DEBE UTILIZAR JAVASCRIPT, ES UNA PURA PATRAÑA PARA RECOPILAR INFORMACION.


SIMPLEMENTE PATETICO, Y AUN HAY GENTE "inteligente" QUE PICA