From 470a272ea90aec2575ccd328220832aaa791046b Mon Sep 17 00:00:00 2001 From: Juanvvc Date: Mon, 27 Nov 2023 13:32:19 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20Juanvvc/?= =?UTF-8?q?crypto@e8ba2a1523e7d67487b838292882c47dbd5868e8=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01-conceptos.html | 240 +++++++------- 02-historia.html | 422 ++++++++++++------------- 03-simetrica.html | 696 +++++++++++++++++++---------------------- 04-complejidad.html | 449 +++++++++++++------------- 05-asimetrica.html | 623 +++++++++++++++++------------------- 06-hashes.html | 377 ++++++++++------------ 07-pki.html | 278 ++++++++-------- 08-ransomware.html | 186 +++++------ 09-esteganografia.html | 242 +++++++------- A1-glosario.html | 240 +++++++------- A2-rng.html | 222 ++++++------- index.html | 192 ++++++------ 12 files changed, 1989 insertions(+), 2178 deletions(-) diff --git a/01-conceptos.html b/01-conceptos.html index 77fc8da..7df345f 100644 --- a/01-conceptos.html +++ b/01-conceptos.html @@ -1,4 +1,4 @@ -Criptografía - Principios Básicos
-

Conceptos básicos de la criptografía

+ the YAML header: section: | */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Conceptos básicos de la criptografía

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

  1. Servicios criptográficos
  2. @@ -231,16 +231,16 @@

    Hoy hablamos de...

-
+
Servicios criptográficos
-

Servicios criptográficos

+

Servicios criptográficos

¿Qué queremos proteger?

-
+
Servicios criptográficos
-

¿Qué es la criptografía?

+

¿Qué es la criptografía?

Protección de la comunicaciones a través de medios desprotegidos entre un emisor y uno o varios destinatarios

...y eso es mucho más que mantener un mensaje secreto...

@@ -249,9 +249,9 @@

¿Qué es la criptografía?

-
+
Servicios criptográficos
-

¿Qué queremos proteger?

+

¿Qué queremos proteger?

@@ -280,9 +280,9 @@

¿Qué queremos proteger?

-
+
Servicios criptográficos
-

¿Contra quién nos queremos proteger?

+

¿Contra quién nos queremos proteger?

@@ -313,9 +313,9 @@

¿Contra quién nos queremos proteger?

Decidir, evaluar y asumir el riesgo de ataques contra los que no nos podemos proteger

-
+
Servicios criptográficos
-

El problema que queremos resolver

+

El problema que queremos resolver

Firma digital de un contrato entre dos empresas

  • El contrato tiene que ser secreto para cualquiera que no participe en la comunicación
  • @@ -325,9 +325,9 @@

    El problema que queremos resolver

-
+
Servicios criptográficos
-

Principales servicios de seguridad

+

Principales servicios de seguridad

New Directions in Cryptography (Whitfield Diffie y Martin Hellman, 1976) exploraba qué se necesitaba para que dos empresas pudiesen firmar un contrato mercantil:

  • Confidencialidad: solo el legítimo destinatario debe poder ser capaz de leer el contenido del contrato o cualquier información asociada.
  • @@ -341,9 +341,9 @@

    Principales servicios de seguridad

-
+
Servicios criptográficos
-

Otros servicios de seguridad

+

Otros servicios de seguridad

  • Autorización: ¿está el interlocutor autorizado a acceder a estos datos?
  • Acuerdo de claves: permite que un grupo de actores generen una clave sin que nadie externo al grupo la conozca
  • @@ -354,7 +354,7 @@

    Otros servicios de seguridad

-
+
Servicios criptográficos

center

@@ -362,30 +362,30 @@

Otros servicios de seguridad

-
+
Estrategias de seguridad
-

Estrategias de los sistemas seguros

+

Estrategias de los sistemas seguros

The thing is secure if its outputs look like random junk

-
+
Estrategias de seguridad
-

Modelo de sistema criptográfico

+

Modelo de sistema criptográfico

center

    -
  • Mensaje o texto en claro: mm
  • -
  • Texto cifrado: c=e(k1,m)c = e(k_1, m)
  • -
  • Texto descifrado: m=d(k2,m)m' = d(k_2, m)
  • -
  • k1k_1 y k2k_2: clave criptográfica de cifrado o descifrado: parte secreta de los algoritmos de cifrado y descifrado
  • -
  • Objetivo: m=mm=m'
  • +
  • Mensaje o texto en claro:
  • +
  • Texto cifrado:
  • +
  • Texto descifrado:
  • +
  • y : clave criptográfica de cifrado o descifrado: parte secreta de los algoritmos de cifrado y descifrado
  • +
  • Objetivo:
-
+
Estrategias de seguridad
-

Principios de Kerckhoffs

+

Principios de Kerckhoffs

https://en.wikipedia.org/wiki/Kerckhoffs's_principle

@@ -399,9 +399,9 @@

Principios de Kerckhoffs

-
+
Estrategias de seguridad
-

Máxima de Shannon

+

Máxima de Shannon

El atacante conoce el sistema

Claude Elwood Shannon (1906-2001)

@@ -412,9 +412,9 @@

Máxima de Shannon

-
+
Estrategias de seguridad
-

Gestión de claves

+

Gestión de claves

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

@@ -424,66 +424,66 @@

Gestión de claves

-
+
Estrategias de seguridad

-
+
Estrategias de seguridad
-

Primitivas: hash

+

Primitivas: hash

Calcula un resumen sobre un mensaje. Para validar el resumen, se vuelve a calcular y se compara

-
> cat test.mp3| sha256sum 
+
> cat test.mp3| sha256sum 
 71a3644f14bdd5d2ebf56aaca440ad3c2b76b13f6a0708a9918e6b8bfabaeff3  -
-
+

Hablaremos del hash en el tema 6

-
+
Estrategias de seguridad
-

Primitivas: clave simétrica

+

Primitivas: clave simétrica

  • El algoritmo de cifrado y el de descrifrado pueden ser el mismo
  • Una sola clave para cifrar y descifrar
-
> openssl aes-256-cbc -a -salt -in test.mp3 -out test.aes -pass pass:1234
+
> openssl aes-256-cbc -a -salt -in test.mp3 -out test.aes -pass pass:1234
 
 > openssl aes-256-cbc -d -a -salt -in test.aes -out test2.mp3 -pass pass:1234
-
+

Hablaremos del cifrado simétrico en el tema 3

AVISO: pasar el password como argumento no es buena práctica. Solo se presenta aquí como ejemplo

-
+
Estrategias de seguridad
-

Primitivas: clave asimétrica

+

Primitivas: clave asimétrica

  • Un algoritmo para cifrar y otro para descifrar
  • Una clave para cifrar y otra para descrifrar
  • La clave de cifrado suele ser conocida por todos, por eso se llama también "pareja de clave pública y privada".
-
# Generar par de claves
+
# Generar par de claves
 > openssl genrsa -aes256 -out private.key 2048
 > openssl rsa -in private.key -pubout -out public.key
-> cat public.key
+> cat public.key
 
 > openssl rsautl -encrypt -pubin -inkey public.key -in test.mp3 -out test.rsa  
 RSA operation error
 4345576940:error:04FFF06E:rsa routines:CRYPTO_internal:data too large for key size
-
+

Hablaremos del cifrado asimétrico en el tema 5

-
+
Estrategias de seguridad
-

Servicios de seguridad a primitivas

+

Servicios de seguridad a primitivas

@@ -516,9 +516,9 @@

Servicios de seguridad a primitivas

-
+
Estrategias de seguridad
-

Protocolos criptográficos

+

Protocolos criptográficos

If A is a secure thingamajig, then B is a secure doohickey

La criptografía actual se basa en composición de técnicas primitivas:

    @@ -529,9 +529,9 @@

    Protocolos criptográficos

    La composición es compleja y todo debe funcionar como un reloj.

-
+
Estrategias de seguridad
-

Seguridad del protocolo de seguridad.

+

Seguridad del protocolo de seguridad.

La fortaleza (o debilidad) de la criptografía depende de todos los eslabones de la cadena:

  • puertas criptográficas (diseño, criptoanálisis)
  • @@ -542,23 +542,23 @@

    Seguridad del protocolo de seguridad.

-
+
Estrategias de seguridad
-

Composición de algoritmos

+

Composición de algoritmos

Habitualmente no usamos una única primitiva/función criptográfica:

    -
  • objetivos múltiples: me interesa confidencialidad, integridad y autenticidad simultáneamente para la transmisión del mensaje mm
  • +
  • objetivos múltiples: me interesa confidencialidad, integridad y autenticidad simultáneamente para la transmisión del mensaje
  • eficiencia: los algoritmos simétricos son varios órdenes de magnitud más rápidos que los asimétricos
  • robustez: muchas primitivas (individuales) no devuelven error en caso de que algo vaya mal (una firma asimétrica simplemente devuelve un mensaje firmado distinto)
  • -
  • secuencias de mensajes: nos interesa proteger secuencias de mensajes {m1,m2,...,mn}\{m_1,m_2, ..., m_n\} o diálogos {ma1,mb1,ma2,mb2,...}\{m_{a_1},m_{b_1},m_{a_2},m_{b_2}, ...\} para que no llegen mensajes repetidos o desordenados.
  • +
  • secuencias de mensajes: nos interesa proteger secuencias de mensajes o diálogos para que no llegen mensajes repetidos o desordenados.
-
-

Resumen y referencias

+
+

Resumen y referencias

-
+
  • Diseña el sistema pensando que el atacante lo conoce.
  • Servicios básicos de seguridad: confidencialidad, integridad, autenticación, no repudio.
  • @@ -567,8 +567,8 @@

    Resumen y referencias

-
-

Referencias

+
+

Referencias

-
+

Continúa en: Criptografía clásica

Es muy recomendable tener a mano el glosario para recordar los conceptos fundamentales

-
-

¡Gracias!

+
+

¡Gracias!

-

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. @@ -725,5 +725,5 @@

¡Gracias!

Es decir, los mensajes son eslabones de una cadena, cada mensaje tiene el hash del eslabón anterior. Casi, casi, hemos definido una blockchain como bitcoin -- ->

\ No newline at end of file +- ->

\ No newline at end of file diff --git a/02-historia.html b/02-historia.html index 9461866..163ea74 100644 --- a/02-historia.html +++ b/02-historia.html @@ -1,4 +1,4 @@ -Criptografía - Historia de la criptografía
-

Historia de la criptografía

+ the YAML header: section: | */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Historia de la criptografía

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
+

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?

@@ -229,8 +229,8 @@

Historia de la criptografía

¿Qué hemos aprendido desde entonces?

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

  1. Criptografía clásica
  2. @@ -241,22 +241,22 @@

    Hoy hablamos de...

-
+
Criptografía clásica
-

Criptografía clásica

+

Criptografía clásica

-
+
Criptografía clásica
-

Criptografía = cifrado

+

Criptografía = cifrado

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

-
+
Criptografía clásica
-

Mecanismos clásicos de cifrado

+

Mecanismos clásicos de cifrado

  • Cifrados por sustitución: cambiar una letra por otra.
      @@ -268,9 +268,9 @@

      Mecanismos clásicos de cifrado

-
+
Criptografía clásica
-

Transposición: escítala griega

+

Transposición: escítala griega

  • Dos varas del mismo grosor
  • @@ -279,26 +279,26 @@

    Transposición: escítala griega

-
+
Criptografía clásica
-

Sustitución: cifrado César

+

Sustitución: cifrado César

    -
  • Es un cifrado monoalfabético: "sustituimos una letra por otra que viene kk posiciones detrás"
  • +
  • Es un cifrado monoalfabético: "sustituimos una letra por otra que viene posiciones detrás"
  • Es más antiguo que los romanos: incluso la Biblia hebrea incluye palabras con cifrado de sustitución y evitar así escribir la palabra real.
-
+
César y la fortaleza
-

Cifrado César

+

Cifrado César

Fuerza bruta, análisis frecuencial y fortaleza de un algoritmo

-
+
César y la fortaleza
-

Historia

+

Historia

  • Leyenda: Julio César lo usaba para comunicarse con sus generales
  • Como todos los cifrados de sustitución monalfabética, se descifra con facilidad y en la práctica no ofrece apenas seguridad en la comunicación.
  • @@ -306,58 +306,43 @@

    Historia

    El cifrado César forma parte de sistemas más complejos de codificación, como el cifrado Vigenère, e incluso tiene aplicación en el sistema ROT13, y su estudio sirve para entender por qué los cifrados fallan.

-
+
César y la fortaleza
-

Cifrado

- -

c=e(k,m)=m+kmod26c = e(k, m) = m + k \mod {26}

-

Por ejemplo, clave k=3k=3:

-

XAYBZCADBE\begin{aligned} -X &\rightarrow A \\ -Y &\rightarrow B \\ -Z &\rightarrow C \\ -A &\rightarrow D \\ -B &\rightarrow E -\end{aligned} -

+

Cifrado

+ +

+

Por ejemplo, clave :

+

Si necesitas repasar la aritmética modular, consulta el glosario

-
+
César y la fortaleza
-

Descifrado

-

m=d(k,d)=ckmod26=e(26kmod26,c)m' = d(k, d) = c - k \mod {26} = e(26 - k \mod 26, c) -

Giramos la tabla. Fíjate: para k=3k=3, el descifrado es equivalente a cifrar con k=263=23k'=26-3=23:

-

XAYBZCADBE\begin{aligned} -X &\leftarrow A \\ -Y &\leftarrow B \\ -Z &\leftarrow C \\ -A &\leftarrow D \\ -B &\leftarrow E -\end{aligned} -

-
-
+

Descifrado

+

Giramos la tabla. Fíjate: para , el descifrado es equivalente a cifrar con :

+

+
+
César y la fortaleza
-

Seguridad del cifrado del César: fuerza bruta

+

Seguridad del cifrado del César: fuerza bruta

HOLAMUNDO
ELIXJRKAL

¿qué podemos hacer si solo tenemos el texto cifrado ELIXJRKAL?

-

0k<260\leq k < 26 , así que podemos probar las 26 claves una a una: ataque de fuerza bruta

+

, así que podemos probar las 26 claves una a una: ataque de fuerza bruta

-
+
César y la fortaleza
-

Ataque de fuerza bruta

-

Un ataque de fuerza bruta implica probar sobre el mensaje cifrado cc todas las posibles claves kik_i hasta que encontremos la "buena":

+

Ataque de fuerza bruta

+

Un ataque de fuerza bruta implica probar sobre el mensaje cifrado todas las posibles claves hasta que encontremos la "buena":

    -
  • descifrar con la clave m?=d(c,ki)m^?=d(c,k_i)
  • -
  • y validar si m?m^? es válido. Es decir, si m=m?m=m^?
  • +
  • descifrar con la clave
  • +
  • y validar si es válido. Es decir, si
-
+
César y la fortaleza

Descifrada una carta encriptada de las guerras carlistas escrita en Bizkaia

@@ -367,7 +352,7 @@

Ataque de fuerza bruta

-
+
César y la fortaleza

Pero no siempre es posible saber si un mensaje se ha descifrado correctamente:

@@ -377,15 +362,15 @@

Ataque de fuerza bruta

-
+
César y la fortaleza
-

Contramedidas

+

Contramedidas

¿Cómo podemos proteger estos sistemas contra la fuerza bruta?

-
+
César y la fortaleza

La defensa contra los ataques de fuerza bruta son:

    @@ -396,49 +381,42 @@

    Contramedidas

    Queda por tanto "que el adversario tenga que hacer muchas operaciones de descifrado". Es decir: que el atacante tenga que probar muchas claves.

-
+
César y la fortaleza
-

Fuerza bruta

+

Fuerza bruta

  • En una CPU "estándar" se prueban 1.000.000 clave/CPU/s
  • -
  • es decir: 10610^6 clave/CPU/s
  • -
  • es decir: se prueban 10910^9 claves/s en 1000 CPU
  • -
  • es decir: se prueban 3.6 * 101210^{12} claves/h en 1000 CPU
  • +
  • es decir: clave/CPU/s
  • +
  • es decir: se prueban claves/s en 1000 CPU
  • +
  • es decir: se prueban 3.6 * claves/h en 1000 CPU
  • en AWS EC2 una c4.large cuesta 10 céntimos/h
  • -
  • es decir 3.6 10113.6\ 10^{11} claves/€/h
  • +
  • es decir claves/€/h
-

Si tenemos capacidad de diseñar/fabricar d()d() en hardware (ASIC) los costes bajan después de un periodo de amortización

+

Si tenemos capacidad de diseñar/fabricar en hardware (ASIC) los costes bajan después de un periodo de amortización

-
+
César y la fortaleza
-

Alquilando equipos en la nube por segundos, con un euro cada segundo podemos probar 101110^{11} claves

+

Alquilando equipos en la nube por segundos, con un euro cada segundo podemos probar claves

Si estimamos que nuestro "secreto" vale 1000 €:

-

Nos hacen falta un sistema criptográfico que permita escoger entre 210142·10^{14} claves diferentes (248\approx 2^{48}) para guardar el secreto durante una hora.

-

Este sistema tendría fortaleza 48 bits: un atacante tiene que probar 2482^{48} claves si quiere romperlo por fuerza bruta

+

Nos hacen falta un sistema criptográfico que permita escoger entre claves diferentes () para guardar el secreto durante una hora.

+

Este sistema tendría fortaleza 48 bits: un atacante tiene que probar claves si quiere romperlo por fuerza bruta

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. Normalmente se expresa en bits.

-
+
César y la fortaleza
-

Aumentando el espacio de claves en César: mapeo aleatorio

-

Hemos visto que el César original tiene como máximo 26 claves, aproximadamente 252^5, es decir, entre 4 y 5 bits de fortaleza.

+

Aumentando el espacio de claves en César: mapeo aleatorio

+

Hemos visto que el César original tiene como máximo 26 claves, aproximadamente , es decir, entre 4 y 5 bits de fortaleza.

Podemos mejorarlo permitiendo cualquier mapeo aleatorio:

-

XFYBZMAYBB\begin{aligned} -X &\rightarrow F \\ -Y &\rightarrow B \\ -Z &\rightarrow M \\ -A &\rightarrow Y \\ -B &\rightarrow B -\end{aligned} -

Ahora tenemos 26!26! posibles claves, 288\approx 2^{88}, 88 bits de fortaleza.

+

Ahora tenemos posibles claves, , 88 bits de fortaleza.

-
+
César y la fortaleza
-

¿Cuánto tiempo necesitamos guardar un secreto?

+

¿Cuánto tiempo necesitamos guardar un secreto?

  • "Atacaremos a las 11" dejará de ser secreto a las 11: 1 día
  • "Mis cartas personales": 10 años
  • @@ -448,9 +426,9 @@

    ¿Cuánto tiempo necesitamos guardar un secreto?

    Más sobre esto en el tema 3

-
+
César y la fortaleza
-

Mejorando la fuerza bruta

+

Mejorando la fuerza bruta

¿Podemos encontrar un método más rápido que probar las claves una a una?

Hq fulswrjudild, ho fliudgr Fhvdu, wdpelhq frqrflgr frpr fliudgr sru
ghvsodcdplhqwr, frgljr gh Fhvdu r ghvsodcdplhqwr gh Fhvdu, hv xqd gh
@@ -461,109 +439,104 @@

Mejorando la fuerza bruta

Si el mensaje es suficientemente largo, podemos analizar la frecuencia de aparición de los carácteres

-
+
César y la fortaleza
-

Análisis de frecuencias

+

Análisis de frecuencias

¡La estadística se mantiene igual (pero movida) después del cifrado César!

-
+
César y la fortaleza
-

Rotura de algoritmos criptográficos

+

Rotura de algoritmos criptográficos

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.

-
+
Vigenère y Enigma
-

Mejoras al cifrado César: sistemas polialfabéticos

+

Mejoras al cifrado César: sistemas polialfabéticos

Vigenère y Enigma

-
+
Vigenère y Enigma
-

Transponer y sustituir

+

Transponer y sustituir

Podemos añadir una transposición a la vez de una substitución:

center

Podemos mapear cualquier letra a cualquier otra letra

-
ABCDEFGHIJKLMNOPQRSTUVWXYZ
+
ABCDEFGHIJKLMNOPQRSTUVWXYZ
 XZCTEROSIULKWNGYQFHDJVMAPB
-
+

Todo esto aumenta el espacio de claves, pero sigue siendo vulnerable a análisis de frecuencia.

-
+
Vigenère y Enigma
-

Tabula recta

+

Tabula recta

Johannes Trithemius en 1508, con el primer libro conocido dedicado a la criptografía, inició el sistema de cifrados polialfabéticos...

...al principio sin clave.

-
+
Vigenère y Enigma
-

Cifrado de Vigenère

+

Cifrado de Vigenère

Cifrado polialfabético de Giovan Battista Bellaso en 1553, pero atribuido a Vigenère

-

kk ahora será una secuencia de números.

-

k={23,8,3}k=\{23,8,3\}

+

ahora será una secuencia de números.

+

Es decir: la primera letra se desplaza 23 posiciones, la segunda 8, la tercera 3, luego 23 otra vez, luego 8, luego 3...

Habitualmente se escriben las letras que cifran el texto "AAA":

-

k=e({23,8,3},AAA")=XIDk=e(\{23,8,3\}, ``AAA") =XID

+

-
+
Vigenère y Enigma
-

ci=e(k,mi)=mi+k(imodk)mod26c_i = e(k, m_i) = m_i + k_{(i \mod ||k||)} \mod 26

-

mi=d(k,di)=cik(imodk)mod26m'_i = d(k, d_i) = c_i - k_{(i \mod ||k||)} \mod 26

-

Siendo k||k|| la longitud de la clave

-

Ejemplo. k=XID={23,8,3}k=XID=\{23,8,3\}

-
HOL AMU NDO
+

+

+

Siendo la longitud de la clave

+

Ejemplo.

+
HOL AMU NDO
 ||| ||| |||
 XID XID XID
 ||| ||| |||
 EWO XUX KLR 
-
+ -
+
Vigenère y Enigma

"Le chiffre indéchiffrable" se utilizó desde el siglo XVI hasta bien entrado el siglo XX.

...aunque ya había expertos en romperlo en el siglo XIX.

-
+
Vigenère y Enigma
-

Ejemplo

+

Ejemplo

Wr urutlsyrmjae, wl omxvsda Gwwsr, feefaez ggrgcuhg ggma gajjaps hsj dqwhpszmqaifta, gghaga hw Gwsmv g hwsbpsdsmuifxg dq Gwwsr, qw mrs dq psw leoragss pi umxrmhg qss emetdee c eek ueevek. Ee yf xapa hw gafdevs hod wmwlifyumgn qr wp iuq yfe defvs if ex xwblo avakanmp ww jeqqhpszmhs tgr axje defvs

https://www.dcode.fr/vigenere-cipher

-
+
Vigenère y Enigma
-

Seguridad de Vigenére

+

Seguridad de Vigenére

Ahora el espacio de claves es (clave de 3 carácteres):

-

0<k<2630<k<17576\begin{aligned} -0 &<k<26^3 \\ -0 &<k<17576 -\end{aligned} -

Se puede aumentar el espacio de claves indefinidamente con contraseñas más largas.

-

Para contraseñas de nn carácteres:

-

0<k<26n0<k<26^n -

Ejemplos :

+

Se puede aumentar el espacio de claves indefinidamente con contraseñas más largas.

+

Para contraseñas de carácteres:

+

Ejemplos :

    -
  • Si n=8n=8, existen 268=2101126^8 = 2·10^{11} claves diferentes. Coste de fuerza bruta: 0,5 €
  • -
  • Si n=16n=16, existen 2616=4102226^{16} = 4·10^{22} claves diferentes. Coste: 100 mil millones de €
  • +
  • Si , existen claves diferentes. Coste de fuerza bruta: 0,5 €
  • +
  • Si , existen claves diferentes. Coste: 100 mil millones de €
-
+
Vigenère y Enigma

Vulnerabilidad: la repetición de la clave, que además es de longitud adivinable y normalmente corta.

@@ -575,9 +548,9 @@

Seguridad de Vigenére

No se debe cifrar dos trozos del mensaje con la misma clave

-
+
Vigenère y Enigma
-

Máquina Enigma

+

Máquina Enigma

  • Inventada por Arthur Scherbius y usada a partir de los años 20 del siglo XX
  • Existía versión comercial y versión militar
  • @@ -586,15 +559,15 @@

    Máquina Enigma

-
+
Vigenère y Enigma

-
+
Vigenère y Enigma
-

Máquina Enigma: seguridad

+

Máquina Enigma: seguridad

  • Sistema polialfabético como Vigenère, con una clave muy larga que se define con la posición inicial de los rotores
  • Con la tecnología de la época no era posible hacer fuerza bruta antes de que cambiase la clave (cada día)
  • @@ -605,7 +578,7 @@

    Máquina Enigma: seguridad

-
+
Vigenère y Enigma

Protocolo alemán de uso:

@@ -616,7 +589,7 @@

Máquina Enigma: seguridad

-
+
Vigenère y Enigma

Se rompió más "por mal protocolo" que porque el sistema fuese defectuoso

@@ -632,7 +605,7 @@

Máquina Enigma: seguridad

-
+
Vigenère y Enigma

Una vez reducido el espacio de clave, identificados qué textos es probable que apareciesen y otros atajos...

@@ -641,16 +614,16 @@

Máquina Enigma: seguridad

El descifrado de Enigma fue una de las claves que permitió a los aliados ganar la Segunda Guerra Mundial

-
+
Confidencialidad perfecta
-

Confidencialidad perfecta

+

Confidencialidad perfecta

One-time-pad (cifrado Vernam)

-
+
Confidencialidad perfecta
-

Confidencialidad perfecta

+

Confidencialidad perfecta

Seguridad perfecta o incondicional: no se puede deducir ninguna propiedad del texto original en claro, incluso aunque el atacante tenga recursos infinitos (tiempo, dinero)

    @@ -662,14 +635,13 @@

    Confidencialidad perfecta

-
+
Confidencialidad perfecta

Definición exacta:

-

Confidencialidad perfecta (perfect secrecy): un sistema es perfectamente seguro si y solo si para cualquier distribución de probabilidad sobre el espacio de mensajes en claro mm, y para todos los mensajes en claro y para todos los textos cifrados posibles cc, la probabilidad condicionada de mm dada cc y la probabilidad de mm coinciden

-

P[mc]=P[m]P[m|c] = P[m] -

+

Confidencialidad perfecta (perfect secrecy): un sistema es perfectamente seguro si y solo si para cualquier distribución de probabilidad sobre el espacio de mensajes en claro , y para todos los mensajes en claro y para todos los textos cifrados posibles , la probabilidad condicionada de dada y la probabilidad de coinciden

+

-
+
Confidencialidad perfecta

Si un cifado perfecto teórico cifra como XHAJSJXXNFHFDOIOJUMNFNNNF:

@@ -681,9 +653,9 @@

Confidencialidad perfecta

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

-
+
Confidencialidad perfecta
-

¿A qué hora atacamos?

+

¿A qué hora atacamos?

Imagina que un ejército decide el siguiente mapeo, es decir, clave:

    @@ -696,7 +668,7 @@

    ¿A qué hora atacamos?

    ¿Tiene alguna forma el enemigo de conocer a qué hora le atacarán?

-
+
Confidencialidad perfecta
    @@ -714,9 +686,9 @@

    ¿A qué hora atacamos?

-
+
Confidencialidad perfecta
-

Convirtiendo Vigènere en cifrado perfecto: cifrado Vernam

+

Convirtiendo Vigènere en cifrado perfecto: cifrado Vernam

El cifrado de Vigenère sufría un problema similar al del César (aunque camuflado): manifestaba la estadística del mensaje en claro en el mensaje cifrado

Podemos evitar que se manifieste la estadística en el texto cifrado si utilizamos cada letra de la clave una sola vez

Tenemos confidencialidad perfecta si y solo sí usamos un cifrado Vigenère con las siguientes características:

@@ -727,13 +699,13 @@

Convirtiendo Vigènere en cifrado perfecto: cifrado Vernam

-
+
Confidencialidad perfecta

Vernam patentó el one-time-pad de una manera similar pero equivalente:

-

c=e(k,m)=kmc = e(k,m)=k \otimes m
-m=d(k,c)=e(k,c)=kcm' = d(k,c) = e(k,c)=k \otimes c

-

La longitud en bytes de kk es igual que la longitud en bytes de mm.

+


+

+

La longitud en bytes de es igual que 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.

La NSA tenía 86.000 one-time-pads solo para el año 1972.

@@ -742,19 +714,19 @@

Convirtiendo Vigènere en cifrado perfecto: cifrado Vernam

-
+
Confidencialidad perfecta

El teléfono rojo entre Washington y Moscú fue en realidad un teletipo que usaba cifrado de bloque de un solo uso

-

La clave kk 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

+

La clave 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.

-
+
Confidencialidad perfecta
-

Vulnerabilidades

+

Vulnerabilidades

Ninguna. Ni siquiera por fuerza bruta: si pruebas claves, puedes "descifrar" el texto cifrado y conseguir cualquier mensaje que se te ocurra...

-

...mientras se cumplan las hipótesis de trabajo para la clave kk:

+

...mientras se cumplan las hipótesis de trabajo para la clave :

  • tan larga como el mensaje
  • un solo uso
  • @@ -763,16 +735,16 @@

    Vulnerabilidades

    Los humanos somos muy malos para distinguir qué es y qué no es aleatorio

-
+
Confidencialidad perfecta
-

Pero el principal problema es que la longitud en bytes de kk es igual a la longitud en bytes de mm.

-

Cuesta tanto enviar kk de forma segura como enviar directamente mm en claro por el mismo canal seguro

+

Pero el principal problema es que la longitud en bytes de es igual a la longitud en bytes de .

+

Cuesta tanto enviar de forma segura como enviar directamente en claro por el mismo canal seguro

Más ejemplos: https://www.cryptomuseum.com/covert/conceal/index.htm

-
+
Confidencialidad perfecta
  • 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.
  • @@ -781,15 +753,15 @@

    Vulnerabilidades

-
-

Resumen y referencias

+
+

Resumen y referencias

-
+

center

-
+
  • La información de contexto puede ayudar a descifrar un mensaje
  • Definimos la fortaleza de un algoritmo como el tamaño de la clave en bits, si no se puede romper más que por fuerza bruta
  • @@ -806,14 +778,14 @@

    Resumen y referencias

-
-

1976, el año que empezó todo...

+
+

1976, el año que empezó todo...

La NSA selecciona un algoritmo de cifrado simétrico de IBM para comunicaciones de la administración: DES (Data Encryption Standard), que es "casi" perfecto.

Whitfield Diffie y Martin Hellman generan el primer algoritmo práctico de criptografía asimétrica, que permite distribuir fácilmente claves seguras.

-
-

Referencias

+
+

Referencias

-
+

Ejercicios opcionales pero muy recomendables:

-
-

¡Gracias!

+
+

¡Gracias!

-

¿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". @@ -915,5 +887,5 @@

¡Gracias!

- Lo que dijimos antes: dado un texto cifrado, no conocemos nada de su texto en claro - Dado un texto cifrado, el mensaje en claro podría ser cualquiera:

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.

En realidad esto ya se sabía antes de que Vernan inventase su máquina. Pero el invento de Vernan permitió usar este tipo de cifrado, y además Shannon acabó formalizando la teoría matemática que empezó la criptografía moderna

La criptografía actual empezó en 1976: se escogió un algoritmo de cifrado simétrico que es casi perfecto y además práctico, y se -descubrió la criptogradía asimétrica que permitía publicar parte de la clave.

\ No newline at end of file +descubrió la criptogradía asimétrica que permitía publicar parte de la clave.

\ No newline at end of file diff --git a/03-simetrica.html b/03-simetrica.html index 8757a88..a21bf63 100644 --- a/03-simetrica.html +++ b/03-simetrica.html @@ -1,4 +1,4 @@ -Criptografía - Cifrado simétrico
-

Cifrado simétrico o de clave privada

+/* section footer { display: none; } */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Cifrado simétrico o de clave privada

AES y ChaCha

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Como decíamos ayer...

+
+

Como decíamos ayer...

Sabemos conseguir confidencialidad perfecta que nadie puede descifrar (tema 2)

-

Pero implica claves de un solo uso tan grandes como el mensaje: k=m\|k\|=\|m\|

+

Pero implica claves de un solo uso tan grandes como el mensaje:

Hasta los '70 la criptografía o era "muy imperfecta" o no era "práctica". A partir de 1976:

  • Criptografía simétrica: es "casi perfecta" con claves cortas
  • @@ -238,8 +238,8 @@

    Como decíamos ayer...

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

  1. Confidencialidad computacional
  2. @@ -251,14 +251,14 @@

    Hoy hablamos de...

-
+
Confidencialidad computacional
-

Confidencialidad computacional

+

Confidencialidad computacional

-
+
Confidencialidad computacional
-

Relajando la perfección

+

Relajando la perfección

  • Confidencialidad perfecta: a partir del texto cifrado no es posible deducir ninguna propiedad del texto en claro aunque el atacante tenga capacidad computacional infinita
  • Confidencialidad computacional: a partir del texto cifrado no es posible deducir ninguna propiedad del texto en claro aunque el atacante tenga capacidad computacional razonable
  • @@ -269,12 +269,11 @@

    Relajando la perfección

-
+
Confidencialidad computacional
-

Confidencialidad perfecta (perfect secrecy): un sistema es perfectamente seguro si y solo si para cualquier distribución de probabilidad sobre el espacio de mensajes en claro, y para todos los mensajes en claro y para todos los textos cifrados posibles, la probabilidad condicionada de mm dado cc y la probabilidad de mm coinciden:

-

P[mc]=P[m]P[m|c] = P[m] -

Puede demostrarse matemáticamete que es necesario:

+

Confidencialidad perfecta (perfect secrecy): un sistema es perfectamente seguro si y solo si para cualquier distribución de probabilidad sobre el espacio de mensajes en claro, y para todos los mensajes en claro y para todos los textos cifrados posibles, la probabilidad condicionada de dado y la probabilidad de coinciden:

+

Puede demostrarse matemáticamete que es necesario:

  • Que la clave sea tan larga como el mensaje
  • Que la clave sea totalmente aleatoria
  • @@ -283,9 +282,9 @@

    Relajando la perfección

    La confidencialidad prerfecta no es práctica

-
+
Confidencialidad computacional
-

Seguridad computacional: un sistema es seguro computacionalmente si cualquier algoritmo probabilístico en tiempo polinomial solo puede romper el algoritmo con probabilidad negligible en n\|n\|

+

Seguridad computacional: un sistema es seguro computacionalmente si cualquier algoritmo probabilístico en tiempo polinomial solo puede romper el algoritmo con probabilidad negligible en

Informalmente: un atacante no puede descifrar el mensaje:

  • en un tiempo razonable
  • @@ -295,11 +294,11 @@

    Relajando la perfección

    Con la seguridad computacional hay que definir el objetivo: "quiero un sistema criptográfico que mantenga este mensaje secreto durante los próximos 100 años"

-
+
Confidencialidad computacional
-

Ataques de fuerza bruta

+

Ataques de fuerza bruta

-

La criptografía computacionalmente segura permite km\|k\| \ll \|m\|

+

La criptografía computacionalmente segura permite

  • Es un cifrado práctico: la clave es mucho más pequeña que el mensaje y por tanto es fácil de distribuir
  • Pero si es muy pequeña, es posible hacer fuerza bruta
  • @@ -307,36 +306,36 @@

    Ataques de fuerza bruta

    Hay que usar un espacio de claves lo suficientemente grande como para que no sea posible hacer fuerza bruta hoy en día, y lo suficientemente pequeño como para que sea práctico

-
+
Confidencialidad computacional
    -
  • podemos probar 10610^6 clave/CPU/s 220\approx 2^{20} clave/CPU/s
  • -
  • ó 101310^{13} clave/CPU/año 243\approx 2^{43} clave/CPU/año
  • -
  • ó 101610^{16} clave/año con 10001000 CPU ≈253\approx 2^{53} clave/CPU·año
  • -
  • ó 101910^{19} clave/año con 10610^6 CPU 263\approx 2^{63} clave/año
  • -
  • ó 102510^{25} claves con 10610^6 CPU un millón de años 283\approx 2^{83}
  • -
  • ó 102910^{29} claves con 10610^6 CPU desde el Big Bang 296\approx 2^{96}
  • +
  • podemos probar clave/CPU/s clave/CPU/s
  • +
  • ó clave/CPU/año clave/CPU/año
  • +
  • ó clave/año con CPU ≈ clave/CPU·año
  • +
  • ó clave/año con CPU clave/año
  • +
  • ó claves con CPU un millón de años
  • +
  • ó claves con CPU desde el Big Bang

Si tengo una "suerte media" sólo nos hará falta la mitad de las pruebas

-

Con hardware ad-hoc podemos llegar a multiplicar por 10410^4 ó 10510^5 veces
-(2132^{13} ó 2172^{17} veces). Ejemplo: Bitcoin

+

Con hardware ad-hoc podemos llegar a multiplicar por ó veces
+( ó veces). Ejemplo: Bitcoin

Fortaleza de un sistema criptográfico: número de claves que hay que probar por fuerza bruta (en bits)

-
+
Confidencialidad computacional

center

-
+
Confidencialidad computacional
-

Tamaños recomendados de clave

+

Tamaños recomendados de clave

El NIST recomienda (2020, sección 5.6.3) claves en las que un atacante
-tenga que hacer 21122^{112} pruebas.

-

Es decir, según el NIST antes de 2030 las claves han de tener una longitud mínima de k=112\|k\|=112 bits

-

A partir del 2030 prevé recomendar k=128\|k\|=128 bits

+tenga que hacer pruebas.

+

Es decir, según el NIST antes de 2030 las claves han de tener una longitud mínima de bits

+

A partir del 2030 prevé recomendar bits

Es decir: con una clave de 128 bits podemos cifrar un mensaje de cualquier longitud, y es razonable que nadie pueda descifrarlo en un futuro previsible

En cifrado simétrico, el tamaño en bits de su clave es igual a la fortaleza del sistema

@@ -344,32 +343,32 @@

Tamaños recomendados de clave

-
+
Confidencialidad computacional

NIST: The most important approach is to be flexible; the use of implementations and applications that can most easily be adapted to the cryptographic security offerings and a plan for transitioning to them offer the best solution

center

La amenaza conocida que puede modificar el calendario es la computación cuántica

-
+
Confidencialidad computacional
-

Rompiendo algoritmos

+

Rompiendo algoritmos

Recuerda: definimos un que un algoritmo está criptográficamente roto si se conoce un ataque más eficiente que la fuerza bruta

Para la criptografía simétrica, buscaremos algoritmos computacionalmente seguros y que no estén rotos

Cuando la comunidad criptográfica rompe un algoritmo, se sustituye por otro

... pero es mejor prevenir: los algoritmos caducan y se cambian antes de que estén rotos

-
+
Confidencialidad computacional
-

Criptografía simétrica: tipos

+

Criptografía simétrica: tipos

  • Cifrado de flujo. Heredero de "la idea" one-time-pad: el mensaje llega como un flujo de bytes que se cifra según va llegando.
  • Cifrado de bloque. Heredero de "la tradición" Vigenère: el mensaje se divide en bloques que se cifran por separado
-
+
Confidencialidad computacional
@@ -400,58 +399,56 @@

Criptografía simétrica: tipos

-
+
Cifrado de flujo
-

Cifrado de flujo

+

Cifrado de flujo

-
+
Cifrado de flujo

Es una implementación práctica de los bloques de una solo uso (one-time-pad)

Recuerda: con one-time-pad necesitábamos una clave tan larga como el mensaje

-

k=m\|k\|=\|m\| -

Para después hacer:

-

c=e(k,m)=kmc=e(k,m) = k \otimes m -

+

Para después hacer:

+

-
+
Cifrado de flujo
-

En cifrado de flujo lo que haremos es generar una kgeneradak_{\text{generada}}

-

kgenerada=m\|k_{\text{generada}}\| = \|m\|

-

...a partir de una clave kk de longitud corta...

-

kPRNGkgeneradak \overset{PRNG}{\longrightarrow} k_{\text{generada}}

+

En cifrado de flujo lo que haremos es generar una

+

+

...a partir de una clave de longitud corta...

+

para después hacer:

-

c=kgeneradamc = k_{\text{generada}} \oplus m

+

-
+
Cifrado de flujo
-

Cifrado de flujo: algoritmo

+

Cifrado de flujo: algoritmo

center

-
+
Cifrado de flujo
-

Generadores de números aleatorios

+

Generadores de números aleatorios

-

La función PRNG (Pseudo Random Number Generator) es un generador de bits que tiene como entrada una semilla (que será la clave de cifrado kk) y tiene como salida el flujo de bits que aplicaremos sobre el mensaje para cifrarlo con XOR

+

La función PRNG (Pseudo Random Number Generator) es un generador de bits que tiene como entrada una semilla (que será la clave de cifrado ) y tiene como salida el flujo de bits que aplicaremos sobre el mensaje para cifrarlo con XOR

La velocidad del cifrado depende totalmente de la velocidad del PRNG, porque el XOR es instantáneo

-
+
Cifrado de flujo

Un PRNG es un algoritmo determinista que extiende una semilla realmente aleatoria, resultando en una secuencia que parece ser uniformemente aleatoria.

Definición formal:

-

PRNG: Dado GG, un algoritmo determinista en tiempo polinomial que toma una semilla s{0,1}ns \in \{0,1\}^n y da como salida una cadena G(s){0,1}l(n)G(s) \in \{0,1\}^{l(n)}, donde l()l() es un polinomio y l(n)>nl(n) > n para todo nNn \in \N. GG es un PRGN si su salida no puede distinguirse de una función aleatoria uniforme en tiempo polinomial.

+

PRNG: Dado , un algoritmo determinista en tiempo polinomial que toma una semilla y da como salida una cadena , donde es un polinomio y para todo . es un PRGN si su salida no puede distinguirse de una función aleatoria uniforme en tiempo polinomial.

-
+
Cifrado de flujo
-

PRNG: seguridad

+

PRNG: seguridad

-

Una función PRNG es realmente PRNG (es decir, útil en criptografía) si ningún atacante puede distingir entre las secuencia generada y una fuente aleatoria aleatoria uniforme RNG con una probabilidad diferente de 0.50.5

+

Una función PRNG es realmente PRNG (es decir, útil en criptografía) si ningún atacante puede distingir entre las secuencia generada y una fuente aleatoria aleatoria uniforme RNG con una probabilidad diferente de

center

Fuente aleatorio uniforme RNG: medios físicos, no algorítmicos. Por ejemplo, generadores cuánticos.

Encontrarás más información en el Anexo 2

@@ -460,16 +457,16 @@

PRNG: seguridad

-
+
Cifrado de flujo
  • Distribución uniforme: debe tender a tener el mismo número de 1's que de 0's, tender al mismo número de 00's, que de 01's, 10's...
  • -
  • Despúes de nn un atacante no debe poder predecir el n+1n+1
  • +
  • Despúes de un atacante no debe poder predecir el

Con la semilla (la clave), la secuencia queda determinada en su totalidad, que es lo que nos interesa.

-
+
Cifrado de flujo

La seguridad del cifrado depende del generador PRNG utilizado...

@@ -478,73 +475,64 @@

PRNG: seguridad

Lorenz SZ fue una máquina alemana de cifrado de flujo, rota porque un operador envió dos mensajes diferentes seguidos sin cambiar la clave.

-
+
Cifrado de flujo
-

Cifrado de flujo: algoritmo

+

Cifrado de flujo: algoritmo

center

En las próximas transparencias, exploraremos cómo podemos diseñar un cifrado de flujo a partir de un PRNG, y cómo la solución más obvia... no funciona

-
+
Cifrado de flujo
-

Intento 1

+

Intento 1

Supongamos que tenemos una función PRNG, y usamos una clave k como semilla del PRNG para cifrar un flujo de datos en una conexión

-

Si ciframos dos mensajes cifrados c1c_1 y c2c_2 con la misma clave (semilla), un atacante puede hacer:

-

c1c2=(kgm1)(kgm2)=kgm1kgm2=kgkgm1m2=(kgkg)(m1m2)=({000000})(m1m2)=m1m2\begin{aligned} -c_1 \oplus c_2 &= (k_{\text{g}} \oplus m_1) \oplus (k_{\text{g}} \oplus m_2) \\ - &= k_{\text{g}} \oplus m_1 \oplus k_{\text{g}} \oplus m_2 \\ - &= k_{\text{g}} \oplus k_{\text{g}} \oplus m_1 \oplus m_2 \\ - &= (k_{\text{g}} \oplus k_{\text{g}}) \oplus (m_1 \oplus m_2) \\ - &= (\{000\cdots000\}) \oplus (m_1 \oplus m_2) \\ - &= m_1 \oplus m_2 -\end{aligned} -

¡Un atacante puede hacer XOR de los dos textos cifrados y obtener el XOR de los textos en claro!

+

Si ciframos dos mensajes cifrados y con la misma clave (semilla), un atacante puede hacer:

+

¡Un atacante puede hacer XOR de los dos textos cifrados y obtener el XOR de los textos en claro!

Nunca hay que usar la misma clave (ni generada) con dos mensajes diferentes

Información adicional: Chosen plaintext attacks

-
+
Cifrado de flujo
-

Intento 2

+

Intento 2

Cambiamos la clave (la semilla del PRNG) en cada transmisión

Esto es correcto pero costoso, y volvemos a los problemas de la confidencilidad perfecta: cómo distribuimos una clave diferente para cada mensaje

-
+
Cifrado de flujo
-

Intento 3

+

Intento 3

Generar variaciones de las claves en cada transmisión

-

Supongamos que la semilla no es directamente la clave, sino una función de la clave y otro parámetro rr

-

kgenerada=PRNG(f(k,r))k_{generada} = PRNG(f(k, r)) -

Y rr lo enviamos con cada transmisión: c=crc' = c \| r

+

Supongamos que la semilla no es directamente la clave, sino una función de la clave y otro parámetro

+

Y lo enviamos con cada transmisión:

Ahora la semilla "es diferente" con cada tranmisión

-

Pero tenemos que asumir que un atacante conoce rr porque monitoriza nuestras comunicaciones

+

Pero tenemos que asumir que un atacante conoce porque monitoriza nuestras comunicaciones

-
+
Cifrado de flujo
-

Nonce: number used only once

+

Nonce: number used only once

Curiosamente: ¡esto es correcto!: reservar algunos bits de la clave para un contador:

SESAMO_1, SESAMO_2, SESAMO_3...

Este elemento se conoce como nonce y forma parte de muchos algoritmos criptográficos

-
+
Cifrado de flujo
-

Seguridad de los algoritmos de flujo

-

Debemos generar un rr (nonce) diferente para cada mensaje

+

Seguridad de los algoritmos de flujo

+

Debemos generar un (nonce) diferente para cada mensaje

Si tenemos una comunicación bidireccional como HTTPS (TLS) hace falta:

  • o bien generar un nonce diferente para cada sentido
  • -
  • o bien generar una clave kk diferente para cada sentido
  • +
  • o bien generar una clave diferente para cada sentido
  • o ambas, que es lo mejor
-
+
Cifrado de flujo

El cifrado de flujo es tan seguro como:

    @@ -553,22 +541,22 @@

    Seguridad de los algoritmos de flujo

  • Que se cumplan las hipótesis de uso:
    • clave diferente en cada comunicación
    • -
    • nonce y kk escogidos totalmente el azar.
    • +
    • nonce y escogidos totalmente el azar.
-
+
Cifrado de flujo
-

Ejemplos

+

Ejemplos

  • RC4 (histórico): obsoleto
  • ChaCha: derivado del Salsa20 y probablemente la única alternativa al AES en TLS 1.3
      -
    • k=256 bits\|k\|=256\ bits
    • -
    • nonce=64 bits\|nonce\|=64\ bits
    • +
    • +
@@ -576,7 +564,7 @@

Ejemplos

ChaCha es el algoritmo de cifrado simétrico de flujo más usado

-
+
Cifrado de flujo

Un comentario rápido sobre RC4/ARC4/RCFOUR:

    @@ -589,14 +577,14 @@

    Ejemplos

-
+
ChaCha20
-

ChaCha20

+

ChaCha20

-
+
ChaCha20
-

ChaCha20: características

+

ChaCha20: características

Basado en Salsa20 (2017), de Daniel J. Bernstein

ChaCha20 (RFC 8439, 2018), es la variante estandarizada

Cifrado simétrico de flujos de bytes. Claves de 256 bits.

@@ -608,10 +596,10 @@

ChaCha20: características

-
+
ChaCha20
-

Cifrado con Python

-
import json
+

Cifrado con Python

+
import json
 from base64 import b64encode
 from Crypto.Cipher import ChaCha20
 from Crypto.Random import get_random_bytes
@@ -629,20 +617,20 @@ 

Cifrado con Python

# Mensaje {"nonce": "IZScZh28fDo=", "ciphertext": "ZatgU1f30WDHriaN8ts="} -
+ -
+
ChaCha20
-

(inciso: Base64 no es un cifrado)

+

(inciso: Base64 no es un cifrado)

Base64 se utiliza para representar información binaria como cadena imprimible

-
> echo '¡Qué tal estás!' | base64
+
> echo '¡Qué tal estás!' | base64
 wqFRdcOpIHRhbCBlc3TDoXMhCg==
 > dd count=1 bs=16 if=/dev/random 2>/dev/null 
 ???n??????;N%  
 > dd count=1 bs=16 if=/dev/random 2>/dev/null | base64
 D87WM0+4j5vYzLpHhJFMTA==
-
+

Base64 NO ES UN CIFRADO. Es una CODIFICACIÓN para representar cadenas binarias como texto. A veces se usa también para representar texto (ej: correos electrónicos) y ahorrar problemas con letras acentuadas.

Recuerda:

    @@ -651,10 +639,10 @@

    (inciso: Base64 no es un cifrado)

-
+
ChaCha20
-

Descifrado con Python

-
# La clave key se ontiene por canal seguro
+

Descifrado con Python

+
# La clave key se ontiene por canal seguro
 # el receptor recibe el mensaje anterior {nonce, ciphertext}
 nonce = b64decode(received['nonce'])
 ciphertext = b64decode(received['ciphertext'])
@@ -662,18 +650,18 @@ 

Descifrado con Python

cipher = ChaCha20.new(key=key, nonce=nonce) plaintext = cipher.decrypt(ciphertext) print("The message was " + plaintext) -
+ -
+
ChaCha20
-

Diagrama de flujo

+

Diagrama de flujo

center

-
+
ChaCha20
-

Estado inicial

+

Estado inicial

@@ -714,40 +702,40 @@

Estado inicial

  • Matriz 4x4 de 16 palabras de 32 bits
  • Key: 256 bits
  • -
  • Pos: contador de 0 hasta 2642^{64} Es decir, 64 bits (en la RFC, 32 bits)
  • +
  • Pos: contador de 0 hasta Es decir, 64 bits (en la RFC, 32 bits)
  • Nonce: valor aleatorio de 64 bits (en la RFC, 96 bits)
  • "expand 32-byte k" = 0x657870616e642033322d62797465206b es un número "no llevo nada en la manga"
-
+
ChaCha20
-

Función quarter round QR

+

Función quarter round QR

Aplicada sobre 4 palabras de 32 bits, las difunde:

-
QR(a, b, c, d)
+
QR(a, b, c, d)
 a += b; d ^= a; d <<<= 16;
 c += d; b ^= c; b <<<= 12;
 a += b; d ^= a; d <<<= 8;
 c += d; b ^= c; b <<<= 7;
-
+

Solo tiene sumas, rotaciones y XOR: es una función ARX, que impide ataques de canal lateral por timing.

-
+
ChaCha20
-
#define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b))))
-#define QR(a, b, c, d) (			\
+
#define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b))))
+#define QR(a, b, c, d) (			\
 	a += b,  d ^= a,  d = ROTL(d,16),	\
 	c += d,  b ^= c,  b = ROTL(b,12),	\
 	a += b,  d ^= a,  d = ROTL(d, 8),	\
 	c += d,  b ^= c,  b = ROTL(b, 7))
-#define ROUNDS 20
+#define ROUNDS 20
  
-void chacha_block(uint32_t out[16], uint32_t const in[16])
-{
-	int i;
-	uint32_t x[16];
+void chacha_block(uint32_t out[16], uint32_t const in[16])
+{
+	int i;
+	uint32_t x[16];
 
 	for (i = 0; i < 16; ++i)	
 		x[i] = in[i];
@@ -767,15 +755,15 @@ 

Función quarter round QR

for (i = 0; i < 16; ++i) out[i] = x[i] + in[i]; } -
+

Fuente: Wikipedia)

-
+
ChaCha20
-

Variantes

+

Variantes

... la comunidad aún no está segura de cómo usarlo ...

@@ -812,99 +800,78 @@

Variantes

-
+
ChaCha20
-

Vulnerabilidades

+

Vulnerabilidades

Ninguna conocida, siempre que se cumplan las condiciones de uso: no se puede repetir clave y nonce.

-
+
Cifrado de bloque
-

Cifrado de bloque

+

Cifrado de bloque

-
+
Cifrado de bloque

El cifrado de bloque es lo que hacía el cifrado Vignère: cortar el texto en claro en bloques de la misma longitud de la clave y cifrar cada uno de los bloques

-

Si tenemos mensajes más largos que nn deberemos de segmentarlos en bloques de tamaño nn

+

Si tenemos mensajes más largos que deberemos de segmentarlos en bloques de tamaño

center

El cifrado de bloque es el más utilizado con el cifrado simétrico: es rápido y no necesita exigentes o lentos algoritmos PRNG.

El cifrado de bloque se suele definir como una serie de permutaciones.

-
+
Cifrado de bloque
-

Permutaciones (P)

+

Permutaciones (P)

center

Una permutación es una función biyectiva de un conjunto sobre sí mismo

-

X={a,b,c}f:XXX = \{ a,b,c \} \\ -f : X \rightarrow X -

+

-
+
Cifrado de bloque
-

Podemos representar el cifrado de bloque de tamaño nn con una permutación ff, que es la clave de cifrado.

-

f:XXf : X\rightarrow X -

Donde XX es el conjunto de posibles bloques tanto de texto en claro como de texto cifrado

-

La función de descifrado como su inversa f1f^{-1}

-

f1:XXf^{-1} : X\rightarrow X -

Es decir:

-

c=e(k,m)=f(m)m=d(k,c)=f1(c)\begin{aligned} - c &= e(k, m) = f(m) \\ - m &= d(k, c) = f^{-1}(c) -\end{aligned} -

-
-
+

Podemos representar el cifrado de bloque de tamaño con una permutación , que es la clave de cifrado.

+

Donde es el conjunto de posibles bloques tanto de texto en claro como de texto cifrado

+

La función de descifrado como su inversa

+

Es decir:

+

+
+
Cifrado de bloque
-

Permutación aleatoria (RP)

-

La permutación se puede ver como una tabla de 2n2^n entradas, con nn el tamaño de bloque

-

f:XXf : X\rightarrow X -

f:{0,1}n{0,1}nf : \{0,1\}^n\rightarrow \{0,1\}^n -

000000000101001100000001110001100000001001010100...00000000 \rightarrow 01010011\\ -00000001 \rightarrow 11000110\\ -00000010 \rightarrow 01010100\\ -... -

Estas 2n2^n entradas de longitud nn las deberemos escoger de forma aleatoria de forma que no podremos conocer ff sin conocer la tabla

- -
-
+

Permutación aleatoria (RP)

+

La permutación se puede ver como una tabla de entradas, con el tamaño de bloque

+

Estas entradas de longitud las deberemos escoger de forma aleatoria de forma que no podremos conocer sin conocer la tabla

+ +
+
Cifrado de bloque
-

En realidad para que el cifrado sea seguro necesitaremos una "familia" de funciones equivalentes pero diferentes. Las indexaremos en función de la clave, kk

-

fk:XXfk:{0,1}n{0,1}n\begin{aligned} -f_k &: X \rightarrow X \\ -f_k &: \{0,1\}^n \rightarrow \{0,1\}^n -\end{aligned}

O también, podemos redefinir ff y añadirle kk como parámetro:

-

f:K×XXf:{0,1}k×{0,1}n{0,1}n\begin{aligned} -f &: K \times X \rightarrow X \\ -f &: \{0,1\}^{\|k\|} \times \{0,1\}^n \rightarrow \{0,1\}^n -\end{aligned}

donde KK es el espacio de claves kk, es decir, el conjunto de claves

- -
-
+

En realidad para que el cifrado sea seguro necesitaremos una "familia" de funciones equivalentes pero diferentes. Las indexaremos en función de la clave,

+

O también, podemos redefinir y añadirle como parámetro:

+

donde es el espacio de claves , es decir, el conjunto de claves

+ +
+
Cifrado de bloque
-

Por ejemplo, para DES que tiene un tamaño de bloque de n=64n=64 bits

+

Por ejemplo, para DES que tiene un tamaño de bloque de bits

hace falta guardar:

-

64264b=270b=267B=227TB64·2^{64} b=2^{70} b=2^{67} B=2^{27} TB -

... para cada una de las posibles claves kk

+

... para cada una de las posibles claves

Obviamente no es factible implementar los cifrados modernos directamente con una tabla indexada.

-
+
Cifrado de bloque
-

Permutación pseudoaleatoria (PRP)

-

Igual que para el cifrado de flujo nos hacía falta un flujo de bits aparentemente aleatorio para quien no tuviera la semilla (la clave kk)...

+

Permutación pseudoaleatoria (PRP)

+

Igual que para el cifrado de flujo nos hacía falta un flujo de bits aparentemente aleatorio para quien no tuviera la semilla (la clave )...

...para cifrado de bloque utilizaremos permutaciones pseudoaleatorias (PRP, Pseudo Random Permutation) en las que la permutación será aparentemente aleatoria para alguien que no conozca la clave

Esto nos permitirá realizar cifrados de bloque factibles, intercambiando una cantidad inmensa de memoria por una computación abordable

Como en el caso de PRNG, hace falta que las PRP sean indistinguibles de las RP

-

Además, hace falta que tanto fkf_k como f1kf`{−1}_k se puedan calcular de forma eficiente

+

Además, hace falta que tanto como se puedan calcular de forma eficiente

-
+
Cifrado de bloque
-

Construcción de cifrados de bloque

+

Construcción de cifrados de bloque

Hay dos clases de cifrado de bloque. Es decir, dos maneras de implementar PRP:

  • cifrado de sustitución: monoalfabéticos y polialfabéticos
  • @@ -912,132 +879,117 @@

    Construcción de cifrados de bloque

Fijate: igual que los cifrados clásicos.

Por si solas, las 2 clases básicas de cifrado de bloque son inseguras pero combinándolas podemos obtener seguridad creciente.

-

A partir de ahora utilizaremos e()e() y d()d() en lugar de las ff y f1f^{−1} utilizadas hasta ahora

+

A partir de ahora utilizaremos y en lugar de las y utilizadas hasta ahora

-
+
Cifrado de bloque
-

Sustitución polialfabética

+

Sustitución polialfabética

-

Para un bloque de longitud tt elementos, usamos tt permutaciones diferentes.

+

Para un bloque de longitud elementos, usamos permutaciones diferentes.

- + - - + + - - + + - - + + - - + +
mc =e(k,m)=e(k, m)c
pos1pos_1fa(pos1)f_a(pos_1)
pos2pos_2fb(pos2)f_b(pos_2)
pos3pos_3fc(pos3)f_c(pos_3)
pos4pos_4fd(pos4)f_d(pos_4)

Igual que en Vigenère, podríamos recuperar el texto con análisis frecuencial

-
+
Cifrado de bloque
-

Transposición

-

Para un bloque de longitud tt elementos, intercambiamos los elementos entre sí.

+

Transposición

+

Para un bloque de longitud elementos, intercambiamos los elementos entre sí.

- + - - + + - - + + - - + + - - + +
mc =e(k,m)=e(k, m)c
pos1pos_1pos2pos_2
pos2pos_2pos4pos_4
pos3pos_3pos3pos_3
pos4pos_4pos1pos_1

No solo la frecuencia de los símbolos de entrada se mantiene, si no que los propios símbolos se mantiene (aunque en posiciones diferentes)

-
+
Cifrado de bloque
-

Composición

-

Si componemos el cifrado total como una serie de nn cifrados de bloque, podemos escribir:

-

c1=e1(k1,m)c2=e2(k2,c1)...cn=en(kn,cn1)\begin{aligned} -c_1 &= e_1(k_1, m)\\ -c_2 &= e_2(k_2, c_1)\\ -...\\ -c_n &= e_n(k_n, c_{n-1})\\ -\end{aligned} -

Cada clave kik_i podría ser independiente, pero habitalmente se genera mediante un proceso llamado expansión de clave

-

kPRNG{k1,k2,,kn}k \xrightarrow{\text{PRNG}} \{k_1, k_2, \dotsc, k_n\} -

-
-
+

Composición

+

Si componemos el cifrado total como una serie de cifrados de bloque, podemos escribir:

+

Cada clave podría ser independiente, pero habitalmente se genera mediante un proceso llamado expansión de clave

+

+
+
Cifrado de bloque
  • Substitución: da confusión, que permite dificultar la obtención de la clave a partir del texto cifrado.
  • Transposición: da difusión, que permite difundir las redundancias del texto en claro, de forma que no aparezca en el cifrado.

Etapas o rounds: los cifrados de sustitución y transposición se agrupan en parejas y se aplican varias veces (con diferentes claves) hasta obtener un cifrado seguro

-

ci=ei(ki,ci1)c_i = e_i(k_i, c_{i-1}) -

El objetivo de la criptografía moderna es maximizar la difusión y la confusión (según Shannon)

+

El objetivo de la criptografía moderna es maximizar la difusión y la confusión (según Shannon)

-
+
Cifrado de bloque
-

Cifrado TES / 3DES

+

Cifrado TES / 3DES

Unas palabras sobre TDES (NIST SP 800-67, 2017)

-

c=DES(k3,DES(k2,DES(k1,m)))c = DES(k_3, DES'(k_2, DES(k_1, m))) -

    -
  • DES tiene claves de 56 bits, pero al aplicarlo tres veces subimos la longitud de la clave hasta que alcanzamos una fortaleza válida de 112 bits (nota que no es 3523*52 bits: ataque Meet in the middle)
  • +

      +
    • DES tiene claves de 56 bits, pero al aplicarlo tres veces subimos la longitud de la clave hasta que alcanzamos una fortaleza válida de 112 bits (nota que no es bits: ataque Meet in the middle)
    • Claves más cortas, y por tanto más débil que AES
    • Se usa poder aprovechar todo el hardware DES que ya existía desde 1976
-
+
AES
-

Cifrado AES

+

Cifrado AES

-
+
AES
-

Advanced Encryption Standard (AES)

+

Advanced Encryption Standard (AES)

Desarrollado por Vincent Rijmen y Joan Daemen (aka: Rijndael), que ganaron el concurso celebrado por el NIST para sustituir a DES en 2001.

AES (FIPS 197, 2001) es un cifrado de bloque:

    @@ -1050,96 +1002,96 @@

    Advanced Encryption Standard (AES)

-
+
AES
-

Algoritmo

+

Algoritmo

Parte de una matriz de estado que se va modificando durante 10, 12 o 14 rondas según sea el tamaño de clave. Inicialmente: la matriz de estado es el texto en claro.

  1. KeyExpansion: se derivan round keys a partir de la clave de cifrado usando el algoritmo AES key schedule. Necesarias: una por etapa, y una más.
  2. -
  3. AddRoundKey: bloquekibloque \otimes k_i
  4. +
  5. AddRoundKey:
  6. Cada etapa:
    • SubBytes: sustitución de bytes en función de una tabla fija de 256 entradas
    • ShiftRows: transposición de bytes fija
    • MixColumns: 4 multiplicaciones modulares de 4 Bytes, valores fijos
    • -
    • AddRoundKey: bloquekibloque \otimes k_i (subclave kik_i )
    • +
    • AddRoundKey: (subclave )
-
+
AES

center

-
+
AES
-

SubBytes

+

SubBytes

center Wikipedia

"sustitución de bytes en función de una tabla fija de 256 entradas"

-
+
AES
-

ShiftRows

+

ShiftRows

center Wikipedia

"transposición de bytes fija"

-
+
AES
-

MixColumns

+

MixColumns

center Wikipedia

"4 multiplicaciones modulares de 4 Byte, valores fijos"

-
+
AES
-

AddRoundKey

+

AddRoundKey

center Wikipedia

-

"bloqueki\text{bloque} \oplus k_{i} (subclave kik_{i})"

+

" (subclave )"

-
+
AES
-

Expansión de clave

-

Cada una de las etapas (rounds) utiliza una subclave kik_i diferente

-

Cada una de les subclaves kik_i se deriva de la clave kk

-

Nota 1: las subclaves se aplican (\otimes) "alrededor" de las etapas por tanto hace falta una subclave más que etapas hay (11|13|15)

+

Expansión de clave

+

Cada una de las etapas (rounds) utiliza una subclave diferente

+

Cada una de les subclaves se deriva de la clave

+

Nota 1: las subclaves se aplican () "alrededor" de las etapas por tanto hace falta una subclave más que etapas hay (11|13|15)

Nota 2: hacen falta más etapas en los AES de clave larga para "aplicar" el mayor espacio de claves sobre el mensaje en claro

-
+
AES

center

-
+
AES
-

Vulnerabilidades

+

Vulnerabilidades

La estadística del mensaje en claro aparece en el texto cifrado.

Ahora los bloques son de 16 B, no de 1 B por tanto la estadística es menos importante
-(|bloque|=21282^{128}), pero en secuencias constantes (por ejemplo, como las de un gráfico) se pueden dar bloques enteros idénticos

+(|bloque|=), pero en secuencias constantes (por ejemplo, como las de un gráfico) se pueden dar bloques enteros idénticos

center

-
+
AES

Un cifrado debe parecerse a esto:

center

-
+
AES
-

Modos de operación

+

Modos de operación

Esta "vulnerabilidad" es una propiedad de todos los cifrados de bloque

La contramedida es la misma para todos: no cifrar nunca bloque a bloque, sino cifrar parte del bloque anterior en el bloque actual.

Este encadenamiento se denomina modo de operación y no es opcional

-
+
AES

Si acumulamos estado durante el cifrado, podemos utilizar este estado sobre el cifrado del siguiente bloque:

    @@ -1150,29 +1102,29 @@

    Modos de operación

  • CBC: Cipher Block Chaining
      -
    • el bloque i1i−1 se aplica \otimes sobre el bloque en claro ii
    • +
    • el bloque se aplica sobre el bloque en claro
  • OFB: Output Feedback
      -
    • cifras el cifrado anterior, y el resultado \otimes del mensaje en claro
    • +
    • cifras el cifrado anterior, y el resultado del mensaje en claro
  • CTR: Counter
      -
    • cifras un contador, y el resultado \otimes del mensaje en claro
    • +
    • cifras un contador, y el resultado del mensaje en claro
-
+
AES
-

ECB: Electronic Code-Book

+

ECB: Electronic Code-Book

center Wikipedia

-
+
AES

Fallo obvio: está usando la misma clave para cifrar mensajes diferentes.

@@ -1181,40 +1133,40 @@

ECB: Electronic Code-Book

No se puede usar AES en modo ECB

-
+
AES
-

CBC: Cipher Block Chaining

+

CBC: Cipher Block Chaining

center Wikipedia

-
+
AES
-

OFB: Output Feedback

+

OFB: Output Feedback

center Wikipedia

-
+
AES
-

CTR: Counter

+

CTR: Counter

center Wikipedia

-
+
AES
-

Vector de Inicialización (IV)

+

Vector de Inicialización (IV)

Los distintos encadenados requieren de una semilla inicial para empezar el encadenado: vector de inicialización (IV), que cumple la misma función que un nonce.

-

Esto hace que en lugar de transmitir nn bloques como en ECB, haga falta transmitir n+1n+1

+

Esto hace que en lugar de transmitir bloques como en ECB, haga falta transmitir

    -
  • IV en CBC: es el hipotético bloque cifrado 1−1
  • -
  • IV en OFB: es el bloque que se cifra constantmente e(e(e(...e(IV))))e(e(e(...e(IV)))) y se aplica sobre los bloques en claro (con \otimes)
  • -
  • IV en CTR: es el valor inicial del contador que se cifra ECB, y se aplica sobre los bloques en claro (con \otimes)
  • +
  • IV en CBC: es el hipotético bloque cifrado
  • +
  • IV en OFB: es el bloque que se cifra constantmente y se aplica sobre los bloques en claro (con )
  • +
  • IV en CTR: es el valor inicial del contador que se cifra ECB, y se aplica sobre los bloques en claro (con )
-

AES_128_CTR es efectivamente un cifrado de flujo, siendo kk la semilla, y el IV el nonce

+

AES_128_CTR es efectivamente un cifrado de flujo, siendo la semilla, y el IV el nonce

-
+
AES
-

Otros modos

+

Otros modos

AES puede usarse también con "modos autenticados":

  • OCB
  • @@ -1226,21 +1178,21 @@

    Otros modos

-
+
AES
-

Vulnerabilidades

+

Vulnerabilidades

Hay distintos ataques que permiten realizar búsquedas de forma más rápida que un ataque de fuerza bruta

  • AES-128/192/256: recuperación de clave en una quarta parte del tiempo que fuerza bruta. Se pierden 2 bits
  • -
  • AES-192/256: si las claves están relacionadas, complejidad 21192^{119}. Contramedida: claves aleatorias
  • -
  • el bloque de 128b limita el uso del cifrado hasta 2642^{64} bloques (268 B) a causa de la paradoja del cumpleaños. Contramedida: cambiar la clave cuando se haya usado para cifrar 2682^{68} bytes
  • +
  • AES-192/256: si las claves están relacionadas, complejidad . Contramedida: claves aleatorias
  • +
  • el bloque de 128b limita el uso del cifrado hasta bloques (268 B) a causa de la paradoja del cumpleaños. Contramedida: cambiar la clave cuando se haya usado para cifrar bytes

AES ha perdido fortaleza pero aún está aguantando.

-
+
AES
-

Rendimiento

+

Rendimiento

  • AES-128: 1,1 Gbps (seguridad 128 bit)
  • AES-192: 0,9 Gbps (seguridad 192 bit)
  • @@ -1253,9 +1205,9 @@

    Rendimiento

-
+
AES
-

Computación cuántica

+

Computación cuántica

  • los computadores cuánticos actuales no tienen aplicación práctica: a parte de romper claves sirven para simular... fenómenos de física cuántica
  • @@ -1265,12 +1217,12 @@

    Computación cuántica

    Se considera que la criptografía simétrica es robusta ante la computación cuántica

-
-

Resumen

+
+

Resumen

-
-

Conclusiones

+
+

Conclusiones

  • Confidencialidad computacional: hoy en día no es práctico romperla (en 30 años, quizá sí)
  • @@ -1296,8 +1248,8 @@

    Conclusiones

-
-

Referencias

+
+

Referencias

-
+

Ejercicios de profesor:

-
+

Continúa en: Teoría complejidad y acuerdo D-H

-
-

¡Gracias!

+
+

¡Gracias!

-

La confidencialidad es perfecta en cifrados tipo Vernam si la clave: - Es perfectamente aleatorio @@ -1413,5 +1365,5 @@

¡Gracias!

- el algoritmo de cifrado es diferente el algoritmo de descifrado. Se diseñó para optimizar el cifrado. - Hay una etapa de expación de clave: de una clave con un tamaño determinado sacamos "subclaves" para cada una de las etapas.

Añade **difusión**: los bits de salida dependerán de varios bits de entrada.

Aquí es donde entran las subclaves, diferentes en cada una de las etapas, y la operación XOR que finalmente cifra el bloque. El nuevo estado se pasa entonces a la siguiente etapa.

La autenticación es un servicio que aún no hemos visto, pero tenemos casi toda la segunda parte de la asignatura para ello. -Hasta ahora solo nos preocupábamos de mantener la información secreta, pero no hemos comprobado la identidad de la persona que está hablando. AES tiene algunos modos de uso avanzados que permiten también comprobar esta identidad. Pero aún necesitamos un poco de teoría.

\ No newline at end of file +Hasta ahora solo nos preocupábamos de mantener la información secreta, pero no hemos comprobado la identidad de la persona que está hablando. AES tiene algunos modos de uso avanzados que permiten también comprobar esta identidad. Pero aún necesitamos un poco de teoría.

\ No newline at end of file diff --git a/04-complejidad.html b/04-complejidad.html index a9f4fb7..70a9e5f 100644 --- a/04-complejidad.html +++ b/04-complejidad.html @@ -1,4 +1,4 @@ -Criptografía - Teoría de la complejidad y acuerdo Diffie-Hellman
-

Teoría de la complejidad y acuerdo Diffie-Hellman

+/* section footer { display: none; } */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Teoría de la complejidad y acuerdo Diffie-Hellman

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Como decíamos ayer...

+
+

Como decíamos ayer...

center

El cifrados de flujo y de bloque permiten enviar mensajes computacionalmente seguros

@@ -232,8 +232,8 @@

Como decíamos ayer...

¿Cómo conseguimos que las dos personas que no se han visto nunca tengan una clave secreta común?

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

  1. Teoría de la complejidad
  2. @@ -242,19 +242,19 @@

    Hoy hablamos de...

-
-

Teoría de la complejidad

+
+

Teoría de la complejidad

-
-

Teoría de la complejidad

+
+

Teoría de la complejidad

Ciencia que estudia cuánto tiempo le llevaría al algoritmo más rápido computacional posible para resolver un problema

Ojo: la teoría de la complejidad no dice cuál es ese algoritmo más rápido posible, simplemente calcula cuánto tiempo mínimo lleva resolver un problema

Aplicación en criptografía: dado un mensaje cifrado con cierto algoritmo ¿existe un algoritmo más rápido que con fuerza bruta... aunque aún no sepamos cuál?

-
-

¿Cuánto tiempo tardarías en resolver este sodoku?

+
+

¿Cuánto tiempo tardarías en resolver este sodoku?

center

    @@ -268,8 +268,8 @@

    ¿Cuánto tiempo tardarías en resolver este sodoku?

    "It might have a unique solution but it's not gonna be findable by a human being"

-
-

Mucho tiempo para resolver

+
+

Mucho tiempo para resolver

Hacer un algoritmo de fuerza bruta para un Sudoku es "sencillo": vamos comprobando números y, si funcionan, los dejamos

Eso se parece mucho a resolver por fuerza bruta un cifrado clásico

@@ -278,26 +278,26 @@

Mucho tiempo para resolver

Si al aumentar el tamaño de un problema el tiempo necesario para resolverlo sigue siendo "razonable", decimos que es un "problema P"

-
-

¿Cuánto tiempo tardarías en comprobar si ésta es la solución?

+
+

¿Cuánto tiempo tardarías en comprobar si ésta es la solución?

center

-
-

Mucho tiempo para resolver, poco para comprobar

+
+

Mucho tiempo para resolver, poco para comprobar

Existen algunos problemas que si aumenta el tamaño ya no podremos solucionarlos en un tiempo razonable

Pero si nos dan una solución, es muy rápido decidir si la solución correcta

Si lleva poco tiempo decidir si una solución es válida para un problema, decimos que es "un problema NP"

-
-

¿Cuánto tiempo tardas en colorear este mapa con 9 colores diferentes?

+
+

¿Cuánto tiempo tardas en colorear este mapa con 9 colores diferentes?

center

-
-

Transformación de problemas

+
+

Transformación de problemas

    @@ -308,8 +308,8 @@

    Transformación de problemas

    Si un problema NP se puede transformar en otro problema NP, entonces es un "problema NP-Completo"

-
-

Seguridad basada en problemas NP

+
+

Seguridad basada en problemas NP

A partir de ahora vamos a basar la seguridad en problemas:

  • Que el criptoanálisis sea NP y por tanto no razonable
  • @@ -325,8 +325,8 @@

    Seguridad basada en problemas NP

-
-

P = NP

+
+

P = NP

  • Un problema P es también un problema NP, pero...
  • @@ -342,8 +342,8 @@

    P = NP

-
-

Ejemplos de problemas NP

+
+

Ejemplos de problemas NP

  • Sodoku, Colorear mapas, El problema del viajante...
@@ -356,60 +356,60 @@

Ejemplos de problemas NP

-
-

"Mucho tiempo": una definición

+
+

"Mucho tiempo": una definición

Hemos hablado de "tiempos razonables", "rápidamente" y "mucho tiempo"

... ¿podemos formalizarlo?

-
-

Cota superior asintótica: notación "big-O"

-

Escribimos que un algoritmo es de complejidad O(g(n))O(g(n)) si el tiempo que lleva ejecutarlo cuando nn \rightarrow \infty es como máximo g(n)g(n)

-

Fíjate que g(n)g(n) también puede tender a infinito...

-

Lo importante es comparar las velocidades: ¿cómo crece el tiempo de ejecución cuando crece nn?

+
+

Cota superior asintótica: notación "big-O"

+

Escribimos que un algoritmo es de complejidad si el tiempo que lleva ejecutarlo cuando es como máximo

+

Fíjate que también puede tender a infinito...

+

Lo importante es comparar las velocidades: ¿cómo crece el tiempo de ejecución cuando crece ?

¿Linealmente? ¿Exponencialmente?

Fuente: https://en.wikipedia.org/wiki/Big_O_notation

-
+

center

Fuente: https://laptrinhx.com/time-complexity-and-big-o-529699432/

-
-

big-O en criptografía

-

En criptografía, nn es el tamaño de la clave en bits

-

Queremos algoritmos que el atacante necesite realizar O(2n)O(2^n) operaciones de fuerza bruta

-

Pero también queremos que, conociendo la clave, el descifrado solo necesite O(n)O(n) operaciones

-

Un algoritmo está roto si el atacante necesita muchas menos de O(2n)O(2^n) operaciones

+
+

big-O en criptografía

+

En criptografía, es el tamaño de la clave en bits

+

Queremos algoritmos que el atacante necesite realizar operaciones de fuerza bruta

+

Pero también queremos que, conociendo la clave, el descifrado solo necesite operaciones

+

Un algoritmo está roto si el atacante necesita muchas menos de operaciones

-
+

Ejemplo: si queremos aumentar la seguridad de un algoritmo, pasamos de una clave de 128 a 256 bits

    -
  • Cifrado O(n)O(n): ahora costará el doble descifrar con la nueva clave
  • -
  • Mejor ataque posible O(2n)O(2^n): al atacante le costará 2256/2128=310342^{256} / 2^{128} = 3 \cdot 10^{34} veces más encontrar la nueva clave
  • +
  • Cifrado : ahora costará el doble descifrar con la nueva clave
  • +
  • Mejor ataque posible : al atacante le costará veces más encontrar la nueva clave
-

Nota que no necesitamos conocer el ataque: si se demuestra que el mejor ataque es de orden O(2n)O(2^n), entonces el sistema es seguro aunque no conozcamos cómo es el ataque

+

Nota que no necesitamos conocer el ataque: si se demuestra que el mejor ataque es de orden , entonces el sistema es seguro aunque no conozcamos cómo es el ataque

-
+

Nota: las clases de problemas P, NP, NP-completo... en realidad se definen con notación big-O:

    -
  • P: problemas resolubles en tiempo exponencial O(2n)O(2^n)
  • -
  • NP: problemas comprobables en tiempo polinomial O(nk)O(n^k) para algún valor de kk.
  • +
  • P: problemas resolubles en tiempo exponencial
  • +
  • NP: problemas comprobables en tiempo polinomial para algún valor de .
-

Recuerda: un sistema es seguro computacionalmente si cualquier algoritmo probabilístico en tiempo polinomial solo puede romper el algoritmo con probabilidad negligible en n\|n\|

-

Es decir: un cifrado es seguro computacionalmente si el mejor ataque posible tiene complejidad O(nk)O(n^k), para cualquier kk

+

Recuerda: un sistema es seguro computacionalmente si cualquier algoritmo probabilístico en tiempo polinomial solo puede romper el algoritmo con probabilidad negligible en

+

Es decir: un cifrado es seguro computacionalmente si el mejor ataque posible tiene complejidad , para cualquier

(falta definir eso de "probabilidad negligible", pero no lo haremos en este curso)

-
-

Problemas útiles en criptografía

+
+

Problemas útiles en criptografía

  • Factorización en números primos
  • Logaritmo discreto
  • @@ -417,33 +417,27 @@

    Problemas útiles en criptografía

-
-

Ejemplo: factorización en números primos

-

15=5338=1923248=297248012012832918391238193192198219981928192889382938998982=?15 = 5 \cdot 3 \\ -38 = 19 \cdot 2 \\ -3248 = 29 \cdot 7 \cdot 2^4 \\ -8012012832918391238193192198219981928192889382938998982 = ? -

Es un problema NP y probablemente ni P ni NP-Completo

+
+

Ejemplo: factorización en números primos

+

Es un problema NP y probablemente ni P ni NP-Completo

El algoritno conocido más rápido es GNFS:

-

O(22,774(bn1/3)(ln(bn)2/3))O(2^{2,774·(b_n^{1/3})(ln(b_n)^{2/3})}) -

+

-
-

Logaritmo discreto

+
+

Logaritmo discreto

Problema NP y probablemente no es NP-completo

-

c=gmmodpc = g ^ m \mod p -

Si conoces cc, gg y pp...

-

Problema: encuentra mm

+

Si conoces , y ...

+

Problema: encuentra

-
-

p=17 g=5 c=4 m=?

+
center
+

p=17 g=5 c=4 m=?

- - + + @@ -484,8 +478,8 @@

p=17 g=5 c=4 m=?

mmc=5mmod17c = 5 ^ m \mod 17
- - + + @@ -525,29 +519,28 @@

p=17 g=5 c=4 m=?

mmc=5mmod17c = 5 ^ m \mod 17
-
-

Gupo cíclico

+
+

Gupo cíclico

La transparencia anterior muestra un ejemplo de grupo cíclico:

-

Zp={gmmodp}\Z_{p}^{*} = \{g^m \mod p\} -

    -
  • pp y gg tienen que ser primos relativos: no tienen factores comunes
  • -
  • Llamamos generador al número gg, y pp es el orden
  • -
  • Zp\Z_{p}^{*} contiene todos los números entre 1 y pp una sola vez
  • +

      +
    • y tienen que ser primos relativos: no tienen factores comunes
    • +
    • Llamamos generador al número , y es el orden
    • +
    • contiene todos los números entre 1 y una sola vez
    -

    El "aspecto" es el de una permutación pseudoaleatoria del cifrado de bloque, con mm el mensaje en claro y c=gmmodpc=g^m \mod p el cifrado

    -

    Dado un mensaje cifrado cZpc \in \Z_{p}^{*} y conocido gg y pp, decidir si el mensaje en claro mm' es el mensaje original es tan complejo como resolver el problema del logaritmo discreto.

    +

    El "aspecto" es el de una permutación pseudoaleatoria del cifrado de bloque, con el mensaje en claro y el cifrado

    +

    Dado un mensaje cifrado y conocido y , decidir si el mensaje en claro es el mensaje original es tan complejo como resolver el problema del logaritmo discreto.

    https://en.wikipedia.org/wiki/Cyclic_group

-
+
D-H
-

Acuerdo de clave Diffie-Hellman

+

Acuerdo de clave Diffie-Hellman

-
+
D-H

center

@@ -556,66 +549,66 @@

Acuerdo de clave Diffie-Hellman

¿Cómo conseguimos que las dos personas que no se han visto nunca tengan una clave secreta común?

-
+
D-H
-

Diffie-Hellman

+

Diffie-Hellman

Método de acuerdo de clave simétrica (RFC2631, 1999)

New Directions in Cryptography, Whitfield Diffie y Martin Hellman en 1976

Primer algoritmo de criptografía asimétrica conocido y base de muchos de ellos

Lo estamos utilizando constantemente

-
+
D-H
-

Hipótesis DDH (Decisional D-H)

+

Hipótesis DDH (Decisional D-H)

-

Zp\Z_{p}^{*} es grupo cíclico con el elemento generador gg y pp primo

-

Problema: dado ga,gbZpg^a, g^b \in \Z_{p}^{*}, ¿cuál es el valor de gabZpg^{ab} \in \Z_{p}^{*}?

-

Calcular gabg^{ab} a partir de ga,gbg^a, g^b es computacionalmente difícil: primero tendríamos que calcular bb a partir de gbg^b, y eso es el problema del logaritmo discreto

-

(Recuerda que gagb=ga+bg^a \cdot g^b = g^{a+b})

-

Pero si nos diesen aa ó bb: gab=(ga)b=(gb)ag^{ab} = (g^a)^b = (g^b)^a y es muy fácil de calcular

-

Que nos den aa ó bb se conoce como "trampa" o "trapdoor". Sin conocer la trampa, el problema se considera muy difícil computacionalmente

+

es grupo cíclico con el elemento generador y primo

+

Problema: dado , ¿cuál es el valor de ?

+

Calcular a partir de es computacionalmente difícil: primero tendríamos que calcular a partir de , y eso es el problema del logaritmo discreto

+

(Recuerda que )

+

Pero si nos diesen ó : y es muy fácil de calcular

+

Que nos den ó se conoce como "trampa" o "trapdoor". Sin conocer la trampa, el problema se considera muy difícil computacionalmente

-
+
D-H
-

Vamos a diseñar un protocolo entre Alice y Bob para que usen la clave k=gabk=g^{ab}:

+

Vamos a diseñar un protocolo entre Alice y Bob para que usen la clave :

    -
  • El atacante solo conoce gag^a y gbg^b: problema difícil
  • -
  • Pero Alice y Bob conocen también aa ó bb: problema fácil
  • +
  • El atacante solo conoce y : problema difícil
  • +
  • Pero Alice y Bob conocen también ó : problema fácil
-

Se asume que gabg^{ab} es computacionalmente difícil de calcular para el atacante al ser equivalente al problema del logaritmo discreto. En 50 años no hemos encontrado una forma rápida (es decir, polinomial O(nk)O(n^k)) de hacer este cálculo sin conocer previamente aa ó bb

+

Se asume que es computacionalmente difícil de calcular para el atacante al ser equivalente al problema del logaritmo discreto. En 50 años no hemos encontrado una forma rápida (es decir, polinomial ) de hacer este cálculo sin conocer previamente ó

Si lo necesitas, consulta la definición de Alice y Bob en el glosario

-
+
D-H
-

Protocolo

+

Protocolo

-

Dos usuarios AliceAlice y BobBob que no se han visto nunca:

+

Dos usuarios y que no se han visto nunca:

    -
  1. Acuerdan gg y pp primos entre sí
  2. -
  3. Escogen números en secreto aa y bb
  4. +
  5. Acuerdan y primos entre sí
  6. +
  7. Escogen números en secreto y
  8. Se envían entre ellos:
      -
    • AliceBob:A=gamodpAlice \rightarrow Bob: A=g^{a} \mod p
    • -
    • BobAlice:B=gbmodpBob \rightarrow Alice: B=g^{b} \mod p
    • +
    • +
  9. Calculan en secreto:
      -
    • AliceAlice: k=Bamodp=gabmodpk = B^{a} \mod p = g^{ab} \mod p
    • -
    • BobBob: k=Abmodp=gabmodpk = A^{b} \mod p = g^{ab} \mod p
    • +
    • :
    • +
    • :
  10. -
  11. Y usan kk como clave de cifrado un algoritmo simétrico
  12. +
  13. Y usan como clave de cifrado un algoritmo simétrico
-
+
D-H

center

@@ -623,26 +616,26 @@

Protocolo

-
+
D-H

Ejemplo sencillo:

center

-

Aunque un atacante conozca g=7g=7, p=23p=23, A=21A=21 y B=4B=4, no podría calcular KK más que por fuerza bruta. En cambio, Alice y Bob han podido calcular KK muy fácilmente

+

Aunque un atacante conozca , , y , no podría calcular más que por fuerza bruta. En cambio, Alice y Bob han podido calcular muy fácilmente

-
+
D-H
-

Claves secretas y claves públicas

+

Claves secretas y claves públicas

    -
  • Alice y Bob acuerdan gg y pp primos entre sí por canales que no son seguros. El atacante conoce gg y pp
  • -
  • Cuando Alice y Bob se intercambian gag^{a} y gbg^{b}, el canal aún no es seguro. El atacante conoce gag^a y gbg^b
  • -
  • aa y bb nunca salen de los ordenadores de Alice ni Bob, nunca se intercambian. El atacante no los conoce, Bob no conoce aa y Alice no conoce bb
  • +
  • Alice y Bob acuerdan y primos entre sí por canales que no son seguros. El atacante conoce y
  • +
  • Cuando Alice y Bob se intercambian y , el canal aún no es seguro. El atacante conoce y
  • +
  • y nunca salen de los ordenadores de Alice ni Bob, nunca se intercambian. El atacante no los conoce, Bob no conoce y Alice no conoce
-

Dado que el atacante (o cualquiera) conoce gg, pp, gag^a y gbg^b, esta información es pública

-

aa y bb es información privada y solo conocida por Alice y Bob, respectivamente

+

Dado que el atacante (o cualquiera) conoce , , y , esta información es pública

+

y es información privada y solo conocida por Alice y Bob, respectivamente

-
+
D-H
@@ -657,48 +650,48 @@

Claves secretas y claves públicas

- - - + + + - - + + - - - + + + - - + +
1gg, ppgg, ppgg, pp, , ,
2aa, gag^abb, gbg^b, ,
3gbg^bgag^agag^a, gbg^b,
4gabg^{ab}gabg^{ab}
-

Recuerda hipótesis DDH: gabg^{ab} solo se puede calcular fácilmente si conoces o bien aa o bien bb, pero no se puede calcular fácilmente si conoces solo gag^a y gbg^b

-

Alice y Bob, que no se habían visto nunca antes, puede utilizar k=gabk=g^{ab} como clave de un cifrado simétrico de flujo o bloque como ChaCha20 ó AES

+

Recuerda hipótesis DDH: solo se puede calcular fácilmente si conoces o bien o bien , pero no se puede calcular fácilmente si conoces solo y

+

Alice y Bob, que no se habían visto nunca antes, puede utilizar como clave de un cifrado simétrico de flujo o bloque como ChaCha20 ó AES

-
+
D-H

Llamamos:

  • Claves de Alice:
      -
    • Clave pública: {g,p,ga}\{g, p, g^a\}
    • -
    • Clave privada: aa
    • +
    • Clave pública:
    • +
    • Clave privada:
  • Claves de Bob:
      -
    • Clave pública: {g,p,gb}\{g, p, g^b\}
    • -
    • Clave privada: bb
    • +
    • Clave pública:
    • +
    • Clave privada:
@@ -706,31 +699,31 @@

Claves secretas y claves públicas

... pero quedaos con el concepto, que lo usaremos dentro de poco

-
+
D-H
-

Selección de parámetros

-

D-H tiene cuatro parámetros: los secretos aa, bb y los públicos gg, pp

-

"Paso 1: Alice y Bob acuerdan gg y pp primos entre sí"

+

Selección de parámetros

+

D-H tiene cuatro parámetros: los secretos , y los públicos ,

+

"Paso 1: Alice y Bob acuerdan y primos entre sí"

La seguridad del algoritmo depende de que estos números estén bien escogidos

    -
  • Si no son primos entre sí o si pp no es primo, es más fácil calcular gabg^{ab}
  • -
  • Si p1p-1 no cumple algunas propiedades, existen algoritmos que pueden calcular gabg^{ab}
  • -
  • Si pp no es lo suficientemente grande, se puede romper por fuerza bruta
  • -
  • gg tiene que ser generador de Zp\Z^*_p
  • +
  • Si no son primos entre sí o si no es primo, es más fácil calcular
  • +
  • Si no cumple algunas propiedades, existen algoritmos que pueden calcular
  • +
  • Si no es lo suficientemente grande, se puede romper por fuerza bruta
  • +
  • tiene que ser generador de
-

¡Estas son muchas condiciones! ¿Cómo podemos escoger gg y pp bien?

+

¡Estas son muchas condiciones! ¿Cómo podemos escoger y bien?

-
+
D-H

Afortunadamente no tenemos que escogerlos:

    -
  • gg puede ser un número bajo. Normalmente, g=2g=2
  • -
  • pp se puede reutilizar cuantas veces sean necesarias, así que se suele sacar de tablas públicas (RFC7919, 2016)
  • +
  • puede ser un número bajo. Normalmente,
  • +
  • se puede reutilizar cuantas veces sean necesarias, así que se suele sacar de tablas públicas (RFC7919, 2016)

Ejemplo real:

-
p = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A6
+
p = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A6
 7CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F
 14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B
 7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF
@@ -743,18 +736,18 @@ 

Selección de parámetros

02733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24 FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF g = 2 -
+

Fuente: https://github.com/amiralis/pyDH/blob/master/pyDH/pyDH.py

-
+
D-H
-

D-H efímero / DH Ephemeral

+

D-H efímero / DH Ephemeral

  • -

    aa y bb se tienen que calcular en secreto

    +

    y se tienen que calcular en secreto

  • no tienen ninguna restricción especial: el cálculo de las claves públicas y privadas para D-H es muy rápido

    @@ -771,20 +764,20 @@

    D-H efímero / DH Ephemeral

-
+
D-H
-

Debilidades

+

Debilidades

¿Qué sucede si Malloy se pone en medio de un D-H?

center

Alice y Bob están hablando en secreto... con el atacante

-
+
D-H
-

D-H necesita claves mucho más largas que AES: pp tiene que ser primo, y los primos están separados entre sí

-

Para acordar claves AES (que podemos aprovechar todos los números, primos o no) necesitamos una clave D-H (la pp, que solo puede ser primo) de...

+

D-H necesita claves mucho más largas que AES: tiene que ser primo, y los primos están separados entre sí

+

Para acordar claves AES (que podemos aprovechar todos los números, primos o no) necesitamos una clave D-H (la , que solo puede ser primo) de...

@@ -803,18 +796,18 @@

Debilidades

-

¡No se suelen usar pp tan enormes!

-

NIST recomienda p>2048\|p\| > 2048 hasta 2030

-

Compara, para AES: k=128\|k\| = 128

+

¡No se suelen usar tan enormes!

+

NIST recomienda hasta 2030

+

Compara, para AES:

https://blog.cloudflare.com/why-are-some-keys-small/
https://www.keylength.com/en/3/

-
+
D-H
-

Composición de elementos criptográficos

+

Composición de elementos criptográficos

Acamos de ver una composición de elementos criptográficos: D-H y AES

  • Alice y Bob acuerdan una clave AES-256 utilizando DH-4096
  • @@ -823,14 +816,14 @@

    Composición de elementos criptográficos

    Esto es una introducción a TLS. En la última parte de la asignatura veremos este protocolo con mucho más detalle.

-
+
Hash
-

Conclusiones

+

Conclusiones

-
+
Hash
-

Resumen

+

Resumen

  • Hay una serie de problemas difíciles de resolver pero fáciles de comprobar: son los NP, en los que basaremos los demás sistemas que veremos
  • La existencia de que estos problemas realmente son difíciles de resolver es una asunción de la criptografía actual. Amenaza: computación cuántica
  • @@ -840,26 +833,26 @@

    Resumen

-
+
Hash
-

Referencias

+

Referencias

  • New Directions in Cryptography, Whitfield Diffie y Martin E. Hellman, 1976. El paper describe parte de la teoría de la complejidad que hemos estudiado aquí y describe el intercambio de claves Diffie-Hellman
-
+
Hash

Ejercicios: https://colab.research.google.com/github/Juanvvc/crypto/blob/master/ejercicios/04/T4 - Acuerdo de claves D-H.ipynb

Continúa en: Criptografía asimétrica

-
+
Hash
-

¡Gracias!

+

¡Gracias!

-

Parecería que con lo que conocemos ya hemos resuelto el problema de comunicar dos personas de forma secreta Pero en realidad tenemos un "elefante en la habitación": las dos personas necesitan tener una clave en común. Fíjate que no se conocen de antes: no pueden tener un "libro de claves" como los espías del siglo XX, y solo tienen Internet para comunicarse. No pueden llamarse por teléfono para enviarse la clave. @@ -901,5 +894,5 @@

¡Gracias!

En el enlace, solucionan un Sudoku transformándolo primero a un problema de coloreado de mapas, resolviendo el problema de coloreado de mapas y deshaciendo la transformación a un Sudoku

Esta es una discusión muy interesante para las matemáticas y que podría tener alguna implicación en criptografía, pero a niveles prácticos nos afecta poco

Vamos a ver con más detalles el problema del logaritmo discreto, porque es el que se usa en casi todos los sistemas que veremos a partir de ahora

Fijaos: se están mapeando todos los números de 1 a 17 en otros números de 1 a 17 de forma "aleatoria". Esto es un "grupo cíclico" -Eso se parece mucho a una permutación pseudoaleatoria, de las que usábamos en el cifrado de bloque

Ya tenemos los conocimientos suficientes para presentar el problema de la primera transparencia:

Simplemente recordemos cuál es el problema que queremos resolver hoy: ¿cómo conseguimos que las dos personas que no se han visto nunca tengan una clave secreta común?

Su paper de 1976 es, junto con el de Shannon (capítulo 1), uno de los más importantes en cruptografía

Recuerda: sabemos que el problema del logaritmo discreto es NP, pero no sabemos si también es P y por tanto y fácil de resolver. Sospechamos muchísimo que no es P y que el algoritmo más rápido posible tomará un tiempo exponencial con el tamaño de la clave. Pero no estamos *matemáticamente* seguros. ¿es P=NP o no? No lo sabemos.

\ No newline at end of file +Eso se parece mucho a una permutación pseudoaleatoria, de las que usábamos en el cifrado de bloque

Ya tenemos los conocimientos suficientes para presentar el problema de la primera transparencia:

Simplemente recordemos cuál es el problema que queremos resolver hoy: ¿cómo conseguimos que las dos personas que no se han visto nunca tengan una clave secreta común?

Su paper de 1976 es, junto con el de Shannon (capítulo 1), uno de los más importantes en cruptografía

Recuerda: sabemos que el problema del logaritmo discreto es NP, pero no sabemos si también es P y por tanto y fácil de resolver. Sospechamos muchísimo que no es P y que el algoritmo más rápido posible tomará un tiempo exponencial con el tamaño de la clave. Pero no estamos *matemáticamente* seguros. ¿es P=NP o no? No lo sabemos.

\ No newline at end of file diff --git a/05-asimetrica.html b/05-asimetrica.html index 581c0ad..812d297 100644 --- a/05-asimetrica.html +++ b/05-asimetrica.html @@ -1,4 +1,4 @@ -Criptografía - Cifrado asimétrico
-

Cifrado asimétrico o de clave pública

+ the YAML header: section: | */div#\:\$p>svg>foreignObject>section.a-story ul li{list-style-type:none;text-align:center}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Cifrado asimétrico o de clave pública

RSA y curvas elípticas

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Como decíamos ayer...

+
+

Como decíamos ayer...

center

El cifrados de flujo (ej. ChaCha) y de bloque (ej. AES) permiten enviar mensajes computacionalmente seguros

Solo necesitamos que las dos partes tenga una clave secreta en común

¿Cómo conseguimos que las dos personas que no se han visto nunca tengan una clave secreta común?

-
+

El protocolo de intercambio de claves Diffie-Hellman permitió por primera vez en la historia que dos personas cualquiera que no se conocían mantuviesen una conversación confidencial por medios dgitales...

...pero su artículo no se llamó "Solución al problema de intercambio de claves". Tenía un título mucho más ambicioso: Nuevas direcciones en la criptografía

¿Qué direcciones eran esas?

@@ -240,8 +240,8 @@

Como decíamos ayer...

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

  1. Criptografía asimétrica
  2. @@ -252,12 +252,12 @@

    Hoy hablamos de...

-
-

Criptografía asimétrica

+
+

Criptografía asimétrica

-
-

Firmado digital de contratos

+
+

Firmado digital de contratos

New Directions in Cryptography (Whitfield Diffie y Martin Hellman, 1976) exploraba qué se necesitaba para que dos empresas pudiesen firmar un contrato mercantil:

  1. Confidencialidad, sin tener una clave secreta común
  2. @@ -268,20 +268,20 @@

    Firmado digital de contratos

    Es la lista que conocemos como "los servicios básicos de seguridad" (tema 1)

-
+

El primer punto, "confidencialidad", se resolvía con los cifrados que estaban apareciendo ese mismo año (DES)...

...pero se necesitaba intercambiar primero una clave simétrica

Propuesta: protocolo de intercambio de claves

Y se dieron cuenta: se puede extender la misma idea para solucionar todo lo demás

-
-

Criptografía asimétrica o de clave pública

+
+

Criptografía asimétrica o de clave pública

También conocida como criptografía de clave pública

Cada persona tiene dos claves:

    -
  • pkpk: clave pública, todos la conocen
  • -
  • sksk: clave secreta, nadie más la conoce
  • +
  • : clave pública, todos la conocen
  • +
  • : clave secreta, nadie más la conoce

A veces son intercambiables: lo que se cifra con una se descifra con la otra

@@ -290,7 +290,7 @@

Criptografía asimétrica o de clave pública

-
+

La criptografía de clave pública nos permite hacer dos cosas:

  • cifrar mensajes --> servicio de confidencialidad
  • @@ -299,148 +299,137 @@

    Criptografía asimétrica o de clave pública

    La criptografía simétrica también nos permitía cifrar, pero no firmar

-
-

Esquema de cifrado

+
+

Esquema de cifrado

center

    -
  • Todos conocen la clave KpubK_{pub} de Bob, solo Bob conoce la clave KprivK_{priv}
  • +
  • Todos conocen la clave de Bob, solo Bob conoce la clave
  • Cualquier puede cifrar un mensaje para Bob, solo Bob puede descifrarlo: confidencialidad
-
-

Esquema de firma electrónica

+
+

Esquema de firma electrónica

center

    -
  • Solo Bob puede cifrar con su clave KprivK_{priv} y cualquier puede descifrar con KpubK_{pub}
  • +
  • Solo Bob puede cifrar con su clave y cualquier puede descifrar con
  • Pero si pueden descifrar el mensaje, todos saben que el mensaje solo puede haberlo enviado Bob: autenticación
-
-

Trap door functions, funciones trampa

+
+

Trap door functions, funciones trampa

Las matemáticas de la criptografía asimétrica utilizan funciones trampa:

    -
  • Si conoces aa, entonces calcular A=f(a)A=f(a) es fácil (problema P, tiempo polinomial)
  • -
  • Si conoces AA, entonces calcular a=f1(A)a=f^{-1}(A) es muy difícil (problema NP, tiempo exponencial)
  • +
  • Si conoces , entonces calcular es fácil (problema P, tiempo polinomial)
  • +
  • Si conoces , entonces calcular es muy difícil (problema NP, tiempo exponencial)

No encontramos una función trampa hasta 1976

-
+

Vimos en teoría de la complejidad que los problemas NP (pero probablemente no P, no NP-Completos) son buenos candidatos para funciones trampa

La mayor parte de problemas NP solo son difíciles en el caso general. Es decir: tenemos algoritmos eficientes que funcionan casi siempre. Ejemplo: sudoku

-

Pero necesitamos que calcular a=f1(A)a=f^{-1}(A) sea muy difícil siempre

+

Pero necesitamos que calcular sea muy difícil siempre

La dificultad ha sido encontrar esos problemas matemáticos que fuesen difíciles siempre

-
-

Problema del Logaritmo Discreto, revisitado

+
+

Problema del Logaritmo Discreto, revisitado

-

Resuelve la xx:

+

Resuelve la :

  • -

    2x=10242^x = 1024 -

  • +

  • -

    x=log2(1024)=10x = \log_2(1024) = 10 -

  • +

  • Eso es fácil y se puede extender a cualquier problema similar:
  • -
  • Si te dan nn y NN y te preguntan nx=Nn^x=N...
  • -
  • x=lognNx = \log_n N
  • +
  • Si te dan y y te preguntan ...
  • +

Para más detalles de este problema, consulta tema 4

-
-

Resuelve la xx:

+
+

Resuelve la :

    -
  • 2xmod19=132^x \mod 19 = 13
  • +
    -
  • Ten en cuenta: 0x<190 \le x \lt 19. Puedes probar los números uno a uno
  • -
  • Solución: x=5x = 5
  • +
  • Ten en cuenta: . Puedes probar los números uno a uno
  • +
  • Solución:
  • Si no has podido resolverlo, no es porque no tengas suficientes conocimientos... es que no sabemos hacerlo rápidamente: Problema del Logaritmo Discreto (DLP)
  • -
  • ...pero calcular 25mod19=132^5 \mod 19 = 13 es rápido
  • +
  • ...pero calcular es rápido
  • El DLP es una trap door function
  • ...probablemente. Recuerda tema 4: no sabemos si P=NP
-
+

La dificultad está en la aritmética modular: partiendo del resultado, no es fácil saber cuántas vueltas ha dado a la rueda

-

Ejemplo: ¿cuánto vale x? Recuerda que x<17x\lt17

-

3xmod17=13^{x} \mod 17 = 1 -

center

+

Ejemplo: ¿cuánto vale x? Recuerda que

+

center

https://miro.medium.com/max/2400/1*YZieEVE_LsNK4i94KNnZqg.png

-
-

Problema: resuelve mm dado gg, pp y cc en la ecuación gmmodp=cg^m \mod p = c

-

Si probamos con p=12p=12, que no es primo, el problema:

-

2mmod12=82^m \mod 12 = 8 -

Tiene todas estas soluciones (compruébalo):

-

m=3, ya que: 23mod12=8mod12=8m=5, ya que: 25mod12=32mod12=8m=7m=9\begin{aligned} -m &= 3 \text{, ya que: } 2^3 \mod 12 = 8 \mod 12 = 8\\ -m &= 5 \text{, ya que: } 2^5 \mod 12 = 32 \mod 12 = 8\\ -m &= 7\\ -m &= 9 -\end{aligned} -

Pero:

-

2mmod12=52^m \mod 12 = 5 -

no tiene solución para ningún número xx entero

+
+

Problema: resuelve dado , y en la ecuación

+

Si probamos con , que no es primo, el problema:

+

Tiene todas estas soluciones (compruébalo):

+

Pero:

+

no tiene solución para ningún número entero

-
-

Problema: resuelve mm dado gg, pp y cc en la ecuación gmmodp=cg^m \mod p = c

-

Si el módulo pp es primo, la solución de gmmodp=cg^m \mod p = c siempre existe y es única, que es lo que interesa para poder cifrar y descifrar:

-

gg también tiene restricciones, aunque normalmente g=2g=2 ó g=3g=3

+
+

Problema: resuelve dado , y en la ecuación

+

Si el módulo es primo, la solución de siempre existe y es única, que es lo que interesa para poder cifrar y descifrar:

+

también tiene restricciones, aunque normalmente ó

-
-

Protocolo Diffie-Hellman, revisitado

+
+

Protocolo Diffie-Hellman, revisitado

-

Dos usuarios AliceAlice y BobBob que no se han visto nunca:

+

Dos usuarios y que no se han visto nunca:

    -
  1. Acuerdan gg y pp primos entre sí
  2. -
  3. Escogen números en secreto aa y bb
  4. +
  5. Acuerdan y primos entre sí
  6. +
  7. Escogen números en secreto y
  8. Se envían entre ellos:
      -
    • AliceBob:A=gamodpAlice \rightarrow Bob: A=g^{a} \mod p
    • -
    • BobAlice:B=gbmodpBob \rightarrow Alice: B=g^{b} \mod p
    • +
    • +
  9. Calculan en secreto:
      -
    • AliceAlice: s=Bamodp=gabmodps = B^{a} \mod p = g^{ab} \mod p
    • -
    • BobBob: s=Abmodp=gabmodps = A^{b} \mod p = g^{ab} \mod p
    • +
    • :
    • +
    • :
  10. -
  11. Y usan ss como clave de cifrado un algoritmo simétrico
  12. +
  13. Y usan como clave de cifrado un algoritmo simétrico
-

Observa: para que un atacante que solo conoce gg, pp, AA y BB (claves públicas) pueda calcular s=Abs=A^b, tiene que resolver B=gbmodpB=g^b \mod p, que se supone difícil

+

Observa: para que un atacante que solo conoce , , y (claves públicas) pueda calcular , tiene que resolver , que se supone difícil

-
-

Claves secretas y claves públicas

+
+

Claves secretas y claves públicas

    -
  • Alice y Bob acuerdan gg y pp primos entre sí por canales que no son seguros. El atacante conoce gg y pp
  • -
  • Cuando Alice y Bob se intercambian gag^{a} y gbg^{b}, el canal aún no es seguro. El atacante conoce gag^a y gbg^b
  • -
  • aa y bb nunca salen de los ordenadores de Alice ni Bob, nunca se intercambian. El atacante no los conoce, Bob no conoce aa y Alice no conoce bb
  • +
  • Alice y Bob acuerdan y primos entre sí por canales que no son seguros. El atacante conoce y
  • +
  • Cuando Alice y Bob se intercambian y , el canal aún no es seguro. El atacante conoce y
  • +
  • y nunca salen de los ordenadores de Alice ni Bob, nunca se intercambian. El atacante no los conoce, Bob no conoce y Alice no conoce
-

Dado que el atacante (o cualquiera) conoce gg, pp, gag^a y gbg^b, esta información es pública

-

aa y bb es información privada y solo conocida por Alice y Bob, respectivamente

+

Dado que el atacante (o cualquiera) conoce , , y , esta información es pública

+

y es información privada y solo conocida por Alice y Bob, respectivamente

-
+
@@ -453,43 +442,43 @@

Claves secretas y claves públicas

- - - + + + - - + + - - - + + + - - + +
1gg, ppgg, ppgg, pp, , ,
2aa, gag^abb, gbg^b, ,
3gbg^bgag^agag^a, gbg^b,
4gabg^{ab}gabg^{ab}
-

Recuerda hipótesis DDH: gabg^{ab} solo se puede calcular fácilmente si conoces o bien aa o bien bb, pero no se puede calcular fácilmente si conoces solo gag^a y gbg^b

-

Alice y Bob, que no se habían visto nunca antes, puede utilizar s=gabs=g^{ab} como clave de un cifrado simétrico de flujo o bloque como ChaCha20 ó AES

+

Recuerda hipótesis DDH: solo se puede calcular fácilmente si conoces o bien o bien , pero no se puede calcular fácilmente si conoces solo y

+

Alice y Bob, que no se habían visto nunca antes, puede utilizar como clave de un cifrado simétrico de flujo o bloque como ChaCha20 ó AES

-
-

Problemas de Diffie Hellman: Man in the middle

+
+

Problemas de Diffie Hellman: Man in the middle

center

Diffie-Hellman no protege contra MitM porque no permite autenticar mensajes.Necesitamos otras tecnologías.

-
-

Usos de Diffie-Hellman

+
+

Usos de Diffie-Hellman

  • Acuerdo inicial de una clave que luego puede usarse para cifrar las comunicaciones usando criptografía simétrica: es la etapa inicial de HTTPS
  • Pero no permite autenticar a la otra parte
  • @@ -497,14 +486,14 @@

    Usos de Diffie-Hellman

-
-

Nuevas direcciones

+
+

Nuevas direcciones

El DLP, en la versión D-H de 1976, no una solución completa: permite hacer acuerdo de claves, pero no cifrado, ni firma, ni autenticado

En pocos años aparecieron nuevas funciones basadas en las mismas ideas que D-H, pero que permitían hacerlo todo: RSA, ElGammal, DSA, Pailier...

Luego, las soluciones se refinaron con curvas elípticas: ECDH (Elliptic Curves Diffie-Hellman), ECDSA (Elliptic Curves DSA)...

-
+

Lo que no era público en 1976 es que en realidad la "non-secret encryption" ya se había descubierto antes, en 1969, por James H. Ellis, y en 1973 Clifford Cocks ya había desarrollado una trap door function completa que permitía el cifrado ...

... pero se protegió como secreto militar británico, y no se desprotegió hasta 1996

@@ -513,8 +502,8 @@

Nuevas direcciones

-
-

Cifrado y firmado

+
+

Cifrado y firmado

@@ -554,174 +543,131 @@

Cifrado y firmado

Técnicamente, los sistemas propuestos sirven o bien para firmar, o bien para cifrar o distribuir claves. Los algoritmos son ligeramente diferentes si se usan para firmar o para cifrar, pero no estudiaremos las diferencias

-
-

RSA

+
+

RSA

-
-

RSA

+
+

RSA

A method for obtaining digital signatures and public-key cryptosystems, Ron Rivest, Adi Shamir, Leonard Adleman, 1978

-

trap door function: dificultad del cálculo de la raíz ee-ésima(modn\mod n) para valores de nn con ciertas propiedades

+

trap door function: dificultad del cálculo de la raíz -ésima() para valores de con ciertas propiedades

Background: https://hsto.org/getpro/habr/post_images/453/10e/602/45310e602d784a489301bf1996edef68.jpg

-
-

El problema RSA (RSAP)

-

Calcula mm:

-

125=m323mod391125 = m ^{323} \mod 391 -

Pista: 391391 es producto de dos primos que no conoces

-

Es decir, dado cc, ee y nn, calcula mm:

-

c=memodnc=m^e \mod n -

para recuperar (descifrar) el mensaje original a partir de cc hace falta invertir:

-

m=cemodnm=\sqrt[e]{c}^ \mod n -

-
-
-

Si nn no es primo el cálculo de

-

m=cemodnm=\sqrt[e]{c}^ \mod n -

Es computacionalmente difícil para valores de nn con factores desconocidos

-

Hemos cifrado un mensaje mm pero no hay manera de descifrar el resultado cc... sin conocer "la trampa" (trap function)

- -
-
-

La "trampa" usa el teorema de Euler: si los factores de nn son conocidos, entonces:

-

(mϕ(n))t1(modn)mtϕ(n)1(modn)mtϕ(n)mm(modn)mtϕ(n)+1m(modn)\begin{aligned} -(m^{\phi(n)})^t &\equiv 1 \pmod n\\ -m^{t \phi(n)} &\equiv 1 \pmod n\\ -m^{t \phi(n)}m &\equiv m \pmod n\\ -m^{t \phi(n)+1} &\equiv m \pmod n -\end{aligned} -

ϕ(n)\phi(n) es la función indicatriz de Euler, "totient function", la trap door function de RSA

-

El mensaje se puede descifrar fácil si conoces ϕ(n)\phi(n)

-

ϕ(n)\phi(n) se puede calcular fácil si conoces los factores primos de nn. Es decir, si puedes factorizar nn

+
+

El problema RSA (RSAP)

+

Calcula :

+

Pista: es producto de dos primos que no conoces

+

Es decir, dado , y , calcula :

+

para recuperar (descifrar) el mensaje original a partir de hace falta invertir:

+

+
+
+

Si no es primo el cálculo de

+

Es computacionalmente difícil para valores de con factores desconocidos

+

Hemos cifrado un mensaje pero no hay manera de descifrar el resultado ... sin conocer "la trampa" (trap function)

+ +
+
+

La "trampa" usa el teorema de Euler: si los factores de son conocidos, entonces:

+

es la función indicatriz de Euler, "totient function", la trap door function de RSA

+

El mensaje se puede descifrar fácil si conoces

+

se puede calcular fácil si conoces los factores primos de . Es decir, si puedes factorizar

No conocemos ningún algoritmo eficiente para factorizar un número. Este es el problema computacionalmente difícil de RSA

-
-

Teniendo en cuenta eso, para calcular mm a partir de cc, tomando un atajo dando la vuelta "por el otro lado", exponenciando suficientemente para llegar otra vez hasta mm:

-

cme(modn)mcd(modn)mmed(modn)\begin{aligned} -c & \equiv m^{e} \pmod n \\ -m & \equiv c^{\color{red}d} \pmod n \qquad \rightarrow m \equiv m^{e\color{red}d} \pmod n -\end{aligned} -

Hace falta encontrar una dd tal que:

-

ed=tϕ(n)+1ed = t \phi(n) + 1 -

ed1modϕ(n)ed \equiv 1 \bmod{\phi(n)} -

de1modϕ(n)d \equiv e^{-1} \bmod{\phi(n)} -

Es decir, dd tiene que ser el inverso de ee en el anillo cíclico Zϕ(n)\Z_{\phi(n)}

-

dd solo existe si ee y ϕ(n)\phi(n) no tienen factores en común (son coprimos)

+
+

Teniendo en cuenta eso, para calcular a partir de , tomando un atajo dando la vuelta "por el otro lado", exponenciando suficientemente para llegar otra vez hasta :

+

Hace falta encontrar una tal que:

+

Es decir, tiene que ser el inverso de en el anillo cíclico

+

solo existe si y no tienen factores en común (son coprimos)

-
-

¿Cuál es el inverso de un número en un anillo? El que multiplicado por el número da 11. Ejemplo: 0.333...0.333... es el inverso de 33 en los números reales: 0.333...3=10.333... \cdot 3 = 1

-

¿Qué pasa con los enteros? Que no tienen inverso dentro de los propios enteros: no hay ningún entero que multiplicado por 3311.

+
+

¿Cuál es el inverso de un número en un anillo? El que multiplicado por el número da . Ejemplo: es el inverso de en los números reales:

+

¿Qué pasa con los enteros? Que no tienen inverso dentro de los propios enteros: no hay ningún entero que multiplicado por .

Cuando añadimos aritmética modular a los enteros, sí que pueden haber inversos:

-

37mod10=13 \cdot 7 \mod 10 = 1 -

99mod10=19 \cdot 9 \mod 10 = 1 -

3 es el inverso de 7 en el anillo cíclico Z10\Z_{10}, 9 es inverso de sí mismo en el anillo cíclico Z10\Z_{10}

-

6 no tiene inverso en el anillo cíclico Z10\Z_{10}. Esto es porque 6 y 10 tienen factores comunes (no son coprimos)

-

Existen algoritmos eficientes para calcular el inverso de un número en un anillo cíclico Zϕ\Z_\phi. Es decir, el cálculo de d=e1modϕd = e^{-1} \mod \phi dado ee y ϕ\phi es posible y eficiente

+

3 es el inverso de 7 en el anillo cíclico , 9 es inverso de sí mismo en el anillo cíclico

+

6 no tiene inverso en el anillo cíclico . Esto es porque 6 y 10 tienen factores comunes (no son coprimos)

+

Existen algoritmos eficientes para calcular el inverso de un número en un anillo cíclico . Es decir, el cálculo de dado y es posible y eficiente

-
-

El protocolo RSA: generación de par de claves

+
+

El protocolo RSA: generación de par de claves

    -
  1. Escoge dos números pp, qq primos
  2. -
  3. Calcula: n=pqn = pq. Su número de bits es el tamaño de clave
  4. +
  5. Escoge dos números , primos
  6. +
  7. Calcula: . Su número de bits es el tamaño de clave
  8. Calcula:
      -
    • Protocolo original: ϕ=(p1)(q1)\phi = (p-1)(q-1)
    • -
    • Versión moderna: ϕ=mcm(p1,q1)\phi = mcm(p-1, q-1)
    • +
    • Protocolo original:
    • +
    • Versión moderna:
  9. -
  10. Escoge al azar e<ϕe \lt \phi que sea coprimo de ϕ\phi (sin factores en común)
  11. -
  12. Calcula: d=e1modϕd = e^{-1} \mod \phi
  13. +
  14. Escoge al azar que sea coprimo de (sin factores en común)
  15. +
  16. Calcula:
  17. Claves:
      -
    • sk={d,n}sk=\{d, n\}
    • -
    • pk={e,n}pk=\{e, n\}
    • +
    • +
  18. -
  19. Se descartan pp, qq, ϕ\phi
  20. +
  21. Se descartan , ,
-
-

El protocolo: cifrado y descifrado

-

Cifrado: Para enviar un mensaje a Alice, obtengo su clave pública pkA={e,n}pk_A=\{e, n\} y calculo:

-

c=memodnc=m^e \mod n -

Descifrado: Alice utiliza su clave privada skA={d,n}sk_A=\{d, n\}

-

m=cdmodnm'=c^d \mod n -

+
+

El protocolo: cifrado y descifrado

+

Cifrado: Para enviar un mensaje a Alice, obtengo su clave pública y calculo:

+

Descifrado: Alice utiliza su clave privada

+

-
-

Ejemplo (lo veremos con ejercicios)

+
+

Ejemplo (lo veremos con ejercicios)

Claves:

    -
  • p=17,q=23p=17, q=23 +
    • -
    • n=pq=391n=pq=391 (tamaño de clave: 9 bits)
    • -
    • ϕ=(p1)(q1)=352\phi=(p-1)(q-1)=352
    • +
    • (tamaño de clave: 9 bits)
    • +
  • -
  • e=323e=323 (escogido al azar, pero <ϕ\lt \phi y coprimo con él)
  • -
  • d=e1modϕ=267d=e^{-1} \mod \phi=267 (calculado con algoritmo de Euler)
  • +
  • (escogido al azar, pero y coprimo con él)
  • +
  • (calculado con algoritmo de Euler)

Cifrado:

    -
  • m=97c=memodn=125m=97 \rightarrow c=m^e \mod n=125
  • +

Descifrado:

    -
  • c=125m=cdmodn=97c=125 \rightarrow m'=c^d \mod n=97
  • +
-
-

Velocidad de proceso

+
+

Velocidad de proceso

Para crear el par de claves hay que buscar:

    -
  • números muy grandes que sean primos (y otras condiciones): pp y qq
  • -
  • número muy grande ee que sea coprimo de pqpq
  • -
  • inversos de un número entero: d=e1modϕd=e^{-1} \mod \phi
  • +
  • números muy grandes que sean primos (y otras condiciones): y
  • +
  • número muy grande que sea coprimo de
  • +
  • inversos de un número entero:

Es decir: la elección de un par de claves es un proceso muy lento. Segundos, minutos, horas si las claves son grandes

A cambio: el cifrado y descifrado son relativamente rápidos comparados con otros sistemas de cifrado asimétrico

En cualquier caso, es muy lento comparado con cualquier proceso de cifrado simétrico

-
-

Tamaño de claves

+
+

Tamaño de claves

Hemos visto que tanto Diffie-Hellman como RSA necesitan números primos

-

Los números primos están muy separados entre sí: el número de primos menores que NN es ln(N)\approx \ln(N)

-

Ejemplo: hay ln(24096)=2839\approx\ln(2^{4096})=2839 números primos menores de 240962^{4096}

+

Los números primos están muy separados entre sí: el número de primos menores que es

+

Ejemplo: hay números primos menores de

"Son pocos primos"

Por eso: la criptografía basada en estas funciones necesita claves mucho más largas que la criptografía simétrica

@@ -730,13 +676,13 @@

Tamaño de claves

-
+
- + @@ -766,15 +712,15 @@

Tamaño de claves

Si usamos tamaños de clave RSA de 4096 bits (tamaño típico), podremos intercambiar una clave simétrica equivalente a AES-128

-
+

¿Podemos encontrar trap door functions que no estén basadas en primos, y por tanto necesiten claves más cortas?

-
-

Curvas elípticas

+
+

Curvas elípticas

-
+

Propuestas como trap door function en 1987 por Neal Koblitz y Victor S. Miller de forma independiente

Necesitan claves más cortas que la criptografía asimétrica basadas en DLP o RSAP para ofrecer una seguridad equivalente

    @@ -783,83 +729,79 @@

    Curvas elípticas

-
-

Curva elíptica

+
+

Curva elíptica

Curva plana en un cuerpo finito que consiste en los puntos que satisfacen la ecuación:

-

y2=x3+ax+by^2 = x^3 + ax + b -

Los cuerpos finitos son estructuras mátemáticas creadas con polinomios y aritmética modular

+

Los cuerpos finitos son estructuras mátemáticas creadas con polinomios y aritmética modular

-
+

Ejemplo:

-

y2=x33x+5y^2 = x^3 - 3x + 5 -

(por ahora simplificamos la explicación representando la curva los reales, sin módulos)

+

(por ahora simplificamos la explicación representando la curva los reales, sin módulos)

center

-
-

Trap door function

-

Dado un punto AA, definimos una operación "proyección" A+B=CA+B = C como:

-

CC es "la proyección de recta que une AA y BB, reflejada al otro lado de la curva"

+
+

Trap door function

+

Dado un punto , definimos una operación "proyección" como:

+

es "la proyección de recta que une y , reflejada al otro lado de la curva"

center

Usamos el símbolo "suma" por tradición, pero no es una "suma geométrica"

-
+

Y lo volvemos a aplicar, varias veces, desde el mismo origen

center

-
+

En vez de empezar con dos puntos, podemos empezar con uno solo, y la recta inicial es la tangente a la cura. El resto sigue igual

-

P=nAP=nA -

center

+

center

Fuente: https://medium.com/@icostan/animated-elliptic-curves-cryptography-122fff8fcae

-
+

Esta es la trap door function:

-

P=nAP = nA -

Es la aplicación de nn veces la proyección sobre el punto AA

-

Dado PP y AA... ¿cuánto vale nn?

+

Es la aplicación de veces la proyección sobre el punto

+

Dado y ... ¿cuánto vale ?

Eso es el problema difícil de las curvas elípticas:

-

No sabemos calcular nn a partir de PP y AA

+

No sabemos calcular a partir de y

-
-

Mapeando la curva en un campo finito

+
+

Mapeando la curva en un campo finito

En realidad en criptografía no trabajamos sobre los reales, sino que mapeamos en un grupo finito de los enteros.

Es decir, con aritmética modular de un numero primo muy grande. El número de bits de este entero es "el tamaño de la clave"

-

Ejemplo número primo grande de 256 bits: p=225519p=2^{255}-19

+

Ejemplo número primo grande de 256 bits:

Ejemplos de mapeado en campos finitos: https://graui.de/code/elliptic2/

-
-

Ejemplo Z61\Z_{61} (es solo un ejemplo, el primo tiene que ser mucho más grande):

+
+

Ejemplo (es solo un ejemplo, el primo tiene que ser mucho más grande):

Fuente: https://www.youtube.com/watch?v=mFVKuFZ29Fc&list=PLN9KZDpNfsHMd7d7PX87JGesGY_Qzyb3V

-
+

Ejemplo de proyección sobre los enteros

center

-
-

Tamaño de clave

+
+

Tamaño de clave

La gran ventaja de las curvas elípticas en criptografía (EEC) es que nos permiten utilizar criptografía asimétrica con una clave mucho más pequeña

Simétrica (bits) RSA (bits)D-H (pp, qq)D-H (, )
- + @@ -893,7 +835,7 @@

Tamaño de clave

Es decir, pone la criptografía asimétrica al alcance de pequeños dispositivos

-
+

center

NOTA: RSA está basado en "factorización", DSA y D-H en "logaritmo discreto"

@@ -901,12 +843,11 @@

Tamaño de clave

-
-

Elección de la curva

+
+

Elección de la curva

No se suele escoger "cualquier curva elíptica", sino alguna de las ya existentes. Cada una tiene propiedades ligeramente diferentes, algunas están patentadas y otras provocan dudas (parte de las revelaciones de Snowden, 2013)

La Curve25519, propuesta por Daniel J. Bernstein en 2005, se considera segura:

-

y2=x3+486662x2+xy^2 = x^3 + 486662x^2 + x -

sobre el cuerpo de los enteros creado por el primo p=225519p=2^{255} - 19

+

sobre el cuerpo de los enteros creado por el primo

Tiene un tamaño de clave de 256 bits, equivalente a 128 bits en clave simétrica

Aceptada por varios estándares

    @@ -915,32 +856,32 @@

    Elección de la curva

-
-

Elliptic Curve Diffie-Hellman: ECDH

+
+

Elliptic Curve Diffie-Hellman: ECDH

Protocolo:

    -
  1. Alice y Bob escogen una curva elíptica y un punto inicial PP
  2. -
  3. Alice escoge en secreto aa y Bob escoge en secreto bb
  4. +
  5. Alice y Bob escogen una curva elíptica y un punto inicial
  6. +
  7. Alice escoge en secreto y Bob escoge en secreto
  8. Se envían:
      -
    • Alice a Bob: A=aPA=aP
    • -
    • Bob a Alice: B=bPB=bP
    • +
    • Alice a Bob:
    • +
    • Bob a Alice:
  9. -
  10. Escogen como secreto s=aB=bA=abPs=aB=bA=abP
  11. +
  12. Escogen como secreto
-

Nota que un atacante no podría calcular ss a partir de AA ó BB: A+B=(a+b)PA+B=(a+b)P Tiene que calcular o bien aa o bien bb, y eso es difícil

+

Nota que un atacante no podría calcular a partir de ó : Tiene que calcular o bien o bien , y eso es difícil

-
-

Elliptic Curve DSA: ECDSA

+
+

Elliptic Curve DSA: ECDSA

DSA es un algoritmo de firmado digital clásico, basado en ElGammal (1985). Es similar a RSA pero basado en el problema del logaritmo discreto

Ha sido estándar FIPS hasta hace poco, pero probablemente será retirado en el futuro próximo

Existe una adaptación de DSA a curvas elípticas: ECDSA, que es la implementación que probablemente se estandarizará: FIPS 186-5 (2019, aún borrador)

-
-

¿Y RSA?

+
+

¿Y RSA?

El protocolo RSA no se ha adaptado a criptografía de curva elíptica

Pero RSA ha sido y aún es el sistema más utilizado para certificados digitales, y hay millones de estos certificados activos

(es decir, aún hay millones de claves RSA públicas en uso)

@@ -952,12 +893,12 @@

¿Y RSA?

-
-

Los límites de la criptografía asimétrica

+
+

Los límites de la criptografía asimétrica

-
-

Limitaciones

+
+

Limitaciones

  • Los esquemas descritos no cifran bytes, sino números: tenemos que ser capaces de codificar nuestro mensaje en un número entero. No ciframos "hola", sino el número "0x686f6c61"

    @@ -974,8 +915,8 @@

    Limitaciones

-
-

PKCS#1

+
+

PKCS#1

PKCS#1 (RFC8017): recomendaciones para utilizar correctamente RSA, y es obligatorio que las librerías que uses las implementen. Por ejemplo:

  • Añade random padding al inicio de un mensaje, de forma que dos mensajes iguales se cifren de forma diferente cada vez... pero se descifren igual
  • @@ -984,8 +925,8 @@

    PKCS#1

-
-

Computación cuántica

+
+

Computación cuántica

  • 1994: algoritmo de Shor: una máquina cuántica resuelve con eficacia la factorización de números enteros grandes. @@ -1006,12 +947,12 @@

    Computación cuántica

-
-

Conclusiones

+
+

Conclusiones

-
-

Resumen

+
+

Resumen

  • Criptografía asimétrica: cada persona tiene dos claves, una para cifrar y otra para descifrar. Una de esas claves es pública (es decir, cualquiera puede conocer la clave pública de otra persona) y la otra es secreta
  • @@ -1029,8 +970,8 @@

    Resumen

-
-

Referencias

+
+

Referencias

-
+

Ejercicios:

-
-

¡Gracias!

+
+

¡Gracias!

-

Parecería que con lo que conocemos ya hemos resuelto el problema de comunicar dos personas de forma secreta Pero en realidad tenemos un "elefante en la habitación": ¿cómo se intercambian una clave de forma segura dos personas que no han hablado nunca antes, ni tienen otra forma de comunicació que Internet? @@ -1071,5 +1012,5 @@

¡Gracias!

- Hablamos de Ron Rivest en el tema 3, creador de RC4 - Adi Shamir hizo más aportaciones fundamentales a la criptografía -- Leonard Adleman ha seguido investigando en teoría de la complejidad

Fíjate: necesitamos alguna manera de convertir mensajes a números. Lo verás en los ejercicios

Nota: podemos intercambiar claves AES-256 con un D-H de 1024 bits. Solo que, de forma efectiva, solo estaremos escogiendo 80 bits de la clave AES-256. Es decir, sería equivalente a un (no existente) AES-80

Observa: la curva sobre los reales se mapea en un toroide, con la marca de "números enteros", limitados por aritmética modular. Las intersecciones son los puntos de la gráfica 2D de al lado

A cambio, son más complejas de entender y programar pero eso como usuarios no es algo que importe

Bernstein es el creador de Chacha20 del [tema 3](03-simetrica.html)

\ No newline at end of file +- Leonard Adleman ha seguido investigando en teoría de la complejidad

Fíjate: necesitamos alguna manera de convertir mensajes a números. Lo verás en los ejercicios

Nota: podemos intercambiar claves AES-256 con un D-H de 1024 bits. Solo que, de forma efectiva, solo estaremos escogiendo 80 bits de la clave AES-256. Es decir, sería equivalente a un (no existente) AES-80

Observa: la curva sobre los reales se mapea en un toroide, con la marca de "números enteros", limitados por aritmética modular. Las intersecciones son los puntos de la gráfica 2D de al lado

A cambio, son más complejas de entender y programar pero eso como usuarios no es algo que importe

Bernstein es el creador de Chacha20 del [tema 3](03-simetrica.html)

\ No newline at end of file diff --git a/06-hashes.html b/06-hashes.html index 4437bfc..ba147fe 100644 --- a/06-hashes.html +++ b/06-hashes.html @@ -1,4 +1,4 @@ -Criptografía - Funciones de Hash y Blockchain
-

Funciones de Hash y Blockchain

+/* section footer { display: none; } */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Funciones de Hash y Blockchain

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Como decíamos ayer...

+
+

Como decíamos ayer...

  • Confidencialidad: AES/ChaCha20 + D-H
  • Autenticidad: RSA + firma digital
  • @@ -234,8 +234,8 @@

    Como decíamos ayer...

    Los hashes nos permiten calcular una firma digital

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

  1. Funciones de hash
  2. @@ -245,17 +245,14 @@

    Hoy hablamos de...

-
-

Funciones de hash

+
+

Funciones de hash

-
-

Función de hash, digest o resumen

-

Resume un mensaje mm de longitud arbitraria en un valor rr de tamaño fijo ll, sea cual sea la longitud del mensaje

-

r=h(m)\begin{aligned} -r &= h(m)\\ -\end{aligned} -

Ejemplos:

+
+

Función de hash, digest o resumen

+

Resume un mensaje de longitud arbitraria en un valor de tamaño fijo , sea cual sea la longitud del mensaje

+

Ejemplos:

  • "Resumir" un mensaje de 12 bytes en 32 bytes
  • Resumir una imagen de 532KB en 32 bytes
  • @@ -263,8 +260,8 @@

    Función de hash, digest o resumen

-
-

Ejemplos no criptográficos

+
+

Ejemplos no criptográficos

  • Bit de paridad un mensaje: número de "1" en el mensaje
  • CRC
  • @@ -277,8 +274,8 @@

    Ejemplos no criptográficos

-
-

Funciones de hash criptográficas

+
+

Funciones de hash criptográficas

Funciones hash criptográficas son aquellas que:

  • Son funciones resumen: comprimen la entrada a una salida de menor longitud
  • @@ -290,19 +287,19 @@

    Funciones de hash criptográficas

-

Dado un mensaje mm con un resumen r=h(m)r=h(m), para encontrar otro mensaje mm' con el mismo resumen, r=h(m)=h(m)r=h(m)=h(m'), la manera más eficiente tiene que ser probar mensajes uno a uno: fuerza bruta

+

Dado un mensaje con un resumen , para encontrar otro mensaje con el mismo resumen, , la manera más eficiente tiene que ser probar mensajes uno a uno: fuerza bruta

https://en.wikipedia.org/wiki/Cryptographic_hash_function

-
-

Ejemplos de valores de hash

+
+

Ejemplos de valores de hash

center

-
-

Requisitos de una función de hash criptográfica

+
+

Requisitos de una función de hash criptográfica

  • Que sea rápida de calcular
  • Resistencia a la preimagen: dado un hash, no se puede saber el mensaje exacto que tiene ese hash
  • @@ -314,8 +311,8 @@

    Requisitos de una función de hash criptográfica

-
-

¿Cuántos hashes podemos calcular por segundo?

+
+

¿Cuántos hashes podemos calcular por segundo?

Los hashes se usan mucho en minería bitcoin, así que podemos utilizar sus tablas para conocer velocidades:

  • ARM1176JZ(F)-S (Raspberry): 0.2 MH/s
  • @@ -330,10 +327,10 @@

    ¿Cuántos hashes podemos calcular por segundo?

-
-

¿Mensajes con el mismo resumen?

+
+

¿Mensajes con el mismo resumen?

-

Obvio: no puede existir una aplicación inyectiva entre un conjunto de mm elementos y otro de nn elementos si m>nm>n

+

Obvio: no puede existir una aplicación inyectiva entre un conjunto de elementos y otro de elementos si

Existen infinitos mensajes diferentes con el mismo resumen: esto se llama "colisión"

@@ -341,21 +338,15 @@

¿Mensajes con el mismo resumen?

-
+

Por ejemplo:

Si queremos resumir fotografías de 1MB en resúmenes de 256 bits (tamaño típico)

-

r=256br=2256resuˊmenesm106Bm=2223fotografıˊas}mr=22232256=2223256281061026106\left. -\begin{aligned} - \|r\| & = 256\text{b} \Rightarrow |r| = 2^{256}\text{resúmenes} \\ - \|m\| & \approx 10^6\text{B} \Rightarrow |m| = 2^{2^{23}}\text{fotografías} -\end{aligned} -\right\} \frac{|m|}{|r|} = \frac{2^{2^{23}}}{2^{256}} = 2^{2^{23}-256} \approx 2^{8·10^6} \approx 10^{26·10^6} -

Es decir, hay un número 102610610^{26·10^6}, que en la práctica es "casi infinito", de fotografías de 1MB que se resumen en el mismo número de 256 bits

+

úí

Es decir, hay un número , que en la práctica es "casi infinito", de fotografías de 1MB que se resumen en el mismo número de 256 bits

Queremos que no sea nada fácil (computacionalmente hablando) encontrar cualquiera de esas "casi infinitas" fotografías: la única forma debe de ser probar las fotografías una a una

-
-

Paradoja del cumpleaños

+
+

Paradoja del cumpleaños

En realidad hay un ataque a la resistencia a la colisión que deriva de la paradoja del cumpleaños:

si tenemos un grupo de 23 personas, la probabilidad de tener un par con la misma fecha de cumpleaños es del 50%

Sólo hace falta que el grupo llegue a 70 personas para que la probabilidad sea del 99%

@@ -365,36 +356,15 @@

Paradoja del cumpleaños

-
-

Si tenemos un hash de tamaño r\|r\| la probabilidad de colisión será muy alta a medida que nos acercamos a las r\sqrt{\|r\|} operaciones

-

Para r=256\|r\|=256 bits esto son unas 2256=22562=2128\sqrt{2^{256}} = 2^\frac{256}{2} = 2^{128} operaciones

+
+

Si tenemos un hash de tamaño la probabilidad de colisión será muy alta a medida que nos acercamos a las operaciones

+

Para bits esto son unas operaciones

Esto implica que para un hash hacen falta resúmenes el doble de largos de lo que hacía falta para las claves simétricas para obtener el mismo nivel de seguridad

-

La security strength de una función de hash de longitud bb bits es b/2b/2

+

La security strength de una función de hash de longitud bits es

-
-

Ejemplos de funciones de hash

+
+

Ejemplos de funciones de hash

-
+

Ejemplos de valores de hash MD5, SHA256 y SHA512 de esta presentación:

-
> ms5sum 06-hashes.md
+
> ms5sum 06-hashes.md
 c99fe5e1ec0f637d77dddb32b1679c21  06-hashes.md
 
 > sha256sum 06-hashes.md
@@ -416,27 +386,27 @@ 

Ejemplos de funciones de hash

> sha512sum 06-hashes.md 64b378a66da3714e723ac8469525ac7b460d7ad7ff348b9453d177907a14fd4a 445a11c07206b7df599bcf3ec70475a6e89b4bbfe605c928c36494ff1a31311d 06-hashes.md -
+

Si calculas los valores de hash del archivo, verás que no coinciden. Eso es porque no se puede calcular el hash de un archivo, meter el hash en el propio archivo, volver a calcular el hash ¡y que dé lo mismo! Recuerda: cualquier cambio (como por ejemplo meter el hash) cambia totalmente el hash

-
-

Visual SHA-256

+
+

Visual SHA-256

center

https://sha256algorithm.com/

-
-

¿SHA-2 ó SHA-3?

+
+

¿SHA-2 ó SHA-3?

La familia SHA-2 está diseñada por la NSA, la familia SHA-3 fue escogida por el NIST después de organizar una competición para definir el siguiente hash a utilizar

El SHA-3 se ha desarrollado teniendo en cuenta la eficiencia y como backup en caso de encontrar vulnerabilidades en el SHA-2 (diseños totalmente diferentes)

El SHA-2 hasta ahora ha sido sometido a un trabajo de análisis muy superior al SHA-3 y no se han encontrado ninguna vulnerabilidad

-
-

Construcción

+
+

Construcción

Formas de construir una función de hash:

  • A partir de un cifrado de bloque en un modo realimentado: el hash es el último bloque. Posible, pero lento.
  • @@ -446,33 +416,32 @@

    Construcción

    center

-
-

Ataque: rainbow table

+
+

Ataque: rainbow table

Tablas de consulta que ofrecen un compromiso para obtener claves en texto simple a partir del resultado de una función de hash.

Son bases de datos:

-

hashmensajehash \rightarrow mensaje -

+

https://project-rainbowcrack.com/table.htm

-
+

Ejemplo:

-
$ echo -n sesame | sha256sum
+
$ echo -n sesame | sha256sum
 d0c04f4b1951e4aeaaec8223ed2039e542f3aae805a6fa7f6d794e5afff5d272  -
-$ echo -n hello | sha256sum
+$ echo -n hello | sha256sum
 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824  -
-$ echo -n hola | sha256sum
+$ echo -n hola | sha256sum
 b221d9dbb083a7f33428d7c2a3c3198ae925614d70210e28716ccaa7cd4ddb79  -
-$ echo -n jñkjhafdiu232332 | sha256sum
+$ echo -n jñkjhafdiu232332 | sha256sum
 b12ee96400fa19e7909a48f1727d3c81f6af71178209b58b612b5d2e75bf2d13  -
-
+

https://crackstation.net/

center

-
+

En este curso no hacemos criptoanálisis, es decir, no rompemos cosas. Si estáis interesados, se puede intentar romper hashes:

  • Simplemente buscándolos en google
  • @@ -482,14 +451,14 @@

    Ataque: rainbow table

-
-

Usos

+
+

Usos

Árboles de Merkle, Integridad, Cadena de custodia...

-
-

Merkle Hash tree

+
+

Merkle Hash tree

Si un archivo gran cambia a menudo y hay que calcular su hash cada vez, llevará mucho tiempo

Solución: calcular hash solo de los bloques que cambien, y agruparlos en un árbol

@@ -497,31 +466,29 @@

Merkle Hash tree

center

-
-

Almacenamiento de contraseñas

+
+

Almacenamiento de contraseñas

El sistema operativo no debe guardar las contraseñas de los usuarios: si alguien consigue entrar, ¡obtiene la contraseña del usuario!

-

Podemos guardar simplemente su hash: hash(contrasen~a)hash(contraseña)

+

Podemos guardar simplemente su hash: ñ

Pero esto tiene un problema: muchos usuarios usan palabras, nombres, etc. limitados. Las palabras, nombres conocidos són del orden de ≈100.000

Un atacante realizar un "diccionario" con el hash de todas las palabras, nombres, etc. (ataque de diccionario y rainbow table)

-
-

Almacenamiento de contraseñas: salt y bcrypt

+
+

Almacenamiento de contraseñas: salt y bcrypt

    -
  1. Añadir un valor aleatorio o saltsalt y tamibén lo guardamos: hash(saltcontrasen~a)hash(salt\|contraseña)
  2. +
  3. Añadir un valor aleatorio o y tamibén lo guardamos: ñ
  4. Hashear varias veces o implementar un hash "costoso":
-

hash(hash(hash(...hash(saltcontrasen~a))))hash(hash(hash(...hash(salt\|contraseña)))) -

+

ñ

-
-

Integridad de mensajes

+
+

Integridad de mensajes

Se puede usar un hash para asegurar la integridad de un mensaje: HMAC

-

HMAC(k,m)=hash(Ek(m))HMAC(k, m) = hash(E_k(m)) -

+

-
+
  • Encrypt-then-MAC (EtM): primero cifra, luego calcula hash
  • Encrypt-and-MAC (E&M): cifra y calcula hash a la vez
  • @@ -534,8 +501,8 @@

    Integridad de mensajes

-
-

Encrypt-then-MAC (EtM)

+
+

Encrypt-then-MAC (EtM)

center

    @@ -544,8 +511,8 @@

    Encrypt-then-MAC (EtM)

-
-

Encrypt-and-MAC (E&M)

+
+

Encrypt-and-MAC (E&M)

center

    @@ -554,8 +521,8 @@

    Encrypt-and-MAC (E&M)

-
-

MAC-then-Encrypt (MtE)

+
+

MAC-then-Encrypt (MtE)

MAC-then-Encrypt

    @@ -564,32 +531,32 @@

    MAC-then-Encrypt (MtE)

-
-

Cadena de custodia

+
+

Cadena de custodia

Cuando se investiga un crimen... ¿cómo se protegen las evidencias digitales contra modificaciones?

Inicio de cadena de custodia publicando sus hashes

center

-
-

Firma digital

+
+

Firma digital

Cifrando el hash de un mensaje con nuestra clave privada, aseguramos que ese mensaje lo hemos enviado nosotros y cualquier puede verificarlo

center

Firma digital de un mensaje = cifrado del hash de un mensaje con mi clave privada

-
-

Blockchain

+
+

Blockchain

-
+

Ya veis que los hashes tienen muchos usos en criptografía

Vamos a ver con un poco más de detalle su uso en las monedas digitales: Blockchain y BitCoin

-
-

Bitcoin

+
+

Bitcoin

center

  • Inventado en 2008 por Satoshi Nakamoto (¡no se sabe quién es!)
  • @@ -601,20 +568,20 @@

    Bitcoin

-
+

center

https://www.investopedia.com/news/how-bitcoin-works/

-
-

Transacciones

+
+

Transacciones

center

-
-

Proof of work: Hashcash

+
+

Proof of work: Hashcash

Hashcash fue propuesto por Adam Back en 1997 para reducir el spam.

  • Problema a resolver: queremos que un ordenador solo pueda enviar un correo electrónico por minuto.
  • @@ -625,7 +592,7 @@

    Proof of work: Hashcash

-
+
  1. Crea una cadena con la dirección de correo destino
  2. Añade la fecha de envío
  3. @@ -639,9 +606,9 @@

    Proof of work: Hashcash

-
-
X-Hashcash: 1:52:380119:calvin@comics.net:::9B760005E92F0DAE
-
+
+
X-Hashcash: 1:52:380119:calvin@comics.net:::9B760005E92F0DAE
+
  • versión
  • bits: número de bits iniciales del hash
  • @@ -649,43 +616,43 @@

    Proof of work: Hashcash

  • resource: Descripción del recurso: correo electrónico, transacción...
  • counter: La PoW: lo que añadido al resto del mensaje da un hash con un número determinado de ceros
-
echo -n 1:52:380119:calvin@comics.net:::9B760005E92F0DAE | sha1sum  
+
echo -n 1:52:380119:calvin@comics.net:::9B760005E92F0DAE | sha1sum  
 0000000000000756af69e2ffbdb930261873cd71  -
-
+ -
-

Minería

+
+

Minería

Se adaptó el X-Hashcash. Un bloque es así:

-
* HASH DEL BLOQUE ANTERIOR
+
* HASH DEL BLOQUE ANTERIOR
 * TRANSACCION 1: ALICE LE PAGA A BOB
 * TRANSACCIÓN 2: BOB LE PAGA A CHARLIE
 * ...
 * 1 BITCOIN PARA MÍ
 * COUNTER
-
+

Y minar es encontrar un COUNTER tal que el hash de ese bloque empiece por el-número-de-ceros que toque

SHA2-256(bloque)=000000000000000000000000000000000000000000000000000000000000000000000001... y 185 bits más

El primero que encuentre ese COUNTER se lleva un bitcoin

-
+

https://btc.com/

El número de ceros necesario se ajusta para que más o menos cada 15 minutos alguien encuentre ese COUNTER: la dificultad es ajustable

-
+

-
+

Pincha en cualquiera de los bloques y verás las transacciones

center

-
-

Consenso distribuido

+
+

Consenso distribuido

Bitcoin funciona por consenso distribuidos: todos se tienen que poner de acuerdo en quién ha sido el primero en encontrar el COUNTER

Pero estamos hablando de dinero... un tema en el que pocas veces hay consenso y sí mucha competitividad

@@ -695,7 +662,7 @@

Consenso distribuido

-
+
  • Bit coin: red P2P de nodos
  • Cada nodo está constantemente tratando de encontrar el COUNTER del bloque que provoque que el hash se inicie con un número determinado de ceros.
  • @@ -704,7 +671,7 @@

    Consenso distribuido

-
+
-
-

Usos adicionales

+
+

Usos adicionales

En el registro de BlockChain / Ethereum y otros, a parte de transacciones económicas, se pueden inscribir datos que quedan públicos (el ledger es público) para posterior consulta:

  • "Notaría" digital
  • @@ -732,12 +699,12 @@

    Usos adicionales

-
-

Resumen y referencias

+
+

Resumen y referencias

-
-

Resumen

+
+

Resumen

  • Las funciones de hash reducen un mensaje de cualquier tamaño (pocos bits o gigas de información) en un conjunto de pocos bytes
  • SHA-2 (SHA-256 ó SHA-512) es el más usado. Debe evitarse MD5 o SHA-1
  • @@ -753,8 +720,8 @@

    Resumen

-
-

Referencias

+
+

Referencias

-
+

Ejercicios: Funciones de hash

Continúa en: TLS y Public Key Infrastructure

-
-

¡Gracias!

+
+

¡Gracias!

-

Los bits de paridad o los CRC se utilizan mucho con protocolos que esperan errores: RS232, lectura de CDs, la parte de paridad de un RAID... Un código de detección/corrección de errores se puede entender también como un "resumen" del mensaje: si el resumen no coincide con lo recibido, entonces sabemos ue ha habido un error. Pero estas funciones, en general, no sirven en criptografía: imagina que un atacante puede cambiar un mensaje y también su resumen. Entonces, ¡no nos sirve de nada validar que el resumen sea correcto!

Ejemplos de valores de hash: @@ -798,5 +765,5 @@

¡Gracias!

> https://es.wikipedia.org/wiki/Integridad_del_mensaje

El paper original de "Satoshi Nakamoto" es sencillo de entender al menos en su primera parte, y se recomienda su lectura

Esto es una transacción bitcoin: "X le da a Y Z bitcoins". Y el mensaje va firmado por Y. -Además, las transacciones se encadenan unas con otras: una transacción contiene también el hash de las transacción anterior. Para modificar una transacción... ¡habría que modificar todas las transacciones anteriores, y sus firmas!

\ No newline at end of file +Además, las transacciones se encadenan unas con otras: una transacción contiene también el hash de las transacción anterior. Para modificar una transacción... ¡habría que modificar todas las transacciones anteriores, y sus firmas!

\ No newline at end of file diff --git a/07-pki.html b/07-pki.html index 374159c..fed5628 100644 --- a/07-pki.html +++ b/07-pki.html @@ -1,4 +1,4 @@ -Criptografía - Public Key Infrastructure
-

Public Key Infrastructure y protocolo HTTPS

+/* section footer { display: none; } */div#\:\$p>svg>foreignObject>section[data-marpit-scope-SnOdRpWY] p{font-size:150%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Public Key Infrastructure y protocolo HTTPS

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

  1. Gestión de claves públicas
  2. @@ -233,8 +233,8 @@

    Hoy hablamos de...

-
-

Qué sabemos hacer

+
+

Qué sabemos hacer

  • Sabemos enviar mensajes con confidencialidad: criptografía simétrica
      @@ -255,8 +255,8 @@

      Qué sabemos hacer

-
-

Problemas cifrado asimétrico

+
+

Problemas cifrado asimétrico

  • Solo cifran números enteros con una longitud igual a la clave. Ej: 4096 bits
  • @@ -266,16 +266,16 @@

    Problemas cifrado asimétrico

    Hoy veremos las soluciones para estos problemas: cifrado híbrido y certificados

-
+
Gestión de claves públicas
-

Gestión de claves públicas

+

Gestión de claves públicas

Certificados electrónicos

-
+
Gestión de claves públicas
-

Recordatorio: cifrado asimétrico

+

Recordatorio: cifrado asimétrico

center

  • Todo el mundo tiene dos claves: pública y privada
  • @@ -285,13 +285,13 @@

    Recordatorio: cifrado asimétrico

-
+
Gestión de claves públicas
-

Ataque man in the middle

+

Ataque man in the middle

center

-
+
Gestión de claves públicas

Si tengo la clave pública de Bob...

@@ -302,7 +302,7 @@

Ataque man in the middle

¿Cómo consigo la clave pública de Bob?

-
+
Gestión de claves públicas

Hemos cambiado el problema de

@@ -311,9 +311,9 @@

Ataque man in the middle

cómo compartir claves públicas (asimétricas)

-
+
Gestión de claves públicas
-

El problema de la confianza

+

El problema de la confianza

¿Cómo conseguimos la clave pública de los demás?

    @@ -328,9 +328,9 @@

    El problema de la confianza

-
+
Gestión de claves públicas
-

Gestión manual: SSH

+

Gestión manual: SSH

  • El cliente guarda cifrada la clave privada y la lista de claves públicas de los servidores en que confía
  • @@ -339,32 +339,30 @@

    Gestión manual: SSH

    • El servidor guarda en claro la clave privada (del servicio sshd) y las claves públicas de los usuarios
    -
    servidor$ /etc/ssh/ssh_host_rsa_key (...) 
    +
    servidor$ /etc/ssh/ssh_host_rsa_key (...) 
     servidor$ ~/.ssh/authorized_keys (...) 
    -
    +

    Este esquema es muy utilizado por los administradores de sistemas

    https://jumpcloud.com/blog/how-to-manage-ssh-keys-linux

    -
    +
    Gestión de claves públicas
    -

    Gestión con certificados

    +

    Gestión con certificados

    Alice crea un archivo con su identidad y su clave pública

    -

    {identidadAlice,PKAlice}\{identidad_{Alice}, PK_{Alice}\} -

    y para poder verificar la autenticidad una tercera parte de confianza (TTP) firma esta tupla:

    -

    CertificadoAlice={identidadAlice,PKAlice,Sign({identidadAlice,PKAlice},SKTTP)Certificado_{Alice} = \{identidad_{Alice}, PK_{Alice}, Sign(\{identidad_{Alice}, PK_{Alice}\}, SK_{TTP}) -

    Alice puede ahora distribuir su certificado, que incluye su identidad y clave pública PKAlicePK_{Alice} a todos los que confíen en esa TTP

    +

    y para poder verificar la autenticidad una tercera parte de confianza (TTP) firma esta tupla:

    +

    Alice puede ahora distribuir su certificado, que incluye su identidad y clave pública a todos los que confíen en esa TTP

    -
    +
    Gestión de claves públicas

    center

    -
    +
    Gestión de claves públicas

    Una conexión HTTPS / TLS con certificados no quiere decir "confía en mí". Quiere decir "es privada". Podrías estar recibiendo la llamada de Cthulhu, y que fuese privada.

    Scott Hanselman

    @@ -375,9 +373,9 @@

    Gestión con certificados

    -
    +
    Gestión de claves públicas
    -

    Tercera parte de confianza

    +

    Tercera parte de confianza

    Ya no tenemos que conseguir la clave pública de toda Internet, solo la de la TTP

    La TTP puede ser:

      @@ -391,15 +389,15 @@

      Tercera parte de confianza

    -
    +
    Gestión de claves públicas
    -

    PGP: Pretty Good Privacy

    +

    PGP: Pretty Good Privacy

    En PGP podemos firmar las claves de conocidos nosotros mismos si nos las han pasado de forma segura

    ...y ellos también pueden hacer lo mismo, permitiendo alzcanzar un paso más

    Nota: PGP tiene una versión de libre distribución llamada GPG derivada de la rfc4880 (OpenPGP)

    -
    +
    Gestión de claves públicas

    center

    @@ -407,7 +405,7 @@

    PGP: Pretty Good Privacy

    -
    +
    Gestión de claves públicas

    center

    @@ -415,9 +413,9 @@

    PGP: Pretty Good Privacy

    -
    +
    Gestión de claves públicas
    -

    PGP: grados de seguridad

    +

    PGP: grados de seguridad

    Los amigos puedes avalar otros certificados

    "Confío totalmente en mis amigos, pero solo un poco en los amigos de mis amigos y aún menos en los amigos de los amigos de mis amigos"

    @@ -425,9 +423,9 @@

    PGP: grados de seguridad

    A partir de unos cuantos certificados el nivel de seguridad deja de ser aceptable

    -
    +
    Gestión de claves públicas
    -

    Dónde conseguir claves públicas

    +

    Dónde conseguir claves públicas

    -
    +
    Gestión de claves públicas
    -

    Problema de PGP

    +

    Problema de PGP

    • Muy útil para grupos pequeños: amigos, empresa, universidad...
    • @@ -446,9 +444,9 @@

      Problema de PGP

      PGP / GPG aún se usa, pero no es universal

    -
    +
    Gestión de claves públicas
    -

    Public Key Infrastructure

    +

    Public Key Infrastructure

    Idea: confiar en unas pocas TTPs (Trusted Third Party) que gestionen todos los certificados de Internet

    Se llaman Autoridades de Certificación / Certification Authorities (CAs)

    Las claves pública de estas CAs vienen con:

    @@ -458,9 +456,9 @@

    Public Key Infrastructure

    -
    +
    Gestión de claves públicas
    -

    Cadena de confianza, intermediarios y raíces

    +

    Cadena de confianza, intermediarios y raíces

    Normalmente hay una "cadena de confianza" con varios eslabones

    center

    @@ -468,14 +466,14 @@

    Cadena de confianza, intermediarios y raíces

    -
    +
    Gestión de claves públicas

    center

    -
    +
    Gestión de claves públicas
    -

    Jerarquía de Autoridades de Certificación

    +

    Jerarquía de Autoridades de Certificación

    • CA raíz: sólo emite certificados para CA subordinadas y "revocaciones"
        @@ -492,39 +490,39 @@

        Jerarquía de Autoridades de Certificación

    -
    +
    Gestión de claves públicas
    -

    Autoridades de certificación raíz

    +

    Autoridades de certificación raíz

    Instaladas con el sistema operativo o el navegador

    En la imagen, Root CAs instaladas en mi Firefox

    -
    +
    Gestión de claves públicas
    -

    Revocación

    +

    Revocación

    Los certificados tienen una validez limitada en el tiempo, pero es posible que su contenido deje de ser válido antes

    Si esto pasa, hace falta comunicarlo a la RA (Autoridad de Registro) siguiendo los procedimientos que dictamine la Política de Certificación (o la Declaración de Prácticas de Certificación derivada)

    -
    +
    Gestión de claves públicas
    -

    ¿Cómo sabemos si un certificado ha sido revocado?

    +

    ¿Cómo sabemos si un certificado ha sido revocado?

    • se publica una CRL: Certificate Revocation List
    • se publica en un servidor OCSP
    -
    +
    Criptografía híbrida
    -

    Juntando las piezas

    +

    Juntando las piezas

    Protocolo HTTPS

    -
    +
    Criptografía híbrida
    -

    Criptografía híbrida

    +

    Criptografía híbrida

    • La criptografía simétrica permite cifrar muy rápidamente
        @@ -544,7 +542,7 @@

        Criptografía híbrida

    -
    +
    Criptografía híbrida

    Criptografía híbrida: aprovechar lo mejor de todos los mundos

Simétrica RSAD-H (pp, qq)D-H (, ) EEC
@@ -579,9 +577,9 @@

Criptografía híbrida

-
+
Criptografía híbrida
-

Firma digital: proceso

+

Firma digital: proceso

  • Los algoritmos como RSA solo cifran números enteros de una longitud igual a la clave. Por ejemplo, 4096 bits.
  • Alice podría dividir el documento en bloques de 4096b, pero eso no es eficiente
  • @@ -599,7 +597,7 @@

    Firma digital: proceso

-
+
Criptografía híbrida

Cifrando el hash de un mensaje con nuestra clave privada, aseguramos que ese mensaje lo hemos enviado nosotros y cualquier puede verificarlo

@@ -607,34 +605,34 @@

Firma digital: proceso

Firma digital de un mensaje = cifrado del hash de un mensaje con mi clave privada

-
+
Criptografía híbrida
-

Protocolo Diffie-Hellman, autenticado

+

Protocolo Diffie-Hellman, autenticado

-

Dos usuarios AliceAlice y BobBob, cada uno tiene las claves públicas del otro

+

Dos usuarios y , cada uno tiene las claves públicas del otro

    -
  1. Acuerdan gg y pp primos entre sí
  2. -
  3. Escogen números en secreto aa y bb
  4. +
  5. Acuerdan y primos entre sí
  6. +
  7. Escogen números en secreto y
  8. Se envían entre ellos:
      -
    • AliceBob:A=gamodp,sign(A,SKA)Alice \rightarrow Bob: A=g^{a} \mod p, sign(A, SK_A)
    • -
    • BobAlice:B=gbmodp,sign(A,SKB)Bob \rightarrow Alice: B=g^{b} \mod p, sign(A, SK_B)
    • +
    • +
  9. Verifican la firma de cada lado
  10. Calculan en secreto:
      -
    • AliceAlice: s=Bamodp=gabmodps = B^{a} \mod p = g^{ab} \mod p
    • -
    • BobBob: s=Abmodp=gabmodps = A^{b} \mod p = g^{ab} \mod p
    • +
    • :
    • +
    • :
  11. -
  12. Y usan ss como clave de cifrado un algoritmo simétrico
  13. +
  14. Y usan como clave de cifrado un algoritmo simétrico
-
+
Criptografía híbrida
-

Cifrado híbrido: protocolo HTTPS

+

Cifrado híbrido: protocolo HTTPS

  1. Alice y Bob negocian los parámetros de seguridad
  2. Alice y Bob acuerdan una clave (clave de sesión) utilizando D-H autenticado con sus claves públicas
  3. @@ -643,26 +641,26 @@

    Cifrado híbrido: protocolo HTTPS

-
+
Criptografía híbrida

Protocolo negociado: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

-
+
Criptografía híbrida

Protocolo negociado: TLS_AES_128_GCM_SHA256

-
-

Resumen y referencias

+
+

Resumen y referencias

-
-

Resumen

+
+

Resumen

  • Hemos reducido el problema de la seguridad en un problema de gestión de claves públicas
  • Tres soluciones: @@ -682,8 +680,8 @@

    Resumen

-
-

Referencias

+
+

Referencias

  • Ejemplos de bases de datos de certificados:
      @@ -697,15 +695,15 @@

      Referencias

-
+

Continúa en: Ransomware

-
-

¡Gracias!

+
+

¡Gracias!

-

Recordatorio de cómo funciona el cifrado asimétrico: - Todo el mundo tiene dos claves: @@ -747,5 +745,5 @@

¡Gracias!

- AES_128_GCM: AES con claves de 128 bits en modo GCM. Este no lo hemos visto, añade un hash al cifrado. - SHA256: algoritmo de hash usado por el modo GCM

- TLS: la clave la decide el cliente, no hay D-H - AES_128_GCM: AES con claves de 128 bits en modo GCM. Este no lo hemos visto, añade un hash al cifrado. -- SHA256: algoritmo de hash usado por el modo GCM

\ No newline at end of file +- SHA256: algoritmo de hash usado por el modo GCM

\ No newline at end of file diff --git a/08-ransomware.html b/08-ransomware.html index 13b9cbd..cf18a2f 100644 --- a/08-ransomware.html +++ b/08-ransomware.html @@ -1,4 +1,4 @@ -Criptografía - Ransomware
-

Ransomware

+/* section footer { display: none; } */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Ransomware

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

Cómo se usa la criptografía para atacar, y seguiremos explorando conceptos de criptografía simétrica y asimétrica

    @@ -233,18 +233,18 @@

    Hoy hablamos de...

    Las transparencias de esta sesión están en inglés

-
-

Ransomware

+
+

Ransomware

-
+

Ransomware - Anatomy of an Attack ESI & CISCO, 2018

-
+
  • Malware that encrypts the victim's files, making them inaccessible, and demands a ransom payment to decrypt them
  • recovering the files without the decryption key is an intractable problem
  • @@ -257,19 +257,19 @@

    Ransomware

-
+

center

https://www.coveware.com/blog/2023/4/28/big-game-hunting-is-back-despite-decreasing-ransom-payment-amounts

-
-

Ransomware groups

+
+

Ransomware groups

center

-
+
  • APT41 is a threat group that researchers have assessed as Chinese state-sponsored espionage group that also conducts financially-motivated operations.
  • APT41 has been active since as early as 2012.
  • @@ -283,14 +283,14 @@

    Ransomware groups

-
+

center

Christiaan Beek in Twitter, 2021

-
+

Most Common Ransomware Variants in Q2 2023

@@ -298,8 +298,8 @@

Ransomware groups

-
-

Ransomware-as-a-service

+
+

Ransomware-as-a-service

center

    @@ -311,15 +311,15 @@

    Ransomware-as-a-service

-
+

On August, 2021, a disgruntled member of the Conti ransomware program leaked the manuals and technical guides used by the Conti gang to train affiliate members on how to access, move laterally, and escalate access inside a hacked company and then exfiltrate its data before encrypting files.

https://cryptographybuzz.com/ransomware-affiliate-leaks-conti/

-
-

Defense against ransomware

+
+

Defense against ransomware

  • Backup your assests!
  • @@ -335,13 +335,13 @@

    Defense against ransomware

-
-

Ransomware as an unplanned backup

+
+

Ransomware as an unplanned backup

Backups do not stop attackers! Asking for a ransom for NOT PUBLISHING your data is a trend since 2021

center

-
+

center

Check: https://ransomwatch.telemetry.ltd/#
@@ -349,21 +349,21 @@

Ransomware as an unplanned backup

-
-

Entry point

+
+

Entry point

center

-
+

-
+

-
-

Example: Babuk

+
+

Example: Babuk

Modern Ransomware and exfiltration

  • First, it kills security services: antivirus, backup services...
  • @@ -372,7 +372,7 @@

    Example: Babuk

-
+
  1. Babuk uses RtlGenRandom to generate 4 random buffers. Two of which are used as ChaCha8 keys, and the other two are used as ChaCha8 nonces.
  2. It will encrypt the second ChaCha8 key using the first key and nonce. After that, the first key is then encrypted using the encrypted second key and nonce.
  3. @@ -383,7 +383,7 @@

    Example: Babuk

-
+
  1. Using FindFirstFileW and FindNextFileW calls, it goes through each directory to look for files and sub-directories.
  2. Babuk only goes down 16 directory layers deep, so it potentially does not encrypt every single folders in the drive to save time.
  3. @@ -393,12 +393,12 @@

    Example: Babuk

-
+

center

-
-

Recommendations

+
+

Recommendations

-
-

References

+
+

References

-
+

2023 CrowdStrike Global Threat Report. This year’s highlights include:

  • Nation-state adversaries engaged in relentless computer network operations throughout 2022, emphasizing the integral role these operations play in supporting state goals
  • @@ -427,15 +427,15 @@

    References

-
+

Ejercicios: https://colab.research.google.com/github/Juanvvc/crypto/blob/master/ejercicios/08/Ransomware Venus.ipynb

-
-

¡Gracias!

+
+

¡Gracias!

-

El ransomware es uno de los mayores peligros para una compañía, y también uno de los ataques más lucrativos... ...hasta 2020. Enseguida veremos qué pasó en 2020 y cómo respondieron los atacantes

The attackers are well known, wealthy and they do not hide themselves. @@ -469,5 +469,5 @@

¡Gracias!

- Los grupos de atacantes conocen estas páginas - Si tu información está ahí, es necesario darla como comprometida - En enlace propuesto https://www.ransomwatch.org/ (gestionado por investigadores de seguridad) hace capturas periódicas de las páginas de muchos grupos conocidos que tienen sus páginas en .onion -- Podéis encontrar "List of ransomware groups" en varios sitios. Los enlaces dejan de funcionar a menudo

\ No newline at end of file +- Podéis encontrar "List of ransomware groups" en varios sitios. Los enlaces dejan de funcionar a menudo

\ No newline at end of file diff --git a/09-esteganografia.html b/09-esteganografia.html index 28e672b..c0b06f4 100644 --- a/09-esteganografia.html +++ b/09-esteganografia.html @@ -1,4 +1,4 @@ -Criptografía - Esteganografía
-

Esteganografía

+/* section footer { display: none; } */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Esteganografía

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Hoy hablamos de...

+
+

Hoy hablamos de...

  1. Esteganografía
  2. @@ -235,18 +235,18 @@

    Hoy hablamos de...

-
-

Esteganografía

+
+

Esteganografía

-
-

Esteganografía

+
+

Esteganografía

Ocultación de información dentro de otra información más común, un documento que no sea secreto, o un documento que no levante sospechas

-
-

Usos

+
+

Usos

  • Confidencialidad: enviar información en un canal oculto
  • Plausible deniability: ¡no estoy haciendo nada malo!
  • @@ -256,21 +256,21 @@

    Usos

-
-

Técnicas de ocultación de información

+
+

Técnicas de ocultación de información

center

"A Comparative Analysis of Information Hiding Techniques for Copyright Protection of Text Documents",Milad Taleby Ahvanooey,1 Qianmu Li, Hiuk Jae Shim, and Yanyan Huang. Security and Communication Networks / 2018

-
-

Proceso

+
+

Proceso

-
-

Propiedades

+
+

Propiedades

(Deseables o no)

  • Que no pueda ser detectado
  • @@ -280,14 +280,14 @@

    Propiedades

-
-

Ejemplos

+
+

Ejemplos

Watermarking y fingerprinting

-
-

Imágenes

+
+

Imágenes

-
+

-
+

Look Scanned

-
+

https://www.bbc.com/future/article/20170607-why-printers-add-secret-tracking-dots

-
+

-
-

Textos

+
+

Textos

  • A la vista
  • @@ -332,30 +332,30 @@

    Textos

-
-

Shaadow.io

+
+

Shaadow.io

center

https://www.elladodelmal.com/2022/04/como-poner-una-marca-oculta-shaadow-los.html

-
-

Text steganography: kerning spaces

+
+

Text steganography: kerning spaces

center

-
-

Text steganography: rejillas

+
+

Text steganography: rejillas

center

-
-

Esteganografía para atacantes

+
+

Esteganografía para atacantes

-
-

Usos

+
+

Usos

  • Evasión de antivirus: Ocultar el malware dentro de archivos/protocolos aparentemente legitimos
  • Evasión de cortafuegos: comunicaciones prohibidas a través de protocolos permitidos
  • @@ -363,8 +363,8 @@

    Usos

-
-

Network steganography

+
+

Network steganography

  • Protocolo IPv4: StegTunnel (campo identificación datagramas IP)
  • Protocolo TCP: Covert_tcp21, StegTunnel (campo número de secuencia)
  • @@ -384,57 +384,57 @@

    Network steganography

-
-

DNS tunneling

+
+

DNS tunneling

center

https://help.zscaler.com/zia/about-dns-tunnel-detection

-
-

Malware en archivos

+
+

Malware en archivos

center

https://blog.reversinglabs.com/blog/malware-in-images

-
-

Polyglots

+
+

Polyglots

Con esta técnica, un archivo puede ser una cosa u otra según un contexto

-
+

Qbot durante 2022:

-
<embed src="data:image/svg+xml;
+
<embed src="data:image/svg+xml;
 base64,SDKSJdisdskskjskdsk432432...."
 ...
-
+

Viejo bug en Explorer: algunas imágenes podían visualizarse o ejecutarse:

-
<img src="cat.png" />
+
<img src="cat.png" />
 
 <script src="cat.png"></script>
-
+

https://www.blackhat.com/docs/eu-15/materials/eu-15-Shah-Stegosploit-Exploit-Delivery-With-Steganography-And-Polyglots.pdf
https://www.bleepingcomputer.com/news/security/attackers-use-svg-files-to-smuggle-qbot-malware-onto-windows-systems/

-
+

center

https://ia802801.us.archive.org/6/items/ftireportintojeffbezosphonehack/FTI-Report-into-Jeff-Bezos-Phone-Hack_text.pdf

-
-

Ataques y detección

+
+

Ataques y detección

-
-

Ataques

+
+

Ataques

  • Activos: el atacante quiere quitar la marca
  • Pasivos: el atacante quiere detectar la marca
  • @@ -443,16 +443,16 @@

    Ataques

-
-

Estimación de la marca

+
+

Estimación de la marca

center

https://ai.googleblog.com/2017/08/making-visible-watermarks-more-effective.html

-
-

Entropía

+
+

Entropía

  • Medida de la aleatoriedad de un archivo
  • @@ -464,13 +464,13 @@

    Entropía

-
+

center

Ejemplo del archivo cifrado del primer ejericio. Fíjate: al principio y al final no tiene entropía, y esas son las partes "que estaban a cero"

-
-

Administradores web

+
+

Administradores web

  • Re-codifica las imágenes subidas por los usuarios
  • Monitoriza librerías JavaScript
  • @@ -478,12 +478,12 @@

    Administradores web

-
-

Referencias

+
+

Referencias

-
-

Referencias

+
+

Referencias

-
-

¡Gracias!

+
+

¡Gracias!

-

DLP: Data Leak Protection DRM: Digital Right Management

¿Es posible detectarlo? @@ -504,5 +504,5 @@

¡Gracias!

Si la imagen se imprime, ¿el mensaje oculto se mantiene?

Image: https://static.bhphotovideo.com/explora/sites/default/files/proof.jpg

¿Se mantiene la marca después de convertir la imagen? -Images: https://blog.fastforwardlabs.com/images/2017/06/stego_images.jpg

Los de shadow.io dicen que pueden mantener la marca incluso después de imprimir el texto a papel

\ No newline at end of file +Images: https://blog.fastforwardlabs.com/images/2017/06/stego_images.jpg

Los de shadow.io dicen que pueden mantener la marca incluso después de imprimir el texto a papel

\ No newline at end of file diff --git a/A1-glosario.html b/A1-glosario.html index 81e1a71..17708fe 100644 --- a/A1-glosario.html +++ b/A1-glosario.html @@ -1,4 +1,4 @@ -Criptografía - Glosario
-

Glosario

+ the YAML header: section: | */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Glosario

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
+
  1. Definiciones generales
  2. Matemáticas
-
-

Definiciones generales

+
+

Definiciones generales

-
-

Definiciones básicas

+
+

Definiciones básicas

    -
  • mm texto en claro: mensaje que queremos proteger
  • -
  • cc mensaje cifrado: mensaje protegido
  • -
  • e()e() y d()d() algoritmos de cifrado y descifrado: convierten un texto en claro en un mensaje cifrado o al revés
  • -
  • k1k_1 y k2k_2: clave criptográfica de cifrado o descifrado: parte secreta de los algoritmos de cifrado y descifrado
  • +
  • texto en claro: mensaje que queremos proteger
  • +
  • mensaje cifrado: mensaje protegido
  • +
  • y algoritmos de cifrado y descifrado: convierten un texto en claro en un mensaje cifrado o al revés
  • +
  • y : clave criptográfica de cifrado o descifrado: parte secreta de los algoritmos de cifrado y descifrado
-
-

Modelo de sistema criptográfico

+
+

Modelo de sistema criptográfico

center

    -
  • Mensaje o texto en claro: mm
  • -
  • Cifrado: c=e(k1,m)c = e(k_1, m)
  • -
  • Descifrado: m=d(k2,m)m' = d(k_2, m)
  • -
  • Objetivo: m=mm=m'
  • +
  • Mensaje o texto en claro:
  • +
  • Cifrado:
  • +
  • Descifrado:
  • +
  • Objetivo:
-
-

Los amigos de Alice

+
+

Los amigos de Alice

Por tradición, cuando se describen protocolos criptográficos:

    @@ -270,8 +270,8 @@

    Los amigos de Alice

-
-

Servicios de seguridad principales

+
+

Servicios de seguridad principales

  • Confidencialidad: solo el legítimo destinatario debe poder ser capaz de leer el contenido del mensaje original o de sacar cualquier información estadística.
  • Integridad: el destinatario debe ser capaz de verificar que el contenido del mensaje original no ha sido modificado
  • @@ -280,8 +280,8 @@

    Servicios de seguridad principales

-
-

Servicios de seguridad secundarios

+
+

Servicios de seguridad secundarios

  • Autorización: ¿está el interlocutor autorizado a acceder a estos datos?
  • Acuerdo de claves: permite que un grupo de actores generen un número (pseudo) aleatorio sin que nadie externo al grupo pueda conocerlo
  • @@ -290,21 +290,21 @@

    Servicios de seguridad secundarios

-
-

Primitivas criptográficas

+
+

Primitivas criptográficas

    -
  • Sin clave: el emisor usa sólo el mensaje mm como argumento de la función criptográfica. Ejemplo: hash. No hay clave.
  • -
  • Clave simétrica: misma clave k=k1=k2k=k_1=k_2 para cifrar y descifrar un mensaje mm. Emisor y receptor deben tener la misma clave. Ejemplo: AES, ChaCha...
  • -
  • Clave asimétrica: claves diferentes para cifrar k1k_1 y descifrar k2k_2 un mensaje mm. Si el emisor solo conoce k1k_1. puede cifrar pero no descifrar. Ejemplo: RSA
  • +
  • Sin clave: el emisor usa sólo el mensaje como argumento de la función criptográfica. Ejemplo: hash. No hay clave.
  • +
  • Clave simétrica: misma clave para cifrar y descifrar un mensaje . Emisor y receptor deben tener la misma clave. Ejemplo: AES, ChaCha...
  • +
  • Clave asimétrica: claves diferentes para cifrar y descifrar un mensaje . Si el emisor solo conoce . puede cifrar pero no descifrar. Ejemplo: RSA
-
+

-
-

Servicios de seguridad a primitivas

+
+

Servicios de seguridad a primitivas

@@ -337,8 +337,8 @@

Servicios de seguridad a primitivas

-
-

Acrónimos

+
+

Acrónimos

  • D-H: Protocolo de acuerdo de claves Diffie-Hellman
  • DLP: Problema del logaritmo discreto
  • @@ -348,63 +348,43 @@

    Acrónimos

-
-

Matemáticas

+
+

Matemáticas

-
-

Logaritmos y exponenciaciones

-

(xa)(xb)=xa+b(xa)b=xablogx(ab)=logxa+logxbalogxb=logx(ba)\begin{aligned} -(x^a)(x^b) &= x^{a+b} \\ -(x^a)^b &= x^{ab} \\ -\log_x (ab) &= \log_x a + \log_x b \\ -a \log_x b &= \log_x (b^a) \\ -\end{aligned} -

+
+

Logaritmos y exponenciaciones

+

-
-

Aritmética modular

-

amodb=ma \mod b = m -

Significa: aa divivido entre bb da lo que sea y de resto mm. Lo único que interesa en la aritmética modular es el resto de la división.

+
+

Aritmética modular

+

Significa: divivido entre da lo que sea y de resto . Lo único que interesa en la aritmética modular es el resto de la división.

Ejemplos:

-

9mod3=010mod3=111mod3=212mod3=013mod3=1\begin{aligned} -9 \mod 3 &= 0 \\ -10 \mod 3 &= 1 \\ -11 \mod 3 &= 2 \\ -12 \mod 3 &= 0 \\ -13 \mod 3 &= 1 -\end{aligned} -

+

-
-

XOR

-

Operación XOR de dos cadenas binarias: ab=ca \otimes b=c

-

El bit de la posición xx de cc, cxc_x tiene: (1) axa_x si el bit bxb_x es 0; (2) el bit cambiado de axa_x si bxb_x es 1.

-

También se puede entender como que cc es la suma binaria de aa y bb, sin acarreo.

-

...1010......1100...=...0110......1010......0101...=...1111......1010......0000...=...1010......1010......1111...=...0101...\begin{aligned} -...1010...\otimes...1100...&=...0110... \\ -...1010...\otimes...0101...&=...1111... \\ -...1010...\otimes...0000...&=...1010... \\ -...1010...\otimes...1111...&=...0101... -\end{aligned} -

+
+

XOR

+

Operación XOR de dos cadenas binarias:

+

El bit de la posición de , tiene: (1) si el bit es 0; (2) el bit cambiado de si es 1.

+

También se puede entender como que es la suma binaria de y , sin acarreo.

+

-
+

Propiedades de XOR. Fíjate:

    -
  • a0000...0000=aa \otimes 0000...0000 = a. XOR con todos 0, es el mismo mensaje
  • -
  • a1111...1111=NOT aa \otimes 1111...1111 = NOT\ a. XOR con todos 1, cambia todos los bits
  • -
  • ab=baa \otimes b = b \otimes a. XOR es conmutativo.
  • -
  • a(bc)=(ab)ca \otimes (b \otimes c) = (a \otimes b) \otimes c. XOR es asociativo.
  • +
  • . XOR con todos 0, es el mismo mensaje
  • +
  • . XOR con todos 1, cambia todos los bits
  • +
  • . XOR es conmutativo.
  • +
  • . XOR es asociativo.
-

XOR es una operación muy común en criptografía que usaremos en el tema 3, y la base de muchos algoritmos criptográficos: el mensaje cifrado es muchas veces el mensaje en claro \otimes algo, como por ejemplo una clave.

+

XOR es una operación muy común en criptografía que usaremos en el tema 3, y la base de muchos algoritmos criptográficos: el mensaje cifrado es muchas veces el mensaje en claro algo, como por ejemplo una clave.

-
-

¡Gracias!

+
+

¡Gracias!

-

No confundas clave criptográfica y contraseña. Contraseña: texto que un humano recuerda para entrar en algún sitio, abrir una clave criptográfica... Las contraseñas no suelen tener la suficiente seguridad para un protocolo criptográfico. @@ -413,5 +393,5 @@

¡Gracias!

Si hacemos loquesea módulo N, el resultado estará entre 0 y N-1. Es decir, hay N posible resultados -Usaremos constantemente la aritmética modular en sistemas de cifrado asimétrico (tema 4 y siguientes)

Pero solo XOR no es suficiente para un algoritmo: si la clave es 0000, ¡el texto cifrado será el texto en claro! Eso es lo que nos permitió romper el sistema de los Cuentacuentos en la primera sesión

\ No newline at end of file +Usaremos constantemente la aritmética modular en sistemas de cifrado asimétrico (tema 4 y siguientes)

Pero solo XOR no es suficiente para un algoritmo: si la clave es 0000, ¡el texto cifrado será el texto en claro! Eso es lo que nos permitió romper el sistema de los Cuentacuentos en la primera sesión

\ No newline at end of file diff --git a/A2-rng.html b/A2-rng.html index 12ec156..0e4b282 100644 --- a/A2-rng.html +++ b/A2-rng.html @@ -1,4 +1,4 @@ -Criptografía - RNG y HSM
-

Generación de números aleatorios

+ the YAML header: section: | */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Generación de números aleatorios

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Contenido

+
+

Contenido

  1. True Random Number Generator
  2. @@ -231,14 +231,14 @@

    Contenido

-
-

RNG

+
+

RNG

ó TRNG (True Random Number Generator)

-
-

Utilidad

+
+

Utilidad

Muchos algoritmos criptográficos necesitan generar números realmente aleatorios.

  • nonces
  • @@ -249,8 +249,8 @@

    Utilidad

    center

-
-

Generación

+
+

Generación

¿Cómo implementamos un RNG si no es algorítmico?

  • Recopilando eventos de entrada (I/O) y acumulando sus parámetros en un proceso llamado "reducción"
  • @@ -259,8 +259,8 @@

    Generación

    center

-
-

Fuentes de aletoriedad I/0

+
+

Fuentes de aletoriedad I/0

Necesitamos ruido

  • UI (ratón, teclado...): <<1kbps después de reducción
  • @@ -271,8 +271,8 @@

    Fuentes de aletoriedad I/0

    Esto limita la velocidad de cifrado: no podemos cifrar más rápido que la generación de números aleatorios

-
-

Validación

+
+

Validación

Los RNG (y PRNG) deben tener unas propiedades para las secuencias generadas:

La secuencia de números (o de bits) debe tener una distribución uniforme a todos los niveles

    @@ -280,14 +280,14 @@

    Validación

  • Por grupos de bits: el 00, el 01, el 10 y el 11 deben aparecer con probabilidad 0.25
  • Y así
-

Para nn bits generados, la probabilidad de una secuencia dada es la misma de la de cualquier otra: 2n2^{−n}

+

Para bits generados, la probabilidad de una secuencia dada es la misma de la de cualquier otra:

Adicional: Verifying randomness y también Cryptographic Algorithm Validation Program

-
-

Vulnerabilidades

+
+

Vulnerabilidades

-
-

Generación de claves

+
+

Generación de claves

¿Para generar claves hemos de utilizar PRNG o RNG? Mejor RNG pero si no está disponible podemos usar PRNG a condición que:

  • el PRNG se alimente de una semilla RNG
  • @@ -311,28 +311,28 @@

    Generación de claves

-
-

Dispositivos ad-hoc para RNG

+
+

Dispositivos ad-hoc para RNG

Usados en HSM, SmartCards, algunas CPUs...

-
-

Ruido térmico

+
+

Ruido térmico

center

Una resistencia a temperatura ambiente tiene electrones libres que se mueven aleatoriamente (carga negativa) y podemos medir el desequilibrio momentáneo con un conversor Analógico/Digital

El conversor dará una secuencia indefinida de bits aleatorios

-
-

Generador cuántico

+
+

Generador cuántico

Con una fuente de luz apuntamos a un espejo semireflectante; dos fotodetectores detectan uno u otro el fotón de forma totalmente aleatoria

-
-

Uniformidad

+
+

Uniformidad

Ambas fuentes de ruido generan valores aleatorios pero no uniformes

  • RNG térmico: limitado por el ancho de banda (señal)
  • @@ -340,8 +340,8 @@

    Uniformidad

-
-

Reducción

+
+

Reducción

  • Se descartan las secuencias seguidas de '1' y de '0' y sólo se genera un bit random en los cambios. Por ejemplo:
      @@ -354,8 +354,8 @@

      Reducción

-
-

Fuentes Random en Linux

+
+

Fuentes Random en Linux

En Linux (Ubuntu) tenemos dos fuentes random:

  • /dev/random: salida RNG basada en I/O. Flujo lento en el rango de bps
  • @@ -364,14 +364,14 @@

    Fuentes Random en Linux

    En otros Linux tenemos diferentes combinaciones de /dev/random y con aleatoriedad obtenida de diferentes fuentes

-
-

HSM

+
+

HSM

Hardware Secure Module

-
-

Funciones de un HSM

+
+

Funciones de un HSM

las funciones de un HSM son:

  • generar claves "de calidad"
  • @@ -382,23 +382,23 @@

    Funciones de un HSM

-
-

HSM portable

+
+

HSM portable

center

-
-

HSM embedido

+
+

HSM embedido

center

-
-

HSM servicio en red

+
+

HSM servicio en red

center

-
-

Requisitos

+
+

Requisitos

Para implementar las funciones anteriores hace falta:

  • generador de claves aleatories (RNG)
  • @@ -412,13 +412,13 @@

    Requisitos

-
-

FIPS 140-2

+
+

FIPS 140-2

Los HSM pueden ser certificados según FIPS 140-2 en diferentes niveles:

The security requirements cover areas related to the secure design and implementation of a cryptographic module. These areas include cryptographic module specification; cryptographic module ports and interfaces; roles, services, and authentication; finite state model; physical security; operational environment; cryptographic key management; electromagnetic interference/electromagnetic compatibility (EMI/EMC); self-tests; design assurance; and mitigation of other attacks.

-
+
  • FIPS 140-2 nivel 1: sin contramedidas físicas (son librerías); análisis lógico y de algoritmos
  • FIPS 140-2 nivel 2: nivel 1, y debe disponer de contramedidas pasivas para detectar el acceso físico (sellos, evidencias)
  • @@ -427,20 +427,20 @@

    FIPS 140-2

-
+

para gestionar claves de usuarios para firma avanzada : FIPS 140-2 nivel 2

para autoridades de validación o de sello de tiempo : FIPS 140-2 nivel 2

para autoridades de certificación : FIPS 140-2 nivel 3

-
-

PKCS #11

+
+

PKCS #11

PKCS #11 es una especificación de la API de los HSM en lenguaje C (literalmente un .h)

PKCS: Public Key Cryptographic Standard. Estándares de facto publicados por RSA Labs. Inc. (ahora EMC2 (ahora Dell Technologies)); actualmente la gestión del estándar ha pasado a OASIS

-
-

PKCS #11: operaciones

+
+

PKCS #11: operaciones

  • login, gestión de sesión
  • generación de claves simétricas/asimétricas
  • @@ -454,28 +454,28 @@

    PKCS #11: operaciones

-
-

Partición de Secretos

+
+

Partición de Secretos

En claves importantes (e.g. la de una CA raíz) un HSM puede no ser suficiente (¿y si lo roban?)

En estos casos podemos dividir la clave en trozos:

  • Dividir la cadena de bits en trozos disminuye la seguridad: si el atacante adquiere una parte, tiene que adivinar menos bits de la otra.
  • -
  • \otimes entre las claves: seguro incondicionalmente, pero frágil (la clave se pierde si se pierde una parte)
  • +
  • entre las claves: seguro incondicionalmente, pero frágil (la clave se pierde si se pierde una parte)
  • Algoritmo de Shamir: seguro incondicionalmente y robusto. Permite recuperar la clave si se dispone de al menos M de los N trozos.
-
+

¿Lo podemos hacer "por software"?

Sí, pero el secreto ha estado "en claro" en la RAM del ordenador por tanto una vez recuperado el secreto su exposición ha aumentado notablemente

Pero en HSM es una propiedad habitual

-
-

¡Gracias!

+
+

¡Gracias!

-

La reducción de parámetros implica reducir el ancho de banda: generar -números aleatorios es lento porque hay que esperar a tener datos de UI

En Linux, casi siempre os interesará leer de urandom: leer de random es muy lento y puede bloquearse, esperando a tener suficientes eventos

\ No newline at end of file +números aleatorios es lento porque hay que esperar a tener datos de UI

En Linux, casi siempre os interesará leer de urandom: leer de random es muy lento y puede bloquearse, esperando a tener suficientes eventos

\ No newline at end of file diff --git a/index.html b/index.html index 1cce8ad..927a5fc 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ -Criptografía - Índice
-

Criptografía y teoría de códigos

+ the YAML header: section: | */div#\:\$p>svg>foreignObject>section[data-marpit-scope-rtjNV9Jp] ol{counter-reset:li 5}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+

Criptografía y teoría de códigos

Presentación

-

Juan Vera del Campo - juan.vera@campusviu.es

+

Juan Vera del Campo - juan.vera@professor.universidadviu.com

-
-

Temario

+
+

Temario

  1. Conceptos básicos
  2. @@ -238,7 +238,7 @@

    Temario

-
+
  1. Funciones de Hash y Blockchain
  2. TLS y Public Key Infrastructure
  3. @@ -247,15 +247,15 @@

    Temario

-
-

Presentación

+
+

Presentación

-
-

Sobre mí

+
+

Sobre mí

Dr. Juan Vera (Juanvi)

-

juan.vera@campusviu.es

+

juan.vera@professor.universidadviu.com

Intereses:

-
-

Objetivos

+
+

Objetivos

  • Introducción a la criptografía moderna, para qué se usa y por qué es tan complicada
      @@ -279,8 +279,8 @@

      Objetivos

-
-

Intrucciones de uso de las transparencias

+
+

Intrucciones de uso de las transparencias

Versión más actualizada:

-
-

Instrucciones de uso de las actividades

+
+

Instrucciones de uso de las actividades

-

Los ejercicios son notebook de Jupyter ó Google Collab:

+

Los ejercicios son notebook de Google Colab:

    -
  1. Si usas el enlace de Google Collab de la zona de actividades, no necesitas instalar nada en tu PC.
  2. +
  3. Después de los temas 2, 3 y 5 se incluirá el enlace a Google Colab en la zona de Actividades de la asignatura
  4. Comandos básicos:
    • INTRO: edita línea actual
    • SHIFT+INTRO: ejecuta línea actual
  5. -
  6. Presenta las actividades como PDF: imprime a PDF
  7. -
  8. Tutoriales: - -
  9. +
  10. Las actividades deben resolverse individualmente
  11. +
  12. Aunque haya código, no es necesario saber programar: son preguntas de texto libre
+

Presenta las actividades como PDF: imprimir a PDF

-
-

Evaluación

+
+

Evaluación

    -
  • 50% examen. Alrededor de 30 preguntas "tipo test"
  • -
  • 50% ejercicios. Cuatro ejercicios en total, asociados a los temas 3, 4, 5 y 6. Se recomienda realizarlos después de cada uno de estos temas.
  • +
  • Puntuación. Dos partes: +
      +
    • 50% examen
    • +
    • 50% actividades
    • +
    +
  • +
  • Son tres actividades en total, se recomienda realizarlas después de los temas 2, 3 y 5 +
      +
    • No es necesario superar las actividades individuales, solo que la media de todos las actividades sea superior a 5
    • +
    • Las actividades no presentados se puntúan como 0
    • +
    • Se pueden presentar las actividades hasta el día del examen correspondiente
    • +
    +
  • +
  • Es necesario superar con nota media de 5 cada parte por separado
  • +
  • En segunda convocatoria, se mantiene la nota de aquella parte que fue superada en primera convocatoria
-

Para superar la asignatura, es necesario obtener más de un 5 sobre 10 en el examen y en los ejercicios

-
-

Conocimientos recomendables

+
+

Conocimientos recomendables

    -
  • Álgebra básica, teoría de conjuntos, probabilidad
  • +
  • Álgebra básica, probabilidad
  • Conocimientos básicos de programación: ejemplos en Python
  • Conocimientos básicos de redes: cómo funciona la WWW.
-
-

Bibliografía

+
+

Bibliografía

-
+

Continúa en: Principios básicos

-
-

¡Gracias!

+
+

¡Gracias!

-

Esto es un ejemplo de notas de profesor. Aquí habrá información adicional, aclaraciones, referencias o explicaciones más largas de los conceptos de la transparencia

\ No newline at end of file +

Esto es un ejemplo de notas de profesor. Aquí habrá información adicional, aclaraciones, referencias o explicaciones más largas de los conceptos de la transparencia

Las actividades refuerzan el contenido de las clases e incluyen información adicional

\ No newline at end of file