Code-Makers ha revivido. It's alive! Bienvenidos! Presentate aca!

Generar un valor aleatorio entre varios y que todos obtengan el mismo valor

Avatar de Usuario
ni0
Arquitecto
Mensajes: 121
Registrado: Mar Nov 17, 2015 4:07 pm

Generar un valor aleatorio entre varios y que todos obtengan el mismo valor

Mensajepor ni0 » Jue Ago 25, 2016 6:49 pm

Hola, que tal?

Estaba chatteando con un amigo y resultaba que teniamos que decidir algo y lo mejor era que sea aleatorio. No era nada importante asique al final tomamos decidimos y listo, pero se me ocurrio:

Como hacer que podamos tomar la desicion aleatoriamente y que ambos estemos seguro que fue aleatorio y no que alguien tomo ventaja?

Dada la amistad y la desicion que teniamos que tomar, no ameritaba realizar ni preguntarse todo lo que esta en este post jaja, pero me quedo la duda de como lo resolveria, mas para un programa que tenga que comunicarse con otros programas y tomar una desicion aleatoria que involucre a varios.

Se me ocurrieron varias cuestiones:
Por ejemplo, si el me hubiera dicho que tiro un dado y le salio 3, yo podria no creerle y pensar que no tiro ningun dado y dijo un numero que a el le convenia
Si el se filmaba a si mismo tirando el dado para que vea lo que sale, yo podria creer que en realidad filmo varios videos y me mostro el que le convenia a el.
Si el me proponia de usar lo que salio en la loteria de ayer, yo podria pensar que el ya vio que salio en la loteria de ayer y que uso esa porque le convenia
Tambien podriamos decidir usar lo que salga en la loteria hoy a la noche, pero en ese caso tendriamos que esperar a la noche.

Entonces, como tomar una desicion "ya", que sea aleatoria, que no dependa de quien la realize y que todas las partes involucradas acepten el resultado, sin que nadie tome ventaja?
o bien
Habiendo varias partes involucradas, como elegir un valor aleatorio, que todos tengan el mismo valor, y que todos concuerden que fue aleatorio y que nadie quiso tomar ventaja?
Lo pense un rato y debe de estar ya descripto por otra persona en algun lado, o quisas tenga algun problema este metodo, pero en fin, esto es a lo que se me ocurrio:

Todas los involucrados (podrian ser mas de 2) deben de realizar los siguientes pasos
  1. Generar una sequencia de bytes, llamemosla E, recomendaria que sea aleatoria, si no es aleatoria y otro participante lo sabe, podria tomar ventaja
  2. Aplicarle una funcion hash previamente acordada, llamemosle H=hash(E)
  3. Intercambiar los hashes H con todos los involucrados, llamemosle Hi al hash recibido del participante i
  4. Cuando todos hayan pasado sus hashes, intercambiar la sequencia de entrada E entre todos los involucrados, llamemos Ei a la entrada recibida por el integrante i
  5. Comprobar que para cada integrante, Hi == hash(Ei), si alguno falla, no se puede continuar, significa que hubo algun error o el participante i intento hacer trampa
  6. Sumar toda las entradas Ei, incluida la nuestra, y llamemosla TE = E + todos los Ei, la suma es la matematica, no la concatenacion
  7. Aplicar la funcion hash previamente acordada a TE, llamemoslo R = hash(TE)
  8. Ahora R es un valor que todos los participantes tienen el mismo resultado y se podria decir que fue aleatorio

Un paso importante es que uno elija la sequencia de bytes de entrada como aleatoria, si uno quisiese que no fuese aleatoria otro podria tomar ventaja ya que podria saber de antemano la entrada que se va a usar y asi elegir el mismo una entrada que le convenga, por lo que es conveniente para uno que sea aleatorio

No creo que esto se pueda usar para una conversacion por chat, pero si quisas para un programa que tenga que comunicarse con otros programas y que todos elijan el mismo numero aleatoriamente

Saludos.


ni0 escribió:como te habras dado cuenta para Stallman, Linus y todos los que los siguen se refieren al hacking a la accion de programar porque les (nos?) da orgasmos (cuak cuak)

ni0 [at] code-makers [dot] es

Volver a “Ciencias de la Computacion”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado