#crypto #tip
GnuTLS с ML-KEM
Как-то не правильно, что у меня GnuTLS был без поддержки пост-квантовой
криптографии. Вообще у меня большая часть HTTP запросов проходит через
мой tofuproxy, который на Go, где есть ML-KEM поддержка. Но когда руками
вызываю curl/wget, то оно идёт не через прокси, соответственно и без
PQ/T TLS.
В новых версиях GnuTLS видел упоминание ML-KEM. В NEWS файле увидел
упоминание необходимости использования liboqs. Скачать liboqs оказалось
приключением. По сути -- дома я это сделать не смог. Единственная ссылка
для скачивания это API GitHub-а на tarball-а. И хоть скорость скачивания
и под полмегабайта/сек, но после 50-ти мегабайт соединение GitHub-ом
рвётся. А сам файл занимает ~54MiB. На работе скачался без проблем.
Похоже, что timeout-ы на соединения для API у них довольно низкие, и
такие здоровые tarball-ы являются проблемой. Но собирается без проблем.
Вот только позже увидел, что GnuTLS использует leancrypto библиотеку,
избавившись от liboqs зависимости в принципе. Про неё прежде не слышал.
Сразу не понравилась. В addon/generate_header.sh написан /bin/bash, но
скрипт вообще ничего от него не использует. Уроды. Дальше упало на
сборке x509/pkcs7 вещей, в которых неизвестно что за ENODATA константа.
https://patchwork.kernel.org/project/xen-devel/patch/1461939680-32574-2-git-send-email-roger.pau@citrix.com/
пишут, что она давно obsolete и в FreeBSD и OpenBSD её нет (поэтому и
падает у меня). Я подумал, что это GNU/Linux-specific код. "Решил"
проблему просто отключением сборки этих модулей, без которых GnuTLS
работает.
GnuTLS обновлённой версии не стал собираться, ибо в коде сгенерированном
макросами вообще синтаксическая невалидность. Патчем убираю на FreeBSD
этот код. Хотя наверняка особенность в Clang-е, а не ОС, конечно же.
Но тоже собралось. Добавляя +GROUP-X25519-MLKEM768 к списку алгоритмов,
гибридный TLS работает. Во время сборки GnuTLS можно указать строчку
приоритетов алгоритмов по умолчанию, чтобы оно по умолчанию и
применялось для всего.
NORMAL:-VERS-TLS1.0:-VERS-TLS1.1:+GROUP-X25519-MLKEM768
Вот только cURL выставляет свои собственные приоритеты алгоритмов.
Благо, тоже легко глобально переопределить:
$ cat >~/.curlrc <<EOF
--ciphers NORMAL:-VERS-TLS1.0:-VERS-TLS1.1:+GROUP-X25519-MLKEM768
EOF
[оставить комментарий]