Введение

Криптографически сгенерированный адрес (CGA) — это адрес протокола Интернет версии 6 (IPv6), идентификатор хоста которого вычисляется с помощью криптографической хеш-функции. Эта процедура представляет собой способ привязки ключа цифровой подписи к IPv6-адресу в протоколе безопасного обнаружения соседей (SEND).

Безопасность

Для того, чтобы злоумышленник заставил клиента поверить, что он получил действительное сообщение от определенного CGA, которому злоумышленник не владеет, ему необходимо найти коллизию хешей для соответствующих бит Hash1 и Hash2, применив атаку полным перебором. Если злоумышленник обнаружит набор параметров CGA (включая открытый ключ, для которого он знает закрытый ключ), который может быть использован для генерации того же CGA, что и целевой, то он сможет выдать себя за фактического владельца CGA, оставаясь незамеченным (за исключением случаев, когда клиент ранее связывался с хостом и заметит изменение открытого ключа при неизменном CGA). Из 64 бит Hash1 в идентификаторе интерфейса используются только 59, так как 5 бит перезаписываются. Для CGA с Sec равным 0 это означает, что вычислительная сложность поиска набора параметров CGA, дающих желаемые 59 бит, составляет приблизительно (в нотации «большое O»). Однако большее значение Sec увеличивает эту сложность в раз до , поскольку первые 16 бит Sec в Hash2 становятся значимыми (то есть реализуется расширение хеша, требующее, чтобы эти биты были равны 0). В процессе генерации CGA стоимость генерации адреса возрастает на тот же коэффициент в зависимости от значения Sec, но стоимость использования и проверки CGA остается постоянной. Поскольку Sec не является частью структуры данных CGA Parameters, а входит в состав самого адреса, злоумышленник не может использовать значение Sec меньше, чем у целевого адреса (например, 0), чтобы избежать (или уменьшить масштаб) атаки полным перебором на Hash2. Это привело бы к генерации CGA, отличного от целевого, поскольку по крайней мере один из трех самых левых битов идентификатора интерфейса не совпал бы. Если целевое значение Sec все равно записывается в идентификатор интерфейса, то Hash2 (весьма вероятно) не пройдет проверку из-за недостаточного количества нулей в старших битах. В процессе генерации CGA крайне маловероятно возникновение трех коллизий адресов. Если дубликат адреса будет обнаружен в третий раз, это, скорее всего, будет вызвано ошибкой конфигурации или реализации, либо атакой типа «отказ в обслуживании». Поэтому число допустимых значений для collCount ограничено диапазоном от 0 до 2. Этот параметр должен проверяться на принадлежность к этому диапазону в процессе проверки CGA, чтобы предотвратить попытки злоумышленника использовать его и перебирать различные значения без необходимости каждый раз выполнять новый поиск коллизий Hash2. Включение префикса подсети в операцию хеширования, приводящую к Hash1, предотвращает использование злоумышленником единой предварительно вычисленной базы данных для атаки на адреса с разными префиксами подсети. Верификатор также может быть уверен, что открытый ключ привязан именно к этому адресу, а не к адресу с тем же идентификатором интерфейса, но другим префиксом подсети. Поскольку спецификация CGA предписывает использовать префикс подсети из структуры данных параметров CGA для операций хеширования, необходимо убедиться в его соответствии префиксу подсети CGA в процессе проверки CGA.