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:
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.
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.
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:
O verificador aceita se .
Podemos ver que esta é uma prova de conhecimento válida porque ela possui um extrator que funciona da seguinte forma:
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 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.
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.