Ley de Números grandes vs. OpenSSL RAND_bytes

3

Tengo un sistema donde decenas de miles de usuarios inician sesión cuando lo desean y mi servidor tiene que asignarlos a una de las muchas bases de datos. Me gustaría distribuir los usuarios equitativamente entre las bases de datos. Estaba pensando en usar uno de los dos métodos y no puedo decidir cuál me dará una distribución más uniforme:

  1. RAND_bytes de OpenSSL modulo número de bases de datos.
  2. Marca de tiempo actual (en segundos) número de módulo de bases de datos.

La primera opción se basa en RAND_bytes y la segunda se basa en la Ley de Números Grandes.

Los usuarios inician sesión principalmente durante ciertas horas pico.

¿Cuál me dará una distribución más equitativa?

    
pregunta Max 16.07.2015 - 17:07
fuente

1 respuesta

4

Por definición, un PRNG criptográficamente seguro le dará la distribución más uniforme, ya que se consideraría cualquier sesgo detectable como una debilidad. Si el PRNG es "fuerte", esto significa que nadie detectó un solo sesgo, a pesar de que se estaban esforzando mucho .

La función RAND_bytes() de OpenSSL se supone que es un PRNG criptográficamente sólido, y muchos sistemas dependen de que.

Con las marcas de tiempo, solo puede esperar que nadie adivine su método y cree cuentas a intervalos regulares precisamente para que siempre caiga en la misma base de datos y así complicar su vida.

Por lo tanto, usa RAND_bytes() .

    
respondido por el Tom Leek 16.07.2015 - 17:21
fuente

Lea otras preguntas en las etiquetas