DNSSEC — технология, которая позволяет удостоверяться в подлинности DNS информации при помощи криптографической подписи.
Максимально упрощенно это выглядит примерно так:
имеется корневая зона ".", которая содержит в себе информацию о всех доменах первого уровня.
Условно говоря, это файл с множеством строк, который изменяется достаточно редко. Создается пара открытый+закрытый ключ и каждая запись в этом файле подписывается.
Имея открытый ключ от этой пары, можно удостовериться в подлинности каждой записи в этом списке. Например, проверить что за зону moscow. действительно отвечают сервера flexireg:
dig -t any +dnssec @k.root-servers.net moscow.
В ответе можно увидеть запись RRSIG содержащую хеш-подпись:
;; AUTHORITY SECTION:
moscow. 172800 IN NS a.dns.flexireg.ru.
moscow. 172800 IN NS b.dns.flexireg.net.
moscow. 172800 IN NS c.dns.flexireg.org.
moscow. 172800 IN NS d.dns.flexireg.domains.
moscow. 86400 IN DS 19819 8 2 8AC7E53B741D37B15BF4BB7C3CEA92D420C969D78E66C5939045BF61 9E82B37F
moscow. 86400 IN RRSIG DS 8 1 86400 20160901170000 20160822160000 46551 . ouIdvx0R796QsbhdO7TfSexfoIiv+sr+RbIUuIIfSwZmD/FX97z2kxvn fStr1w0jiDEfULzv2hg5DtVAA5SpGEetUXUjit/Qm47GDvD3JDVuN9Us CSzGV7TigA0uNdj8VOVE+Ig3LgwmGfTWM8q4eoEcZZHmwfXZESfUuvhr Oyk=
В ответе, запись DS содержит хеш ключа, которым подписывается зона moscow.
После каждого изменения в зоне подписание записей происходит заново.
Но, так как корневая зона подписывает только открытый ключ зоны moscow., то нет необходимости перехешировать записи в корневой зоне при каждом изменении в зоне moscow..
Также можно установить валидность ответов от серверов ответственных за домен moscow.:
dig -t any +dnssec @b.dns.flexireg.net nic.moscow.
;; AUTHORITY SECTION:
nic.moscow. 3600 IN NS ns4-cloud.nic.ru.
nic.moscow. 3600 IN NS ns8-cloud.nic.ru.
nic.moscow. 3600 IN NS ans1-moscow.nic.ru.
nic.moscow. 3600 IN NS ns3-geo.nic.ru.
nic.moscow. 3600 IN NS ns4-geo.nic.ru.
nic.moscow. 3600 IN NS ns8-geo.nic.ru.
nic.moscow. 3600 IN DS 42451 8 2 00B07600D90E7FE874E02D548CF66A2095984C991917CB37273C9590 C2F52D16
nic.moscow. 3600 IN RRSIG DS 8 2 3600 20160830213717 20160731213717 7113 moscow. FcOmCFQzKw09MxOrJJKrFznVDSU/HVAa/umclYFbYxs+qxH1m3PhNCB9 VKVvKLUGz3K/K7pez12vUzpUiDY9aBmyvxhQkONMgddeo9zfd1mzDog4 u/Syjz8gtbtev+RibWs8oTngbIa5/kgio36thT0qRLWy3tr+luVkrtTO WXE=
Тут видим, что запись о домене nic.moscow. подписана, но на этом этапе возможно установить только подлинность адресов NS-серверов, ответственных за домен nic.moscow.
Для резолвинга IP адреса необходимо получить ответ от этих серверов, поэтому владельцы этих NS-серверов имеют свою пару ключей, которыми подписывают информацию на своих серверах, и помещают хеш открытого ключа в DS-запись.
Запрашиваем A-запись для домена nic.moscow.:
dig +dnssec -t a nic.moscow @ans1-moscow.nic.ru
;; ANSWER SECTION:
nic.moscow. 86400 IN A 178.210.74.11
nic.moscow. 86400 IN RRSIG A 8 2 86400 20160902151000 20160803151000 18633 nic.moscow. ypqVMhOrdNwvOHKlQTbPMXyAuZmiD8+0dMfM17k9VgwoV148Uvx4mXgH dJC6ZPcDBU1mq5cfukLjTpJxaqQXN6TF3Duu+hly2rYqjOg+k1csNyXY /AW6Ll+95tItkzUxfRcWHTlt8hB1ddApdfwEFkTg+dyqZs60HX8h+u7N v5Q=
В результате для проверки подлинности, что А-запись nic.moscow содержит значение 178.210.74.11 выстраивается алгоритм действий:
нам заранее известен открытый ключ корневой зоны "." и мы ему доверяем. В корневой зоне существует DS-запись говорящая о том, что все записи зоны moscow. подписаны указанным в ней ключом и сама запись подписана ключом корневой зоны. Проверив подлинность этой записи мы доверяем всем записям в зоне moscow., подписанным этим ключом. На серверах ответственных за зону moscow. содержится DS-запись с открытым ключом nic.moscow, подписанная ключом зоны moscow., что позволяет проверит подлинность подписи в ответе NS-сервера ответственного за nic.moscow.
Описание ключей:
Для подписания зоны применяется ключ шифрования, который называется ZSK (Zone Signing Key - ключ для подписания зоны) и представляет собой состоящую из открытого и закрытого ключа комбинацию. Для подписания ключа ZSK и тем самым обеспечения проверки его правильности и корректности комбинации из открытого и закрытого ключа, применяется другой ключ, который называется ключом KSK (Key Signing Key - ключ для подписания ключа). Записи DNSKEY (DNS Public Key) применяются в DNSSEC для хранения открытых ключей KSK (257 тип ключа) и ZSK (256 тип ключа). Записи RRSIG (Resource Record Signature) применяются для хранения подписей, принадлежащих записям в DNS. Записи DS (Delegation Signer) применяются для защиты делегируемых другим серверам DNS полномочий и подтверждения их правильности. DS хеш создается из KSK ключа и отправляется в верхнюю зону (например в "." для домена moscow.).
Ротация ключей.
Существует несколько схем ротации. ICANN рекомендует следующее:
ZSK: схема с предварительной публикацией.
1. Генерируется новый ключ ZSK и публикуется в зоне. Все резолверы получают новый ключ и, в принципе, готовы им валидировать запросы.
2. Обратный таймер максимального TTL. Далее старый ZSK помечается как старый. Новый становится активным. Подписываются записи (т.е. меняются RRSIG записи).
3. Удаление старого ключа из хранилища.
KSK: алгоритм double KSK
1. Создается новый KSK. В итоге должно получится два ключа и две сигнатуры (новая и старая).
2. Таймер TTL. Отправляется DS хеш в верхнюю зону. Дrля moscow. и москва. DS отправляется в ICANN вручную.
3. Вывод старого ключа и удаление DS хеша из верхней зоны.