Один из самых распространенных алгоритмов шифрования - DES
(Data Encryption Standart) - разработан в середине 70-x годов.
Он используется во многих криптографических системах. Это
блочный алгоритм шифрования с симметричным ключом. Ключ
состоит из 64 битов, но лишь 56 из них применяются
непосредственно при шифровании. Оставшиеся 8 предназначены для
контроля четности: они устанавливаются так, чтобы каждый из 8
байтов ключа имел нечетное значение. Шифруемая информация
обрабатывается блоками по 64 бита, причем каждый блок
модифицируется с помощью ключа в интерационной процедуре,
включающей 16 циклов. В данный момент при длине ключа в 56 битов алгоритм
считается не устойчивым к взлому.
Для большой надежности можно задействовать алгоритм
Triple-DES (http://www.inroad.kiev.ua/prog/3des.htm).
Поскольку DES - федеральный стандарт США, его обычно не
используют в программных продуктах, предназначенных для
экспорта а если и используют то длина ключа не может превышать
56 битов.
Что такое RC5
RC5 это довольно-таки быстрый блочный шифр разработанный
Ривестом для RSA Data Security. Этот алгоритм параметричен,
т.е. с переменным размером блока, длинной ключа и переменным
числом проходов. Размер блока может быть 32, 64, или 128
битов. Количество проходов в промежутке от 0 до 2048 бит.
Параметричность такого рода дает гибкость и эффективность
шифрования.
RC5 состоит из ввода ключа (key expansion), шифрования и
дешифрования. При вводе ключа вводятся также количество
проходов, размер блока и т.д. Шифрование состоит из 3
примитивных операций : сложения, побитового XOR и чередования
(rotation). Исключительная простота RC5 делает его простым в
использовании, RC5 текст, также как и RSA, может быть дописан
в конец письма в зашифрованном виде.
Безопасность RC5 основывается на зависящем от данных
чередованием и смешиванием результатов различных операций. RC5
с размером блока 64 бита и 12 или более проходов обеспечивает
хорошую стойкость против дифференциального и линейного
криптанализов.
Что такое RSA
RSA - один из первых и весьма популярный алгоритм
шифрования с открытым ключом - разработан основателями фирмы
RSA (Rivest, Shmir, Adleman) в конце 70-x годов и назван по
первымбуквам их фамилий.
Степень устойчивости зашифрованной информации к взлому, а
также невозможность по открытому ключу восстановить закрытый
определяются трудностью факторизации больших чисел и зависят
от длины ключа.
Сейчас ключи длиной 512 битов рассматриваются как
недостаточно устойчивые, поэтому в криптографическом
программном обеспечении рекомендуются 768 или 1024 битные
ключи.
Часто используют комбинированный подход: сначала сообщение
кодируются с помощью некоторого ключа по алгоритму типа DES, а
затем ключ зашифровывается с применением RSA и передается
вместе с закодированным сообщением. Это позволяет достичь
высокой скорости обработки информации и в то же время
обеспечивает надежную ее защиту.
Краткие основы RSA: 1. Выбираются большие простые числа
M и N; 2. Вычисляется их произведение: Q=MxN; 3.
Выбирается число D, которое должно быть взаимно простым с
результатом умножения (M-1)x(N-1), т.е. не должно иметь с ним
общих делителей, отличных от единицы; 4. Вычисляется число
A из выражения (AxD) mod [(M-1)x(N-1)]=1;
Таким образом, пара чисел (A,Q) будет твоим открытым
ключом, а пара чисел (D,Q) -- закрытым ключом. Понятно, что
открытым ключом можно только закодировать исходный текст, для
того, чтобы его раскодировать, нужен закрытый ключ.
Кодирование числа P: C=M^A mod Q; Обратная операция:
P=C^D mod Q;
Так вот, для того, чтобы поломать PGP (сиречь RSA),
необходимо и достаточно уметь разложить число Q (которое мы
возьмем, понятно, из открытого ключа, помещенного человеком в
бурные воды, скажем, Fido и/или Internet) на простые
множители. Вот тут-то и начинается самое интересное.
Простые множители числа - летопись в теории чисел, над ними
бились многие математики. о увы, так ничего толком и не
добились. В математике не существует теорем, могущих надежно
предсказать, является ли число простым.
Есть теоремы, которые могут быстро установить, что число
составное, но если условия теоремы не выполняются, то это не
значит, что число простое: это значит, что оно ВРОДЕ БЫ
простое, и надо применять более сильные теоремы, которые, увы,
на машине проверяются только перебором. Далее, нет теорем,
которые помогают хотя бы оценить количество простых
сомножителей числа и порядок их величины.
Так что реально число из, скажем, трехсот десятичных знаков
разложить на простые множители (если они, правда не лежат
близко к корню из числа и т.д. -- есть легкие случаи) за
разумное время нереально.
Так, программа на 386SX40 раскладывает число из 17
десятичных знаков за время, близкое к трем минутам, но время
ее работы есть P*exp(n), т.е. число из 300 знаков она будет
раскладывать в exp(280) раз дольше (это около 5.1*10^279).
Естественно, что если взять более быстрое точило, Cray, к
примеру, то будет побыстрее... :) о все равно не слишком.
Правда, есть более быстрые алгоритмы, решето Сива, например,
но они хороши, когда сомножители лежат близко к корню, и
требуют дикое количество памяти.
Источник: About PC |