Una de las mejoras significativas que incorporó el estándar PCI DSS en su versión 4.0 fue el uso de funciones de hash criptográfico con clave (keyed cryptographic hash) como remplazo de las funciones de hash tradicionales (non-keyed hash) que, hasta entonces, se empleaban en la protección del PAN. Pero, ¿por qué se realizó este cambio? ¿cuál es la razón de emplear funciones de hash criptográfico con clave y qué beneficios aporta a la seguridad de los datos de tarjetas de pago?
El estándar PCI DSS permite emplear cuatro (4) métodos diferentes para la protección del PAN durante su almacenamiento:
- Uso de funciones de una sola vía (hash) basados en criptografía robusta del PAN completo.
- Truncamiento.
- Indices de tokens (tokenización).
- Criptografía robusta con procedimientos de gestión de claves asociados.
Respecto al punto 1 (uso de funciones de una sola vía – hash), a partir de la versión 4.0 de PCI DSS se exige que dichas funciones empleen claves (keyed cryptographic hash). A continuación se describen las diferencias entre estos dos métodos de hash.
¿Qué es un hash tradicional (non-keyed hash)?
Una función de hash es una función matemática que puede recibir como entrada un conjunto infinito de datos y da como resultado un “resumen” (message digest) o conjunto finito de caracteres que identifican inequívocamente su entrada, de forma similar a una secuencia de ADN o una huella digital. Una característica de este tipo de funciones matemáticas es que es imposible derivar u obtener la entrada original partiendo de su hash, razón por la cual también se denominan “funciones de una sola vía” o one-way functions. Entre los algoritmos más conocidos que implementan estas funciones se encuentran la familia MD (Message-Digest algorithm) con MD4 y MD5 y SHA (Secure Hash Algorithms) con SHA-0, SHA-1, SHA-2 y SHA-3.
Este tipo de funciones son particularmente útiles en la identificación de cambios o alteraciones en cadenas de texto o ficheros (validación de integridad) y comparación de valores:

Como se puede observar en la imagen de arriba, aunque el significado de la palabra no ha variado, sí lo han hecho sus caracteres, lo cual representa un cambio en su codificación que puede ser detectado empleando funciones de hash (en este caso, MD5). Este mismo concepto se puede aplicar a ficheros para garantizar que no han sido modificados. De hecho, el uso de este tipo de funciones es muy común en herramientas de monitorización de integridad de ficheros (File Integrity Monitoring – FIM):

En PCI DSS, hasta la versión 3.2.1, este tipo de funciones se empleaban para el almacenamiento seguro de datos del PAN y para facilitar su posterior comparación (empleando estructuras de almacenamiento multidimensional denominadas tablas de hash), en el caso de ser necesario por razones de negocio.
Una característica importante que deben cumplir estos algoritmos para poder ser clasificados como seguros es la resistencia a la colisión de hashes. Una colisión de hash se presenta cuando dos entradas diferentes generan el mismo resultado de hash, lo cual rompe totalmente con el concepto de unicidad entre entrada y salida que deberían proporcionar estas funciones. Un ejemplo práctico de este escenario se puede encontrar en el trabajo de Magnus Daum y Stefan Lucks, quienes crearon dos ficheros PostScript diferentes que generan el mismo hash MD5, demostrando que este algoritmo era susceptible a la colisión. El mismo ejemplo se puede encontrar con SHA-1.

Colisión de hashes – Fuente: https://shattered.io/static/infographic.pdf
Otro problema que tienen este tipo de funciones se conoce como tablas arcoíris (rainbow tables). En este caso, este tipo de ataque contra funciones de hash no está relacionado con el algoritmo ni con su implementación en sí, sino en la cantidad de registros de hash que se pueden generar de diferentes combinaciones de caracteres, llamadas tablas precomputadas. En estos casos, un atacante emplea una lista de cadenas de texto con sus hashes vinculados. Una vez obtiene un hash, compara el hash con la tabla precomputada, extrayendo su valor relacionado en claro. Este tipo de ataques son comunes en repositorios que contienen contraseñas, existiendo versiones en línea de dichas tablas que permiten obtener el valor en claro a partir de un hash, si dicho valor ha sido precomputado.

Ejemplo de tabla precomputada de hashes
Igualmente, las funciones tradicionales de hash no permiten realizar tareas de autenticación (no es posible validar el origen del hash). Un ejemplo de este escenario se puede encontrar en la distribución de software. Imaginemos que un sitio web publica un ejecutable y su valor de hash asociado para que quienes lo descarguen puedan comprobar que el archivo no ha sido manipulado. Sin embargo, si un atacante vulnera ese sitio web y remplaza el fichero por una versión maliciosa, cambiando también su hash asociado, las personas que lo descarguen no podrán validar (autenticar) si el fichero es el correcto o no, simplemente podrán comprobar que la versión descargada es la misma que hay en el sitio web, sin percatarse del cambio.

Verificación de integridad usando funciones de hash tradicionales (sin validación de origen)
Debido a estos problemas, los algoritmos MD4 y MD5 no son considerados como algoritmos robustos y SHA-1 debe ser usado bajo circunstancias restringidas (ver «What is the Council’s guidance on the use of SHA-1?«).
¿Qué es un hash criptográfico con clave (keyed cryptographic hash)?
Para gestionar los problemas innatos del uso de algoritmos de hash tradicionales se hace uso de funciones de hash criptográfico con clave (keyed cryptographic hash). A diferencia de las funciones de resumen (digest) tradicionales, este tipo de funciones permiten validar la autenticidad y la integridad de los mensajes. Por esta razón, también reciben el nombre de «códigos de autenticación de mensajes» (Message Authentication Code – MAC) o «códigos de integridad de mensajes» (Message Integrity Code – MIC).
En estas funciones, las partes involucradas comparten previamente una clave secreta (pre-shared key) que garantiza que solamente quienes están en posesión de dicha clave pueden comprobar que el mensaje no ha sido manipulado y que proviene de una contraparte confiable. Empleando el ejemplo anterior en el cual un usuario descarga un fichero y verifica su integridad usando el hash provisto en el mismo sitio web, si se emplea una función de hash criptográfico con clave, un potencial atacante que cambie el fichero y el hash pero no tenga acceso a la clave precompartida podría ser fácilmente identificado.

Verificación de integridad y de origen empleando funciones de hash con clave
Existen múltiples mecanismos para la implementación de códigos de autenticación de mensajes (MAC), cuya diferencia principal radica en el tipo de algoritmo usado:
Importancia de las claves en algoritmos MAC
Mediante el uso de claves precompartidas, los algoritmos de MAC pueden autenticar el origen del mensaje adicional a la validación de integridad. Como se puede obervar, la seguridad de este proceso radica en la clave precompartida, razón por la cual es imprescindible que exista una gestión correcta del ciclo de vida de tales claves (generación, carga, exportación, transmisión, almacenamiento, destrucción) en todas las partes involucradas de la misma manera que se realiza cuando se emplea criptografía simétrica, aunque estas funciones de no ofrezcan protección a la confidencialidad.
Así mismo, las especificaciones de los algoritmos de MAC asumen que las claves a ser empleadas han sido precompartidas entre las partes involucradas de forma segura, sin describir ningún proceso asociado, por lo que pueden ser necesarios procedimientos adicionales de transmisión de claves empleando componentes en claro, shares o criptogramas previos al uso de las funciones de MAC si la clave a ser empleada aún no ha sido compartida.
Uso de funciones de hash criptográfico con clave (keyed cryptographic hash) en PCI DSS
A partir del 1 de abril de 2025 es obligatoria la implementación de funciones de hash criptográfico con clave (keyed cryptographic hash) si una entidad emplea rutinas de hash para la protección de datos del PAN (requerimiento 3.5.1.1 de PCI DSS v4.0.1). En este caso:
- El uso de funciones de hash tradicionales (non-keyed hash) no está permitido para la protección del PAN completo durante su almacenamiento, incluso si usan salts.
- La función de hash criptográfico con clave (keyed cryptographic hash) debe proteger el PAN completo.
- Debido a la criticidad de las claves precompartidas en este proceso, la entidad debe implementar todos los controles de gestión de claves criptográficas definidos en los requerimientos 3.6 y 3.7, salvo que sean sistemas que solamente tienen acceso a un hash a la vez y no almacenen ningún otro dato de tarjetas.
- Las claves empleadas con estas funciones deberán estar alineadas con el concepto de criptografía fuerte. En este caso, se deben usar algoritmos robustos con una longitud de clave que provea un mínimo de 112 bits de fortaleza de clave efectiva (effective key strength) o de 128 bits de fortaleza si se trata de implementaciones nuevas.
- Se recomienda que las claves usadas con algoritmos de MAC sean gestionadas usando un dispositivo criptográfico de seguridad validado, como un módulo de seguridad de hardware (Hardware Security Module – HSM).


Muy clara la explicación, gracias!