Генераторы случайных чисел

Генераторы случайных чисел Криптография

Случайные числа требуются в криптографии очень часто. Симметричный ключ шифрования должен выбираться случайным образом. При генерации ключей для асимметричной криптосистемы необходимо иметь достаточно большой объем случайных данных. Корректная реализация асимметричных криптоалгоритмов, например RSA, требует добавлять к каждой порции открытого текста несколько случайных байт.

Читайте: Как заработать на инвестициях в искусственный интеллект? Краудфандинг Daisy от компании EndoTech. Обзор и отзывы о смарт-контракте

Однако в компьютере, в общем случае, нет хорошего источника случайности, способного выдавать значительные объемы истинно случайных данных. Поэтому в криптографии находят широкое применение генераторы псевдослучайных чисел.

Псевдослучайные данные совсем не то же самое, что истинно случайные. Генератор псевдослучайных чисел использует детерминированный ачгоритм и выдает последовательность значений, зависящую от начального значения (seed value), загруженного в генератор. Зная начальное значение, легко повторить последовательность, выдаваемую генератором.

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

— последовательность, выдаваемая алгоритмом генерации псевдослучайных чисел, должна иметь как можно больший период;
— зная любой фрагмент последовательности, выдаваемой генератором, злоумышленник не должен иметь эффективной возможности найти начальное значение, загруженное в генератор;
— зная любой фрагмент последовательности, выдаваемой генератором, злоумышленник не должен иметь возможности получить достоверную информацию о предыдущих или последующих элементах последовательности.

Наверное, еще раз стоит повторить, что привычные генераторы псевдослучайных чисел, реализованные в стандартных библиотеках популярных языков программирования, не пригодны для криптографии.

Для того чтобы использовать криптографические генераторы псевдослучайных чисел, их необходимо проинициализировать истинно случайными данными, полученными из физических источников. Популярным способом сбора случайных данных является измерение задержек между нажатиями клавиш на клавиатуре или анализ перемещения указателя мыши, выполняемого пользователем. Однако оба этих способа имеют два серьезных недостатка.

Первый недостаток заключается в том, что невозможно точно сказать, сколько бит действительно случайных данных может быть получено из одной пары нажатий или одного движения мышью. У людей с профессиональными навыками машинописи, как правило, очень высокая ритмичность нажатия клавиш. А случайные данные должны получаться независимо от того, кто сидит за клавиатурой. Да и щелчки при нажатии кнопок могут быть легко записаны злоумышленником на магнитофон, а потом воспроизведены для повторения задержек. С мышью тоже не все понятно — данные, которые получает программа, проходят много инстанций. Мышь передает информацию о перемещении с определенной периодичностью, а не в тот момент, когда датчик перемещения получает информацию о том, что мышь была сдвинута. А драйвер мыши извещает программу о состоянии мыши со своей дискретностью. Все это приводит к тому, что программа получает далеко не полную информацию о том, что произошло с мышью, и основная часть случайных данных, на которые рассчитывала программа, может при определенной комбинации мыши, драйвера и компьютера оказаться совсем не случайной.

А второй недостаток связан с необходимостью присутствия человека для получения случайных данных, что является большой проблемой для серверных приложений.

В качестве претендентов на действительно случайные данные можно рассматривать значение хэша от содержимого экрана и от всех данных, прочитанных с диска с момента загрузки операционной системы. Однако очевидно, что пока не запущено ни одно интерактивное приложение, состояние экрана можно попытаться предугадать, а сразу после получения порции случайных данных повторный запрос может вернуть тот же самый результат.

Иногда в распоряжении программиста оказывается аппаратное устройство, являющееся, согласно прилагаемой документации, генератором истинно случайных чисел. Наличие такого источника случайности очень полезно во многих ситуациях, но таит в себе опасность.
Проблема в том, что по выходу генератора нельзя однозначно определить, действительно ли выдаваемая последовательность случайна. Можно создать такой генератор псевдослучайных чисел, выход которого успешно пройдет все известные статистические тесты на случайность. И все же, выход генератора на самом деле будет определяться детерминированным алгоритмом.

Если злоумышленнику известны детали алгоритма, используемого в аппаратном генераторе случайных чисел (являющихся, на самом деле, псевдослучайными), то злоумышленник может предсказать выход генератора, а значит, и ключи шифрования, если они выбираются по генератору.
Поэтому использовать аппаратные генераторы стоить лишь в тех случаях, когда генератор создан самостоятельно или разработан стороной, которой можно безгранично доверять, и неизменность конструкции подтверждена экспертизой.

Оцените статью
Добавить комментарий