Skip to main content
Todos os Termos Glossary

Web Crypto API

Definition

A Web Crypto API oferece uma interface padronizada para realizar operações criptográficas em aplicações web. Ela disponibiliza geração segura de números aleatórios, hashing, assinatura e criptografia. Embora seja mais segura do que implementar criptografia em JavaScript, o gerenciamento adequado de chaves e a escolha dos algoritmos continuam sendo fundamentais.

O que é a Web Crypto API

A Web Crypto API é uma interface nativa do navegador, exposta através de window.crypto e crypto.subtle, para realizar operações criptográficas em JavaScript. Abrange valores aleatórios criptograficamente fortes através de getRandomValues, além de hashing, HMAC, encriptação simétrica e assimétrica, assinaturas digitais e derivação de chaves através do objeto SubtleCrypto. As primitivas são implementadas no motor do navegador em código nativo, e não em script, o que é mais rápido e menos propenso a erros do que criptografia em JavaScript feita à mão. As chaves são representadas como objetos CryptoKey que podem ser marcados como não extraíveis, para que o material bruto da chave nunca tenha de ser exposto ao JavaScript envolvente. A maior parte da API está restrita a contextos seguros, ou seja, páginas servidas por HTTPS ou localhost.

Por que é importante para a segurança

Usar uma implementação nativa verificada elimina classes inteiras de bugs que assolam a criptografia personalizada em JavaScript, como fontes aleatórias fracas, fugas de tempo e ligação incorreta de algoritmos. Objetos CryptoKey não extraíveis significam que nem mesmo um script em execução na página consegue ler os bytes subjacentes, o que limita o que um comprometimento pode roubar. No entanto, a API não torna uma aplicação segura por si só. Más escolhas de algoritmos, vetores de inicialização reutilizados, chaves fixas no código ou mal guardadas, e resultados mal geridos, tudo isso a mina. Fundamentalmente, qualquer criptografia realizada no navegador continua a correr num ambiente que um atacante pode controlar: uma falha de cross-site scripting pode chamar a mesma API, usar as chaves disponíveis e encriptar ou assinar em nome do atacante.

Como usá-la de forma segura

Escolha algoritmos e parâmetros atuais e bem compreendidos, gere chaves e IVs com getRandomValues, e nunca inclua chaves secretas no código do cliente. Marque as chaves como não extraíveis sempre que o fluxo de trabalho o permitir, e apoie-se nas funções de derivação de chaves da API em vez de inventar as suas. Como a criptografia do lado do navegador só protege os dados até ao ponto em que se pode confiar no cliente, mantenha a página envolvente livre de scripts injetados: aplique uma Content Security Policy rigorosa e higienize as entradas para travar o XSS. A Web Crypto API é uma primitiva neutra da plataforma web, por isso a cside não está diretamente envolvida no seu funcionamento; a disciplina defensiva relevante é o desenvolvimento seguro padrão e manter JavaScript third-party não confiável fora da página.

Definição

Devo usar a Web Crypto API em vez de uma biblioteca de criptografia em JavaScript?

Regra geral, sim. As primitivas nativas são mais rápidas, são mantidas pelos fornecedores de navegadores e evitam muitas armadilhas de implementação da criptografia feita puramente em JavaScript, incluindo aleatoriedade fraca. As bibliotecas ainda têm o seu lugar para algoritmos que faltam à API, mas para hashing, encriptação e assinatura padrão a API integrada é a opção mais segura por predefinição.

Definição

A Web Crypto API torna a encriptação do lado do cliente totalmente segura?

Não. Corre no navegador, um ambiente que a máquina do utilizador e qualquer script injetado podem influenciar. Reforça as primitivas, mas uma falha de cross-site scripting pode invocar a mesma API e usar indevidamente as chaves disponíveis. Complementa, mas não substitui, a encriptação de transporte e os controlos do lado do servidor.

Got more questions

Talk to a security expert

We answer client-side security questions every day. Bring yours.

Agende uma demonstração

Quer ver isso em detalhe com um engenheiro?

Trinta minutos, no seu próprio site. Sem slides.

Vamos mostrar:

Quais scripts de terceiros estão rodando no seu site agora
Como você está em relação aos requisitos 6.4.3 e 11.6.1 do PCI DSS
Qual parte do seu tráfego é de bots e agentes de IA

Prefere só mandar uma pergunta?

Procurando horários livres…

Apenas humanos de verdade. A gente saberia.

Problemas para agendar? Abrir o agendador em uma nova aba

O que você está tentando resolver?

Conte em uma linha e voltamos com algo útil, não com um discurso genérico.

Costumamos ajudar com:

Ver quais scripts de terceiros rodam no seu site
Evidências para PCI DSS 6.4.3 e 11.6.1
Bots, agentes de IA e roubo de contas

Prefere agendar um horário? Escolher um horário