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?
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?
Respostas:
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.
Verifique a resposta de AVA abaixo .
Minha velha resposta parece errada
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.
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 .
ssh-keygen
permitem outras chaves de tamanho de bits também (eu mesmo uso uma chave DSA de 2048 bits gerada ssh-keygen
no RHEL).