¿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