Digital Signature Standard

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

O Padrão de assinatura digital (DSS) é o padrão que usa o algoritmo de assinatura digital (DSA) para seu algoritmo de assinatura e SHA-1 como algoritmo de hash de mensagens. O DSA é uma codificação de chave pública usada apenas para gerar assinaturas digitais e não pode ser usada para criptografia de dados.

A assinatura DSA baseia-se na assinatura do ElGamal, mas é computacionalmente mais econômica porque trabalha com um grupo menor de potências do corpo finito.

Geração da firma

Para gerar a firma (x,y):

  1. Escolhe um número primo p de L bits, onde 512L1024 e L é divisível por 64.
  2. Escolhe um número primo q de 160 bits, tal que p1=qz, onde z é algum número natural.
  3. Escolhe h, onde 1<h<p1 tal que g=hzmodp>1.
  4. Escolhe x de forma aleatória, onde 1<x<q1.
  5. Calcula y=gxmodp.

Os dados públicos são p, q, g e y. A firma, a chave privada, é x.

Assinatura

Pra assinar à mensagem m por pela firma (x,y):

  1. Escolhe um número aleatório k, onde 1<k<q.
  2. Calcula r=(gkmodp)modq.
  3. Calcula s=k1(H(m)+rx)modq, onde H(m) é a função hash SHA-1 aplicada à mensagem m.
  4. A assinatura é o par (r,s).

Si r ou s é zero, repete!

Verificação

  1. Calcula w=s1modq.
  2. Calcula u1=H(m)wmodq.
  3. Calcula u2=rwmodq.
  4. Calcula v=[gu1yu2modp]modq.
  5. A assinatura é válida se v=r.

Demostração do Algoritmo

De g=hzmodp segue gqhqzhp11modp pelo Pequeno Teorema de Fermat. Já que g>1 e q é primo segue que g tem ordem q.

O firmador computa s=k1(SHA1(m)+xr)modq.

Então kSHA1(m)s1+xrs1SHA1(m)w+xrwmodq.

Já que g tem ordem q, gkgSHA1(m)wgxrwgSHA1(m)wyrwgu1yu2modp.

Finalmente, r=(gkmodp)modq=(gu1yu2modp)modq=v.