openssl speed me dice que blowfish es mucho más rápido que md5, ¿qué me estoy perdiendo?

2

Así que corrí openssl speed md5 && openssl speed blowfish y el pez globo parece más rápido que md5.

Aquí están los resultados (ejecutados en windows WSL ).

$ openssl speed md5 && openssl speed blowfish
Doing md5 for 3s on 16 size blocks: 11438181 md5's in 3.00s
Doing md5 for 3s on 64 size blocks: 8164424 md5's in 3.00s
Doing md5 for 3s on 256 size blocks: 4405667 md5's in 3.00s
Doing md5 for 3s on 1024 size blocks: 1547154 md5's in 3.00s
Doing md5 for 3s on 8192 size blocks: 212233 md5's in 2.95s
OpenSSL 1.0.1f 6 Jan 2014
built on: Mon Jan 30 20:38:38 UTC 2017
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              61003.63k   174174.38k   375950.25k   528095.23k   589360.25k
###############################################################################
Doing blowfish cbc for 3s on 16 size blocks: ^T21511383 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 64 size blocks5410400 blowfish cbc's in 2.84s
Doing blowfish cbc for 3s on 256 size blocks: 1438809 blowfish cbc's in 2.98s
Doing blowfish cbc for 3s on 1024 size blocks: 355336 blowfish cbc's in 2.97s
Doing blowfish cbc for 3s on 8192 size blocks: 42136 blowfish cbc's in 2.96s
OpenSSL 1.0.1f 6 Jan 2014
built on: Mon Jan 30 20:38:38 UTC 2017
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
blowfish cbc    114727.38k   121924.51k   123602.38k   122513.15k   116614.23k

Ahora, sé que blowfish es usado por bcrypt , y sé que bcrypt es un algoritmo lento, así que, ¿por qué obtengo estos resultados donde el pez globo es tan rápido?

Tengo algunas hipótesis sobre esto, pero no hay forma de verificarlas:

  • ¿Está relacionado con estar en windows subsystem on linux ?
  • Está relacionado con el COSTO de bcrypt y, por ejemplo, openssl speed blowfish se ejecuta con un costo de 1 (o similares)
  • ¿Este blowfish no es lo mismo que bcrypt 's blowfish

O por supuesto, otra cosa.

    
pregunta Pierre Antoine Guillaume 04.07.2017 - 09:13
fuente

3 respuestas

9

Primero, creo que estás malinterpretando tus resultados. Si, por ejemplo, observamos bloques de tamaño 1024, el MD5 está haciendo 1.547.154 en 3 segundos, mientras que Blowfish solo está haciendo 355.336, y está tomando más de cuatro veces más tiempo por operación que el MD5.

En segundo lugar, bcrypt itera la configuración de la clave Blowfish un número configurable de veces, normalmente 4,096. Intente ejecutar la prueba nuevamente, pero comparando una iteración de MD5 con 4.096 iteraciones de Blowfish, y vea cuál es más rápida. Así que sí, es el parámetro COST en la configuración de bcrypt.

    
respondido por el Mike Scott 04.07.2017 - 09:24
fuente
3

Dado que bcrypt se utiliza para almacenar contraseñas, es esencial prevenir los ataques de adivinación por fuerza bruta. Si solo utilizara una ronda de un hash muy rápido, un atacante podría adivinar mucho más rápido que si se necesitara más trabajo.

En el caso de bcrypt, el valor de costo no secreto define cuántas rondas de cifrado costoso se utilizan. Esto sigue siendo relativamente rápido si el usuario conoce la contraseña ...

    
respondido por el trognanders 04.07.2017 - 09:50
fuente
2

bcrypt y blowfish están relacionados pero son muy diferentes.

Blowfish es un algoritmo de cifrado simétrico. Toma una contraseña provista por el usuario, aplica una función de expansión de clave y luego usa esta clave derivada para cifrar el texto simple

Por otro lado, bcrypt es una función de hashing de contraseña. Está relacionado con el pez globo en el sentido de que utiliza la misma función de expansión de clave varias veces para cifrar la contraseña de forma lenta e irreversible.

Como puedes ver, no son lo mismo.

Acerca de md5, no es una función de hashing de contraseña. Es un algoritmo de hashing de propósito general. Sirven a diferentes propósitos, md5 intenta ser una función de hash rápida. La función de hashing de contraseña derivada de md5 es md5crypt, que se usó en sistemas operativos * nix antiguos y se reemplazó por bcrypt, shaXcrypt y otros en versiones posteriores

    
respondido por el Mr. E 04.07.2017 - 16:35
fuente

Lea otras preguntas en las etiquetas