Здравствуйте, уважаемые читатели!
Сегодня я бы хотел вам немного рассказать о работе таких замечательных методов защиты информации, как шифр Цезаря, Полибия, Виженера и Линейного шифра.
После краткого экскурса, я познакомлю вас с их алгоритмами и реализациями на языке C#. Все эти шифры в той или иной степени используются в современном криптоаналитике.
Всем, кому интересно, прошу под кат.
Шифр Цезаря
Шифр Цезаря, названный в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки, — один из древнейших шифров. При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций. Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами модульной арифметики:
y = (x + k) mod n
x = (y + n — (k mod n)) mod n,
где x— символ открытого текста, y — символ зашифрованного текста, n — мощность алфавита, а k — ключ.
Алфавитные шифры замены (в том числе и шифр Цезаря) обладают двумя замечательными качествами:
их нетрудно составить и использовать;
их трудно прочитать, не зная ключа.
Огромное количество возможных ключей (для русского алфавита и шифра Цезаря — 32! = 263.130.836.933.693.530.167.218.012.160.000.000 возможных комбинаций) позволяет их часто обновлять, что еще сильнее затрудняет расшифровку. Благодаря этому такие шифры более тысячи лет считались очень надежными и использовались повсеместно.
Однако примерно в конце первого тысячелетия арабские ученые придумали метод, который позволял довольно быстро и легко взламывать алфавитные шифры замены при условии, что имеется довольно большой кусок текста (хотя бы 2 — 3 сотни знаков).
Для расшифровки текста предлагается поступать так:
- Сначала для каждого символа шифрованного текста подсчитать его частоту;
- Затем расположить эти символы в порядке убывания частоты;
- Расположить буквы алфавита данного языка также в порядке убывания частоты;
- Заменить в шифрованном тексте первый символ первого списка на первую букву второго списка и так далее.
Конечно, не все так просто: например, некоторые буквы имеют близкие частоты, кроме того, в некоторых текстах частота появления букв может очень заметно отличаться от стандартной. Но все равно, этот подход неизмеримо упростил работу криптоаналитиков, и до сих пор служит основой современных методов расшифровки текстов.
С учетом всего вышеперечисленного шифр Цезаря, как шифр простой замены, не имеет приемлемой стойкости с точки зрения современной криптографии.
Шифр Виженера
Шифр Виженера состоит из последовательности нескольких сдвигов алфавита с различными значениями. Конечно, это очень простые и ненадежные шифры, но дело в том, что все они используются одновременно, в смеси. В результате получается новый, устойчивый к простому частотному анализу шифр.
Для шифрования используется таблица алфавитов, называемая «tabula recta» или таблица Виженера.
Если буквы A-Z соответствуют числам 0-25, то шифрование Виженера можно записать в виде формулы:
C = (P + K) mod 26
Расшифровка:
P = (C — K) mod 26,
где P — исходная буква, K — буква ключевого слова, K — сдвиг алфавита.
Шифр Полибия
Значительным шагом вперед, по сравнению с предыдущими системами шифрования, представлял шифр, предложенный Полибием, несмотря на то, что он был изобретен во II веке до н.э в Древнем Риме. Применительно к современному латинскому алфавиту из 26 букв шифрование по этому квадрату заключается в следующем. В квадрат размером 5x5 клеток выписываются все буквы алфавита, при этом буквы «I» и «J» не различаются («J» отождествляется с буквой «I»).
Квадрат Полибия стал одной из наиболее широко распространенных криптографических систем, когда-либо употреблявшихся. Этому способствовала его достаточно высокая стойкость (во всяком случае для автоматизированных дешифрующих систем) — так квадрат 5Х5 для латинского алфавита содержит 15.511.210.043.330.985.984.000.000 возможных положений, что практически исключает его дешифрование без знания ключа.
«Линейный» шифр
Этот шифр, по сути, является функцией вида y = kx + b, где k и b — некоторые числа. Достоверно неизвестно, кто придумал шифровать текст этой функцией.
Пожалуй, этот шифр является довольно криптостойким. Действительно, пусть взломщик перехватил зашифрованное сообщение 5. Распишем все возможные положительные комбинации параметров k и b:
b=0, k=1, x=5; b=0, k=5, x=1; b=1, k=1, x=4; b=1, k=4, x=1;
b=2, k=1, x=3; b=2, k=3, x=1; b=3, k=1, x=2; b=3, k=2, x=1;
b=4, k=1, x=1.
Очевидно, что с увеличением разрядности перехваченного сообщения количество возможных вариантов увеличивается в огромное количество раз. А ведь значения параметров могут быть и отрицательными.
Все. теорию в сторону, перейдем к практике. Напишем программу на языке C#, реализующую данные алгоритмы шифрования. Сразу попрошу прощения у читателей, так как скриншоты программы были сделаны давно и уже не соответствуют текущей версии.
Изначально программа писалась на Visual Basic 6.0 (Прошу не пинать меня за это, я был молод)). Потом что-то ударило в голову и я написал версию для VisualBasic.NET. И все бы шло неплохо, но спокойно спать я не смог, поэтому переписал все на C#. Собственно вот скриншоты программы:
Дешифрование, собственно говоря, производится по такому же принципу, только нужно отметить галочку Uncoding. Внимание! Запоминайте или лучше записывайте ваши параметры для каждой вкладки, потому что по криворукости своей запоминание этих параметров я не имплементировал.
А вто и сама программа:
Coder_C#.zip
Coder_VisualBasic.NET.zip
Coder_Visual Basic 6.zip
Coder_FullSources.tar.bz2
Заключение
Надеюсь вам понравился мой рассказ про шифрование. Если вам будет интересно, могу рассказать о самом современном и криптостойком методе — RSA. Берегите себя и своих близких, до свидания.
Автор: belator
Ссылки не работают
А можно получить исходный код?)