From e1a1a5d7bd71666f5ad418c722d196e87d739d59 Mon Sep 17 00:00:00 2001 From: Juanvi Vera Date: Sun, 15 May 2022 00:23:59 +0200 Subject: [PATCH] Update hashes --- slides/06-hashes.html | 166 ++++++++++++++++++++++++++++-------------- slides/06-hashes.md | 61 ++++++++++++++-- 2 files changed, 166 insertions(+), 61 deletions(-) diff --git a/slides/06-hashes.html b/slides/06-hashes.html index 2d63d4e..f12e66a 100644 --- a/slides/06-hashes.html +++ b/slides/06-hashes.html @@ -222,14 +222,14 @@ 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-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=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-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=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 Blockchains

Juan Vera del Campo

juan.vera@campusviu.es

-
+

Como decíamos ayer...

  • Confidencialidad: AES/ChaCha20 + D-H
  • @@ -242,22 +242,23 @@

    Como decíamos ayer...

    Los hashes nos permiten calcular una firma digital

-
+

Hoy hablamos de...

  1. Funciones de hash
  2. -
  3. Blockchain
  4. +
  5. Integridad
  6. +
  7. Blockchain
  8. Resumen y referencias

Ejercicios: https://github.com/Juanvvc/crypto/tree/master/ejercicios/06

-
+

Funciones de hash

-
+

Función digest, hash o resumen

Recibe los tres nombres, aunque cuando se usan en criptografía se prefiere "hash"

Función que resume una cadena de longitud arbitraria mm en un valor rr de tamaño fijo ll

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

Función digest, hash o resumen

-
+

Ejemplos

  • Bit de paridad un mensaje: número de "1" en el mensaje
  • @@ -287,7 +288,7 @@

    Ejemplos

-
+

Funciones de hash criptográficas

Funciones hash criptográficas (CHF) son aquellas que:

    @@ -305,7 +306,7 @@

    Funciones de hash criptográficas

-
+

¿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

@@ -316,7 +317,7 @@

¿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. @@ -329,7 +330,7 @@

¿Mensajes con el mismo resumen?

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

-
+

Requisitos de una función de hash criptográfica

  • Que sea rápida de calcular
  • @@ -342,7 +343,7 @@

    Requisitos de una función de hash criptográfica

-
+

¿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:

    @@ -358,12 +359,12 @@

    ¿Cuántos hashes podemos calcular por segundo?

-
+

Ejemplos de valores de hash

center

-
+

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%

@@ -374,7 +375,7 @@

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\|}

Referencias

- el primero "resume" un texto "Fox" en otro más largo: la función de hash siempre tiene la misma longitud, incluso si el texto es corto: SHA-256 siempre dará un resumen de 256 bits sea como sea el texto de entrada. - Los demás son variaciones del mismo texto de entrada. Fíjate: pequeñas variaciones dan un hash diferente a simple vista -¿Qué tenemos que cambiar en "The red fox jumps over the blue dog" para que tenga el mismo hash? Es decir, para que el hash no detecte el cambio. Ya que el texto es mayor de 256 bits, sabemos seguro que habrá otro texto que tendrá el mismo resumen. Pero lo único que podemos hacer es probar cambios uno y otro hasta tener suerte!

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. +¿Qué tenemos que cambiar en "The red fox jumps over the blue dog" para que tenga el mismo hash? Es decir, para que el hash no detecte el cambio. Ya que el texto es mayor de 256 bits, sabemos seguro que habrá otro texto que tendrá el mismo resumen. Pero lo único que podemos hacer es probar cambios uno y otro hasta tener suerte!

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 diff --git a/slides/06-hashes.md b/slides/06-hashes.md index ebc783c..0e1f929 100644 --- a/slides/06-hashes.md +++ b/slides/06-hashes.md @@ -41,7 +41,8 @@ Los hashes nos permiten calcular **una firma digital** 1. [Funciones de hash](#4) -1. [Blockchain](#31) +1. [Integridad](#30) +1. [Blockchain](#36) 1. [Resumen y referencias](#46) Ejercicios: https://github.com/Juanvvc/crypto/tree/master/ejercicios/06 @@ -364,17 +365,64 @@ Inicio de cadena de custodia publicando sus hashes ![center w:20em](https://www.ealde.es/wp-content/uploads/2021/02/analisis-forense-digital-ealde.jpg) -## Usos: ... +# Integridad + -Ya veis que los hashes tienen muchos usos en criptografía +## Definición -Vamos a ver con un poco más de detalle su uso en las monedas digitales: Blockchain y BitCoin +Capacidad de **detectar** si un mensaje ha sido modificado desde su transmisión hasta su recepción. -![bg right:40%](https://www.ledgerinsights.com/wp-content/uploads/2019/10/digital-currency-dollar.2-810x476.jpg) +La modificación se refiere tanto a una modificación **explícita por un atacante** como a una modificación debido a un error (por ejemplo de transmisión). + +> https://es.wikipedia.org/wiki/Integridad_del_mensaje + +![bg right:40%](https://upload.wikimedia.org/wikipedia/commons/1/12/Darwin_Hybrid_Tulip_Mutation_2014-05-01.jpg) + + +## Cifrado autenticado: tipos + +- **Encrypt-then-MAC** (EtM): primero cifra, luego calcula hash +- **Encrypt-and-MAC** (E&M): cifra y calcula hash a la vez +- **MAC-then-Encrypt** (MtE): primero calcula hash, luego cifra + +> MAC: Message Authenticated Code +> https://en.wikipedia.org/wiki/Authenticated_encryption + +## Encrypt-then-MAC (EtM) + + +![center](https://upload.wikimedia.org/wikipedia/commons/b/b9/Authenticated_Encryption_EtM.png) + +- Usado en IPSec +- Necesita dos claves: una para cifrar y otra para el MAC + +## Encrypt-and-MAC (E&M) + + +![center](https://upload.wikimedia.org/wikipedia/commons/a/a5/Authenticated_Encryption_EaM.png) + +- Usado en SSH +- Puede reutilizar clave para cifrar y calcular MAC + +## MAC-then-Encrypt (MtE) + + +![MAC-then-Encrypt](https://upload.wikimedia.org/wikipedia/commons/a/ac/Authenticated_Encryption_MtE.png) + +- Usado en TLS +- Permite algún ataques de padding: [Padding Oracle, pentesterlab](https://book.hacktricks.xyz/crypto/padding-oracle-priv) # 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 + +![bg right:40%](https://www.ledgerinsights.com/wp-content/uploads/2019/10/digital-currency-dollar.2-810x476.jpg) + ## Bitcoin ![center w:15em](https://upload.wikimedia.org/wikipedia/commons/c/c5/Bitcoin_logo.svg) @@ -554,4 +602,5 @@ En el registro de BlockChain / Ethereum y otros, a parte de transacciones econó -Continúa en: [TLS y Public Key Infrastructure](08-pki.html) +Continúa en: [TLS y Public Key Infrastructure](07-pki.html) +