¿Es posible usar el paralelismo al calcular una función de derivación de clave para una sola contraseña / clave?

5

Supongamos que tengo un archivo cifrado AES-256, y quiero obtener la clave utilizando PBKDF2 y una sal dada con un gran número de rondas (por ejemplo, 1 millón), pero estoy limitado por la tolerancia del usuario al retraso de la IU cuando introduciendo su contraseña. ¿Es posible calcular una clave que es similarmente resistente al crackeo al computar 100 claves en paralelo con la misma contraseña y 100 sales diferentes, para 10000 rondas, y luego combinarlas con una función hash como SHA-256?

La forma estándar es básicamente esta:

key = pbkdf2(pseudo_random_function, password, salt, 1000000, 256);

Una forma paralelizable podría ser así:

for(i = 0; i < 100; i++)  // parallelize this on the GPU/FPGA etc
{
  partial_keys[i] = pbkdf2(pseudo_random_function, password, salts[i], 10000, 256);
}
key = sha256(concatenate(partial_keys[0] ... partial_keys[99]));

Suponiendo que el método de derivación era conocido por un cracker, ¿produciría una clave que fuera igualmente difícil de descifrar como la forma estándar, y sería tan seguro? Si no, ¿qué tan seguro sería (si es que está seguro) en términos de número equivalente de rondas utilizando el método normal?

Tal vez no sea necesario almacenar 100 sales, solo puede almacenar 1 sal y luego generar 100 sales diferentes con el uso de técnicas de estiramiento de claves / cifrados de bloque, etc. Si se usó en una aplicación, podría asumir o hacer cumplir una capacidad mínima de GPU antes de permitir que el usuario la instale.

El objetivo de esto sería reducir la latencia (el tiempo necesario para obtener una clave única para el usuario), sin aumentar el rendimiento (número de claves que pueden derivarse en un período de tiempo determinado con una cantidad determinada de potencia de cálculo). por una galleta).

    
pregunta samgak 23.03.2016 - 03:01
fuente

1 respuesta

2

La mayoría de las funciones hash toman medidas para dificultar su implementación en las GPU, pero también es posible aprovechar la ejecución paralela y usarla del lado del defensor al verificar las contraseñas. Un algoritmo que fue diseñado para ser fácilmente paralelizable es paralelo por Steve Thomas . Parallel fue finalista en el PHC y, por lo tanto, ha recibido algunas críticas, pero no pude encontrar mucha información al respecto.

Así que la idea detrás de tu algoritmo es sólida. La implementación me parece buena, pero es posible que desee consultar a un criptógrafo real antes de comenzar la producción.

    
respondido por el Sjoerd 08.06.2016 - 10:12
fuente

Lea otras preguntas en las etiquetas