Prova de conhecimento

Origem: Wikipédia, a enciclopédia livre.

Na criptografia, uma prova de conhecimento é uma prova interativa na qual o provador consegue "convencer" um verificador de que o provador sabe algo. O que significa para uma máquina "saber algo" é definido em termos de computação. Uma máquina "sabe algo", se esse algo pode ser calculado, dado a máquina como uma entrada. Como o programa do provador não expele necessariamente o conhecimento em si (como é o caso das provas de conhecimento zero[1]), uma máquina com um programa diferente, chamado extrator de conhecimento, é introduzida para capturar essa ideia. Estamos principalmente interessados no que pode ser comprovado por máquinas de tempo polinomial limitado. Neste caso, o conjunto de elementos de conhecimento se limita a um conjunto de testemunhas de alguma linguagem em NP.

Seja uma declaração de linguagem em NP e o conjunto de testemunhas de x que devem ser aceitas na prova. Isso nos permite definir a seguinte relação: .

Uma prova de conhecimento para a relação com erro de conhecimento é um protocolo de duas partes com um provador e um verificador com as duas propriedades seguintes:

  1. Integridade: Se , então o provador que conhece a testemunha para é bem sucedido em convencer o verificador de seu conhecimento. Mais formalmente: , isto é, dada a interação entre o provador P e o verificador V, a probabilidade de o verificador estar convencido é 1.
  2. Validade: A validade requer que a probabilidade de sucesso de um extrator de conhecimento em extrair a testemunha, dado ao oráculo acesso a um provador possivelmente malicioso , deve ser pelo menos tão alta quanto a probabilidade de sucesso do provador em convencer o verificador. Esta propriedade garante que nenhum provador que não conheça a testemunha consiga convencer o verificador.

Detalhes na definição[editar | editar código-fonte]

Esta é uma definição mais rigorosa de validade:[2]

Seja uma relação de testemunha, o conjunto de todas as testemunhas para valor público e o erro de conhecimento. Uma prova de conhecimento é -válida se existe uma máquina de tempo polinomial , dado ao oráculo acesso a , tal que para cada , é o caso que e

O resultado significa que a máquina de Turing não chegou à uma conclusão.

O erro de conhecimento denota a probabilidade de que o verificador pode aceitar , mesmo que o provador de fato não conheça uma testemunha . O extrator de conhecimento é usado para expressar o que se entende por conhecimento de uma máquina de Turing. Se pode extrair de , dizemos que conhece o valor de .

Esta definição da propriedade de validade é uma combinação das propriedades de validade e validade forte.[2] Para pequenos erros de conhecimento , como, por exemplo, ou pode ser visto como sendo mais forte do que a solidez das provas interativas comuns.

Relação com provas interativas gerais[editar | editar código-fonte]

Para definir uma prova de conhecimento específica, é necessário definir não apenas o linguagem, mas também as testemunhas que o verificador deve conhecer. Em alguns casos, provar a associação em uma linguagem pode ser fácil, enquanto computar uma testemunha específica pode ser difícil. Isso é melhor explicado usando um exemplo:

Seja um grupo cíclico com gerador no qual se acredita que resolver o problema de logaritmo discreto é difícil. Decidir a participação na linguagem é trivial, pois todo está em . No entanto, encontrar a testemunha de modo que se mantenha corresponde a resolver o problema de logaritmo discreto.

Protocolos[editar | editar código-fonte]

Protocolo Schnorr[editar | editar código-fonte]

Uma das provas de conhecimento mais simples e frequentemente usadas, a prova de conhecimento de um logaritmo discreto, é devida a Schnorr.[3] O protocolo é definido para um grupo cíclico da ordem com gerador .

A fim de provar o conhecimento de , o provador interage com o verificador da seguinte forma:

  1. Na primeira rodada, o provador se compromete com a aleatoriedade math>r</math>; portanto, a primeira mensagem também é chamada de confirmação.
  2. O verificador responde com um desafio escolhido aleatoriamente.
  3. Depois de receber , o provador envia a terceira e última mensagem (a resposta) módulo reduzido a ordem do grupo.

O verificador aceita, se .

Podemos ver que esta é uma prova válida de conhecimento, pois possui um extrator que funciona da seguinte forma:

  1. Simula o provador para produzir . O provador está agora no estado math>Q</math>.
  2. Gera valor aleatório e o insire no provador. Ele produz .
  3. Retrocede o provador para declarar . Agora gera um valor aleatório diferente e o insire no provador para obter .
  4. Produz .

Uma vez que , a saída do extrator é precisamente .

Esse protocolo passa a ser de conhecimento zero, embora essa propriedade não seja exigida para uma prova de conhecimento.

Protocolos Sigma[editar | editar código-fonte]

Os protocolos que têm a estrutura de três movimentos acima (compromisso, desafio e resposta) são chamados de protocolos sigma[carece de fontes?]. A letra grega visualiza o fluxo do protocolo. Os protocolos Sigma existem para provar várias declarações, como aquelas pertencentes a logaritmos discretos. Usando essas provas, o provador pode não apenas provar o conhecimento do logaritmo discreto, mas também que o logaritmo discreto tem uma forma específica. Por exemplo, é possível provar que dois logaritmos de e em relação às bases e são iguais ou cumprem alguma outra relação linear. Para os elementos a e b de , dizemos que o provador prova conhecimento de e de modo que e . A igualdade corresponde ao caso especial em que a = 1 eb = 0. Como pode ser calculado trivialmente a partir de isso é equivalente a provar conhecimento de um x tal que .

Essa é a intuição por trás da seguinte notação,[4] que é comumente usada para expressar o que exatamente é provado por uma prova de conhecimento.

afirma que o provador conhece um x que cumpre a relação acima.

Aplicações[editar | editar código-fonte]

As provas de conhecimento são ferramentas úteis para a construção de protocolos de identificação e, em sua variante não interativa, os esquemas de assinatura. Esses esquemas são:

Eles também são usados na construção de sistemas de assinatura de grupo e credenciais digitais anônimas.

Ver também[editar | editar código-fonte]

Referências[editar | editar código-fonte]

  1. Shafi Goldwasser, Silvio Micali e Charles Rackoff. A complexidade do conhecimento dos sistemas de prova interativos (em inglês). Anais do 17º simpósio de teoria da computação, Providence, Rhode Island. 1985. Esboço, projeto. Resumo estendido (em inglês)
  2. a b Mihir Bellare, Oded Goldreich: Sobre a definição de provas de conhecimento (em inglês). CRYPTO 1992: 390 à 420
  3. C. P. Schnorr, Identificação e assinaturas eficientes para cartões inteligentes, em G Brassard, Avanços na criptologia – Crypto '89, 239 à 252 (em inglês), Springer-Verlag, 1990. Notas de aula em ciência da computação, número 435
  4. Esquemas de assinatura de grupo eficientes para grandes grupos (em inglês)