o melhor algoritmo de Keygen público e privado – e por que

Gravitational patrocinou este post.

Virag Mody
Virag juntou-se Gravitacional em janeiro de 2020, após a co-fundador de um código de software de auditoria de empresa para Ethereum aplicações. Ele continua a aprender sobre tecnologias de tendência e produz conteúdo escrito e de vídeo de alta qualidade.

o que é pior do que deixar as chaves privadas sem vigilância? Ter Chaves Públicas que podem ser brutas.

o “seguro ” em” secure shell ” vem da combinação de hashing, criptografia simétrica e criptografia assimétrica. Juntos, o SSH usa primitivas criptográficas para conectar clientes e servidores com segurança. Nos 25 anos desde sua fundação, o poder de computação e as velocidades de acordo com a Lei de Moore exigiram algoritmos de baixo nível cada vez mais complicados.

a partir de 2020, os algoritmos de criptografia assimétrica mais amplamente adotados no mundo PKI são RSA, DSA, ECDSA e EdDSA. Então, qual é o melhor?

Então qual usar?

escolher o algoritmo certo depende de alguns critérios:

  • implementação: os especialistas podem lidar com isso ou precisam ser rolados?
  • Compatibilidade: existem clientes SSH que não suportam um método?
  • desempenho: quanto tempo levará para gerar uma chave suficientemente segura?Segurança: a chave pública pode ser derivada da chave privada? (O uso da computação quântica para quebrar a criptografia não é discutido neste artigo.)

RSA

implementação bibliotecas RSA podem ser encontradas para todas as principais linguagens, incluindo bibliotecas detalhadas

(JS, Python, Go, Rust, C).

Compatibilidade o uso de SHA-1 (OpenSSH) ou chaves públicas com menos de 2048 bits pode não ser suportado.
desempenho chaves maiores exigem mais tempo para gerar.
segurança algoritmos especializados como Peneira quadrática e peneira de Campo De Número geral existem para fatorar inteiros com qualidades específicas.

o tempo tem sido o maior aliado e maior inimigo da RSA. Publicado pela primeira vez em 1977, o RSA tem o maior suporte em todos os clientes e idiomas SSH e realmente resistiu ao teste do tempo como um método confiável de geração de chaves. Posteriormente, também está sujeito à Lei de Moore há décadas e o tamanho do bit-chave cresceu em tamanho. De acordo com os padrões do NIST, alcançar a segurança de 128 bits requer uma chave com um comprimento de 3072 bits, enquanto outros algoritmos usam chaves menores. Bit security mede o número de testes necessários para forçar uma chave. Segurança de 128 bits significa 2128 testes para quebrar.

DSA

Implementação DSA foi adotada pelo FIPS-184, em 1994. Tem ampla representação nas principais bibliotecas de criptografia, semelhante ao RSA.
Compatibilidade embora o DSA tenha suporte para clientes baseados em PuTTY, o OpenSSH 7.0 desabilita o DSA por padrão.
desempenho melhoria significativa nos tempos de geração de chaves para alcançar pontos fortes de segurança comparáveis, embora o comprimento de bits recomendado seja o mesmo que o RSA.
segurança DSA requer o uso de um valor imprevisível e secreto gerado aleatoriamente que, se descoberto, pode revelar a chave privada.

o que torna o DSA diferente do RSA é que o DSA usa um algoritmo diferente. Ele resolve um problema totalmente diferente, conhecido como o problema do logaritmo discreto, usando um conjunto diferente de equações, elementos e etapas.

Este algoritmo envolve o uso de um número gerado aleatoriamente, m, que é usado com a assinatura de uma mensagem junto com uma chave privada, k. Este número m deve ser mantida privada. O valor mis deve ser um nonce, que é um valor exclusivo incluído em muitos protocolos criptográficos. No entanto, as condições adicionais de imprevisibilidade e sigilo tornam o nonce mais semelhante a uma chave e, portanto, extremamente importante.

Nota do patrocinador

logotipo do patrocinador

a Gravitational oferece OSS para fornecer, acessar e gerenciar aplicativos nativos da nuvem em qualquer infraestrutura com o mínimo esforço. O Teleport é nosso gateway de segurança para gerenciar o acesso privilegiado à infraestrutura do servidor por meio do SSH e do Kubernetes. Experimente-os em gravitational.com.

não só é difícil garantir a verdadeira aleatoriedade dentro de uma máquina, mas a implementação inadequada pode quebrar a criptografia. Por exemplo:

  1. a classe Java SecureRandom do Android era conhecida por criar valores R em colisão. Em outras palavras, a classe reutilizou alguns números gerados aleatoriamente. Isso expôs uma série de diferentes carteiras Bitcoin baseadas no Android a terem suas chaves privadas roubadas. Os requisitos do nonce m significam que quaisquer duas instâncias com o mesmo valor nonce podem ser engenharia reversa e revelar a chave privada usada para assinar transações.Levando isso um passo adiante, fail0verflow descobriu a chave privada usada para assinar atualizações de firmware para o Sony Playstation 3. Em outras palavras, os programadores poderiam escrever seu próprio código, assiná-lo com a chave privada revelada e executá-lo no PS3. Acontece que a Sony estava usando o mesmo número aleatório para assinar cada mensagem.

ECDSA e EdDSA

os dois exemplos acima não são inteiramente sinceros. Tanto a Sony quanto o protocolo Bitcoin empregam ECDSA, não DSA propriamente dita. ECDSA é uma implementação de curva elíptica de DSA. Funcionalmente, onde RSA e DSA exigem comprimentos de chave de 3072 bits para fornecer 128 bits de segurança, o ECDSA pode realizar o mesmo com apenas Chaves de 256 bits. No entanto, o ECDSA depende do mesmo nível de aleatoriedade que o DSA, portanto, o único ganho é velocidade e comprimento, não Segurança.

em resposta às velocidades desejadas de curvas elípticas e aos riscos de segurança indesejados, outra classe de curvas ganhou alguma notoriedade. EdDSA resolve o mesmo problema de log discreto que DSA / ECDSA, mas usa uma família diferente de curvas elípticas conhecidas como curva de Edwards (EdDSA usa uma curva de Edwards torcida). Embora ofereça pequenas vantagens em velocidade em relação ao ECDSA, sua popularidade vem de uma melhoria na segurança. Em vez de depender de um número aleatório para o valor nonce, o EdDSA gera um nonce deterministicamente como um hash, tornando-o resistente a colisões.

dando um passo para trás, o uso de curvas elípticas não garante automaticamente algum nível de segurança. Nem todas as curvas são iguais. Apenas algumas curvas passaram por testes rigorosos. Felizmente, a indústria de PKI lentamente passou a adotar Curve25519-em particular para EdDSA. Juntos, Isso torna o algoritmo de assinatura de chave pública, Ed25519.

implementação EdDSA é bastante novo. Crypto++ e cryptlib atualmente não suportam EdDSA.
Compatibilidade compatível com clientes mais novos, o Ed25519 viu a maior adoção entre as curvas Edward; embora o NIST também tenha proposto o Ed448 em seu recente rascunho de SP 800-186.
desempenho Ed25519 é o algoritmo de desempenho mais rápido em todas as métricas. Tal como acontece com o ECDSA, as chaves públicas têm o dobro do comprimento da segurança de bits desejada.
segurança EdDSA fornece o mais alto nível de segurança em comparação com o comprimento da chave. Também melhora as inseguranças encontradas no ECDSA.

Basicamente, RSA ou EdDSA

Quando se trata baixo para ele, a escolha é entre RSA 2048/4096 e Ed25519 e o trade-off é entre desempenho e compatibilidade. O RSA é universalmente suportado entre os clientes SSH, enquanto o EdDSA tem um desempenho muito mais rápido e fornece o mesmo nível de segurança com chaves significativamente menores. Peter Ruppel coloca a resposta sucintamente:

“a resposta curta para isso é: contanto que a força-chave seja boa o suficiente para o futuro previsível, isso realmente não importa. Porque aqui estamos considerando uma assinatura para Autenticação em uma sessão SSH. A força criptográfica da assinatura só precisa suportar os ataques atuais e de última geração.”- Ed25519 para SSH

simplesmente não use ECDSA / DSA!

imagem do recurso via .A New Stack é uma subsidiária integral da Insight Partners, um investidor nas seguintes empresas mencionadas neste artigo: Bit.

Leave a Reply