distributed - repetir - numeros aleatorios en java netbeans
Generación de números aleatorios distribuidos (3)
Esto probablemente no sea lo que estás buscando, pero solo para comenzar este hilo, ¿qué tal esto?
Seleccione un líder, deje que el líder elija el número, distribuya el número a todos.
Me preguntaba si hay una forma para que una red de N participantes acuerde que se eligió un número del 1 al M al azar. (por ejemplo, no influenciado por ninguno de los participantes) Esto se ha resuelto para valores de n = 2 ym = 2 mediante el protocolo de lanzamiento de monedas . ¿Alguien sabe de alguna solución que pueda funcionar para valores arbitrarios de N y M?
No sé si es posible que las personas estén de acuerdo en la aleatoriedad de un solo número; debería estar en las estadísticas. Si las estadísticas de muchos números aleatorios coincidieran con las estadísticas de los números tomados desde aquí , consideraría su número aleatorio, pero no sé cuál será el siguiente tipo N + 1 en la red.
Editar
Mejor algoritmo (gracias wnoise):
- Todos escogen un número secreto de 0 a M-1
- Todo el mundo agrega una carga de mugre al azar a su número y hashes el resultado con un hash seguro
- Todos le dicen a todos los demás este hash
- Todos le dicen a todos los demás su número secreto, más el alijo aleatorio que le anexaron
- Todos verifican que los números y hash + coincidencia de gunk
- Agregue todos los números secretos junto con el módulo M, luego agrega 1 para obtener el resultado final
Como participante, debería estar satisfecho con esto porque sé que tuve plena influencia sobre el resultado final: el número final podría haber sido cualquier cosa, dependiendo de mi elección de número secreto. Entonces, como nadie más podía predecir mi número, tampoco podrían haber predicho el resultado final.
¿Alguna forma de reducir los mensajes del 3M ^ 2 que sospecho que un enfoque de transmisión requeriría?
Creo que solo la publicación hash tiene que ser una transmisión, pero sigue siendo O (M ^ 2). Supongo que la única forma de evitarlo sería preintercambiar claves de firma digital o tener un centro de comunicación de confianza.
Edit2 - ¿Qué tan seguro es el hash?
Los posibles ataques incluyen:
- Si puedo generar una colisión hash entonces tengo dos números secretos con el mismo hash. Entonces, una vez que conozco los números secretos de todos los demás, puedo elegir cuál de mis números secretos revelaré, seleccionando uno de los dos posibles resultados.
- Si genero mi número secreto y la suciedad al azar usando un PRNG, entonces un atacante que intente usar fuerza bruta mi hash no tiene que probar todos los números posibles + gunk, solo cada posible semilla para el PRNG.
- Utilizo el número + mugre que todo el mundo revela para determinar la información sobre sus PRNG: podría tratar de adivinar o de fuerza bruta las semillas, o calcular el estado interno de la salida. Esto me ayuda a predecir qué números generarán la próxima vez, lo que reduce el espacio de búsqueda para un ataque de fuerza bruta.
Por lo tanto, deberías
- Use un algoritmo de hash ininterrumpido de confianza.
- Use un generador de números aleatorios criptográficamente seguro que tenga una gran semilla / estado, y trate de sembrarlo a partir de una buena fuente de entropía.