Está en la página 1de 124

Hash

Funciones Hash

● Una función de hash H(M) toma un mensaje de cualquier


tamaño M y retorna un valor de largo fijo h.
● h = H(M)

Además debe ser no reversible:


● Dado M, es fácil calcular h.
● Dado h, es difícil encontrar un M tal que H(M) = h.
● Dado M, es difícil encontrar otro mensaje M’ tal que H(M) =
H(M’).
● Y debe ser resistente a colisiones:
○ Es difícil encontrar dos mensajes aleatorios, M y M’ tal
que H(M) = H(M’).
2
Problema del cumpleaños

● ¿Cuál es la probabilidad que una persona tenga la misma


fecha de cumpleaños que uno?
○ p = 1/365

● Si tengo n personas. ¿Cuántos pares distintos de personas


puede generar?
○ n*(n−1)/2

● La probabilidad que al menos dos personas tengan el mismo


día de cumpleaños.
○ 1 − (1 − 1/365 ) ^ (n*(n−1)/2)
3
Gráficamente...

4
Estadísticas

Info entre 1973 y 1999


¿Cuál es la distribución?
¿Cuál es la moda?
¿Qué ocurrió hace 9 meses?

5
¿Hay diferencias en la actualidad?

6
Estadísticas por latitud

7
Crimen Perfecto

1. Tener cheques electrónicos.


2. Generar 2 cheques electrónicos con el mismo hash.
3. Firmar el cheque de menos valor.
4. Usar firma digital anterior en el cheque de mayor valor.

8
Ataques a funciones hash

Pre-image attack: Crea un mensaje con el mismo hash


Collision attack: Encuentra 2 mensajes con el mismo hash

9
Funciones hash

● ¿Cuál debería ser el largo del resultado de una función de


hash?
● 64 bits es demasiado poco para resistir ataques.
● La mayoría de las funciones de hash existentes producen
valores de 128 bits.
● NIST especifica valores de hash de 160 bits para su
estándar.

10
Código de Redundancia Cíclica

● Utilizado para verificar la integridad de los datos de una


transmisión.
● El CRC de 32 bits tiene actualmente un uso muy extendido
● Este código se basa en el principio de que n bits de datos se
pueden considerar como los coeficientes de un polinomio.
Por ejemplo, los datos 1101 pueden tratarse como el
polinomio x3 + x2 + 1.

11
Procedimiento

● Se añaden r bits 0s a la derecha del mensaje (tantos ceros


como grado tenga el polinomio generador).
● Se divide el polinomio obtenido por el polinomio generador.
● La elección del polinomio generador es esencial si
queremos detectar la mayoría de los errores que ocurran.
● Al comprobar el CRC, sólo si el residuo de división es cero,
entonces la comunicación estará libre de errores.

12
Polinomios generadores

Polinomio generador CRC-16


x16 + x12 + x5 + 1
Polinomio generador CRC-32
x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

13
Compressed files

14
Pasos

15
Step by step

https://crc32.online/
http://www.ghsi.de/pages/subpages/Online%20CRC%20Calcu
lation/indexDetails.php?Polynom=100&Message=1234
http://www.zorc.breitbandkatze.de/crc.html
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
https://crccalc.com/

16
¿Hay colisiones?

17
Complemento a uno

http://www.arcesio.net/checksum/ch
ecksumIP.html
18
Lan Manager (LM) / NTLM

● La contraseña se rellena con ceros o se trunca a 14 caracteres


● Se divide en dos mitades de 7 caracteres
● Se convierten en una cadena binaria para usar como dos claves
DES, insertando un cero después de cada 7 bits
● Cada clave se utiliza para cifrar la cadena KGS!@#$%
● Los dos textos cifrados resultantes se concatenan para formar el
hash LM de 16 bytes.

https://medium.com/@petergombos/lm-ntl
m-net-ntlmv2-oh-my-a9b235c58ed4
19
MD2
● Es una función de hash criptográfica desarrollada por
Ronald Rivest en 1989 definida en la RFC 1319.
● El algoritmo está optimizado para computadoras de 8 bits.
● El valor hash de cualquier mensaje se forma haciendo que
el mensaje sea múltiplo de la longitud de bloque en el
ordenador y añadiendo un checksum.
● La longitud del resumen es de 128 bits.
● En Marzo del 2011, queda obsoleto según la RFC 6149

20
MD4
● Desarrollado en 1990
● La longitud del resumen es de 128 bits.
● El algoritmo está optimizado para computadoras de 32 bits.
● En 1995 se demostró que se podían generar colisiones en
unos pocos segundos.
● En Marzo del 2011, queda obsoleto según la RFC 6150

21
Muerto en vida...

https://www.linuxadictos.com/linux-kernel-4-18-llega-al-final-de-su-ciclo
-actualiza-ahora.html
22
MD5

● Publicado en 1992 por la RFC 1321


● MD5 procesa el mensaje en bloques de 512 bits que se
dividen en 16 sub-bloques de 32 bits c/u.
● El resultado son 4 números de 32 bits que se concatenan
para entregar el valor de hash de 128 bits.
● El mensaje original se expande para tener un largo múltiplo
de 512 bits menos 64.
● El relleno es un bit en 1 seguido de bits en 0.
● Al final se agregan 64 bits que representan el largo del
mensaje, lo que deja el largo en un múltiplo de 512 bits.

23
Añadiendo bits

● Se añade un bit ‘1’ y luego tantos bits ‘0’ como sean


necesarios para cumplir la condición.
● Condición: (M + Relleno) mod 512 = 448
● Recordar trailer de 64 bits
● Se debe añadir desde 1 a 512 bits de relleno.

24
Longitud del mensaje

● Antes del paso anterior se genera una representación de 64


bits correspondientes al largo del mensaje original ‘M’.
● Esta es agregada al final del bloque.
● Ahora tenemos un bloque que es múltiplo exacto de 512
bits.
● De otra forma, tenemos 16 palabras de 32 bits cada una.

25
Inicializando el buffer

Se crea un buffer de 4 registros de 32 bits cada uno, y se


representan como A, B, C y D en formato hexadecimal.

A = 0x01234567
B = 0x89abcdef
C = 0xfedcba98
D = 0x76543210

26
Procesando el mensaje

Se definen 4 funciones auxiliares, F, G, H e I.


Cada función tiene 3 entradas de 32 bits, X, Y y Z.
La salida de estas funciones es una palabra de 32 bits.
Las cuatro funciones no-lineales son:

27
al fin terminamos!!

● Al finalizar los ciclos, quedan en los buffer A, B, C y D el


resultado final del proceso.
● Como los buffer son de 32 bits cada uno, entonces
obtenemos el Hash de 128 bits del mensaje ‘M’.

28
¿y el mono?

29
Efecto Avalancha

Incluso un cambio pequeño en el mensaje, nos entrega un


mensaje totalmente distinto.

30
MD5 en PHP

<?php
$password="hola";
$password = md5 ( $password );
echo $password;
// Imprime 4d186321c1a7f0f354b297e8914ab240
?>

31
¿Es seguro?

● En 2004 se demostró la capacidad práctica para que un


atacante genere colisiones.
● En 2005 se demostró la capacidad para que un atacante
genere certificados X.509 con colisión.
● Desde el 2008, Software Engineering Institute recomienda
no utilizar el algoritmo MD5.

https://www.kb.cert.org/vuls/id/836068/
32
Estado actual
● En Diciembre de 2010 se publicó la primera colisión de un
bloque simple (512 bits).
● Al que encuentre una colisión para un mensaje de 64 bytes
diferente a la publicada antes del 1 de Enero de 2013 se le
pagarán US$10.000.

En Marzo de 2011 se publicó la RFC 6151 con consideraciones


para actualización de la seguridad en MD5.

http://eprint.iacr.org/2010/643.pdf
33
Single-block collision for MD5

Y aquí está el código...

34
2 Images, one MD5 Hash with HashClash

https://natmchugh.blogspot.com/2015/02/create-your-
own-md5-collisions.html 35
MD5 Collision

36
¿Dónde lo podemos ver aún?

37
¿Qué y cómo calcular?

38
SHA (Secure Hash Algorithm)

● En 1993, la NIST, junto a la National Security Agency,


basándose en MD5, propuso la función hash llamada SHA
(Secure Hash Algorithm).
● En 1995, el mismo NIST introdujo una modificación a SHA,
afirmando que lo hacía menos débil. La antigua versión pasó
a llamarse SHA-0 y la nueva versión SHA-1.
● La versión SHA-1 constituye un estándar para el gobierno de
los EE.UU

39
¿Cómo funciona?

● Tiene 5 variables en lugar de 4.


● Luego, genera un hash de 160 bits en lugar de 128.
● Esto hace que sea mucho más resistente ante un ataque de
fuerza bruta.
● Es más lento.

40
¿Alguna diferencia?

● Los hash generados no son texto plano, sino un conjunto


arbitrario de bits, eso sí, de longitud fija.
● Para guardarlos en una base de datos, se transforman a
BASE64 (que sí son caracteres ASCII).

41
Cálculo de SHA

El proceso para calcular el hash se hace igual que MD5:


Se añade un 1, después los ceros necesarios hasta que sólo
falten 64 bits para que el mensaje sea múltiplo de 512, y por
último la longitud del mensaje antes del rellenado en formato
de 64 bits.

42
Inicializando el buffer

Se inicializan cinco constantes de 32 bits cada una:

A = 0x 67 45 23 01
B = 0x EF CD AB 89
C = 0x 98 BA DC FE
D = 0x 10 32 54 76
E = 0x C3 D2 E1 F0

43
Words

El bloque de 512 bits pasa de estar formado por 16 palabras


de 32 bits (M0 . . .M15) a estarlo por 80 (W0 . . .W79) aplicando
las siguientes operaciones:

Wt = Mt , para t entre 0 y 15
Wt = (Wt -3 XOR Wt -8 XOR Wt -14 XOR Wt -16) <<< 1, para t
entre 16 y 79.

(La operación <<< n es un desplazamiento circular a la


izquierda de n bits).

44
Funciones

Cada operación es una función no lineal, utilizando cada una


tres de las variables como entrada, y son:

Ft (X, Y, Z) = (X AND Y) OR ((NOT X) AND Z), para t entre 0 y 19.


Ft (X, Y, Z) = X XOR Y XOR Z, para t entre 20 y 39 y entre 60 y 79.
Ft (X, Y, Z) = (X AND Y) OR (X AND Z) OR (Y AND Z), para t entre 40 y 59.

45
Constantes

También se utilizan cuatro constantes:

Kt = 0x5a827999, para t entre 0 y 19


Kt = 0x6ed9eba1, para t entre 20 y 39.
Kt = 0x8f1bbcdc, para t entre 40 y 59.
Kt = 0xca62c1d6, para t entre 60 y 79.

46
Diagrama

47
Efecto Avalancha

Incluso un cambio pequeño en el mensaje, nos entrega un


mensaje totalmente distinto.

48
Better than MD5

Iguales para MD5, diferentes para SHA1

49
SHA-1

Cabe destacar que en 2005 se rompió el algoritmo SHA-1 de


forma teórica y en 2017, académicos de Google, consiguieron
el primer ataque de colisión SHA-1 exitoso del mundo,
conocido como «SHAttered».
Esta hazaña costó USD$110.000.

https://blog.segu-info.com.ar/2019/05/sha-1-
ha-muerto-ataque-de-colision-con.html
50
SHA-1

● Todos los ataques prácticos en MD5 son ahora también


prácticos en SHA-1.
● Basta arrendar 900 GPUs (Nvidia GTX 1060) por 2 meses
● Menos de 100 mil dólares.

https://sha-mbles.github.io/
51
LinkedIn’s salted double-hashed

https://securityuncorked.com/2012/06/how-to-
crack-your-own-linkedin-password-hash/
52
RIPEMD-160

RIPEMD-160 (RACE Integrity Primitives Evaluation Message


Digest, primitivas de integridad del resumen del mensaje), fue
desarrollado en Europa y publicado primeramente en 1996.
Fue diseñado en la comunidad académica abierta, en
contraste con el algoritmo SHA-1, diseñado por la Agencia de
Seguridad Nacional estadounidense (NSA).

https://hash.online-convert.com/es/generador-ripemd160

53
Variaciones SHA-2

● SHA-256:
○ 8 bloques de 32 bits
● SHA-384
○ valor de inicio es diferente
● SHA-512
○ 8 bloques de 64 bits

¿Por qué en la práctica SHA no reemplazó a MD5?

● Principalmente por la falta de compatibilidad con sistemas


Windows XP SP2 o anteriores.
54
ISO/IEC 10118-3:2003
Dedicated hash-functions
● RIPEMD-160
● RIPEMD-128
● SHA-1
● SHA-256
● SHA-512
● SHA-384
● WHIRLPOOL

Para cada una de estas 7 funciones hash, ISO/IEC 10118-3:2003


especifica un método de padding, valores de inicialización,
parámetros, secuencias de funciones a utilizar en las rondas,
constantes; y entrega múltiples ejemplos de cómputo.

https://www.iso.org/standard/37416.html
55
New SHA-512 versions (2011)

SHA-512/224 y SHA-512/256 truncan a 224 y 256 bits el


SHA-512 con un nuevo IV (Initialization Vector). Lo han hecho
porque SHA-512 es más rápido que SHA-256 en las CPU de
64 bits, por lo que estas nuevas variantes de SHA son más
rápidas.

https://www.schneier.com/blog/archives/201
1/02/nist_defines_ne.html 56
OpenSSL speed

57
python.crypto

¿Dificultad de implementar?
>>> from Crypto.Hash import SHA256
>>> m = SHA256.new()
>>> m.update(’abc’)
>>> m.hexdigest()
’ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad’

58
Benchmark MD5 vs SHA

El benchmark Hashcat se generó utilizando un procesador


Intel i5 4950 con 4 núcleos. Los resultados de cudaHashcat
se generaron con una tarjeta gráfica NVIDIA Geforce GTX
560.

UPDATE: Con una GTX 980 se obtienen 12.7 billones de


hash MD5 por segundo.
https://passwordrecovery.io/md5/
59
¿Dónde encuentro MD5 & SHA2?

60
SHA for Intel

La extensión SHA para x86 en Intel fue introducida en 2013


con la arquitectura Goldmont para un “budget-friendly” (aka
mediocre performance) permitiendo a los procesadores
Pentium y Celeron calcular rápidamente la rondas SHA-1 y
SHA-256.

https://neosmart.net/blog/2017/will-amds-ryzen-finally-
bring-sha-extensions-to-intels-cpus/ 61
62
List of possible hashes

63
Hashcat online

https://colab.research.google.com/github/someshkar/colab
cat/blob/master/colabcat.ipynb?authuser=1
64
SHA-3

NIST hace un llamado el 2 de Noviembre de 2007.

Los requerimientos mínimos son:


● Hashes de 224, 256, 384, 512 bits
● Máximo tamaño del mensaje de 264 - 1 bits

Puntos a considerar:
● Costo de la implementación en hardware
● Velocidad de la implementación
● Energía requerida para generar el hash

65
Seleccionados SHA-3

Final round:

● BLAKE
● Grøstl
● JH
● Keccak
● Skein

66
Benchmark
Prueba se realizada en Ubuntu 10.10 de 64 bits que ejecuta
PHP 5.3.3-1ubuntu9.3 en modo CLI. La CPU es un Intel Core2
Duo T9300 @ 2.50GHz y la máquina tiene 4 GB RAM. Durante
toda la duración de la prueba, el uso de la CPU alcanzó un
máximo del 85% y el uso de la memoria alcanzó un máximo
del 25%.

67
SHA-3
Keccak es el algoritmo ganador y está disponible en
https://github.com/gvanas/KeccakCodePackage

Oficialmente, NIST aprueba su uso desde el 5 de Agosto de


2015 para protección de información sensible.

https://www.federalregister.gov/ 68
Hash Generator

https://www.browserling.com/tools/all-hashes
69
Blake3 (2020)

https://en.wikipedia.org/wiki/Comparison_of_cr
yptographic_hash_functions 70
Authentication Protocol Algorithms

MAC - Message Authentication Code (integridad + autenticación)

https://docs.oracle.com/cd/E19253-01/817-3000/securi
ty-4/index.html
71
Length extension attack

Un ataque de extensión de longitud es un tipo de ataque en el


que un atacante puede utilizar Hash(mensaje1) y la longitud
del mensaje1 para calcular Hash(mensaje1, mensaje2) para
un mensaje controlado por el atacante, sin necesidad de
conocer el contenido del mensaje1. Algoritmos como MD5,
SHA-1 y SHA-2 que están basados en la construcción de
Merkle-Damgård son susceptibles a este tipo de ataque. El
algoritmo SHA-3 no es susceptible.

https://github.com/marcelo140/length-extension
https://github.com/iagox86/hash_extender

https://en.wikipedia.org/wiki/Length_extension_attack
72
Demo Extension Attacks

https://es.slideshare.net/exploresecurity/hash-length-extension-attacks
https://slideplayer.com/slide/4168856/
https://www.javacodegeeks.com/2012/07/hash-length-extension-attacks.html
https://d0nut.medium.com/week-17-hash-length-extensions-7f7e02e62fb5
https://seedsecuritylabs.org/Labs_16.04/PDF/Crypto_Hash_Length_Ext.pdf
https://www.synopsys.com/blogs/software-security/forging-sha-1-mac-using-length-extensio
n-attack-python/
https://dzone.com/articles/forging-a-sha-1-mac-using-a-length-extension-attac

73
HMAC vs MAC

MAC es susceptible a ataques de extensión de longitud.


No se conocen ataques de extensión contra la especificación
actual del HMAC.

HMAC - Hash-Based Message Authentication Code


sha256('thisIsASe' + sha256('cretKey1234' + 'my message
here'))

74
HMAC (Hash-based message
authentication code)
RFC 2104

La fuerza criptográfica del HMAC depende de la potencia


criptográfica de la función de hash subyacente, el tamaño de
su salida de hash y el tamaño y calidad de la llave.

HMAC-SHA1 y HMAC-MD5 se utilizan dentro de los


protocolos IPsec y TLS.

75
HMAC-SHA1
ipad es el inner padding (0x363636…3636)
opad es el outer padding (0x5c5c5c…5c5c)

http://www.freeformatter.com/hmac-generator.html 76
HMAC Generator

77
HOTP (HMAC OTP)

RFC 4226

HMAC(K,m) = H(K ⊕ 0x5c5c… | H(K ⊕ 0x3636… | m))

HOTP(K,m) = Truncate(HMAC(K,m)) & 0x7FFFFFFF

Por lo general se usa un valor HOTP de 6 a 8 dígitos,


dependiendo de la implementación.

HOTP-Value = HOTP(K,m) mod 10d, donde d es la cantidad


de dígitos.

http://en.wikipedia.org/ 78
Challenge-Response Authentication Mechanism

CRAM-MD5 está basado en HMAC-MD5. Le da soporte a


Simple Authentication and Security Layer (SASL), que es
usando en la autenticación de protocolos como SMTP, POP,
IMAP, LDAP, XMPP, BEEP, y otros.

La RFC2831 hace referencia al uso de autenticación


mediante digest como mecanismo SASL.
Se utiliza para evitar el envío de contraseñas en texto plano,
pero es menos efectivo que el uso de conexiones cifradas.

79
CRAM-MD5 Challenge

El servidor envía una cadena en base64 al cliente.

El cliente convierte la cadena a hexadecimal y calcula


HMAC-MD5 sobre el mensaje, a partir de la contraseña del
usuario. Luego concatena el nombre de usuario y un espacio
al mensaje. Finalmente, convierte todo a base64 y se le envía
el mensaje al server.

El servidor utiliza el mismo método para calcular la respuesta


esperada. Si la respuesta dada y la respuesta esperada
coinciden, la autenticación se ha realizado con éxito.

80
DIGEST-MD5 vs CRAM-MD5

DIGEST-MD5 es muy similar a CRAM-MD5, pero es algo más fuerte


porque CRAM-MD5 sólo incluye datos aleatorios del servidor mientras
que DIGEST-MD5 incluye datos aleatorios tanto del cliente como del
servidor.

DIGEST-MD5 también proporciona una disposición para garantizar la


integridad y/o confidencialidad de la conexión, que CRAM-MD5 no
ofrece.

81
Authentication Protocols

● OAuth
● OAuth 2.0
● OpenID
● OpenID Connect
● LDAP Authentication
● Kerberos
● DIGEST-MD5
● GSSAPI
● SASL
● SAML
● Java Authentication and Authorization Service (JAAS)
● NMAS
● FIDO

https://ldapwiki.com/wiki/Authentication%20Protocol
82
CPU vs GPU

83
Blowfish crypt

Por lo general los algoritmos


pueden correr hasta 100 veces
más rápidos en GPU vs CPU,
pero hay casos, como bcrypt, que
son iguales o más lentos en GPU
vs CPU.

84
Why slow computer speed is better?

Ejemplos de estos algoritmos incluyen BCrypt, SCrypt,


Argon2, PBKDF2 y otros. Estos algoritmos están
específicamente diseñados para hacer que la CPU/GPU del
computador tome una cantidad excesiva de tiempo generando
un solo hash.

Al ralentizar el cálculo del hash, aumenta el tiempo de uso del


equipo Bitcoin de 4 minutos a 320.300 años. En esta
comparación se puede ver la diferencia práctica entre el uso
de SHA-2 y BCrypt.

https://hackernoon.com/switching-from-bcrypt-to-sha2
-may-save-your-cpu-and-your-sanity-806733765b27 85
Bcrypt

go get -u github.com/bitnami/bcrypt-cli
echo -n supersecret | bcrypt-cli

86
Sazonando la seguridad

Desde el 2017, NIST recomienda utilizar un input secreto


(pepper) cuando se almacenan passwords.
Se guarda por separado en algún otro
medio, como un módulo de seguridad de
hardware.

87
Bcrypt acronym

$2a$ https://www.browserling.com/tools/bcrypt
$2y$ (2011) https://bcrypt-generator.com/
$2b$ (2014) https://passwordhashing.com/BCrypt?plainText=supersecret

https://stackoverflow.com/questions/15733196/whe
re-2x-prefix-are-used-in-bcrypt 88
Bcrypt + salt generator

89
Bcrypt in PHP

http://sandbox.onlinephpfunctions.com/code/d4d
06122ca9c328a83b43b3c0e51736e347d54db 90
Cómputo exponencial

91
*-crypt algorithms

● sha512 (función hash de uso


general) y sha512crypt (función
de hash para password basada
en sha512).
● sha512crypt usa 5000 rondas
por defecto

http://man7.org/linux/man-pages/man3/crypt.3.html
92
Key Derivation Function

Toma una password y


genera n bits que
pueden ser usados
como una llave de
cifrado.

93
Key Derivation Functions

● Key Stretching (rounds)


● Key Separation (sub-keys)
● Key Strengthening (salt)

94
How to crack bcrypt efficiently

http://arstechnica.com/

https://blog.cynosureprime.com/2015/09/how-we-c
racked-millions-of-ashley.html
95
History

96
Scrypt

Scrypt es otro algoritmo de hash que tiene las mismas


propiedades que bcrypt, excepto que cuando se aumentan las
rondas, aumenta exponencialmente el tiempo de cálculo y el
espacio de memoria necesario para generar el hash.

Scrypt se creó como respuesta a la evolución de los ataques


a bcrypt y es completamente inviable cuando se utilizan
FPGAs o GPUs debido a las limitaciones de memoria.

97
Bcrypt vs Argon2

Argon2 ofrece una mejor protección frente a ataques Time


Memory Trade-Off (TMTO) y una mejor protección de side
channel.

https://synkre.com/how-secure-is-bcrypt/
98
Argon2

99
PBKDF2 año 2000 vs 2017

Public Key Cryptography Standards (PKCS)


PKCS #5: Password-Based Cryptography Specification
Version 2.0 vs 2.1

● RFC 2898
● RFC 8018

https://en.wikipedia.org/wiki/PBKDF2
100
Lista de implementaciones

101
NPM Trends

102
PBKDF2

103
Hashing Passwords

Los algoritmos más recomendados son:


● Bcrypt
● Scrypt
● Argon2
● PBKDF2

104
105
Argon2

Ganador de la competición de hashing de contraseñas (PHC)


en 2015. Argon2 se basa en AES y tiene dos versiones
principales:
● Argon2i que es la opción más segura contra los ataques de
canal lateral, que permiten leer la memoria privada de otros
procesos que se ejecutan en el mismo hardware a través
de canales laterales basados en la caché
● Argon2d, que es la opción más segura contra los ataques
de cracking en la GPU.

https://argon2.online/

106
Hash for IoT

BLAKE2s ha ganado terreno en el último tiempo, uno de los


subcampeones de SHA-3, que a menudo se prefiere al
verdadero ganador de SHA-3 debido a su rendimiento.

Además, en ISO/IEC 29192-5:2016 se especifican tres


funciones hash adecuadas para aplicaciones que requieren
implementaciones criptográficas ligeras: PHOTON,
SPONGENT y Lesamnta-LW.

https://www.cryptolux.org/index.php/Lightweight_Hash_Functions
107
Infraestructura

108
Light Weight Cryptography environment

SHAKE proporciona un excelente recurso, es eficiente con el


consumo de energía, ya que no requiere grandes recursos
físicos ni lógicos.
SHAKE es definido como una extendable-output functions
(XOFs).

https://medium.com/asecuritysite-when-bob-met-alice/shake
-stirs-up-crypto-7d87f3cf39f4 109
Shake

110
Security strengths

111
Lookup table / rainbow table

Son tablas formadas por una dupla de palabras, donde cada


dupla ha sido formada por la acción de 40 mil veces una
función de reducción y resumen.

https://www.slideshare.net/gonalv
mar/rainbow-tables
112
¿Cómo funciona?

https://es.wikipedia.org/wiki/Tabla_arco
%C3%ADris 113
OPHcrack LiveCD

http://ophcrack.sourceforge.net/
114
OPHcrack tables

http://ophcrack.sourceforge.net/tables.php

115
Pre-computed Hash Table

Lista de 600 millones de contraseñas únicas de texto plano


recolectadas de alrededor de 100 de las más grandes
filtraciones de bases de datos entre 2008-2018, con su
respectivo hash NTLM, sha1, sha256, MySQL y MD5.

https://a.ndronic.us/pre-co
mputed-hash-table-v-1-0/ 116
ISO/IEC 10118-3:2018

Incluye las funciones hash SHA-3, STREEBOG y SM3

https://www.iso.org/standard/67116.html
117
Extremely fast Hash algorithm

Pruebas con SMHasher que evalúa las cualidades de colisión,


dispersión y aleatoriedad de las funciones hash.

https://github.com/Cyan4973/xxHash
118
Fuzzy hashing

En forense digital, los hash permiten identificar un malware.


Para identificar si un binario es similar a otro, una función
hash tradicional no sirve (efecto avalancha).
Se requiere un hash que no use efecto avalancha.

SSDEEP calcula múltiples hashes para partes de tamaños


fijos del archivo, llamado rolling hash, y entrega la similitud
entre 2 archivos.

119
Child Sexual Abuse Material (CSAM) detection

https://github.com/KhaosT/nhcalc
120
NeuralHash collisions

$ python nnhash.py cat.png


59a34eabe31910abfb06f308
$ python nnhash.py dog.png
59a34eabe31910abfb06f308

https://gist.github.com/unrealwill/c480371c3
a4bf3abb29856c29197c0be 121
Subresource Integrity (SRI) Hash

Permite que el browser detecte si una librería de un tercero ha


sido modificada desde que el servidor la configuró.
Para que esto funcione los sitios web deben tener habilitado
CORS.
122
CORS

123
FIN

También podría gustarte