Энтропия в криптографии
Коротко: Энтропия измеряет, насколько непредсказуемо значение. Надёжным ключам нужна энтропия, то есть настоящая случайность, которую злоумышленник не может угадать.
Подробнее: Измеряется в битах: значение с n битами энтропии можно угадать лишь примерно за 2ⁿ попыток. «128-битный ключ» от предсказуемого генератора случайных чисел на деле содержит куда меньше.
Подробности
- Источники: Тайминги нажатий клавиш и движений мыши, события диска и сети, аппаратный шум, команды CPU вроде
RDRAND. - Операционная система: Ядро собирает энтропию в пул и выдаёт из него надёжные случайные числа через
/dev/urandomиgetrandom(). Современные ядра Linux умеют это и вскоре после загрузки. - Проблемные случаи: У виртуальных машин и маленьких устройств сразу после загрузки мало энтропии. Клонированные образы ВМ выдают одинаковые случайные числа.
- Пароли: Пароль из 4 случайных слов из 7776 (Diceware) содержит около 51 бита, придуманный шаблон — гораздо меньше.
- Правило: Для ключей использовать только криптографически стойкие функции платформы (
secrets,crypto.getRandomValues), никогда неrand()и неMath.random().
См. также: случайные числа: псевдослучайные и истинно случайные