Prova de conhecimento

Fonte: testwiki
Saltar para a navegação Saltar para a pesquisa

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 x uma declaração de linguagem L em NP e W(x) o conjunto de testemunhas de x que devem ser aceitas na prova. Isso nos permite definir a seguinte relação: R={(x,w):xL,wW(x)}.

Uma prova de conhecimento para a relação R com erro de conhecimento κ é um protocolo de duas partes com um provador P e um verificador V com as duas propriedades seguintes:

  1. Integridade: Se (x,w)R, então o provador P que conhece a testemunha w para x é bem sucedido em convencer o verificador V de seu conhecimento. Mais formalmente: Pr(P(x,w)V(x)1)=1, 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 E em extrair a testemunha, dado ao oráculo acesso a um provador possivelmente malicioso P~, deve ser pelo menos tão alta quanto a probabilidade de sucesso do provador P~ 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

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

Seja R uma relação de testemunha, W(x) o conjunto de todas as testemunhas para valor público x e κ o erro de conhecimento. Uma prova de conhecimento é κ-válida se existe uma máquina de tempo polinomial E, dado ao oráculo acesso a P~, tal que para cada P~, é o caso que EP~(x)(x)W(x){} e Pr(EP~(x)(x)W(x))Pr(P~(x)V(x)1)κ(x).

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

O erro de conhecimento κ(x) denota a probabilidade de que o verificador V pode aceitar x, mesmo que o provador de fato não conheça uma testemunha w. O extrator de conhecimento E é usado para expressar o que se entende por conhecimento de uma máquina de Turing. Se E pode extrair w de P~, dizemos que P~ conhece o valor de w.

Esta definição da propriedade de validade é uma combinação das propriedades de validade e validade forte.[2] Para pequenos erros de conhecimento κ(x), como, por exemplo, 280 ou 1/poly(|x|) pode ser visto como sendo mais forte do que a solidez das provas interativas comuns.

Relação com provas interativas gerais

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 g um grupo cíclico com gerador g no qual se acredita que resolver o problema de logaritmo discreto é difícil. Decidir a participação na linguagem L={xgw=x} é trivial, pois todo x está em g. No entanto, encontrar a testemunha w de modo que gw=x se mantenha corresponde a resolver o problema de logaritmo discreto.

Protocolos

Protocolo Schnorr

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 Gq da ordem q com gerador g.

A fim de provar o conhecimento de x=loggy, 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 t=gr também é chamada de confirmação.
  2. O verificador responde com um desafio c escolhido aleatoriamente.
  3. Depois de receber c, o provador envia a terceira e última mensagem (a resposta) s=r+cx módulo reduzido a ordem do grupo.

O verificador aceita, se gs=tyc.

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 t=gr. O provador está agora no estado math>Q</math>.
  2. Gera valor aleatório c1 e o insire no provador. Ele produz s1=r+c1x.
  3. Retrocede o provador para declarar Q. Agora gera um valor aleatório diferente c2 e o insire no provador para obter s2=r+c2x.
  4. Produz (s1s2)(c1c2)1.

Uma vez que (s1s2)=(r+c1x)(r+c2x)=x(c1c2), a saída do extrator é precisamente x.

Esse protocolo passa a ser de conhecimento zero, embora essa propriedade não seja exigida para uma prova de conhecimento.

Protocolos Sigma

Os protocolos que têm a estrutura de três movimentos acima (compromisso, desafio e resposta) são chamados de protocolos sigmaPredefinição:Citation needed. 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 y1 e y2 em relação às bases g1 e g2 são iguais ou cumprem alguma outra relação linear. Para os elementos a e b de Zq, dizemos que o provador prova conhecimento de x1 e x2 de modo que y1=g1x1y2=g2x2 e x2=ax1+b. A igualdade corresponde ao caso especial em que a = 1 eb = 0. Como x2 pode ser calculado trivialmente a partir de x1 isso é equivalente a provar conhecimento de um x tal que y1=g1xy2=(g2a)xg2b.

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.

PK{(x):y1=g1xy2=(g2a)xg2b},

afirma que o provador conhece um x que cumpre 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, 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

Referências

  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. 2,0 2,1 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)