#!/intro

A geração de chaves privadas com diferentes algoritmos é essencial em múltiplos contextos: certificados digitais, VPNs, assinaturas, entre outros.

Seguem os comandos essenciais para gerar chaves privadas utilizando o OpenSSL, organizados por algoritmo e acompanhados de explicações detalhadas.


> RSA

O RSA é um dos algoritmos de chave pública mais amplamente utilizados. A sua longevidade e compatibilidade com uma vasta gama de sistemas e protocolos garantem-lhe um papel central em muitos ambientes operacionais. Apesar de exigir chaves significativamente maiores do que as curvas elípticas para oferecer níveis de segurança equivalentes, continua a ser uma opção fiável, sobretudo quando a interoperabilidade com sistemas legacy é um requisito.

Gerar chave RSA (2048 bits):

openssl genpkey \
        -algorithm RSA \
        -out rsa-key.pem \
        -pkeyopt rsa_keygen_bits:2048
  • -algorithm RSA: Define o algoritmo RSA.
  • -out rsa-key.pem: Ficheiro de saída contendo a chave privada em formato PEM.
  • -pkeyopt rsa_keygen_bits:2048: Define o tamanho da chave para 2048 bits (o mínimo recomendado atualmente, embora 3072 ou 4096 sejam preferíveis para maior segurança).

Inspecionar a chave RSA:

openssl pkey -in rsa-key.pem -text -noout

Este comando exibe os detalhes da chave privada, como o módulo (n) e os expoentes (público e privado).


> DSA

O DSA foi amplamente utilizado em versões anteriores do protocolo SSH e em esquemas de assinaturas digitais, sobretudo no início da adoção de algoritmos assimétricos. Contudo, as suas limitações técnicas levaram ao seu afastamento dos padrões atuais. É considerado obsoleto para novas implementações e desaconselhado pela maioria das recomendações de segurança.

Gerar chave DSA (2048 bits):

openssl dsaparam -out dsa-param.pem 2048
openssl gendsa -out dsa-key.pem dsa-param.pem
  • dsaparam: Gera os parâmetros DSA (primos p e q, e gerador g).
  • gendsa: Usa os parâmetros para gerar a chave privada.
  • -out dsa-key.pem: Ficheiro de saída contendo a chave privada em formato PEM.

Inspecionar a chave DSA:

openssl dsa -in dsa-key.pem -text -noout

> EC

As curvas elípticas oferecem elevada segurança com tamanhos de chave menores que RSA/DSA, tornando-as ideais para ambientes com restrições de desempenho ou largura de banda. As curvas do NIST, como a prime256v1, foram amplamente adotadas por integrarem normas internacionais e por garantirem interoperabilidade com diversos protocolos e bibliotecas. A sua utilização permanece comum, sobretudo em contextos institucionais e sistemas legacy.

Gerar chave com curva elíptica prime256v1:

openssl ecparam -name prime256v1 -genkey -noout -out ec-key.pem
  • -name prime256v1: Define a curva elíptica utilizada (equivalente a NIST P-256).
  • -genkey: Gera diretamente a chave privada.
  • -noout: Evita imprimir os parâmetros no terminal.
  • -out ec-key.pem: Ficheiro de saída contendo a chave privada em formato PEM.

Outras curvas disponíveis:

  • secp384r1: NIST P-384
  • secp521r1: NIST P-521 (para requisitos de segurança mais elevados)

Inspecionar a chave EC:

openssl ec -in ec-key.pem -text -noout

> Ed25519

O Ed25519 é um algoritmo de assinatura digital baseado na curva Curve25519, conhecido pela sua elevada eficiência e segurança. Produz assinaturas curtas e rápidas, com desempenho consistente tanto na geração como na verificação. É resistente a ataques por canal lateral e foi concebido com parâmetros definidos de forma transparente, o que reforça a confiança na sua segurança. Estas características tornam-no uma escolha sólida para aplicações modernas que exigem desempenho e fiabilidade.

Gerar chave Ed25519:

openssl genpkey -algorithm Ed25519 -out ed25519-key.pem
  • -algorithm Ed25519: Define o algoritmo.
  • -out ed25519-key.pem: Ficheiro de saída contendo a chave privada em formato PEM.

Inspecionar a chave Ed25519:

openssl pkey -in ed25519-key.pem -text -noout

Nota: O OpenSSL não permite converter a chave Ed25519 para outros formatos legacy (ex: PKCS#1) devido à sua natureza específica.


> Ed448

O Ed448, tal como o Ed25519, pertence à família de assinaturas digitais baseadas em curvas elípticas, mas foi concebido para oferecer um nível de segurança superior. Utiliza uma curva de 448 bits e produz assinaturas mais longas, adequadas para cenários em que se exige resistência a ataques futuros, nomeadamente ataques por parte de adversários com capacidades computacionais avançadas.

Gerar chave Ed448:

openssl genpkey -algorithm Ed448 -out ed448-key.pem
  • -algorithm Ed448: Define o algoritmo.
  • -out ed448-key.pem: Ficheiro de saída contendo a chave privada em formato PEM.

Inspecionar a chave Ed448:

openssl pkey -in ed448-key.pem -text -noout

> conclusão

A escolha do algoritmo e do tamanho da chave deve ser sempre ponderada de acordo com o contexto de utilização.

O RSA continua a ser relevante em ambientes onde a compatibilidade com sistemas legacy é essencial, sendo recomendada a utilização de chaves com, pelo menos, 2048 bits, embora 4096 bits ofereçam uma margem de segurança superior em contextos mais exigentes.

As curvas do NIST, como a prime256v1, continuam amplamente utilizadas devido ao seu suporte alargado e presença consolidada em normas e protocolos. No entanto, são geralmente consideradas menos seguras do que alternativas mais recentes. Embora não existam vulnerabilidades práticas conhecidas, subsistem preocupações na comunidade técnica quanto ao processo de geração dos seus parâmetros, cuja transparência tem sido alvo de críticas.

O DSA também deve ser evitado em novas implementações, uma vez que já não cumpre os padrões atuais de segurança. As suas limitações técnicas e a dependência de uma correta geração de valores aleatórios tornam-no desadequado face às exigências contemporâneas.

As Curvas Elípticas, em especial o Ed25519, têm ganho destaque devido à sua elevada performance, menor tamanho de chave e segurança moderna. O Ed25519 evita dependências históricas de parâmetros pouco transparentes, como os associados a algumas curvas do NIST, sendo considerado mais fiável tanto do ponto de vista criptográfico como do ponto de vista de confiança na sua origem.

Já algoritmos como o Ed448 são mais indicados para contextos que exigem níveis de segurança particularmente elevados. Tal como o Ed25519, foi desenvolvido com critérios rigorosos de simplicidade, resistência a falhas de implementação e transparência na definição dos parâmetros, o que reforça a sua adequação em aplicações críticas de longa duração.

> status: generated
> exit 0