# Explicador de JWKS + correspondência de chaves

> Cole um JSON Web Key Set para detalhar cada chave, sinalizar qualquer material privado e corresponder um JWT à sua chave pelo kid. Nada sai do seu navegador.

- Tool: https://ronutz.com/pt-BR/tools/jwks-explainer
- Family: Identidade e tokens

---

## O que faz

Cole um JSON Web Key Set e a ferramenta o detalha chave por chave: para cada chave, ela lê o tipo, o id da chave, o uso e o algoritmo pretendidos e os parâmetros específicos daquele tipo, e sinaliza qualquer chave que contenha material privado. Se você também colar um JWT, ela corresponde o token à chave que deveria verificá-lo comparando os ids de chave. Nada sai do seu navegador.

## O que é um JWKS

Um JSON Web Key Set (JWKS) é o documento JSON que um provedor de identidade publica, geralmente em `/.well-known/jwks.json`, para que qualquer um possa verificar os tokens que ele assina sem um segredo compartilhado. É simplesmente uma lista de chaves:

    { "keys": [ {JWK}, {JWK}, ... ] }

Cada entrada é um JSON Web Key (JWK) que descreve uma chave: seu tipo (`kty`, como RSA, EC ou OKP), um id de chave opcional (`kid`), para que ela serve (`use`, tipicamente `sig` para assinatura ou `enc` para criptografia), o algoritmo ao qual ela se associa (`alg`) e os parâmetros específicos daquele tipo de chave.

## Material público e privado

Essa distinção é o ponto de segurança da ferramenta. Um JWKS publicado para verificação deve conter apenas chaves públicas. Cada tipo de chave tem parâmetros públicos e privados: uma chave RSA publica seu módulo e expoente (`n`, `e`) e mantém em segredo seu expoente privado (`d`); uma chave de curva elíptica publica suas coordenadas (`x`, `y`) e mantém em segredo seu escalar privado (`d`); uma chave simétrica (`oct`) nada mais é que o segredo (`k`). Se uma chave no conjunto carregar qualquer um dos campos privados, significa que material de chave privada foi exposto, o que é um erro sério, então a ferramenta o sinaliza explicitamente.

## Correspondência de um token à sua chave

Um JWT assinado normalmente indica, em seu cabeçalho, o id de chave (`kid`) da chave que o assinou. Um verificador procura no JWKS a chave com aquele `kid` e a utiliza. A ferramenta faz o mesmo: dados um JWT e um conjunto, ela encontra a chave cujo `kid` corresponde ao do token, que é exatamente a busca que um verificador real realiza antes de checar a assinatura. Os parâmetros de chave seguem a RFC 7517 e a RFC 7518, com o tipo de chave OKP para chaves de curva de Edwards (como Ed25519) definido na RFC 8037.

## Como usar

Cole um JWKS para inspecionar cada chave e detectar qualquer material privado exposto, e opcionalmente cole um JWT para ver qual chave do conjunto é a destinada a verificá-lo.

## Standards and references

- [RFC 7517: JSON Web Key (JWK)](https://datatracker.ietf.org/doc/html/rfc7517) - the JWK and JWK Set formats and their parameters
- [RFC 7518: JSON Web Algorithms (JWA)](https://datatracker.ietf.org/doc/html/rfc7518) - the key-type parameters and the signature and encryption algorithms
- [RFC 8037: CFRG Curves for JOSE (OKP, EdDSA)](https://datatracker.ietf.org/doc/html/rfc8037) - the OKP key type and EdDSA

## Related reading

- [Ataques de confusão de algoritmo em JWT](https://ronutz.com/pt-BR/learn/jwt-algorithm-confusion.md): Duas falhas clássicas de verificação de JWT vêm de confiar no algoritmo declarado pelo próprio token: aceitar alg none, e ser enganado a verificar um token RS256 como HS256 usando a chave pública como segredo. Ambas são derrotadas fixando o algoritmo esperado no servidor em vez de lê-lo do token.
- [JWKS e Rotação de Chaves: Como os Provedores Publicam suas Chaves](https://ronutz.com/pt-BR/learn/jwks-and-key-rotation.md): Um JWKS é a lista pública de chaves de assinatura que um provedor de identidade publica para que qualquer um possa verificar seus tokens. Entender o array keys, o kid que nomeia cada chave e por que um provedor mantém mais de uma chave ao mesmo tempo é a base da verificação de tokens.
- [Parâmetros e thumbprints de JWK](https://ronutz.com/pt-BR/learn/jwk-parameters-and-thumbprints.md): Uma JWK é um objeto JSON que descreve uma chave, e seus parâmetros dizem para que a chave serve e como identificá-la. Além do material da chave, kid a nomeia e um thumbprint (RFC 7638) dá a ela um identificador estável e computado. Este artigo cobre os parâmetros comuns e como um thumbprint é derivado e usado.
- [Tipos de Chave JWK: RSA, EC, OKP e oct](https://ronutz.com/pt-BR/learn/jwk-key-types.md): Toda JSON Web Key declara um kty, e esse único campo decide quais parâmetros a chave carrega. Quatro tipos cobrem quase tudo o que você encontrará: RSA, curva elíptica, as curvas de Edwards e Montgomery, e a sequência de octetos simétrica. A divisão crucial em todos eles é público versus privado.
- [Verificando um JWT com um JWKS: do kid à Assinatura](https://ronutz.com/pt-BR/learn/verifying-a-jwt-with-jwks.md): Verificar um token assinado é uma sequência curta e rigorosa: ler o cabeçalho, encontrar a chave cujo kid corresponde no JWKS do provedor, confirmar o algoritmo e checar a assinatura. Cada passo tem uma armadilha clássica, e pular o rigor é como acontecem os bypasses de verificação.
