Para todas las actividades delicadas en internet, la criptografía es obligatoria. La comunicación del servidor debe ser tan segura como el almacenamiento de datos.
La criptografía, ciencia de la comunicación secreta, es la respuesta a este desafío. La etimología de la palabra "criptografía" viene del griego "cripto", que significa "oculto" o "secreto" y "grafía", que denota un proceso o forma de dibujo, escrito o descripción.
Con el aumento de la probabilidad de estar en línea y las necesidades de seguridad de Internet, la criptografía se ha transformado en un tema multifacético. El uso del cifrado como proceso o algoritmo para hacer secretas las cosas es una de las funciones de la criptografía. Más allá de eso, la criptografía debe ser capaz de proteger contra espías, ataques a textos sin formato elegidos y ataques a textos cifrados elegidos, así como también de asegurar lo siguiente:
Confidencialidad: se define como la intención de mantener en secreto.
Integridad: forma de confirmar la falta de corrupción de los datos.
Autenticación: forma de probar que el dispositivo con el cual usted se está comunicando en realidad es el dispositivo que parece ser y no un tercero que esté provocando un ataque.
Autorización: el otorgamiento del permiso correspondiente para hacer algo.
La criptografía moderna se desarrolló después de la 2da guerra mundial. En 1949, Claude Shannon conceptualizó la información tras la seguridad teórica. Su idea básica era la siguiente: un texto cifrado no debe revelar ningún tipo de información sobre el texto sin formato. En matemática, se escribe de esta forma:
La perfecta confidencialidad de Shannon
∀ mensajes m0 y m1 ϵ M (espacio de todos los mensajes) como longitud(m0) = longitud(m1) y ∀ c ϵ C (espacio de todos los textos cifrados)
Pr[E(k, m0) = c] = Pr[E(k,m1) = c]
donde k es uniforme en K (espacio de todas las claves)
En otras palabras, en un texto cifrado dado, un atacante no puede decir si el mensaje cifrado es m0 o m1 para todos los posibles mensajes m0 y m1, por lo tanto, incluso los enemigos más poderosos no averiguan nada del texto sin formato del texto cifrado y, por lo tanto, no es posible el ataque al texto cifrado.
En nuestro mundo digital, la criptografía se lleva a cabo con computadoras. La función lógica XOR es el elemento básico de los algoritmos criptográficos debido a una importante propiedad que posee, expresada por el siguiente teorema:
Si Y es una variable aleatoria sobre {0,1}n y X es una variable uniforme independiente en {0,1}n entonces Z = Y XOR X es una variable uniforme en {0,1}n
Esto evita el análisis de frecuencia que era la debilidad de los métodos utilizados hasta mediados del siglo 20.
El algoritmo de libreta de un solo uso
La libreta de un solo uso (OTP, del inglés One Time Pad) es un algoritmo que toma un mensaje m y una clave k (las longitudes de m y k son iguales) y XOR m y k. Dado que k es una variable uniforme, Z también es una variable uniforme y un espía no puede llevar a cabo ningún ataque a un texto cifrado. Desafortunadamente, para obtener una perfecta confidencialidad, la clave debe ser más extensa que el mensaje (|K| > |M|), lo cual en la práctica es prácticamente imposible. Efectivamente, si tenemos dos mensajes cifrados con la misma clave k, al efectuar XOR en estos dos textos cifrados se obtiene m1 XOR m2 y un análisis estadístico simple de este resultado permitirá descubrir muchísima información sobre el texto sin formato.
Para que OTP sea práctico, la clave aleatoria se reemplaza por una clave "pseudoaleatoria" con la siguiente visión: al conocer todas las claves generadas anteriormente, solo existe una mínima probabilidad (≤1/280) de descubrir la nueva clave. Además, en lugar de la equidad perfecta que se utiliza para describir la confidencialidad perfecta de Shannon, decimos que tenemos una seguridad semántica si 2 textos cifrados tienen distribuciones indistinguibles, de modo que nuevamente estamos hablando de probabilidades. La generación clave es lo básico de una buena seguridad. Al igual que el protocolo WEP mostrado, una mala elección de la clave destruye la seguridad.
WEP es inseguro porque la longitud de IV (vector inicial) es 24 bits, lo que significa que la misma clave se usa alrededor de una vez cada 16 millones de tramas. También las claves se relacionan; la clave para la trama 1 era 1||k, la clave para la trama #2 era 2||k. Adicionalmente, IV se resetea a 0 después de un ciclo de encendido, de modo que un atacante podría recuperar la ley solo después de 40.000 tramas, lo cual es absolutamente inseguro en los tiempos actuales. Para superar esta debilidad, en tráfico de red, se debe negociar una nueva clave para cada sesión. En los cifradores de flujo modernos, se usa una semilla + un valor de seguridad (un valor no repetido para una clave dada) para generar la clave y el par (semilla, valor de seguridad) nunca se utiliza más de una vez. Los más famosos de estos cifradores de flujo son RC4, Salsa o Sosemanuk.
Tenga presente que OTP es adecuado para comunicación dentro de una red, pero no se ajusta bien para el almacenamiento de datos. Efectivamente, OTP no tiene integridad porque es maleable, lo que significa que la modificación de un texto cifrado no se detecta y tiene un impacto predecible en el texto sin formato.
Cifradores de bloque
Los cifradores de bloque son otro método de cifrado. Su implementación es más compleja y más lenta que los cifradores de flujo, pero son más robustos y pueden superar los desafíos dejados por los cifradores de flujo. A diferencia de los cifradores de flujo, los cifradores de bloque son un bloque fijo de n bits que se codifica para crear un texto cifrado de n bits. Cuando un mensaje tiene menos de n bits, es necesario abultar el mensaje para alcanzar n bits. AES y RSA son las codificaciones de cifradores de bloque más comunes.
Para los cifradores de bloque, se encuentran disponibles 2 modos de operaciones: el modo CBC (encadenamiento de bloques de cifrado) y el modo CTR (contador). Cada modo necesita un IV (vector inicial) para comenzar el cifrado, pero luego la implementación difiere. El modo CBC tiene una implementación en serie a diferencia del modo CTR que tiene una implementación en paralelo.
Aquí tenemos un cifrado con modo CBC: se elige un IV al azar, luego se usa el resultado de cada bloque para cifrar el siguiente bloque.
Aquí tenemos un cifrado con modo CTR: F es una función pseudoaleatoria e IV es aleatorio para cada mensaje y se incrementa para cada bloque. F se puede aplicar en paralelo a cada bloque.
Todos estos métodos son efectivos contra los espías y para proteger la confidencialidad, pero todavía ninguno puede asegurar integridad, autenticación y protección contra ataques activos.
Código de autenticación de mensaje
La integridad del mensaje se basa en MAC (código de autenticación de mensaje). Se genera una etiqueta según el mensaje m y una clave k. Una vez que el receptor obtiene el mensaje, puede efectuar una verificación de etiqueta donde el resultado es sí o no. El cálculo de MAC utiliza una PRF (función pseudoaleatoria), de modo que un atacante no pueda producir una etiqueta válida para un nuevo mensaje. La integridad requiere una clave secreta y no debe confundirse con un CRC (código de redundancia cíclica), el cual se diseñó para detectar errores aleatorios no maliciosos.
Los cifradores de flujo y los cifradores de bloque crean confidencialidad (en otras palabras son eficaces contra los espías, pero no contra los ataques activos) y el MAC garantiza la integridad, pero no la confidencialidad. Pero si se ejecuta MAC en texto cifrado, obtenemos una codificación autenticada. Los atacantes no pueden crear nuevos textos cifrados que se descifren correctamente. Entonces se puede cumplir la integridad, la autenticación y la autorización.
Todos estos métodos utilizan la misma clave para el emisor y el receptor y se denominan cifrados simétricos. Suponemos que las claves se intercambiaron antes de que comenzara la comunicación, pero en el mundo actual, totalmente conectado a Internet, muchas personas deben intercambiar datos sin conocerse y, por lo tanto, no pueden intercambiar claves primero. El cifrado asimétrico es la solución a este dilema. El protocolo Diffie-Hellman ayuda a explicar:
Si p es un número primo grande, g es un entero en {1,…,p} and x is chosen randomly in {1,…, p-1}, al saber el resultado, no existe un algoritmo eficaz conocido para calcular x. Entonces, con dos números x e y, es muy fácil efectuar una operación exponencial para obtener una clave, pero muy difícil de revertir la operación para descubrir la clave.
g^(x^y ) (mod p)=g^(y^x ) (mod p)= g^xy (mod p) = Clave que se utilizará para el cifrado
Si Alicia y Roberto desean compartir la clave y hay un espía entre ellos, se deben realizar los siguientes pasos para compartir la clave.

También existen varias variantes Diffie-Hellman, como la resolución de una curva elíptica en la forma de y² = x³ + ax + b.
Al final, pese a todos estos esfuerzos, no hay un forma garantizada de comunicarse de manera segura. El teorema de Shannon demuestra seguridad perfecta desde un punto de vista teórico, pero en la práctica, los ataques de canal lateral pueden ser muy poderosos. Uno de los mejores ejemplos de un ataque de canal lateral ocurrido en 2013 cuando los investigadores quebraron el cifrado más difícil del mundo al escuchar los sonidos de un tono agudo (10 a 150 kHz) producidos por la CPU de una computadora mientras descifraban un algoritmo RSA de 4096 bits. Daniel Genlin, Adi Shamir y Eran Tromer fueron capaces de crear una clave de descifrado con este tipo de desconocido, lo cual es imposible de predecir.