Hace unos días les mostré un script en el cual usando Bash y md5sum encripté el password correcto de un simple sistema de seguridad que me programé yo mismo.
O sea, que en una terminal ponía:
echo "desdelinux" | md5sum
Y me salía la suma MD5 de esa palabra o texto, en este caso: desdelinux
Gracias a HacKan conocí shasum … que es más seguro que md5sum.
Explicando un poco más, MD5 es una forma de proteger texto, siguiendo el ejemplo anterior, el MD5 de desdelinux es:
2dac690b816a43e4fd9df5ee35e3790d
El detalle es que no importa qué tan extenso sea el texto, el MD5 del mismo siempre será de 33 caracteres (letras y números), por ejemplo este es el MD5 de: Aprenda a ser mejor desde Linux
98a53ca0624f3bc555f7f5055d8248c2
Como ven, 33 caracteres igual.
El problema que esto tiene, es que para propósitos de seguridad en realidad MD5 no es lo más recomendado, para cifrar passwords por ejemplo, puesto que ya se han detectado colisiones de hash de MD5. O sea, una colisión de hash es que dos cadenas de textos diferentes pueden dar la misma salida, o sea, que (por ejemplo) «linux» y «hsjajeya» ambos den la misma suma hash.
Para los que como yo son un poco paranoicos con el tema seguridad, existen otras alternativas… hoy les hablaré de SHA.
A mi forma de ver, SHA (Secure Hash Algorithm, inventado por NSA) cumple el mismo propósito que MD5, solo que nos brinda más opciones.
Por ejemplo, una suma de hash SHA de «desdelinux» sería:
echo "desdelinux" | shasum
Y el resultado es:
2ed14068a18ce404054dfc63e50c28e918a92a14
Como pueden ver, son más caracteres que un MD5, ahora son 41 caracteres en vez de los 33 del MD5.
Pero esto no es todo, esta suma es usando SHA-1, pero podemos mejorar notablemente la seguridad usando sha256sum , sha384sum y sha512sum.
Esto lo que haría es simple, agregar un cifrado de más bits 😉 …
Vean acá el hash de «desdelinux» pero con sha256sum:
echo "desdelinux" | sha256sum
Resultado:
092eb52ac23733af779224f9f7511be782e57264bd1af3afba6bd6454f471f8a
Como pueden ver, muchos más caracteres, específicamente 65.
Yo personalmente en mi script uso sha512sum para proteger el password jeje… y para seguir con el ejemplo, el sha512sum de «desdelinux» sería:
Son exactamente: 129 caracteres 😉 …. esto, quiero ver quién sería el listillo que podría adivinarlo… LOL!
Pero …
¿Cómo saber el MD5 o SHA del contenido de un archivo?
Supongamos que tenemos el archivo desdelinux.txt … que contiene lo siguiente:
<° Linux (a.k.a DesdeLinux) es un sitio dedicado a temas relacionados con El Software y Las Tecnologías Libres. Nuestro objetivo no es otro que brindarle a todo aquel usuario que se inicia en el mundo de GNU/Linux, un lugar donde pueda adquirir nuevos conocimientos de la forma más fácil posible.
Para saber la suma MD5 de este archivo ponemos en una terminal:
md5sum desdelinux.txt
Esto nos mostrará:
dbc34981efb56416969e87875f8d4b8e desdelinux.txt
Para hacerlo con SHA en vez de con MD5… adivinen 😀 … :
shasum desdelinux.net
Y nos mostrará:
097a527d1b5cfa393f7d8b45b82c9c52cc4f18d2 desdelinux.txt
O si gustan igual pueden usar sha256sum , sha384sum o sha512sum 😉
En fin, acá termina el artículo.
Yo he encontrado sumamente interesante aprender sobre esto, siempre me ha atraído lo relacionado a seguridad, espero que a ustedes también les resulte de interés.
Si alguien tiene alguna duda, bueno yo no me considero ni de lejos un experto en el tema, pero sin lugar a dudas intentaré ayudarle 😀
Saludos
13 comentarios, deja el tuyo
no sabía que md5 y sha se podían usar en archivos de texto. muy buena información. yo estaba acostumbrado a ver este tipo de método de seguridad en los ISO de las distros. jeje
No solamente a archivos de texto, se le puede calcular a cualquier tipo de archivo.
bueno, ahora lo se. todos los días se puede aprender algo nuevo.
En Linux todo es un archivo 😉 Imagínate lo que puedes hacer ahora con esto.
O un archivo o una carpeta en realidad 😉
Muy buena línea de artículos de KZKG^Gaara. Si se valen peticiones, ya que hiciste uno sobre GPG pero con una palabra clave podrías hacer uno que contemple el uso de las dos llaves?
Si se valen peticiones, claro 🙂
Uff, yo aún no ando muy claro sobre el tema de las llaves GPG y tal jajajajajaja, veré qué puedo hacer 😀
Gracias por lo de buena línea de artículos jajajajaja
Un pequeño apunte. Tened en cuenta que «echo» introduce un final de línea por defecto y por lo tanto el hash que estáis calculando al usarlo tal cual es el del texto introducido + final de línea, que nunca será el mismo que el del texto únicamente.
Por suerte, podemos usar la opción -n de manera que el comando no introduzca un final de línea. Por lo tanto, la manera correcta de los ejemplos de arriba sería:
echo -n "desdelinux" | md5sum
Un saludo.
Yo lo resolví con un awk imprimiendo solo la 1ra columna al final, pero genial tu aporte, se ahorran muchos caracteres 😀
Solo una acotación, en realidad el MD5 siempre tiene 32 carácteres.
Gracias por la información.
estos temas de seguridad y privacidad son importantes
He estado aprendiendo cómo calcular los md5sum en Linux pero como soy novato, después de resolver el lío de cómo llegar en la terminal al directorio donde está el archivo (digo lío por los benditos espacios en blanco), vuelvo a toparme con el mismo problema en el nombre del archivo: ya estando en el directorio correcto dijito –j intencional– NOMBREARCHIVO.EXTENSIÓN pero como el nombre del archivo tiene espacios en blanco, no obtengo el checksum. Aclaro que no puedo cambiar el nombre del archivo porque estoy haciendo seed de él para un torrent.
Los posts que leo sobre el tema ni siquiera mencionan el problema de los espacios en blanco, peor aún, suponen que uno siempre está posicionado en el directorio correcto y no se ponen en el lugar de un novato que necesita confirmar estos summ ¿Cómo se resuelve esto? Gracias de antemano
Hola, ya han pasado 11 meses pero para el que llegue nuevo podría servirle.
Bajo línea de comandos existe lo que se llaman carácteres especiales de escape.
Sirven para evitar que un programa o guión de SHELL interprete un carácter como parte del código por así decirlo.
Ejemplo para lo que mencionas:
md5sum Escritorio/Descargas/descargas\ Bitorrent/archivo\ lo\ que\ sea.ext
Con el carácter «\» evitas que la terminal interprete los espacios como parte de código, con lo que lee los espacios como parte de la cadena de la ruta, obteniendo el md5 del archivo:
Escritorio/Descargas/descargas Bitorrent/archivo lo que sea.ext
Hay diferentes escapes para diferentes programas, incluso sed proporciona escapes como «, #, etc etc
Un saludo.