Mes: julio 2011

Protege tus archivos con openssl!!

La necesidad de cifrar los datos contenidos en un equipo sea una empresa o un simple usuario, es imprescindible para proteger los datos personales de las personas ( o empresas ) que se encuentran registrados en esos ficheros, utilizando diversas técnicas de protección, entre la cuales se encuentra el cifrado de los datos.

En ocasiones queremos cifrar unos determinados datos desde la terminal, como por ejemplo: un fichero de texto o un fichero multimedia. Podemos utilizar un sistema de cifrado simétrico (o asimétrico) con la aplicación openssl.

Instalar openssl:

sudo apt-get install openssl

Openssl

Openssl es una herramienta de cifrado de datos y generación de certificados ssl, que permite cifrar archivos con un sistema de cifrado simétrico o asimétrico, en éste post sólo se mostrará un pequeño ejemplo de uso, porque el objetivo principal es el de cifrar los datos de una manera rápida y fácil.

Para cifrar ficheros con Openssl utilizamos los siguientes parámetros:

openssl enc -algoritmo_de_cifrado- -in fichero -out fichero_salida

El descifrado de los archivos es idéntico al cifrado sólo que agregando el parámetro -d:

openssl enc -algoritmo_de_cifrado -d -in fichero -out fichero_salida

¿Como sé que el usuario ha introducido la contraseña correcta?

Podemos saber si el usuario ha introducido la contraseña correcta mirando el valor devuelto por el último comando ejecutado ( en nuestro caso el comando openssl con la opción de desencriptar ), los programas que acaban correctamente su ejecución acostumbran a devolver el valor 0, y cuando ha ocurrido un error se da un número distinto a 0.

Openssl desencriptando un fichero con una clave incorrecta:

fichero=”hola.png.enc”

pass=”incorrecto”

openssl enc -aes-256-cbc -d -pass pass:”$pass” -in “$fichero” -out “${fichero%%.enc}” 2> /dev/null

if [ “$(echo $?)” -ne 0 ]; then echo Ha ocurrido un error;fi

Facilitar el cifrado y descifrado de archivos

Si ponemos el código anterior dentro de un bucle infinito podemos darle la oportunidad al usuario de volver a introducir la contraseña por si se ha equivocado al teclear la contraseña, en el siguiente script se muestra como al combinar zenity, el comando gksu y openssl podemos hacer un pequeño script que nos facilite mucho el cifrado y descifrado de ficheros, el script no está optimizado del todo pero funciona muy bien.

Algunas capturas del script:

#! /bin/bash -x

#By: Dosegundos.wordpress.com

IFS=$\

cd ~
opciones="Descifrar
Cifrar"

while [ 1 ]
do

ms="¿Quieres cifrar o descifrar un fichero?"
result=$(echo $opciones | zenity --list --text="$ms" --column="Acción")

case $result in
"Descifrar")
filter="*.enc"
val=1
;;
"Cifrar")
filter="*"
val=0
;;
*)
zenity --warning --text="Proceso abortado por el usuario"
exit 1
;;
esac

while [ 1 ]
do
archivo=$(zenity --file-selection --file-filter="$filter")
if [ "$(echo $?)" -ne 0 ]
then
msg="No has seleccionado ningún fichero.¿Quieres salir?"
zenity --question --text="$msg"

if [ "$(echo $?)" -eq 0 ];then zenity --info --text="Hasta otra ;)";exit 1;fi
else
nom_orig=$(basename $( echo $archivo ))
zenity --info --text="Fichero seleccionado: $nom_orig"
break
fi
done

while [ 1 ]
do
passpass=$( gksu -p -d "" -m "Contraseña para el fichero $archivo." 2> /dev/null )
if [ $(echo $?) -ne 0 ]
then
zenity --warning --text="Operación cancelada por el usuario."
exit 1
else

if [ "$val" == "1" ]
then
openssl enc -aes-256-cbc -d -in "$archivo" -out "/tmp/${nom_orig%%.enc}" -pass pass:"$passpass"
if [ $(echo $?) -ne 0 ]
then
error=$( echo La contraseña introducida\
no es correcta. Es posible que estés\
intentando desencriptar un fichero no encriptado :P. )
zenity --warning --text="$error"
tx="¿Quieres volver a empezar todo el proceso?"
zenity --question --text="$tx"
if [ $(echo $?) -eq 0 ];then break;fi
mss="¿Quieres volver a introducir la contraseña?"
zenity --question --text="$mss"
if [ $(echo $?) -eq 1 ];then exit 1;fi
else
mv "/tmp/${nom_orig%%.enc}" "${archivo%%.enc}"
rm "$archivo"
msg="
El archivo ${archivo%%.enc} se ha
descifrado correctamente.
No te olvides de volverlo a encriptar!!"
zenity --info --text="$msg"
exit 0
fi
fi
if [ "$val" == "0" ];then
openssl enc -aes-256-cbc -in "$archivo" -out "${archivo}.enc" -pass pass:"$passpass"
if [ "$(echo $?)" -eq 0 ]
then
zenity --info --text="Se ha cifrado correctamente el fichero: $nom_orig"
rm "$archivo"
exit 0
else
zenity --warning --text="No se ha podido cifrar el fichero: $nom_orig"
exit 1
fi
fi
fi
done
done

Anuncios