Encriptado de Claves

Esta sección describe cómo son encriptadas las claves de los usuarios antes de ser guardadas en la base de datos.

Las claves son cifradas siguiendo procedimientos que aseguran que, incluso si la seguridad de la base de datos se ve comprometida, no es posible conocer la clave original. El proceso de cifrado involucra: Hash, Salt and Pepper.

Para evitar guardar la clave en texto plano se aplica una función de hash criptográfica (ver Cryptographic hash function). Cuando el usuario ingresa la clave debe cumplir con requisitos que aseguran que cuente con cierta combinación de caracteres, que minimizan la posibilidad de que la clave ingresada esté en un diccionario de claves comunes. Con solo aplicar una función hash a esta clave se logra un buen grado de seguridad.

Un atacante que pueda contar con la información de la base de datos difícilmente pueda utilizar un diccionario de claves con sus hashs previamente computados para determinar cuál es la clave original. De todas maneras, agregamos más seguridad.

Adicionalmente utilizamos un procedimiento denominado pepper que consiste en fusionar la clave con valor aleatorio (se utiliza el mismo valor para todas las claves) y luego se aplica una función hash. A diferencia de salt, el valor aleatorio utilizado no es incluido junto con la clave en la base de datos.

Por último, se utiliza un procedimiento denominado salt, que consiste en fusionar la clave con un valor aleatorio (se utiliza un valor diferente para cada clave) y aplicar una función hash. Este valor aleatorio adicional se guarda directamente en la base de datos junto con la clave. Pero aunque el hash esté disponible, se dificulta aún más la posibilidad de descifrar la clave original utilizando un diccionario.

El atacante debería usar la fuerza bruta para tratar de determinar la clave original. Pero en este caso resulta casi imposible ya que tiene que determinar la clave original, el valor aleatorio de pepper, las funciones hash utilizadas y no puede utilizar un diccionario porque cada clave se fusionó con un valor aleatorio salt.

Este proceso de cifrado de tres pasos brinda una gran protección a las claves dentro de la base de datos.

Para más detalles ver: Spice up Your Passwords with a Little Salt and Pepper

Detalles de implementación:

  • Pepper es aplicado utilizando HMAC (keyed-hash message authentication code) con SHA512 como función subyacente de cifrado (underlying hash function) y
  • hash y salt utilizando el algoritmo bcrypt parametrizado con un costo de 10 (lo que indica 2^10 rondas de expansión de clave).

password encrypt

Ver: