Generando muchas claves: ¿cuántos CSPRNGs usar?

1

Diga que quiero crear muchas claves AES aleatorias y tener acceso a una fuente segura de números aleatorios SecRand .

Veo dos extremos de cómo podría escribir una fábrica de claves.

Utilice la misma fuente aleatoria para todas las teclas:

KeyFactoryA {
    private r = new SecRand()

    makeKey() {
        // create a key using r
    }
}

Utilice una nueva fuente para cada clave:

KeyFactoryB {
    makeKey() {
        r = new SecRand()
        // create a key using r
    }
}

Recuerdo de las conferencias de estadísticas (campo diferente, lo sé) que el flujo agregado de bits aleatorios utilizado en B no sería necesariamente aleatorio de manera uniforme; es decir, B sería estadísticamente débil. Además, se requiere un grupo mayor de entropía para inicializar todos los diferentes r .

A , por otro lado, puede crear muchas claves a partir de un pequeño grupo inicial de entropía. Eso tampoco suena muy bien.

¿Existen diferencias relacionadas con la seguridad entre las dos opciones?

    
pregunta Raphael 26.01.2017 - 11:52
fuente

1 respuesta

3

Lo que quieres para tu (s) clave (s) es que sea completamente impredecible.

Ahora hay tres casos para distinguir que realmente dependen de su clase / objeto "aleatorio seguro".

  1. Comienza con una alta entropía y luego cae. Si su fuente de entropía es realmente buena, esto no debería suceder, pero si lo hace, puede usar una nueva instancia (como hizo en B) o usted crea una instancia de lo que los criptógrafos llaman un generador pseudoaleatorio (PRG, es decir, un cifrado de cifrado fuerte ceros) utilizando su entrada de alta entropía y utiliza el flujo de clave de reutilización como fuente continua de material clave computacionalmente impredecible. Tenga en cuenta que si usa la salida directamente, la salida debe ser uniformemente aleatoria , lo que significa que si usa un efecto físico directo o algún RNG de muestreo gaussiano, realmente debería de forma segura cortar la salida del RNG y luego introducirlo en un PRG que eliminará todo sesgo potencial.
  2. Comienza mal y luego aumenta la entropía con el tiempo. En este caso, debes tomar la entropía que obtienes con el tiempo y condensar en una cadena corta altamente impredecible usando una función hash segura y la utiliza para crear una instancia de un PRG.
  3. Siempre es una buena fuente de uniformemente números aleatorios. En este caso, realmente no importa qué enfoque siga, por ejemplo, usar solo una instancia para siempre, generar muchas nuevas instancias o usar un PRG, todos ellos deberían estar bien.
respondido por el SEJPM 26.01.2017 - 12:09
fuente

Lea otras preguntas en las etiquetas