Реализации ML-KEM могут быть очень быстрыми, быстрее, чем X25519 – это относится к гибридам в браузерах. Например, реализация ML-KEM-768 для OpenSSL из проекта OpenQuantumSafe для инкапсуляции ключа работает в пять раз быстрее, чем X25519 в том же OpenSSL “при прочих равных” (декапсуляция – в три раза быстрее):

(openssl speed X25519 mlkem768)

           keygens/s  encaps/s  decaps/s
X25519     26646.1    12213.9   24366.2
mlkem768   53101.6    62756.0   63933.0

То есть, в гибридной схеме, где ML-KEM присоединяется к X25519, будет весьма небольшой рост вычислительных затрат по сравнению с X25519. При этом браузер Firefox, скажем, ещё и экономит время на генерирование ключей, поскольку использует один и тот же открытый параметр X25519 и в гибриде, и в отдельном варианте. Понятно, что на серверной стороне разницы тут нет – серверу так или иначе придётся для гибрида выполнить и X25519, и ML-KEM. Но всё равно это лишь небольшой дополнительный расход вычислительных мощностей.

Конечно, ML-KEM, согласно стандарту, может использоваться отдельно, тогда схема будет и работать быстрее, и постквантовую стойкость обеспечивать; гибрид используется для подстраховки – и совсем не лишней подстраховки, надо заметить. А работает ML-KEM быстро потому, что там используется NTT (“теоретико-числовое преобразование”) и, соответственно, быстрые операции с полиномами.



Комментировать »

В продолжение недавней записки про числа в ML-KEM. Один из ключевых параметров ML-KEM, одинаковый для всех наборов, это число (модуль) 3329. Почему выбрано именно 3329? Был ли выбор “случайным” (а иногда используют проверяемые методы для выбора параметров) или это число подобрано специально?

Число 3329, обозначаемое q, в ML-KEM выбрано строго специально. И вот из каких соображений. Весь практический вычислительный смысл ML-KEM (Kyber) в преобразовании (NTT), позволяющем быстро производить арифметические операции с полиномами. Чтобы быстрые операции NTT стали возможны в ML-KEM, число q должно быть простым, а (q-1) должно делиться на 256. (Более “общо” – делиться должно на степень двойки.) 256 – это другой параметр ML-KEM, его значение продиктовано разрядностью операций (256 бит).

То есть, 3329 – простое, (3329 – 1)/256 == 13. Если эти требования не выполняются, быстрый NTT работать должным образом не будет, поскольку это не настолько универсальный алгоритм, умножать полиномы “в лоб” – очень медленно, и другие быстрые алгоритмы – тоже оказываются медленными по сравнению с NTT. Неподалёку от 3329 не так много чисел, обладающих описанными свойствами: 257, 769, 3329, 7681, 7937. При этом, нужно выбрать число поменьше (важна экономия каждого бита), но чтобы не слишком выросла вероятность получения неверного результата при работе криптосистемы. Для 257 и 769 вероятность ошибки заметно больше. Поэтому авторы алгоритма выбрали 3329.



Комментировать »

Аккаунт на “Хабре” у меня уже больше пятнадцати лет, однако за эти годы я там написал только два комментария (сейчас уже четыре!). Подумал, что, наверное, пора и статью попробовать опубликовать – подготовил, да и опубликовал технический текст про ключи и шифротексты ML-KEM в TLS, с числами и байтами.



Комментировать »

Нестрогое, краткое описание чисел и ключей, возникающих в ML-KEM (но без алгоритмов самой криптосистемы). Это описание, к тому же, не использует технических математических терминов, хоть и требует некоторых знаний из школьного курса алгебры (про такое описание нередко спрашивают).

ML-KEMмодуль-решёточная криптосистема с постквантовой стойкостью, носившая название Kyber до своей стандартизации. “Постквантовая стойкость” означает, что криптосистема не взламывается алгоритмом Шора на достаточно мощном универсальном квантовом компьютере (теоретическом). ML-KEM позволяет одной стороне передать другой стороне через открытый канал секрет, который становится для этих сторон общим секретом.

Схема называется KEM – Key Encapsulation Mechanism. KEM является обобщением, которое делает возможным формальный анализ стойкости криптосистем в криптологии. KEM – это не система “шифрования” и не система “цифровой подписи”. Логически, в случае ML-KEM, используется преобразование исходного значения секрета при помощи открытого ключа в шифротекст. Необходимые алгоритмические дополнения, превращающие асимметричную криптосистему в KEM, как говорится, снаружи всё равно не видны. Вполне можно упрощённо считать, что секрет здесь передаётся в зашифрованном асимметричной криптосистемой виде.

ML-KEM стандартизована для нескольких сочетаний параметров. Используемое сочетание отражается цифрами, которые приписывают к названию: ML-KEM-512, ML-KEM-768, ML-KEM-1024.

Эти числа из названия следует воспринимать как “длину секретного ключа”, выраженную в “базовых элементах” – но не в битах! Ключи в ML-KEM строятся из многочленов (полиномов), имеющих 256 коэффициентов. Многочлены образуют векторы и матрицы. То есть, элементами векторов и матриц являются многочлены, а не “отдельные числа”.

Так, ML-KEM-768 использует размерность 3 (параметр называется k), что соответствует трём многочленам или 3*256 == 768 коэффициентам. Если бы размерность ключей была бы ровно три, то взлом не составил бы труда и без всяких квантовых компьютеров. Для 768 коэффициентов – вычислительная сложность существенно выше (а квадратная матрица 3×3, являющаяся частью открытого ключа ML-KEM-768, будет, в итоге, содержать 256×9 коэффициентов: девять полиномов, каждый – по 256 коэффициентов). 256 – один из фиксированных параметров ML-KEM. Коэффициенты многочленов берутся по модулю 3329, то есть, берутся остатки от деления на 3329, поэтому коэффициенты лежат в интервале от 0 до 3328. Внутри ML-KEM используются представления, вводящие отрицательные значения, это нужно для процедур округления рациональных чисел, но на верхнеуровневую картину данный аспект не влияет. Заметьте, впрочем, что особенности округления используются при упаковке шифротекста (см. ниже). 3329 – простое число, второй фиксированный параметр ML-KEM.

Открытый ключ ML-KEM состоит из матрицы (обозначается A) и вектора (обозначается t). Однако ни матрица открытого ключа (обозначается A), ни многочлены, составляющие вектор, – не передаются в формате “как есть”: чтобы сократить количество используемых байтов в ML-KEM применяется ряд оптимизаций. Вместо матрицы – передаётся 256-битное инициализирующее значение, из которого матрица вычисляется при помощи хеш-функции и специального алгоритма. Многочлены передаются как кортежи битовых представлений коэффициентов, но биты упаковываются в байты особым образом. Так, для многочленов, входящих в открытый ключ (помимо матрицы), запись одного коэффициента (значение в интервале [0,3328]) требует не более 12 битов, биты можно объединить как биты и записать, например, два значения в три байта (если бы два значения передавались без “упаковывания”, то потребовалось бы четыре байта). При передаче коэффициентов многочленов, формирующих шифротекст, используются другие методы оптимизации, существенно сокращающие количество байтов, нужное для записи шифротекста.

Запись открытого ключа ML-KEM-768 имеет длину 1184 байта. ML-KEM-512 – 800 байтов, а ML-KEM-1024 – 1568 байтов. Шифротексты – ML-KEM-768 – 1088 байтов, ML-KEM-512 – 768 байтов, ML-KEM-1024 – 1568 байтов.

Попробуем понять, почему длина открытого ключа и широтекста совпали в ML-KEM-1024. Открытый ключ в ML-KEM это квадратная матрица и вектор. В ML-KEM-1024 параметр k, задающий размерность матрицы и вектора, равен четырём, но матрица всё равно передаётся в виде инициализирующего 256-битного значения, то есть, 32 байта, а вот вектор – состоит из 4×256 элементов (напомню, что 256 – количество коэффициентов каждого многочлена, в векторе их четыре). Получаем, для вектора, 1024 коэффициента, пара которых занимает три байта. Делим и умножаем: 1024/2×3 == 1536 байтов, плюс 32 байта, задающих матрицу, итого 1568 байтов занимает открытый ключ.

Шифротекст (то есть, “инкапсулированный” ключ) в ML-KEM состоит из вектора (обозначается u) и одного многочлена (обозначается v). В варианте параметров ML-KEM-1024, вектор – это четыре многочлена (k==4). То есть, тут всего пять многочленов, 256 коэффициентов в каждом. Однако для многочленов, составляющих шифротекст ML-KEM, применяются другие способы “сжатия”, использующие свойства округления значений коэффициентов. Это позволяет уменьшить количество битов. Поэтому запись каждого коэффициента в ML-KEM-1024 для вектора u использует 11 битов, а для многочлена v – всего 5 битов. Считаем в битах: 4×256×11 == 11264 бита или 1408 байтов; это вектор; дополнительный многочлен – 256×5 == 1280 битов или 160 байтов; итого: 1408 + 160 == 1568 байтов. Параметры сжатия для шифротекста отличаются от набора к набору: для ML-KEM-1024 это 11 и 5 битов, для ML-KEM-768/512 – 10 и 4 бита.

В спецификации ML-KEM есть ещё параметры, обозначаемые буквой η (их два). Эти параметры задают интервалы значений при случайной выборке (семплировании) коэффициентов многочленов, служащих в качестве секретного ключа и маскирующих элементов (то есть, многочлена, задающего “ошибку”, которая скрывает передаваемые данные от стороны, не знающей секретного ключа).

Общий секрет в схеме ML-KEM имеет длину 256 бит строго. Это не секретный ключ, а секрет, который согласуют стороны. При получении секрета используеются хеш-функции и значение, передаваемое внутри схемы инкапсуляции. То есть, передаётся не сам секрет, а начальное значение, из которого принимающая сторона вычисляет верный екрет только в том случае, когда прочие параметры совпали. Это позволяет сделать схему стойкой в соответствии с формальными критериями. Логика же передачи секрета такова, что каждый бит отображается в коэффициент полинома, соответствующего, таким образом, этому секрету (с точностью до функции вычисления конкретного значения). Здесь используется основной трюк ML-KEM: математическая схема позволяет передать только один элемент за одну “транзакцию”, это часто и описано в элементарных примерах, но в ML-KEM этот элемент – многочлен с 256 коэффициентами, поэтому, приняв коэффициенты за ноль и единицу, передать можно 256 бит. Для отображения в ноль и единицу криптосистема использует округление по заданному правилу: грубо говоря, если значение коэффициента меньше половины максимального, то это ноль, иначе – единица (но может быть и ошибка – см. ниже). Таким образом, длина получаемого секрета – 256 бит.

В TLS клиент передаёт свой открытый ключ серверу, сервер вычисляет общий секрет на своей стороне и передаёт параметр, нужный для вычисления общего секрета, клиенту в виде шифротекста, который вычисляет, используя открытый ключ. Клиенту известен секретный ключ, парный открытому, поэтому, получив шифротекст, клиент вычисляет общий секрет, который в большинстве случаев совпадёт с секретом, полученным сервером. В ML-KEM заложена очень небольшая вероятность ошибки, поэтому секреты могут не совпасть даже тогда, когда все операции выполнены верно. На практике, ошибка проявляться не должна.



Комментировать »

Даниэль Бернштейн (Daniel J. Bernstein) опубликовал большую статью (англ.) с критикой некоторых возражений, относящихся к возможности создания универсальных квантовых компьютеров. Вообще, основной посыл статьи такой: нужно немедленно повсеместно внедрять постквантовую криптографию, потому что, исходя из анализа ситуации, не удаётся найти веских причин для уверенности в том, что АНБ уже не строит активно (или построило) квантовый компьютер, пригодный для практического криптоанализа.

В статье есть странный частный момент: в качестве примера, поясняющего, почему проблема огромного количества состояний, с которым должен работать квантовый компьютер, – это совсем не проблема, приводится работа обычного, классического компьютера с тысячей битов. То есть, обычный компьютер без труда может сгенерировать тысячу случайных битов, а потом провести с ними преобразование, которое изменит распределение вероятностей. Поэтому и тысяча кубитов, якобы, не создаёт теоретических проблем теоретическим квантовым компьютерам.

Бернштейн тут же прямо отмечает, что квантовые вычисления на кубитах это не то же самое, что и вычисления с обычными битами, но, тем не менее, подчёркивает, что практическая возможность обрабатывать отдельные состояния в тысячу битов любым классическим ноутбуком каким-то образом отменяет и проблему с огромной размерностью пространства состояний гипотетического квантового компьютера на тысячу кубитов. Цитата:

I’m not saying that computation on qubits is the same as computation on random bits. When you look at the details, you see that quantum computation allows a useful extra trick, setting up interference patterns between positive and negative variables. But an argument saying “quantum computing is impossible because there are so many variables” can’t be right: it also says that your laptop is impossible.
(“Я не утверждаю, что вычисление на кубитах это то же самое, что и вычисление на случайных битах. Если посмотреть детально, то можно увидеть, что квантовое вычисление позволяет провести дополнительный полезный трюк, задав схемы интерференции между положительными и отрицательными переменными. Однако аргумент, говорящий, что “квантовые вычисления невозможны, так как там настолько много переменных”, не может быть верным, поскольку этот же аргумент говорит, что ваш ноутбук невозможен.”)

Вообще, именно возможность “интерференции между переменными”, это не просто трюк, а она таки составляет смысл квантовых вычислений, которые, собственно, вычислениями, в привычном смысле, и не являются. Чтобы интерференция состояний стала возможной, логично допустить, что эти состояния где-то “должны размещаться”. То есть, это не обязательно так, не является необходимым условием. Потому что можно, скажем, посчитать, что соответствующие потоки вероятностей и составляют некоторую над-реальность, а наблюдается только её “срез”, вызванный представлением экспериментатора (возможны ли при этом квантовые вычисления – другой вопрос). Однако, сама идея, что для 2^1000 состояний используемые модели “квантовой механики” не работают, не только не выглядит нелогичной, но уж точно не разрушается возможностью обработать тысячу битов классическим ноутбуком: в классическом ноутбуке другие состояния битовой строки возникают как программное представление после выполнения преобразования, а не являются фундаментом физической реализации алгоритма в некотором аналоговом вычислителе.



Комментировать »

А тип криптосистемы ML-KEM (она же – Kyber) на русском лучше писать так: “модуль-решёточная криптография”.

Вообще, определить ML-KEM, как прикладную криптосистему, можно совсем не используя соответствующее понятие решётки. Без модулей и колец – определить не выйдет, поскольку векторы и многочлены непосредственно служат элементами алгоритмических структур (достаточно того, что открытый текст представляется в виде многочлена). Но решётки, как один из мощных инструментов теоретической криптографии, тут возникают при доказательстве предположений о стойкости криптосистемы. Ну, или в другую сторону: выбор базовой задачи данной криптосистемы основан на оценках вычислительной сложности задач “на решётках”.

То есть, как ни крути, а решётки имеют определяющее значение, но с точки зрения базовой задачи, которая напрямую в ML-KEM не используется. Так же, кстати, написано и в стандарте NIST, где термин “решётка”, если не считать употребление его в названии, используется всего пару раз. (При этом, кстати, не совсем корректно писать, что используемая криптография “основана на задачах из теории решёток” – на этих задачах основаны предположения о стойкости, а не криптографические алгоритмы; не то чтобы радикальное изменение смысла, но существенные детали теряются.) И необходимо учитывать, что математический термин “решётка” (русский) и математический термин lattice (английский) – различаются в трактовках, даже если смотреть узкую интерпретацию, поэтому для строгих определений всё равно потребуются уточнения.

“Модулярная решётка” – явно не подходит, поэтому пусть будет “модуль-решёточная”. Ведь главное тут – чтобы криптосистема не оказалась решетчатой, но от слова “решето”.



Комментировать »

В ML-KEM (ранее – Kyber) возможен вариант, когда корректно полученные сторонами секреты не совпадут. В стандарте NIST это называется Decapsulation failure. То есть, сами криптографические примитивы, составляющие ML-KEM, срабатывают всегда – выводят 256-битное значение. Но с некоторой (чрезвычайно малой) вероятностью принимающая сторона, расшифровывающая секрет, может получить значение, не совпадающее с тем, которое отправлено. “Чрезвычайно малая вероятность” тут означает 2^(-164.8). Выглядит более чем несущественным параметром. Но рассматривать сам факт наличия такой “погрешности” можно с разных сторон.

Многие криптографические алгоритмы хороши тем, что, математически, там никакой ошибки быть не может: если шаги выполнены верно, то и результат всегда строго совпадает. Это один из фундаментальных принципов использования алгебры в криптографии: нельзя проверить все 2^256 элементов и записать их в один массив, но можно использовать обозримые свойства структуры группы, чтобы гарантировать, что результаты операций с любыми сочетаниями этих 2^256 элементов не разойдутся.

Строго говоря, и в ML-KEM упомянутая “погрешность” оказывается в ряду заданных результатов алгоритма, просто, определяется она на другом уровне. Более того, при практической реализации алгоритмов, не имеющих встроенных “погрешностей”, эти самые погрешности постоянно возникают и из-за ошибок в программах, и даже из-за ошибок в работе оборудования. Особенно, если говорить о вероятностях порядка 2^(-165) – казалось бы, тут и без всяких Rowhammer какой-нибудь залётный нейтрон может вызвать реакцию, которая переключит пару битов в модуле памяти. Нейтрон, конечно, может помешать, но это будет не то же самое, что и внесение обязательного сбоя непосредственно в логику алгоритма.



Комментировать »

Пишут, что свежие рекомендации профильного агентства правительства Австралии требуют отказаться от современных распространённых криптосистем (ECDH, ECDSA и др.) и перейти на постквантовые криптосистемы совсем скоро – к 2030 году. Занятно, что в этих рекомендациях запрещают SHA-256 в HMAC, но оставляют AES. Это тем более странно, что отказ от SHA-256 мотивируют традиционным развитием квантовых компьютеров. При этом, конечно, ничего не сказано про алгоритмы, используемые для защиты по высшим категориям (TOP SECRET).

Нетрудно посчитать, что знаменитый 2030 год планируется уже через пять лет. С одной стороны, пять лет это очень мало. С другой стороны – пяти лет может оказаться достаточно для того, чтобы появились квантовые алгоритмы для взлома, скажем, криптосистем на кодах и решётках. (Но и квантовые алгоритмы для AES – тоже нельзя исключать.) Естественно, алгоритмы будут не менее теоретическими, чем алгоритм Шора, и смогут сработать только на “гипотетических квантовых компьютерах”, но это всё равно потребует, как минимум, пересмотра рекомендаций, а как максимум – разработки новых криптосистем. Впрочем, всегда можно просто увеличить длину ключей (как долгие годы и делается с RSA).



Комментировать »

Поскольку браузеры, – в том числе, самый свежий Firefox, – перешли с Kyber768 на ML-KEM, я добавил на свой тестовый сервер TLS поддержку X25519MLKEM768 (не удаляя “гибриды” с Kyber768). Проверить можно при помощи новых версий браузеров Chrome и Firefox.

Кстати, немного занимательных элементов. В процессе развития постквантовой криптографии в TLS уже успели поменять “порядок байтов”. Так, в новых версиях представлений гибридных ключей – разная конкатенация массивов: в “старом” X25519Kyber768, если смотреть в сетевом порядке (так сказать, слева направо, что, конечно, математически неверно), сначала идёт ключ X25519, а потом – Kyber768; в “новом” X25519MLKEM – наоборот, сначала данные ML-KEM, а потом – X25519.

Почему это занимательно? А вот почему. Те немногие читатели dxdt.ru, которые непосредственно связаны с разработкой и реализацией ГОСТ-криптографии, совершенно точно наслышаны о технической шутке про “вращение байтов”, всплывающей в данной области постоянно и много лет. Суть вот в чём: при записи криптографических представлений, понятно, очень важен порядок байтов; так вот, в реализациях ГОСТ-криптографии, порядок байтов местами “сетевой”, а местами – в другую сторону. “Тупоконечное” и “остроконечное” представление. Так сложилось исторически. И смена направления, хоть и строго определена, но всегда происходит неожиданно. И она вовсе не так тривиальна, как можно подумать: байтовые последовательности попадают в хеш-функции; координаты точек – записываются в файлы; и так далее, и тому подобное. Понятно, что на стойкость и свойства математических операций, как и на описание алгоритмов в спецификациях, это не влияет. Однако если две реализации “байты вертят в разные стороны”, то они между собой несовместимы. На этом направлении даже есть тесты, которые, впрочем, не всегда помогают (как и в других областях, конечно). А самый забавный вариант – это когда значение оказалось “палиндромом”.



Комментировать »

Криптосистемы с постквантовой стойкостью предлагается внедрять в составе гибридных схем. Именно так сделано в TLS и в браузерах: широко и давно используемая X25519 + постквантовая криптосистема Kyber, на случай, если последняя окажется нестойкой. Под “гибридной” схемой здесь подразумевается объединение секретов, независимо полученных применением одной и второй криптосистемы: ни о каком “подмешивании” шагов одной криптосистемы в другую речи нет – X25519 не влияет на стойкость Kyber и наоборот (формальная оценка стойкости гибридной схемы в целом и для разных моделей – несколько другая история, но эти детали тут не важны). Подобная “гибридизация” имеет ряд занимательных особенностей: так, постквантовая Kyber должна, очевидно, обладать и стойкостью к классическим атакам, а это означает, что она некоторым образом усиливает защиту сессий с точки зрения переспективных атак “неквантовыми методами”.

То есть, данные криптосистемы достаточно различаются математически, чтобы даже универсальная атака на X25519 не сломала, гарантированно, и Kyber. Так что, если через десять лет вариант протокола Диффи-Хеллмана (ECDH), реализуемый X25519, научатся быстро ломать, – например, для конкретных параметров, – то записанный трафик всё равно будет защищён Kyber. Естественно, это всего лишь обращение мотивации для использования X25519 вместе с Kyber, чтобы подстраховаться на случай внезапного обнаружения неустранимых дефектов в последней. Обратная схема тоже работает, но X25519 используется дольше и, возможно, лучше изучена, так что “поломка” Kyber, конечно, выглядит более вероятным событием.

Вообще, из того, что Kyber признана криптосистемой с постквантовой стойкостью и стандартизована как ML-KEM, вовсе не следует, что доказано отсутствие квантовых алгоритмов взлома Kyber; уж тем более неверно будет утверждать, что эффективность решения базовой задачи для Kyber не отличается на обычных и квантовых компьютерах. Во-первых, квантовых компьютеров пока что нет, и непонятно, как они вообще могли бы быть устроены, чтобы ломать Kyber. Во-вторых, квантовые компьютеры сами ничего “не вычисляют” в том смысле, чтобы сравнивать с “обычными” (но всякий квантовый алгоритм можно запустить и выполнить на “обычном компьютере” – времени потребуется несравнимо больше, чем хотелось бы для достижения практической полезности). В-третьих, доказывать отсутствие алгоритмов вообще непросто. Так что в случае с постквантовой стойкостью слишком многое сводится к алгоритму Шора, в его самой теоретической интерпретации, а для ML-KEM/Kyber резонно ожидать и квантовых улучшений атак тоже.

Более того, поскольку одна задача (Kyber) не переводится быстро в другую (ECDH), то можно предположить не только появление специального квантового алгоритма для эффективного взлома Kyber, но и то, что квантовый компьютер, реализующий этот алгоритм, окажется (согласно некоторой теории) построить проще, чем не менее квантовый компьютер для алгоритма Шора. А что? Теоретические аналоговые вычислители они на то и теоретические, и аналоговые, что это сейчас только различные оценки количества “квантовых элементов” для практической атаки на RSA расходятся на несколько десятичных порядков, а на следующем шаге – могут разойтись и оценки достижимости по новым и старым алгоритмам.



Комментировать »

Использование имеющихся сейчас посквантовых криптосистем в TLS существенно увеличивает объём передаваемых данных. Например, ключ Kyber768, используемый в первом же сообщении (ClientHello), требует более килобайта (1184 байта). При этом, в TLS 1.3 есть штатная возможность передать несколько ключей для разных криптосистем в одном сообщении ClientHello, чтобы сервер выбрал подходящее. Эта возможность постоянно используется на практике.

Например, клиент может сразу передать ключи X25519 (32 байта) и P-256 (32+32 == 64 байта). То есть, две криптосистемы – и лишь 96 байтов расходуется на запись ключей (небольшое количество дополнительных байтов нужно для записи тех структур, в которых передаются ключи, но это можно не учитывать). Если передавать ключи двух постквантовых криптосистем, – скажем, с теми же Kyber768 и стандартизованным вариантом ML-KEM, – то получается уже больше двух килобайт. Это много, но если регулярно переходить от одной поствкантовой криптосистемы к другой, то становится необходимым, рутинным элементом TLS-соединений. Заметьте, что сам перечень поддерживаемых клиентом криптосистем для обмена сессионными секретами передаётся в TLS отдельно. Обычно, в этом перечне указано значительно больше криптосистем, чем передано ключей. Так, браузер может передавать семь поддерживаемых вариантов и ключи только для трёх из них (так сейчас делает Firefox). Чтобы сервер мог выбрать криптосистему, ключи от которой отсутствуют в ClientHello, в TLS 1.3 предусмотрен механизм повторного согласования – HelloRetryRequest: сервер, в этом случае, запрашивает повторное ClientHello, где будет только ключ той криптосистемы, которая выбрана (это всё можно самостоятельно увидеть на тестовом сервере TLS 1.3 при помощи современного браузера).

Подобный перебор с постквантовыми криптосистемами ещё больше увеличивает трафик, поэтому уже рассматриваются варианты того, как бы данный момент переложить на DNS. Так, в сообщении Google про ML-KEM в браузере Chrome, на которое я недавно ссылался, упоминается соответствующий черновик RFC – там предлагается публиковать в DNS сведения о предпочитаемых криптосистемах для обмена сеансовыми ключами в TLS. Конечно, тут нужно учитывать возможную защиту DNS-ответов от подмены, то есть, всё это тянет за собой не только и не столько DNSSEC (которая сама не имеет пока что ничего “постквантового”), как DNS-over-TLS/DNS-over-HTTPS.

Развитие постквантового TLS очень бурное. Впрочем, пока что не совсем понятно, для чего вообще такой рост объёмов данных. Сама по себе “постквантовая стойкость” тут ничего не объясняет, как и популярные описания в стиле “зашифруй заранее, пока нет квантового компьютера”. Однако вот уже и DNS охвачена дополнением записей. С одной стороны, размещение предварительных сведений о настройках TLS в DNS выглядит более чем разумно: запрос в систему всё равно необходим для получения IP-адреса; с другой стороны – данное направление развития как-то быстро сводится к надстраиванию новых и новых, всё больших и больших “дополнений”. (Надстраивание происходит в ускоряющемся темпе: не успели год назад внедрить в браузеры Kyber, как его уже переименовали в ML-KEM и переделали.) Эти “дополнения” вытесняют привычную работу с DNS, заменяя её на другой процесс, который следует называть “обнаружением сервисов” (Service Discovery) – дело в том, что с появлением ECH даже и IP-адреса будут извлекаться из доступной сети по-другому.



Комментировать »