# Web Crypto API

> Web Crypto API é uma interface padrão, presente nos navegadores modernos e em ambientes como Node.js, que permite a programas em JavaScript realizar operações criptográficas, como gerar hashes, criar e verificar assinaturas digitais, cifrar dados e gerar chaves, sem depender de bibliotecas externas. Ela é usada em integrações que exigem segurança, inclusive em sistemas fiscais.

**Também conhecido como:** WebCrypto, Web Cryptography API, SubtleCrypto, crypto.subtle, Web Crypto API

**Glossário:** [Glossário de A a Z](https://conota.dev/glossario/) · **Letra:** W

## O que é a Web Crypto API, em palavras simples?

A Web Crypto API é um conjunto de funções de criptografia que já vem embutido no navegador e em alguns ambientes de servidor que rodam JavaScript. Em vez de o desenvolvedor instalar uma biblioteca de terceiros para proteger dados, ele usa recursos nativos, padronizados pelo W3C e mantidos pelos próprios navegadores.

No código, ela costuma aparecer como crypto.subtle, que reúne as operações mais sensíveis, e crypto.getRandomValues, que gera números aleatórios seguros. Todas as operações principais são assíncronas, ou seja, devolvem o resultado depois de processar, sem travar a aplicação.

## Para que serve a Web Crypto API?

Ela serve para tarefas criptográficas comuns: calcular hashes (por exemplo, SHA-256), assinar e verificar dados com algoritmos como RSA e ECDSA, cifrar e decifrar informações com AES, gerar códigos HMAC e criar, importar ou exportar chaves em formatos como JWK, PKCS#8 e SPKI.

Em integrações fiscais, esses recursos ajudam a conferir a integridade de um arquivo XML, validar a assinatura HMAC de um webhook recebido, gerar identificadores aleatórios para controle de idempotência ou proteger informações sensíveis antes de armazená-las.

## Como a Web Crypto API se relaciona com a emissão de notas fiscais?

Documentos como NF-e, NFC-e, CT-e e MDF-e precisam ser assinados digitalmente com um certificado da ICP-Brasil, seguindo o padrão de assinatura XML. A Web Crypto API consegue executar a parte matemática da assinatura RSA, mas não faz sozinha a preparação do XML exigida pelo padrão, como a canonicalização, nem lê diretamente um arquivo PFX.

Por isso, ela costuma ser apenas uma peça do processo, combinada com outras bibliotecas. Em soluções como uma API fiscal, a assinatura e a comunicação com a SEFAZ ou com a prefeitura ficam a cargo do serviço de emissão, e o sistema do cliente usa criptografia principalmente para validar respostas e proteger a integração.

## É seguro usar a Web Crypto API no navegador para assinar documentos fiscais?

A API em si é confiável, mas o local onde a chave fica é o ponto crítico. Carregar a chave privada de um certificado digital A1 no navegador de um usuário expõe esse segredo a riscos, como extensões maliciosas ou scripts injetados. Na prática fiscal, o recomendado é manter o certificado no backend, em um cofre de segredos ou em um HSM.

A Web Crypto API ajuda com recursos como chaves marcadas como não extraíveis, que podem ser usadas, mas não exportadas pelo código. Além disso, ela só funciona em contextos seguros, isto é, páginas servidas por HTTPS ou em ambiente local de desenvolvimento.

## Qual a diferença entre a Web Crypto API e bibliotecas de criptografia?

A Web Crypto API é nativa e padronizada: não precisa ser instalada, tem implementação otimizada e recebe correções junto com o navegador ou o runtime. Em contrapartida, oferece um conjunto limitado de algoritmos e operações de baixo nível.

Bibliotecas de criptografia e de emissão fiscal costumam acrescentar recursos que a API não cobre, como leitura de certificados PFX, montagem de assinaturas XML e tratamento de cadeias de certificação. Muitas delas usam a própria Web Crypto API por baixo para as operações matemáticas.

## Exemplos de Web Crypto API

- Um ERP em Node.js recebe um webhook de status de NF-e e usa crypto.subtle com HMAC SHA-256 para conferir se a assinatura do cabeçalho confere com o segredo compartilhado antes de atualizar o pedido.
- Uma plataforma de vendas calcula o hash SHA-256 do XML autorizado de uma NFS-e e o guarda junto ao registro, para verificar depois que o arquivo armazenado não foi alterado.
- Um painel web gera um identificador aleatório com crypto.randomUUID para usar como chave de idempotência ao solicitar a emissão de uma NFC-e, evitando notas duplicadas em caso de reenvio.
- Um backend importa uma chave pública no formato JWK pela Web Crypto API para validar a assinatura de um JWT recebido em uma chamada interna da integração fiscal.

## Perguntas frequentes

### A Web Crypto API funciona fora do navegador?

Sim. Ambientes como Node.js, Deno e alguns serviços de computação na borda oferecem a mesma interface, o que permite reaproveitar o código criptográfico entre frontend e backend.

### Posso carregar um arquivo PFX direto na Web Crypto API?

Não diretamente. A API não interpreta o formato PKCS#12. É preciso extrair a chave privada com outra biblioteca e importá-la, por exemplo, em PKCS#8. Em sistemas fiscais, o mais seguro é deixar o certificado no backend ou no serviço de emissão.

### A Web Crypto API assina sozinha o XML de uma NF-e?

Não. Ela executa a assinatura RSA, mas a assinatura de XML fiscal exige etapas adicionais, como canonicalização e montagem da estrutura de assinatura, normalmente feitas por bibliotecas específicas ou pela API fiscal.

### Por que a Web Crypto API exige HTTPS?

Porque operações criptográficas só fazem sentido em um canal protegido. Em páginas sem HTTPS, um intermediário poderia alterar o código e comprometer chaves e dados, então os navegadores restringem a API a contextos seguros.

## Termos relacionados

- [Assinatura digital do XML](https://conota.dev/glossario/assinatura-digital-do-xml.md)
- [Hash de documento fiscal](https://conota.dev/glossario/hash-de-documento-fiscal.md)
- [HMAC em webhooks](https://conota.dev/glossario/hmac-em-webhooks.md)
- [Geração de chave criptográfica](https://conota.dev/glossario/geracao-de-chave-criptografica.md)
- [JavaScript na integração fiscal](https://conota.dev/glossario/javascript-na-integracao-fiscal.md)
- [Gerenciamento de segredos](https://conota.dev/glossario/gerenciamento-de-segredos.md)

---

Fonte: [Web Crypto API](https://conota.dev/glossario/web-crypto-api/) · Atualizado em 2026-10-22
