Criptografía de clave simétrica
En esta lección examinamos la criptografía de clave simétrica, que debido a su eficiencia protege gran parte de los datos en reposo y en tránsito.
Al final de la lección habremos cubierto los siguientes temas:
- Qué es la criptografía de clave simétrica
- Ejemplos de código Python para ilustrar el uso de la criptografía de clave simétrica
- Aplicaciones de la criptografía de clave simétrica
- Áreas de aplicación de la criptografía de clave simétrica
- La seguridad de la criptografía de clave simétrica
- Amenazas a estos algoritmos por parte de computadoras clásicas y cuánticas
Introducción a la criptografía de clave simétrica
La criptografía de clave simétrica (SKC) es la forma más antigua e intuitiva de criptografía. En la SKC, la información confidencial se protege mediante el cifrado de clave simétrica (SKE), es decir, utilizando una única clave secreta tanto para el cifrado como para el descifrado.
La SKC comprende:
- Una función de cifrado que convierte un texto plano dado en texto cifrado utilizando una clave secreta
- Una función de descifrado que revierte la operación, convirtiendo el texto cifrado de nuevo en texto plano utilizando la misma clave secreta
El texto plano puede significar cualquier tipo de datos sin cifrar, como texto en lenguaje natural o código binario, cuyo contenido informativo es fundamentalmente accesible directamente, mientras que el texto cifrado se refiere a datos cifrados cuyo contenido informativo no debe ser accesible antes del descifrado.
Un algoritmo que describe las operaciones de cifrado y descifrado utilizando una clave secreta compartida también se denomina cifrado simétrico.

Figura 1. Cifrado de clave simétrica de un texto plano dado a texto cifrado y descifrado de vuelta a texto plano con la misma clave.
Propiedades de los criptosistemas de clave simétrica
Un criptosistema de clave simétrica debe garantizar las siguientes propiedades para asegurar los mensajes — tanto los datos almacenados estáticamente como la comunicación a través de un canal de transmisión:
- Confidencialidad: Se refiere a la propiedad de que el contenido informativo de los mensajes cifrados está protegido contra el acceso no autorizado.
- Integridad: Se refiere a la propiedad de que cualquier manipulación de los mensajes cifrados durante el almacenamiento o la transmisión puede ser detectada.
- Autenticidad: Se refiere a la propiedad de que el receptor de un mensaje puede verificar la identidad del remitente y detectar suplantaciones por parte no autorizada.
Además, estas propiedades deben realizarse en un entorno donde los algoritmos o cifrados utilizados para el cifrado y descifrado pueden ser públicos y el acceso al contenido informativo de los mensajes cifrados se controla exclusivamente mediante el acceso a la clave secreta.
La implementación de un criptosistema de clave simétrica seguro comprende, por tanto, dos tareas principales:
- Emplear un algoritmo de cifrado de clave simétrica robusto que sea resistente a los ataques criptográficos.
- Garantizar la confidencialidad en la distribución y gestión de las claves secretas.
En esta lección discutiremos aspectos relacionados con la primera tarea, que representa la preocupación principal de la tecnología SKC. Sin embargo, la segunda tarea requiere soluciones que están fuera de la propia SKC y se introducirá más adelante.
Ilustración del cifrado de clave simétrica con Python
Mostramos un ejemplo sencillo de las operaciones de cifrado y descifrado utilizando el clásico cifrado César por desplazamiento y el moderno Advanced Encryption Standard (AES), que desde 2001 es el estándar para el cifrado de clave simétrica. Primero configuramos algunas bibliotecas de Python que proporcionan los cifrados de clave simétrica necesarios y luego definimos el texto plano que queremos cifrar.
# Added by doQumentation — required packages for this notebook
!pip install -q cryptography numpy secretpy
# Install the library if needed
# %pip install secretpy
# import the required crypto functions which will be demonstrated later
from secretpy import Caesar
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from functools import reduce
import numpy as np
# Set the plaintext we want to encrypt
plaintext = "this is a strict top secret message for intended recipients only"
print(f"\nGiven plaintext: {plaintext}")
Veremos cómo este texto puede cifrarse y descifrarse con dos métodos diferentes de cifrado de clave simétrica:
- El clásico cifrado César por desplazamiento
- El moderno Advanced Encryption Standard AES-256
Cifrado César por desplazamiento
El cifrado César por desplazamiento implica la definición de:
- Un alfabeto de posibles caracteres a codificar
- Un valor de desplazamiento, que puede estar entre 0 (sin cifrar) y la longitud del alfabeto. Consideramos esto como la clave.
Se conoce como un cifrado de sustitución monoalfabético, ya que cada letra del texto plano se reemplaza por otra en el texto cifrado.
En este ejemplo utilizamos letras minúsculas del alfabeto.
Comencemos con la configuración.
# initialize the required python object for doing Caesar shift encryption
caesar_cipher = Caesar()
# Define the shift, ie the key
caesar_key = 5
print(f"Caesar shift secret key: {caesar_key}")
# Define the alphabet
alphabet = (
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
" ",
)
print(f"alphabet: {alphabet}")
Cifrar el texto plano para obtener el texto cifrado para el cifrado César.
caeser_ciphertext = caesar_cipher.encrypt(plaintext, caesar_key, alphabet)
print(f"Encrypted caeser shift ciphertext: {caeser_ciphertext}")
Descifrar el texto cifrado de vuelta al texto plano original utilizando la misma clave que se usó para el cifrado.
caeser_plaintext = caesar_cipher.decrypt(caeser_ciphertext, caesar_key, alphabet)
print(f"Decrypted caeser shift plaintext: {caeser_plaintext}\n")
Advanced Encryption Standard (AES)
Ahora ciframos el texto plano con AES, un popular algoritmo de cifrado de clave simétrica.
Comenzamos con la creación de la clave, en este caso una cadena aleatoria de 16 caracteres.
# lambda defines an inline function in this case that takes two values a,b with the resulting expression of a+b
# reduce uses a two-argument function(above), and applies this to all the entries in the list (random alphabet characters) cumulatively
aes_key = reduce(lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)])
print(f"AES secret key: {aes_key}")
AES soporta varios modos de operación y requiere que especifiquemos cuál queremos usar.
Elegimos el modo Cipher Block Chaining (CBC), proporcionado por la clase modes.CBC de la biblioteca cryptography. El modo CBC de AES utiliza aleatoriedad para seguridad adicional. Esto requiere especificar un vector de inicialización (IV) aleatorio, también llamado nonce. Para ello utilizamos también una cadena aleatoria, igual que para la clave.
aes_initialization_vector = reduce(
lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)]
)
print(f"AES initialization vector: {aes_initialization_vector}")
Ahora podemos instanciar un cifrado AES en nombre del remitente del mensaje secreto. Observa que el vector de inicialización se pasa a la clase modes.CBC para configurar el modo de operación CBC.
Luego cifraremos el texto plano a enviar.
# The encryptor is setup using the key and CBC. In both cases we need to convert the string (utf-8) into bytes
sender_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_encryptor = sender_aes_cipher.encryptor()
# update can add text to encypt in chunks, and then finalize is needed to complete the encryption process
aes_ciphertext = (
aes_encryptor.update(bytes(plaintext, "utf-8")) + aes_encryptor.finalize()
)
# Note the output is a string of bytes
print(f"Encrypted AES ciphertext: {aes_ciphertext}")
Para descifrarlo, instanciamos un cifrado AES en nombre del receptor. Observa que el receptor previsto tiene acceso tanto a la clave secreta como al vector de inicialización, aunque este último no necesita ser secreto.
# Similar setup of AES to what we did for encryption, but this time, for decryption
receiver_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_decryptor = receiver_aes_cipher.decryptor()
# Do the decryption
aes_plaintext_bytes = aes_decryptor.update(aes_ciphertext) + aes_decryptor.finalize()
# convert back to a character string (we assume utf-8)
aes_plaintext = aes_plaintext_bytes.decode("utf-8")
print(f"Decrypted AES plaintext: {aes_plaintext}")
Aplicaciones de la criptografía de clave simétrica
Mientras que los cifrados clásicos como el cifrado César dejaron de usarse hace mucho tiempo, los criptosistemas simétricos modernos como AES se utilizan en una amplia variedad de aplicaciones, entre las que se incluyen:
-
Cifrado y descifrado de datos: La SKC se utiliza comúnmente para proteger datos sensibles, ya sean almacenados estáticamente en un dispositivo o transmitidos a través de una red. Los ejemplos incluyen la protección de credenciales de usuario, el cifrado de mensajes de correo electrónico y la seguridad de transacciones financieras.
-
Comunicación segura: Los protocolos de comunicación comunes como SSL/TLS utilizan una combinación de cifrado de clave simétrica y asimétrica para garantizar la confidencialidad e integridad de los datos intercambiados entre dos partes. Estos mensajes se cifran y descifran con cifrado de clave simétrica utilizando una clave compartida. La clave utilizada en el cifrado de clave simétrica se intercambia de forma segura mediante cifrado de clave asimétrica, que utiliza un par de claves pública-privada. El cifrado de clave simétrica es considerablemente más rápido y, por lo tanto, puede utilizarse para cifrar mensajes grandes.
-
Verificación de autenticidad: En algunos entornos, la SKC se emplea mediante técnicas como códigos de autenticación de mensajes (MACs) y MACs basados en hash con clave (HMAC) para verificar la autenticidad e integridad de los mensajes y garantizar una comunicación a prueba de manipulaciones.
-
Cifrado de archivos y discos: El software de cifrado de disco completo y las herramientas de cifrado de archivos utilizan SKC para proteger datos sensibles en discos duros o dispositivos de almacenamiento portátiles.
-
Redes privadas virtuales: Las tecnologías VPN, que ofrecen canales de comunicación confidenciales libres de escuchas, pueden emplear cifrado de clave simétrica o asimétrica para conectar usuarios remotos así como redes empresariales.
El diverso espectro de aplicaciones en las que se emplea la SKC requiere, a su vez, que los criptosistemas simétricos cumplan ciertos criterios.
Principios fundamentales del cifrado de clave simétrica
En esta sección discutiremos algunos de los principios fundamentales que subyacen a la seguridad de los algoritmos de cifrado de clave simétrica.
Resistencia a ataques de fuerza bruta: El requisito más básico para la seguridad de un cifrado es que el espacio de claves — en otras palabras, el número de posibles claves diferentes entre las que alguien que usa el algoritmo podría haber elegido — sea muy grande.
Resistencia a ataques criptoanalíticos: El segundo requisito fundamental de un cifrado, ya sea simétrico o no, es que pueda producir textos cifrados que sean informacionalmente impenetrables. Para este fin, una condición necesaria pero no suficiente de la teoría de la información es que los textos cifrados deben caracterizarse por una alta entropía, de modo que sean indistinguibles de texto aleatorio sin patrones ni correlaciones reconocibles. De esta manera, un atacante no puede obtener información sobre el texto plano o la clave secreta intentando analizar el texto cifrado mediante análisis de frecuencia u otras técnicas estadísticas.
La resistencia a formas generales de ataques criptoanalíticos, suficiente para garantizar seguridad semántica, se formaliza mediante el concepto de indistinguibilidad. Aunque existen varias variantes de indistinguibilidad con diferentes requisitos, un criptosistema simétrico se considera semánticamente seguro si cumple el criterio de indistinguibilidad bajo ataque de texto plano elegido (IND-CPA). Esto significa que un atacante no puede distinguir entre los cifrados de dos mensajes diferentes, incluso si se le permite enviar múltiples textos planos de su elección al algoritmo y observar los textos cifrados correspondientes.
Como veremos más adelante, IND-CPA típicamente requiere el uso de aleatoriedad para asegurar que cada vez que un texto plano dado se cifra con una clave secreta dada, el texto cifrado resultante es impredeciblemente diferente en cada cifrado.
Vulnerabilidades de los cifrados clásicos: Antes del surgimiento de la criptografía moderna en la década de 1970, la mayoría de los cifrados clásicos utilizados en la práctica no cumplían uno o ambos de los requisitos anteriores. Los primeros cifrados de sustitución como el monoalfabético cifrado César por desplazamiento, por ejemplo, se caracterizaban tanto por un espacio de claves pequeño (ver Tabla 1) como por texto cifrado con baja entropía, lo que los hacía vulnerables a una variedad de ataques criptoanalíticos como ataques de fuerza bruta, análisis de frecuencia y ataques de texto plano conocido (KPA).
Los cifrados de sustitución polialfabéticos posteriores como el cifrado de Vigenere y el cifrado de la máquina Enigma tenían espacios de claves efectivamente grandes, lo que los hacía resistentes a ataques de fuerza bruta, pero eran vulnerables al análisis de frecuencia y KPA respectivamente. De manera similar a los cifrados de sustitución, los cifrados de transposición clásicos, que reordenan las letras en un mensaje en lugar de sustituirlas, están amenazados por una variedad de ataques como anagramación, análisis estadístico, fuerza bruta y KPA.
Teóricamente, un cifrado de sustitución polialfabético conocido como libreta de un solo uso (OTP) se sabe que es criptográficamente seguro. Un OTP tiene una clave secreta que debe (1) consistir en letras o bits elegidos aleatoriamente, (2) ser al menos tan larga como el texto plano original y (3) usarse solo una vez. Un OTP es impráctico para aplicaciones reales, porque si la clave secreta — que debe ser tan larga como el texto plano y solo puede usarse una vez — pudiera compartirse de forma segura, entonces el texto plano original también podría compartirse de forma segura. El OTP ilustra en cambio la utilidad de la aleatoriedad en la producción de textos cifrados seguros.
Un atacante que desee realizar una búsqueda de fuerza bruta a través del espacio de claves para encontrar una clave que descifre el mensaje debe realizar un número de operaciones proporcional al tamaño del espacio de claves.
Un espacio de claves grande proporciona, por tanto, resistencia contra ataques de fuerza bruta al hacerlos computacionalmente inviables. La Tabla 1 enumera los tamaños de espacio de claves de algunos cifrados conocidos.
Tabla 1: Tamaños del espacio de claves de algunos cifrados simétricos
| Cifrado | Longitud de clave | Tamaño del espacio de claves |
|---|---|---|
| Caeser shift | 1 | alphabet-size |
| Vigenere | n | alphabet-size |
| One-time-pad | plaintext-length | alphabet-size |
| DES | 56 | 2 |
| AES-128 | 128 | 2 |
| AES-192 | 192 | 2 |
| AES-256 | 256 | 2 |
| ChaCha20 | 256 | 2 |
Los esquemas modernos de cifrado de clave simétrica superan en gran medida las limitaciones de los cifrados clásicos. Producen texto cifrado resistente al criptoanálisis y tienen grandes espacios de claves, siendo al mismo tiempo esencialmente más eficientes en la práctica que un OTP.
Cifrados de bloque: Una clase de cifrados modernos — como DES y AES — logra la seguridad combinando los principios de confusión y difusión, introducidos originalmente por Claude Shannon. Explicamos estos conceptos en un entorno donde los esquemas de cifrado operan con representaciones binarias de mensajes:
-
Confusión: La confusión es la propiedad por la cual cada bit del texto cifrado depende de múltiples bits de la clave secreta. Asegura que un pequeño cambio en la clave secreta modifique casi todos los bits del texto cifrado, oscureciendo así la relación entre el texto cifrado y la clave secreta.
-
Difusión: La difusión es la propiedad por la cual invertir un solo bit en el texto plano debería cambiar aproximadamente la mitad de los bits en el texto cifrado y viceversa. La difusión oculta las relaciones estadísticas entre el texto plano y el texto cifrado. Los cifrados con suficiente difusión satisfacen el llamado criterio de avalancha de la criptografía.
Los cifrados de bloque implementan confusión y difusión mediante estructuras criptográficas conocidas como redes de sustitución-permutación (SPN), que operan sobre bloques discretos de datos. Una SPN toma un bloque de texto plano y la clave secreta como entradas y realiza un número fijo de rondas de transformaciones para producir un bloque de texto cifrado. Cada ronda consiste en estructuras matemáticas alternantes conocidas como cajas de sustitución (S-boxes) y cajas de permutación (P-boxes) u operaciones equivalentes.
Estas implementan respectivamente transformaciones complejas no lineales y lineales sobre los bloques de entrada, lo que produce efectos de avalancha en el texto cifrado.
Las SPN están diseñadas de modo que aumentar el número de rondas típicamente aumenta la seguridad del cifrado. Esto lleva al concepto de margen de seguridad.
Margen de seguridad: El margen de seguridad de un cifrado criptográfico basado en SPN dado es la diferencia entre el número de rondas en la implementación completa del cifrado y el número máximo de rondas que se sabe que pueden romperse con el mejor ataque real conocido.
Actualmente, por ejemplo, los mejores ataques conocidos más rápidos que la fuerza bruta contra AES-256 pueden romper hasta 9 rondas de un total de 14 rondas del cifrado completo cuando se usa en el modo estándar conocido como modo Electronic Codebook (ECB). Por lo tanto, el margen de seguridad de AES-256 es actualmente de 5 rondas.
Cifrados de flujo: Como alternativa a los cifrados de bloque, los criptógrafos modernos también han desarrollado cifrados de flujo prácticamente seguros como ChaCha20. Estos cifrados utilizan la aleatoriedad como parte fundamental de su diseño y operan sobre flujos de claves pseudoaleatorios de bits en lugar de bloques discretos de datos.
En consecuencia, los cifrados de flujo combinan una clave secreta y un vector de inicialización (IV) para inicializar un generador de números pseudoaleatorios (PRNG) y producir un flujo de claves de bits aleatorios que luego se combina con el texto plano dado para producir el texto cifrado. En este sentido, los cifrados de flujo se asemejan a una libreta de un solo uso (OTP), pero tienen longitudes de clave secreta más cortas y claves reutilizables, lo que los hace más prácticos. Sin embargo, por la misma razón, no garantizan el secreto perfecto, a diferencia de un OTP.
Seguridad semántica: Concluimos esta subsección volviendo al concepto de seguridad semántica o seguridad IND-CPA, introducida anteriormente. Las operaciones fundamentales implementadas por cifrados de bloque como S-box y P-box son deterministas. Esto significa que en modos de operación estándar como ECB, un par texto plano-clave dado siempre produce el mismo texto cifrado — una situación vulnerable a ataques de texto plano elegido.
Para lograr seguridad IND-CPA, los cifrados de bloque deben operarse en un modo que utilice aleatoriedad, introducida a través de un vector de inicialización (IV) pseudoaleatorio, con el requisito adicional de que ninguna dos operaciones de cifrado utilicen el mismo par clave-IV. AES soporta varios modos de operación, como Cipher Block Chaining (CBC), que son IND-CPA seguros. Un requisito similar aplica también a los cifrados de flujo, donde el mismo par clave-IV no debería inicializar el PRNG más de una vez si se desea IND-CPA.
Algoritmos populares de clave simétrica
Tras haber presentado algunos principios básicos de la SKC, enumeramos ahora algunos algoritmos populares de clave simétrica para ilustrar la variedad de enfoques seguidos en los criptosistemas modernos. Tanto los cifrados de bloque modernos como los cifrados de flujo se emplean en diversos contextos, como se muestra a continuación.
-
Advanced Encryption Standard: AES, ya presentado anteriormente, es actualmente el estándar de facto para SKC gracias a sus propiedades de seguridad, eficiencia y rendimiento. AES tiene tamaños de clave fijos de 128, 192 y 256 bits y utiliza una red de sustitución-permutación (SPN) basada en múltiples rondas. AES es conocido por ser resistente a una amplia variedad de ataques criptoanalíticos. AES fue anunciado como Federal Information Processing Standard (FIPS) para el cifrado de clave simétrica en los Estados Unidos en 2001.
-
Data Encryption Standard (DES) y Triple Data Encryption Standard (3DES): DES fue un cifrado de bloque inventado originalmente por Horst Feistel y colaboradores en IBM® en la década de 1970, que utilizaba una SPN con una clave relativamente corta de 56 bits. DES se utilizó como FIPS para el cifrado de clave simétrica en los Estados Unidos hasta finales de la década de 1990, cuando se demostró que podía romperse mediante ataques de fuerza bruta con hardware especializado debido a su pequeño espacio de claves. Posteriormente, se introdujo 3DES como reemplazo, aplicando el algoritmo DES tres veces con diferentes claves, lo que aumenta la longitud de clave a 168 bits. No obstante, 3DES ha sido ampliamente reemplazado por AES.
-
Blowfish y Twofish: Blowfish y su sucesor Twofish son cifrados de bloque propuestos por el criptógrafo Bruce Schneier en la década de 1990. Blowfish y Twofish permiten longitudes de clave variables de hasta 448 bits y 256 bits respectivamente, ofreciendo cierta flexibilidad para equilibrar seguridad y rendimiento. A diferencia de AES, también tienen S-boxes dependientes de la clave. Twofish fue uno de los finalistas en el concurso NIST para seleccionar el Advanced Encryption Standard, pero finalmente no fue elegido. Ambos algoritmos se consideran actualmente seguros.
-
Cifrados Rivest (RC2, RC4, RC5 y RC6): La familia de algoritmos de clave simétrica Rivest Cipher (RC) fue diseñada por Ron Rivest a partir de la década de 1980. RC2 fue un cifrado de bloque temprano de 64 bits, mientras que RC4 fue un cifrado de flujo ampliamente utilizado en protocolos de seguridad para tráfico web debido a su simplicidad y velocidad. Ninguno de los dos se considera actualmente seguro. RC5 y RC6 son cifrados de bloque basados en SPN diseñados con tamaño de bloque, tamaño de clave y número de rondas ajustables. Al igual que Twofish, RC6 fue finalista en el concurso NIST AES y se considera seguro.
-
Salsa20 y ChaCha20: Salsa20 y ChaCha20 son una familia relacionada de cifrados de flujo diseñados por el criptógrafo Daniel Bernstein en la década de 2000. Salsa20 forma parte del portafolio eSTREAM del proyecto europeo de validación criptográfica (Perfil 1). ChaCha20, una modificación de Salsa20, fue diseñado para mejorar las propiedades de difusión y el rendimiento. Actualmente, ChaCha20 se considera seguro y ofrece un mejor rendimiento sin aceleración de hardware AES dedicada. Por lo tanto, ChaCha20 encuentra uso en ciertas áreas como protocolos de red como QUIC y dispositivos móviles con CPUs basadas en ARM.
Ventajas de la criptografía de clave simétrica
Tras haber esbozado las propiedades de los criptosistemas de clave simétrica y algunos de los principios que subyacen a su desarrollo, enumeramos ahora algunas de las principales ventajas de la SKC en comparación con la criptografía de clave asimétrica. Esta última se discutirá en las lecciones siguientes.
-
Velocidad y eficiencia: Los algoritmos de clave simétrica son más adecuados para cifrar grandes volúmenes de datos o para su uso en escenarios de comunicación en tiempo real, ya que generalmente son más rápidos y consumen menos recursos que sus contrapartes asimétricos. Los algoritmos SKC como AES escalan linealmente con el tamaño del texto plano y no implican operaciones matemáticas algebraicamente intensivas. Consulta Tomoiaga et al. para una descripción detallada de las propiedades de rendimiento de AES.
-
Escalabilidad: Debido a su costo computacional relativamente bajo, los algoritmos de clave simétrica escalan bien con el número de usuarios y la cantidad de datos a cifrar.
-
Simplicidad: Los protocolos de cifrado simétrico suelen ser más fáciles de implementar y entender que los enfoques de clave asimétrica, lo que los hace atractivos para desarrolladores y usuarios.
Desafíos y limitaciones de la criptografía de clave simétrica
A pesar de las ventajas, la criptografía de clave simétrica también tiene algunos desafíos y limitaciones:
-
Distribución y gestión de claves: En la SKC, tanto el remitente como el receptor de un mensaje deben tener acceso a la misma clave, que debe mantenerse en secreto frente a partes no autorizadas. Si la clave es interceptada o comprometida de alguna manera por un tercero, la seguridad de los datos cifrados también se pierde. La distribución y gestión segura de la clave secreta es, por tanto, un gran desafío. Sin embargo, la solución a este desafío está fuera del ámbito de la propia SKC.
-
Falta de no repudio: El no repudio se refiere a la capacidad de demostrar que una parte específica envió un mensaje. En la SKC, dado que la misma clave se utiliza para cifrar y descifrar, no es posible determinar qué parte creó un texto cifrado determinado. En contraste, la criptografía de clave asimétrica proporciona no repudio mediante el uso de firmas digitales.
Para abordar estos desafíos, la criptografía de clave simétrica se emplea a menudo en combinación con la criptografía de clave asimétrica. Por ejemplo, es común utilizar cifrado de clave asimétrica para transmitir de forma segura una clave secreta compartida relativamente corta entre el remitente y el receptor. Esto permite el uso posterior del cifrado de clave simétrica para transmitir datos y mensajes significativamente más grandes de manera eficiente.
Computación cuántica y cifrado de clave simétrica: riesgos y mitigación
La criptografía cuántica ofrece un camino prometedor para la mitigación de riesgos en la era digital, donde la introducción de productos cuánticos seguros tiene como objetivo proteger nuestra información contra la amenaza inminente de los avances en la computación cuántica.
A continuación discutimos los riesgos que los computadores cuánticos representan para los esquemas de cifrado de clave simétrica y esbozamos algunas vías potenciales para la mitigación de riesgos.
Ataques criptográficos cuánticos
Existen dos clases diferentes de amenazas cuánticas para los algoritmos criptográficos tradicionales:
-
Ataques de fuerza bruta cuánticos: Se refieren a situaciones en las que el atacante emplea un computador cuántico para ejecutar un algoritmo cuántico especializado para realizar una búsqueda de fuerza bruta a través del espacio de claves de un cifrado simétrico. La primitiva cuántica más relevante para este tipo de ataque es el algoritmo de Grover.
-
Ataques criptoanalíticos cuánticos: Se refieren a situaciones en las que se emplean computadores cuánticos para ejecutar ataques criptoanalíticos que tienen como objetivo recuperar la clave secreta o el texto plano de manera más eficiente que una búsqueda de fuerza bruta. La posibilidad de realizar ataques criptoanalíticos cuánticos exitosos depende de muchos factores relacionados con la estructura matemática del cifrado analizado así como con vulnerabilidades potenciales en implementaciones específicas.
Estrategias de mitigación de riesgos para ataques cuánticos
Antes de discutir estrategias de mitigación de riesgos para ataques cuánticos, introducimos el concepto de nivel de seguridad de un cifrado criptográfico:
Nivel de seguridad es una medida de la dificultad de romper un cifrado, medida en el número de operaciones computacionales que requeriría un ataque exitoso.
Típicamente, el nivel de seguridad se expresa en bits; es decir, en general, un cifrado proporciona seguridad de N bits si se necesitan operaciones para romperlo. En computadoras clásicas, el nivel de seguridad, asumiendo que un cifrado simétrico es criptográficamente seguro por lo demás, es aproximadamente equivalente a la longitud de la clave.
El nivel de seguridad de AES-128, que tiene una clave de 128 bits, se considera generalmente como 128 bits, ya que un atacante que use una computadora clásica necesitaría del orden de 2 operaciones para probar todas las posibles claves de 128 bits en el espacio de claves.
Ataques de fuerza bruta y mitigación
Riesgo de un ataque de fuerza bruta cuántico: Un ataque de fuerza bruta cuántico altera la evaluación anterior porque el algoritmo de Grover permite a un atacante con un computador cuántico adecuado buscar el espacio de claves de un cifrado cuadráticamente más rápido que cualquier computadora clásica.
El mismo ataque de fuerza bruta contra AES-128 con el algoritmo de Grover podría realizarse potencialmente con solo 2 operaciones. Por lo tanto, el nivel de seguridad de AES-128 se reduce de 128 bits a 64 bits cuando se enfrenta a un atacante cuántico con la búsqueda de Grover. Dado que la potencia de cómputo ha crecido tradicionalmente de manera exponencial con el tiempo, un nivel de seguridad de 64 bits se considera actualmente inseguro, lo que significa que AES-128 deberá abandonarse una vez que se realicen computadores cuánticos suficientemente potentes.
El mismo cálculo aplica a otros cifrados simétricos de bloque o flujo, donde el nivel de seguridad para una longitud de clave dada se reduce efectivamente a la mitad por el algoritmo de Grover.
Mitigación del riesgo de ataque de fuerza bruta cuántico: Las consideraciones anteriores implican que un camino obvio para resistir los ataques de fuerza bruta cuánticos es al menos duplicar las longitudes mínimas de clave para el cifrado de clave simétrica.
Por lo tanto, para garantizar seguridad de 128 bits frente a ataques de fuerza bruta cuánticos, simplemente se usarían cifrados como AES-256 o ChaCha20, que emplean claves de 256 bits. Esto se considera seguro porque incluso con computadores cuánticos, realizar 2 operaciones para romper cifrados no es factible en un futuro previsible.
Aunque teóricamente simple, esta solución propuesta de duplicar los tamaños de clave no carece de costos, ya que longitudes de clave más largas significan costos computacionales adicionales para las tareas rutinarias de cifrado y descifrado, así como rendimiento más lento, mayor uso de memoria y consumo energético adicional.
Ataques criptoanalíticos y mitigación
Riesgo de ataques criptoanalíticos cuánticos: El riesgo de que los criptosistemas de clave simétrica sean amenazados por ataques criptoanalíticos cuánticos está siendo investigado activamente por los criptógrafos. La combinación de computación clásica y cuántica amplía potencialmente el arsenal de herramientas disponibles para los atacantes para investigar vulnerabilidades en la estructura matemática de los cifrados, y se está proponiendo una amplia gama de nuevos ataques criptoanalíticos cuánticos. Estos incluyen cuantizaciones de técnicas clásicas conocidas como criptoanálisis lineal y diferencial así como nuevos modos de ataque sin contrapartes clásicas.
Un estudio criptoanalítico cuántico reciente del Advanced Encryption Standard (AES) encontró que el cifrado permanecía resistente a varios ataques criptoanalíticos cuánticos conocidos y seguía manteniendo un margen de seguridad post-cuántico adecuado. Sin embargo, algunos estudios han encontrado que varios cifrados simétricos considerados seguros clásicamente son fácilmente comprometidos por los llamados ataques de texto plano elegido cuánticos. Por lo tanto, también se han propuesto nuevas primitivas para el cifrado de clave simétrica diseñadas específicamente para la era post-cuántica.
Mitigación del riesgo de ataques criptoanalíticos cuánticos: Dado que el criptoanálisis cuántico como disciplina aún está en sus inicios, es posible que la criptografía simétrica post-cuántica experimente una rápida evolución a medida que surjan nuevos ataques criptoanalíticos cuánticos y se propongan y evalúen nuevos cifrados resistentes a ellos. Por lo tanto, la mejor estrategia de mitigación de riesgos frente a ataques criptoanalíticos cuánticos en un futuro previsible es la agilidad criptográfica (o cripto-agilidad). La cripto-agilidad se refiere a la capacidad de un sistema de información para adoptar rápida y fácilmente primitivas criptográficas alternativas sin realizar cambios disruptivos en la infraestructura del sistema.
La cripto-agilidad requiere la capacidad de reemplazar algoritmos obsoletos de cifrado, descifrado, firmas digitales u otras funciones criptográficas con un esfuerzo e interrupción mínimos. Los sistemas cripto-ágiles estarán bien posicionados para gestionar la transición hacia la criptografía de clave simétrica post-cuántica.
Resumen
La criptografía de clave simétrica ofrece soluciones robustas y eficientes para asegurar la información digital. La simplicidad de usar la misma clave para cifrar y descifrar permite un alto rendimiento y escalabilidad, lo que hace que la SKC sea adecuada para una amplia variedad de aplicaciones.
La seguridad de la SKC se basa en la resistencia algorítmica contra ataques criptográficos así como en una gestión adecuada de las claves secretas. Los criptosistemas de clave simétrica modernos combinan los principios de confusión, difusión y aleatoriedad en combinación con tamaños de clave adecuados para lograr seguridad semántica. La gestión de claves secretas, aunque crucial, no puede lograrse solo con la SKC.
La comprensión de las propiedades y limitaciones de la SKC permitirá a los desarrolladores y desarrolladoras diseñar, implementar y desplegar soluciones de tecnología de la información seguras, utilizando tamaños de clave más largos y nuevos algoritmos según sea necesario.
El avance de la computación cuántica y el aprendizaje cuántico introduce una nueva dimensión en la criptografía de clave simétrica. Los computadores cuánticos tienen el potencial de socavar la seguridad proporcionada por los algoritmos clásicos de clave simétrica, lo que genera la necesidad de enfoques criptográficos resistentes a la cuántica para garantizar la protección y seguridad de los datos frente a paisajes tecnológicos en evolución.