Heurística de Fiat-Shamir
# Heurística de Fiat-Shamir

La heurística de Fiat-Shamir es una técnica criptográfica para a partir de una prueba de conocimiento cero interactiva obtener una prueba de conocimiento cero no interactiva. Si la prueba interactiva es un protocolo de identificación, entonces la versión no-interactiva puede ser usada directamente como una firma digital. Esta técnica fue aportada por Amos Fiat y Adi Shamir en 1986.

## Mecanismo

La heurística sigue los siguientes pasos:

* El probador genera un mensaje de compromiso indicando que conoce el secreto.
* El probador toma el compromiso y otra información como entradas y devuelve el desafío aplicando alguna función hash criptográfica
* El probador calcula la respuesta y envía la transcripción que incluye el compromiso, el desafío y la respuesta al verificador.

## Seguridad

La heurística fue presentada originalmente sin una prueba de seguridad; más tarde David Pointcheval y Jacques Stern probaron su seguridad contra un ataque de mensaje escogido en el modelo de oráculo aleatorio, esto es bajo la suposición de que el oráculo aleatorio existe (no se pueden predecir los resultados de una función hash). En caso de no existir el oráculo aleatorio se ha probado que es inseguro.

## Ejemplo

Veamos un ejemplo con la prueba interactiva sobre el conocimiento del logaritmo discreto.

* Alicia quiere probar a Bob que conoce $x$ el cual es el logaritmo discreto de $y=g^{x}$ para la base $g$.
* Alicia coge un número aleatorio $v\in \mathbb {Z} _{q}$, calcula $t=g^{v}$ y envía a Bob $t$.
* Bob coge un número aleatorio $c\in \mathbb {Z} _{q}^{*}$ y se lo envía a Alicia.
* Alicia calcula $r=v-cx$ y devuelve $r$ a Bob.
* Bob comprueba que $t\equiv g^{r}y^{c}$ (lo cual sucede solo si $g^{r}y^{c}=g^{v-cx}g^{xc}=g^{v}=t$).

La heurística de Fiat-Shamir lo convierte en:

* Alicia quiere probar a Bob que conoce $x$ el cual es el logaritmo discreto de $y=g^{x}$ para la base $g$.
* Alicia coge un número aleatorio $v\in \mathbb {Z} _{q}$ y calcula $t=g^{v}$.
* Alicia calcula $c=H(g,y,t)$, donde $H$ es una función hash criptográfica.
* Alicia calcula $r=v-cx$. El resultado de la prueba es el par $(t,r)$.
* Cualquiera puede comprobar que $t\equiv g^{r}y^{c}$ ya que $g^{r}y^{c}=g^{v-cx}g^{xc}=g^{v}=t$.

Se ha demostrado que si el valor hash usado no depende del valor (público) de y, la seguridad del esquema es débil ya que un probador malicioso puede entonces seleccionar cierto x tal que el producto de cx es conocido.

