Примечание | от редактора: прислана в марте 2004г. |
Загрузить архив: | |
Файл: ref-17802.zip (76kb [zip], Скачиваний: 210) скачать |
Массу полезной информации можно найти на сервереftp.rsa.com. В faq5.doc Вы если и не найдете ответ на любой вопрос по криптографии, то обнаружите большое количество ссылок на другие источники.
Автор будет признателен за любые замечания и вопросы, которые проще всего направить по адресу: bar@glasnet.ru
Баричев Сергей
Практическая реализация криптографических систем требует, чтобы преобразования {Tk: kÎK} были определены алгоритмами, зависящими от относительно небольшого числа параметров (ключей).
Почему же эти системы неприменимы для обеспечения секретности при обработке информации? Ответ простой - они непрактичны, так как требуют независимого выбора значения ключа для каждой буквы исходного текста. Хотя такое требование может быть и не слишком трудным при передаче по прямому кабелю Москва - Нью-Йорк, но для информационных оно непосильно, поскольку там придется шифровать многие миллионы знаков.
Посмотрим, что получится, если ослабить требование шифровать каждую букву исходного текста отдельным значением ключа.
М-последовательности также популярны, благодаря относительной легкости их реализации.
М-последовательности представляют собой линейные рекуррентные последовательности максимального периода, формируемые k-разрядными генераторами на основе регистров сдвига. На каждом такте поступивший бит сдвигает k предыдущих и к нему добавляется их сумма по модулю 2. Вытесняемый бит добавляется к гамме.
Строго это можно представить в виде следующих отношений:
r1:=r0 r2:=r1 ... rk-1:=rk-2
r0:=a0 r1 Å a1 r2 Å ... Å ak-2 rk-1
Гi:= rk-
Здесь r0 r1 ...rk-1- k однобитных регистров, a0 a1 ...ak-1 - коэффициенты неприводимого двоичного полинома степени k-1. Гi - i-е значение выходной гаммы.
Период М-последовательности исходя из ее свойств равен 2k-1.
Другим важным свойством М-последовательности является объем ансамбля, т.е. количество различных М-последовательностей для заданного k. Эта характеристика приведена в таблице:
k |
Объем ансамбля |
5 |
6 |
6 |
8 |
7 |
18 |
8 |
16 |
9 |
48 |
10 |
60 |
16 |
2048 |
Очевидно, что такие объемы ансамблей последовательности неприемлемы.
Поэтому на практике часто используют последовательности Голда, образующиеся суммированием нескольких М-последовательностей. Объем ансамблей этих последовательностей на несколько порядков превосходят объемы ансамблей порождающих М-последовательностей. Так при k=10 ансамбль увеличивается от 1023(М-последовательности) до 388000.
Также перспективными представляются нелинейные датчики ПСП (например сдвиговые регистры с элементом И в цепи обратной связи), однако их свойства еще недостаточно изучены.
Возможны и другие, более сложные варианты выбора порождающих чисел для гаммы шифра.
Шифрование с помощью датчика ПСЧ является довольно распространенным криптографическим методом. Во многом качество шифра, построенного на основе датчика ПСЧ, определяется не только и не столько характеристиками датчика, сколько алгоритмом получения гаммы. Один из фундаментальных принципов криптологической практики гласит, даже сложные шифры могут быть очень чувствительны к простым воздействиям.
Важной задачей в обеспечении гарантированной безопасности информации в ИС является разработка и использования стандартных алгоритмов шифрования данных. Первым средиподобных стандартов стал американский DES, представляющий собой последовательное использование замен и перестановок. В настоящее время все чаще говорят о неоправданной сложности и невысокой криптостойкости. На практике приходится использовать его модификации.
Более эффективным является отечественный стандарт шифрования данных.
Он рекомендован к использованию для защиты любых данных, представленных в виде двоичного кода, хотя не исключаются и другие методы шифрования. Данный стандарт формировался с учетом мирового опыта, и в частности, были приняты во внимание недостатки и нереализованные возможности алгоритма DES, поэтому использование стандарта ГОСТ предпочтительнее. Алгоритм достаточно сложен и ниже будет описана в основном его концепция.
Введем ассоциативную операцию конкатенации, используя для нее мультипликативную запись. Кроме того будем использовать следующие операции сложения:
· ÅB - побитовое сложение по модулю 2;
· 32;
· 32-1;.
Алгоритм криптографического преобразования предусматривает несколько режимов работы. Во всех режимах используется ключ W длиной 256 бит, представляемый в виде восьми 32-разрядных чисел x(i).
W=X(7)X(6)X(5)X(4)X(3)X(2)X(1)X(0)
Для дешифрования используется тот же ключ, но процесс дешифрования является инверсным по отношению к исходному.
Самый простой из возможных режимов - замена.
Пусть открытые блоки разбиты на блоки по 64 бит в каждом, которые обозначим как T(j).
Очередная последовательность бит T(j) разделяется на две последовательности B(0) и A(0) по 32 бита (правый и левый блоки). Далее выполняется итеративный процесс шифрования описываемый следующими формулами, вид который зависит от :i:
· mod 8;
A(i) = f(A(i-1) [+] x(j)) Å B(i-1)
B(i) = A(i-1)
·
A(i) = f(A(i-1) [+] x(j)) Å B(i-1)
B(i) = A(i-1)
·
A(32) = A(31)
B(32) = f(A(31) [+] x(0)) Å B(31).
Здесь i обозначает номер итерации. Функция f – функция шифрования.
Функция шифрования включает две операции над 32-разрядным аргументом.
Первая операция является подстановкой K. Блок подстановки К состоит из 8 узлов замены К(1)...К(8) с памятью 64 бита каждый. Поступающий на блок подстановки 32-разрядный вектор разбивается на 8 последовательно идущих 4-разрядных вектора, каждый из который преобразуется в 4-разрядный вектор соответствующим узлом замены, представляющим из себя таблицу из 16 целых чисел в диапазоне 0...15. Входной вектор определяет адрес строки в таблице, число из которой является выходным вектором. Затем 4-разрядные векторы последовательно объединяются в 32-разрядный выходной.
Вторая операция - циклический сдвиг влево 32-разрядного вектора, полученного в результате подстановки К. 64-разрядный блок зашифрованных данных Т представляется в виде
Т=А(32)В(32).
Остальные блоки открытых данных в режиме простой замены зашифровываются аналогично.
Следует учитывать, что данный режим шифрования обладает ограниченной криптостойкостью.
Другой режим шифрования называется режимом гаммирования.
Открытые данные, разбитые на 64-разрядные блоки T(i) (i=1,2,...,m) (m определяется объемом шифруемых данных), зашифровываются в режиме гаммирования путем поразрядного сложения по модулю 2 с гаммой шифра Гш, которая вырабатывается блоками по 64 бит, т.е.
Гш=(Г(1),Г(2),....,Г(m)).
Уравнение шифрования данных в режиме гаммирования может быть представлено в следующем виде:
Ш(i)=A(Y(i-1) Å C2, Z(i-1)) {+} C(1) Å T(i)=Г(i) Å T(i)
В этом уравнении Ш(i) обозначает 64-разрядный блок зашифрованного текста, А - функцию шифрования в режиме простой замены (аргументами этой функции являются два 32-разрядных числа). С1 и С2 - константы, заданные в ГОСТ 28147-89. Величины y(i) и Z(i) определяются итерационно по мере формирования гаммы следующим образом:
(Y(0),Z(0))=A(S), S - 64-разрядная двоичная последовательность
(Y(i),Z(i))=(Y(i-1) [+] C2, Z(i-1) {+} C(1)), i=1, 2, ..., m.
64-разрядная последовательность, называемая синхропосылкой, не является секретным элементом шифра, но ее наличие необходимо как на передающей стороне, так и на приемной.
Режим гаммирования с обратной связью очень похож на режим гаммирования. Как и в режиме гаммирования открытые данные, разбитые на 64-разрядные блоки T(i), зашифровываются путем поразрядного сложения по модулю 2 с гаммой шифра Гш, которая вырабатывается блоками по 64 бит:
Гш=(Г(1), Г(2), ..., Г(m)).
Уравнение шифрования данных в режиме гаммирования с обратной связью выглядят следующим образом:
Ш(1)=A(S)ÅT(1)=Г(1)ÅT(1),
Ш(i)=A(Ш(i-1)ÅT(i)=Г(i)ÅT(i),i=2, 3, ..., m.
В ГОСТ 28147-89 определяется процесс выработки имитовставки, который единообразен для всех режимов шифрования. Имитовставка - это блок из р бит (имитовставка Ир), который вырабатывается либо перед шифрованием всего сообщения. либо параллельно с шифрованием по блокам. Параметр р выбирается в соответствии с необходимым уровнем имитозащищенности.
Для получения имитовставки открытые данные представляются также в виде блоков по 64 бит. Первый блок открытых данных Т(1) подвергается преобразованию, соответствующему первым 16 циклам алгоритма режима простой замены. Причем в качестве ключа используется тот же ключ, что и для шифрования данных. Полученное 64-разрядно число суммируется с открытым блоком Т(2) и сумма вновь подвергается 16 циклам шифрования для режима простой замены. Данная процедура повторятся для всех m блоков сообщения. Из полученного 64-разрядного числа выбирается отрезок Ир длиной р бит.
Имитовставка передается по каналу связи после зашифрованных данных. На приемной стороне аналогичным образом из принятого сообщения выделяется?имитовставка и сравнивается с полученной откуда?. В случае несовпадения имитовставок сообщение считается ложным.
Они воспользовались тем фактом, что нахождение больших простых чисел в вычислительном отношении осуществляется легко, но разложение на множители произведения двух таких чисел практически невыполнимо. Доказано (теорема Рабина), что раскрытие шифра RSA эквивалентно такому разложению. Поэтому для любой длины ключа можно дать нижнюю оценку числа операций для раскрытия шифра, а с учетом производительности современных компьютеров оценить и необходимое на это время.
Возможность гарантированно оценить защищенность алгоритма RSA стала одной из причин популярности этой СОК на фоне десятков других схем. Поэтому алгоритм RSA используется в банковских компьютерных сетях, особенно для работы с удаленными клиентами (обслуживание кредитных карточек).
В настоящее время алгоритм RSA используется во многих стандартах, среди которых SSL, S-HHTP, S-MIME, S/WAN, STT иPCT.
Рассмотрим математические результаты, положенные в основу этого алгоритма.
Теорема 1. (Малая теорема Ферма.)
Если р - простое число, то
xp-1 = 1 (mod p) (1)
для любого х, простого относительно р, и
xp= х (mod p) (2)
для любого х.
Доказательство. Достаточно доказать справедливость уравнений (1) и (2) для хÎZp. Проведем доказательство методом индукции.
Очевидно, что уравнение (8.2.2) выполняетсяпри х=0 и 1. Далее
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(n) называется число положительных
целых, меньших n и простых
относительно n. n 2 3 4 5 6 7 8 9 10 11 12 j(n) 1 2 2 3 2 6 4 6 4 10 4 Теорема 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. 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. ИТ1 = (93) (mod 33) = 729 (mod 33) = 3, ИТ2= (13) (mod 33) = 1 (mod 33) = 1, ИТ3 = (293) (mod 33) = 24389 (mod 33) = 2. Итак, в реальных системах алгоритм RSA реализуется следующим образом:
каждый пользователь выбирает два больших простых числа, и в соответствии с
описанным выше алгоритмом выбирает два простых числа e и d. Как результат
умножения первых двух чисел (p и q) устанавливается n. {e,n} образует открытый
ключ, а {d,n} - закрытый (хотя можно
взять и наоборот). Открытый ключ публикуется и доступен каждому, кто желает
послать владельцу ключа сообщение, которое зашифровывается указанным
алгоритмом. После шифрования, сообщение невозможно раскрыть с помощью
открытого ключа. Владелец же закрытого ключа без труда может расшифровать
принятое сообщение. В настоящее время алгоритм RSA активно реализуется как в виде самостоятельных
криптографических продуктов[8],
так и в качестве встроенных средств в популярных приложениях[9]. Важная проблема практической реализации - генерация больших простых чисел. Решение задачи «в лоб» - генерация
случайного большого числа n(нечетного)
и проверка его делимости на множители от 3 вплоть до n0.5. В случае неуспеха следует
взять n+2 и так далее.[10]
В принципе в качестве p и q можно использовать «почти» простые числа, то есть числа для
которых вероятность того, что они простые, стремится к 1. Но в случае, если
использовано составное число, а не простое, криптостойкость RSA падает. Имеются неплохие алгоритмы,
которые позволяют генерировать «почти» простые числа с уровнем доверия 2-100. Другая проблема - ключи какой
длины следует использовать?
Для практической реализации алгоритмов
RSA полезно знать оценки трудоемкости разложения простых чисел различной
длины, сделанные Шроппелем. log10 n Число операций Примечания 50 1.4*1010 Раскрываем на
суперкомпьютерах 100 2.3*1015 На пределе современных
технологий 200 1.2*1023 За пределами современных
технологий 400 2.7*1034 Требует существенных
изменений в технологии 800 1.3*1051 Не раскрываем В конце 1995 года удалось практически реализовать раскрытие
шифра RSA для 500-значного ключа. Для этого с помощью сети Интернет
было задействовано 1600 компьютеров. Сами авторы RSA рекомендуют
использовать следующие размеры модуляn: ·
·
·
[11] Третий немаловажный аспект реализации RSA - вычислительный. Ведь приходится использовать аппарат длинной
арифметики. Если используется ключ длиной k бит, то для операций по
открытому ключу требуется О(k2)
операций, по закрытому ключу - О(k3)
операций, а для генерации новых ключей требуется О(k4)операций. Криптографический пакет BSAFE 3.0(RSA D.S.) на компьютере Pentium-90 осуществляет
шифрование со скоростью 21.6 Кбит/c для 512-битного ключа и со скоростью 7.4 Кбит/c для 1024 битного. Самая «быстрая»
аппаратная реализация обеспечивает скорости в 60 раз больше. По сравнению с тем же алгоритмом DES, RSA требует
в тысячи и десятки тысяч раз большее время.
Практическая реализация
RSA
[12].
В отличие от RSA метод Эль-Гамаля основан на проблеме дискретного логарифма. Этим он похож на алгоритм Диффи-Хелмана. Если возводить число в степень в конечном поле достаточно легко, то восстановить аргумент по значению (то есть найти логарифм) довольно трудно.
Основу системы составляют параметры pи g - числа, первое из которых - простое, а второе - целое.
Александр генерирует секретный ключ а и вычисляет открытый ключ y = gаmod p. Если Борис хочет послать Александру сообщение m, то он выбирает случайное число k, меньшее p и вычисляет
y1= gk mod p и
y2= m Å yk,
где Å означает побитовое сложение по модулю 2. Затем Борис посылает (y1,y2) Александру.
Александр, получив зашифрованное сообщение, восстанавливает его:
m = (y1a mod p)Åy2.
Алгоритм цифровой подписи DSA, разработанный NIST (National Institute of Standard and Technology) и являющийся частью стандарта DSS частично опирается на рассмотренный метод.
Из определения следует, что для любой хэш-функции есть тексты-близнецы - имеющие одинаковое значение хэш-функции, так как мощность множества аргументов неограниченно больше мощности множества значений. Такой факт получил название «эффект дня рождения».[15]
Наиболее известные из хэш-функций - MD2, MD4, MD5 и SHA.
Три алгоритма серии MD разработаныРивестом в 1989-м, 90-м и 91-м году соответственно. Все они преобразуют текст произвольной длины в 128-битную сигнатуру.
Алгоритм MD2 предполагает:
·
· ;
·
·
Алгоритм MD4предусматривает:
·
·
· Damgard-Merkle[16], причем каждый блок участвует в трех разных циклах.
В алгоритме MD4 довольно быстро были найдены «дыры», поэтому он был заменен алгоритмом MD5, в котором каждый блок участвует не в трех, а в четырех различных циклах.
Алгоритм SHA (Secure Hash Algorithm) разработан NIST (National Institute of Standard and Technology) и повторяет идеи серии MD. В SHA используются тексты более 264 бит, которые закрываются сигнатурой длиной 160 бит. Данный алгоритм предполагается использовать в программе Capstone[17].
Другим, иногда более эффективным методом потокового шифрования является шифрование блоками. Т.е. накапливается фиксированный объем информации (блок), а затем преобразованный некоторым криптографическим методом передается в канал связи.
Разработка и реализация таких универсальных методов - перспектива современных информационных систем[21].
Таким образом, выбор типа реализации криптозащиты для конкретной ИС в существенной мере зависит от ее особенностей и должен опираться на всесторонний анализ требований, предъявляемых к системе защиты информации.
[2] Здесь и далее m - объем используемого алфавита.
[3] n-граммой называется последовательность из n символов алфавита.
[4] К вопросу о том, существует ил не существует абсолютно надежная криптосистема.
[5] Материал предоставлен Ю. Г. Писаревым
[6] ГОСТ 28147-89 закрыт грифом ДСП поэтому дальнейшее изложение сделано по изданию Спесивцев А.В. и др. «Защита информации в персональных ЭВМ», М., Радио и связь, 1992.
[7] В настоящее время он возглавляет компанию RSA Data Security
[8] Например, в нашумевшей программе PGP
[9] В браузерах Интернет от Microsoft и Netscape
[10] В теории чисел показано, что вероятность того, что число порядка n будет простым составляет 1/ln n
[11] Данные оценки сделаны с учетом развития вычислительной техники вплоть до 2004 года.
[12] Однако общего мнения по поводу предпочтительности того или иного метода нет.
[13] В РФ принятые стандарты цифровой подписи Р38 и Р39, также как и ГОСТ 28147-89 имеют гриф ДСП
[14] При этом разделяют слабую и сильную однозначность. При слабой однозначности для заданного значения T практически невозможно отыскать другой текст Т’, для которого H(k, T) = H(k, T’). При сильной однозначности для любого текста T невозможно найти другой подходящий текст, имеющий то же значение хэш-функции.
[15] Факт теории вероятностей: в группе из 23 человек с вероятностью больше 0.5 два и более человека родились в одно и то же число.
[16] В отличие от хэш-функции - этот класс преобразований предполагает вычисление для аргументов фиксированной длины также фиксированных по длине значений.
[17] Государственная программа США, предполагающая централизованное хранение всех ключей, используемых организациями а частными лицами.
[18]Отчасти это метод похож на гаммирование и информацию о способах генерации ПСП можно почерпнуть из соответствующей главы. Но важным отличием потокового шифрования является то, что шифрованию подвергаются не символы сообщения, а отдельные биты.
[19] Данный алгоритм является собственностью RSA Data Security, и на его экспорт правительством США наложены серьезные ограничения.
[20] Принципиально важно с точки зрения криптостойкости, чтобы сначала осуществлялось сжатие информации а потом шифрование, но не наоборот.
[21] Так, в криптографическом пакете PGP перед шифрованием информации происходит ее сжатие по алгоритму, лицензированному у PKWARE.
[22] А то и просто специализированный шифровальный микропроцессор как, например, Clipper/