- •153003, Г. Иваново, ул. Рабфаковская, 34
- •Введение
- •Лабораторная работа №1. Шифрование простой подстановкой и перестановкой. Генераторы псевдослучайных чисел, гаммирование
- •Перестановки
- •Обратимые операции
- •Гаммирование
- •Задания
- •Лабораторная работа №2. Дешифрование, частотный анализ. Маскировка длины символа Дешифрование
- •Частотный анализ
- •Маскировка длины символа
- •Выполнение битовых операций
- •Сжатие методом Хаффмана
- •Задания
Обратимые операции
При шифровании часто применяются обратимые (биективные) операции. Самая популярная – операция "Исключающего ИЛИ" – XOR:
a b = 1, если a b;
a b = 0, если a = b.
Например:
10 xor 250 = 240; 240 xor 250 = 10 .
Обратимой операцией является также операция сложения по модулю 2n, где n – число разрядов у операндов, участвующих в сложении.
Например:
(10 + 250) mod 256 = 4; (4 – 250) mod 256 = 10 .
Если мы имеем дело с байтовыми переменными, то будут справедливы следующие операторы: c := a + b; a:= c – b.
Гаммирование
Принцип шифрования гаммированием заключается в генерации гаммы шифра с помощью датчика псевдослучайных чисел (ПСЧ) и наложении полученной гаммы на открытые данные с помощью обратимой операции, например – XOR.
Процесс расшифрования данных сводится к повторной генерации гаммы шифра при известном ключе и наложению такой гаммы на зашифрованные данные.
Полученный зашифрованный текст является достаточно трудным для раскрытия в том случае, если гамма шифра не содержит повторяющихся битовых последовательностей.
Задания
Напишите программу генерации шифра для заданных a и s по формуле:
Ci = (a Pi + s) mod N ,
где Pi – код i-го символа открытого текста (0 ≤ Pi ≤ N-1);
Ci – код i-го символа зашифрованного текста (0 ≤ Ci ≤ N-1);
N – количество символов алфавита;
a – десятичный коэффициент;
s – коэффициент сдвига.
Напишите программы шифрования и расшифрования для метода моноалфавитной подстановки по заданному шифру. Язык русский. Шифр, открытый текст и зашифрованный текст должны находиться в текстовых файлах. Тестовый файл с открытым текстом должен содержать не менее 1000 символов текста художественного произведения.
Напишите программы шифрования и расшифрования для метода многоалфавитной подстановки для заданного ключа. Язык английский.
Шифрование выполняется по формуле
Ci = (Pi + Kj) mod N ,
где Pi – код i-го символа открытого текста (0 ≤ Pi ≤ N-1);
Ci – код i-го символа зашифрованного текста (0≤Ci≤ N-1);
N – количество символов алфавита;
Kj – код j-го символа ключа (j = i mod L; 0 ≤ j ≤ L-1);
L – длина ключа.
Ключ, открытый текст и зашифрованный текст должны находиться в отдельных текстовых файлах. Программы должны уметь работать с большими текстовыми файлами. Тестовые файлы должны содержать не менее 1000 символов текста. Попробуйте выразить функцию Pi(Ci) одной формулой.
Проведите последовательно несколько раз шифрование текстового файла с разными ключами.
Попытайтесь расшифровать полученный шифр, применяя столько же раз обратное преобразование.
Напишите программу подсчета слов русского языка из текстового файла, основы которых (слова без суффикса и окончания) были найдены в словаре основ естественного языка. Словарь необходимо считывать предварительно в память и организовать так, чтобы сравнение шло как можно быстрее. Напишите программу кодирования (раскодирования), которая заменяет одни основы слов на другие.
Напишите программу перекодировки символов из одной кодировки в другую для кодировок ASCII, КОИ-8, Windows и т. п. Используя эту программу, напишите программы шифрования и расшифрования для русского текста путем перекодирования. Последовательность перекодировок должна задаваться целым числом, каждая цифра которого обозначает ту или иную кодировку.
В России в XIII в. для тайнописи применяли «тарабарскую грамоту». В этой системе согласные буквы заменяются по схеме
|
Б |
В |
Г |
Д |
Ж |
З |
К |
Л |
М |
Н |
Щ |
Ш |
Ч |
Ц |
Х |
Ф |
Т |
С |
Р |
П |
При шифровании буквы, расположенные на одной вертикали, переходят одна в другую, остальные буквы остаются без изменения.
Напишите программы шифрования, расшифрования и дешифрования для текстовых файлов.
Напишите программы шифрования и расшифрования с использованием "цифирной азбуки". В госархиве сохранились письма Петра I, в которых он передавал цифири различным деятелям для корреспонденции (П. А. Толстому, А. Д. Меньшикову и др.). Цифирь – это шифр простой замены, в котором буквам сообщения соответствовали шифрообозначения, представляющие собой буквы, слоги, слова или другие какие-нибудь знаки. При этом использовались и "пустышки" – шифрообозначения, которым не соответствовали никакие знаки открытого текста.
Буквы русского алфавита приводите к одному регистру. Все, что не шифруется, переписывайте в выходной файл без изменения.
А-ме |
Б-ли |
В-ко |
Г-ин |
Д-зе |
Е-жу |
Ж-ню |
З-ою |
И-пы |
К-ра |
Л-су |
М-ти |
Н-у |
О-хи |
П-от |
Р-ца |
С-чу |
Т-ше |
У-ам |
Ф-ик |
Х-ъ |
Ц-то |
Ч-ь |
Ш-ю |
Щ-я |
Ъ-ф |
Ы-ас |
Ь-бе |
Э-за |
Ю-гу |
Я-ди |
« »-е |
|
|
|
|
|
|
|
|
Напишите программу, обеспечивающую генерацию случайным или псевдослучайным образом моноалфавитной подстановки для алфавита из n символов. Сформируйте массив [0..255], содержащий коды подстановки символов. Для остальных (255-n) символов, не вошедших в алфавит, в ячейки массива запишите код 0. Напишите программы шифрования и расшифрования, использующие полученный массив. Подстановочная таблица, открытый текст и зашифрованный текст должны находиться в текстовых файлах.
Напишите программу, порождающую случайным образом перестановку последовательности чисел от 1 до n. Напишите программы шифрования и расшифрования для метода перестановки групп символов (заданной длины) в заданном порядке. Шифр, открытый текст и зашифрованный текст должны находиться в текстовых файлах. Размеры файлов открытого и зашифрованного текста не должны отличаться.
Напишите программу дешифрования зашифрованного методом перестановки символов текста в группе, если известно, что открытый текст содержит текст: "Совершенно секретно". Учесть, что длина файла с зашифрованным текстом должна быть кратна длине группы. Перед перестановкой проверяйте в соседних группах наличие всех требуемых символов.
Напишите программу, порождающую случайным или псевдослучайным образом перестановку последовательности чисел от 1 до n. Напишите программы шифрования и расшифрования, использующие получаемую последовательность для перестановки символов в группах. Открытый текст и зашифрованный текст должны находиться в текстовых файлах.
Напишите программу, порождающую шифр «решетка Кардано», и программы шифрования и расшифрования текстовых файлов по этому методу. Решетка Кардано – это прямоугольная карточка с отверстиями (рис. 1), чаще всего квадратная.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
или
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 1. Шифрование с помощью решетки Кардано
Число строк и столбцов в карточке четно. Отверстия в карточке сделаны так, что при последовательном поворачивании каждая клетка лежащего под ней листа с текстом будет видна только один раз. Карточку сначала поворачивают вдоль вертикальной оси симметрии на 180°, а затем – вдоль горизонтальной оси также на 180°. И вновь на 180° вдоль вертикальной оси симметрии.
Для квадратных карточек возможны последовательные повороты на 90°.
При шифровании символы исходного текста вписываются в прорези, а при расшифровании считываются из них.
Карточки можно представлять матрицами [ai,j] i=1,…,n; j=1,…,m. Для квадратных матриц размерностью nn доказано, что матрица может служить ключом для шифрования, если i и j элементы: ai,j, aj,(n‑i+j), a(n‑j+i),i , a(n-i+j),(n-j+i) содержат точно одну прорезь.
Реализуйте программу для квадратных и прямоугольных карточек, для поворотов на 90 и 180°.
Напишите программы шифрования и расшифрования методом маршрутной транспозиции. Метод состоит в том, что каждый блок символов открытого текста вписывается в заданный прямоугольник [m x n] змейкой. Столбцы нумеруются в порядке следования букв алфавита в ключевой фразе. Последний блок дополняется до полного символами алфавита – А Б В … Считывается результат по столбцам.
Например. Пусть m=9, n=7, а порядок столбцов задается ключевым словом "СВЯТОСЛАВ".
С |
В |
Я |
Т |
О |
С |
Л |
А |
В |
6 |
2 |
9 |
8 |
5 |
7 |
4 |
1 |
3 |
6 |
2 |
9 |
8 |
5 |
7 |
4 |
1 |
3 |
С |
Е |
Д |
Л |
А |
Й |
Б |
Р |
А |
Р |
О |
Б |
И |
О |
В |
С |
Е |
Т |
З |
Ы |
И |
К |
О |
М |
О |
Н |
И |
Т |
О |
Г |
И |
Т |
И |
О |
М |
А |
О |
В |
И |
О |
С |
Е |
Д |
Л |
А |
К |
С |
Ь |
Р |
У |
К |
У |
И |
Н |
А |
Н |
А |
П |
Е |
Р |
Е |
Д |
И |
В результате получится зашифрованный текст: РЕНМЛИД ЕОЫОВСН АТИААНИ БСООДУЕ АООТСУЕ СРЗТОКА ЙВМИЕКР ЛИКИОРП ДБИГИЬА.
Имена текстовых файлов с исходным и зашифрованным сообщением, константы m и n должны задаваться в качестве параметров.
Напишите программы шифрования и расшифрования методом перестановки символов открытого текста, нанесенных на грани "кубика Рубика". Последовательность поворотов одна и та же для всех групп символов.
Напишите программу генерации псевдослучайных чисел (ПСЧ), применяя линейный конгруэнтный генератор ПСЧ, вырабатывающий последовательность T1, T2, …, Tm, …, используя соотношение
Ti+1 = (a Ti + c) mod m ,
где a и c – константы (с – нечетное, а mod 4 = 1);
T0 – исходная величина, выбранная в качестве порождающего числа;
m – константа; обычно устанавливается равной 2b или 2b-1;
b – длина слова ЭВМ в битах (взять b=8).
Сгенерируйте m чисел. Определите числа от 0 до m-1, которые ни разу не были сгенерированы. Определите числа, сгенерированные более одного раза.
Постройте график частоты попадания 100 000 сгенерированных чисел в интервалы по 1000 чисел. Такой же график постройте для функции Random() языка Pascal. Исследуйте, как влияют на характер распределения генерируемой последовательности чисел константы a и c. Определите период повторяемости генерируемых чисел.
Напишите программы шифрования и расшифрования, использующие генератор ПСЧ (см. задание №14). Программы должны применять операцию "исключающее ИЛИ" для объединения очередного сгенерированного числа и символа из текста. Открытый и зашифрованный тексты должны находиться в текстовых файлах.
Напишите программы шифрования и расшифрования методом многоалфавитной подстановки (см. задание №2). Kj получайте с помощью генератора ПСЧ. Начальное (инициализационное) число псевдослучайной последовательности чисел будет являться ключом шифра.
Напишите программы шифрования и расшифрования с использованием файла со стихотворением. Каждую букву открытого текста шифруют парой чисел – номером строки, где встречается эта буква, и номером буквы в ней. Поиск следующего символа начнется от только что найденного. Открытый, ключевой и зашифрованный тексты должны находиться в текстовых файлах.
Были перехвачены два зашифрованных сообщения:
05262C5269143F314C2A69651A264B5E7EE9
610728413B63072C52222169720B425E7DA745
Здесь они приведены в шестнадцатеричном виде. Известно, что применялось шифрование методом гаммирования. Код каждого символа сообщения с помощью операции XOR накладывался на код, полученный от генератора псевдослучайных чисел. В обоих случаях было передано одно и то же сообщение и использована одна и та же гамма. Но во втором случае в начало исходного сообщения был добавлен один пробел. Требуется дешифровать это сообщение.
19. Напишите программы шифрования и расшифрования текстового файла с использованием ключа, заданного строкой символов. При шифровании, к коду каждого символа строки исходного файла прибавить код очередного символа ключа и вычесть порядковый номер символа в строке. В выходной файл символы зашифрованной строки записывать в обратном порядке.
20. В дисковом массиве уровня RAID5, состоящем из 4-х дисков, вышел из строя Disk 2. Вы должны написать программу восстановления содержимого испорченного диска и прочитать текст, который был записан в дисковом массиве. Ниже приводится содержимое дисков в шестнадцатеричном виде.
Disk 0 |
Disk 1 |
Disk 2 |
Disk 3 |
72 |
65 |
|
73 |
75 |
6E |
|
64 |
61 |
7B |
|
74 |
33 |
20 |
|
72 |
72 |
61 |
|
6A |
20 |
6F |
|
66 |
20 |
27 |
|
6E |
71 |
64 |
|
70 |
65 |
6E |
|
6F |
65 |
6E |
|
74 |
20 |
2D |
|
69 |
6B |
73 |
|
73 |
Размер блоков данных для данного массива равен одному байту. Для ускорения записи и чтения в дисковом массиве RAID5 блоки данных (Х1, Х2, Х3) и контрольные суммы (Хр) записываются параллельно на все диски с циклическим сдвигом (см. рис.). Контрольные суммы вычисляются с помощью операции (xor) следующим образом: Хp=Х1 Х2 Х3.
