Prova de conhecimento

Na criptografia, uma prova de conhecimento (proof of knowledge) é um sistema de prova interativa no qual o provador consegue "convencer" um verificador de que ele sabe algo. O significado de uma máquina abstrata "saber algo" é definido em termos de computação. Uma máquina "sabe algo" se esse algo puder ser computado, dada a própria máquina como entrada. Como o programa do provador não necessariamente cospe o conhecimento em si (como é o caso de provas de conhecimento zero), uma máquina com um programa diferente, chamada de extrator de conhecimento, é introduzida para capturar essa ideia. Estamos interessados principalmente no que pode ser provado por máquinas limitadas a tempo polinomial. Neste caso, o conjunto de elementos de conhecimento é limitado a um conjunto de testemunhas de alguma linguagem formal em NP.

Seja uma afirmaçã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 (Completeness): 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 (Validity): A validade exige que a probabilidade de sucesso de um extrator de conhecimento em extrair a testemunha, dado o acesso de oráculo a um provador possivelmente malicioso , deve ser 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

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

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 o acesso de oráculo a , tal que para cada , ocorra 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 o verificador aceitar , embora o provador na verdade não conheça uma testemunha . O extrator de conhecimento é usado para expressar o que se entende pelo conhecimento de uma máquina de Turing. Se puder 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. Para erros de conhecimento pequenos , como por exemplo ou , ela pode ser vista como sendo mais forte do que a corretude (soundness) de provas interativas comuns.

Relação com provas interativas gerais

Para definir uma prova de conhecimento específica, é necessário definir não apenas 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 computar uma testemunha específica pode ser difícil. A melhor forma de explicar isso é por meio de 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 da linguagem é trivial, já que cada está em . No entanto, encontrar a testemunha tal que seja verdadeiro corresponde a resolver o problema do logaritmo discreto.

Protocolos

Protocolo de Schnorr

Uma das provas de conhecimento mais simples e frequentemente utilizadas, a prova de conhecimento de um logaritmo discreto, foi criada por Schnorr. 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 uma aleatoriedade ; portanto, a primeira mensagem também é chamada de compromisso (commitment).
  2. O verificador responde com um desafio (challenge) escolhido aleatoriamente.
  3. Após receber , o provador envia a terceira e última mensagem (a resposta ou response) reduzida em módulo da ordem do grupo.

O verificador aceita se .

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

  1. Simula o provador para gerar a saída . O provador está agora no estado .
  2. Gera um valor aleatório e o fornece como entrada para o provador. Ele gera a saída .
  3. Retorna o provador ao estado . Agora gera um valor aleatório diferente e o fornece ao provador para obter .
  4. Gera a saída .

Como , a saída do extrator é precisamente .

Este protocolo também é uma prova de conhecimento zero, embora essa propriedade não seja obrigatória para uma prova de conhecimento.

Protocolos Sigma

Protocolos que possuem a estrutura de três movimentos acima (compromisso, desafio e resposta) são chamados de protocolos sigma. O nome se origina de Sig, referindo-se ao zigue-zague que simboliza os três movimentos do protocolo, e MA, uma abreviação de "Merlin-Arthur". Existem protocolos sigma para provar várias afirmações, como as que se referem 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 cumprem alguma outra relação linear. Para elementos a e b de , dizemos que o provador prova o conhecimento de e de modo que e . A igualdade corresponde ao caso especial em que a = 1 e b = 0. Como pode ser computado de forma trivial a partir de , isso é equivalente a provar o conhecimento de um x tal que .

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

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

Aplicações

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

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

Ver também

Referências

  1. ↑ Shafi Goldwasser, Silvio Micali, e 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 [ligação inativa]
  2. 1 2 Mihir Bellare, Oded Goldreich: On Defining Proofs of Knowledge [ligação inativa]. 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. ↑ On Sigma protocols
  5. ↑ Cramer, Ronald (1996). Modular Design of Secure yet Practical Cryptographic Protocols (Ph.D. thesis). CWI and University of Amsterdam
  6. ↑ Proof Systems for General Statements about Discrete Logarithms