Перестановка " Магический квадрат "
https://t.me/ENcodingПо сравнению с предыдущими криптосистемами является наиболее сложной и продуманной. Самостоятельное построение может вызвать трудности, так как квадратная таблица, которая лежит в основе системы и выглядит вот так ( один из её вариантов ):
2 7 6
9 5 1
4 3 8
имеет несколько особенностей :
- Числа не могут быть одинаковы
- Сумма чисел в каждом столбце, строке и диагоналях должна быть одинакова
- Эта сумма чисел должна задаваться формулой n * ( n * n + 1 ) / 2
Звучит устрашающе, тем более формула в шифре встретилась нам впервые :c. Поэтому, разберём всё по порядку:
Формула
Необходимо пояснить, что переменная "n" обозначает длину стороны таблицы в символах. К примеру, если "n" равна 3, то наш квадрат имеет длину и ширину в 3 символа, а значит, помещает в себя 9 чисел. Количество чисел, помещаемых в квадратной таблице, должно быть равно количеству символов шифруемого сообщения.
Шифрование " чётным " квадратом
Так как длина нашего сообщения " подели на ноль " даже вместе с пробелами была равна 14, то подберём иное, квадратный корень длины которого будет равен 4. Таким словосочетанием станет " шифрование строк ". Теперь пора построить квадратную таблицу размером 4*4 ( поскольку в сообщении вместе с пробелом 16 символов ):
16 3 2 13
9 6 7 12
5 10 11 8
4 15 14 1
Cумма чисел каждого столбца, строки и диагоналей равна 34
Проверим по формуле является ли таблица верной :
4 * ( 4 * 4 + 1 ) / 2 = 68/2 = 34
Как же будем производить шифрование ? На самом деле, всё очень просто. Ещё раз взглянем на таблицу. Смысл её в том, что она нам показывает, какой по счёту элемент сообщения на каком месте должен находиться. К примеру, на первом месте нашей таблицы стоит число 16, значит 16 символом зашифрованного сообщения должен стать 1 символ сообщения исходного. А на 16 месте в таблице стоит число 1, значит 1 символом зашифрованного сообщения станет 16 символ исходного сообщения. И так далее. ( Раскрою секрет: та таблица, которую я построил, называется супермагической, поскольку в ней числа взаимопереставляемые, т.е 16 символом становится 1 символ, а 1 символом - 16. Таких таблиц очень немного, в иных же происходит не взаимная перестановка ).
После шифрования получаем сообщение :
КФИТИВАСОЕ_НРОРШ
( По счастливой случайности пробел остался нетронутым )
Шифры, построенные на супермагических таблицах, очень легко поддаются расшифровке, надо просто ещё раз " прогнать " сообщение через тот же самый квадрат :).
Шифрование " нечётным " квадратом
В отличие от квадратов размером 4 * 4, эти не имеют супермагических вариантов ( попробуйте догадаться, почему ). В данном случае предыдущее сообщение оказывается слишком длинным, поэтому мы будем шифровать слово "кодировка" , так как оно имеет всего лишь 9 символов. Строим таблицу 3 * 3:
2 7 6
9 5 1
4 3 8
Сумма чисел каждого столбца, строки и диагоналей равна 15
Проверим по формуле является ли таблица верной :
3 * ( 3 * 3 + 1 ) / 2 = 30/2 = 15
Алгоритм шифрования точно такой же: на первом месте таблицы стоит число 2, значит 1 символ исходного сообщения будет 2 в сообщении зашифрованном. На втором месте таблицы стоит число 7, значит 2 символ исходного сообщения будет 7 в зашифрованном. И так далее.
После шифрования получаем сообщение :
ОККВРДОАИ
Здесь расшифровка будет отличаться от алгоритмов " чётных " квадратов, прежде всего своей сложностью. Чтобы её выполнить, необходимо произвести те же самые операции, что и при шифровке, используя тот же самый квадрат. К примеру, если первое число таблицы равно 2, то 1 буква зашифрованного сообщения будет в исходном стоять на 2 месте. В данном случае, это буква "О". По аналогии проводим расшифровку и получаем следующее сообщение:
КОДИРОВКА
Вывод
Хочется отметить, что несмотря на всю кажущуюся сложность, криптографическая стойкость этого шифра немногим больше стойкости шифров перестановок по ключу. И пусть алгоритмы меняются от шифра к шифру, суть их не меняется, потому что все они - симметричные криптосистемы. И перестановка " Магический квадрат " была последней из них. На этом наш цикл о симметричных шифрах окончен.
============
============