¿Qué significa realmente la opción ssh-keygen -a?

2

Descubrí que el nuevo formato OpenSSH para almacenar claves privadas SSH ( ssh-keygen -o ) usa bcrypt para generar la clave simétrica para cifrar la clave privada. Entiendo que la opción -a se usa para ajustar el factor de trabajo bcrypt. Sin embargo, no entiendo la relación exacta entre el factor trabajo y el valor dado. -a 200 toma aproximadamente 5 segundos en mi CPU, mientras que este punto de referencia tiene un factor de trabajo de 20 tomando más de un minuto. El factor trabajo es una escala logarítmica y dudo que mi computadora portátil sea realmente > 2 ^ 10 veces más rápida que la computadora portátil de esta persona.

Claramente, -a no se traduce directamente al factor de trabajo bcrypt. Entonces, ¿qué es la relación?

La razón por la que quiero saber es extrapolar una tasa de craqueo en el "peor de los casos" para el valor de -a elegido basado en esto punto de referencia de una plataforma de craqueo de gama alta (para 2017) (que calcula ~ 100k hashes / sec en 8 GPUs, utilizando un factor de trabajo bcrypt de 5 para las pruebas).

    
pregunta dn3s 19.06.2017 - 09:40
fuente

1 respuesta

3

Esto difiere entre las versiones ssh-keygen . De esta publicación :

  

El parámetro de dificultad original para bcrypt es el número log2 de   tiempos para rekeyear el cifrado. bhash corrige este número en 64, y en su lugar   se basa en el parámetro de rondas PBKDF2 para controlar la dificultad.

Mi respuesta original se basó en la página de manual de ssh-keygen que dice lo siguiente:

  

-a rondas                     Al guardar una clave privada de nuevo formato (es decir, una clave ed25519 o cualquier clave del protocolo 2 SSH cuando se establece el distintivo -o), esta opción   Especifica el número de rondas KDF (función de derivación de claves) utilizadas.                    Los números más altos dan como resultado una verificación de frase de contraseña más lenta y una mayor resistencia al descifrado de contraseñas de fuerza bruta   (en caso de robo de llaves).

Por lo tanto, un valor de 200 iterará el KDF 200 veces. Esto es un equivalente de un factor de trabajo de 7.64 , no 200 como espera.

Si quisieras tu factor de trabajo de 200, deberías especificar -a 1606938044258990275541962092341162602522202993782792835301376 .

Esto no funcionará por dos razones:

  • Se devuelve Invalid number (too large) .
  • No tienes unos pocos universos de tiempo libre.

Si quisiera probar 20 como en el ejemplo, vaya con este número , 1048576.

Básicamente necesitas las siguientes dos fórmulas:

  

Factor de trabajo = log2 (rondas)

     

Rondas = 2 factor de trabajo

Actualizar

Por lo tanto, si usa la versión bhash, divida el número de mi trabajo anterior por 64.

$ time ssh-keygen -o -a 16384 -f ./testkey -N password123
Generating public/private rsa key pair.
Your identification has been saved in ./testkey.
Your public key has been saved in ./testkey.pub.
The key fingerprint is:
SHA256:eU/T6ex/wDJNsb8soOzGN/uxup0Zdjthvxt1e23wb6c foo@bar
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|              .  |
|               o |
|         .   .o. |
|        S . o++.o|
|         . +o++=*|
|        o . o*==O|
|         = oooB=X|
|        o..+**EBO|
+----[SHA256]-----+

real    2m17.181s
user    2m16.677s
sys 0m0.005s
    
respondido por el SilverlightFox 19.06.2017 - 21:40
fuente

Lea otras preguntas en las etiquetas