Криптографическое образование адреса IPv6 в Yggdrasil
Habr3 min
Абонентский IP – логический адрес пользователя в сети. В малых сетях обычно используются статические адреса, прописанные вручную, а в более массовых – автоматическое назначение через DHCP. За каждый сегмент локальной или глобальной сети отвечает некое лицо или организация, в чьи обязанности входит управление маршрутизацией и контроль IP-адресов.
В большинстве случаев произвольная смена адреса, выданного администратором, не несет абоненту практической пользы, т.к. может отсечь его от сети. Более опытный пользователь знает про коллизию адресов и может этим злоупотребить: назначить своему устройству уже занятый адрес, тем самым лишив изначального хозяина IP-адреса возможности использовать сеть. В обычных сетях за подобным хулиганством бдит администратор, а что происходит в масштабируемых сетях с автоматической маршрутизацией, где контроль за пользователями вовсе отсутствует? Разберем решение этой задачи в Yggdrasil Network – масштабируемой меш-сети с оконечным шифрованием и IPv6-маршрутизацией в сети 200::/7.
Никакого мошенничества
Так как сеть имеет сквозное шифрование от абонента до абонента, очевидно наличие ключей. В Yggdrasil используется шифрование на эллиптических кривых – x25519, подразумевающее связку публичного и приватного ключа. Публичный ключ распространяется свободно, а приватный надежно хранится и служит для расшифровки.
Первый байт «02» адреса IPv6-Yggdrasil является константой, а дальше интереснее: от публичного ключа x25519 берется хеш SHA512, количество лидирующих единиц которого, т.е. битов, установленных в ненулевом состоянии, образует второй байт.
Образование адреса Yggdrasil
Нулевой бит, следующий за массивом единиц, равно как и первый нулевой бит при отсутствии лидирующих единиц, урезается. Следующие за ним 14 байт образуют оставшуюся часть адреса.
Таким образом получается бесконфликтная сеть, где при масштабировании небольшого сегмента сети, например, при подключении локального сегмента к глобальному через публичный пир, не возникает опасности коллизии адресов. Это обуславливается почти безграничным множеством вероятных ключей x25519, случайно генерируемых при первом запуске Yggdrasil.
Почва для размышлений
Хеш SHA512 составляет 64 байта, в то время как адрес IPv6 даже с учетом константы «02» – всего лишь 16 байт, а изначальный ключ x25519 – 32 байта.
Некоторые пользователи сомневаются в практической пользе такого решения и считают, что вполне реально найти ключи с коллизией адресов, т.к. массив данных ключа увеличивается вдвое, а затем от него берется лишь небольшая часть (примерно 1/5), которая образует IPv6. При всем желании, модель угрозы нахождения разных ключей с одинаковым адресом не была подтверждена практически, что говорит о сложно исчислимом количестве вариаций адресов даже при таком на первый взгляд необычном подходе к их образованию.
Разработчики Yggdrasil постарались усложнить подбор адресов. Первые непрерывно идущие единичные биты создают дополнительный фактор уникальности адреса. Вероятность подобрать последовательность из последних 14 байт IPv6 кажется весьма реалистичной, однако общий успех менее вероятен, т.к. напрямую зависит от количества лидирующих единиц в хеше – 2-го байта. Отсюда выходит понятие «высокого адреса» – адреса с большим значением во втором байте и, следовательно, с более обширным использованием 64-байтного массива от SHA512. Исходя из этого, имеет смысл майнить «высокие адреса» для серьезных проектов.
Желание найти коллизию, особенно при умозрительной вероятности успеха, побудило ни один десяток человек к беспощадному майнингу адресов.
Cryptographic IPv6 Address Education in Yggdrasil
Habr3 min
View Original
Subscriber IP is the logical address of a user on the network. Small networks usually use static manually assigned addresses and larger networks use automatic assignment via DHCP. Each segment of the local or global network is responsible for a certain person or organization that is responsible for the routing and IP control.
In most cases, an arbitrary change of address given by the administrator is of no practical use to the subscriber because it can cut him off from the network. A more experienced user knows about the address collision and can abuse it: assign his device an already occupied address thus depriving the original owner of the IP-address of the possibility to use the network. On ordinary networks, this sort of hooliganism is monitored by the administrator, but what happens on scalable networks with automatic routing, where there is no user control at all? Let's take a look at Yggdrasil Network, a scalable mesh network with end-to-end encryption and IPv6 routing on a 200::/7 network.
No fraud.
Since the network has end-to-end encryption from subscriber to subscriber, the presence of keys is obvious. Yggdrasil uses elliptic curve encryption, x25519, which involves bundling a public and a private key. The public key is freely distributed, and the private key is securely stored and used for decryption.
The first byte "02" of the IPv6-Yggdrasil address is a constant, and then it gets more interesting: From the x25519 public key, a SHA512 hash is taken, whose number of leading units, i.e. bits set to non-zero, forms the second byte.
Yggdrasil address formation
Yggdrasil address formation
The zero bit following the unit array, as well as the first zero bit in the absence of leading units, is truncated. The 14 bytes following it form the remainder of the address.
This results in a conflict-free network, where there is no danger of address collisions when scaling a small network segment, such as when connecting a local segment to a global segment via a public peer. This is due to the almost infinite number of plausible x25519 keys randomly generated when Yggdrasil first runs.
Ground for thought
The SHA512 hash is 64 bytes, while the IPv6 address, even including the "02" constant, is only 16 bytes, and the original x25519 key is 32 bytes.
Some users doubt the practicality of this solution and believe that it is quite realistic to find keys with address collision, because the key data array is doubled, and then only a small part (about 1/5) of it is taken to form IPv6. With all wish, the model of threat of finding different keys with the same address has not been confirmed practically, which says about difficult to calculate number of address variations even with this seemingly unusual approach to their formation.
The developers of Yggdrasil have tried to make the selection of addresses more complicated. The first continuous single bits create an additional factor of address uniqueness. The probability to pick up a sequence of the last 14 bytes of IPv6 seems very realistic, but overall success is less likely, as it directly depends on the number of leading units in the hash - the 2nd byte. From this comes the notion of a "high address" - an address with a larger value in the second byte, and hence more extensive use of the 64-byte array from SHA512. Based on this, it makes sense to mine "high addresses" for serious projects.
The desire to find collision, especially with the speculative probability of success, has prompted dozens of people to mercilessly mine addresses.
*** Translated with www.DeepL.com/Translator (free version) ***
Коментарі
Дописати коментар
Олег Мічман в X: «Donations and support for media resources, bloggers, projects, and individuals. https://t.co/HPKsNRd4Uo https://t.co/R6NXVPK62M» / X
https://twitter.com/olukawy/status/1703876551505309973