domingo, mayo 14, 2006

Contraseñas seguras

Un cliente llega y solicita un sistema que haga un millón y uno de cosas, desde ese momento empieza el ciclo, el estudio, el análisis, el diseño, la programación, las pruebas, la presentación, la entrega... nos preocupamos por un buen diseño de base de datos que sea flexible a futuras modificaciones (ya que siempre las hay), nos preocupamos por una correcta estructura y modelado de datos, el mejor diseño de plantilla tanto de archivos como de variables, las metodologías de acceso a la información, una correcta arquitectura de ésta... no obstante, a veces dejamos atrás un tema muy importante a tomar en cuenta, los niveles de seguridad a implementar para el acceso a la información, en sí me refiero a los niveles de seguridad de las contraseñas utilizadas para ingresar a secciones privadas o de acceso exclusivo de estos sistemas.

Puedo señalar en este momento dos actores en el escenario: (a) el cliente y (b) el programador. Definamos al cliente como el dueño de la cuenta de usuario protegida con una contraseña para ingresar a una sección especial del sistema, dejando fuera las suposiciones, identificaremos a este actor como un ente sin conocimientos avanzados de seguridad, razón por la cual el actor (b), el programador, debe, y es su responsabilidad, tomar las precauciones iniciales para que la cuenta del usuario posea una contraseña segura y darle la oportunidad a éste, de que pueda cambiarla proporcionándole los mecanismo necesarios para llevar a cabo la operación.

La razón por la cual hago énfasis cuando hago referencia a que "el programador, debe, y es su responsabilidad, tomar las precauciones iniciales...", es porque la responsabilidad sobre cuán segura es una contraseña también recae sobre el usuario, al personalizar o cambiar su clave por primera vez. La responsabilidad del programador recae sobre la arquitectura sobre la cual diseña el sistema de contraseñas de usuario, más específicamente, los niveles de encriptación de ésta.

Por la prontitud de cumplir con las fechas de entrega, en ocasiones solemos entregar cuentas de usuario con contraseñas iniciales relativamente inseguras para determinados sistemas, no obstante, debido a los sistemas que hemos estado diseñando últimamente, cuya información es relativamente sensible, en el departamento se ha iniciado una buena práctica de investigación acerca del asegurar que estas contraseñas sean en realidad una llave de acceso única para cada cliente o usuario, con los niveles de seguridad aceptables como para que sean lo suficientemente difíciles de romper o violar. Cada nuevo resultado que encontramos, nos lleva a realizar las actualizaciones pertinentes en los sistemas que se encuentran en producción, asegurando de esta forma que éstos cuenten con la infraestructura necesaria acerca del tema en cuestión.

Para el conocimiento general, dentro de los métodos que suelen ser utilizados para encontrar o romper contraseñas, está la "Suposición", el "Ataque de Diccionario", y el "Ataque de Fuerza Bruta", los cuales consisten en realizar una comparación contra un diccionario de datos (básicamente), hasta dar con la contraseña en cuestión. A partir de aquí, podemos deducir que aquellas contraseñas conformadas por nombres familiares, fechas de nacimiento, direcciones son vulnerables a estos tipos de ataque.

Actualmente hemos estado trabajando en el estudio de mecanismos para que el dar de alta a una cuenta de usuario, sea una operación cada vez más segura y personal.

¿Cuál podría ser la solución para entregar información acerca de cuentas de usuario y su contraseña de manera virtual?. Dependiendo del diseño y claro está las exigencias del sistema, los requerimientos solicitados, el tipo de información que está protegido por contraseña, las siguientes podrías ser algunas soluciones para llevar a cabo la operación, métodos que podrían también aplicar para recordar contraseñas olvidadas:
  • Entrega vía email: la mayoría de los sistemas, hasta donde he podido notar, entregan la información de la cuenta de usuario vía email a la cuenta de correo electrónico con que el usuario se registró.
  • Otros mecanismos podrían ser el enviar esta información a dispositivos móviles, como teléfonos celulares, teniendo como premisa que éstos son de uso exclusivo del dueño de la cuenta de usuario.
En una próxima entrega: Métodos de encriptación de contraseñas PHP/MySQL.

Fuentes consultadas:

+ http://es.wikipedia.org/wiki/Contraseña
+ http://world.std.com/~reinhold/diceware.html
+ http://nauscopio.coolfreepages.com/...
+ http://www.microsoft.com/spain/empresas/seguridad/...
+ http://es.wikipedia.org/wiki/MD5
+ http://www.cryptoforge.com.ar/seguridad.htm

1 comentario:

El Ninja dijo...

El problema de todo S.O. y Aplicación son: "Los benditos Usuarios..." No los soportamos pero tampoco podemos existir sin ellos .... ja ja ja ja ... :-D