Estoy de acuerdo con la respuesta de ThoriumBR. Tengo algunos detalles más y una sugerencia:
Estás intentando golpear un objetivo en movimiento. "¿Cuántas rondas es suficiente?" Es una pregunta con una respuesta cambiante a medida que cambia la disponibilidad del hardware. Cuando se trata de configuraciones de hash de contraseñas, muchos sistemas tienen métodos para aumentar automáticamente las rondas de hash con el tiempo. ¿Qué es un número mínimo de rondas? Algunas matemáticas ciertamente podrían responderlo (comparando la entropía promedio de una contraseña segura con la entropía promedio de un número de tarjeta de crédito y aumentando el costo en consecuencia). Sin embargo, sospecho que la respuesta es "un montón de rondas". Además, me preocupa que lo que estás tratando de hacer sea fundamentalmente defectuoso.
Marcó esta pregunta como "PCI-DSS", por lo que obviamente esta es una preocupación relevante. En general, la mejor manera de lograr el cumplimiento de PCI es simplemente nunca tener números de tarjeta de crédito en su servidor. El hecho de que usted está copiando todos los detalles de la tarjeta de crédito significa que tiene esos números. No recuerdo exactamente cuáles son las reglas para el cumplimiento de PCI cuando los números de las tarjetas de crédito realmente viajan a través de su servidor, pero sí sé que es mucho más complicado e incluso puede ser prohibitivamente caro. Es mucho mejor simplemente no hacerlo.
Por otra parte, la forma en la que hasble las contraseñas no es la norma y aumenta el riesgo de seguridad para tus clientes. Las sales deben ser una cadena aleatoria, no es necesario vincularlas a la identificación del usuario (también parece extraño, ya que el objetivo de esto es hacer coincidir las tarjetas de crédito entre usuarios anónimos). Además, incluir no solo el número de la tarjeta de crédito, sino también la caducidad y el CVC en el hash es una idea terrible. Para lograr lo que quiere lograr, solo necesita los detalles de la tarjeta de crédito; cualquier información adicional le permite al atacante obtener los detalles completos de la tarjeta de crédito en caso de que obtengan una fuerza bruta exitosa.
Aquí es donde entra en juego toda la idea de "No renunciar a tu propia seguridad". Si me perdonas, parece que podrías estar un poco fuera de tu nivel de experiencia cuando se trata de asegurar un cliente importante datos, por lo que crear su propio sistema para hacer coincidir las tarjetas de crédito de los clientes parece ser una buena manera de filtrar inadvertidamente muchos números de tarjetas de crédito y causar muchos problemas para su empresa.
Para resumir, es mejor que escuches la respuesta de ThoriumBR: simplemente no hagas esto. La leve mejora en la interfaz de usuario para sus clientes no vale la pena por el mayor riesgo de filtrar sus números de tarjetas de crédito. Si desea hacer esto, busque un procesador de tarjetas de crédito compatible con PCI que pueda traducir el número de tarjeta de crédito en una cadena única y segura para usted. A continuación, puede guardar y comparar de forma segura en su base de datos. El ejemplo inmediato de la parte superior de mi cabeza es raya.
Y algunos números
También estuve viendo algunos números esta mañana. He encontrado este artículo relevante:
enlace
La persona describe el uso de lo que es (probablemente) una configuración de hashing de nivel medio bajo para descifrar las contraseñas del volcado de datos de Ashley Madison. Usaron bcrypt con un factor de costo de 12 (creo que el número de rondas de cifrado es igual a 2^cost_factor
, es decir, factor de costo de 12 = 2^12
= 4096
rondas de bcrypt (pero verifique absolutamente este hecho si En realidad, con esta plataforma de cracking de los chicos, tenía un índice de hash de 156 hashes por segundo. ThoriumBR describe bastante bien la entropía de un número de tarjeta de crédito (con aproximadamente 1e11
de números posibles de tarjetas de crédito), lo que significa que al romper una tarjeta de crédito el número con la misma configuración de la plataforma de hash que el tipo en el enlace anterior con un factor de costo de 12 tomará unos 20 años. La salazón se asegurará de que cada hash tenga que ser forzado de manera individual.
Por supuesto, estos números pueden cambiar de repente. La configuración de hash que cité en mi ejemplo definitivamente no es una de las mejores. Además, las cosas pueden cambiar dramáticamente si alguien crea un ASIC eficiente para bcrypt (no creo que haya uno todavía, pero podría estar mal).