Интересно, зашифрованы ли DNS-запросы. Если да, то можете ли вы вкратце объяснить процесс, как я полагаю, для того, чтобы шифрование происходило, между двумя сторонами должно быть по крайней мере минимальное общее основание (например, доля ключа), но поскольку DNS использует UDP и не требует установления соединения, Я не могу представить, как в этом случае можно зашифровать полезную нагрузку.
Спасибо
DNS, по умолчанию и при создании, не предлагает ни аутентичности (будучи уверенным, что вы получаете ответ от истинного авторитетного сервера имен зоны), ни конфиденциальности (убедитесь, что никто в сети не может понять ваш запрос или ваши ответы).
DNSSEC был создан для решения проблемы аутентичности, поскольку он позволяет подписывать записи, а с помощью механизма ключей вы строите цепочку доверия и можете проверять полученные ответы. Он решает проблему человека посередине в том смысле, что, если соответствующая зона подписана (что все еще около 0,53% всех зон в настоящее время), и если кто-то попытается изменить ответы для такой зоны, вы сможете заметить изменения.
Подлинность важнее конфиденциальности, вопреки интуиции. Зачем? Потому что, если у вас нет гарантии, с кем вы говорите, даже если ответ приходит к вам в зашифрованном виде, какое значение он имеет? Вы можете выполнять шифрование с любой злой третьей стороной, если не аутентифицируете ее.
Это правда, что если у вас уже есть подлинность, например, из-за DNSSEC, вы можете захотеть сохранить конфиденциальность, поскольку DNS может передавать конфиденциальную или, по крайней мере, личную информацию. Вот почему QNAME минимизация теперь существует, чтобы уменьшить количество информации, отправляемой на каждый сервер имен. Это все больше и больше поддерживается (скоро в привязке)
Итак, что касается шифрования, ваша первая ошибка - подумать о UDP. DNS использует UDP и TCP, а в настоящее время даже чаще TCP по причинам, которые мы увидим ниже. Кроме того, обратите внимание, что даже для UDP у вас есть параметры шифрования, см. DTLS, который в основном является TLS в UDP. QUIC, созданный Google (в основном для того, чтобы иметь возможность создавать оптимизированный HTTP, который теперь стал HTTP / 2 после SPDY), также был построен на UDP с ценными бумагами, аналогичными тем, что предлагает TLS. Взгляните на эти два, чтобы опровергнуть вашу идею о том, что полезная нагрузка не может быть зашифрована в таком случае.
Сегодня для зашифрованного DNS у вас есть эти параметры в произвольном порядке:
odns
TLD.Конечно, во всех этих случаях вам нужны определенные серверы, говорящие о протоколе. Некоторые открытые преобразователи уже предлагают DNS через TLS. Однако вы только перекладываете свою проблему: ваше соединение «защищено» для них, но тогда вы должны доверять им, чтобы они работали правильно и не лгали вам, особенно при проверке DNSSEC.
Ты можешь:
Стандартный DNS нигде не шифруется. DNSSEC имеет криптографически подписанные (но еще не зашифрованные) ответы. За прошедшие годы были некоторые нестандартные идеи и реализации, но ничего серьезного.
DNS также должен работать через TCP, поскольку это стандартный механизм для обработки слишком больших ответов (альтернативой является фрагментация IP). По сути, сервер отправляет ответ UDP, в котором говорится: «Ответ слишком велик, попробуйте еще раз по TCP».
Что касается вашего вопроса, простым, но медленным решением было бы сделать то же самое, что и HTTPS - выполнить трехэтапное рукопожатие TLS, как-то проверить сертификат, а затем обменяться данными. Настоящая проблема состоит в том, чтобы уменьшить количество обходов, сохраняя при этом некоторую форму безопасности.