Lançamento da biblioteca criptográfica OpenSSL 3.0.0

Após três anos de desenvolvimento e 19 lançamentos de testes, a biblioteca OpenSSL 3.0.0 foi lançada com a implementação dos protocolos SSL/TLS e diversos algoritmos de criptografia. A nova ramificação inclui alterações que quebram a compatibilidade com versões anteriores no nível de API e ABI, mas as alterações não afetarão a operação da maioria dos aplicativos que exigem uma reconstrução para migrar do OpenSSL 1.1.1. A ramificação anterior do OpenSSL 1.1.1 terá suporte até setembro de 2023.

Uma mudança significativa no número da versão se deve à transição para a tradicional numeração “Major.Minor.Patch”. A partir de agora, o primeiro dígito (Maior) no número da versão mudará apenas se a compatibilidade for quebrada no nível API/ABI, e o segundo (Menor) mudará quando a funcionalidade for aumentada sem alterar a API/ABI. As atualizações corretivas serão entregues com alteração do terceiro dígito (Patch). O número 3.0.0 imediatamente após 1.1.1 foi escolhido para evitar sobreposições com o módulo FIPS para OpenSSL atualmente em desenvolvimento, para o qual foi utilizada a numeração 2.x.

A segunda mudança importante para o projeto foi a transição de uma licença dupla (OpenSSL e SSLeay) para a licença Apache 2.0. A licença proprietária anterior do OpenSSL era baseada no texto da licença herdada do Apache 1.0 e exigia menção explícita do OpenSSL em materiais de marketing ao usar bibliotecas OpenSSL, bem como um aviso especial se o OpenSSL fosse fornecido como parte do produto. Esses requisitos tornaram a licença antiga incompatível com a GPL, dificultando o uso do OpenSSL em projetos licenciados pela GPL. Para contornar esta incompatibilidade, os projetos GPL foram forçados a usar acordos de licença específicos nos quais o texto principal da GPL era complementado com uma cláusula que permitia explicitamente que o aplicativo fosse vinculado à biblioteca OpenSSL e mencionava que os requisitos da GPL não o faziam. aplicam-se à vinculação com OpenSSL.

Comparado ao ramo OpenSSL 1.1.1, o OpenSSL 3.0.0 adiciona mais de 7500 alterações contribuídas por 350 desenvolvedores. Principais inovações do OpenSSL 3.0.0:

  • Foi proposto um novo módulo FIPS, incluindo a implementação de algoritmos criptográficos que atendem ao padrão de segurança FIPS 140-2 (o processo de certificação do módulo está programado para começar este mês e a certificação FIPS 140-2 está prevista para o próximo ano). O novo módulo é muito mais fácil de usar e conectá-lo a muitos aplicativos não será mais difícil do que alterar o arquivo de configuração. Por padrão, o módulo FIPS está desabilitado e requer que a opção enable-fips esteja habilitada.
  • libcrypto implementa o conceito de provedores conectáveis, que substituiu o conceito de motores (a API ENGINE foi descontinuada). Com a ajuda de provedores, você pode adicionar suas próprias implementações de algoritmos para operações como criptografia, descriptografia, geração de chaves, cálculo de MAC, criação e verificação de assinaturas digitais. É possível conectar novos e criar implementações alternativas de algoritmos já suportados (por padrão, o provedor integrado ao OpenSSL agora é usado para cada algoritmo).
  • Adicionado suporte para o Certificate Management Protocol (RFC 4210), que pode ser usado para solicitar certificados de um servidor CA, atualizar certificados e revogar certificados. O trabalho com CMP é realizado através do novo utilitário openssl-cmp, que também suporta o formato CRMF (RFC 4211) e envio de solicitações via HTTP/HTTPS (RFC 6712).
  • Foi implementado um cliente completo para os protocolos HTTP e HTTPS, suportando os métodos GET e POST, redirecionamento de solicitações, trabalhando através de um proxy, codificação ASN.1 e processamento de timeout.
  • Um novo EVP_MAC (API de código de autenticação de mensagem) foi adicionado para facilitar a adição de novas implementações de inserções simuladas.
  • É proposta uma nova interface de software para geração de chaves - EVP_KDF (Key Derivation Function API), que simplifica a adição de novas implementações de KDF e PRF. A antiga API EVP_PKEY, através da qual os algoritmos scrypt, TLS1 PRF e HKDF estavam disponíveis, foi redesenhada na forma de uma camada implementada sobre as APIs EVP_KDF e EVP_MAC.
  • A implementação do protocolo TLS oferece a capacidade de usar o cliente e o servidor TLS integrados ao kernel Linux para acelerar as operações. Para habilitar a implementação TLS fornecida pelo kernel Linux, você deve habilitar a opção "SSL_OP_ENABLE_KTLS" ou a configuração "enable-ktls".
  • Adicionado suporte para novos algoritmos:
    • Os algoritmos de geração de chave (KDF) são “SINGLE STEP” e “SSH”.
    • Os algoritmos de inserção simulada (MAC) são “GMAC” e “KMAC”.
    • Algoritmo de encapsulamento de chave RSA (KEM) "RSASVE".
    • Algoritmo de criptografia "AES-SIV" (RFC-8452).
    • Adicionadas chamadas à API EVP com suporte para cifras inversas usando o algoritmo AES para criptografar chaves (Key Wrap): “AES-128-WRAP-INV”, “AES-192-WRAP-INV”, “AES-256-WRAP- INV”, “AES-128-WRAP-PAD-INV”, “AES-192-WRAP-PAD-INV” e “AES-256-WRAP-PAD-INV”.
    • Adicionado suporte para algoritmos de empréstimo de texto cifrado (CTS) à API EVP: “AES-128-CBC-CTS”, “AES-192-CBC-CTS”, “AES-256-CBC-CTS”, “CAMELLIA-128-CBC -CTS” ", "CAMÉLIA-192-CBC-CTS" e "CAMÉLIA-256-CBC-CTS".
    • Adicionado suporte para assinaturas digitais CAdES-BES (RFC 5126).
    • AES_GCM implementa o parâmetro AuthEnvelopedData (RFC 5083) para permitir a criptografia e descriptografia de mensagens autenticadas e criptografadas usando o modo AES GCM.
  • As funções PKCS7_get_octet_string e PKCS7_type_is_other foram adicionadas à API pública.
  • A API PKCS#12 substitui os algoritmos padrão usados ​​na função PKCS12_create() por PBKDF2 e AES e usa o algoritmo SHA-256 para calcular o MAC. Para restaurar o comportamento anterior, é fornecida a opção "-legacy". Adicionado um grande número de novas chamadas estendidas para PKCS12_*_ex, PKCS5_*_ex e PKCS8_*_ex, como PKCS12_add_key_ex().PKCS12_create_ex() e PKCS12_decrypt_skey_ex().
  • Para a plataforma Windows, foi adicionado suporte para sincronização de threads usando o mecanismo SRWLock.
  • Adicionada uma nova API de rastreamento, habilitada por meio do parâmetro enable-trace.
  • O intervalo de chaves suportadas nas funções EVP_PKEY_public_check() e EVP_PKEY_param_check() foi expandido: RSA, DSA, ED25519, X25519, ED448 e X448.
  • O subsistema RAND_DRBG foi removido e substituído pela API EVP_RAND. As funções FIPS_mode() e FIPS_mode_set() foram removidas.
  • Uma parte significativa da API tornou-se obsoleta - o uso de chamadas obsoletas no código do projeto resultará em avisos durante a compilação. Incluindo APIs de baixo nível vinculadas a certas implementações de algoritmos (por exemplo, AES_set_encrypt_key e AES_encrypt) foram oficialmente declaradas obsoletas. O suporte oficial no OpenSSL 3.0.0 agora é fornecido apenas para APIs EVP de alto nível que são abstraídas de tipos de algoritmos individuais (esta API inclui, por exemplo, as funções EVP_EncryptInit_ex, EVP_EncryptUpdate e EVP_EncryptFinal). APIs obsoletas serão removidas em uma das próximas versões principais. Implementações de algoritmos legados, como MD2 e DES, disponíveis através da API EVP, foram movidas para um módulo "legado" separado, que está desabilitado por padrão.
  • A documentação e o conjunto de testes foram significativamente expandidos. Comparado ao branch 1.1.1, o volume de documentação aumentou 94% e o tamanho do código do conjunto de testes aumentou 54%.

Fonte: opennet.ru

Adicionar um comentário