Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
61
Добавлен:
06.06.2015
Размер:
946.18 Кб
Скачать

16.10 Gifford

Дэвид Джиффорд (David Gifford) изобрел потоковый шифр и использовал его для шифрования сводок нов о-стей в районе Бостона с 1984 по 1988 год [608, 607, 609]. Алгоритм использует единственный 8-байтовый ре­гистр: bo, b\, . . . , b-i. Ключом является начальное состояние регистра. Алгоритм работает в режиме OFB, от­крытый текст абсолютно не влияет на работу алгоритма. (См. -1-й).

Сдвиг

вправо на

1 Бит "с

приклеива

нием

зво \

/13двиг влево на 1 бит )

Сброс

Рис. 16-17. Gifford.

Для генерации байта ключа kt объединим Ьо и Ъ\, а также объединим ла, получая 32-битовое число. Третьим слева байтом и будет kt.

и ^- Перемножим полученные чис-

Для обновления регистра возьмем Ъ\ и сдвинем вправо "с приклеиванием" на 1 бит следующим образом: крайний левый бит одновременно и сдвигается, и остается на месте . Возьмем bj и сдвинем его на один бит вле­во, в крайней правой позиции должен появиться 0. Выполним XOR измененного Ь\, измененного bj и Ь$. Сдви­нем первоначальный байт регистра на 1 бит вправо и поместим этот байт в крайнюю левую позицию .

В течение всего времени использования этот алгоритм оставался безопасным, но он был взломан в 1994 году [287]. Оказалось, что многочлен обратной связи не был примитивным и, таким образом, мог быть вскрыт .

16.11 Алгоритм м

Это название дано Кнутом [863]. Алгоритм представляет собой способ объединить несколько псевдослучай­ных потоков, увеличивая их безопасность. Выход одного генератора используется для выбора отстающего в ы-хода другого генератора [996, 1003]. На языке С:

tdefine ARR_SIZE (8192) /* например - чем больше, тем лучше */ static unsigned char delay[ ARRSIZE ] ; unsigned char prngA( void ) long prngB( void ) ; void init_algM( void ) {

long i ;

for ( i = 0 ; i < ARR_SIZE ; i++ )

delay [i] = prngAO ; } /* lnlt_algM */ unsigned char alglM( void ) {

long j,v ;

j = prngBO % ARR_SIZE ; /* получить индекс delay[]*/

v = delay[j] ; /* получить возвращаемое значение */

delay[j] = prngAO ; /* заменить его */

return ( v ) ;

} /* algM */

Смысл состоит в том, что если prngA - действительно случайно, невозможно ничего узнать о prngB (и, сле­довательно, невозможно выполнить криптоанализ). Если prngA имеет такой вид, что его криптоанализ может быть выполнен только, если его выход доступен в свою очередь (т.е., только если сначала был выполнен крип-

тоанализ prngB), а в противном случае оно по сути действительно случайно, то эта комбинация должна быть безопасной.

16.12 Pkzip

Алгоритм шифрования, встроенный в программу сжатия данных PKZIP, был разработан Роджером Шлафлы (Roger Schlafly). Это потоковый шифр, шифрующий данные побайтно. По крайней мере этот алгоритм исполь­зуется в версии 2.04g. Я не могу ничего сказать о более поздних версиях, но если не было сделано никаких з а-явлений об обратном, можно считать с большой вероятностью, что алгоритм не изменился . Алгоритм использу­ет три 32-битовых переменных, инициализированных следующим образом :

Ко = 305419896

^1 = 591751049

К2 = 878082192

Используется 8-битовый ключ К3, полученный из К2. Вот этот алгоритм (в стандартной нотации С):

Q=Pi*K3

Ко= сгс32 о, Р,)

Ki= Ki+ (Ko & OxOOOOOOff)

Ki=Ki* 134775813+1

K2 = crc32 (K2, Ki » 24)

К3 = ((К2\2)*((К2\2Г1))»%

Функция crc32 берет свое предыдущее значение и байт, выполняет их XOR и вьгаисляет следующее значение с помощью многочлена CRC, определенного 0xedb88320. На практике 256-элементная таблица может быть рас­считана заранее, и вычисление сгс32 превращается в:

сгс32 (а, Ь) = (а » 8) л table [(a & Oxfi) ® Ъ ]

Таблица рассчитывается в соответствии с первоначальным определением сгс32:

table [i] = crc32 (i, 0)

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

Безопасность PKZIP

К сожалению она не слишком велика. Для вскрытия нужно от 40 до 2000 байтов известного открытого те к-ста, временная сложность вскрытия составит около 227 [166]. На вашем персональном компьютере это можно сделать за несколько часов. Если в сжатом файле используются какие-нибудь стандартные заголовки, получ е-ние известного открытого текста не представляет собой проблемы . Не используйте встроенное в PKZIP шифро­вание.

Соседние файлы в папке Брюс Шнайер Прикладная криптография