RETO 8 - ¡Correo Rojo! Volamos hacia Madrid
RETO 8 - ¡Correo Rojo! Volamos hacia Madrid
El criptosistema de Vernam, también conocido como one-time pad, fue el primer sistema demostrado como
incondicionalmente seguro, siempre que la clave sea completamente aleatoria y del mismo tamaño que el
mensaje. En este reto os proponemos estudiar la seguridad de este criptosistema frente a la reutilización
de claves.
Alicia quiere comunicarse con Roberto y acuerdan emplear el cifrado de Vernam, intercambiando previamente
sus claves secretas en persona. Sin embargo, el mensaje de Alicia resulta ser demasiado largo, por lo que
decide dividirlo en varios bloques y aplicar el cifrado a cada uno de ellos. Roberto se encuentra con el
mismo problema al responder, aunque introduce un detalle adicional: utiliza el traductor Leet Speak y
elimina los espacios en su respuesta.
Dados los textos cifrados correspondientes a ambos mensajes, el reto consiste en recuperar los dos
mensajes en texto claro (en castellano), determinar las claves utilizadas y explicar detalladamente la
estrategia criptanalítica empleada.
RETO 9 - ¿Y si ciframos con atributos?
Conceptos previos:
El cifrado basado en atributos (Attribute-Based Encryption, ABE) es un esquema en el que el acceso a los
datos se controla por atributos (p. ej. rol, departamento, nivel) en lugar de por identidad concreta. En
ABE se cifra bajo una política de atributos y solo las claves que cumplen esa política pueden
descifrar.
Dos familias principales:
- Key-Policy ABE (KP-ABE):
- El emisor etiqueta el texto cifrado con un conjunto de atributos.
- La clave privada incorpora una política (por ejemplo: ((A AND B) OR C)); solo si los atributos del texto cifrado satisfacen la política, se puede descifrar.
- Ciphertext-Policy ABE (CP-ABE):
- El emisor especifica la política en el texto cifrado.
- Las claves privadas están asociadas a un conjunto de atributos del usuario.
- Si los atributos del usuario satisfacen la política del texto cifrado, puede descifrar.
Componentes básicos (CP-ABE, esquema típico):
- Setup(λ) → genera PK (parámetros públicos) y MSK (master secret key).
- KeyGen(MSK, S) → con S = conjunto de atributos del usuario → genera SK_S.
- Encrypt(PK, M, policy) → cifra M bajo una política → produce CT.
- Decrypt(SK_S, CT) → si S satisface policy, devuelve M; si no, fallo.
El Reto:
Implementa, en el lenguaje de programación que desees, un sistema CP-ABE con atributos, que son etiquetas simples (sin operadores numéricos), para cifrar documentos en entornos médicos:
- Atributos disponibles en el sistema: {doctor, cardiology, senior, research}.
- Por ejemplo, los documentos pueden ser cifrados con políticas del tipo: (doctor AND cardiology) OR
(senior AND research).
RETO 9 - ¿Y si ciframos con atributos?
RETO 10 - El cifrado perfecto
RETO 10 - El cifrado perfecto
Conceptos previos:
El cifrado Vernam es un sistema de cifrado por flujo que combina bit a bit el texto plano con una clave
aleatoria del mismo tamaño usando XOR. Si la clave es completamente aleatoria, de igual longitud que el
mensaje y se usa solo una vez, se convierte en un cifrado de un solo uso (one-time pad) absolutamente
seguro. Sin embargo, este tipo de cifradores son susceptibles a ataques si se reutiliza la clave.
Por otro lado, hay que tener en cuenta que para aplicar algoritmos criptográficos la codificación es muy
importante, de modo que se necesita utilizar la codificación adecuada en cada caso. Por ejemplo, en
cifradores de flujo es habitual operar a nivel de bit, aunque luego pueda ser necesario realizar otras
conversiones para conocer el texto o datos a cifrar/descifrar.
El Reto:
Se han encontrado 2 mensajes cifrados (C1 y C2) con la misma clave y también el mensaje en claro (M1)
correspondiente al descifrado de C1. Por otro lado, se ha encontrado un tercer mensaje (C3) que parece
estar cifrado con otra clave y, posiblemente, con otro algoritmo más robusto. El objetivo es encontrar M2
y M3. ¿Cómo lo puedes conseguir?
RETO 11 - Computación segura entre 2 partes de profundidades en estadística (2PC4SD)
En muchos entornos, los datos necesarios para estimar un modelo estadístico se encuentran distribuidos
entre entidades que no pueden o quieren compartirlos por razones de confidencialidad. Los protocolos
seguros de dos partes (2-Party Computation, 2PC) permiten que dos participantes calculen conjuntamente el
resultado de una función estadística que tenga como entradas los datos privados de cada uno, sin revelar
información adicional.
En estadística multivariante, el término profundidad hace referencia al grado de centralidad de un punto
respecto de una nube en su misma dimensión. Un método fundamental es la profundidad simplicial, que se
define como la proporción de símplices (por ejemplo, triángulos en el plano) formados por subconjuntos de
puntos de la nube que contienen al punto de interés. Esta medida puede generalizarse a cualquier dimensión
mediante el uso de envolventes convexas. Encontraréis más información sobre estas técnicas en el pdf
adjunto y se deberán utilizar para completar el reto.
El Reto:
Dos entidades disponen de sendos conjuntos de datos bidimensionales (puntos en el plano). Para un punto
fijado de antemano (por ejemplo el origen de coordenadas) el reto consiste en calcular el número de
triángulos cuyos vértices son tres puntos de la muestra conjunta que contienen dicho punto fijo, sin
desvelar información alguna sobre los puntos (datos) de sus respectivas muestras. Desean además,
generalizar el procedimiento para considerar las envolventes convexas de subconjuntos de k≥3 puntos.
RETO 11 - Computación segura entre 2 partes de profundidades en estadística (2PC4SD)
RETO 12 - Encuentra tu perfect match
RETO 12 - Encuentra tu perfect match
La Intersección Privada de Conjuntos (Private Set Intersection, PSI) es una primitiva criptográfica que
permite a dos o más partes computar la intersección de conjuntos de datos privados sin revelar información
adicional sobre los elementos fuera de dicha intersección.
En este reto se propone diseñar un protocolo para una aplicación de búsqueda de amigos en la que cada
usuario tiene asociado un conjunto de atributos que describen sus gustos y características principales. Se
quieren conseguir las siguientes funcionalidades:
- A. Identificación de usuarios afines: Cada usuario puede fijar un umbral de modo que si habla con otro usuario , sólo recibirá el identificador personal del mismo (hará match) si comparten al menos dicho umbral de atributos.
- B. Sesiones de tres usuarios: Si tres usuarios quieren comprobar si son suficientemente afines, pueden ejecutar una sesión conjunta hablando de manera anónima y tras esa sesión recibirán, respectivamente, los identificadores necesarios para establecer contacto entre ellos, si y sólo si la intersección entre cualesquiera 2 de ellos contiene al menos tantos atributos como la mitad del número de atributos de cualquiera de ellos y la intersección entre los tres es, al menos, un quinto de ese valor.
Las soluciones al reto pueden utilizar un protocolo PSI de entre los descritos en este tutorial, directamente o modificado de modo que se minimice el número de mensajes que los usuarios han de enviarse y las rondas de comunicación necesarias para completar el proceso. Descargar Reto
RETO 13 - El Mensajero Digital: De la Paloma al USB Cifrado
"El medio cambia, el mensaje se adapta, pero el secreto permanece."
Desde que el ser humano tiene algo que ocultar, ha buscado el mensajero perfecto. En la antigua Grecia
confiábamos en las palomas y sus cilindros de papiro; en la Gran Guerra, en perros, palomas que esquivaban
trincheras; hoy, el mensajero es de silicio y viaja en el bolsillo: en particiones cifradas.
Pero cuidado, porque un mensaje interceptado es solo un montón de ruido si no tienes la llave... o si no
sabes mirar a través de la historia.
El Hallazgo: una partición cifrada.
Se ha interceptado una imagen de disco con un formato propietario. No es una imagen normal; es una
estructura blindada por capas:
- MBR Personalizado (512 bytes):
- Un archivo usb_ctf.img protegido con ChaCha20-Poly1305, el estándar moderno de cifrado autenticado.
¿Qué necesitas?
- Python 3.x y la librería pycryptodome.
- Editor hexadecimal
- Bacon cipher → 00101 00000
- Morse code → ----- -..
- Rotate rigth 1 → dr
- rot-13 rotate numbers 96
- Fuerza bruta
- Fuerza bruta
Los datos que se adjuntan son el programa de cifrado ctf_image_creator.py y el archivo usb_ctf.img. Descargar Reto
RETO 13 - El Mensajero Digital: De la Paloma al USB Cifrado
RETO 14 - Criptografía en equipo: el reto del acuerdo de clave multiusuario
RETO 14 - Criptografía en equipo: el reto del acuerdo de clave multiusuario
En el ámbito de la criptografía moderna, el establecimiento seguro de claves es un componente fundamental
para garantizar la confidencialidad y la integridad de la información intercambiada a través de redes
digitales. Tradicionalmente, los protocolos de acuerdo de clave, como el clásico protocolo de
Diffie-Hellman, han sido diseñados para la comunicación entre dos participantes. Sin embargo, en entornos
actuales donde la comunicación grupal es muy frecuente (en sistemas colaborativos, videoconferencias,
aplicaciones de mensajería, …) surge la necesidad de extender estos mecanismos a múltiples usuarios de
manera eficiente y segura.
Este reto propone el estudio de las formas de extender un protocolo de acuerdo de clave en un grupo de
usuarios. La forma en que los participantes están organizados y conectados, el número de mensajes
intercambiados, y la forma en la que esto sucede afecta a la eficiencia del protocolo, y la resiliencia
ante ataques.
El objetivo del reto es examinar cómo la estructura de comunicación impacta en el rendimiento y en las
propiedades de seguridad del sistema.
Una idea para comenzar este reto puede ser la siguiente: observa cómo se aplicaría cada una de las
posibles extensiones de esta referencia
(las llamadas GSAP-1, GSAP-2 y GSAP-3) a un grupo de 4 usuarios.
¿Cuál es más eficiente? ¿Puedes encontrar otras formas de que los 4 usuarios lleguen a una clave común?
RETO 1 - ¡Sé resolverlo!
Las pruebas de conocimiento cero (Zero Knowledge Proofs -ZKP) son herramientas criptográficas para
demostrar que se conoce un valor (o proceso) sin revelar información sobre el mismo. En este
artículo de El País se explica un sencillo método para demostrar con estas técnicas que se conoce la
solución de
un SUDOKU (ver el artículo científico en el que se presenta este ejemplo, Gradwohl, Naor, Pikas
y
Rothblum
(2007)).En
este documento puedes ver otros ejemplos de ZKP para juegos y pasatiempos como Rush Hour
o el
cubo de Rubik.
¿Se te ocurre alguna idea para demostrar en conocimiento cero que conoces la solución a un problema o
acertijo diferente? Puede ser un tipo concreto de crucigrama, un tablero de ajedrez para el que se
persigue una solución con un número fijo de movimientos o incluso una sopa de letras...
Reto 1 - !Sé Resolverlo!
Reto 2 - ¿Quién es más rico?
RETO 2 - ¿Quién es más rico?
Supongamos que hay un grupo de personas, cada una de ellas en posesión de cierto dato numérico o input que
desea mantener en privado. Con esta restricción, dichas personas desean calcular cierta función de sus
datos de entrada. Pensemos, por ejemplo, en 20 amigos que quieren poner en común la media aritmética de
sus sueldos anuales, pero sin revelar a los demás la cuantía individual de cada salario. Este tipo de
situaciones son fácilmente resolubles si se cuenta con una entidad a la que se suele denominar “tercera
parte de confianza”, alguien externo a quien puedan enviar de manera individual sus datos, con la certeza
de que va a realizar el cálculo correctamente, comunicar a todos el resultado y, además, ser
extremadamente discreto: no filtrar ninguna información a nadie sobre los inputs que ha recibido.
Desafortunadamente, es una asunción poco realista que se va a encontrar esa tercera parte de confianza
cada vez que se necesite. Por ello los criptógrafos han desarrollado los protocolos de computación
multiparte (habitualmente se abrevia como MPC, del inglés multi-party computation), que tienen como
finalidad calcular el output deseado sin la intervención de ningún agente externo al grupo de individuos
que proporcionan los inputs. Uno de los ejemplos más famosos es el problema de Yao de los millonarios: dos
personas con una gran fortuna quieren saber cuál de los dos es más rico pero no quieren revelar al otro la
cuantía de su fortuna.
Hay múltiples soluciones al problema de Yao, algunas de las cuáles utilizan herramientas criptográficas
complejas. Pero hay también una línea de protocolos MPC, diseñados sobre todo con fines ilustrativos y
divulgativos, que utilizan simplemente cartas de una baraja convencional y manipulación de las mismas. Se
puede encontrar una de ellas, así como información adicional sobre los protocolos basados en el siguiente
artículo: Miyahara, D.,
Hayashi, Y. I.,
Mizuki, T., & Sone, H. (2020). Practical card-based
implementations of Yao's millionaire protocol. Theoretical computer science, 803, 207-221.
En este reto volvemos al problema que hemos mencionado primero y os pedimos el diseño de un protocolo MPC
que calcule de manera segura la media aritmética de los sueldos.
RETO 3 - Descifrando Comunicaciones (Actualizado)
Un hash es una función criptográfica que transforma una entrada de datos (de cualquier tamaño) en una salida fija, llamada valor hash o resumen, que representa unívocamente a los datos originales. Así, hash tiene las siguientes características:
- Determinística: La misma entrada siempre produce el mismo valor hash.
- Salida de tamaño fijo: Independientemente del tamaño de la entrada, la salida tiene un tamaño fijo (por ejemplo, 256 bits en SHA-256).
- Irreversible: Es prácticamente imposible reconstruir la entrada original a partir del valor hash.
- Colisiones mínimas: Es poco probable que dos entradas distintas generen el mismo valor hash (colisión).
- Eficiente: La computación del hash debe ser rápida incluso para datos grandes.
Finalmente, es importante tener en cuenta la diferencia entre codificar y cifrar. Mientras que en el primer caso se agrupan los bits del mensaje de distinto modo (e.g. HEX, UTF-8, etc.) pero el mensaje es legible, en el segundo caso, cuando se cifra se aplica una clave para ocultar el mensaje y el resultado puede estar en distintos tipos de codificaciones.
El Reto:
Se han interceptado los siguientes mensajes. ¿Podrías explicar qué son y, si es posible obtener un texto en claro?
MENSAJE1
MENSAJE2
MENSAJE3
RETO - 3 - Descifrando Comunicaciones (Actualizado)
Reto 4 - Esteganografía ¿Qué se esconde?
Reto 4 - Esteganografía ¿Qué se esconde?
La esteganografía es la técnica de ocultar información dentro de otro medio, como imágenes, videos, audios
o texto, de manera que su existencia pase desapercibida. A diferencia de la criptografía, cuyo objetivo es
proteger el contenido de un mensaje mediante cifrado, la esteganografía busca disimular la presencia del
mensaje. De hecho, para dificultar el proceso de encubrimiento, los mensajes ocultos se suelen cifrar con
antelación, de modo que la confidencialidad del mensaje no se vea afectada aun siendo obtenido por un
tercero. Hay múltiples técnicas esteganográficas (ver artículo
Mandal, P. C., Mukherjee, I., Paul, G.,
Chatterji, B. N. (2022). Digital image steganography: A literature survey. Information sciences, 609,
1451-1488), pero una aplicación comúnmente utilizada para este propósito es OpenPuff.
Se sabe que hay información oculta en, al menos, una de las siguientes imágenes. ¿Cómo se puede
obtener la información oculta?
RETO 5 - El desafío del borrado seguro de claves
Al finalizar la vida útil de los dispositivos electrónicos que han manejado información sensible, se deben
seguir una serie de procedimientos estándar para la eliminación de los datos almacenados en los mismos
(NIST SP 800-88). En el caso particular de las claves criptográficas, de acuerdo con la guía CCN-STIC 804
se establece que salvo excepciones (auditoría o retención), estas deben ser eliminadas. En el caso de
claves guardadas en memorias, se puede optar por alguno de los mecanismos lógicos o físicos típicos para
tales fines. Pero, ¿cómo aplicamos estos principios a tecnologías emergentes como las funciones físicas no
clonables (Physical Unclonable Functions - PUFs)?
¿Qué es un PUF?
Un PUF es una característica física única de un dispositivo que se utiliza para generar identificadores o
claves criptográficas. Estos identificadores se derivan de la aleatoriedad inherente de los materiales o
componentes del dispositivo.
Desafíos del borrado en PUFs
Al depender la clave de una característica física, el borrado lógico o los típicos mecanismos físicos
(campos magnéticos) usados para el borrado de discos duros no son una solución a considerar. En este reto
se propone investigar sobre mecanismos de bajo coste que permitan realizar un “borrado” seguro del PUF al
final de su vida útil. Concretamente, se propone investigar el uso de fenómenos de envejecimiento (NBTI y
HCI) para el borrado final del PUF.
RETO 5 - El desafío del borrado seguro de claves
RETO 6 - ¡Domina los ataques de canal lateral!
RETO 6 - ¡Domina los ataques de canal lateral!
En la implementación de algoritmos criptográficos como AES, no basta con garantizar su fortaleza
matemática. Es crucial evaluar y reforzar su resistencia frente a ataques que explotan la implementación
física, como los ataques de canal lateral.
¿Qué es un ataque de canal lateral?
Un ataque de canal lateral es un tipo de ataque que aprovecha información no intencionada generada durante
la ejecución de un algoritmo criptográfico, como consumo de energía, tiempos de ejecución o emisiones
electromagnéticas. Con técnicas avanzadas, esta información permite recuperar claves secretas sin
comprometer el diseño criptográfico del algoritmo.
El reto: Análisis de trazas
En este reto, se proporcionará un conjunto de trazas de consumo de energía capturadas con la plataforma
ChipWhisperer-Lite durante la ejecución de un cifrado AES en un microcontrolador Cortex-M4. Estas trazas
corresponden a ejecuciones con diferentes textos planos y claves. Tu objetivo es analizar estas trazas y
recuperar la clave secreta utilizada.
Elementos del reto
Se entregará un conjunto de mediciones de consumo de energía capturadas mediante el ChipWhisperer-Lite
para una implementación software de AES-128.Se proporcionará información sobre la estructura de las trazas
y la información necesaria (ej: texto plano correspondiente a cada traza).
Objetivo del reto
Recuperar la clave secreta utilizada en las trazas proporcionadas mediante técnicas de análisis de canal
lateral. Se valorará el uso de un menor número de trazas para la obtención de la clave, la explicación de
la metodología utilizada y su novedad.
Referencia adicional
El DPA Contest ha sido
una referencia
clave para diseñar este reto, proporcionando ejemplos y
procedimientos para evaluar implementaciones frente a ataques de canal lateral. Al final de la página
enlazada, se encuentran algunas referencias básicas sobre ataques de canal lateral
RETO 7 - ¡A por el hash!
Durante 2017, el periódico El Mundo reportó
un fallo de seguridad en el protocolo que se utilizaba para
proteger los datos personales del censo de personas que se pretendía que votaran en el referéndum
convocado en Cataluña.
El protocolo era el siguiente:
La información de cada votante se introduce en una función resumen o «hash» Se tomaban los siguientes
datos como entrada: los últimos cinco dígitos del DNI, la letra del NIF, la fecha de nacimiento y el
código postal. Después, se aplicaba la función Hash 1714 veces.
La mesa electoral podía consultar la lista de hashes, que era distribuida por un protocolo seguro a través
de distintas páginas web con acceso a la base de datos del censo. Cualquier usuario puede servir para
almacenar la base de datos cifrada del censo y así se distribuye para poder seguir accediendo a ella para
votar.
El objetivo de este ataque es recuperar información de los votantes con propósitos maliciosos como
posibles fraudes dirigidos a éstos. Ver este
artículo. Aunque el INE publica información de cada provincia
sobre sus habitantes, ésta está anonimizada para no poder identificar a personas en concreto.
En este reto proponemos estudiar un protocolo para la votación de los censados en el distrito centro de
Madrid , en la que puedan votar para decidir sobre el cambio de localización de la estatua del Oso y el
Madroño. En este caso para proteger los datos de los votantes, la lista ha sido cifrada de forma análoga y
se ha utilizado la función hash SHA-256, aplicándola 1808 veces.
La información de cada votante son su nombre y apellido, cuatro últimas cifras del DNI, fecha de
nacimiento y código postal.
Los datos que se proveen son:
- La lista de datos cifrados en censo-Madrid.txt
- La implementación Python del algoritmo de cifrado Cifrado_Madrid.py
La solución tiene que detallar los valores recuperados y la estrategia seguida.