Cryptology Academy · Aula

libsodium: Uma Biblioteca Criptográfica Resistente a Uso Indevido

Explore a API opinativa do libsodium, que dificulta a escolha de parâmetros inseguros.

Aula 1 de 413 etapas

libsodium: Uma Biblioteca Criptográfica Resistente a Uso Indevido é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 1 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.

Filosofia e origem do libsodium

O libsodium foi criado por Frank Denis como uma versão portátil e multiplataforma da biblioteca NaCl (biblioteca de Redes e Criptografia), desenvolvida por Daniel Bernstein, Tanja Lange e Peter Schwabe. A filosofia central é tornar o uso correto da criptografia o mais fácil possível e o uso incorreto o mais difícil possível. Padrões seguros, interfaces simples e escolhas de algoritmos bem definidas evitam os erros comuns que afetam as bibliotecas de nível mais baixo.

Criptografia autenticada com chave secreta

crypto_secretbox fornece criptografia autenticada com chave secreta usando XSalsa20-Poly1305. A API recebe uma mensagem, um valor único de 24 bytes (gerado aleatoriamente) e uma chave de 32 bytes. A saída é um texto cifrado que é simultaneamente criptografado e autenticado. crypto_secretbox_open descriptografa e verifica a etiqueta de autenticação atomicamente, retornando um erro se for detectada adulteração. Isso impede a descriptografia de textos cifrados corrompidos ou modificados de forma maliciosa.

Criptografia autenticada com chave pública

crypto_box fornece criptografia autenticada com chave pública entre duas partes usando X25519-XSalsa20-Poly1305. Dada a chave privada do remetente e a chave pública do destinatário, ele criptografa e autentica a mensagem para que somente o destinatário pretendido possa descriptografá-la e para que o destinatário possa verificar a identidade do remetente. crypto_box_seal é a variante anônima: o remetente fica oculto e somente a criptografia, não a autenticação do remetente, é fornecida.

Assinaturas digitais com Ed25519

crypto_sign implementa assinaturas digitais usando Ed25519. A geração de chaves produz uma chave privada de 64 bytes (na verdade, uma semente concatenada com a chave pública) e uma chave pública de 32 bytes. A assinatura produz uma assinatura de 64 bytes. A verificação é rápida e executada em tempo constante. As assinaturas Ed25519 são determinísticas (a mesma mensagem e a mesma chave sempre produzem a mesma assinatura), eliminando as vulnerabilidades causadas por falhas de aleatoriedade que afetaram ECDSA em algumas implementações.

Cálculo de hashes com BLAKE2b

crypto_generichash fornece o cálculo de hashes de uso geral usando BLAKE2b. Ao contrário de SHA-256, BLAKE2b não exige uma construção HMAC separada para o cálculo de hashes com chave; ele aceita uma chave opcional diretamente. O comprimento da saída pode ser configurado de 16 a 64 bytes. BLAKE2b é mais rápido que SHA-256 e SHA-512 em processadores modernos de 64 bits, oferecendo propriedades de segurança equivalentes ou superiores.

Derivação de chaves com BLAKE2b

crypto_kdf fornece derivação de chaves a partir de uma chave mestra usando BLAKE2b. Dada uma chave mestra de 32 bytes, uma cadeia de contexto (8 bytes que identificam a finalidade) e um identificador de subchave (número de 64 bits), ele deriva uma subchave criptograficamente independente, com comprimento configurável. Isso permite derivar várias chaves independentes de uma única chave mestra para finalidades diferentes, sem qualquer correlação entre as chaves derivadas.

Cálculo de hashes de senhas com Argon2id

crypto_pwhash fornece o cálculo de hashes de senhas usando Argon2id, vencedor da Competição de Cálculo de Hashes de Senhas. Argon2id combina um cálculo intensivo em memória (resistente a ataques com GPU) com um cálculo intensivo em tempo (resistente a ataques com ASIC). Os parâmetros incluem o limite de operações (custo de tempo) e o limite de memória, que podem ser ajustados de acordo com os requisitos de segurança. crypto_pwhash_str produz uma cadeia de caracteres padrão adequada para armazenamento, que inclui o algoritmo e os parâmetros.

Caixas seladas para criptografia anônima

crypto_box_seal criptografa uma mensagem para um destinatário sem revelar o remetente. Ele gera um par de chaves efêmero temporário, realiza uma troca de chaves com a chave pública do destinatário e, em seguida, descarta a chave privada efêmera. O destinatário pode descriptografar usando sua chave privada, mas não pode identificar o remetente. Isso é adequado para sistemas de envio anônimo e canais criptografados unidirecionais.

Interfaces de ligação da linguagem ao libsodium

libsodium possui interfaces de ligação para praticamente todas as principais linguagens de programação. PyNaCl fornece interfaces de ligação idiomáticas para Python, com exceções próprias da linguagem e objetos de bytes. libsodium-wrappers fornece interfaces de ligação para JavaScript/Node.js (WASM para navegadores). libsodium.js é uma implementação de JavaScript puro. A qualidade das interfaces de ligação varia: prefira as oficiais ou amplamente mantidas que envolvam a biblioteca C, em vez de reimplementarem os algoritmos.

Comparação com a API de baixo nível do OpenSSL

A API de baixo nível do OpenSSL exige decisões explícitas sobre algoritmos, tamanhos de chave, modos, preenchimento e gerenciamento de IV. Combinações incorretas são aceitas silenciosamente. libsodium fornece uma única implementação correta para cada caso de uso, sem necessidade de configuração. Por exemplo, criptografar com OpenSSL exige escolher a cifra, o modo, a derivação da chave, a geração do IV e o preenchimento; com crypto_secretbox do libsodium, você fornece uma chave, um valor único e uma mensagem, e o restante é tratado corretamente.

Escolhendo libsodium para novos projetos

libsodium é o ponto de partida recomendado para qualquer projeto que exija operações criptográficas nas linguagens compatíveis. Sua pequena superfície de API reduz a possibilidade de uso incorreto, seus algoritmos são modernos e bem analisados, e sua implementação C multiplataforma é amplamente testada. A mudança para uma biblioteca de nível mais baixo, como OpenSSL, só deve ser necessária quando você precisar de algoritmos específicos não disponíveis no libsodium ou exigir validação FIPS 140-2.

Operações do libsodium

Qual função do libsodium você deve usar para calcular o hash de uma senha antes de armazená-la em um banco de dados?

Resumo do libsodium

Resumo do libsodium: padrões seguros e uma API difícil de usar incorretamente, baseados nas primitivas do NaCl desenvolvidas por Bernstein e colaboradores; crypto_secretbox para criptografia com chave secreta (XSalsa20-Poly1305); crypto_box para criptografia com chave pública (X25519); crypto_sign para assinaturas Ed25519; crypto_generichash para cálculo de hashes BLAKE2b; crypto_pwhash para cálculo de hashes de senhas com Argon2id; caixas seladas para criptografia anônima; e interfaces de ligação para as principais plataformas.

Grátis para começar

Aprenda Cryptology Academy com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
67
Aulas
261

Perguntas Frequentes

A aula “libsodium: Uma Biblioteca Criptográfica Resistente a Uso Indevido” é grátis?

Sim — o texto completo de “libsodium: Uma Biblioteca Criptográfica Resistente a Uso Indevido” é 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 “libsodium: Uma Biblioteca Criptográfica Resistente a Uso Indevido”?

Explore a API opinativa do libsodium, que dificulta a escolha de parâmetros inseguros. 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 1 de 4.

Quanto tempo leva a aula “libsodium: Uma Biblioteca Criptográfica Resistente a Uso Indevido”?

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