¿Cómo lanzo una moneda con alguien por internet?

Un TL bastante prolijo; DR:

  1. Alice y Bob eligen un generador pseudoaleatorio G de su elección. (Use Mersenne Twister o algo así. Solo asegúrese de que la longitud de salida sea al menos 3 veces la longitud de entrada).
  2. Cada uno de Alice y Bob debe elegir 2 cadenas aleatorias y mantenerlo en secreto, llamarlo v_A, s_A para Alice y v_B y s_B para Bob. También elija un bit aleatorio cada uno, llámelo b_A y b_B. Si v_A y v_B tienen una longitud de n bits, s_A y s_B tienen la misma longitud que G (v_B) y G (v_A).
  3. El resultado justo es b_A XOR b_B. Todo el problema es enviar b_A y b_B entre sí antes de conocer el bit de los demás.
    • En el paso 1, A y B se envían entre sí v_A y v_B.
    • En el paso 2, si b_A = 0, A envía s_A, si b_A = 1, A envía G (v_B) XOR s_A. De manera similar, si b_B = 0, B envía s_B, si b_B = 1, B envía G (v_A) XOR s_B.
    • En el paso 3, A y B se envían mutuamente sus bys. Cada uno calcula la moneda justa como b_A XOR b_B
    • En el paso 4, (Paso de verificación) A y B verifican si el bloqueo que recibieron en el paso 2 es correcto. Hecho.

Post largo por delante.

Usamos algo llamado un esquema de bloqueo seguro. Considere 2 fiestas, un verificador y un casillero. El esquema funciona de la siguiente manera.

Fase de bloqueo: el verificador inicialmente envía un mensaje, llámelo v, al casillero. El casillero elige un bit que quiere enviar, lo llama b, y elige una semilla aleatoria s, calcula L (b, s, v) y lo envía al verificador, donde L es un algoritmo de bloqueo conocido públicamente (daré Eres un algoritmo de bloqueo más tarde).

Fase de verificación: el casillero revela bys al verificador, el verificador simplemente calcula L (b, s, v) y verifica si es el mismo bloqueo que recibió en la fase de bloqueo.

Para que esto sea seguro, debemos garantizar 2 cosas. Ocultación y encuadernación.
Ocultar es garantizar que el verificador no pueda obtener b al ver solo L (b, v, s), para cualquier elección de v. La vinculación es garantizar que el casillero no haga trampa, y por lo tanto no pueda llegar a (0, s_0 ) y (1, s_1) de modo que L (0, v, s_0) = L (1, v, s_1). Claramente, si puede hacer tal cosa, puede dar ese bloqueo en la fase de bloqueo y hacer trampa en la etapa de verificación.

Se puede demostrar que nuestro esquema es tanto de bloqueo como de unión, debido a las propiedades de los generadores pseudoaleatorios.

El protocolo de lanzamiento de monedas es simplemente que cada parte actúe como verificador y el casillero, y ambas fases de bloqueo suceden primero (el orden no importa) y ambas fases de verificación suceden después (el orden no importa). Lo único que debemos asegurar es que todas las fases de bloqueo sucedan antes de que comience cualquier fase de verificación.

PD: Sugerencias para hacer que esta respuesta sea más accesible para el público en general. Enlaces a implementaciones de generadores pseudoaleatorios bienvenidos.

Esta fue en realidad una pregunta de asignación en mi curso de criptografía. Espero que esto ayude.

Una solución rápida para un lanzamiento de moneda imparcial entre dos personas : si puede proporcionar un número aleatorio {1,2,3} usted mismo, entonces cualquier aplicación de piedra, papel o tijera disponible funcionaría, independientemente de la estrategia de la otra persona .

Otro truco, mencionado en [1] y en el análisis de la teoría de juegos, es basar el resultado en un evento externo para ambos. Por ejemplo, el último dígito de un precio de acción en un momento futuro.

Con un poco más de esfuerzo, también puede aprovechar las ID únicas y aleatorias utilizadas en las bases de datos y las transacciones por Internet. Por ejemplo: si envía un correo electrónico, se agregará una ‘ID de mensaje’ al encabezado. Si utiliza un correo electrónico basado en la web como gmail, no tiene control sobre esta ID y tanto usted como el destinatario pueden verificarlo. [2] Por supuesto, el receptor podría afirmar que no lo recibió. 🙂

[1] http://answers.yahoo.com/questio
[2] Tenga en cuenta que no todas las ID de mensajes son completamente aleatorias, pero parte de ellas deberían ser: http://www.forensicswiki.org/wik

More Interesting

Cómo sentirse sobre la gran arquitectura de Angular

¿Qué es la aplicación PCBA?

¿Por qué necesitamos dos archivos web.config en una aplicación web?

¿Cómo manejamos los problemas de envío de formularios dobles o de páginas de actualización en las aplicaciones web Spring Boot?

¿Hay alguna investigación sobre el papel que juegan los mensajes de texto en tiempos de necesidad médica? ¿Para pacientes y cuidadores?

¿Cuál es la mejor aplicación de iPhone para realizar un seguimiento de los principales deportes?

¿Cuál es la mejor herramienta para crear formularios en línea que puedo alojar internamente?

Si desea crear una aplicación web pero no desea apoyar a un equipo de desarrollo, ¿pueden las opciones de código bajo ser lo suficientemente robustas como para admitir la aplicación?

¿Por qué alguien hizo clic en cada página de mi sitio web?

¿Cuándo se utilizan cadenas vacías en aplicaciones web?

¿Cuál es la diferencia entre un desarrollador de sitios web y un desarrollador de aplicaciones web?

¿Cuáles son todas las capacidades, soporte y características proporcionadas o cuáles deberían proporcionarse en un marco de automatización de prueba de aplicaciones web?

¿Cuál es la historia de tu aplicación web? ¿Qué te hizo construirlo y qué aprendiste de la experiencia?

¿Es un mal movimiento no incluir algún tipo de registro de correo electrónico / creación de cuenta al crear una aplicación web y solo confiar en el registro / inicio de sesión social?

¿Crees que AngularJS es el futuro del desarrollo web?