Si estamos con una amiga jugando a adivinar un número entre el $0$ y $100$ pero me quiero asegurar que no cambie el valor a medida que trato de adivinarlo y así también poder chequear que adiviné correctamente el número sin que lo revele. Podemos utilizar un esquema de compromiso para asegurarnos estas condiciones que estamos pidiendo. Para ello podemos introducir el Compromiso de Pedersen

Esquema:

  1. El agente que desea mandar un mensaje $m$ se lo llama emisor del compromiso, elige un elemento random $r$ y genera $commit=C(m,r).$ Donde $C$, es un algoritmo que toma el mensaje como el número random y los convierte en el $commit$ que tiene de cierta manera el mensaje condensado.
  2. El emisor revela el $commit.$
  3. Se revelan tanto $m'$ y $r'$. (podrian no ser los $m$ y $r$ originales)
  4. Otro agente, llamado verificador, recibe el $commit$, y puede chequear que efectivamente que el mesaje $m'$ efectivamente era el del paso 1 pues realiza $C(m',r')$ y verifica que es igual a commit.

Podemos observar que el verificador no puede inferir el valor del mensaje ni del elemento random sabiendo solo $commit$ como el algoritmo $C$. Se le pide al algoritmo $C$ que la probabilidad de encontrar dos pares $(m,r)$ y $(m',r')$ tal que $C(m,r)=C(m',r')$ es muy baja. Esto nos garantiza que el emisor no puede mentir y pasarnos otros valores de $m$ y $r$ en el paso 3. Es decir no puede modificar el mensaje original.

Podemos tener el esquema de una manera más funcional utilizando funciones hash de la siguiente manera:

Esquema usando funciones hash:

Tomamos a $H$ como una función hash, por ejemplo SHA-256.

  1. El emisor elige un elemento random $r$ y calcula $commit=H(m,r)$.
  2. El emisor revela $commit$.
  3. Se revelan tanto $m$ y $r$.
  4. Otro agente,llamado verificador, recibe el $commit$ , puede chequear que efectivamente el mensaje $m$ proviene del $commit$ calculando $H(m,r)$.

Si vamos más a la práctica podemos tener este esquema de una forma más algebraica.

Esquema usando Grupos:

  1. Parámetros Públicos: 2 primos $p,q$ tal que $p=2q+1$, y dos elementos $g_1,g_2 \in \mathbb{Z}_p^{*}$ de orden $q$. Es decir que la mínima potencia a la cual $g_1, g_2$ son iguales a $1$ es $q$.
  2. Calcular $m$ en $\mathbb{Z}_q^{*}$.
  3. El emisor elige un elemento random $r$ en $\mathbb{Z}_q$ y calcula $commit=g_1^mg_2^r (\text{mod } p)$.
  4. El emisor revela $commit.$