Криптография.
С чего все начиналось...
Сокрытие информации от посторонних глаз практиковалось еще с древних времен. Вспомним историю - шифр Г. Ю. Цезаря - алфавит сдвигался относительно самого себя на какое-то определенное число, которое и являлось ключом к расшифровке. К примеру, для ключа, равного четырем, алфавит выглядел следующим образом:
Алфавит исходный: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Алфавит замены: EFGHIJKLMNOPQRSTUVWXYZABCD
То есть, каждая буква незашифрованного слова из верхней строки заменялась тем, что в нижней. Но алгоритм был слаб - его ключ мог иметь всего 26 значений.
В древнем Китае также использовали шифр: на палку определенного диаметра наматывали ленту по спирали, на которой потом сверху вниз записывался текст. Получалось по символу на каждый виток. Затем ленту разматывали и передавали принимающей стороне. Ключом служил диаметр самой палки.
Но настоящая криптография стала использоваться преимущественно в военные времена. Один из достаточно серьезных шифров - машина "Энигма", изобретенная незадолго до времен второй мировой войны. Сообщения, посланные немцами, не могли быть расшифрованиы долгое время, вплоть до захвата самой машины с шифрами. Некоторые даже считают, что захват Энигмы с шифрами сократил войну на пару лет.
Сама по себе машина являлась механической с электрическими контактами и панелью лампочек. Сверху машины находились роторы (барабан с радиально расположенными контактами с обоих сторон), находящиеся друг с другом в электрическом контакте. В каждом роторе был свой набор соединений контактов с одной стороны барабана и с другой. См. ссылку: http://ru.wikipedia.org/wiki/%D0%AD%D0% … 0%BC%D0%B0
При нажатии на кнопку один из роторов проворачивался, электрическая цепь проходила через разные контакты барабанов, на выходе загоралась лампочка зашифрованной нажатой кнопки. Одна и та же нажатая буква зашифровывалась по-разному при каждом нажатии. Ключом служило положение роторов. Таким образом машина организовывала шифр сложной замены.
Современная криптография.
С появлением компьютеров криптография стала необходимостью. Защита электронной переписки, сокрытие важных данных на носителях информации, шифрование потока передаваемых данных и многие другие причины стали шагом к развитию таких программ.
Классификацию алгоритмов шифрования можно произвести по следующей схеме:
- Тайнопись. Алгоритм преобразования сообщения в нечитаемый (зашифрованный) вид, известный только отправителю и получателю сообщения. Никто, кроме этих двух сторон не знает самого алгоритма преобразования данных в шифр.
- Криптография с ключом (ключами). Алгоритм преобразования известен всем, но неизвестен параметр - ключ, от которого зависят преобразования над открытыми данными, выполняемыми в алгоритме.
Криптографию с ключом можно разделить на два подвида:
- Симметричные криптоалгоритмы. Для шифрования и дешифрования сообщения используется один и тот же ключ, известный только отправителю и получателю. Симметричные алгоритмы, применяемые в программах шифрования на данный момент - DES (уходит, слабый), 3DES, IDEA, RC6, Blowfish, Twofish, AES и некоторые другие. Длина ключа у таких алгоритмов - обычно до 256 бит. Исключение составляет Blowfish, у него длина ключа может составлять 448 бит и RC6 (переменная длина ключа до 1024 бит).
- Асимметричные криптоалгоритмы. У отправителя и получателя находится по паре ключей - открытый и закрытый. Пара ключей взаимосвязана. Открытый ключ раздают друг другу по незащищенному каналу. Первый отправляет второму сообщение, шифруя его _открытым ключом второго_. Второй, получив сообщение, расшифровывает его при помощи _своего закрытого ключа_. И наоборот. Получить закрытый ключ, имея только открытый - задача практически непосильная, но возможная. Здесь все зависит от длины ключа. Взлом ключей ассиметричного шифрования сводится к математическим вычислениям огромных чисел, факторизации, разложения на простые множители. Вычислительные мощности требуются огромные. Нынешняя относительно безопасная длина ключа - 2048 бит (для RSA). К асимметричным алгоритмам относятся такие, как RSA, El-Gamal, Криптоалгоритмы, построенные на базе эллиптических кривых (elleptic curves). И, таки да, на основе RSA построена наша всеми любимая программа PGP (хотя все же включает в себя выше перечисленные симметричные алгоритмы, для режимов "Conventional encryption" в коммерческих версиях (без использования асимметричного шифрования) и для защиты закрытого ключа).
В зависимости от размера информации, с которыми работают криптоалгоритмы, их можно разделить на два класса: блочные шифры и поточные шифры. Блочные шифры оперируют с блоками данных по 4..32 байта. Результат шифрования блока - в зависимости от исходных данных на входе в блок.
Поточные шифры - шифры, в которых по определенному алгоритму, в зависимости от входных данных ключа, генерируется последовательность битов, которая накладывается на поток открытых данных, складываясь с ним по модулю 2 (функция XOR).
Операции над битами:
0 xor 0 = 0;
0 xor 1 = 1;
1 xor 0 = 1;
1 xor 1 = 0;
На принимающей стороне происходит тот же самый процесс: генерация потока из входного ключа и сложение его по модулю 2 с шифротекстом (функция XOR обратима), и получаются открытые данные.
Самым распространенным видом поточного шифра является скремблер. Ниже рассмотрим его работу.
Пусть имеются данные (100101), полученные при помощи функции из ключа:
Разряды: 1 2 3 4 5 6
+-> 1 0 0 1 0 1 -------> [выход]
| | | |
+--------X---X---------+
X - функция XOR. На псевдорисунке видим, что для генерации последовательности взяты разряды 2, 3 и 5 (не важно, сколько бит в самой последовательности, и сколько взято разрядов для генерации, это всего лишь пример).
Первая операция, которая происходит в нашем скремблере - сложение XOR битов в разрядах 2, 3 и 5.
0 xor 0 xor 0 = 0;
Результат сложения мы получили 0. Теперь вся последовательность сдвигается вправо, только что полученный бит помещается в разряд 1 (по стрелке), а бит из разряда 6 уходит на выход (его место "занимает" бит 5). Теперь наш скремблер имеет следующий вид:
Разряды: 1 2 3 4 5 6
+-> 0 1 0 0 1 0 -------> [1]
| | | |
+--------X---X---------+
Выходной бит [1] накладывается функцией XOR на первый бит последовательности открытых данных, шифруя ее.
В скремблере операция сложения разрядов 2, 3, 5 повторяется.
1 xor 0 xor 1 = 0
Скремблер имеет вид:
Разряды: 1 2 3 4 5 6
+-> 0 0 1 0 0 1 -------> [0] 1
| | | |
+--------X----X-------+
Теперь на выходе из разряда 6 имеем бит [0], накладывающийся на второй бит шифруемой последовательности.
И так далее. Неоспоримое достоинство - скремблер легко может быть реализован как на программной базе, так и на электронной.
Да, все это просто, но скремблеры не лишены недостатков. Один из них - синхронизация передачи на одной стороне и приема на другой. В случае смещения принятой последовательности и последовательности, генерирующейся скремблером хотя бы на 1 бит, с этого места информация полностью теряется. Поэтому синхронизации необходимо уделять особое внимание. Второй недостаток - через определенный период скремблер "зацикливается", то есть начинает генерировать ту же последовательность с начала, что в последствии может привести к раскрытию передаваемых данных.
Случайные и псевдослучайные числа.
Алгоритмы шифрования требуют для своей работы наличия случайных и псевдослучайных чисел. Например - сеансовый ключ PGP (временно создаваемый программой) при отправке шифрованного сообщения. Вся проблема в том, что получить абслоютно случайный набор чисел на компьютере без аппаратных средств невозможно. Компьютер создает случайные числа из кучи событий системы, используя прерывания, системный таймер, интервал нажатия клавиш, движения мышки... Но абсолютно случайные числа можно получить аппаратным методом, используя. к примеру, генераторы шума на стабилитронах, излучение при распаде радиоактивных металлов и другое. Псевдослучайные числа - такие числа, которые обладают свойствами случайных последовательностей, но генерируются по определенному закону. Пример - выше (скремблер). От реализации таких генераторов напрямую зависит стойкость криптоалгоритма. Генераторы псевдослучайных чисел лежат в основе многих симметричных алгоритмов шифрования.
С чего все начиналось...
Сокрытие информации от посторонних глаз практиковалось еще с древних времен. Вспомним историю - шифр Г. Ю. Цезаря - алфавит сдвигался относительно самого себя на какое-то определенное число, которое и являлось ключом к расшифровке. К примеру, для ключа, равного четырем, алфавит выглядел следующим образом:
Алфавит исходный: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Алфавит замены: EFGHIJKLMNOPQRSTUVWXYZABCD
То есть, каждая буква незашифрованного слова из верхней строки заменялась тем, что в нижней. Но алгоритм был слаб - его ключ мог иметь всего 26 значений.
В древнем Китае также использовали шифр: на палку определенного диаметра наматывали ленту по спирали, на которой потом сверху вниз записывался текст. Получалось по символу на каждый виток. Затем ленту разматывали и передавали принимающей стороне. Ключом служил диаметр самой палки.
Но настоящая криптография стала использоваться преимущественно в военные времена. Один из достаточно серьезных шифров - машина "Энигма", изобретенная незадолго до времен второй мировой войны. Сообщения, посланные немцами, не могли быть расшифрованиы долгое время, вплоть до захвата самой машины с шифрами. Некоторые даже считают, что захват Энигмы с шифрами сократил войну на пару лет.
Сама по себе машина являлась механической с электрическими контактами и панелью лампочек. Сверху машины находились роторы (барабан с радиально расположенными контактами с обоих сторон), находящиеся друг с другом в электрическом контакте. В каждом роторе был свой набор соединений контактов с одной стороны барабана и с другой. См. ссылку: http://ru.wikipedia.org/wiki/%D0%AD%D0% … 0%BC%D0%B0
При нажатии на кнопку один из роторов проворачивался, электрическая цепь проходила через разные контакты барабанов, на выходе загоралась лампочка зашифрованной нажатой кнопки. Одна и та же нажатая буква зашифровывалась по-разному при каждом нажатии. Ключом служило положение роторов. Таким образом машина организовывала шифр сложной замены.
Современная криптография.
С появлением компьютеров криптография стала необходимостью. Защита электронной переписки, сокрытие важных данных на носителях информации, шифрование потока передаваемых данных и многие другие причины стали шагом к развитию таких программ.
Классификацию алгоритмов шифрования можно произвести по следующей схеме:
- Тайнопись. Алгоритм преобразования сообщения в нечитаемый (зашифрованный) вид, известный только отправителю и получателю сообщения. Никто, кроме этих двух сторон не знает самого алгоритма преобразования данных в шифр.
- Криптография с ключом (ключами). Алгоритм преобразования известен всем, но неизвестен параметр - ключ, от которого зависят преобразования над открытыми данными, выполняемыми в алгоритме.
Криптографию с ключом можно разделить на два подвида:
- Симметричные криптоалгоритмы. Для шифрования и дешифрования сообщения используется один и тот же ключ, известный только отправителю и получателю. Симметричные алгоритмы, применяемые в программах шифрования на данный момент - DES (уходит, слабый), 3DES, IDEA, RC6, Blowfish, Twofish, AES и некоторые другие. Длина ключа у таких алгоритмов - обычно до 256 бит. Исключение составляет Blowfish, у него длина ключа может составлять 448 бит и RC6 (переменная длина ключа до 1024 бит).
- Асимметричные криптоалгоритмы. У отправителя и получателя находится по паре ключей - открытый и закрытый. Пара ключей взаимосвязана. Открытый ключ раздают друг другу по незащищенному каналу. Первый отправляет второму сообщение, шифруя его _открытым ключом второго_. Второй, получив сообщение, расшифровывает его при помощи _своего закрытого ключа_. И наоборот. Получить закрытый ключ, имея только открытый - задача практически непосильная, но возможная. Здесь все зависит от длины ключа. Взлом ключей ассиметричного шифрования сводится к математическим вычислениям огромных чисел, факторизации, разложения на простые множители. Вычислительные мощности требуются огромные. Нынешняя относительно безопасная длина ключа - 2048 бит (для RSA). К асимметричным алгоритмам относятся такие, как RSA, El-Gamal, Криптоалгоритмы, построенные на базе эллиптических кривых (elleptic curves). И, таки да, на основе RSA построена наша всеми любимая программа PGP (хотя все же включает в себя выше перечисленные симметричные алгоритмы, для режимов "Conventional encryption" в коммерческих версиях (без использования асимметричного шифрования) и для защиты закрытого ключа).
В зависимости от размера информации, с которыми работают криптоалгоритмы, их можно разделить на два класса: блочные шифры и поточные шифры. Блочные шифры оперируют с блоками данных по 4..32 байта. Результат шифрования блока - в зависимости от исходных данных на входе в блок.
Поточные шифры - шифры, в которых по определенному алгоритму, в зависимости от входных данных ключа, генерируется последовательность битов, которая накладывается на поток открытых данных, складываясь с ним по модулю 2 (функция XOR).
Операции над битами:
0 xor 0 = 0;
0 xor 1 = 1;
1 xor 0 = 1;
1 xor 1 = 0;
На принимающей стороне происходит тот же самый процесс: генерация потока из входного ключа и сложение его по модулю 2 с шифротекстом (функция XOR обратима), и получаются открытые данные.
Самым распространенным видом поточного шифра является скремблер. Ниже рассмотрим его работу.
Пусть имеются данные (100101), полученные при помощи функции из ключа:
Разряды: 1 2 3 4 5 6
+-> 1 0 0 1 0 1 -------> [выход]
| | | |
+--------X---X---------+
X - функция XOR. На псевдорисунке видим, что для генерации последовательности взяты разряды 2, 3 и 5 (не важно, сколько бит в самой последовательности, и сколько взято разрядов для генерации, это всего лишь пример).
Первая операция, которая происходит в нашем скремблере - сложение XOR битов в разрядах 2, 3 и 5.
0 xor 0 xor 0 = 0;
Результат сложения мы получили 0. Теперь вся последовательность сдвигается вправо, только что полученный бит помещается в разряд 1 (по стрелке), а бит из разряда 6 уходит на выход (его место "занимает" бит 5). Теперь наш скремблер имеет следующий вид:
Разряды: 1 2 3 4 5 6
+-> 0 1 0 0 1 0 -------> [1]
| | | |
+--------X---X---------+
Выходной бит [1] накладывается функцией XOR на первый бит последовательности открытых данных, шифруя ее.
В скремблере операция сложения разрядов 2, 3, 5 повторяется.
1 xor 0 xor 1 = 0
Скремблер имеет вид:
Разряды: 1 2 3 4 5 6
+-> 0 0 1 0 0 1 -------> [0] 1
| | | |
+--------X----X-------+
Теперь на выходе из разряда 6 имеем бит [0], накладывающийся на второй бит шифруемой последовательности.
И так далее. Неоспоримое достоинство - скремблер легко может быть реализован как на программной базе, так и на электронной.
Да, все это просто, но скремблеры не лишены недостатков. Один из них - синхронизация передачи на одной стороне и приема на другой. В случае смещения принятой последовательности и последовательности, генерирующейся скремблером хотя бы на 1 бит, с этого места информация полностью теряется. Поэтому синхронизации необходимо уделять особое внимание. Второй недостаток - через определенный период скремблер "зацикливается", то есть начинает генерировать ту же последовательность с начала, что в последствии может привести к раскрытию передаваемых данных.
Случайные и псевдослучайные числа.
Алгоритмы шифрования требуют для своей работы наличия случайных и псевдослучайных чисел. Например - сеансовый ключ PGP (временно создаваемый программой) при отправке шифрованного сообщения. Вся проблема в том, что получить абслоютно случайный набор чисел на компьютере без аппаратных средств невозможно. Компьютер создает случайные числа из кучи событий системы, используя прерывания, системный таймер, интервал нажатия клавиш, движения мышки... Но абсолютно случайные числа можно получить аппаратным методом, используя. к примеру, генераторы шума на стабилитронах, излучение при распаде радиоактивных металлов и другое. Псевдослучайные числа - такие числа, которые обладают свойствами случайных последовательностей, но генерируются по определенному закону. Пример - выше (скремблер). От реализации таких генераторов напрямую зависит стойкость криптоалгоритма. Генераторы псевдослучайных чисел лежат в основе многих симметричных алгоритмов шифрования.
Комментарий