Назад | Перейти на главную страницу

Может ли SSL / TLS истощить пул энтропии моего сервера?

Я попытался немного понять, как работает SSL / TLS, и взглянул на Рукопожатие TLS в TLS 1.2 и TLS 1.3, а где случайные числа с сервера вступите в игру там. Поскольку каждый запрос TLS будет иметь стоимость с точки зрения энтропии, потому что необходимо получить криптографические ключи, я задавался вопросом, почему у серверов не заканчивается энтропия быстро.

Сначала я взглянул на TLS 1.2 с обменом ключами RSA:
Согласно Стандарт TLS 1.2 Раздел 6 server random из которого выводится мастер-секрет, в большинстве случаев 32 байта длинный. Я ожидал, что сервер берет 32 байта случайных данных из /dev/random.

Затем я взглянул на TLS 1.3 с эфемерным обменом ключами Диффи-Хеллмана:
И клиент, и сервер создают свой собственный частный набор Параметры ECDHE. После этого они делают свои вещи Диффи-Хеллмана и получают общий секрет. Этот общий секрет используется для получения симметричного ключа для шифрования и ключа для вычисления HMAC для проверки целостности сообщения. Следовательно, я бы предположил, что качество моего шифрования зависит от качества параметров ECDHE. Если я использую кривую NIST P-256, мне нужно как минимум 128-битное семя в соответствии с этот ответ.

В заключение:
В моем примере TLS 1.2 серверу необходимо генерировать 256 бит энтропии, а в примере 1.3 128 бит энтропии. Предполагаю, что нужные биты взяты из /dev/random. Максимальный размер моего пула энтропии 4096 немного это cat /proc/sys/kernel/random/poolsize возвращается, кажется чрезвычайно маленьким по сравнению с количеством битов, которое мне нужно для одного рукопожатия TLS. Если мои расчеты не завершены, я бы полностью исчерпал свой пул энтропии всего за 16 запросов на TLS 1.2, предполагая, что пул энтропии не пополняется быстро.

Вопросы:

  1. У моего сервера закончится энтропия, если он получит много запросов TLS? Или он может каким-то образом пополнить пул энтропии из запроса TLS, возможно, используя время, необходимое пакетам для перемещения туда и обратно, или что-то в этом роде.
  2. Допустим, я хотел бы немного сэкономить энтропию. Будет ли TLS 1.3 с 256-битным ECC иметь меньшую стоимость с точки зрения энтропии по сравнению с TLS 1.2? В моем примере выше я обнаружил, что стоимость энтропии для TLS 1.2 составляет 256 бит, а для TLS 1.3 - только 128 бит.
  3. Если кто-то присылает много Client Hello сообщения без установления реального соединения, мог ли он таким образом исчерпать мой пул энтропии? Я бы предположил, что сингл Client Hello не дает мне много энтропии, но создает большую нагрузку на сервер, потому что он должен отвечать Server Hello содержащий 32-байтовые случайные данные в TLS 1.2.

Предполагаю, что нужные биты взяты из / dev / random.

Не надо. Блокировка применяется, когда существует риск, что система вообще имеет нулевую энтропию. Возможно, для генерации ключа хоста ssh при первой загрузке. Не для TLS при нормальной работе, нет смысла вызывать отказ в обслуживании, потому что ему не хватает случайных битов.

Используйте (не блокирующие) криптографически безопасные генераторы псевдослучайных чисел. Если вы хотите использовать исходный код ядра, рассмотрите возможность использования getrandom () или / dev / urandom в Linux или BCryptGenRandom в Windows. Они используют те же крипто-примитивы, которые заставляют работать TLS и другие алгоритмы; если они не могут генерировать огромное количество явно случайных битов из небольшого числа, шифрование взламывается.

Хотя, вероятно, библиотека TLS будет использовать свой собственный CSPRNG с небольшим начальным значением из исходного кода ядра. Простое сложение случайных битов в протоколе не указывает, сколько считывается из пула энтропии системы.

Что касается ОС, обязательно укажите, какой дистрибутив вы используете. Linux, агрессивно блокирующий / dev / random, нетипичен. Большинство BSD обрабатывают его так же, как / dev / urandom.

Краткий ответ: используйте / dev / urandom. Страшность, требующая блокировки / dev / random в Linux суеверие. Анализ десятков ТБ случайных битов показывает, что они такие же.