Симметричные алгоритмы шифрования

Алгоритм шифрования RSA

 

RSA – криптографическая система открытого ключа, обеспечивающая такие механизмы защиты как шифрование и цифровая подпись (аутентификация – установление подлинности). Криптосистема RSA разработана в 1977 году и названа в честь ее разработчиков: Rivest, Shamir и Adleman.

 

Алгоритм RSA работает следующим образом: берутся два достаточно больших простых числа p и q и вычисляется их произведение n = p*q; n называется модулем.

Затем выбирается число e, удовлетворяющее условию:

1< e < (p-1)*(q-1)

и не имеющее общих делителей кроме 1 (взаимно простое) с числом (p-1)*(q-1).

Затем вычисляется число d таким образом, что (e*d - 1) делится на

(p-1)*(q – 1).

e – открытый (public) показатель

d – секретный (private) показатель.

(n; e) – открытый (public) ключ

(n; d) – секретный (private) ключ.

 

Делители (факторы) p и q можно либо уничтожить либо сохранить вместе с секретным (private) ключом.

 

Если бы существовали эффективные методы разложения на сомножители (факторинга), то, разложив n на сомножители (факторы) p и q, можно было бы получить секретный (private) ключ d. Таким образом надежность криптосистемы RSA основана на трудноразрешимой – практически неразрешимой – задаче разложения n на сомножители (то есть на невозможности факторинга n) так как в настоящее время эффективного способа поиска сомножителей не существует.

 


Предположим, Алиса хочет послать Бобу сообщение M. Алиса создает зашифрованный текст С, возводя сообщение M в степень e и умножая на модуль n: C = M**e* (mod n), где e и n – открытый (public) ключ Боба.

 

Затем Алиса посылает С (зашифрованный текст) Бобу. Чтобы расшифровать полученный текст, Боб возводит полученный зашифрованный текст C в степень d и умножает на модуль n:

 

M = c**d*(mod n); зависимость между e и d гарантирует, что Боб вычислит M верно. Так как только Боб знает d, то только он имеет возможность расшифровать полученное сообщение.

 

В настоящее время Лаборатория RSA рекомендует для обычных задач ключи размером 1024 бита, а для особо важных задач – 2048 битов.

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

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


DES

 

DES (Data Encryption Standart) это алгоритм с симметричными ключами, т.е. один ключ используется как для шифровки, так и для расшифровки сообщений. Разработан фирмой IBM и утвержден правительством США в 1977 как официальный стандарт

 

DES имеет блоки по 64 бит и основан на 16 кратной перестановке данных, также для шифрования использует ключ в 56 бит. Существует несколько режимов DES, например Electronic Code Book (ECB) и Cipher Block Chaining (CBC).

56 бит - это 8 семибитовых ASCII символов, т.е. пароль не может быть больше чем 8 букв. Если вдобавок использовать только буквы и цифры, то количество возможных вариантов будет существенно меньше максимально возможных 2^56.

 

Один из шагов алгоритма DES:

Входной блок данных делится пополам на левую (L') и правую (R') части. После этого формируется выходной массив так, что его левая часть L'' представлена правой частью R' входного, а правая R'' формируется как сумма L' и R' операций XOR. Далее, выходной массив шифруется перестановкой с заменой. Можно убедиться, что все проведенные операции могут быть обращены и расшифровывание осуществлятся за число операций, линейно зависящее от размера блока. После нескольких таких взбиваний можно считать, что каждый бит выходного блока шифровки может зависеть от каждого бита сообщения.

 


Rijndael (AES, Advanced Encryption Standard)

Данный алгоритм разработан двумя специалистами по криптографии из Бельгии. Он является нетрадиционным блочным шифром, поскольку не использует сеть Фейштеля для криптопреобразований. Алгоритм представляет каждый блок кодируемых данных в виде двумерного массива байт размером 4х4, 4х6 или 4х8 в зависимости от установленной длины блока. Далее на соответствующих этапах преобразования производятся либо над независимыми столбцами, либо над независимыми строками, либо вообще над отдельными байтами в таблице.

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

 

Алгоритм состоит из некоторого количества раундов (от 10 до 14 – это зависит от размера блока и длины ключа), в которых последовательно выполняются следующие операции:

 

ByteSub – табличная подстановка 8х8 бит,

 

ShiftRow – сдвиг строк в двумерном массиве на различные смещения,


 

MixColumn – математическое преобразование, перемешивающее данные внутри столбца,

 

AddRoundKey – добавление материала ключа операцией XOR.

 

В последнем раунде операция перемешивания столбцов отсутствует, что делает всю последовательность операций симметричной.


 

Симметричные алгоритмы шифрования

 

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

 

Шифрование и расшифрование в симметричных криптографических алгоритмах задаются уже знакомыми формулами:

Ек(Р) = С

Dк(С) = Р

 

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

 

Примеры симметричных блочных алгоритмов шифрования: DES, AES, IDEA, CAST, SAFER, 3-WAY, CRAB, RC5, Blowfish, GOST и др.