![]() Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
![]() Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
![]() |
Псевдослучайные числа
При генерировании псевдослучайных чисел используется 24-байтовое начальное значение и создается 16-байтовый сеансовый ключ, 8-байтовый вектор инициализации и новое начальное значение, которые предполагается использовать для получения следующего псевдослучайного числа. Алгоритм строится на основе алгоритме Х12.17, но использует для шифрования CAST-128 вместо "тройного" DES. Алгоритм задействует следующие структуры данных. 1. Ввод. • randseed.bin (24 октета). Если этот файл пуст, он заполняется 24 истинно случайными октетами. • Сообщение. Сеансовый ключ и IV, которые используются для шифрования сообщения, являются функциями этого сообщения. Это вносит дополнительную случайность для ключа и IV, но если противник уже знает содержимое сообщения в виде открытого текста, ему нет никакой необходимости выяснять значение сеансового ключа. 2. Вывод. • К (24 октета). Первые 16 октетов, К[0..15], содержат сеансовый ключ, а последние восемь октетов, К[16.. 23], включают значение IV. • randseed.bin (24 октета). В этом файле размещается новое начальное значение для генератора псевдослучайных чисел. 3. Внутренние структуры данных. • dtbuf (8 октетов). Первые четыре октета, dtbuf [0.. 3], инициализиру-ются с помощью текущего значения даты-времени. Этот буфер эквивалентен переменной DT из алгоритма Х12.17. • rkey (16 октетов). Ключ шифрования CAST-128, действующий на всех стадиях алгоритма. • rseed (8 октетов). Эквивалент переменной V, из алгоритма XI2.17. • rbuf (8 октетов). Псевдослучайное число, генерируемое алгоритмом. Это буфер эквивалентен переменной R, из алгоритма Х12.17. • К' (24 октета). Временный буфер для нового значения randseed.bin. Алгоритм состоит из девяти шагов. Первый и последний шаги призваны уменьшить долю файла randseed.bin, которая может быть перехвачена противником. Остальные шаги, по существу, эквивалентны трем итерациям алгоритма Х12.17 и иллюстрируются на рис. 10.11.
Рисунок 10.11 - Генерирование сеансового ключа и вектора инициализации PGP (шаги G2-G8 алгоритма)
Следующее пошаговое описание алгоритма соответствует описанию, предложенному Стефаном Ньюхаусом (Stephan Neuhaus). 1. [Дооперационная обработка начального значения.] • randseed.bin копируется в К[0.. 23]. • Хэш-код сообщения (он уже имеется, если сообщение подписано, иначе используется 4К первых октетов сообщения), служит в качестве ключа, вводится нулевое значение IV, и К шифруется в режиме CFB; результат сохраняется в К. 2. [Установка начального значения.] • Для dtbuf[O..3] устанавливается значение, равное 32-битовому значению текущего локального времени. Значение dtbuf[4..7] обнуляется. Копируется rkey «- К [0.. 15]. Копируется rseed <r- К [16.. 23]. • 64-битовое значение dtbuf шифруется с использованием 128-битового значения rkey в режиме ЕСВ; результат сохраняется в dtbuf. 3. [Подготовка к генерированию случайных октетов.] Устанавливается rcount <— О и к <— 23. Циклическое повторение шагов G4-G7 будет выполнено 24 раза (для к = 23... 0), и при каждом выполнении будет получен случайный октет, помещаемый в К. Переменная rcount представляет число еще неиспользованных случайных октетов в rbuf. Ее значение трижды уменьшается от 8 до 0, чтобы в результате было получено 24 октета. 4. [Доступны ли еще байты?] Еслиrcount = 0,следует перейти кшагу G5, в противном случае — к шагу G7. Шаги G5 и G6 представляют однократное выполнение алгоритма Х12.17, порождающего новый набор из восьми случайных октетов. 5. [Генерирование новых случайных октетов.] • rseed <— rseed ⊕ dtbuf. • rbuf <- Erkey, [rseed] в режиме ЕСВ. 6. [Генерирование следующего начального значения.] • rseed «— rseed ⊕ dtbuf. • rbuf <r- Erkey[rseed] в режиме ЕСВ. • Устанавливается rcount <— 8. 7. [Перенос по одному байту из rbuf в К.] • Устанавливается rcount <— rcount -1. • Генерируется истинно случайный байт b и устанавливается К [к] <- rbuf[rcount]0b. 8. [Готово?] Если к = 0,следует перейти к шагуG9,в противном случаеустановить к <- к -1 и перейти к шагу G4. 9. [Послеоперационная обработка начального значения и возвращение результата.] • Генерируется еще 24 байта методом, представленным шагами G4-G7, но связывания с помощью операции XOR со случайным значением в G7 не производится. Результат помещается в буфер К'. • К' шифруется в режиме CFB с ключом К [0.. 15] и вектором инициа-лизации К [16.. 23]; результат сохраняется в randseed.bin. • Возвращается К. Определить сеансовый ключ из 24 новых октетов, генерируемых на шаге G9a, должно быть невозможно. Однако чтобы гарантировать, что сохраненный файл randseed.bin не даст информации о последнем сеансовом ключе, шифруется 24 новых октета и результат сохраняется как новое начальное значение для генератора псевдослучайных чисел. Этот тщательно разработанный алгоритм должен порождать криптографически надежные псевдослучайные числа. Анализ алгоритма показывает, что в нем нет внутренних зависимостей между битами сеансового ключа и что последовательные сеансовые ключи тоже являются независимыми. Date: 2015-06-06; view: 720; Нарушение авторских прав |