Cuando se usa cifrado, no basta con un algoritmo robusto y una longitud de clave aceptable. Existen otros dos parámetros muy importantes que suelen olvidarse: el modo de cifrado y la parametrización del vector de inicialización (Initialization Vector, IV). Estos valores son crÃticos a la hora de proteger datos con una longitud fija, como un número de identificación personal (Personal Account Number – PAN).
El cifrado de datos y el problema con la generación de patrones
Los algoritmos de cifrado de bloques y de flujo (empleados para cifrar datos de longitud fija y variable, respectivamente) funcionan de una manera muy sencilla: reciben los datos a proteger y la clave para cifrarlos/descifrarlos, y emplean una rutina que cambia el orden de los datos (algoritmo de cifrado). Este conjunto se denomina un criptosistema:

No obstante, este modelo tiene una vulnerabilidad crÃtica: cuando se ejecutan rutinas de cifrado sobre un conjunto de datos limitado en tamaño y relativamente similares, empleando el mismo algoritmo y la misma clave, se pueden generar patrones que pueden ser usados como parte de un ataque (criptoanálisis). En el siguiente ejemplo, se presenta una rutina de cifrado de un bloque de cinco números de PAN consecutivos:
- Algoritmo: TripleDES
- Clave: 59c5b527f37ff7fbbd5b2478 (doble longitud – 128 bits incluyendo bits de paridad)
- Modo de cifrado: ECB
- Padding: Ninguno
- Datos a cifrar: 16 caracteres decimales = 53 bits
- Formato de criptograma: Hexadecimal
| 4656543289876520 | 3A70F5A513753CDE9CE209796E5DD990 |
| 4656543289876521 | 3A70F5A513753CDE41CBFF4CACA02930 |
| 4656543289876522 | 3A70F5A513753CDE4906E893316D0F31 |
| 4656543289876523 | 3A70F5A513753CDE9FEA240365279BFD |
| 4656543289876524 | 3A70F5A513753CDE353E392C6BEAE5CF |
Como se puede observar, en este proceso se identifica un patrón en la primera mitad del resultado, causado por el método que emplea TripleDES para cifrar los datos (divide los datos a cifrar en bloques de 64 bits y luego cifra/descifra/cifra cada bloque con las claves asociadas):

En este caso, cuando los datos son limitados, como en el caso de un PAN (cuya longitud es fija – 16 caracteres en la mayorÃa de los casos y sus dÃgitos iniciales son ampliamente conocidos ya que están asociados con las marcas de pago: 4 para Visa, 5 para MasterCard, etc.) y la clave de cifrado y el algoritmo son los mismos, este reuso de elementos afectará el criptograma final creando patrones, como se demostró arriba, afectando la seguridad provista por el cifrado. Debido a este problema (entre otros muchos), se pudo romper el cifrado de la máquina alemana ENIGMA.
Modos de cifrado
El caso explicado arriba es el mas simple de todos: Se toma un texto en claro, se divide en varios bloques de un tamaño fijo y cada bloque se cifra con la clave proporcionada, por lo que dos bloques de texto idénticos darán como resultado el mismo criptograma. Este modo de cifrado se denomina Electronic Code Book (ECB):

Para evitar este problema, se añadió un dato adicional al proceso de cifrado denominado vector de inicialización (Initialization Vector – IV). Este nuevo elemento se adiciona al criptosistema para añadir una capa de aleatoriedad en el proceso, evitando que dos bloques de datos iguales generen la misma salida. Obviamente, la clave de este proceso está en garantizar que el IV sea lo más aleatorio posible y que no sea reutilizado. Adicionalmente, es importante aclarar que el IV no debe ser necesariamente un dato secreto.
Dependiendo del formato y del momento en el cual el IV es usado, el NIST definió cinco (5) modos de cifrado para algoritmos de cifrado de bloques, listados en el documento NIST SP 800-38A Recommendation for Block Cipher Modes of Operation: Methods and Techniques:
- Electronic Codebook (ECB), en el que cada bloque de texto se cifra de forma independiente con la misma clave.
- Cipher Block Chaining (CBC), en el cual se combina un IV aleatorio con el primer bloque de texto en claro y su salida se combina con el siguiente bloque a cifrar.
- Cipher Feedback (CFB), en el cual el vector de inicialización es cifrado antes de ser combinado con el primer bloque de texto a cifrar y dicha salida es combinada con el siguiente bloque a cifrar.
- Output Feedback (OFB), similar a CFB, solo que el IV cifrado es combinado de forma independiente con cada bloque de texto en claro antes de ser cifrado.
- Counter (CTR), en el cual, en vez de usar un IV aleatorio se usa un contador que es incrementado durante el cifrado de cada bloque.
A continuación se presenta un ejemplo visual de la operación de CBC:

Las indicaciones para la generación segura del IV se describen en el Appendix C: Generation of Initialization Vectors del documento del NIST SP 800-38A.
Mediante el uso del vector de inicialización se evita la creación de patrones en los criptogramas generados, garantizando que cada criptograma es diferente sin importar que los bloques de texto en claro sean iguales:

Si se repite el proceso de cifrado del bloque de cinco números de PAN consecutivos empleados anteriormente, pero esta vez usando CBC y un IV diferente por cada operación de cifrado, se obtienen los siguientes resultados:
- Algoritmo: TripleDES
- Clave: 59c5b527f37ff7fbbd5b2478 (doble longitud – 128 bits incluyendo bits de paridad)
- Modo de cifrado: CBC
- Padding: Ninguno
- Datos a cifrar: 16 caracteres decimales = 53 bits
- Formato de criptograma: Hexadecimal
| PAN | IV | Criptograma |
| 4656543289876520 | 671b89995b7be45b | 8bc804dd3c0e395601525f6103e75974 |
| 4656543289876521 | 309bf68859959c0c | f2ff5fadd0cc5332453edc8743d19a1a |
| 4656543289876522 | b991e9fed507d479 | 79b5cc461a4c883e124d93371bf13183 |
| 4656543289876523 | 8623008e355c4725 | b6e57d387f34c2673c805cac92f049bd |
| 4656543289876524 | 661ee80ae9ad932a | 04ac1af1c9e221e8a06e0c555fe4ae99 |
Como se puede observar, mediante el uso de un IV aleatorio en cada ronda de cifrado, los datos resultantes (criptograma) son diferentes. Incluso, si se cifra el mismo dato pero con diferente IV, el resultado va a variar, garantizando que no existirán patrones:
| PAN | IV | Criptograma |
| 4656543289876520 | 671b89995b7be45b | 8bc804dd3c0e395601525f6103e75974 |
| 4656543289876520 | 10b57a092c176687 | 1884560ef41e4584d4a7baa5441a4ece |
Recomendaciones del QSA
Para garantizar que las técnicas de criptografÃa empleadas para la protección de datos sensibles sean seguras, os recomiendo tener en cuenta los siguientes puntos:
- Emplear un algoritmo de cifrado robusto con una longitud de clave aceptable, con base en las mejores prácticas de la industria. En este caso, evitar el uso de TripleDES y usar AES para el cifrado de bloques.
- Emplear un modo de cifrado seguro. Como se comentó arriba, el uso de ECB puede dar pie al compromiso de los datos protegidos debido a la generación de patrones en los criptogramas. No obstante, se ha comprobado que otros modos de cifrado también son vulnerables, como es el caso de CBC, comprometido en ataques como Padding Oracle Attack. Por esta razon, se sugiere emplear modos más seguros y recientes, como es el caso de Galois/Counter Mode (GCM).
- Usar los vectores de inicialización (IV) de forma segura: Para que un IV proporcione el nivel de seguridad esperado, se debe generar de forma segura (lo más aleatorio posible) y no ser reutilizado. El reuso del IV fue lo que dió paso al compromiso de Wired Equivalent Privacy, un protocolo de seguridad para la protección de redes inalámbricas. En ese caso, se empleaba una implementación débil del algoritmo de cifrado (RC4) junto con IVs cortos y reutilizados.
- Si existen repositorios de datos sensibles cifrados con algoritmos considerados débiles y con ECB, se recomienda proceder con la migración de dicha información hacia un algoritmo robusto con un modo de cifrado fuerte.
Personalmente, recomiendo el uso de AES de 256 bits en modo GCM, empleando módulos de seguridad de hardware (HSMs) confiables.