«Dice que la fuerza de la encriptación de 256 bits… ¿es eso bueno?»
La mayoría de la gente ve el término de encriptación de 256 bits en circulación todo el tiempo y – si somos honestos – no tienen absolutamente ninguna idea de lo que significa o de lo fuerte que es. Una vez que se va más allá del nivel superficial, «codifica los datos y los hace ilegibles», el cifrado es un tema increíblemente complicado. No es una lectura ligera. La mayoría de nosotros no tiene un libro sobre exponenciación modular en la mesita de noche al lado de la cama.
Por eso es comprensible que haya cierta confusión en lo que respecta a los niveles de cifrado, lo que significan, lo que es «bueno», etc. No faltan preguntas sobre la encriptación, en concreto sobre la encriptación de 256 bits.
La principal de ellas: ¿Cómo de fuerte es el cifrado de 256 bits?
Así que hoy vamos a hablar precisamente de eso. Vamos a cubrir lo que es un poco de seguridad, vamos a entrar en la forma más común de encriptación de 256 bits y vamos a hablar de lo que se necesita para romper el cifrado en esa fuerza.
Vamos a hablar de ello.
Un rápido repaso a la encriptación, en general
Cuando encriptas algo, tomas los datos sin encriptar, llamados texto plano, y realizas una función algorítmica sobre ellos para crear un trozo de texto cifrado. El algoritmo que se utiliza se llama clave. Con la excepción de las claves públicas en el cifrado asimétrico, el valor de la clave de cifrado debe mantenerse en secreto. La clave privada asociada a ese texto cifrado es el único medio práctico para descifrarlo.
Ahora, todo esto suena increíblemente abstracto, así que vamos a utilizar un ejemplo. Y dejaremos a Bob y Alice al margen, ya que están ocupados explicando el cifrado en, literalmente, todos los demás ejemplos de Internet.
Vamos con Jack y Diane, y digamos que Jack quiere enviar a Diane un mensaje que diga: «Oh sí, la vida sigue».
Jack va a tomar su mensaje y va a utilizar un algoritmo o cifrado – la clave de cifrado – para codificar el mensaje en texto cifrado. Ahora se lo pasará a Diane, junto con la clave, que se puede utilizar para descifrar el mensaje para que sea legible de nuevo.
Mientras nadie tenga la clave, el texto cifrado no tiene valor porque no se puede leer.
¿Cómo funciona la encriptación moderna?
Jack y Diane acaban de demostrar la encriptación en su forma más básica. Y aunque las matemáticas utilizadas en los cifrados primitivos eran bastante sencillas -debido al hecho de que tenían que ser realizadas por un humano-, la llegada de los ordenadores ha aumentado la complejidad de las matemáticas que sustentan los criptosistemas modernos.Pero los conceptos siguen siendo en gran medida los mismos.
Se utiliza una clave, o un algoritmo específico, para cifrar los datos, y sólo otra parte con conocimiento de la clave privada asociada puede descifrarlos.
En este ejemplo, en lugar de un mensaje escrito que opina sombríamente que la vida continúa incluso después de que se pierda la alegría, Jack y Diane están «haciendo lo mejor que pueden» en los ordenadores (todavía «aguantando el 16» – lo siento, son chistes de John Mellencamp que probablemente no tienen sentido fuera de los Estados Unidos). Ahora la encriptación que va a tener lugar es digital.
El ordenador de Jack utilizará su clave, que en realidad es un algoritmo extremadamente complicado que ha sido derivado de los datos compartidos por los dispositivos de Jack y Diane, para encriptar el texto plano. Diane utiliza su clave simétrica correspondiente para descifrar y leer los datos.
¿Pero qué es lo que realmente se encripta? Cómo se encriptan los «datos»?
En el ejemplo original había letras reales en un papel físico que se convertían en otra cosa. Pero, ¿cómo encripta los datos un ordenador?
Eso se remonta a la forma en que los ordenadores tratan realmente los datos. Los ordenadores almacenan la información en forma binaria. 1’s y 0’s. Cualquier dato que se introduzca en un ordenador se codifica para que sea legible por la máquina. Son esos datos codificados, en su forma cruda, los que se encriptan. Esto es en realidad parte de lo que va en los diferentes tipos de archivos utilizados por los certificados SSL/TLS, es parcialmente contingente en el tipo de esquema de codificación que está tratando de cifrar.
Así que el ordenador de Jack encripta los datos codificados y los transmite al ordenador de Diane, que utiliza la clave privada asociada para desencriptar y leer los datos.
De nuevo, mientras la clave privada siga siendo, ya sabes… privada, la encriptación sigue siendo segura.
La encriptación moderna ha resuelto el mayor obstáculo histórico de la encriptación: el intercambio de claves. Históricamente, la clave privada tenía que pasarse físicamente. La seguridad de la clave era literalmente una cuestión de almacenar físicamente la clave en un lugar seguro. El compromiso de la clave no sólo hacía que el cifrado fuera discutible, sino que podía hacer que te mataran.
En la década de 1970, un trío de criptógrafos, Ralph Merkle, Whitfield Diffie y Martin Hellman, comenzó a trabajar en una forma de compartir de forma segura una clave de cifrado en una red insegura con un atacante observando. Lo consiguieron a nivel teórico, pero no lograron dar con una función de encriptación asimétrica que fuera práctica. Tampoco tenían ningún mecanismo de autentificación (pero eso es una conversación totalmente diferente). Merkle fue el autor del concepto inicial, pero su nombre no está asociado al protocolo de intercambio de claves que inventaron, a pesar de las protestas de sus otros dos creadores.
Alrededor de un año después, Ron Rivest, Adi Shamir y Leonard Adleman crearon un método de intercambio de claves homónimo basado en el intercambio de claves Diffie-Hellman (RSA), que también incluía funciones de cifrado/descifrado y autenticación. Esto es relevante porque fue el nacimiento de toda una nueva iteración del cifrado: el cifrado asimétrico.
También nos dieron los ya mencionados Bob y Alice, lo que para mí, al menos, lo convierte en una especie de lavado.
De todos modos, entender la diferencia entre el cifrado simétrico y asimétrico es clave para el resto de esta discusión.
Encriptación asimétrica frente a encriptación simétrica
La encriptación simétrica se denomina a veces encriptación de clave privada, porque ambas partes deben compartir una clave simétrica que puede utilizarse tanto para encriptar como para desencriptar datos.
La encriptación asimétrica, por otro lado, a veces se llama encriptación de clave pública. Una mejor manera de pensar en el cifrado asimétrico podría ser pensar en él como un cifrado unidireccional.
A diferencia de que ambas partes comparten una clave privada, existe un par de claves. Una parte posee una clave pública que puede cifrar, la otra posee una clave privada que puede descifrar.
El cifrado asimétrico se utiliza principalmente como un mecanismo para intercambiar claves privadas simétricas. Hay una razón para ello, el cifrado asimétrico es históricamente una función más cara debido al tamaño de sus claves. Así que la criptografía de clave pública se utiliza más como un muro externo para ayudar a proteger a las partes mientras facilitan una conexión, mientras que el cifrado simétrico se utiliza dentro de la propia conexión.
Claves de 2048 bits frente a claves de 256 bits
En SSL/TLS, el cifrado asimétrico cumple una función extremadamente importante. Permite al cliente cifrar los datos que serán utilizados por ambas partes para derivar las claves de sesión simétricas que utilizarán para comunicarse. Nunca se podría utilizar el cifrado asimétrico para comunicarse funcionalmente. Aunque la clave pública puede utilizarse para verificar una firma digital, no puede descifrar directamente nada de lo que la clave privada encripta, de ahí que llamemos al cifrado asimétrico «de una sola vía».
Pero el mayor problema es que el tamaño de la clave hace que las funciones de cifrado y descifrado reales sean caras en términos de los recursos de la CPU que engullen. Por eso, muchas organizaciones y empresas grandes, al desplegar SSL/TLS a escala, descargan los handshakes: para liberar recursos en sus servidores de aplicaciones.
En cambio, utilizamos el cifrado simétrico para la comunicación real que se produce durante una conexión cifrada. Las claves simétricas son más pequeñas y menos costosas de calcular.
Así que cuando veas a alguien referirse a una clave privada de 2048 bits, lo más probable es que se refiera a una clave privada RSA. Esa es una clave asimétrica. Tiene que ser lo suficientemente resistente a los ataques porque lleva a cabo una función crítica. También porque el intercambio de claves es el mejor vector de ataque para comprometer una conexión. Es mucho más fácil robar los datos utilizados para crear la clave de sesión simétrica y calcularla uno mismo que tener que descifrar la clave por fuerza bruta cuando ya está en uso.
Eso nos lleva a preguntarnos: «¿Cómo de fuerte es el cifrado de 256 bits?». Si es menos robusto que una clave de 2048 bits, ¿sigue siendo suficiente? Y vamos a responder a eso, pero primero tenemos que cubrir un poco más de terreno en aras de proporcionar el contexto adecuado.
¿Qué es exactamente un «bit» de seguridad?
Es realmente importante que hablemos de los bits de seguridad y de la comparación de la fuerza de encriptación entre algoritmos antes de que entremos en cualquier discusión práctica sobre lo fuerte que es realmente 256 bits de seguridad.Porque no es una comparación 1:1.
Por ejemplo, una clave AES de 128 bits, que es la mitad del tamaño recomendado actualmente, es más o menos equivalente a una clave RSA de 3072 bits en términos de la seguridad real que proporcionan.
También es importante entender la diferencia entre declaración de seguridad y nivel de seguridad.
- Afirmación de seguridad – Es el nivel de seguridad que la primitiva criptográfica – el cifrado o la función de hash en cuestión – fue inicialmente diseñada para alcanzar.
- Nivel de seguridad – La fuerza REAL que la primitiva criptográfica alcanza.
- Colisiones – Cuando dos piezas diferentes de datos producen el mismo valor de hash se llama una colisión y rompe el algoritmo.
- Resistencia a la preimagen – Cómo de resistente es un algoritmo a un exploit en el que un atacante intenta encontrar un mensaje con un valor hash específico.
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
- TLS_ECDSA_WITH_CHACHA20_POLY1305
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256
- TLS_AES_128_CCM_8_SHA256
- TLS_AES_128_CCM_SHA256
Típicamente se expresa en bits. Un bit es una unidad básica de información. En realidad, es una abreviatura de «dígito binario», que es a la vez increíblemente eficiente y no tan eficiente. Claro, es más fácil decir bit. Pero acabo de dedicar un párrafo entero a explicar que un bit es básicamente un 1 o un 0 en binario, cuando el término original lo habría logrado en dos palabras. Así que tú decides si es más eficiente. En fin, no vamos a dedicar mucho más tiempo al binario del que ya hemos dedicado, pero Ross escribió un gran artículo sobre él hace unos meses que deberías consultar.
De todos modos, el nivel de seguridad y la demanda de seguridad se expresan típicamente en bits. En este contexto, los bits de seguridad, llamémoslos (n), se refieren al número de operaciones que un atacante necesitaría hipotéticamente realizar para adivinar el valor de la clave privada. Cuanto más grande sea la clave, más difícil será adivinarla o descifrarla. Recuerda que esta clave está en 1s y 0s, por lo que hay dos valores potenciales para cada bit. El atacante tendría que realizar 2n operaciones para descifrar la clave.
Esto puede ser un poco demasiado abstracto, así que aquí hay un ejemplo rápido: Digamos que hay una clave de 2 bits. Eso significa que tendrá 22 (4) valores.
Eso sería trivialmente fácil de descifrar para un ordenador, pero cuando empiezas a entrar en tamaños de clave más grandes se vuelve prohibitivamente difícil para un ordenador moderno adivinar correctamente el valor de una clave privada en cualquier cantidad de tiempo razonable.
Pero antes de que lleguemos a las matemáticas, volvamos a la afirmación de seguridad frente al nivel de seguridad
Afirmación de seguridad frente al nivel de seguridad
Típicamente, cuando ves que se comercializa el cifrado, ves que se anuncia la afirmación de seguridad. Eso es lo que el nivel de seguridad sería en condiciones óptimas. Vamos a mantener esto específico para SSL/TLS y PKI, pero el porcentaje de veces que se dan las condiciones óptimas está lejos del 100%. Los errores de configuración son habituales, al igual que mantener el soporte para versiones antiguas de SSL/TLS y suites de cifrado obsoletas en aras de la interoperabilidad.
En el contexto de SSL/TLS, cuando un cliente llega a un sitio web se produce un apretón de manos en el que las dos partes determinan una suite de cifrado mutuamente acordada para utilizar. La fuerza de cifrado que realmente se obtiene depende de los parámetros decididos durante el handshake, así como de las capacidades del propio servidor y del cliente.
En Everything Encryption By Patrick Nohe
A veces el cifrado de 256 bits sólo proporciona un nivel de seguridad de 128 bits. Esto es particularmente común con los algoritmos de hash, que miden la resistencia a dos tipos diferentes de ataques:
Así, por ejemplo, SHA-256 tiene una resistencia a las colisiones de 128 bits (n/2) , pero una resistencia a la preimagen de 256 bits. Obviamente, el hashing es diferente del cifrado, pero también hay un montón de similitudes que hacen que merezca la pena mencionarlo.
¿Cómo de fuerte es el cifrado de 256 bits?
De nuevo, esto varía en función del algoritmo que estés utilizando, y varía del cifrado asimétrico al simétrico. Como hemos dicho, no son comparaciones 1:1. De hecho, el nivel de seguridad del cifrado asimétrico no es realmente tan científico como podría parecer. El cifrado asimétrico se basa en problemas matemáticos que son fáciles de realizar en un sentido (cifrado) pero extremadamente difíciles de revertir (descifrado). Por eso, los ataques contra los criptosistemas asimétricos de clave pública suelen ser mucho más rápidos que las búsquedas por fuerza bruta del espacio de claves que afectan a los esquemas de cifrado simétrico de clave privada. Así que, cuando se habla del nivel de seguridad de la criptografía de clave pública, no se trata de una cifra fija, sino de un cálculo de la dureza computacional de la implementación contra el mejor ataque, el más conocido actualmente.
La fuerza del cifrado simétrico es un poco más fácil de calcular debido a la naturaleza de los ataques de los que tienen que defenderse.
Entonces, veamos el AES o Estándar de Cifrado Avanzado, que se utiliza comúnmente como un cifrado masivo con SSL/TLS. Los cifrados masivos son los criptosistemas simétricos que realmente se encargan de asegurar la comunicación que se produce durante una conexión HTTPS cifrada.
Históricamente hay dos sabores: cifrados de bloque y cifrados de flujo.
Los cifradores de bloque descomponen todo lo que cifran en bloques del tamaño de una clave y los cifran. El descifrado implica volver a unir los bloques. Y si el mensaje es demasiado corto o demasiado largo, que es la mayoría de las veces, hay que dividirlos y/o rellenarlos con datos desechables para que tengan la longitud adecuada. Los ataques de relleno son una de las amenazas más comunes para SSL/TLS.
TLS 1.3 eliminó este estilo de cifrado masivo exactamente por esa razón, ahora todos los cifradores deben estar configurados en modo de flujo. Los cifrados de flujo cifran los datos en flujos pseudoaleatorios de cualquier longitud, se consideran más fáciles de desplegar y requieren menos recursos. TLS 1.3 también ha eliminado algunos cifrados de flujo inseguros, como RC4.
Así que, resumiendo, hoy en día sólo hay dos cifrados de flujo sugeridos, AES y ChaCha20. Vamos a centrarnos en AES ahora mismo, porque ChaCha20 es un animal diferente.
TLS 1.2 Recommended Ciphers
TLS 1.3 Recommended Ciphers
GCM significa Galois Counter Mode, que permite que AES -que en realidad es un cifrado por bloques- se ejecute en modo de flujo. CCM es similar, combinando un modo de contador con funciones de autenticación de mensajes.
Como hemos cubierto, en realidad se puede ejecutar con seguridad AES en GCM o CCM con claves de 128 bits y estar bien. Estás consiguiendo el equivalente a RSA de 3072 bits en términos de nivel de seguridad. Pero normalmente sugerimos ir con claves de 256 bits para que mantengas la máxima dureza computacional durante el mayor tiempo posible.
Así que, veamos esas claves de 256 bits. Una clave de 256 bits puede tener2256 combinaciones posibles. Como mencionamos antes, una clave de dos bits tendría cuatro combinaciones posibles (y sería fácilmente descifrable por un bromista). Sin embargo, estamos tratando con la exponenciación, por lo que cada vez que se aumenta el exponente, n, se incrementa el número de combinaciones posibles. 2256 es 2 x 2, x 2, x 2… 256 veces.
Como hemos cubierto, la mejor manera de descifrar una clave de cifrado es ‘brute-forcing’, que es básicamente sólo el error de prueba & en términos simples. Así, si la longitud de la clave es de 256 bits, habría 2256 combinaciones posibles, y un hacker debe probar la mayoría de las 2256 combinaciones posibles antes de llegar a la conclusión. Es probable que no haga falta probarlas todas para adivinar la clave -normalmente es alrededor del 50%-, pero el tiempo que tardaría en hacerlo duraría mucho más que la vida de cualquier ser humano.
Una clave privada de 256 bits tendrá 115.792.089.237.316.195.423.570.985.008.687.907.853.269.
984.665.640.564.039.457.584.007.913.129.639.936 (eso son 78 dígitos) combinaciones posibles. Ningún superordenador sobre la faz de la tierra puede descifrar eso en un plazo razonable.
Incluso si se utiliza el Tianhe-2 (MilkyWay-2), el superordenador más rápido del mundo, se necesitarán millones de años para descifrar el cifrado AES de 256 bits.
Esa cifra se dispara aún más cuando se intenta calcular el tiempo que se necesitaría para factorizar una clave privada RSA. Una clave RSA de 2048 bits tardaría 6,4 cuatrillones de años (6.400.000.000.000 de años) en calcularse, según DigiCert.
Nadie tiene ese tiempo.
La computación cuántica va a cambiar todo esto
Ahora sería un buen momento para hablar un poco sobre el cifrado cuántico y la amenaza que supone para nuestras primitivas criptográficas modernas. Como acabamos de ver, los ordenadores funcionan en binario. 1 y 0. Y la forma en que los bits funcionan en los ordenadores modernos es que tienen que ser un valor conocido, son un 1 o un 0. Punto. Eso significa que un ordenador moderno sólo puede adivinar una vez a la vez.
Obviamente, eso limita mucho la rapidez con la que puede forzar combinaciones en un esfuerzo por descifrar una clave privada.
Los ordenadores cuánticos no tendrán esas limitaciones. Ahora, dos cosas, en primer lugar la computación cuántica es todavía alrededor de 7-10 años de viabilidad, por lo que estamos todavía un camino de distancia. Algunas CAs, como DigiCert, han comenzado a poner certificados digitales post-cuánticos en dispositivos IoT que tendrán una larga vida útil para tratar de protegerlos preventivamente contra la computación cuántica, pero aparte de eso todavía estamos en la fase de investigación cuando se trata de cifrado a prueba de cuántica.
La cuestión es que los ordenadores cuánticos no utilizan bits, sino bits cuánticos o qubits. Un bit cuántico puede ser TANTO un 1 como un 0 gracias a un principio llamado superposición, que es un poco más complicado de lo que vamos a tratar hoy. Los qubits otorgan a los ordenadores cuánticos el poder de exponenciar sus ataques de fuerza bruta, lo que anula de hecho la dureza computacional proporcionada por la exponenciación que tuvo lugar con la primitiva criptográfica. Un ordenador de cuatro Qubits puede estar efectivamente en cuatro posiciones diferentes (22) a la vez. Una vez más, son 2n, por lo que un ordenador cuántico con n qubits puede probar 2n combinaciones simultáneamente. Bristlecone, que tiene 72 qubits, puede probar 272 (4.722.366.482.869.645.213.696) valores a la vez.
De nuevo, aún estamos lejos de eso y el ordenador cuántico tendría que averiguar cómo ejecutar con éxito el algoritmo de Shor, otro tema para otro día, así que esto sigue siendo en gran medida teórico.
Aún así, de repente 4,6 cuatrillones de años no parecen un tiempo tan largo.
Concluyamos esto…
El cifrado de 256 bits es bastante estándar en 2019, pero toda mención al cifrado de 256 bits no se refiere a lo mismo. A veces256-bits de cifrado sólo se eleva a un nivel de seguridad de 128 bits. A veces, el tamaño de la clave y el nivel de seguridad están intrínsecamente ligados, mientras que otras veces uno sólo se utiliza para aproximarse al otro.
Así que la respuesta a «cómo de fuerte es el cifrado de 256 bits» no tiene una respuesta clara. Al menos no todo el tiempo.
En el contexto de SSL/TLS, sin embargo, se refiere más comúnmente al cifradoAES, donde 256 bits realmente significa 256 bits. Y, al menos por el momento, ese cifrado de 256 bits sigue siendo bastante fuerte.
Para cuando un atacante que utilice un ordenador moderno sea capaz de descifrar una clave simétrica de 256 bits, no sólo la habrá descartado, sino que también habrá sustituido el certificado SSL/TLS que ayudó a generarla.
En resumen, la mayor amenaza para su cifrado y sus claves de cifrado sigue siendo la mala gestión, la tecnología que hay detrás es sólida.