. Nikolay Hristov - Какво е DNSCurve?


Какво е DNSCurve?
DNSCurve е надстройка на стандартния DNS протокол като идеята е да направи трафика между DNS сървърите криптиран. По този начин се избягват по-голямата част от проблемите на дизайна на DNS протокол.

Как работи?

DNSCurve работи като препращащ (forwarding) dns сървър.

DNS or DNSCurve clients <-> DNSCurve server <-> Authoritative name server (tinydns/PowerDNS/.)
За целта трябва да имате инсталиран DNSCurve сървър на вашите NS записи. Дали това ще е само forwarding сървър или authoritative+dnscurve зависи от имплементацията. Има няколко имплементации за момента - curvedns (forwarding only), gdnsd (authoritative+dnscurve), dnscrypt (cache proxy+client), djbdns dnschache patch за dnscurve поддръжка.

Установяване на криптирана връзка между dns клиент/сървър без надстройки на текущия DNS протокол.

Идеята е публичните ключове за криптирането да се разменят чрез DNS записи. В общи линии се случва следното
DNS клиентът (или cache сървърът) казва - Кои са DNS-ите, които отговарят за horizon9.org?
Отговорът на заявката е:
horizon9.org NS uz5wy8l27yn2668yfcm2nvw8nxvr2gldcdvmuhju5d4j6lkmz1gg4r.ns1.horizon9.org
horizon9.org NS uz519s6hhsm8z379wvkwl80z3mzph8u5wbdhdnlhq33kkd49d892ft.ns2.horizon9.org

DNS клиентът взема публичния ключ и с него криптира следващата заявка.
Както се досещате, клиентът също трябва да има генерирани ключове, които се генерират при инсталирането му.
От тук нататък всичките запитвания към horizon9.org минават по криптиран път.
Предимства
* Предимството на DNSCurve е, че заявките се побират в 512 bytes. Това означава,  че се побира в един стандартен UDP dns пакет който би минал без проблем и през неадекватно настроените firewalls по пътя. За това не са нужни никакви промени по текущия DNS протокол и не е нужно да се ползва TCP имплементацията (което води по принцип до забавяне на отговорите).
* Ключовете са сървърно базирани, тоест ако поддържате повече от 1 домейн, е нужно да генерирате само 1 двойка ключове като сложите публичния в NS записите на всеки от домейните

uz5p6wlnqkgbrz6kbupkdylhqsb3btf6265pr0nl6vl6pwny16pb8p.ns1.horizon9.org
uz5p6wlnqkgbrz6kbupkdylhqsb3btf6265pr0nl6vl6pwny16pb8p.ns1.drundrun.org
uz5p6wlnqkgbrz6kbupkdylhqsb3btf6265pr0nl6vl6pwny16pb8p.ns1.alabala.com

......

* Съвместим е с DNSSEC (който аз лично не съм имплементирал на моите сървъри)
* Поддържа UDP и TCP заявки.
Инсталиране на curvedns + djb tinydns

Стандартът DNSCurve бе предложен преди 2 години от Dan Bernstein и вече си има имплементация. Идеята му е много добра и проблемът, че все още не е внедрен навсякъде,  най-вероятно се дължи на това, че повечето хора го мразят, защото се държи като задник по мейлинг листите. Това не пречи идеята му да е опростена и напълно приложима. Имплементацията се нарича curvedns, използваща networking and cryptography library. Направена е да работи с djb daemontools. Ето и принципа на работа на curvedns.
* ns1.horizon9.org 193.22.103.2
* dns curve сървърът слуша на IP 193.22.103.2
* истинският dns сървър слуша на 127.0.0.1
* dns curve сървърът обработва запитванията относно *.horizon9.org като ги препраща към 127.0.0.1:53 където работи истинския authoritative сървър обслужващ зоната horizon9.org
* ако заявката е стандартна просто се препраща към 127.0.0.1:53
* ако заявката е тип DNSCurve първо се установява сигурна връзка между запитващия и сървъра и след това се предава заявката към 127.0.0.1:53 като данните са обменени по криптиран път.
Това решение предлага без много проблеми да се инсталира поддръжка за dnscurve протокола.
На практика за да може крайният потребител да се възползва от това нововъведение, той трябва да има dns клиент или поне dns cache сървър който да поддържа протокола DNSCurve .


djb dnscache patch за поддръжка на dnscurve протокола

Djbdns пакета съдържа и  dns cache server. Matthew Dempsky направи patch който позволява  dnscache да "разбира" протокола dnscurve. Този patch променя и начина на записване на лога. Добавени са 2 символа: + и -. Когато в лога има +, това означава че връзката по която е получена dns информацията за даден домейн е била криптирана (dnscurve протокол). Ако е с -, това означава че информацията е придобита по стандартения некриптиран път.

`--# host -t ns yp.to
yp.to name server uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to.
yp.to name server uz5hjgptn63q5qlch6xlrw63tf6vhvvu6mjwn0s31buw1lhmlk14kd.ns.yp.to.
`--#
`--# cat /service/dnscache/log/main/current|grep +
@400000004eeba4660a5e3a6c tx 0 2 yp.to. yp.to. + 839b478f 83c1208e
@400000004eeba47c303bc54c tx 0 1 cr.yp.to. yp.to. + 839b478f 83c1208e
`--#

OpenDNS dnscrypt


OpenDNS съвсем наскоро пуснаха версии поддържащи протокола DNSCurve. Клиентска и сървърна част може да изтеглите от тук: https://github.com/opendns.
За момента има клиентска част прекопилирана само за MacOSX. Компилира се на linux, *BSD (не съм го тествал лично, но така пише в README-то). Windows версия все още няма, но е в процес на разработка.


gdnsd - още една имплементация на протокола dnscurve.
 

gdns e оше една имплементация на authoritative dns server, който е в активна разработка.

Networking and Cryptographic library (nacl)

Проект за разработка на библиотека която предлага текущи решения за проблемите в мрежовата криптография (основно - бързодействие, сигурен алгоритъм, малко увеличение на критираният пакет - x1.15 според DJB). Проектът се ръководи от Tanja Lange (Technische Universiteit Eindhoven) и Daniel J. Bernstein (University of Illinois at Chicago). Тъй като и аз не съм много навътре в математиката и криптографията няма да ви отегчавам с подробности които не разбирам. Алгоритъма който се използва е Curve25519. Библиотеката предлага C, C++ и Python API-та за момента.
По-интересното в тази библиотека е един протокол предложен от DJB - CurveCP.

CurveCP - криптираме целият интернет за нула време?

Проблемът в момента в интернет е че текущите протоколи за криптирана връзка са прекалено тежки за процесорите на машините на големите сайтове. Големите доставчици на web услуги  не предлагат изцяло криптирани връзки поради недостинг на процесорна мощ. Google, например, има разлики ако се използва през http или https. През https липсват картинки, флаш, видео и всякакви натоварващи трафика неща.

Представете си че една dnscurve стане стандарт в близките 5 години, тоест по-голямата част от DNS зоните имат public key в NS записите си. Сега си представете че искате да проверите пощата си през уеб браузър. Браузърът ви ще се опита да установи SSL критирана връзка в уеб базирания мейл по https. За целта трябва да се разменят пубичните ключове и да се стартира сесията. Защо да си разменят наново ключове след като публичните ключове могат да се дистрибутират чрез DNS? Просто записа в DNS-а за www.horizon9.org ще стане по следният начин.

uz5p6wlnqkgbrz6kbupkdylhqsb3btf6265pr0nl6vl6pwny16pb8p.horizon9.org -> 195.177.249.170
www.horizon9.org -> CNAME -> uz5p6wlnqkgbrz6kbupkdylhqsb3btf6265pr0nl6vl6pwny16pb8p.horizon9.org
От тук нататък клиентът има всичко необходимо за да установи криптирана връзка с отсрещния сървър. За да проработи това:
* или браузърът и отсрещния сървър да бъдат пачнати за поддръжка на CurveCP, тоест CurveCP да стане стандарт.
* или бързото и лесно решение - използване на CurveCP proxy и трафикът да бъде прехвърлян през него. Това би ставало незабелязано за крайният клиент.

Това би трябвало да важи не само за уеб, но и за всичките използвани протоколи в интернет.
В nacl библиотеката е включено и curvecp proxy.


Като заключение мога да кажа, че nacl и dnscurve са една много правилна стъпка напред в интернет - сигурността. Доколко това ще се възприеме - времето ще покаже. Хубавото е че ако го инсталирате на вашите DNS сървъри, това не би попречило на нормалната им работа. Инсталацията определено е максимално опростена.

За повече подробности прегледайте използваните ресурси. Горещо Ви препоръчвам, ако сте заинтересован от DNSCurve да изгледате лекцията на Dan Bernstein публикувана като видео във vimeo.com (има линк по-долу)


Използвани ресурси:
http://cr.yp.to/ - DJB site.
http://dnscurve.org/ - DNSCurve protocol спецификация.
http://curvedns.on2it.net/
- Forwarding proxy имплементация на DNSCurve протокола.
http://nacl.cr.yp.to/ - Networking and Cryptography library.
http://dankaminsky.com/2011/01/05/djb-ccc/ - Дан Камински блог.
http://vimeo.com/18417770 - Видео на лекцията на Dan Bernstein за DNSSEC, DNSCurve, CurveCP.

NetBSD