Qual é a diferença entre DSA e RSA?

114

Parece que ambos são algoritmos de criptografia que requerem chaves públicas e privadas. Por que eu escolheria um em relação ao outro para fornecer criptografia em meu aplicativo cliente-servidor?

WilliamKF
fonte
3
Conforme mencionado por Henri , o DSA não é para criptografia, apenas assinatura.
Samveen

Respostas:

27

Referindo-se, https://web.archive.org/web/20140212143556/http://courses.cs.tamu.edu:80/pooch/665_spring2008/Australian-sec-2006/less19.html

RSA A
criptografia e descriptografia RSA são comutativas,
portanto, podem ser usadas diretamente como um esquema de assinatura digital
dado um esquema RSA {(e, R), (d, p, q)}
para assinar uma mensagem M, calcule:
S = M potência d (mod R)
para verificar uma assinatura, calcule:
M = S potência e (mod R) = M potência ed (mod R) = M (mod R)

O RSA pode ser usado tanto para criptografia quanto para assinaturas digitais, simplesmente invertendo a ordem em que os expoentes são usados: o expoente secreto (d) para criar a assinatura, o expoente público (e) para qualquer um verificar a assinatura. Tudo o mais é idêntico.

DSA (Digital Signature Algorithm)
DSA é uma variante dos algoritmos ElGamal e Schnorr que cria uma assinatura de 320 bits, mas com a segurança de 512-1024 bits, a segurança novamente depende da dificuldade de computação de logaritmos discretos foi amplamente aceita

Geração de chaves DSA
primeiramente compartilhada pública global os valores-chave (p, q, g) são escolhidos:
escolha um grande primo p = 2 potência L
onde L = 512 a 1024 bits e é um múltiplo de 64
escolha q, um fator primo de 160 bits de p-1
escolha g = h potência (p-1) / q
para qualquer h1
então cada usuário escolhe uma chave privada e calcula sua chave pública:
escolha x computar y = g potência x (mod p)

A geração da chave DSA está relacionada, mas um pouco mais complexa do que El Gamal. Principalmente por causa do uso do módulo secundário de 160 bits q usado para ajudar a acelerar os cálculos e reduzir o tamanho da assinatura resultante.

Criação e verificação de assinatura de DSA

para assinar uma mensagem M
gerar chave de assinatura aleatória k, k computar
r = (g potência k (mod p)) (mod q)
s = k-1.SHA (M) + xr (mod q)
enviar assinatura (r, s) com mensagem

para verificar uma assinatura, calcule:
w = s-1 (mod q)
u1 = (SHA (M) .w) (mod q)
u2 = rw (mod q)
v = (g potência u1.y power u2 (mod p)) (mod q)
se v = r então a assinatura é verificada

A criação da assinatura é novamente semelhante ao ElGamal com o uso de uma chave de assinatura temporária por mensagem k, mas fazendo calc primeiro mod p, depois mod q para reduzir o tamanho do resultado. Observe que o uso da função hash SHA é explícito aqui. A verificação também consiste em comparar dois cálculos, novamente um pouco mais complexos do que, mas relacionados a El Gamal.
Observe que quase todos os cálculos são mod q e, portanto, são muito mais rápidos.
Mas, ao contrário do RSA, o DSA pode ser usado apenas para assinaturas digitais

Segurança DSA
A presença de um canal subliminar existe em muitos esquemas (qualquer um que precise de um número aleatório para ser escolhido), não apenas DSA. Ele enfatiza a necessidade de "segurança do sistema", não apenas de um bom algoritmo.

AVA
fonte
o link para sua referência está quebrado
Paul Wintz
82

Verifique a resposta de AVA abaixo .

Minha velha resposta parece errada

SDReyes
fonte
Então, isso significa que se a quantidade de dados a criptografar for grande, ele será executado mais rapidamente usando RSA?
WilliamKF de
2
Não, o contrário. O DSA é mais rápido na assinatura (o que é matematicamente mais ou menos igual à criptografia), portanto, se você precisar criptografar muito e descriptografar com frequência, o DSA é mais rápido.
Henri de
Muitos dados para criptografar no lado do cliente, mas eles só são descriptografados uma vez no servidor. O DSA ainda vence?
WilliamKF
30
DSA não criptografa. Repito, o DSA não criptografa. Aqui está um teste: o que significa o "S" no DSA?
Presidente James K. Polk
4
@GregS RSA ser capaz de criptografar vs. DSA não ser capaz de criptografar é principalmente uma questão de terminologia. Chamamos vários algoritmos diferentes de RSA, alguns dos quais assinam (por exemplo, RSA-PSS), outros criptografam (por exemplo, RSA-OAEP). Mas demos a cada algoritmo de criptografia baseada em grupo um nome diferente, chamando um dos algoritmos de criptografia de criptografia ElGamal e chamando um dos algoritmos de assinatura de DSA.
CodesInChaos
24

Aliás, você não pode criptografar com DSA, apenas assinar. Embora sejam matematicamente equivalentes (mais ou menos), você não pode usar o DSA na prática como um esquema de criptografia, apenas como um esquema de assinatura digital.

Henri
fonte
20

Com referência a man ssh-keygen, o comprimento de uma chave DSA é restrito a exatamente 1024 bits para permanecer compatível com FIPS 186-2 do NIST. No entanto, chaves DSA mais longas são teoricamente possíveis; O FIPS 186-3 os permite explicitamente. Além disso, a segurança não é mais garantida com chaves RSA ou DSA de 1024 bits.

Em conclusão, uma chave RSA de 2048 bits é atualmente a melhor escolha.

MAIS PRECAUÇÕES A TOMAR

Estabelecer uma conexão SSH segura envolve mais do que selecionar uma tecnologia de par de chaves de criptografia segura. Em vista das revelações de Edward Snowden sobre a NSA, é preciso estar ainda mais vigilante do que o que antes era considerado suficiente.

Para citar apenas um exemplo, usar um algoritmo de troca de chaves seguro é igualmente importante. Aqui está uma boa visão geral das melhores práticas atuais de proteção SSH .

Serge Stroobandt
fonte
Algumas versões mais antigas do ssh-keygenpermitem outras chaves de tamanho de bits também (eu mesmo uso uma chave DSA de 2048 bits gerada ssh-keygenno RHEL).
Samveen de
6

E, além das boas respostas acima.

  • O DSA usa logaritmo discreto.
  • RSA usa Fatoração Inteira.

RSA significa Ron R ivest, Adi S hamir e Leonard A dleman.

Premraj
fonte