ENCRIPTACION SALT
Enviado por jairmrx • 24 de Abril de 2015 • 940 Palabras (4 Páginas) • 282 Visitas
ENCRIPTACION SALT
Cuando almacenamos datos en nuestro servidor debemos estar preparados para cualquier tipo de acceso no autorizado para evitar disgustos innecesarios y tener sanciones de hasta 600000€ por no proteger la información sensible de los clientes.
Encriptar los datos consiste en grabarlos en la base de datos de forma codificada de forma que el hacker que consiga leer la base de datos no pueda entender su contenido. Se debe diferenciar entre encriptación con algoritmo reversible (que requiere obtener el dato original del almacenado) de un algoritmo de hash que solo codifica un contenido de forma única.
Empecemos primero por la encriptación sin inversa:
Por ejemplo las claves pueden almacenarse sin necesidad de reversibilidad de forma que si el cliente no conoce la clave no pueda entrar en nuestra web. Las funciones de PHP hash md5() y sha1() hasta hace poco fueron un estándar, pero por la rapidez en la extracción de datos por fuerza bruta, dictionary o rainbow tables ya no se recomiendan para la codificación de contraseñas. El mismo creador de MD5 ha escrito en su blog que “la codificación md5() no es segura” y opten por algoritmos como SHA-2.
Si tenemos PHP 5.3 o superior dispondremos de algoritmos profesionales y podemos comprobarlo con el siguiente código que os será muy útil.
<?php
if(defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
echo "Wiii, tengo CRYPT_BLOWFISH!";
}
?>
Para hacer más segura la creación de un HASH (un ID único para una cadena) se debe utilizar un SALT que se añade a la contraseña que debemos codificar para crear un elemento único que será guardado en la base de datos. Para comprobar si es valida la clave solo se aplicará el HASH y se comprobará si da el mismo resultado que el almacenado, así sabremos si es valida la clave.
Con este funcionamiento de la encriptación mediante HASH queda claro que cuando algún cliente desee recuperar la contraseña se deberá remitir un correo electrónico con un enlace para cambiar la contraseña y pedir la nueva. Nunca se podrá recibir la contraseña actual en el email.
$salt = '34a@$#aA9823$';
$password = 'agencialanave28625';
$password = hash('sha256', $salt . $password);
La gente tiene el hábito o mal hábito de usar la misma contraseña para todas sus cuentas, desde su cuenta en facebook hasta la de paypal o peor, la de su cuenta bancaria. Nuestra obligación es proteger ese dato fundamental por si desafortunadamente nuestra base de datos cae en las manos equivocadas, cómo las de un empleado malintencionado o la de un hacker.
Uno de los algoritmos más adecuados es el BLOWFISH y para su utilización se debe emplear la función de PHP crypt. En función del SALT la función encriptará usando un sistema u otro.
Si el SALT se basa en un alfabeto de 22 caracteres dentro del array “set_salt” y se realiza el mismo mediante componentes aleatorios se obtendrá una encriptación de mayor calidad y mediante algoritmo BLOWFISH.
function crypt_blowfish_agencialanave($password, $digito = 7) {
$set_salt = './1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$salt = sprintf('$2a$%02d$', $digito);
for($i = 0; $i < 22; $i++)
{
$salt .= $set_salt[mt_rand(0, 63)];
}
...