Generar de forma segura una semilla rng usando un número pequeño

3

Estoy tratando de encontrar un método seguro para generar una semilla rng a un rng usando un número de pin pequeño de 5 dígitos.

El problema que puedo ver con esto es que un atacante podría fácilmente recorrer todos los números de 5 dígitos posibles y, finalmente, determinar la semilla.

Pido disculpas si esta es una pregunta muy básica e ingenua. Solo trato de tener algunos pensamientos al respecto

EDIT

Quiero poder sembrar el número aleatorio generado con una entrada que se pueda recordar porque quiero que un usuario pueda ir a una computadora diferente y tener la misma salida que el rng.

    
pregunta CBaker 18.02.2016 - 21:24
fuente

2 respuestas

4

Si el usuario puede ir a una computadora diferente, el atacante también puede hacerlo. Lo que diferencia al atacante del usuario normal es solo el conocimiento del PIN de 5 dígitos.

Las computadoras son sistemas deterministas, lo que significa que el atacante puede poseer conceptualmente 100000 computadoras; en la computadora 0, ejecuta su función de derivación de claves a través del PIN 00000; en la computadora 1, ejecuta la función con el PIN 00001; y así. Una de estas computadoras necesariamente utilizará el PIN de usuario verdadero y producirá la misma "semilla RNG" que el usuario atacado.

Este tipo de simulación es altamente flexible. En general, si el usuario necesita invertir X recursos en el uso de su sistema (por ejemplo, toma un segundo de cómputo en una computadora normal), el atacante puede simular a todos los usuarios virtuales con recursos de 100000 * X. Esto puede ser mediante el uso de 100000 computadoras y se puede hacer en un segundo; o reutilizando una computadora una y otra vez y, por lo tanto, tardando 100000 segundos en recorrer todo el PIN de usuario posible (esto es un poco menos de 28 horas). O cualquier combinación entre (por ejemplo, 10 computadoras que se ejecutan durante 3 horas).

Solo tiene dos formas de salir de este dilema, ninguna de las cuales resuelve realmente su problema:

  1. Puede intentar organizar que la derivación de PIN a RNG tome muchos recursos. Este es básicamente el enfoque de hashing de contraseña . El principal problema aquí es que el usuario no es paciente, y no usará su sistema si le toma 20 segundos procesar el PIN (para los sistemas de pago con tarjeta, se ha medido que todo el proceso debe realizarse dentro de 8 segundos; de lo contrario, el consumidor se vuelve loco). El atacante, por otro lado, tiene mucha más paciencia, a menudo tiene computadoras más poderosas que pueden ir más rápido que el hardware del usuario promedio (especialmente si estamos hablando de teléfonos inteligentes), y en general pueden reunir muchos de ellos (aunque solo sea mediante el alquiler de máquinas en alguna nube como la de Amazon).

  2. En algunos contextos muy raros, puedes hacer arreglos para que sea imposible probar un buen PIN. En el ataque de búsqueda exhaustiva, el atacante intenta todos los PIN posibles y se detiene cuando encuentra el que "funciona". Si un PIN incorrecto produce un resultado que es, en última instancia, tan plausible como el que tienes con un PIN bueno, entonces el ataque ya no funciona. Pero esto es muy restrictivo.

    Por ejemplo, si el PIN se trata de proteger (mediante el cifrado) los archivos del usuario en un teléfono inteligente, el atacante puede ver fácilmente si el descifrado produce archivos que "tienen sentido", o simplemente basura aleatoria.

Entonces, en la práctica, lo que estás tratando de lograr no funcionará con un PIN de 5 dígitos. Dado que el problema es básicamente que el atacante es más paciente y más poderoso que el usuario, y tiene comparativamente pocas combinaciones para probar, debe hacer que el usuario sea más paciente (buena suerte con eso) o más poderoso (difícil de hacer, ya que el atacante puede comprar al menos el mismo tipo de máquina que el usuario, o para aumentar el número de combinaciones posibles. Esto se conoce como "contraseña entropía". Consulte esta pregunta para conocer el tipo de discusión de contraseñas que pueden empaquetar sustancialmente más entropía (en ese caso, 44 bits, es decir 2 44 = 17592186044416 combinaciones) mientras que es fácil de recordar para un usuario humano normal.

    
respondido por el Thomas Pornin 19.02.2016 - 00:39
fuente
1

Le sugeriría que use PBKDF2 e itere sobre la entrada, por ejemplo. 5000 veces Luego use la salida como semilla para el rng.

Esto haría que sea más difícil forzar bruscamente todos los PINS y también funcionaría para otras entradas, como una contraseña.

Tenga en cuenta que esto no es una buena idea para la generación correcta de números aleatorios (criptográficos) cuando solo usa 5 dígitos. Sin embargo, puede ser que tenga un propósito para la aleatorización simple.

    
respondido por el John 18.02.2016 - 23:23
fuente

Lea otras preguntas en las etiquetas