Avanzando hacia la meta
Según mi planificación inicial debería haber llegado a este punto hace ya algún tiempo, pero entre unas cosas y otras pues llego ahora. De todas formas la parte más compleja, ya sea diseño y arquitectura del sistema, está al 80%, es una versión funcional y a partir de este punto voy a iterar hacia la perfección.
¿A dónde he llegado? Ya tengo un gestor de contraseñas basado en el sistema de cliente servidor funcional. Tengo un servidor que exporta una interfaz xmlrpc (gecod) y un cliente para terminal (gecoc) que basandose en esta interfaz te da la funcionalidad esperada.
La funcionalidad implementada es:
- registro de nuevos usuarios
- crear una nuevo contraseña
- borrar una contraseña
- ver una contraseña
- listar todas las contraseñas
Esta funcionalidad es más que suficiente para un gestor de contraseñas, teniendo en cuenta que la creación de contraseñas incluye la generación de contraseñas aleatorias y que también se hace uso de cifrado para mayor seguridad.
Sin embargo GECO está pensado para gestionar, además de contraseñas, ficheros de configuración, pero esto lo implementaré más tarde, aunque lo he tenido en cuenta a la hora de crear la base de datos.
Con respecto al cliente he creado un cliente interactivo con una serie de ordenes, con ayuda y demás cosas, se puede ver cómo lo he hecho aquí. Lo he hecho de tal manera que cada función definida es un nuevo comando y se utilizan las cadenas de documentación de python para mostrar la ayuda.
Usabilidad:
Al basarme en el modelo cliente servidor estoy metiendo un poco de complejidad a la forma de llegar hasta la información almacenada ya que es necesario recordar al menos dos contraseñas "seguras" para poder acceder al resto.
Al estar la información almacenada en un servidor externo, es necesario tener un usuario y contraseña en ese servidor para poder gestionar todas las contraseñas que se almacenen, por lo tanto tendremos que tener un usuario y contraseña para acceder desde las diferentes interfaces a un servidor geco.
Por otra parte como las contraseñas pueden almacenarse en un servidor que no controlemos es necesario cifrarlas con un algoritmo simétrico, para lo cual hace falta usar una clave maestra de cifrado de passwords (esta nunca llegará a ningún servidor).
Supongo que para servidores locales se puede evitar el paso de la autenticación y proteger la base de datos basandose en el sistema de ficheros, así actuaría como un gestor de contraseñas tradicional, pero en cuanto implemente la posibilidad de sincronizar diferentes servidores le dará mucha más potencia.
A partir del cliente para terminal se puede empezar a trabajar en diferentes clientes (web, gtk, qt, etc).
Algoritmos de cifrado
Como tengo pensado hacer un cliente web es necesario que las contraseñas se cifren con un algoritmo que tenga una implementación en javascript y en python, así pues me he basado en SlowAES para cifrar y descifrar y así tener asegurado que es posible descifrar y cifrar desde el navegador. Esta librería también incluye una implementación en ruby por lo que es posible crear un cliente basandose en ruby. Por supuesto también he tenido en cuenta que el metodo de cifrado puede ser variable por lo que intentaré añadir más sistemas de cifrado.
Nada más por hoy, yo voy a empezar a utilizarlo y a tener una contraseña aleatoria para cada servicio web.




Comments
Very interesting article.
Very interesting article. Thanks