https://en.wikipedia.org/wiki/Kerckhoffs's_principle
El atacante conoce el sistema
Claude Elwood Shannon (1906-2001)
Diseña el sistema asumiendo que el atacante sabe qué hacer para cifrar o descifrar, pero no conoce la clave
Communication Theory of Secrecy Systems, Claude E. Shannon, Bell System Technical Journal, vol.28-4, page 656--715, Oct. 1949.
Hablaremos más de Shanon en el tema 3
La criptografía es una herramienta para convertir un montón de problemas diferentes en un problema de gestión de claves
Lea Kissner, antigua ingeniera principal de seguridad de Google
La criptografía actual se basa en composición de técnicas primitivas:
La composición es compleja y todo debe funcionar como un reloj.
Objetivo | Primitiva |
---|---|
confidencialidad | cifrado simétrico, cifrado asimétrico |
integridad | hash, firma simétrica, firma asimétrica |
autenticidad | firma simétrica, firma asimétrica |
no repudio | firma asimétrica |
compartir | clave simétrica, acuerdo de clave |
Esto es lo que iremos viendo a lo largo de este curso
Seguridad de un algoritmo, fuerza bruta y confidencialidad perfecta (one time pad)
Encontrarás más detalles en: https://juanvvc.github.io/crypto/02-historia.html
Años 40: Alemania controla Europa y amenaza al resto del mundo
Sus comunicaciones radio están protegidas con "la cifra indescifrable"
¿Por qué pensaban que era indescifrable?
¿Cómo se descifró?
¿Qué hemos aprendido desde entonces?
Hasta los años 70 del siglo XX, la criptografía se usaba solo en el ámbito militar y solo ofrecía confidencialidad:
El enemigo no puede saber nuestros planes
El resultado debería ser un mensaje igual que el original
Fuerza bruta: probar todas las claves posibles una a una
Podemos defendernos contra la fuerza bruta:
Que el descifrado sea costoso tiene el problema de que también le costará al receptor, que descifra legítimamente.
La solución adoptada en la actualidad para sistemas criptográficos: "obligar que el atacante tenga que probar muchas claves"
Alquilando equipos en la nube por segundos, con un euro cada segundo podemos probar
Si estimamos que nuestro "secreto" vale 1000 €: nos hacen falta un sistema criptográfico que permita escoger entre
Nota que
Observa: aumentando el número de bits de la clave aumentamos exponencialmente el tiempo necesario para romper el sistema. Con 128 bits... necesitaríamos miles de años.
La fortaleza o seguridad de un algoritmo es el tamaño en bits de su espacio de claves. Es decir, el número de claves diferentes posibles que se tienen que probar para romperlo por fuerza bruta. Normalmente se expresa en bits.
Ejemplo de cifrado por cambio de letras: ¿podemos encontrar un método más rápido que probar los cambios de letras una a una?
Hq fulswrjudild, ho fliudgr Fhvdu, wdpelhq frqrflgr frpr fliudgr sru
ghvsodcdplhqwr, frgljr gh Fhvdu r ghvsodcdplhqwr gh Fhvdu, hv xqd gh
odv whfqlfdv gh fliudgr pdv vlpsohv b pdv xvdgdv. Hv xq wlsr gh
fliudgr sru vxvwlwxflrq hq ho txh xqd ohwud hq ho whawr ruljlqdo hv
uhhpsodcdgd sru rwud ohwud
https://www.dcode.fr/caesar-cipher
El cifrado César, incluso con mapeos aleatorios, lleva roto como mínimo desde el siglo IX, cuando Al-Kindi describió por primera vez el análisis de frecuencia contra el cifrado César
Un algoritmo está roto desde el punto de vista criptográfico cuando se conoce un ataque más eficiente que la fuerza bruta.
Seguridad perfecta o incondicional: no se puede deducir ninguna propiedad del texto original en claro, incluso aunque el atacante tenga recursos infinitos (tiempo, dinero)
Communication Theory of Secrecy Systems, Claude E. Shannon, Bell System Technical Journal, vol.28-4, page 656--715, Oct. 1949.
Si un cifado perfecto teórico cifra como XHAJSJXXNFHFDOIOJUMNFNNNF:
Un cifrado perfecto no puede descifrarse ni siquiera por fuerza bruta porque un atacante no puede distinguir el mensaje real de todos los mensajes falsos posibles
Imagina que un ejército decide el siguiente mapeo, es decir, clave:
El enemigo captura este mensaje: "Atacamos a las F horas"
¿Tiene alguna forma el enemigo de conocer a qué hora le atacarán?
Vernam patentó el one-time-pad de una manera similar:
La longitud en bytes de
Las claves se guardaban en hojas de papel de un solo uso. Las dos partes tenían una colección de estas hojas y se destruía en cuanto se usaba.
En 1972, la NSA tenía 86.000 one-time-pads
Si lo necesitas, mira la operación XOR en el glosario
Ninguna...
...mientras se cumplan las hipótesis de trabajo para la clave
Shanon demostró matemáticamente que cualquier cifrado perfecto tendrá estos mismos problemas
Communication Theory of Secrecy Systems, Claude E. Shannon, Bell System Technical Journal, vol.28-4, page 656--715, Oct. 1949.
El principal problema es que la longitud en bytes de
Cuesta tanto enviar
Más ejemplos: https://www.cryptomuseum.com/covert/conceal/index.htm
Sabemos cómo hacer cifrado perfecto, pero no es práctico.
Los sistemas actuales usan otro concepto: la seguridad computacional
Seguridad computacional: romper un cifrado es posible, pero se necesitan mucho tiempo / recursos
Lo veremos con más detalle en el Tema 2
Es muy recomendable tener a mano el glosario para recordar los conceptos fundamentales
Continúa en: Sistemas de cifrado
Tradicionalmente hemos entendido la criptogafía como las técnicas para mantener un mensaje confidencial y que solo pueda leerlo la persona para la que está destinado. Pero hay mucho más detrás: ¿cómo nos aseguramos que realmente solo el receptor puede leer un mensaje? ¿Es posible demostrar matemáticamente que solo el receptor puede leerlo? ¿ Y cómo se asegura el receptor que el emisor es realmente quien dice ser?
Solo el primer punto trata de mantener un mensaje secreto. Además vamos a querer saber con quién estamos hablando, entre otros servicios. ¡Si estamos hablando con un malo, da igual que el mensaje esté perfectamente cifrado!
¿Contra quién queremos proteger la información? - Una persona que quiere consumir un servicio sin pagar - Una persona que quiere invadir nuestra privacidad - Un competidor que quiere acceso a nuestros documentos secretos - Una grupo financiado por un estado nación
Fondo: https://pixabay.com/photos/binding-contract-contract-secure-948442/ Uso comercial libre
El objetivo más evidente de un sistema criptográfico es alcanzar confidencialidad: no queremos que nadie pueda leer nuestras comunicaciones aparte de la persona a la que están destinadas Pero un sistema que solo ofrezca confidencialidad no es seguro casi nunca. Por ejemplo, si estamos hablando con un adversario en vez de nuestro banco, da igual que nadie más pueda leer nuestras comunicaciones. Tenemos que estar seguros de que al otro lado está realmente el banco: autenticidad En ocasiones, un adversario puede modificar un mensaje a pesar de que no sepa qué es lo que hay en él. O puede que lo realmente importante para un banco es asegurar que uno de sus clientes ordenó una trasferencia desde sus cuentas y no hacia sus cuentas. Los objetivos de un sistema criptográfico son los servicios de seguridad que ofrece El NIST es la agencia de estandarización de EEUU, y entre las cosas que estandariza también está la seguridad del gobierno de EEUU. Sus estándares son sencillos de leer e incluyen un glosario que viene muy bien para introducirse en la criptografía.
Nos centraremos en los servicios de confidencialidad, integridad y autenticación. Además, podemos conseguir no-repudio como consecuencia de juntar autenticidad e integridad. También veremos, aunque a más alto nivel, los servicios de acuerdo de claves, PRNG, partición de secretos... porque están relacionados con los primeros Otros servicios como la autorización, aunque sin duda son importantes para que un sistema sea seguro, quedan fuera de este curso por limitación de tiempo.
Aquí tenemos un ejemplo de un protocolo de comunicaciones donde el objetivo no es la confidencialidad. Estos son unos ladrones robando un coche, que se abre cuando la llave está cerca. La persona de la derecha está utilizando una antena enorme para "hacer relay" de la comunicaciones entre la llave (que se supone dentro de la casa, cerca de la pared) y el coche. Aquí el protocolo no tiene que proteger la confidencialidad del mensaje: todos sabemos que la llave envía "ABRETE". Fíjate que el protocolo tampoco está protegido con contraseñas, ni con una firma digital. Lo que se necesita en esta caso es detectar cuándo el atacante está accediendo a los mensajes y ampliando su radio de acción diseñado ¿Se te ocurre alguna manera de proteger contra esta situación?
Este es el modelo sobre el que trabajaremos: dos personas "Alice y Bob" comunicándose por un canal inseguro porque puede haber un adversario "Maloy" en medio. Alice y Bob no tienen otra forma de comunicación: no pueden confirmar una operación bancaria enviada por correo electrónico usando una clave enviada al teléfono, por ejemplo. En criptografía asumiremos que no existen estas vías alternativas de comunicación, aunque en la realidad sí existen y los utilizamos en la vida real para mejorar aún más la seguridad del sistema. Imagen: https://www.tutorialspoint.com/cryptography/images/cryptosystem.jpg
Kerckhoffs enunció sus principios en 1883. Los principios 1, 2 y 6 guiarán todo el desarrollo de la criptografía actual 1. Confidencialidad computacional (capítulo 3) 2. No basarse en seguridad por oscuridad 3. Requisito de complejidad (capítulo 4) Pero atención: la criptografía actual - En cuanto a clave, tienen que ser específicamente aleatorias y por tanto no fácilmente memorizables. - Los resultados son binarios, y por tanto no son alfanuméricos en general. Aún así y aunque no sea estrictamente necesario, la criptografía tiene como "costumbre" guardar claves codificadas en Base64, es decir, usando solo caracteres imprimibles. El principio 4 se sigue cumpliento parcialmente, aunque no sea estrictamente necesaria. - El sistema completo suele necesitar de varias personas para operar, y en particular una "tercera parte de confianza" Kerckhoffs definió sus principios para un contexto en que una persona solitaria pudiese utilizar el criptosistema fácilmente y escribir el resultado. Ahora tenemos la ayuda de ordenadores y esos principios no son ni necesarios, ni recomendables. Eso nos lleva a que: la seguridad a veces es cuestión de opinión. "Buenas prácticas". "Recomendaciones". Por ejemplo, el NIST solo emite recomendaciones. Pero son recomendaciones muy informadas.
Shanon es un gran matemático del siglo XX, que creó la teoría de la información. Le debemos la teoría detrás de la criptografía, los archivos comprimidos, la codificación digital... Su máxima se contrapone a la "seguridad por oscuridad". Es decir, la seguridad de un sistema secreto solo será segura mientras el sistema sea secreto. ¿Y si deja de serlo? ¿Y si pensamos que es seguro, pero no lo es? El paper enlazado es una estupenda introducción a los conceptos fundamentales de la criptografía y se recomienda mucho su lectura La seguridad por oscuridad es pensar que un sistema secreto es más seguro que un sistema conocido. En realidad, es muy difícil mantener un sistema en secreto. Además, la criptografía está llena de "trampas" y razonamientos no evidentes. Es muy difícil que unas pocas personas puedan diseñar un sistema realmente seguro y además mantenerlo en secreto. Eso es lo que se llama "seguridad por oscuridad", y fiar la seguridad a la oscuridad no es buena idea, como nos ha enseñado la experiencia. Un sistema no es inseguro por ser oscuro. Es simplemente oscuro. Basar tu seguridad en la oscuridad lo consideramos una mala idea porque los hackers pueden saber más que tú. No hay ningún error lógico en querer basar tu seguridad en la oscuridad. Simplemente, la experiencia nos dice que no es buena idea, y que los sistemas cuya seguridad se basa en la oscuridad caen antes. PERO que un sistema sea seguro de por sí, utilizando protocolos realmente seguros y buenas prácticas criptográficas, Y ADEMÁS lo ocultamos al mundo, es sin duda una buena idea que no perjudica. Tendrás a los adversarios entretenidos para intentar entender tu sistema, y cuando lo consigan verán que es un indescifrable AES-512. No bases tu seguridad en la oscuridad, pero añadir un poco de oscuridad siempre ayuda.
Si la clave es lo único que tiene que ser secreto, tenemos que protegerla a toda costa. En este curso no estudiaremos cómo proteger las claves, pero tened en cuenta que, al ser la pieza central de la seguridad de un sistema, es necesario que los usuarios de criptografía dispongan de algún modo de gestión segura de claves criptogrtáficas Una contraseña no es lo mismo que una clave criptográfica. Las contraseñas suelen ser mucho más inseguras que una clave (a veces no son aleatorias o están pensadas para que las pueda recordar un humano) A veces las contraseñas serán el primer paso para entrar en un sistema seguro, pero **no son buenas claves criptográficas** En muchas ocasiones un sistema se romperá no por que la criptopgrafía sea débil, sino porque incluye un paso de control con contraseña que es habitualmente la parte más débil de un protocolo.
- **Sin clave**: el emisor usa sólo el mensaje $m$ como argumento de la función criptográfica. Ejemplo: hash. - **Clave simétrica**: misma clave $k$ para cifrar y descifrar un mensaje $m$. Emisor y receptor deben tener la misma clave. Ejemplo: AES, ChaCha... - **Clave asimétrica**: claves diferentes para cifrar (pública) y descifrar (privada) un mensaje $m$. El emisor debe conoce la clave pública del receptor. Ejemplo: RSA
¿Recordáis la máxima de Shanon y los principios de Kerckhoffs? "El adversario conoce el sistema". Es decir: los único que debe ser secreto (a parte del mensaje, claro) es la clave de cifrado/descifrado. Se tiene que asumir que el adversario conoce las funciones e() y d() Aún no estaban preocupados de identificar con quién estaban hablando: "si conoce la clave, será un interlocutor legítimo". Nota: ¿Cifrar o encriptar? En este curso llamaremos a la ciencia "criptogafía" y al acto "cifrado". Encontrarás gente que utiliza "encriptar" como sinónimo de "cifrar". La RAE ha aceptado recientemente el verbo "encriptar", pero la polémica sobre si usar o no ese verbo sigue abierta en nuestro sector.
Estos no son exactamente sistemas de cifrado, pero nos sirven para explicar lo que es la fuerza bruta. ¿Cómo abrirías la cerradura de la puerta? ¿Cómo puede un ladrón utilizar una tarjeta de crédito robada? ¿Qué estrategias se usan en cada caso para proteger el sistema? Images: free for commercial use: - https://pixabay.com/photos/money-cards-business-credit-card-256319/ - https://pixabay.com/photos/lock-combination-security-safety-1929089/
Este es un ejemplo de cifrado clásico "tipo César aleatorio": cada letra del alfabeto se ha sustituido por otra letra del alfabeto. En este caso, el mapeo entre letras es la clave de cifrado, y en un alfabeto de 27 letras hay 27! posibles mapeos diferentes. Ese es un número enorme para descifrar por fuerza bruta INCLUSO para los PCs actuales. ¿Podemos descifrarlo por otros medios? No recuerdo qué cifré aquí, ni con que clave, pero no parece difícil descubrirlo. - Hay letras solas, que en castellano solo pueden ser a, y, o. También e, u, pero es muy improbable. Cualquier otra letra será aún más improbable. Por eso la criptografía clásica en realidad nunca ha usado espacios: da mucha información al adversario - Haciendo análisis de frecuencias, la h aparece muchas veces: es muy probable que sea a ó e - Los dígrafos hv gh (varias veces...) podrían ser es, el, me, le ó se **La información de contexto nos ayuda a descifrar (espacios, lenguaje...)**. Eso también pasa en una web actual: ¿qué es lo que tiene un mensaje cifrado a un banco inmediatamente después de visitar una tienda?
excepto la longitud... y el momento de enviarlo, ...y el número de mensajes Imagen: https://upload.wikimedia.org/wikipedia/commons/0/06/USpatent1310719.fig1.png
Imagen: https://upload.wikimedia.org/wikipedia/commons/f/fc/Byzantine_Generals.png
Un sistema tan sencillo como este se utilizó en la realidad: los espías tenían "libros de claves" de un colo uso que tenían que llevar escondidos.
El teléfono rojo entre Washington y Moscú fue en realidad un teletipo que usaba cifrado de bloque de un solo uso La clave $k$ se intercambiaba por valija diplomática en cinta perforada que se entregaba en ambos sentidos. Mientras no hacía falta, se guardaba protegida y se destruía después de ser usada Además, el *one-time-pad* permitía trabajar de forma segura sin intercambiar ningún algoritmo secreto que diera ventaja técnica al enemigo Para poder usar un *one-time-pad*, la clave se prepara por adelantado para cuando haga falta enviar algún mensaje inmediatamente. Imagen: https://www.cryptomuseum.com/spy/r353/img/300148/191/full.jpg
- Al final de la segunda guerra mundial, EEUU descifró el *one-time-pad* usado por los diplomáticos alemanes porque utilizaban contraseñas no totalmente aleatorias y podían adivinarse. - 1944: EEUU descifró mensajes de la URSS a Australia... porque utilizaban el mismo *one-time-pad* que la URSS usaba con EEUU. - 1962 (ataque canal lateral): las máquinas usadas para cifrar eran eléctricas y emitían un campo magnético, que Japón podría haber aprovechado para captar qué cifraba la embajada de EEUU: [TEMPEST](https://www.governmentattic.org/18docs/Hist_US_COMSEC_Boak_NSA_1973u.pdf)