diff --git a/02-historia.html b/02-historia.html index 61949aa..71b31df 100644 --- a/02-historia.html +++ b/02-historia.html @@ -215,7 +215,7 @@ /* hide footer and pagination */display:none}div#\:\$p>svg>foreignObject>section.last-slide a,div#\:\$p>svg>foreignObject>section.last-slide p{color:#111} /* You can add custom style here. VSCode supports this. Other editor might need these custom code in - the YAML header: section: | */div#\:\$p>svg>foreignObject>section[data-marpit-scope-5pGODMBy] th{background-color:#ddd;color:black;font-weight:normal;border:0} + the YAML header: section: | */div#\:\$p>svg>foreignObject>section[data-marpit-scope-kpZNnlUO] th{background-color:#ddd;color:black;font-weight:normal;border:0} /*td:first-child { background-color: var(--main-color);} th:first-child { background-color: var(--main-color);}*/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

@@ -273,7 +273,7 @@

Mecanismos clásicos de cifrado

https://medium.com/@maitri.51/securing-the-digital-realm-a-closer-look-at-s-boxes-and-p-boxes-in-encryption-b14b35f7e139

-
+
Criptografía clásica

Sustitución monoalfabética:

diff --git a/03-simetrica.html b/03-simetrica.html index 067d82c..949e792 100644 --- a/03-simetrica.html +++ b/03-simetrica.html @@ -217,13 +217,13 @@ Other editor might need these custom code in the YAML header: section: | */ /* section header { display: none; } */ -/* section footer { display: none; } */div#\:\$p>svg>foreignObject>section[data-marpit-scope-LHSQ1Zkw]{font-size:180%}div#\:\$p>svg>foreignObject>section[data-marpit-scope-LHSQ1Zkw]{--marpit-root-font-size:180%}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%}
+/* section footer { display: none; } */div#\:\$p>svg>foreignObject>section[data-marpit-scope-OyUpptIR]{font-size:180%}div#\:\$p>svg>foreignObject>section[data-marpit-scope-OyUpptIR]{--marpit-root-font-size:180%}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@professor.universidadviu.com

-
+

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:

@@ -236,23 +236,23 @@

Como decíamos ayer...

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

-
+

Hoy hablamos de...

  1. Confidencialidad computacional
  2. Cifrado de flujo
  3. ChaCha20
  4. -
  5. Cifrado de bloque
  6. +
  7. Cifrado de bloque
  8. Cifrado AES
  9. -
  10. Resumen
  11. +
  12. Resumen
-
+
Confidencialidad computacional

Confidencialidad computacional

-
+
Confidencialidad computacional

Relajando la perfección

    @@ -264,7 +264,7 @@

    Relajando la perfección

    Imagen: Nitin Jain, Birgit Stiller, Imran Khan, Dominique Elser, Christoph Marquardt & Gerd Leuchs (2016) "Attacks on practical quantum key distribution systems (and how to prevent them)". DOI: 10.1080/00107514.2016.1148333

-
+
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 dado y la probabilidad de coinciden:

@@ -276,7 +276,7 @@

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

Informalmente: un atacante no puede descifrar el mensaje:

@@ -287,7 +287,7 @@

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

@@ -299,11 +299,11 @@

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

center

-
+
Confidencialidad computacional

Tamaños recomendados de clave

@@ -317,13 +317,13 @@

Tamaños recomendados de clave

Otras recomendaciones: https://www.keylength.com/en/compare/

-
+
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

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

@@ -331,7 +331,7 @@

Rompiendo algoritmos

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

    @@ -339,7 +339,7 @@

    Criptografía simétrica: tipos<
  • Cifrado de bloque. Heredero de "la tradición" Vigenère: el mensaje se divide en bloques que se cifran por separado
-
+
Confidencialidad computacional
@@ -369,18 +369,18 @@

Criptografía simétrica: tipos<

-
+
Cifrado de flujo

Cifrado de flujo

-
+
Cifrado de flujo

Es una implementación práctica de one-time-pad (cifrado perfecto, Vernam)

Recuerda: para cifrado perfecto necesitábamos una clave tan larga como el mensaje

Para después hacer:

-
+
Cifrado de flujo

En cifrado de flujo lo que haremos es generar una

@@ -390,25 +390,25 @@

Cifrado de flujo

para después hacer:

-
+
Cifrado de flujo

Cifrado de flujo: algoritmo

center

-
+
Cifrado de flujo

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 ) 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 , 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

@@ -420,7 +420,7 @@

PRNG: seguridad

Información adicional: https://www.incibe-cert.es/blog/comprobando-aleatoriedad

-
+
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...
  • @@ -428,7 +428,7 @@

    PRNG: seguridad

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

@@ -436,13 +436,13 @@

PRNG: seguridad

(vamos a repetir esto muchas veces en el curso)

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

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

@@ -454,13 +454,13 @@

Intento 1

Información adicional: Chosen plaintext attacks

-
+
Cifrado de flujo

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

Generar variaciones de las claves en cada transmisión

@@ -469,14 +469,14 @@

Intento 3

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

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

-
+
Cifrado de flujo

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 (nonce) diferente para cada mensaje

@@ -487,7 +487,7 @@

Seguridad de los algoritmos de flu
  • o ambas, que es lo mejor
  • -
    +
    Cifrado de flujo

    El cifrado de flujo es tan seguro como:

      @@ -501,7 +501,7 @@

      Seguridad de los algoritmos de flu

    -
    +
    Cifrado de flujo

    Ejemplos

    @@ -517,7 +517,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:

      @@ -529,11 +529,11 @@

      Ejemplos

    • Hoy en día considerado roto y no se recomienda su uso.
    -
    +
    ChaCha20

    ChaCha20

    -
    +
    ChaCha20

    ChaCha20: características

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

    @@ -546,7 +546,7 @@

    ChaCha20: características

  • Varias VPNs
  • -
    +
    ChaCha20

    Cifrado con Python

    import json
    @@ -569,7 +569,7 @@ 

    Cifrado con Python

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

    (inciso: Base64 no es un cifrado)

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

    @@ -587,7 +587,7 @@

    (inciso: Base64 no es un cifrado)

  • Pero es común cifrar algo y después enviarlo codificado como Base64
  • -
    +
    ChaCha20

    Descifrado con Python

    # La clave key se ontiene por canal seguro
    @@ -600,12 +600,12 @@ 

    Descifrado con Python

    print("The message was " + plaintext)
    -
    +
    ChaCha20

    Diagrama de flujo

    center

    -
    +
    ChaCha20

    Estado inicial

    @@ -653,7 +653,7 @@

    Estado inicial

  • "expand 32-byte k" = 0x657870616e642033322d62797465206b es un número "no llevo nada en la manga"
  • -
    +
    ChaCha20

    Función quarter round QR

    @@ -666,7 +666,7 @@

    Función quarter round QR

    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) (			\
    @@ -704,7 +704,7 @@ 

    Función quarter round QR

    Fuente: Wikipedia)

    -
    +
    ChaCha20

    Variantes

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

    @@ -742,16 +742,16 @@

    Variantes

    The Salsa20 family of stream ciphers, Daniel J. Bernstein, 2007

    -
    +
    ChaCha20

    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

    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

    @@ -761,7 +761,7 @@

    Cifrado de bloque

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

    -
    +
    Cifrado de bloque

    Construcción de cifrados de bloque

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

    @@ -773,7 +773,7 @@

    Construcción de cifrados de bl

    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 y en lugar de las y utilizadas hasta ahora

    -
    +
    Cifrado de bloque

    Sustitución polialfabética

    @@ -806,7 +806,7 @@

    Sustitución polialfabética

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

    -
    +
    Cifrado de bloque

    Transposición

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

    @@ -838,13 +838,13 @@

    Transposición

    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 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.
    • @@ -853,7 +853,7 @@

      Composición

      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

      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

    @@ -868,11 +868,11 @@

    Cifrado TES / 3DES

  • Se usa poder aprovechar todo el hardware DES que ya existía desde 1976
  • -
    +
    AES

    Cifrado AES

    -
    +
    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.

    @@ -886,7 +886,7 @@

    Advanced Encryption Standard (AES)

    background: https://whatsupcourtney.com/wp-content/uploads/2017/10/Things-to-do-in-Leuven-52-e1560945504897.jpeg

    -
    +
    AES

    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.

    @@ -903,35 +903,35 @@

    Algoritmo

    -
    +
    AES

    center

    -
    +
    AES

    SubBytes

    center Wikipedia

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

    -
    +
    AES

    ShiftRows

    center Wikipedia

    "transposición de bytes fija"

    -
    +
    AES

    MixColumns

    center Wikipedia

    "4 multiplicaciones modulares de 4 Byte, valores fijos"

    -
    +
    AES

    AddRoundKey

    center Wikipedia

    " (subclave )"

    -
    +
    AES

    Expansión de clave

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

    @@ -939,11 +939,11 @@

    Expansión de 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

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

    @@ -951,20 +951,20 @@

    Vulnerabilidades

    (|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

    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:

      @@ -990,12 +990,12 @@

      Modos de operación

    -
    +
    AES

    ECB: Electronic Code-Book

    center Wikipedia

    -
    +
    AES

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

    @@ -1003,25 +1003,25 @@

    ECB: Electronic Code-Book

    No se debe usar AES en modo ECB

    -
    +
    AES

    CBC: Cipher Block Chaining

    center Wikipedia

    Desventaja: perder un bloque implica que la sincronización se pierde

    -
    +
    AES

    OFB: Output Feedback

    center Wikipedia

    Ventaja: puede preparse el cifrado antes de necesitarlo

    -
    +
    AES

    CTR: Counter

    center Wikipedia

    Ventaja: perder bloques no afecta a la capacidad de descifrado

    -
    +
    AES

    Vector de Inicialización (IV)

    Vector de inicialización (IV) cumple la misma función que un nonce: semilla inicial

    @@ -1034,20 +1034,38 @@

    Vector de Inicialización (IV)

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

    -
    +
    AES

    Otros modos

    -

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

    +

    AES puede usarse también con "modos autenticados": detectan si el atacante ha cambiado algún byte durante la comunicación

    +
    -

    Información adicional, de la librería que usamos en los ejercicios: https://pycryptodome.readthedocs.io/en/latest/src/cipher/aes.html

    +

    Información adicional, de la librería que usamos en los ejercicios: https://pycryptodome.readthedocs.io/en/latest/src/cipher/aes.html
    +Explicación del modo GCM: https://www.youtube.com/watch?v=-fpVv_T4xwA&t=747

    -
    +
    +
    AES
    +

    Comparación de algunos modos AES

    + +
      +
    • No hay razón para usar AES-ECB, nunca
    • +
    • Unos modos necesitan padding (rellenar los huecos)
    • +
    • Otros permiten paralelizar el cifrado (OFB) o el descifrado (CBC) o ambos (CTR)
    • +
    • Otros permiten recuperarse ante fallos en la comunicación (CBC, OFB)
    • +
    • Otros están especializados en aplicaciones concretas: XTS para cifrados de discos (Bitlocker, TrueCrypt...)
    • +
    +

    En la actualidad, el modo más usado en comunicaciones en AES-GCM

    +
    +

    https://www.highgo.ca/2019/08/08/the-difference-in-five-modes-in-the-aes-encryption-algorithm/
    +https://stackoverflow.com/questions/1220751/how-to-choose-an-aes-encryption-mode-cbc-ecb-ctr-ocb-cfb

    +
    +
    +
    AES

    Vulnerabilidades

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

    @@ -1058,7 +1076,7 @@

    Vulnerabilidades

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

    -
    +
    AES

    Rendimiento

      @@ -1072,7 +1090,7 @@

      Rendimiento

    • 3DES: 100 Mbps (seguridad 112 bit)
    -
    +
    AES

    Computación cuántica

    @@ -1083,10 +1101,10 @@

    Computación cuántica

    Se considera que la criptografía simétrica es robusta ante la computación cuántica, pero tendremos que doblar el tamaño de la clave

    -
    +

    Resumen

    -
    +

    Conclusiones

      @@ -1112,16 +1130,17 @@

      Conclusiones

    • Es necesario evitar cifrar dos mensajes diferentes con la misma clave
    -
    +

    Referencias

    -
    +

    Ejercicios de profesor:

    Alternativamente, podéis hacer los ejercicios de AES de https://www.cryptohack.org

    -
    +

    ¡Gracias!