El uso de cualquier algoritmo de hash para "difuminar" la tarjeta a menudo es reversible.
Como solo hay una cantidad finita de números de tarjeta, recuerde que el último dígito puede ser un dígito de control. No es necesario verificar todo el espacio de la tarjeta. Es bien sabido cuáles son los prefijos del emisor de la tarjeta, por lo que realiza las búsquedas allí. Así que ahora su PAN de 16 dígitos, perdió el último dígito para el dígito de control y los primeros 4 a 6 para el emisor de la tarjeta. Eso no es una gran cantidad de combinaciones para la fuerza bruta, quizás una sola PC con una GPU pueda hacerlo en unas pocas horas.
Por lo tanto, incluso los datos salados son inútiles cuando puede buscar de forma exhaustiva todo el espacio de teclas con unos pocos clics y un clúster de botnet de AWS o malvado y obtener los resultados en una hora. Las computadoras son lo suficientemente rápidas para recorrer todas las combinaciones para encontrar el hash que coincida. La sal es generalmente conocida y diseñada para proteger contra el cálculo previo, pero eso no importa si puede volver a calcular un conjunto de datos completamente nuevo basado en sal conocida rápidamente.
Entonces, lo que es importante es el algoritmo exacto utilizado junto con un hash como MD5.
¿Cuál es el punto de usar MD5 de todos modos? Si necesita un token, represente un número de tarjeta emítalo desde un espacio de teclas independiente. Un contador secuencial que comienza en 000000001 y encriptado con una clave completamente secreta siempre le otorgará un valor de salida único para el tamaño de bloque que no tiene ninguna relación con los datos de la tarjeta (y por lo tanto no es reversible) sin que la base de datos de mapeo se vea comprometida.
Si realmente necesita borrar el número de tarjeta, busque PBKDF2 para todos los usos en los que haya considerado un hash. Ya que puede recuperar la intención de la sal haciendo que la fuerza bruta sea demasiado costosa (incluso en GPU incluso en el grupo AWS).
Pregunte a su personal de cumplimiento de PCI si sustituyó el número 0 por A, 1 por B, ... 9 por J, etc ... y lo almacenó en la base de datos si esto es lo suficientemente "fuerte".
El uso directo de MD5 para difuminar el número de tarjeta (incluso con sal conocida) se puede interrumpir a una velocidad de 450 millones / seg en una GPU (de mi rápido google). Recuerde que perdimos algunos dígitos de PAN a Brute, por lo que podemos hacer 10 dígitos en 2 segundos.
Lo siento, si no es 100% sobre el tema, pero el uso de MD5 para asegurar "fuertemente" la tarjeta de crédito es una broma en 2013.