Длины значений однонаправленных хэш-функций
64-битовые хэш-функции слишком малы, чтобы противостоять вскрытию методом «дней рождений». Более практичны однонаправленные хэш-функции, выдающие 128-битовые хэш-значения. При этом, чтобы найти два документа с одинаковыми хэш-значениями, для вскрытия методом «дней рождений» придется хэшировать 264 случайных документов, что, впрочем, недостаточно, если нужна длительная безопасность. Поэтому ряд стандартов безопасного хэширования (Secure Hash Standard, SHS), использует 160-битовое хэш-значение. Это еще сильнее усложняет вскрытие методом «дней рождений», для которого понадобится 280 хэширований.
Для удлинения хэн-значений, выдаваемых конкретной хэш-функцией, был предложен следующий метод .
1. Для сообщения с помощью однонаправленных хэш-функций генерируется хэш-значение.
2. Хэш значение конкатенируерся с сообщением.
3. Для конкатенации вычисляется новое хэш-значения.
4. Создается хэш-значение большей длины, состоящее из объединения хэш-значения этапа (1) и хэш-значения этапа (3).
5. Этапы (1)-(4) повторяются нужное количество раз для обеспечения требуемой длины хэш-значения.
Структура и алгоритмы MD-функций
Очевидно, не просто построить функцию, входные данные которой имеют произвольный размер, а тем более сделать ее однонаправленной. В реальности однонаправленные хэш-функции строятся на идее функции сжатия.Такая однонаправленная функция выдает хэш-значение длины п при заданных входных данных большей длины т . Входами функции сжатия являются блок сообщения и выход предыдущего блока текста. Выход представляет собой хэш-значение всех блоков, обработанных до этого момента. То есть, хэш-значение блока Мi, равно
h i , =f(Мi , h i -1)
Это хэш-значение вместе со следующим блоком сообщения становится следующим входом функции сжатия. Хэш-значением всего сообщения является хэш-значение последнего блока.
Рисунок 3.1 - Однонаправленная функция
Хэшируемый вход должен содержать бинарное представление длины всего сообщения. Таким образом преодолевается потенциальная проблема, вызванная тем, что сообщения различной длины могут давать одно и то же хэш-значение. Иногда такой метод называется MD-усилением(MD - Message Digest). Рассмотрим алгоритмы и свойства наиболее распространенных хеш-функций.
MD4
MD4 - это однонаправленная хэш-функция, изобретенная Роном Ривестом, алгоритм для входного сообщения выдает 128-битовое хэш-значение, которое называется дайджестом сообщения .
Цели, преследуемые при разработке алгоритма:
Безопасность. Вычислительно невозможно найти два сообщения с одинаковым хэш-значением. Вскрытие грубой силой является самым эффективным.
Прямая безопасность. Безопасность MD4 не основывается на каких-либо допущениях, например, предположении о трудности разложения на множители.
Скорость. MD4 подходит для высокоскоростных программных реализаций. Она основана на простом наборе битовых манипуляций с 32-битовыми операндами.
Простота и компактность. MD4 проста, насколько это возможно, и не содержит больших структур данных или сложных программных модулей.
Удачная архитектура. MD4 оптимизирована для микропроцессорной архитектуры (особенно для микропроцессоров Intel), для более крупных и быстрых компьютеров можно выполнить любые необходимые изменения .
Описание алгоритма MD4
Пусть есть сообщение длиной b бит, для которого мы ищем MD. b может быть равно 0, оно не обязано быть кратно 8.
Представим его в виде:
Расчет MD происходит за 5 шагов:
Шаг 1: Добавление байтов заполнителей
Сообщение расширяется, так чтобы его длина (в битах) была 448 по модулю 512 – т.е. сообщению не хватает ровно 64 бит для кратности 512 битам. Добавление битов происходит в любом случае, даже если длина исходного сообщения изначально обладает этим свойством.
Добавление происходит следующим образом:
- первый добавленный бит – «1», остальные «0». Минимум 1 бит, максимум 512.
Шаг 2: Добавление длины:
64 битное значение b (длины исходного сообщения) добавляется к сообщению. Если же длина более 2^64 (это маловероятно), то лишь младшие 64 бита длины используются.
Теперь сообщение имеет длину, кратную 512 битам (16 32 битных слова), его можно представить как слова:
где N- кратно 16
Шаг 3: Инициализация буфера MD
Буфер из четырех слов (A,B,C,D) , используется для расчета MD. Инициализируется:
word A: 01 23 45 67word B: 89 ab cd efword C: fe dc ba 98word D: 76 54 32 10Шаг 4: Обработка сообщения блоками по 16 слов
Сначала определим три вспомогательный функции, на вход получают 3 слова, результат – слово.
F(X,Y,Z) = XY v not(X) ZG(X,Y,Z) = XY v XZ v YZH(X,Y,Z) = X xor Y xor ZКаждый бит F – Если X то Y, иначе Z
Каждый бит G – Преобладающее значение X,Y,Z
Каждый бит H – xor, или контроль четности
Делаем следующее: /* Обрабатываем каждый блок в 16 слов. */ For i = 0 to N/16-1 do /* Копируем блок i в X. */ For j = 0 to 15 do X[j] = M[i*16+j]. end /* цикла j */ /* Сохраняем значения A как AA, B как BB, C как CC, и D как DD. */ AA = A BB = B CC = C DD = D /* Раунд 1. */ /* Пусть [abcd k s] определяют операцию a = (a + F(b,c,d) + X[k]) <<< s. */ /* Сделать следующие 16 операций. */ [ABCD 0 3] [DABC 1 7] [CDAB 2 11] [BCDA 3 19] [ABCD 4 3] [DABC 5 7] [CDAB 6 11] [BCDA 7 19] [ABCD 8 3] [DABC 9 7] [CDAB 10 11] [BCDA 11 19] [ABCD 12 3] [DABC 13 7] [CDAB 14 11] [BCDA 15 19]/*Несложно заметить, что ABCD циклически сдвигаются влево, k идет по строкам от 0 до 15, а s циклически замкнуто на {3,7,11,19}.*/
/* Раунд 2. */ /* Пусть [abcd k s] определяют операцию a = (a + G(b,c,d) + X[k] + 5A827999) <<< s. */ /* Сделать следующие 16 операций. */ [ABCD 0 3] [DABC 4 5] [CDAB 8 9] [BCDA 12 13] [ABCD 1 3] [DABC 5 5] [CDAB 9 9] [BCDA 13 13] [ABCD 2 3] [DABC 6 5] [CDAB 10 9] [BCDA 14 13] [ABCD 3 3] [DABC 7 5] [CDAB 11 9] [BCDA 15 13]/*Несложно заметить, что ABCD циклически сдвигаются влево, k идет по столбцам от 0 до 15, а s циклически замкнуто на {3,5,9,13}.*/
/* Раунд 3. */ /* Пусть [abcd k s] определяют операцию a = (a + H(b,c,d) + X[k] + 6ED9EBA1) <<< s. */ /* Сделать следующие 16 операций. */ [ABCD 0 3] [DABC 8 9] [CDAB 4 11] [BCDA 12 15] [ABCD 2 3] [DABC 10 9] [CDAB 6 11] [BCDA 14 15] [ABCD 1 3] [DABC 9 9] [CDAB 5 11] [BCDA 13 15] [ABCD 3 3] [DABC 11 9] [CDAB 7 11] [BCDA 15 15]/*Несложно заметить, что ABCD циклически сдвигаются влево, а s циклически замкнуто на {3,9,11,15}, k также подвержено закономерности*/
/* Изменяем ABCD – регистры для следующего блока */ A = A + AA B = B + BB C = C + CC D = D + DD end /* цикла по i */Примечание: 5A..99 – 32 битная константа – корень из 2 со старшей цифрой в начале.6E..A1 – 32 битная константа – корень из 3 со старшей цифрой в начале.
Шаг 5: Вывод
MD – это A,B,C,D – начиная с младшего байта A и заканчивая старшим байтом D.
(128 бит)
После первого появления алгоритма был совершен криптоаналитиками ряд вскрытий отдельных этапов MD4 . Хотя все эти вскрытия не были распространены на полный алгоритм, Ривест усилил свою разработку. В результате появился алгоритм MD5.
MD5
MD5 - это улучшенная версия MD4. Хотя она сложнее MD4, их схемы похожи, и результатом MD5 также является 128-битовое хэш-значение.
Описание MD5
После некоторой первоначальной обработки MD5 обрабатывает входной текст 512-битовыми блоками, разбитыми на 16 32-битовых подблоков. Выходом алгоритма является набор из четырех 32-битовых блоков, которые объединяются в единое 128-битовое хэш-значение.
Во-первых, сообщение дополняется так, чтобы его длина была на 64 бита короче числа, кратного 512. Этим дополнением является 1, за которой вплоть до конца сообщения следует столько нулей, сколько нужно. Затем, к результату добавляется 64-битовое представление длины сообщения (истинной, до дополнения). Эти два действия служат для того, чтобы длина сообщения была кратна 512 битам (что требуется для оставшейся части алгоритма), и чтобы гарантировать, что разные сообщения не будут выглядеть одинаково после дополнения. Инициализируются четыре переменных:
А = 0x01234567
В = 0x89abcdef
С = 0xfedcba98
D = 0x76543210
Они называются переменными сцепления.
Теперь перейдем к основному циклу алгоритма. Этот цикл продолжается, пока не исчерпаются 512-битовые блоки сообщения.
Четыре переменных копируются в другие переменные: А в а, В в b, С в с и D в d.
Главный цикл состоит из четырех очень похожих этапов. На каждом этапе 16 раз используются различные операции. Каждая операция представляет собой нелинейную функцию над тремя переменными из набора а, b, с и d. Затем она добавляет этот результат к четвертой переменной, подблоку текста и константе. Далее результат циклически сдвигается вправо на переменное число битов и добавляет результат к одной из переменных а, b, с и d. Наконец результат заменяет одну из переменных а,b, с и d. Существуют четыре нелинейных функции, используемые по одной в каждой операции (для каждого этапа - другая функция).
Рисунок 3.2 - Главный цикл MD5
Рисунок 3.3 - Схема одной операции алгоритма MD5
Эти функции спроектированы так, чтобы, если соответствующие биты X, Y и Z независимы и несмещены, каждый бит результата также был бы независимым и несмещенным . Функция F - это побитовое условие: если X, то Y, иначе Z. Функция Н - побитовая операция четности.
Если Mj обозначает j-ый подблок сообщения (от 0 до 15), a <«s обозначает циклический сдвиг влево на s битов, то используются следующие четыре операции:
FF(a,b,c,d,Mj,s,ti) означает a = b + ((a + ¥(b,c,d) + М,- + tt) <«s)
GG(a,b,c,dMj,s,ti) означает a = b + ((a + G(b,c,d) + Mj + tt) <«s)
HH(a,b,c,d,Mj,s,ti) означает a = b + ((a + H(b,c,d) + M,- + tt) <«s)
II{a,b,c,dMj,s,ti) означает a = b + ((a + I(b,c,d) + Mj + tt) <«s)
Четыре этапа алгоритма.
Шаг 1: Добавление байтов заполнителей
Сообщение расширяется, так чтобы его длина (в битах) была 448 по модулю 512 – т.е. сообщению не хватает ровно 64 бит для кратности 512 битам. Добавление битов происходит в любом случае, даже если длина исходного сообщения изначально обладает этим свойством. Добавление происходит следующим образом:
- первый добавленный бит – «1», остальные «0». Минимум 1 бит, максимум 512.
Шаг 2: Добавление длины:
64 битное значение b (длины исходного сообщения) добавляется к сообщению. Если же длина более 2^64 (это маловероятно), то лишь младшие 64 бита длины используются.
Теперь сообщение имеет длину, кратную 512 битам (16 32 битных слова), его можно представить как слова:
, где N- кратно 16
Шаг 3: Инициализация буфера MD
Буфер из четырех слов (A,B,C,D), используется для расчета MD. Инициализируется:
word A: 01 23 45 67word B: 89 ab cd efword C: fe dc ba 98word D: 76 54 32 10Шаг 4: Обработка сообщения блоками по 16 слов
Сначала определим четыре вспомогательных функции, на вход получают 3 слова, результат – слово.
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
Каждый бит F – Если X то Y, иначе Z
Каждый бит G – Преобладающее значение X,Y,Z
Каждый бит H – xor, или контроль четности
Этот шаг использует специальную таблицу T[1..64], заполненную из значений синуса. T[i]=Целая часть 4294967296 * abs(sin(i)), где i в радианах.
Делаем следующее: Обрабатываем каждый блок в 16 слов. */ For i = 0 to N/16-1 do /* Копируем блок i в X. */ For j = 0 to 15 do X[j] = M[i*16+j]. end /* цикла j */ /* Сохраняем значения A как AA, B как BB, C как CC, и D как DD. */ AA = A BB = B CC = C DD = D /* Раунд 1. *//* Пусть [abcd k s i] определяют операцию
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* Делаем следующие 16 операций. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* Раунд 2. */
/* Пусть [abcd k s i] определяют операцию
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Делаем следующие 16 операций. */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/* Раунд 3. */
/* Пусть [abcd k s t] определяют операцию
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Делаем следующие 16 операций. */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/* Раунд 4. */
/* Пусть [abcd k s t] определяют операцию
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Делаем следующие 16 операций. */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
/* Изменяем ABCD – регистры для следующего блока */ A = A + AA B = B + BB C = C + CC D = D + DD end /* цикла по i */Шаг 5: Вывод
MD – это A,B,C,D – начиная с младшего байта A и заканчивая старшим байтом D (128 бит).
Безопасность MD5
Рон Ривест привел следующие улучшения MD5 в сравнении с MD4 :
1. Добавился еще один этап.
2. Теперь в каждом действии используется уникальная прибавляемая константа .
3. Функция G на этапе 2 была изменена, чтобы сделать G менее симметричной.
4. Теперь каждое действие добавляется к результату предыдущего этапа. Это обеспечивает более быстрый лавинный эффект.
5. Изменился порядок, в котором использовались подблоки сообщения на этапах 2 и 3, чтобы сделать шаблоны менее похожими.
6. Значения циклического сдвига влево на каждом этапе были приближенно оптимизированы для ускорения лавинного эффекта. Четыре сдвига, используемые на каждом этапе, отличаются от значений, используемых на других этапах.
MD2
MD2 - это другая 128-битовая однонаправленная хэш-функция, разработанная Роном Ривестом. Она вместе с MD5 используется для цифровой подписи в протоколах РЕМ. Безопасность MD2 опирается на случайную перестановку байтов. Эта перестановка фиксирована и зависит от цифр числа pi. Идентификаторы So, S1, S2, , S255 являются перестановкой.
Чтобы выполнить хэширование сообщения М необходимо:
1. Дополнить сообщение i байтами, значение i должно быть таким, чтобы длина полученного сообщения была кратна 16 байтам.
2. Добавить к сообщению 16 байтов контрольной суммы.
3. Проинициализировать 48-байтовый блок: Хо, Х\, Х2, . . ., ХА1. Заполнить первые 16 байтов X нулями, во вторые 16 байтов X скопировать первые 16 байтов сообщения, а третьи 16 байтов X должны быть равны XOR первых и вторых 16 байтов X.
4. Вот как выглядит функция сжатия:
t = 0
For j = 0 to 17
For к = 0 to 47
t = Xk XOR St,
Xk=t
t = (t +j) mod 256
5. Скопировать во вторые 16 байтов Xвторые 16 байтов сообщения, а третьи 16 байтов X должны быть равны XOR первых и вторых 16 байтов X. Выполнить этап (4). Повторять этапы (3) и (4) по очереди для каждых 16 байтов сообщения.
6. Выходом являются первые 16 байтов X.
Хотя в MD2 пока не было найдено слабых мест, она работает медленнее большинства других предлагаемых хэш-функций.
Алгоритм безопасного хэширования (Secure Hash Algorithm, SHA)
Алгоритм безопасного хэширования ( Secure Hash Algorithm, SHA), необходимый для обеспечения безопасности Алгоритма цифровой подписи (Digital Signature Algorithm, DSA). Для любого входного сообщения длиной меньше 264 битов SHA выдает 160-битовый результат, называемый кратким содержанием сообщения. Далее, краткое содержание сообщения становится входом DSA, который вычисляет подпись для сообщения. Подписывание краткого содержания вместо всего сообщения часто повышает эффективность процесса, так как краткое содержание сообщения намного меньше, чем само сообщение. То же краткое содержание сообщения должно быть получено тем, кто проверяет подпись, если принятая им версия сообщения используется в качестве входа SHA. SHA называется безопасным, так как он разработан так, чтобы было вычислительно невозможно найти сообщение, соответствующее данному краткому содержанию сообщения или найти два различных сообщения с одинаковым кратким содержанием сообщения . Любые изменения, произошедшие при п ередаче сообщения, с очень высокой вероятностью приведут к изменению краткого содержания сообщения, и подпись не пройдет проверку. Принципы, лежащие в основе SHA, аналогичны использованным профессором Рональдом Л. Ривестом при проектировании алгоритма краткого содержания сообщения MD4. SHA разработан по образцу упомянутого алгоритма.
SHA выдает 160-битовое хэш-значение, более длинное, чем у MD5
Описание SHA
Во-первых, сообщение дополняется, чтобы его длина была кратной 512 битам. Используется то же дополнение, что и в MD5: сначала добавляется 1, а затем нули так, чтобы длина полученного сообщения была на 64 бита меньше числа, кратного 512, а затем добавляется 64-битовое представление длины оригинального сообщения.
Инициализируются пять 32-битовых переменных (в MD5 используется четыре переменных, но рассматриваемый алгоритм должен выдавать 160-битовое хэш-значение):
А = 0x67452301
В = 0xefcdab89
С = 0x10325476
D = 0x10325476
E = 0xc3d2elf0
Затем начинается главный цикл алгоритма. Он обрабатывает сообщение 512-битовыми блоками и продолжается, пока не исчерпаются все блоки сообщения.
Сначала пять переменных копируются в другие переменные: А в а, В в b, С в с, D в d и Е в е.
Главный цикл состоит из четырех этапов по 20 операций в каждом (в MD5 четыре этапа по 16 операций в каждом). Каждая операция представляет собой нелинейную функцию над тремя из а, b, с, d и е, а затем выполняет сдвиг и сложение аналогично MD5. В SHA используется следующий набор нелинейных функций:
, для t=0 до 19 , для t=20 до 39
, для t=40 до 59 , для t=60 до 79 в алгоритме используются следующие четыре константы:
Кt = 0х5а827999, для t=0 до 19
Кt = 0x6ed9ebal , для t=20 до 39
Кt = 0x8flbbcdc, для t=40 до 59
Кt = 0xca62cld6, для t=60 до 79
(Если интересно, как получены эти числа, то :0х5а827999 = 21/2/4, 0x6ed9ebal = 31/2/4, 0x8flbbcdc = 51/2/4, 0xca62cld6 = 101/2/4; все умножено на 232)
Блок сообщения превращается из 16 32-битовых слов (Мо по М15) в 80 32-битовых слов (W0 no W79) с помощью следующего алгоритма:
Wt = Mt, для t = 0 по 15
, для t=16 по 79
Если t - это номер операции (от 1 до 80), W, представляет собой t-ый подблок расширенного сообщения, а <<< - это циклический сдвиг влево на s битов, то главный цикл выглядит следующим образом:
FOR t = 0 to 79
TEMP = (а <<<5) +ft(b,c,d) + e+Wt + Kt
e = d
d = c
c = b <<< 30
b = a
a = TEMP
Ha рисунке 3.4 показана одна операция. Сдвиг переменных выполняет ту же функцию, которую в MD5 выполняет использование в различных местах различных переменных.
Рисунок 3.4 - Одна операция SHA.
После всего этого а, b, с, d и е добавляются к А, В, С D и Е, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение А, В, С D и Е.
Безопасность SHA
SHA очень похожа на MD4, но выдает 160-битовое хэш-значение. Главным изменением является введение расширяющего преобразования и добавление выхода предыдущего шага в следующий с целью получения более быстрого лавинного эффекта.
Задание к лабораторной работе
1. Изучить алгоритм и разработать программу реализации алгоритма хеш-функции в соответствии с вариантом:
- алгоритм MD2 - <номер по журналу > MOD 4 =0;
- алгоритм MD4 - <номер по журналу > MOD 4 =1;
- алгоритм MD5 - <номер по журналу > MOD 4 =2;
- алгоритм SHA - <номер по журналу > MOD 4 =0;
2. Проанализировать алгоритм с точки зрения его безопасности.
Контрольные вопросы к лабораторной работе:
1. Какова кратность длины исходного сообщения?
2. Какова разрядность вычисленного хеш-значения?
3. Какие логические операции используются в алгоритме?
4. Для чего используется метод МД-усиления?
5. Для чего используются однонаправленные хеш-функции?
Лабораторная работа №4
Тема: Ассиметричные алгоритмы шифрования. Шифрование данных алгоритмом RSA. Понятия электронно-цифровой подписи. ЭЦП RSA.
Цель работы: Изучение принципов шифрования в ассиметричных криптосистемах. Изучение и программная реализация алгоритма RSA, ЭЦП RSA.
Методические указания к выполнению лабораторной работы
Процесс криптографического закрытия данных может осуществляться как программно, так и аппаратно. Аппаратная реализация отличается существенно большей стоимостью, однако ей присущи и преимущества: высокая производительность, простота, защищенность и т.д. Программная реализация более практична, допускает известную гибкость в использовании.
Для современных криптографических систем защиты информации сформулированы следующие общепринятые требования:
зашифрованное сообщение должно поддаваться чтению только при наличии ключа;
число операций, необходимых для определения использованного ключа шифрования по фрагменту шифрованного сообщения и соответствующего ему открытого текста, должно быть не меньше общего числа возможных ключей;
число операций, необходимых для расшифровывания информации путем перебора всевозможных ключей должно иметь строгую нижнюю оценку и выходить за пределы возможностей современных компьютеров (с учетом возможности использования сетевых вычислений);
знание алгоритма шифрования не должно влиять на надежность защиты;
незначительное изменение ключа должно приводить к существенному изменению вида зашифрованного сообщения даже при использовании одного и того же ключа;
структурные элементы алгоритма шифрования должны быть неизменными;
дополнительные биты, вводимые в сообщение в процессе шифрования, должен быть полностью и надежно скрыты в шифрованном тексте;
длина шифрованного текста должна быть равной длине исходного текста;
не должно быть простых и легко устанавливаемых зависимостью между ключами, последовательно используемыми в процессе шифрования;
любой ключ из множества возможных должен обеспечивать надежную защиту информации;
алгоритм должен допускать как программную, так и аппаратную реализацию, при этом изменение длины ключа не должно вести к качественному ухудшению алгоритма шифрования.
Как бы ни были сложны и надежны симметричные криптографические системы - их слабое место при практической реализации - проблема распределения ключей. Для того, чтобы был возможен обмен конфиденциальной информацией между двумя субъектами информационной системы, ключ должен быть сгенерирован одним из них, а затем каким-то образом опять же в конфиденциальном порядке передан другому. Т.е. в общем случае для передачи ключа опять же требуется использование какой-то криптосистемы.
Для решения этой проблемы на основе результатов, полученных классической и современной алгеброй, были предложены системы с открытым ключом.
Суть их состоит в том, что каждым адресатом ИС генерируются два ключа, связанные между собой по определенному правилу. Один ключ объявляется открытым, а другой закрытым. Открытый ключ публикуется и доступен любому, кто желает послать сообщение адресату. Секретный ключ сохраняется в тайне.
Исходный текст шифруется открытым ключом адресата и передается ему. Зашифрованный текст в принципе не может быть расшифрован тем же открытым ключом. Дешифрование сообщение возможно только с использованием закрытого ключа, который известен только самому адресату.
Криптографические системы с открытым ключом используют так называемые необратимые или односторонние функции, которые обладают следующим свойством: при заданном значении x относительно просто вычислить значение f(x), однако если y=f(x), то нет простого пути для вычисления значения x.
Множество классов необратимых функций и порождает все разнообразие систем с открытым ключом. Однако не всякая необратимая функция годится для использования в реальных ИС.
В самом определении необратимости присутствует неопределенность. Под необратимостью понимается не теоретическая необратимость, а практическая невозможность вычислить обратное значение, используя современные вычислительные средства за обозримый интервал времени.
Обобщенная схема асимметричной криптосистемы с открытым ключом показана на рисунке 1. В этой криптосистеме применяют два различных ключа:
КВ – открытый ключ получателя В, используемый отправителем А:
kВ – секретный ключ получателя В.
Генератор ключей целесообразно располагать на стороне получателя В (чтобы не пересылать секретный ключ kВ по незащищенному каналу).
Рисунок 4.1 - Обобщенная схема асимметричной криптосистемы с открытым ключом
Процесс передачи зашифрованной информации в асимметричной криптосистеме осуществляется следующим образом:
1) Подготовительный этап:
- абонент В генерирует пару ключей: секретный ключ kВ и открытый ключ КВ ;
- открытый ключ КВ посылает абоненту А и остальным абонентам (или делается доступным, например, на разделяемом ресурсе).
2) Использование – обмен информацией между абонентами А и В:
- абонент А зашифровывает сообщение с помощью открытого ключа КВ абонента В и отправляет шифртекст абоненту В;
- абонент В расшифровывает сообщение с помощью своего секретного ключа kВ , Никто другой (в том числе абонент А) не может расшифровать данное сообщение, так как не имеет секретного ключа абонента В. Защита информации в асимметричной криптосистеме основана на секретности ключа kВ получателя сообщения.
Характерные особенности асимметричных криптосистем: открытый ключ и криптограмма могут быть отправлены по незащищенным каналам, то есть они известны противнику; алгоритмы шифрования и расшифрования являются открытыми.
Поэтому чтобы гарантировать надежную защиту информации, к системам с открытым ключом предъявляются два важных и очевидных требования:
1. Преобразование исходного текста должно быть необратимым и исключать его восстановление на основе открытого ключа.
2. Определение закрытого ключа на основе открытого также должно быть невозможным на современном технологическом уровне. При этом желательна точная нижняя оценка сложности (количества операций) раскрытия шифра.
Алгоритмы шифрования с открытым ключом получили широкое распространение в современных информационных системах. Так, алгоритм RSA стал мировым стандартом де-факто для открытых систем и рекомендован МККТТ.
Вообще же все предлагаемые сегодня криптосистемы с открытым ключом опираются на один из следующих типов необратимых преобразований:
1. Разложение больших чисел на простые множители.
2. Вычисление логарифма в конечном поле.
3. Вычисление корней алгебраических уравнений.
Здесь же следует отметить, что алгоритмы криптосистемы с открытым ключом можно использовать в трех назначениях.
1. Как самостоятельные средства защитыпередаваемых и хранимых данных.
2. Как средства для распределения ключей. Алгоритмы рассматриваемой группы более трудоемки, чем традиционные криптосистемы. Поэтому часто на практике рационально с помощью систем с открытым ключом распределять ключи, объем которых как информации незначителен. А потом с помощью обычных алгоритмов осуществлять обмен большими информационными потоками.
3. Средства аутентификации пользователей (электронно-цифровая подпись).
Рассмотрим асимметричный алгоритм шифрования RSA.
Несмотря на довольно большое число различных систем с открытым ключом, наиболее популярна - криптосистема RSA, разработанная в 1977 году и получившая название в честь ее создателей: Рона Ривеста, Ади Шамира и Леонарда Эйдельмана.
Они воспользовались тем фактом, что нахождение больших простых чисел в вычислительном отношении осуществляется легко, но разложение на множители произведения двух таких чисел практически невыполнимо. Доказано (теорема Рабина), что раскрытие шифра RSA эквивалентно такому разложению. Поэтому для любой длины ключа можно дать нижнюю оценку числа операций для раскрытия шифра, а с учетом производительности современных компьютеров оценить и необходимое на это время.
Общее описание алгоритма RSA:
1. Отправитель выбирает два очень больших простых числа Р и Q и вычисляет два произведения N=PQ и M=(P-1)(Q-1).
2. Затем он выбирает случайное целое число D, взаимно простое с М, и вычисляет Е, удовлетворяющее условию DE = 1 MOD М.
3. После этого он публикует D и N как свой открытый ключ шифрования, сохраняя Е как закрытый ключ.
4. Если S - сообщение, длина которого, определяемая по значению выражаемого им целого числа, должна быть в интервале (1, N), то оно превращается в шифровку возведением в степень D по модулю N и отправляется получателю S'=(S**D) MOD N.
5. Получатель сообщения расшифровывает его, возводя в степень Е по модулю N, так как S =(S'**E) MOD N = (S**(D*E)) MOD N.
Таким образом, открытым ключом служит пара чисел N и D, а секретным ключом число Е.
Возможность гарантированно оценить защищенность алгоритма RSA стала одной из причин популярности этой системы с открытым ключом на фоне десятков других схем. Поэтому алгоритм RSA используется в банковских компьютерных сетях, особенно для работы с удаленными клиентами (обслуживание кредитных карточек).
В настоящее время алгоритм RSA используется во многих стандартах, среди которых SSL, S-HHTP, S-MIME, SWAN, STT и PCT.
Рассмотрим математические результаты, положенные в основу этого алгоритма.
Теорема 1. (Малая теорема Ферма.)
Если р - простое число, то
xp-1 = 1 (mod p) (1)
для любого х, простого относительно р, и
xp = х (mod p) (2)
для любого х.
Доказательство. Достаточно доказать справедливость уравнений (1) и (2) для хÎZp. Проведем доказательство методом индукции.
Далее
xp=(x-1+1)p= å C(p,j)(x-1)j=(x-1)p+1 (mod p),
0£j£p
так как C(p,j)=0(mod p) при 0<j<p. С учетом этого неравенства и предложений метода доказательства по индукции теорема доказана.
Определение. Функцией Эйлера j(n) называется число положительных целых, меньших n и простых относительно n.
n | |||||||||||
j(n) |
Теорема 2. Если n=pq, (p и q - отличные друг от друга простые числа), то
j(n)=(p-1)(q-1).
Теорема 3. Если n=pq, (p и q - отличные друг от друга простые числа) и х - простое относительно р и q, то
xj(n) = 1 (mod n).
Следствие . Если n=pq, (p и q - отличные друг от друга простые числа) и е простое относительно j(n), то отображение
Еe,n: x®xe (mod n)
является взаимно однозначным на Zn.
Очевиден и тот факт, что если е - простое относительно j(n), то существует целое d, такое, что
ed = 1 (mod j(n)) (3)
На этих математических фактах и основан популярный алгоритм RSA.
Пусть n=pq, где p и q - различные простые числа. Если e и d удовлетворяют уравнению (8.2.3), то отображения Еe,n и Еd,n являются инверсиями на Zn. Как Еe,n, так и Еd,n легко рассчитываются, когда известны e, d, p, q. Если известны e и n, но p и q неизвестны, то Еe,n представляет собой одностороннюю функцию; нахождение Еd,n по заданному n равносильно разложению n. Если p и q - достаточно большие простые, то разложение n практически не осуществимо. Это и заложено в основу системы шифрования RSA.
Пользователь i выбирает пару различных простых pi и qi и рассчитывает пару целых (ei, di), которые являются простыми относительно j(ni), где ni=pi qi . Справочная таблица содержит публичные ключи {(ei ,ni)}.
Предположим, что исходный текст
x =(x0, x1, ..., xn-1), xÎZn , 0 £ i < n,
сначала представлен по основанию ni :
N = c0+ci ni+....
Пользователь i зашифровывает текст при передаче его пользователю j, применяя к n отображение Edi,ni :
N ® Edi,ni n = n’.
Пользователь j производит дешифрование n’, применяя Eei,ni :
N’ ® Eei,ni n’= Eei,ni Edi,ni n = n .
Очевидно, для того чтобы найти инверсию Edi,ni по отношению к Eei,ni, требуется знание множителей n=pi qi. Время выполнения наилучших из известных алгоритмов разложения при n=10100 на сегодняшний день выходит за пределы современных технологических возможностей.
Рассмотрим небольшой пример, иллюстрирующий применение алгоритма RSA.
Пример: Зашифруем сообщение “САВ”. Для простоты будем использовать маленькие числа (на практике применяются гораздо большие).
1. Выберем p=3 и q=11.
2. Определим n=3*11=33.
3. Найдем (p-1)(q-1)=20. Следовательно, в качестве d, взаимно простое с 20, например, d=3.
4. Выберем число е. В качестве такого числа может быть взято любое число, для которого удовлетворяется соотношение (е*3) (mod 20) = 1, например 7.
5. Представим шифруемое сообщение как последовательность целых чисел с помощью отображения: А®1, В®2, С®3. Тогда сообщение принимает вид (3,1,2). Зашифруем сообщение с помощью ключа {7,33}.
ШТ1 = (37) (mod 33) = 2187 (mod 33) = 9,
ШТ2 = (17) (mod 33) = 1 (mod 33) = 1,
ШТ3 = (27) (mod 33) = 128 (mod 33) = 29.
6. Расшифруем полученное зашифрованное сообщение (9,1,29) на основе закрытого ключа {3,33}:
ИТ1 = (93) (mod 33) = 729 (mod 33) = 3,
ИТ2= (13) (mod 33) = 1 (mod 33) = 1,
ИТ3 = (293) (mod 33) = 24389 (mod 33) = 2.