LPS:DNSSEC - Provozní dokumentace
V tomto dokumentu jsou technické informace týkající se DNSSEC.
Informace
Předběžný plán:
1. krok: oddělený rekurzivní resolver pro 1. segment s povoleným DNSSEC
2. krok: nasazení DNSSEC v zónách ZČU (bez delegace a pak s delegací klíčů)
3. krok: povolit DNSSEC postupně na všech lokálních rekurzivních resolverech
Teorie
Typy záznamů
DNSKEY
Zónové klíče (ZSK - Zone Singing Key) a "klíčové" klíče (KSK - Key Signing Key).
- zónový klíč (ZSK):
- bývá menší, aby byly kratší podpisy (v případě RSA je default 1024 bitů, oproti 2048 u ZSK)
- podpis jednotlivých RR
- klíčový klíč (KSK):
- podpis ZSK
- vstupní bod důvěry pro zónu (SEP) - otisk patří do nadřazené zóny
KSK i ZSK může být několik (kvuli rotacím). Na funkci DNSSEC musí být jeden platný řetěz.
Formát:
DOMAIN. IN DNSKEY FLAGS PROTOCOL ALG DATA
FLAGS:
- 256 - zone (ZSK)
- 257 - zone + SEP (KSK)
PROTOCOL:
- 3 - vžycky, jinak je DNSKEY invalid
ALG DNS Security Algorithm Numbers:
- 5 - RSASHA1 (default) - abclinuxu.cz ibesip.cz isc.org o2.cz pilsfree.cz root.cz t-mobile.cz
- 7 - NSEC3RSASHA1 - aktualne.cz muni.cz
- 8 - RSASHA256 - . debian.org freebsd.org iana.org
- 10 - RSASHA512 - cz cesnet.cz metacentrum.cz
- 13 - ECDSAP256SHA256 - 4chan.org auto.cz cloudflare.com cvut.cz dnssec.cz e15.cz
- 14 - ECDSAP384SHA384
(SHA1 obsolete, RSASHA1 jen NSEC)
DS
Otisk klíče. Používá se v delegaci - zabezpečená informace v nadřazené zóně o "klíčovém" klíči (KSK) potomka.
Formát:
DOMAIN. IN DS KEY_ID ALG DIGEST DATA
ALG DNS Security Algorithm Numbers:
- 10 - RSASHA512
- 13 - ECDSAP256SHA256
- 14 - ECDSAP384SHA384
DIGEST Digest Algorithms:
- (0 - rezerovováno)
- 1 - SHA-1
- 2 - SHA-256
NSEC
Negativní informace - důkaz neexistence záznamu. Dělá se přes odkaz na další RR.
Je např. potřeba mít zabezpečenou informaci v nadřazené zóně typu "u téhle zóny nemám DS".
NSEC3
Kvuli odkazům mezi RR lze pomocí NSEC projít celou zónu. NSEC3 je bezpečnější varianta NSEC, kde se použitím hashování skryje informace o skutečném záznamu, co následuje.
Formát:
DOMAIN_HASH.ZONE. TTL_RR IN NSEC3 HASH_ALG FLAGS ITERATIONS SALT ( DATA RR_TYPE )
HASH_ALG DNSSEC NSEC3 Hash Algorithms
- (0 - reserved)
- 1 - SHA-1
FLAGS DNSSEC NSEC3 Flags
- 1 - opt-out (něco s delegacemi a záznamy bez podpisů)
ITERATIONS - počet iterací hashovacího algoritmu (typicky 10)
SALT - sůl pro hashování
NSEC3PARAM
Jeden záznam pro zónu. Parametry obsažené v každém NSEC3 záznamu jsou vyzobnuté do tohoto extra záznamu.
Formát:
ZONE. 0 IN NSEC3PARAM HASH_ALG FLAGS ITERATIONS SALT
Význam jako u #NSEC3, TTL je vždy 0.
RRSIG
Podpis DNS záznamu (RR).
Formát (příklad "A" záznam):
TTL_RR RRSIG A ALG LABELS TTL_RRSIG ( VALID_TO VALID_FROM ZSK_ID ZONE. DATA )
ALG DNS Security Algorithm Numbers
- 10 - RSASHA512
- 13 - ECDSAP256SHA256
- 14 - ECDSAP384SHA384
LABELS - počet domén (labelů) ve jméně
Všechny RR jsou podepsané (SOA, A, PTR, ... a také NSEC3, DNSKEY, DS, ...).
Rotace klíčů
Dva způsoby rotace:
- předem vystavit nový klíč (pro KSK)
- používat starý i nový paralelně (pro ZSK)
TODO: důležité, dopsat sem výcuc z CZ NIC a polopatické postupy
Postupy
Test doménového záznamu
Pro analýzu lepší používat delv místo dig. delv je doporučovaný pro dělání plné validace DDNSSEC (tu lze vypnout volbami +noroot a +novld).
1) delv
delv +multi -t DS cesnet.cz
delv +multi -t NS zcu.cz
(+multi je na hezčejší výstup u klíčů do více řádek)
(+noroot vypne DNSSEC validaci za použití root anchors)
(+novld vypne DNSSEC validaci za použití dosluhujícího VLD)
2) dig
V případě použití dig koukat na flagy:
- AD = Authenticated Data (for DNSSEC only; indicates that the data was authenticated)
- AA = Authoritative Answer
Při AA nemá ověřování smysl, flag AD může vrátit pouze rekurzivní resolver.
V dotazu lze serveru poslat flag CD = Checking Disabled.
dig +multi +dnssec -t NS zcu.cz
(+multi je na hezčejší výstup u klíčů do více řádek)
(+dnssec ukáže i záznamy specifické pro DNSSEC, u delv je to default)
Ruční ověření delegace
Získání DS z DNSKEY (příklad s KSK z root zóny):
cat << EOF > root1.key . 90378 IN DNSKEY 257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3 +/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kv ArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF 0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+e oZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfd RUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwN R1AkUTV74bU= EOF dnssec-dsfromkey -2 root1.key
Pak porovnat získaný DS se záznamem v nadřazené zóně (v případě root zóny s trust anchors na iana.org/dnssec).
Vyrobení klíčů
Z algoritmů bych volil buď ten použitý v CZ NIC (RSA512, v ČR 4. nejpoužívanější) nebo eliptickou šifru (ECDSAP256SHA256, v ČR 3. nejpoužívanější). První dva nejpoužívanější algoritmy využívají dosluhující hashovací algoritmus SHA-1 (i když v ISC bind je to stále default ;-)). Default algoritmus navíc neumí NSEC3.
Rychlotest na zóně 228.147.in-addr.arpa:
time | size | |
---|---|---|
RSASHA512 | 0m6.164s | 1,3M -> 16M |
ECDSAP256SHA256 | 0m57.554s | 1,3M -> 12M |
Best-practices:
- klíče se vyrábí vždy pár pro každou zónu (zónový se vymění snadněji, může být menší, ...)
- jiný pár pro každou zónu (teoreticky jde o jen kosmetickou věc - rotace klíšů pak lze dělat postupně apod., prakticky jde i o omezení utilitek bindu, které lze řešit ručním poeditováním klíčů)
- KSK i ZSK musí mít stejný algoritmus
1. Zónový (ZSK):
#dnssec-keygen -r/dev/random -a RSASHA512 -b 1024 -n ZONE zcu.cz dnssec-keygen -3 -r/dev/random -a ECDSAP256SHA256 -n ZONE zcu.cz
2. Klíčový (KSK):
#dnssec-keygen -r/dev/random -f KSK -a RSASHA512 -b 2048 -n ZONE zcu.cz dnssec-keygen -3 -r/dev/random -f KSK -a ECDSAP256SHA256 -n ZONE zcu.cz
3. Ostatní zóny
Pro všechny další zóny: zkopírovat a modifikovat získané dva páry ručně/skriptem nebo si vygenerovat další páry.
Odkazy
- CZ NIC: https://www.nic.cz/page/568/jak-zprovoznit-dnssec/
- DNSSEC root zone announcements: http://mm.icann.org/pipermail/root-dnssec-announce/
- šifrovací algoritmy:
- zmínka o eliptických šifrách: https://en.blog.nic.cz/2017/05/18/new-statistics-and-increase-in-popularity-of-elliptic-curves-in-dnssec/
- statistiky: https://stats.nic.cz/stats/dnssec_by_algorithms/