Ir para o conteúdo

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 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 puder ser computado, dado à máquina como entrada. Como o programa do provador não necessariamente produz 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 provado por máquinas limitadas em tempo polinomial. Nesse caso, o conjunto de elementos de conhecimento é limitado a um conjunto de testemunhas de alguma linguagem em NP.

Seja uma declaração da linguagem em NP, e o conjunto de testemunhas para 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 a seguir:

  1. Completude: Se , então o provador que conhece a testemunha para consegue convencer o verificador de seu conhecimento. Mais formalmente: , ou seja, dada a interação entre o provador P e o verificador V, a probabilidade de o verificador ser convencido é 1.
  2. Validade: A validade requer que a probabilidade de sucesso de um extrator de conhecimento em extrair a testemunha, dado acesso oracular a um provador possivelmente malicioso , seja pelo menos tão alta quanto a probabilidade de sucesso do provador em convencer o verificador. Essa propriedade garante que nenhum provador que não conheça a testemunha consiga convencer o verificador.

Detalhes sobre a definição

[editar | editar código]

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

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

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

O erro de conhecimento denota a probabilidade de que o verificador possa aceitar , mesmo que o provador não conheça de fato 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 , ela pode ser vista como sendo mais forte do que a solidez de provas interativas comuns.

Relação com provas interativas gerais

[editar | editar código]

Para definir uma prova de conhecimento específica, é necessário não apenas definir a linguagem, mas também as testemunhas que o verificador deve conhecer. Em alguns casos, provar a pertinência a uma linguagem pode ser fácil, enquanto calcular 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 do logaritmo discreto seja difícil. Decidir a pertinência à linguagem é trivial, pois todo está em . No entanto, encontrar a testemunha tal que seja válido corresponde a resolver o problema do logaritmo discreto.

Protocolos

[editar | editar código]

Protocolo de Schnorr

[editar | editar código]

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

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

  1. Na primeira rodada, o provador se compromete com a aleatoriedade ; portanto, a primeira mensagem também é chamada de compromisso.
  2. O verificador responde com um desafio escolhido aleatoriamente.
  3. Após receber , o provador envia a terceira e última mensagem (a resposta) módulo reduzido à ordem do grupo.

O verificador aceita, se .

Podemos ver que esta é uma prova de conhecimento válida porque possui um extrator que funciona da seguinte maneira:

  1. Simule o provador para gerar . O provador está agora no estado .
  2. Gere um valor aleatório e insira-o no provador. Ele gera .
  3. Retorne o provador para o estado . Agora gere um valor aleatório diferente e insira-o no provador para obter .
  4. Imprima .

Como , a saída do extrator é precisamente .

Este protocolo é de conhecimento zero, embora essa propriedade não seja necessária para uma prova de conhecimento.

Protocolos Sigma

[editar | editar código]

Protocolos que possuem a estrutura de três movimentos acima (comprometimento, desafio e resposta) são chamados de protocolos sigma.[4] A nomenclatura se origina de Sig, referindo-se ao zigue-zague que simboliza os três movimentos do protocolo, e MA, uma abreviação de "Merlin e Arthur".[5] Os protocolos sigma existem para provar várias afirmações, como aquelas referentes 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 possui uma forma específica. Por exemplo, é possível provar que dois logaritmos de e em relação às bases e são iguais ou preenchem alguma outra relação linear. Para os elementos a e b de , dizemos que o provador prova o conhecimento de e tais que e . A igualdade corresponde ao caso especial em que a =1 e b = 0. Como pode ser calculado trivialmente a partir de , isso equivale a provar o conhecimento de um x tal que .

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

,

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

Aplicações

[editar | editar código]

Provas de conhecimento são ferramentas úteis para a construção de protocolos de identificação e, em sua variante que não é interativa, esquemas de assinatura. Tais esquemas são:

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

Ver também

[editar | editar código]

Referências

[editar | editar código]
  1. Shafrira Goldwasser, Silvio Micali, and Charles Rackoff. The knowledge complexity of interactive proof-systems. Proceedings of 17th Symposium on the Theory of Computation, Providence, Rhode Island. 1985. Draft. Extended abstract
  2. a b Mihir Bellare, Oded Goldreich: On Defining Proofs of Knowledge. CRYPTO 1992: 390–420
  3. C P Schnorr, Efficient identification and signatures for smart cards, in G Brassard, ed. Advances in Cryptology – Crypto '89, 239–252, Springer-Verlag, 1990. Lecture Notes in Computer Science, nr 435
  4. [1] On Sigma protocols
  5. [2] Modular Design of Secure yet Practical Cryptographic Protocols
  6. Proof Systems for General Statements about Discrete Logarithms