Смешанное шифрование теста на C#

в 14:51, , рубрики: информационная безопасность, криптография, Песочница, шифр Виженера, шифр цезаря, шифрование, метки: , , ,

Здравствуйте, уважаемые читатели!

Сегодня я бы хотел вам немного рассказать о работе таких замечательных методов защиты информации, как шифр Цезаря, Полибия, Виженера и Линейного шифра.
После краткого экскурса, я познакомлю вас с их алгоритмами и реализациями на языке 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» или таблица Виженера.

Смешанное шифрование теста на C#

Если буквы A-Z соответствуют числам 0-25, то шифрование Виженера можно записать в виде формулы:
C = (P + K) mod 26
Расшифровка:
P = (C — K) mod 26,

где P — исходная буква, K — буква ключевого слова, K — сдвиг алфавита.

Шифр Полибия

Значительным шагом вперед, по сравнению с предыдущими системами шифрования, представлял шифр, предложенный Полибием, несмотря на то, что он был изобретен во II веке до н.э в Древнем Риме. Применительно к современному латинскому алфавиту из 26 букв шифрование по этому квадрату заключается в следующем. В квадрат размером 5x5 клеток выписываются все буквы алфавита, при этом буквы «I» и «J» не различаются («J» отождествляется с буквой «I»).

Смешанное шифрование теста на C#

Квадрат Полибия стал одной из наиболее широко распространенных криптографических систем, когда-либо употреблявшихся. Этому способствовала его достаточно высокая стойкость (во всяком случае для автоматизированных дешифрующих систем) — так квадрат 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#. Собственно вот скриншоты программы:

Смешанное шифрование теста на C#
Смешанное шифрование теста на C#
Смешанное шифрование теста на C#
Смешанное шифрование теста на C#

Дешифрование, собственно говоря, производится по такому же принципу, только нужно отметить галочку Uncoding. Внимание! Запоминайте или лучше записывайте ваши параметры для каждой вкладки, потому что по криворукости своей запоминание этих параметров я не имплементировал.

А вто и сама программа:

Coder_C#.zip
Coder_VisualBasic.NET.zip
Coder_Visual Basic 6.zip
Coder_FullSources.tar.bz2

Заключение

Надеюсь вам понравился мой рассказ про шифрование. Если вам будет интересно, могу рассказать о самом современном и криптостойком методе — RSA. Берегите себя и своих близких, до свидания.

Автор: belator

  1. Gore:

    Ссылки не работают

  2. ололоша:

    А можно получить исходный код?)

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js