Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
40_алгоритмов_Python.pdf
Скачиваний:
9
Добавлен:
07.04.2024
Размер:
13.02 Mб
Скачать

312

Глава 12. Криптография

Как правило, более сложные системы безопасности работают намного медленнее, чем простые алгоритмы. Важно найти правильный баланс между безопасностью и производительностью системы.

Базовое устройство шифров

Разработка шифра заключается в создании алгоритма, который способен за­ шифровать данные так, чтобы вредоносная программа или неавторизованный пользователь не смогли получить к ним доступ. Хотя со временем шифры ста­ новятся все более и более сложными, их основа остается неизменной.

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

Шифры подстановки

Различные формы шифров подстановки (substitution ciphers) использовались на протяжении сотен лет. Как следует из названия, они основаны на простой кон­ цепции — замене символов в открытом тексте на другие символы заранее опре­ деленным способом.

Рассмотрим необходимые для этого шаги.

1.Сопоставить каждый элемент с замещающим символом.

2.Преобразовать открытый текст в зашифрованный, заменяя каждый символ согласно таблице подстановок.

3.Для декодирования восстановить открытый текст с помощью таблицы под­ становок.

Рассмотрим два примера.

zz Шифр Цезаря

В шифре Цезаря таблица подстановок создается путем замены каждого символа третьим символом справа от него. Этот процесс представлен на следующей диаграмме (рис. 12.1).

Реализуем шифр Цезаря с помощью Python:

import string rotation = 3

P = 'CALM'; C='' for letter in P:

C = C+ (chr(ord(letter) + rotation))

Введение в криптографию

 

 

 

 

 

 

 

313

Y Z A B C

D

E

F

G

H

 

 

 

 

 

 

 

 

 

 

 

A B

C

D

E

F

G

H

I

J

 

 

 

 

 

 

 

 

 

Y Z A B

C

D

E

F

G

H

 

 

 

 

Рис. 12.1

 

 

 

 

 

Шифр применен к открытому тексту CALM.

 

 

 

 

Выведем зашифрованный текст после преобразования с помощью шифра Цезаря (рис. 12.2).

Рис. 12.2

Считается, что шифр Цезаря использовался Юлием Цезарем для связи со своими советниками.

zz Rotation 13 (ROT13)

ROT13 — это еще одно шифрование на основе подстановки. В ROT13 табли­ ца подстановок создается путем замены каждого символа 13-м символом справа от него. Это показано на следующей схеме (рис. 12.3).

A B C D E F G H I J K L M

N O P Q R S T U V W X Y Z

Рис. 12.3

314

Глава 12. Криптография

Если ROT13() является функцией, реализующей ROT13, то можно записать это так:

import codecs P = 'CALM'

C=''

C=codecs.encode(P, 'rot_13')

Теперь выведем закодированное значение C (рис. 12.4).

Рис. 12.4

Криптоанализ шифров подстановки

Шифры подстановки просты в реализации и понимании. К сожалению, их столь же легко взломать. Простой криптоанализ показывает, что если в шифре ис­ пользуется английский (или любой другой известный) алфавит, то все, что нужно знать для взлома, — это величина сдвига. Можно проверять каждую букву алфавита одну за другой, пока текст не будет расшифрован. Это значит, что для восстановления открытого текста потребуется около 25 попыток (для английского языка).

Теперь рассмотрим другой метод простого шифрования — перестановочные шифры.

Перестановочные шифры

В перестановочных шифрах (transposition ciphers) символы открытого исход­ ного текста меняются местами. Для этого необходимо проделать следующие шаги.

1.Создать матрицу перестановок, выбрав ее размер. Она должна быть доста­ точно большой, чтобы вместить строку открытого текста.

2.Заполнить матрицу, записав все символы строки по горизонтали.

3.Прочитать в матрице все символы строки по вертикали.

Рассмотрим пример.

Давайте возьмем открытый текст Ottawa Rocks (P).