lunes, febrero 28, 2005

Lección del dia: Passwords

Ante todo dejarme aclarar que no soy un experto en criptografía. Muchos de vosotros para utilizar el ordenador tendréis que escribir un usuario y/o contraseña y seguramente lo haréis como una cosa muy normal, pero fijémonos más en la contraseña.


¿Cómo sabe el ordenador que contraseña tienes? Lógicamente porque guarda en “algún sitio” cada usuario con su contraseña equivalente, y cuando tu la introduces la compara con la que el ordenador tiendo dejándote entrar sólo si coinciden. Si estas contraseñas están en alguna parte quiere decir que nosotros podríamos buscar donde se encuentran y ver la contraseña de cada usuario, esto seria un grave problema de seguridad. Para que esto no ocurra generalmente estas contraseñas están codificadas o encriptadas, o sea, que a simple vista no podamos ver la contraseña.

¿Podemos decir ahora que la contraseña está segura? Pues aun no, porque depende mucho del método que se haya utilizado para codificarla. Por ejemplo un manera de hacerlo podría ser asignar a cada letra de la contraseña su siguiente letra en el abecedario, así tendríamos que si nuestra contraseña es “abcd” aplicando el método sería “bcde”. Como habréis pensado este sistema es una tontería y es muy frágil, con lo que habría que buscarlos más complicados. Podríamos encontrar un método que fuera muy complicado, por ejemplo asignaré un valor a cada letra y realizar un numero de operaciones más o menos complicadas para asegurarnos que sea complicado. Aun así esta codificación no sería segura porque podríamos encontrar la manera de invertir las operaciones y encontrar la contraseña inicial.

¿Así pues como podemos conseguir un sistema seguro? Cuando queremos codificar contraseñas generalmente se utilizan funciones matemáticas no invertibles -para los que no estéis acostumbrados al lenguaje matemático una función, podéis consultarlo aquí-. Si es no invertible nos aseguraremos que no habrá una forma matemática de obtener la contraseña a partir de la codificada. Esto nos lleva a una pregunta nueva:

¿Entonces como se puede comprobar la contraseña cuando entramos si no se puede invertir? Esto tiene una solución muy fácil se trata de coger la contraseña que hayamos introducido, codificarla utilizando la función concreta y luego comprarla con la que ya esta codificada dejando entrar solo si son iguales. Este método que he descrito es básicamente el que utiliza Linux para dejar entrar en sus sistemas, y de momento el sistema ha funcionado a la perfección.

La parte más interesante de todo esto es encontrar funciones matemáticas que no sean invertibles, pensad un poco en alguna función matemática no invertible.

2 comentarios:

R. Senserrich dijo...

Gerard, puedes añadir una explicación a cosas como "¿por qué "aaaaaa" es un mal password?".

Sería un detalle.

Groucho Marx dijo...

Ok, ya creare un nuevo Post explicando porque "aaaaa" o tambien el conocido metodo "qwerty" son malos ejemplos de password.