Generación de clave asimétrica basada en contraseña

2

Estoy buscando un esquema de derivación de clave basado en contraseña que dé como resultado un par de claves asimétricas. He trabajado con PBKDF y sus variantes, pero no pude encontrar ninguna forma de generar un par de claves. He estudiado cosas en línea, pero las restricciones de la contraseña no me convienen, ya que la contraseña debe ser de un grupo cíclico, etc. ¡Cualquier dirección será muy apreciada!

    
pregunta The Nutty Professor 01.03.2016 - 10:45
fuente

1 respuesta

2

Cualquier generación de pares de claves asimétricas se puede describir como un algoritmo determinista que se alimenta de una fuente aleatoria. Por lo tanto, en términos generales, puede convertir una contraseña en un par de claves públicas / privadas haciendo lo siguiente:

  1. Procese la contraseña en una "semilla" de longitud suficiente (por ejemplo, al menos 128 bits) con una función de hash de contraseña .

  2. Alimente esa semilla en un PRNG seguro criptográficamente para extender esa semilla a tantas partes de pseudorandom como sea necesario.

  3. Ejecute el algoritmo de generación de pares de claves con el CSPRNG sembrado como fuente de aleatoriedad.

Este tipo de proceso tiene varios inconvenientes importantes que debe tener en cuenta:

  • Requiere un algoritmo de generación de pares de claves completamente especificado e invariable. Por ejemplo, para RSA, el concepto del algoritmo es producir números aleatorios hasta que se encuentren enteros primos del tamaño correcto, pero en la configuración basada en la contraseña tendría que ser muy preciso en la forma exacta en que gira los bits aleatorios en un entero candidato, y así sucesivamente.

    El uso de un algoritmo basado en una curva elíptica como ECDSA / ECDH puede ayudar, porque la clave privada es entonces un entero aleatorio, sin condición de primalidad ni nada por el estilo. Aún debe especificar el algoritmo de generación, pero al menos es simple .

  • Si cambia su contraseña, también cambia su par de claves, lo que podría tener consecuencias en cualquier sistema que esté visualizando.

  • El buen hashing de contraseñas requiere un salt , que no es un valor secreto, pero tampoco se debe corregir. Necesitarías un espacio de almacenamiento para esa sal, en algún lugar.

  • La clave pública resultante, por construcción, podría utilizarse en un ataque de diccionario sin conexión . Los ataques de diccionario sin conexión no son buenos para las contraseñas. Las funciones de configuración de contraseñas de contraseña correctamente configuradas pueden ayudar a defenderse de los ataques de diccionario, pero su poder tiene límites. Una clave pública generada por una contraseña requiere una contraseña realmente aleatoria. Desafortunadamente, las contraseñas realmente aleatorias son difíciles de memorizar (consulte esto pregunta para una discusión: el método del "caballo correcto", tal como se presenta en la publicación, produce contraseñas con 44 bits de entropía, lo que es bueno para una contraseña, pero no lo suficiente como para hacer que los ataques del diccionario fuera de línea sean realmente tolerables) .

respondido por el Tom Leek 01.03.2016 - 20:44
fuente

Lea otras preguntas en las etiquetas