Это вольный перевод курса статей за авторством Jeffrey Dege.
Предполагается, что вы и без этого курса понимаете основы и ориентируетесь в терминологии криптографии. Например, знаете о частотном анализе и понимаете метод его применения для взлома шифра простой подстановки. Если таких знаний нет — стоит сначала почитать что-нибудь из перечисленного в следующем параграфе.
В сети не так много обучающих крптографии материалов хорошего качества, как для Python:
Для начинающих программистов Mike Cowan написал курс по использованию Python в криптографических целях:
Если вы никогда ранее не программировали, то этот курс — неплохой повод начать. Он (в смысле курс) начинает с введения простейших понятий языков программирования, а в конце приводит к созданию программы для решения многих шифров простой подстановки. И, под конец, упомянем несколько готовых решений для анализа шифров подстановки:
Для демонстрации криптоаналитических способностей Python нам потребуется шифр. Будем использовать Monome-Dinome от Американской Ассоциации Криптограмм (или American Cryptogram Association, далее по тексту ACA). Это такой шифры, в которых знак исходного текста иногда заменяются знаком, а иногда парой знаков (то есть замена моно- и биграммами). Самым знаменитым в этом классе является Straddling Checkerboard. Основная идея состоит в попытке скрыть информацию о частоте с целью усложнить взлом. Ни один из таких шифров нельзя назвать сильным, а Monome-Dinome к тому же содержит в себе уязвимость, которая позволяет взломать его довольно просто .
Ключом является перемешанный алфавит, записанный в матрицу 3х8, столбцы которой нумеруются случайным образом восемью однозначными числами, два оставшихся числа приписываются двум последним строкам. Первая строка остается ненумерованной. Пример:
. 6 2 7 0 4 8 3 9
. P B N E C O R D
5 Q I F U S G V T
1 H X A K Y L M Z
Процесс шифрования прост. Каждая буква открытого текста располагается где-то в таблице. Если она в первой строке — заменяем ее номером столбца. Если нет — заменяем парой (номер столбца, номер строки).
Тогда, в нашем примере буква P
шифруется как 6
, а буква Q
как 56
.
Текст ATTACK AT DAWN
превратится в 17 59 59 17 4 10 17 59 9 17 53 7
,
или в 17595 91741 01759 91753 7
, если записать группами из 5 цифр.
Заметьте, что буква W
воспринимается как синоним к V
и шифруется
как 53
.
Плюс такой замены в размытой связи между открытым текстом и шифротекстом. По цифре в шифротексте невозможно определить — является ли она букву или входит в пару с правой или левой цифрой. А очевидная слабость Monome-Dinome от ACA в том, что цифры из номера строки никогда не появятся в номере столбца, и наоборот. Это создает легко узнаваемые статистические шаблоны. А обнаружение подобного шаблона однозначно ведет к компроментации шифротекста. Другие шифры с подобным методом замены, в том числе и Straddling Chessboard, лишены этого недостатка. Например, в такой:
. 6 2 7 5 0 4 8 1 3 9
. P B N . E C O . R D
5 Q F J U S G V T I W
1 H X A K Y L M Z . .
решетке цифры 1
и 5
встречаются как в номерах строк, так и в номерах
столбцов. И при этом они не могут появиться в одиночку, всегда участвуя в
паре.
Приобретя дополнительную сложность, в сердцевине шифр Monome-Dinome является обычным шифром простой подстановки. Но как только взломщик узнает о природе этой дополнительной сложности, он без труда сможет свести задачу взлома Monome-Dinome к задаче взлома простой подстановки, которую достаточно просто решить. Эта техника — отбрасывание слоев сложности до сведения к простой абстракции — является основой для большого числа методов криптоанализа более сложных шифров. А шифр Monome-Dinome от ACA — легкая мишень для такой методики, из-за чего он и выбран в качестве примера.