Encriptando la contraseña

Lo primero de lo que tenemos que preocuparnos al hablar de autenticación es, que duda cabe, de la encriptación de las contraseñas. Los usuarios legítimos de la aplicación se registran mediante un formulario donde deben incluir, entre otros datos, su nombre de usuario y su contraseña. Es obvio que la contraseña no puede almacenarse en plano. En primer lugar, por una cuestión legislativa y, desde luego, por una cuestión práctica. La contraseña debe estar cifrada, y debe existir un mecanismo de verificación que, ante un intento de acceso, coteje la contraseña tecleada con la que hay almacenada. La encriptación, además, debe ser irreversible y proporcionar un mivel de seguridad tal que sea imposible desencriptarla. En este contexto, «imposible» es un término relativo, ya que, como todos sabemos, los «malos» siempre van un paso por delante. Un caso claro fue el de la famosa encriptación md5 que, en su día era lo más de lo más, y hoy la desencriptan los chavales de instituto para entretenerse en el recreo. Sin embargo, el sistema de encriptación debe hacer que desncriptar una contraseña sea, al menos, «casi» imposible.

ENCRIPTACIÓN NO REVERSIBLE

Este sistema es el más seguro de que disponemos actualmente ya que, ante un eventual robo de base de datos, sabemos que el atacante no podrá desencriptar las contraseñas de los usuarios. La desventaja es que, si el usario pierde u olvida la clave, la aplicación debe generarle una nueva clave, enviársela por correo electrónico, y almacenarla, encriptada mediante el mismo algoritmo irreversible, en la base de datos. En sitios de mucha seguridad, la clave generada que se le envía al usuario sólo le permite acceder, durante un corto espacio de tiempo, a un área especial de la aplicación donde lo único que puede hacer, es establecer una nueva contraseña que le permita acceder libremente a toda la aplicación.

Como puedes entender, este sistema es más engorroso para el usuario, pero es un pequeño precio en aras de una mayor seguridad.

Para encriptar una contraseña cuando el usuario la establece usamos, en PHP, la función irreversible password_hash(). Tienes la documentación oficial en este enlace.

A continuación tienes un ejemplo de cómo debe ser encriptada la contraseña tecleada por el nuevo usuario (o por un restablecimiento por pérdida), para grabarla en la base de datos.

$claveQueSeGrabara = password_hash($claveElegidaPorElUsuario, PASSWORD_BCRYPT);

Cuando el usuario intenta acceder al sitio y teclea su clave de acceso, debemos verificarla contra la clave encriptada que hay en la base de datos. Para ello, leemos la que hay almacenada y usamos la función password_verify() con la que ha tecleado el usuario, así:

// $claveAlmacenada es la que hay encriptada en la base de datos.
// $claveTecleada es la que el usuario ha tecleado para acceder.
if (password_verify ( $claveTecleada, $claveAlmacenada)) {
    // Acceso concedido
} else {
    // Acceso denegado
}

La documentación oficial sobre esta función está disponible en el este enlace.

   

Deja un comentario