Представлен значительный выпуск GnuTLS 3.6.0, свободной библиотеки с реализацией протоколов SSL, TLS и DTLS, алгоритмов шифрования (включая AES и Camellia) и функций для работы с различными типами сертификатов и ключей. Ветка 3.6.x подготовлена после шестнадцати месяцев разработки в Git-репозитории и помечена как stable-next, что сигнализирует о достижении качества стабильной ветки, но пока неготовности заменить текущую стабильную ветку 3.5.x, поддержка которой будет продолжена.
Основные новшества:
- Генератор псевдослучайных чисел избавлен от глобальной блокировки, мешающей эффективному применению в многопоточных приложениях (производительность теперь масштабируется от числа CPU).
- Генератор псевдослучайных чисел переведён на использование потокового шифра CHACHA, который по сравнению с ранее применявшимся алгоритмом Salsa20 позволяет сократить размер загружаемого в память кода и унифицировать применение основных методов шифрования (CHACHA также используется в TLS и других примитивах GnuTLS). Изменение не касается альтернативного генератора псевдослучайных чисел AES-DRBG, который применяется в режиме FIPS140-2;
- Добавлена поддержка ключей RSA-PSS, а также создания и верификации цифровых подписей RSA-PSS для сертификатов и согласования соединения в TLS 1.2;
- В сертификатах (PKCS#8, PKCS#7, PKIX) и TLS-ключах появилась возможность использования цифровой подписи с открытым ключом Ed25519, разработанной Дэниэлом Бернштейном и отличающейся очень высокой скоростью верификации и создания подписей при более высоким уровнем безопасности, чем ECDSA и DSA. Ed25519 не подвержен проблемам с коллизиями в хэшах, не чувствителен к атакам через определение скорости работы кэша (cache-timing attacks) и атакам по сторонним каналам (side-channel attacks);
- В TLS по умолчанию активирован обмен ключами на основе алгоритма X25519 (RFC 7748);
- Добавлена поддержка протокола согласования групп (GROUP-ALL, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096,
GROUP-FFDHE8192) на основе эллиптических кривых ECDH (Elliptic Curve Diffie-Hellmann), позволяющего повысить минимизировать ошибки из-за применения не безопсных значений параметров DH (параметры теперь не обязательно жестко определять на сервере);
- Реализованы дополнительные проверки корректности оформления сертификатов при их импорте. Например, теперь не принимаются сертификаты с дробными значениями секунд в полях со временем, сертификаты X.509v1 с уникальным набором идентификаторов, не соответствующих RFC5280, и сертификаты с некорректным номером версии;
- Добавлена функция gnutls_x509_crt_set_flags() для выставления произвольных флагов в структуре crt. В текущем выпуске поддерживается только флаг GNUTLS_X509_CRT_FLAG_IGNORE_SANITY для отключения проверок корректности сертификата при импорте;
- Запрещена обработка сертификатов PKIX с неизвестными критическими расширениями, при попытке использования подобных сертификатов будет выводиться ошибка GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS. Для отключения данного поведения следует указать флаг GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS при вызове функций верификации;
- Запрещена генерация сертификатов с некорректным номером версии или серийным номером, заданными через вызовы gnutls_x509_crt_set_version() и
gnutls_x509_crt_set_serial();
- Обеспечена блокировка выполнения функций gnutls_record_send() и gnutls_record_recv() на стадиях до завершения согласования соединения;
- Добавлена поддержка файлов PKCS#12 хэшем пароля без соли, а также файлов PKCS#12 с хэшами SHA384 и SHA512 в качестве MAC;
- Из списка предлагаемых по умолчанию шифров исключен 3DES-CBC, для его применения следует явно указать "NORMAL:+3DES-CBC";
- Хэш SHA1 помечен как небезопасный для цифровых подписей, процесс верификации сертификатов с SHA1 теперь завершается неудачей, если GnuTLS не собран с опцией "--enable-sha1-support" или в настройках явно не разрешено использование небезопасных алгоритмов;
- Алгоритм RIPEMD160 помечен небезопасный для цифровых подписей;
- По умолчанию на стадии согласования соединения TLS отключена поддержка эллиптических кривых SECP192R1 и SECP224R1, вместо которых рекомендуется использовать x25519 и которые объявлены устаревшими в спецификации TLS 1.3;
- Удалена поддержка DEFLATE и других методов сжатия;
- Удалена поддержка аутентификации OpenPGP, а вместо связанных с openpgp функций поставлены заглушки;
- Удалена поддержка библиотеки libidn (IDNA2003). Допускается сборка gnutls только с libidn2 (IDNA2008);
- Расширены возможности утилиты certtool: добавлена поддержка указания URL PKCS#11 в качестве аргумента опции '--load-ca-certificate', опция '--load-crl' теперь может применяться для генерации файлов PKCS#12, добавлена возможность генерации и обработки ключей и сертификатов на базе RSA-PSS и
Ed25519. Объявлено устаревшим использование параметров "--rsa", "--dsa" и "--ecdsa" совмесно с опцией "--generate-privkey" (следует использовать "--key-type");
- В утилите p11tool опции "--generate-rsa", "--generate-ecc" и "--generate-dsa" заменены на универсальную опцию "--generate-privkey";
- В psktool по умолчанию обеспечена генерация 256-разрядных ключей ;
- В gnutls-server размер буфера запросов увеличен до 16 Кб и добавлены опции "--alpn" и "--alpn-fatal" для тестирования согласования соединений ALPN;
- В набор тестов, применяемых в системе непрерывной интеграции, включен пакет tlsfuzzer, который позволит оперативно выявлять отклонения в поведении реализации TLS между релизами;
- Добавлены новые элементы API:
- gnutls_encode_rs_value
- gnutls_decode_rs_value
- gnutls_base64_encode2
- gnutls_base64_decode2
- gnutls_x509_crt_set_flags
- gnutls_x509_crt_check_ip
- gnutls_x509_ext_import_inhibit_anypolicy
- gnutls_x509_ext_export_inhibit_anypolicy
- gnutls_x509_crt_get_inhibit_anypolicy
- gnutls_x509_crt_set_inhibit_anypolicy
- gnutls_pubkey_export_rsa_raw2
- gnutls_pubkey_export_dsa_raw2
- gnutls_pubkey_export_ecc_raw2
- gnutls_privkey_export_rsa_raw2
- gnutls_privkey_export_dsa_raw2
- gnutls_privkey_export_ecc_raw2
- gnutls_x509_spki_init
- gnutls_x509_spki_deinit
- gnutls_x509_spki_get_pk_algorithm
- gnutls_x509_spki_set_pk_algorithm
- gnutls_x509_spki_get_digest_algorithm
- gnutls_x509_spki_set_digest_algorithm
- gnutls_x509_spki_get_salt_size
- gnutls_x509_spki_set_salt_size
- gnutls_x509_crt_set_spki
- gnutls_x509_crt_get_spki
- gnutls_x509_privkey_get_spki
- gnutls_x509_privkey_set_spki
- gnutls_x509_crq_get_spki
- gnutls_x509_crq_set_spki
- gnutls_pubkey_set_spki
- gnutls_pubkey_get_spki
- gnutls_privkey_set_spki
- gnutls_privkey_get_spki
- gnutls_privkey_import_ext4
- GNUTLS_EXPORT_FLAG_NO_LZ
- GNUTLS_DT_IP_ADDRESS
- GNUTLS_X509_CRT_FLAG_IGNORE_SANITY
- GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS
- GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1
- GNUTLS_VERIFY_DO_NOT_ALLOW_IP_MATCHES
- GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS
- GNUTLS_SFLAGS_RFC7919
|