Un TL bastante prolijo; DR:
- 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).
- 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).
- 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.
- ¿Qué es una aplicación web y cuál es un ejemplo de una aplicación web?
- ¿Se puede construir un producto viable mínimo basado en web totalmente funcional en Python?
- Cómo crear una lista desplegable en una página web
- ¿Product Hunt se basa en Telesc.pe o se crea a medida con Meteor?
- ¿Hay alguna manera de crear APIs, también conocido como servicio web, en algún idioma definiendo solo los esquemas? ¿Puedo obtener mi función CRUD para que pueda ser consumida por los programas?
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.