Компания Cloudflare похвасталась перед пользователями, что стены из сотен ламп Фукса помогают генерировать энтропию для шифрования интернета. Хотя у них есть ещё маятники и завораживающие мобильные объекты, всё это выглядит как маркетинговый трюк. На самом деле такие решения не только бесполезны, но и уступают более простым альтернативам. Чтобы понять суть проблемы, нужно разобраться в природе случайности. Если считать случайность свойством объекта, то функция, возвращающая всегда число 4, не случайна. Но если воспринимать её как свойство ваших знаний, то незнание результата выглядит как равномерное распределение вероятности. Для шифрования важен второй подход.
Принцип «одноразового блокнота» доказывает, что случайный шум нужен только один раз. Если враг услышит результат шипения, он ничего не поймёт, пока не знает исходный ключ. Однако повторное использование того же ключа мгновенно снижает уровень защиты. Виртуальные биты работают аналогично: один подброс монеты шифрует один бит информации. Попытка зашифровать два бита одним ключом позволяет злоумышленнику отсеять варианты и получить частичную расшифровку. Шифрование $n$ битов требует ключа длиной ровно в $n$ битов, иначе информация утечёт. Теоретически это означает, что трафика Cloudflare нужно миллиарды случайных чисел, но на практике так никто не делает.
Современные протоколы используют аутентифицированное шифрование, где ключ в 256 бит позволяет зашифровать терабайты данных. Даже если кто-то подслушивает поток, ему потребуется перебрать $2^{255}$ вариантов, что физически невозможно с текущими ресурсами Вселенной. Такие алгоритмы, как ChaCha20 или AES-256-CTR, генерируют псевдослучайные последовательности, которые без знания ключа абсолютно непредсказуемы. Для генерации потока достаточно одного начального ключа и счётчика. Главное правило — никогда не дублировать буферы и не использовать один и тот же начальный вектор для разных процессов, иначе всё рухнет.
Уязвимость возникает при утечке ключа, поэтому применяется метод быстрой стерлизации: при генерации данных текущий ключ перезаписывается, сохраняя прошлые сообщения в безопасности. Важно использовать чипы с большими блоками данных: блоки в 512 бит в ChaCha20 идеальны, а в AES-128 уже возможны атаки лучше простого перебора, хоть AES-256 пока безопасен. Настоящие аппаратные генераторы случайных чисел не обязательно надёжнее криптографических псевдослучайных генераторов (CSPRNG). Выход шума через криптографический хэш не даёт значимого преимущества. Лучше использовать простой CSPRNG с быстрой стерilizацией, чем пытаться настроить физический процесс с идеальной равномерностью. Cloudflare стоит убрать свои лампы, так как они усложняют сеть и не приносят пользы. Серверы должны генерировать энтропию самостоятельно. Если же лампы оставить ради декора, то серверам нельзя подключаться к ним через локальную сеть.