0Pricing
Cryptology Academy · Aula

API do OpenSSL: Estruturas Principais e Armadilhas

Navegue pelas APIs EVP, pelas abstrações BIO e pelos padrões mais comuns de uso indevido da API do OpenSSL.

API do OpenSSL: Estruturas Principais e Armadilhas é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cryptology Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cryptology Academy inclui 4 aulas no total.

API EVP: a interface de alto nível

A API EVP (Envelope) é a interface de alto nível do OpenSSL para operações criptográficas e é a API correta para usar no código da aplicação. Ela abstrai detalhes específicos dos algoritmos por meio de uma interface consistente, oferece aceleração de hardware por mecanismos e provedores automaticamente e trata corretamente os detalhes de preenchimento e modo. As APIs de baixo nível específicas de algoritmos do OpenSSL estão obsoletas nas versões modernas e devem ser evitadas.

EVP_CIPHER_CTX para criptografia simétrica

A criptografia simétrica no OpenSSL usa o objeto de contexto EVP_CIPHER_CTX. A sequência de operações é: EVP_CIPHER_CTX_new para alocar o contexto, EVP_EncryptInit_ex para inicializá-lo com a cifra e a chave, EVP_EncryptUpdate repetidamente para processar os dados, EVP_EncryptFinal_ex para liberar o bloco final e recuperar a saída restante, e EVP_CIPHER_CTX_free para liberar a memória. Ignorar EncryptFinal_ex é um erro comum que produz uma saída truncada.

EVP_MD_CTX para cálculo de hashes

O cálculo do resumo da mensagem usa EVP_MD_CTX de forma semelhante: EVP_MD_CTX_new, EVP_DigestInit_ex com o algoritmo (EVP_sha256(), EVP_sha3_256() etc.), EVP_DigestUpdate com partes dos dados e EVP_DigestFinal_ex para recuperar o hash. As operações HMAC usam um HMAC_CTX separado ou a API EVP_MAC mais recente. A abstração EVP permite trocar os algoritmos de hash alterando uma única chamada de função.

EVP_PKEY para chaves assimétricas

EVP_PKEY é o objeto unificado de chave assimétrica no OpenSSL, compatível com RSA, ECDSA, Ed25519, DH e outros algoritmos por meio de uma única interface. As chaves são criadas a partir de arquivos PEM ou DER com PEM_read_PrivateKey e PEM_read_PUBKEY, ou geradas com EVP_PKEY_keygen. EVP_PKEY_sign e EVP_PKEY_verify executam a assinatura e a verificação para qualquer tipo de chave usando as mesmas chamadas de função.

Abstração BIO para entrada e saída

BIO (E/S básica) é a camada de abstração de entrada e saída do OpenSSL, que permite ler e gravar dados protegidos por TLS ou dados brutos por meio de uma cadeia de objetos BIO. Uma cadeia BIO pode ser: BIO_new_ssl (camada TLS) encadeado a BIO_new_connect (conexão TCP). Gravar no BIO SSL criptografa e envia os dados automaticamente; ler descriptografa os dados recebidos. Os objetos BIO são compatíveis com arquivos, soquetes, buffers de memória e filtros (base64, armazenamento em buffer).

Objetos SSL_CTX e SSL

As conexões TLS no OpenSSL usam dois objetos: SSL_CTX (contexto) armazena a configuração compartilhada: certificado, chave privada, conjunto de certificados de CA, limites de versão do protocolo e lista de cifras. SSL representa uma conexão individual derivada do contexto. Crie um SSL_CTX por aplicação e, em seguida, crie objetos SSL a partir dele para cada conexão. SSL_read e SSL_write transferem texto simples; o OpenSSL trata internamente de todo o enquadramento e da criptografia TLS.

Armadilha crítica: ignorar valores de retorno

O erro mais perigoso ao usar OpenSSL é ignorar os valores de retorno. EVP_EncryptFinal_ex, SSL_read e SSL_write retornam valores negativos ou zero para indicar erros. Chamar SSL_read em um laço sem verificar SSL_get_error pode causar laços infinitos ou fazer com que erros não sejam percebidos. O valor de retorno de toda função do OpenSSL que possa falhar deve ser verificado; as falhas frequentemente indicam condições relevantes para a segurança, como falhas no handshake ou erros na validação de certificados.

Armadilha: não verificar SSL_get_error

SSL_read e SSL_write podem retornar SSL_ERROR_WANT_READ ou SSL_ERROR_WANT_WRITE, indicando que a operação deve ser repetida depois de aguardar a entrada e a saída. Essas condições não são erros verdadeiros, mas notificações de entrada e saída sem bloqueio. O código que não chama SSL_get_error e não escolhe corretamente o ramo para leitura ou gravação pendente entrará em um laço ocupado ou tratará incorretamente essas condições como erros. Sempre use SSL_get_error para interpretar valores de retorno negativos das operações de entrada e saída de TLS.

APIs de baixo nível obsoletas

O OpenSSL contém muitas funções de baixo nível obsoletas que não devem aparecer em código novo: chamadas diretas a DES_encrypt1, uso direto das funções de hash SHA1 ou MD5 sem a camada EVP, RSA_private_encrypt em vez de EVP_PKEY_sign e AES_encrypt (AES ECB sem autenticação). Essas APIs ignoram verificações de segurança, usam algoritmos obsoletos ou são simplesmente menos seguras que seus equivalentes EVP. Avisos do compilador frequentemente sinalizam o uso de APIs obsoletas.

Vazamentos de memória no código OpenSSL

O OpenSSL usa gerenciamento explícito de memória; todo objeto alocado deve ser liberado explicitamente. Vazamentos de memória comuns incluem esquecer EVP_CIPHER_CTX_free após a criptografia, não chamar SSL_free depois de fechar uma conexão ou não chamar X509_free após a verificação de um certificado. Em servidores de longa execução, esses vazamentos causam esgotamento gradual da memória. Use ferramentas como valgrind ou AddressSanitizer para detectar vazamentos de memória do OpenSSL durante o desenvolvimento.

Modelo de provedores do OpenSSL 3.0

O OpenSSL 3.0 introduziu o modelo de provedores, substituindo a API ENGINE anterior para aceleração de hardware. Os provedores são módulos carregáveis que implementam algoritmos criptográficos: o provedor padrão (software), o provedor legado (algoritmos mais antigos), o provedor FIPS (validado segundo FIPS 140-2) e provedores de terceiros para HSMs. O provedor FIPS permite uma operação em conformidade ao restringir os algoritmos disponíveis àqueles aprovados pelo FIPS 140-2, sem alterar o código da aplicação.

Importância da API EVP

Por que a API EVP do OpenSSL é preferida às APIs de baixo nível específicas de algoritmos?

Resumo da API do OpenSSL

Resumo da API do OpenSSL: use sempre a API EVP de alto nível; EVP_CIPHER_CTX para operações simétricas; EVP_MD_CTX para cálculo de hashes; EVP_PKEY para chaves assimétricas; cadeias BIO para abstração de entrada e saída; SSL_CTX e SSL para conexões TLS; verifique sempre os valores de retorno e chame SSL_get_error; libere todos os objetos alocados para evitar vazamentos; evite funções de baixo nível obsoletas; e use os provedores do OpenSSL 3.0 para conformidade com FIPS ou aceleração de hardware.

Perguntas Frequentes

A aula “API do OpenSSL: Estruturas Principais e Armadilhas” é grátis?

Sim — o texto completo de “API do OpenSSL: Estruturas Principais e Armadilhas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cryptology Academy, atualize para CoddyKit PRO. O curso de Cryptology Academy inclui 4 aulas no total.

O que vou aprender em “API do OpenSSL: Estruturas Principais e Armadilhas”?

Navegue pelas APIs EVP, pelas abstrações BIO e pelos padrões mais comuns de uso indevido da API do OpenSSL. Você pratica Cryptology Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cryptology Academy?

Nenhuma experiência prévia é necessária. Cryptology Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “API do OpenSSL: Estruturas Principais e Armadilhas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cryptology Academy?

Sim. Cada aula de Cryptology Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. libsodium: Uma Biblioteca Criptográfica Resistente a Uso Indevido
  2. API do OpenSSL: Estruturas Principais e Armadilhas
  3. Google Tink: Criptografia Segura de Alto Nível
  4. Auditoria e Seleção de Dependências Criptográficas
← Voltar para Cryptology Academy