
Классификация шифров замены
Если
ключ зашифрования совпадает с ключом
расшифрования:
,
то такие шифры называют симметричными,
если
же
— асимметричными.
В связи с указанным различием в использовании ключей сделаем еще один шаг в классификации:
Отметим также, что в приведенном определении правило зашифрования является, вообще говоря, многозначной функцией. Выбор ее значений представляет собой некоторую проблему, которая делает многозначные функции не слишком удобными для использования. Избавиться от этой проблемы позволяет использование однозначных функций, что приводит к естественному разделению всех шифров замены на однозначные и многозначные замены (называемых также в литературе омофонами).
Для однозначных шифров замены справедливо свойство:
;
для многозначных шифров замены:
;
Далее мы будем рассматривать однозначные замены, которые получили наибольшее практическое применение. Итак, далее
и
.
Заметим,
что правило зашифрования
естественным образом индуцирует
отображение
которое в свою очередь продолжается до
отображения
.
Для
упрощения записи будем использовать
одно обозначение
для
каждого из трех указанных отображений.
В
силу инъективности (по
)
отображения
и
того, что
,
введенные в общем случае отображения
являются биекциями
,
определенными равенствами
.
Число
таких биекций не превосходит
.
Для шифра однозначной замены определение правила зашифрования можно уточнить: в формуле включение следует заменить равенством
Введем еще ряд определений.
Если
для некоторого числа
выполняются включения
то
соответствующий шифр замены будем
называть шифром
равнозначной замены. В
противном случае — шифром
разнозначной замены:
В
подавляющем большинстве случаев
используются шифры замены, для которых
,
для
некоторого
.
При
говорят о поточных
шифрах замены, при
— о блочных
шифрах замены:
В
случае
шифр замены называют одноалфавитным
шифром замены или
шифром
простой замены. В
противном случае – многоалфавитным
шифром замены:
В имеем следующие классы шифров замены:
шифры равнозначной замены,
шифры разнозначной замены,
поточные шифры,
блочные шифры,
одноалфавитные шифры,
многоалфавитные шифры.
В книге «Введение в криптографию» автора В.В.Ященко приведены условия задач олимпиад по математике и криптографии для школьников. Рассмотрим некоторые из них.
Задача 1.2.В адрес олимпиады пришло зашифрованное сообщение:
ФМЕЖТИВФЮ
Найдите
сходное сообщение, если известно, что
шифрпреобразование заключалось в
следующем. Пусть
– корни трехчлена
.
К порядковому номеру каждой буквы в
стандартном русском алфавите (33 буквы)
прибавлялось значение многочлена
,
вычисленное либо при
,
либо при
(в неизвестном порядке), а затем полученное
число заменялось соответствующей
буквой.
Решение.
Легко
видеть, что
.
Отсюда
где -- корни многочлена . Получаем
Буква ш.с. |
Ф |
В |
М |
Е |
Ж |
Т |
И |
В |
Ф |
Ю |
Номер |
22 |
3 |
14 |
7 |
8 |
20 |
10 |
3 |
22 |
32 |
Номер |
20 |
1 |
12 |
5 |
6 |
18 |
8 |
1 |
20 |
30 |
Буква о.с. |
Т |
А |
К |
Д |
Е |
Р |
Ж |
А |
Т |
Ь |
Ответ:ТАКДЕРЖАТЬ.
Опишем алгоритм расшифрования на языке C.
#include<stdio.h>
#include<string.h>
void main(){
int i,j,n;
/*Создаём массив содержащий 33 буквы русского алфавита*/
char а[]={'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О',
'П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю', 'Я'};
/*Массив содержащий шифрованное послание*/
char b[]={'Ф','В','М','Е','Ж','Т','И','В','Ф','Ю'};
/*Расшифрование*/
for(j=0;j<10;j++){
for(i=0;i<32;i++)
if(b[i]==a[j]){ if(i==30)a[j]=b[0];
if(i==31)a[j]=b[1];
if(i!=30&i!=31)a[j]=b[i+2];
break;
}
}
/*Вывод исходного сообщения*/
puts(b);
}
}
Задача 4.6.Исходное сообщение из букв русского алфавита преобразуется в числовое сообщение заменой каждой его буквы числом по следующей таблице:
А |
Б |
В |
Г |
Д |
Е |
Ж |
З |
И |
К |
Л |
М |
Н |
О |
П |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
Р |
С |
Т |
У |
Ф |
Х |
Ц |
Ч |
Ш |
Щ |
Ь |
Ы |
Э |
Ю |
Я |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
Для
шифрования полученного числового
сообщения используется шифрующий
отрезок последовательности
подходящей длины, начиная с
.
При
зашифровании каждое число числового
сообщения складывается с соответствующим
числом шифрующего отрезка. Затем
вычисляется остаток от деления полученной
суммы на 30, который по данной таблице
заменяется буквой. Восстановите сообщение
КЕНЗЭРЕ, если шифрующий отрезок взят
из последовательности, у которой
и
для любого натурального
.
Решение.
Заметим,
что
для всех натуральных
.
Складывая почленно эти равенства при
,
получим
.
По условию
имеем
.
Ясно,
что при расшифровании так же, как и при
зашифровании, вместо чисел
можно
воспользоваться их остатками от деления
на 30. Так как для каждого целого
неотрицательного
,
где
-- некоторое целое число, то получаем
следующие остатки при делении чисел
на
30:
|
|
|
|
|
|
|
0 |
3 |
12 |
3 |
12 |
15 |
18 |
Заключительный этап представлен в талице:
Шифрованное сообщение |
К |
Е |
Н |
З |
Э |
Р |
Е |
Числовое шифрование |
9 |
5 |
12 |
7 |
27 |
15 |
5 |
Шифрующий отрезок |
0 |
3 |
12 |
3 |
12 |
15 |
18 |
Числовое исходное сообщение |
9 |
2 |
0 |
4 |
15 |
0 |
17 |
Исходное сообщение |
К |
В |
А |
Д |
Р |
А |
Т |
Опишем алгоритм расшифрования на языке C.
#include<stdio.h>
void main(){
/*Создаём массив содержащий 30 букв русского алфавита*/
char b[]={'А','Б','В','Г','Д','Е','Ж','З','И','К','Л','М','Н','О',
'П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Э','Ю', 'Я'};
/*Массив содержащий шифрованное послание*/
char a[]={'К','Е','Н','З','Э','Р','Е'};
int j,i;
/*расшифрование*/
for(j=0;j<7;j++){
for(i=0;i<30;i++)
if(b[i]==a[j]){
a[j]=b[((i+30)-(j*j*j+2*j)%30)%30];
break; }
}
/*вывод исходного сообщения*/
for(j=0;j<7;j++)printf("%c",a[j]);
printf("\n");
}
Задача 6.4. На каждой из трёх осей установлено по одной вращающейся шестеренке и неподвижной стрелке. Шестеренки соединены последовательно. На первой шестеренке 33 зуба, на второй – 10, на третьей – 7. На каждом зубце первой шестеренки по часовой стрелке написано по одной букве русского языка в алфавитном порядке:
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
На зубцах второй и третьей шестеренки в порядке возрастания по часовой стрелке написаны цифры от 0 до 9 и от 0 до 6 соответственно. Когда стрелка первой оси указывает на букву, стрелки двух других осей указывают на цифры. Буквы сообщения шифруются последовательно. Зашифрование производится вращением первой шестеренки против часовой стрелки до первого попадания шифруемой буквы под стрелку. В этот момент последовательно выписываются цифры, на которые указывают вторая и третья стрелки. В начале шифрования стрелка первого колеса указывала на букву А, а стрелки второго и третьего колес на цифру 0.
зашифруйте слово ОЛИМПИАДА;
расшифруйте сообщение 24809283911211.
Решение.
Определим моменты остановок после начала шифрования. Для этого каждой букве русского алфавита припишем её порядковый номер: А – 0, Б – 1, и т. д. Тогда буквам из шифруемого слова будут соответствовать номера: О – 15, Л – 12, И – 9, М – 13, П – 16, А – 0, Д – 4. Моменты остановок будем указывать числом одношаговых (на один зубец) поворотов 1 колеса до соответствующей остановки.