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

Петров А.А. Комп без-ть

.pdf
Скачиваний:
39
Добавлен:
28.03.2016
Размер:
16.03 Mб
Скачать

Хэш-функции

81

е = б

 

с! = с

 

с = Ь < < 30

 

а - Т Е М Р }, где 1-

1 ч- 4

Завершается цикл суммированием А + а, В + Ъ, С + с, Э + б, Е + е и кон­ катенацией А, В, С, Б и Е.

ГОСТ Р 34.11-94

Этот стандарт разработан для использования совместно со стандартом на цифровую подпись (ГО С Т Р 34.10-94). Основу данной хэш-функции со­ ставляет алгоритм блочного шифрования ГО С Т 28147-89, который опери­ рует с блоками длиной 64 бита и длиной ключа 256 бит, соответственно длина выходной последовательности хэш-функции составляет 256 бит.

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

Н , - Ь ( М , Н и ),

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

Процедура вычисления функции И состоит из последовательности шагов:

шаг 1:

-инициализируются переменные Е (текущее значение длины обрабо­ танной части входной последовательности) и I (значение конт­ рольной суммы);

-если длина входной необработанной последовательности больше 256 (|М| > 256), алгоритм переходит к шагу 3, в противном случае производятся следующие действия:

шаг 2:

-

Ь - (Ь + |М|) то й 256;

-

I в (I + (0 256‘|м| |М ) т о б 256 0256',м|- последовательность битовых

 

нулей длиной 256 - |М|, |- конкатенация битовых строк. Таким об­

 

разом, на этом этапе вычисляется текущее значение контрольной

 

суммы;

-Н = % ((0 25(5~1м11|М), Н ) - вычисляется значение функции хэширова­ ния % от аргументов, представляющих собой хэшируемый блок и на­ чальный вектор хэширования (Н );

-Н - % а, Н );

82

Общие сведения по классической криптографии

-Н = %(1, Н ) - результат данного вычисления и является окончатель­ ным результатом хэш-функции;

-конец работы алгоритма.

Из входной последовательности выбирается очередной блок длиной 256 бит (М = МО |М 1) и производятся следующие действия:

• шаг 3:

-

Н -

х(М 0, Н);

-

Ь = (Ь

+ 256) то й 256;

-

I -

(I +

М 0) т о й 256;

-М = М 0;

-переход к шагу 2.

Вычисление функции х состоит из следующих этапов:

генерация четырех секретных ключей длиной 256 бит;

зашифрование четырех подблоков (составляющие начальный вектор

хэширования Н ) по 64 бита каждый в соответствии с алгоритмом ГО С Т 28147-89 в режиме простой замены;

• применение перемешивающей функции к результату зашифрования.

Генерация секретных ключей

При генерации секретных ключей используются данные Н и М (входная последовательность, представленная в двоичном виде) и инициализируют­ ся следующие константы: С2= С4 = О 256 и С3 = I 8 О8116 О24116 О8 (О818) 2 18 О8 X х (О8 18) 4 (1808) 4, где ак - двоичная последовательность из к бинарных зна­ ков а - {0,1}. После чего выполняется алгоритм:

1 = 1 11 = Н У = М \У = 11Ф V

к 4= р о у )

РОК. 1 = 2 1:о 4 {II = А(11) © С,; V = А (А (У )) АУ = 11© V

К ; - Р (\ У )}

Функция Р представляет собой перестановку 5 (1 + 1 + 4 (к - 1)) = 81 + к,

1 = О Р.З, к = 1 - ^ 8 над подблоками длиной 8 бит исходной двоичной после­ довательности длиной 256 бит. Таким образом, последовательность х32 [... | Х{ преобразуется в х3(32) ||... |х5(1). Функцией А (Х ) обозначают следующее

Хэш-функции

83

преобразование последовательности, разделенной иа 4 подблока по 64 бита каждый: А (Х ) = (х! Ф х2) |х4 1|х3 1|х2.

Шифрующее преобразование

Начальный вектор Н разбивается на 4 подблока Ь1 длиной 64 бита, и каждый подблок зашифровывается на своем ключе К ь то есть 3 ; = Ек; (ф ) ( 1= 1,2,3,4). В результате получается последовательность 5 = $1 1|з2 1|з3 1|з4.

Перемешивающая функция

Сначала исходная последовательность разбивается иа шестнадцать 16-бит- ных подблоков ц 1 = 1 -г 16 и при помощи регистра сдвига с обратной свя­ зью преобразуется в последовательность следующего вида:

Щ 0 П2 0 П3 0 114 ® П 13 ® Ц 16 ||П 1б || ... |П 2.

Если обозначить данную функцию через ср, то исходная функция хэши­ рования - %(М,Н) = ср61 ((И ® <р(М ® ф 12 (3 ))), где степень функции <р обо­ значает, сколько раз она применяется к битовой последовательности.

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

1.5,3. Требования к хэш-функциям

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

алгоритм должен обладать высокой скоростью обработки информации (это особенно актуально для банковских приложений, где требуется особая оперативность обработки информации);

хэш-функция должна быть стойкой против атаки методом «грубой силы»;

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

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

В современных условиях алгоритмическое повышение скорости выра­ ботки хэш-значения может быть достигнуто за счет применения простого

84

Общие сведения по классической криптографии

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

1.5.4.Стойкость хэш-функций

Сточки зрения криптографической стойкости важным свойством хэш-фун­ кций является отсутствие коллизий, то есть невозможность найти такие значения х ^ у, чтобы Ь(х) = Ь(у). В криптографических приложениях важ­ ным понятием является криптографически стойкая хэш-функция, для кото­ рой не существует эффективного алгоритма нахождения значений х & у, где выполнялось бы условие Ь(х) = Ь (у) (функция, стойкая в сильном смысле), или не существует эффективного алгоритма нахождения коллизии при за­ данном х такого у ^ х, что Ь(х) - Ь (у ) (функция, стойкая в слабом смысле). Росс Андерсон показал, что отсутствие коллизий не позволяет судить

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

Пример

Возьмем функцию Ь, обладающую двумя вышеперечисленными свойства­ ми, зафиксируем небольшое по сравнению с длиной входной последова­ тельности значение к. Разобьем входную последовательность 3 на 5*,

Ключевая информация

85

состоящую из первых к бит, и на 8 2 -

оставшуюся часть входной последо­

вательности ( 8 = 8 1 Ц8 2 ).

Теперь определим функцию 1ц как 1ц(3) = 3! |Ь (3 2). Таким образом, в выходной последовательности первые к бит останутся без изменений. Очевидно, что 1ц свободна от коллизии, поскольку таковой является фун­ кция Ь. Однако 1ц не унаследовала свойство свободы от корреляции, так как молено легко построить X и У, при которых значение к (Х ) отличается от Ь (У ) на к бит.

Необходимо отметить, что основным способом поиска коллизий у хэшфункций является метод, основанный на «парадоксе дня рождения». Суть его заключается в генерации двух наборов по 2п/2 сообщения в каждом. Со­ гласно парадоксу дня рождения вероятность того, что в этих наборах най­ дется пара сообщений, имеющих одинаковые хэш-значения, больше 1 /2 . Из недостатков метода следует отметить значительные временные затра­ ты для генерации данных наборов сообщений, необходимость иметь боль­ шой объем памяти для их хранения и наличие быстрых алгоритмов сор­ тировки. Этот метод в случае короткой длины хэш-значения является эффективным как для хэш-функций, построенных с нуля, так и для хэшфункций, построенных на основе известных алгоритмов блочного шифро­ вания. Хотя к хэш-функциям, построенным на основе алгоритмов блочно­ го шифрования, применимы методы криптоанализа алгоритмов блочного шифрования.

1.6. Ключевая информация

1.6.1. Общие сведения

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

для зашифрования ключей;

для зашифрования данных.

86

Общие сведения по классической криптографии

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

1.6.2. Генерация ключевой информации

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

Детерминированные методы

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

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

проверку частот появления последовательности из символов к (к-грамма) по критерию х-квадрат;

проверку частот исходов по обобщенному критерию х-квадрат;

проверку максимального и минимального значения маркировки;

проверку длины интервалов непопаданий в заданный диапазон;

проверку на монотонность.

Ключевая информация

87

Недетерминированные методы

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

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

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

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

Необходимо добавить, что некоторые типы алгоритмов имеют так назы­ ваемые слабые ключи, использование которых значительно уменьшает криптографическую стойкость зашифрования на данных ключах. Для ал­ горитма БЕЗ, например, с длиной ключа 56 бит существует 16 слабых ключей. Проверка слабых ключей может производиться как эксперимен­ тальным способом, так и посредством анализа используемого алгоритма шифрования.

Генерация сеансовых ключей

Существует огромное количество методов генерации сеансовых ключей. В этом подразделе мы рассмотрим метод генерации сеансовых ключей на базе стандарта АМ31 Х9.17. Подобная операция производится на основе

88

Общие сведения по классической криптографии

секретного ключа пользователя К и секретного начального заполнения У 0 длиной 64 бита. В качестве алгоритма генерации рекомендуется использо­ вать алгоритм шифрования БЕЗ. Для вычисления случайного ключа К| производятся следующие действия:

К; « Ег (Ег (Т1) V I)

У;+1 = Ег (Ег (Т1) Ф Ш ), гдеП - метка времени

Врезультате получаем 64-битный сеансовый ключ Ш. Если необхо­ димо получить 128-битный ключ, вышеуказанным способом создаются два ключа, и посредством операции конкатенации получается 128-бит-

ный ключ.

Генерация ключей на основе пароля пользователя

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

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

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

встандарте РКСЗ № 5.

1.6.3.Хранение ключей

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

Ключевая информация

89

работа с криптоустройствами, имеющими защищенную от несанкцио­ нированного доступа память для хранения ключей;

хранение ключей в зашифрованном виде непосредственно на персо­ нальном компьютере пользователя;

использование внешних устройств для хранения ключей.

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

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

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

1.6.4. Распределение ключей

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

90

Общие сведения по классической криптографии

Увеличение числа пользователей засекреченной связи, повсеместное применение средств вычислительной техники, а также повышение требо­ ваний к безопасности, оперативности и работоспособности сети связи оп­ ределило два направления развития систем распределения ключевой ин­ формации:

создание автоматизированных комплексов распределения ключей в за­ шифрованном виде через открытые каналы передачи данных и авто­ матизированный ввод ключей в шифротехнику. Это направление пред­ полагает наличие территориальных центров создания и рассылки ключевой информации;

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

1.6.5. Минимальная длина ключа

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

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