Релиз библиотеки GnuTLS 3.6.0

Представлен значительный выпуск 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

© OpenNet