Почему выбор адреса в Yggdrasil — вопрос безопасности, а не эстетики
Это пока черновик, я запутался в математике
Когда впервые запускаешь Yggdrasil, в конфиге появляется случайно сгенерированный ключ и соответствующий ему IPv6-адрес вида 200:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx и почти такой же адрес выделяемой подсети 300:xxxx:xxxx:xxxx:xxxx::/64. Многие считают, что сменить его стоит лишь ради “красивого” адреса с :cafe: или :babe:. Это опасное заблуждение. Выбор адреса — вопрос криптографической стойкости вашей ноды. Объясню почему.
Как формируется адрес и где кроется уязвимость#
В Yggdrasil адрес генерируется из публичного ключа ed25519:
- Берётся хеш SHA512 от публичного ключа
- Количество лидирующих единиц (подряд идущих битов
0с начала хеша) определяет “ранг” адреса - Оставшиеся байты хеша формируют остальную часть адреса
Примеры:
200::/300::— 0 дополнительных лидирующих единиц после первых 7 фиксированных битов220::/320::— 32 лидирующих единиц230::/330::— 48 лидирующих единиц
Казалось бы, 2^112 вариантов ключей делают подбор полного адреса невозможным. И это верно для полного 128-битного адреса. Проблема возникает с подсетями. Инцидент 27 января 2026 года подтвердил реальность уязвимости.
О взломе#
26 января группа хакеров Boykisser Group провела демонстрационную атаку на публичные подсети, начинающиеся с 300::, 301::, 302::. При обращении к сервисам в этих подсетях пользователи видели заглушку с сообщением о компрометации. К счастью, группа действовала в белых целях: основное их требование к владельцам ресурсов — повысить криптографическую стойкость адресов.

Уязвимость подсетей: почему 64 бита — это мало#
Каждый адрес Yggdrasil автоматически предоставляет подсеть /64 — теоретически вы можете хостить до 2^64 сервисов на одном ключе, используя разные адреса вида ваш_адрес::1, ваш_адрес::2 и т.д.
Но здесь кроется фатальный недостаток архитектуры:
Маршрутизация в Yggdrasil учитывает только первые 64 бита адреса. Младшие 64 бита (суффикс подсети) влияют лишь на локальную доставку пакетов.
Это означает, что злоумышленник может:
- Найти ключ, у которого первые 64 бита совпадают с вашим адресом
- Подключиться к сети и принимать/перехватывать трафик, предназначенный вашим сервисам
Для низких адресов (300:XXXX:XXXX:XXXX::, 301:XXXX:XXXX:XXXX::) сложность подбора коллизии подсети составляет всего 2^48-49 операций, что достижимо подобрать за пару суток на видеокарте среднего класса. Сам я на RTX 2050 за сутки сгенерировал адрес со сложностью 2^40. Для адреса 331:: (49 нулей) сложность уже 2^97, что уже почти невозможно.
Математика риска#
| Адрес | Лидирующие единицы | Сложность подбора коллизии | RTX 2050 | RX 9070 XT | RTX 5090 | Ферма (4×RTX 5090) | Крупная ферма (16×RTX 5090) |
|---|---|---|---|---|---|---|---|
200:: |
0 | ~2^112 | 1.2×10¹⁶ лет | 3.6×10¹⁵ лет | 2.4×10¹⁵ лет | 6.0×10¹⁴ лет | 1.5×10¹⁴ лет |
220:: |
32 | ~2^144 | 5.1×10²⁸ лет | 1.5×10²⁸ лет | 1.0×10²⁸ лет | 2.6×10²⁷ лет | 6.4×10²⁶ лет |
230:: |
48 | ~2^160 | 3.3×10³³ лет | 1.0×10³³ лет | 6.7×10³² лет | 1.7×10³² лет | 4.2×10³¹ лет |
300:: |
0 | ~2^48 | 8 мес. | 2 мес. | 2 мес. | 2 нед. | 3 дня |
301:: |
1 | ~2^49 | 1.3 года | 5 мес. | 3 мес. | 3 нед. | 6 дней |
320:: |
32 | ~2^80 | 2.7 млрд лет | 833 млн лет | 556 млн лет | 139 млн лет | 35 млн лет |
330:: |
48 | ~2^96 | 1.8×10¹⁴ лет | 5.5×10¹³ лет | 3.6×10¹³ лет | 9.1×10¹² лет | 2.3×10¹² лет |
Примечание:
- Хешрейты: RTX 2050 ≈ 7 MH/s, RX 9070 XT ≈ 23 MH/s, RTX 5090 ≈ 34.5 MH/s (+50% к RX 9070 XT) для конкретного майнера yggdrasil-vanity. Были сообщения, что некоторым удалось добиться в скорости 1 миллиард адресов секунду.
- Для адресов
200::/220::/230::атака нереалистична даже на крупных фермах.- А вот
300::и301::— уязвимы: их можно подобрать за дни–месяцы даже на одной видеокарте.- Уже начиная с
320::(32 лидирующих единицы) сложность превышает практические возможности современных систем.
Таким образом, адреса вида 3xx:: с малым числом лидирующих единиц — критически небезопасны, если вы используете подсети. Рекомендуется минимум 310::, а лучше — 320:: или выше.
Практические рекомендации#
Если у вас одна машина, то лучше использовать полный адрес. А для красивого адреса лучше использовать систему доменных имён ALFIS. Но если вам прямо нужна сеть, то нужно обязательно озаботится майнингом адреса
Намайните высокий адрес
Инструменты:
-
yggdrasil-vanity — майнер на OpenCL/CUDA
-
Пример запуска:
./yggdrasil-vanity -f results.csvПосле получения ключа замените поле
PrivateKeyв/etc/yggdrasil.confи перезапустите сервис.Также, если хотите найти какую-то комбинацию, то у данной утилиты есть ключ -r, в который можно передать regex правила для поиска. По-умолчанию майнер ищет адреса с большим и большим количеством лидирующих единиц. Нашёл с 10, допусимм, значит дальше ищет >10.
тут примеры надо сделать. Адреса выводятся в формате 200:324d:0:93:21dc:0:2:caaa. Надо для такого сделать regex.
| Адрес (пример) | Лидирующие единицы | Сложность подбора (2ⁿ) | RTX 2050 (7 MH/s) | RX 9070 XT (23 MH/s) | RTX 5090 (~34.5 MH/s) |
|---|---|---|---|---|---|
200:xxxx:... |
0 | 2⁰ = 1 | < 0.1 мс | < 0.1 мс | < 0.1 мс |
20a:xxxx:... |
10 | 2¹⁰ ≈ 1K | < 0.1 мс | < 0.1 мс | < 0.1 мс |
214:xxxx:... |
20 | 2²⁰ ≈ 1M | ~0.1 с | ~0.03 с | ~0.02 с |
21e:xxxx:... |
30 | 2³⁰ ≈ 1B | ~2.5 мин | ~45 сек | ~30 сек |
220:xxxx:... |
32 | 2³² | ~10 мин | ~3 мин | ~2 мин |
228:xxxx:... |
40 | 2⁴⁰ | ~70 часов | ~22 часа | ~15 часов |
🔍 Как вычисляется префикс адреса:
Первый байт IPv6-адреса в Yggdrasil равен0x20 + n, гдеn— количество лидирующих единиц, выраженных в шестнадцатеричном виде и уложенных в один байт.
Например:
- 10₁₀ = 0x0a →
200 + 0x0a = 0x20a→20a::- 20₁₀ = 0x14 →
214::- 32₁₀ = 0x20 →
220::- 40₁₀ = 0x28 →
228::- 48₁₀ = 0x30 →
230::
Таким образом, чем больше лидирующих единиц — тем «выше» первый сегмент адреса, и тем безопаснее ваша нода при использовании подсети.
Заключение#
Выбор адреса в Yggdrasil — не про «красивые цифры», а про криптографическую стойкость. Низкий адрес с подсетью — это как использовать пароль 123456 для админки: технически работает, но приглашает к атаке.
Помните: в децентрализованной сети вы — сами себе администратор безопасности. И первый шаг к защите начинается с генерации ключа.