Prova de conhecimento

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

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

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

Protocolo Schnorr

editar

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

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

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

Referências

editar
  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)