Este es un post de recomendacion 🙂
Creo que en todo tutorial de desarrollo de aplicaciones, sobre todo para web, en donde seguro va a haber multiples usaurios, recomienda que no se guarden las claves en texto plano, ya sea que se graben dentro del código (sucede), en un archivo de texto (también), o en una base de datos.
Bueno, por qué no es buena idea ?
Empecemos porque todos cometemos errores, y hay algunas personas que solo cometen errores, entonces, toda aplicación va a tener algún defecto, frecuentemente el defecto va a ser suficientemente grave como para que un usuario bien o mal intencionado pueda leer la lista de usuarios del sistema, y sus respectivas claves.
Entonces que problema tiene con que el usuario vea algo como:
root:827ccb0eea8a706c4c34a16891f84e7b
o incluso
root:8cb2237d0679ca88db6464eac60da96345513964
Pues simple, resulta ser que por ejemplo podemos buscar “827ccb0eea8a706c4c34a16891f84e7b” en alguna paginita como esta: http://gdataonline.com/seekhash.php
Y para el segundo caso qué ?, pues a lo mejor no va a ser tan rápido, sha1 es un método ligeramente más complejo, pero que tal si nos damos una vuelta por http://www.openwall.com/john/ y nos bajámos y compilamos (las distros normalmente tienen una version vieja) para luego darle una manoseadita al string pa que quede como:
root:8cb2237d0679ca88db6464eac60da96345513964:0:0:root:/root:/bin/bash/
Que es más o menos lo que le gusta leer a john, y corremos un sencillo
./john -format=raw-sha1 crackme.txt
Pos resulta que más rápido que inmediatamente nos va a decir que la clave es “12345”, y bueno, con el tiempo nos irá diciendo más claves, típicamente podemos esperar que claves sencillas salgan en cuestión de minutos u horas, y claves de mediana calidad van saliendo en días de proceso, y con suerte claves muy complejas van a requerir años, pero normalmente en una lista de 10 usuarios, al menos 3 o 4 usan claves bastante sencillas, esas claves van a ser “adivinadas” en tiempos suficientemente cortos como para que sea posible que nos hagan daño.
Y por si no lo sabían, john the ripper existe desde hace mucho años, según el repositorio del código al menos tiene 7 años, según recuerdo lo conozco desde hace más, pero desde hace 7 años es posible crackear claves “crypt” que es un algoritmo con “salt” y más complejo, así que POR FAVOR !!!! no uses claves planas, ni MD5 ni SHA1 !!! hazle un bien a tus cuates.
5 Comments, Comment or Ping
Changoos! casi siempre funcionan esas claves para usuarios normales, pero ya para algun hacker pues es facil como dices!, pero no se que tipo de encriptación recomiendas??, o de plano inventamos un algoritmo al estilo microsoft en donde nadie tenga el codigo fuente??…, por lo menos se tardan un rato en adivinar
December 15th, 2009
pues que sea crypt, no es infalible, pero es mas dificil que los hashes comunes, y claro, promover el uso de claves complicadas, aunque eso es lucha perdida casi siempre, así que al menos nos quedamos con la parte que controlamos del lado del código.
December 15th, 2009
Tomando en cuenta lo que dices: “así que POR FAVOR !!!! no uses claves planas, ni MD5 ni SHA1 !!! hazle un bien a tus cuates.”. Si no se usa MD5 ni SHA1, qué se debe usar ? (por lo menos para el htpasswd sólo existen esas dos opciones).
December 18th, 2009
Ravenman, del manual de htpasswd
-d
Use crypt() encryption for passwords. The default on all platforms but Windows, Netware and TPF. Though possibly supported by htpasswd on all platforms, it is not supported by the httpd server on Windows, Netware and TPF.
Moraleja, no uses windows 🙂 al menos como servidor no.
December 18th, 2009
Ni plain, ni md5, ni sha1… mmm ¿entonces que? ¿sha512? ¿como en Fedora? 😀
February 17th, 2010
Reply to “Claves planas, MD5, sha1”