Вход/Регистрация
Разработка приложений в среде Linux. Второе издание
вернуться

Троан Эрик В.

Шрифт:

Обратите внимание на то, что при отладке вам потребуется сохранить начальное значение, с которым была вызвана функция

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

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

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

• Убедить тех программистов, которые не являются специалистами в шифровании, оставить работу в этой области экспертам.

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

Если вы недостаточно хорошо знакомы с криптографией, однако вынуждены ее применять, мы рекомендуем [30] в качестве превосходного вводного руководства по этой теме.

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

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

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

Поскольку компьютеры не оснащены подобными устройствами, в системе Linux предлагается выход из ситуации. Тед Тсо (Ted Ts'o) написал код, который измеряет временные диаграммы внешних событий (щелчок мыши, нажатие кнопки клавиатуры и так далее), извлекает из них информацию и сохраняет ее в пуле энтропии. Некоторые компоненты человеческого (и другого внешнего) взаимодействия с компьютером являются в высшей степени случайными. Код, заполняющий пул энтропии, старается некоторым образом охарактеризовать величину добавленной энтропии, что позволяет программисту оценить степень неупорядоченности при генерировании случайной информации. В последнее время во многих компьютерах предусматриваются аппаратные источники криптографически случайных данных. В Linux такие случайные данные подаются в системном пуле энтропии, поэтому все программы Linux могут применять один и тот же интерфейс в зависимости от оборудования, которое они используют.

Если программисту требуются случайные числа, основанные на непредсказуемых событиях, он может воспользоваться пулом энтропии с помощью одного из двух похожих устройств:

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

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

• Не используйте ни

/dev/random
, ни
/dev/urandom
для тех данных, которые потребуется продублировать. Они также являются крайне неподходящими источниками данных для методов Монте-Карло. Даже последовательность 1, 2, …, n–1, n для них более приемлема; ее, по крайней мере, можно воспроизвести.

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

Исходный код драйвера случайных чисел,

drivers/char/random.с
, включает в себя важную информацию о технических деталях. Если вы планируете создание криптографической программы на основе данных, предоставляемых одним из описанных интерфейсов, настоятельно рекомендуем сначала изучить всю документацию.

Глава 20

Программирование виртуальных консолей

Интерфейс программирования виртуальных консолей Linux основан на интерфейсе, который предоставляют некоторые версии UNIX. Это не полная реализация (хотя ее достаточно для совместимости исходного кода почти со всеми программами), но в ней также предусмотрено несколько важных дополнений.

Система Linux может переключать несколько сеансов работы с терминалом на одном экране и одной клавиатуре. Специальные клавиатурные последовательности позволяют пользователю определять, какой сеанс отображается в данный момент. Каждый из этих сеансов входа в систему имеет собственные установки клавиатуры (подобные тем, которые работают при нажатии или отключении клавиши <Caps Lock>), установки терминала (размеры, графический режим экрана, шрифты и так далее), компоненты устройств (такие как

/dev/tty1
,
/dev/vcs1
и
/dev/vcsa1
).

  • Читать дальше
  • 1
  • ...
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: