DNSSEC
Com DNSSEC, cada zona assina os seus registros, e o pai publica um resumo da chave do filho (DS). O algoritmo de assinatura é um número: 8 é RSA, 13 é ECDSA, 15 é Ed25519.
Uma resposta DNS comum pode ser forjada no caminho. O DNSSEC acrescenta assinaturas digitais: cada zona tem um par de chaves, publica a chave pública e assina os seus registros. Três tipos de registro fazem isso funcionar:
| Tipo | O que é |
|---|---|
DNSKEY |
As chaves públicas da zona (flag 257 é a chave principal, a KSK; 256, a que assina o dia a dia, a ZSK) |
RRSIG |
A assinatura de um conjunto de registros |
DS |
Fica na zona pai: um resumo (hash) da chave do filho |
O DS é o que liga uma zona à de cima. A raiz assina a si mesma e guarda um DS para cada TLD assinado; o TLD guarda um DS para cada domínio assinado, e assim por diante. Essa é a cadeia de confiança: partindo da chave da raiz, um resolvedor confere cada degrau. Quando a validação dá certo, a resposta dele vem com o bit ad.
Uma linha DS da zona raiz:
exemplo. 86400 IN DS 12345 13 2 AB12CD...
Depois do tipo vêm o identificador da chave (key tag, 12345), o algoritmo (13), o tipo de hash (2 = SHA-256) e o hash. Os números de algoritmo são da IANA:
| Número | Algoritmo |
|---|---|
| 7 | RSA/SHA-1 (com NSEC3), antigo |
| 8 | RSA/SHA-256, o mais comum |
| 10 | RSA/SHA-512 |
| 13 | ECDSA P-256 com SHA-256 |
| 14 | ECDSA P-384 com SHA-384 |
| 15 | Ed25519 |
| 16 | Ed448 |
Ed25519 e ECDSA usam curvas elípticas: chaves e assinaturas bem menores que as do RSA, e respostas DNS menores.
Ferramentas: a zona raiz inteira está em internic.net/domain/root.zone (abre em nova aba); dig org DNSKEY +short mostra as chaves de uma zona (o terceiro número é o algoritmo); dig org DS +short mostra o DS no pai; e o DNSViz (abre em nova aba) desenha a cadeia de confiança de qualquer domínio.