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:
- 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.
- 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:
- Na primeira rodada, o provador se compromete com a aleatoriedade math>r</math>; portanto, a primeira mensagem também é chamada de confirmação.
- O verificador responde com um desafio escolhido aleatoriamente.
- 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:
- Simula o provador para produzir . O provador está agora no estado math>Q</math>.
- Gera valor aleatório e o insire no provador. Ele produz .
- Retrocede o provador para declarar . Agora gera um valor aleatório diferente e o insire no provador para obter .
- 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]- ↑ 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)
- ↑ a b Mihir Bellare, Oded Goldreich: Sobre a definição de provas de conhecimento (em inglês). CRYPTO 1992: 390 à 420
- ↑ 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
- ↑ Esquemas de assinatura de grupo eficientes para grandes grupos (em inglês)