- •Теория алгоритмов (краткий курс лекций для самостоятельной работы)
- •Лекции по теории алгоритмов Введение
- •Предмет криптографии
- •Лекция №1
- •Краткие теоретические сведения
- •1 Шифр сцитала
- •2 Шифр вертикальной перестановки
- •3 Шифр поворотной решетки
- •4 Шифры с использованием магичных квадратов
- •5 Перестановка бит
- •Лекция №2
- •Краткие теоретические сведения
- •Варианты реализации шифров простой замены
- •1 Система шифрования Цезаря
- •2 Афинная система подстановок
- •3 Лозунговый шифр
- •4 Шифровальный квадрат Полибия
- •5 Шифровальная таблица Трисемуса
- •4Х8 «Сколько волка ни корми, он все в лес глядит »
- •Лекция №3
- •Краткие теоретические сведения
- •1 Биграммный шифр Плейфейера
- •2 Шифр с использованием омофонов
- •3 Шифр Гронсфельда
- •4 Система шифрования Вижинера
- •5 Шифр «Двойной квадрат Уитстона»
- •Общие сведения о блочных шифрах
- •Описание алгоритма des
- •Режимы реализации алгоритмов симметричного шифрования
- •Асимметричные криптоалгоритмы
- •Модулярная арифметика
- •Открытое распределение ключей
- •Криптосистема rsa
- •7 Самокорректирующиеся коды
- •7.1 Построение кодов Хемминга (описание алгоритма кодирования)
- •7.2 Обнаружение ошибок в кодах Хемминга
- •7.3 Декодирование
- •Примеры решения задач Задача № 3
- •Задача № 4
- •Алгоритм решения задачи следующий:
- •Литература
7 Самокорректирующиеся коды
В предыдущей лекции рассмотрено алфавитное кодирование (т.е. каждой букве входного алфавита присваивался элементарный код Bi). Пусть{A1,A2 ,A3,…As} – некоторое конечное подмножество попарно различных слов в алфавитеI, имеющих одинаковую длинуm. Такая ситуация может возникнуть, когда, например, выполнено предварительное алфавитное бинарное кодирование информации (сообщение состоит из цепочки 0 и 1). Если такую цепочку разбить, начиная с начала или конца, на участки одинаковой длины, кратные степени двойки (8, 16, 32 …), то вариантов таких участков будет конечное множество. Это дает возможность создать словарь{A1,A2 ,A3,…As} (гдеs=2m) и передавать, запоминать не само сообщение, а последовательность ссылок на номера слов в словаре. Если предварительное кодирование осуществлялось бинарными элементарными кодами одинаковой длины, то такое кодирование в смысле уменьшения длины закодированного сообщения ничего не дает. Однако такой подход дает возможность строить коды, которые могут сами исправлять ошибки, возникающие от помех в линиях связи.
Очевидно, что каждое слово сообщения A допускает разложение видаA =Ai1,Ai2 ,Ai3,…Ain, и имеет единственное такое разложение. Если ограничиться предварительным бинарным кодированием, тоAi=1 2 3…..mномера слов в словаре, записанные в двоичной системе (i принимает значения 0 или1). Необходимо отметить, что каждый двоичный номер слова может быть однозначно записан и десятеричным числом.
Пусть S”( I) – подмножество всех слов, допускающих разложение указанного вида. Рассмотрим следующую схему кодирования:
A1 B1
A2 B2
A3 B3 (7.1)
….
As Bs ,
где Bi = 1 2 3 …l – элементарные двоичные коды, имеющие одинаковую длинуl = m + k , при этом такие, чтобы по коду, полученному на выходе канала связи (помеха может изменить 0 на 1 или наоборот, но не может добавить или убрать элементi) однозначно восстановить код на входе канала и из него получить исходное сообщение.
Построение самокорректирующихся кодов было осуществлено Хеммингом. Рассмотрим случай, когда источник помех может внести не более одного инвертирования в элементарный код Bi (р=1 ). Вариантов получения элементарного кодаBi будетl +1 (правильный иl штук с инвертированиемiна каждой позиции). Для того, чтобы дополнительных разрядов в кодеBiхватило для кодированияl +1 случаев, необходимо выполнение следующего условия:
2m ≤ 2l / (l + 1) (7.2)
Из этих соображений выбираем как наименьшее целое число, удовлетворяющее неравенству (7.2).
Дальнейшее построение будет состоять из трех этапов:
Построение кодов Хемминга (описание алгоритма кодирования).
Обнаружение ошибок в кодах Хемминга.
Декодирование.
7.1 Построение кодов Хемминга (описание алгоритма кодирования)
В множестве натуральных чисел {1,2,3,…, l }выделим следующие подмножества:
1, 3, 5, 7, 9 ….(содержатся все числа, у которых при переводе в двоичную запись в последнем разряде 1);
2, 3, 6, 7, 10 ….(содержатся все числа, у которых при переводе в двоичную запись в предпоследнем разряде 1);
. . . . . . . . . .
2k–1, 2k–1 +1, ….(содержатся все числа, у которых при переводе в двоичную запись вk–ом, считая справа, разряде 1).
Наименьшие члены этих подмножеств являются степенями 2: 1 = 20; 2 = 21;
4 = 22;…., причем2k–1 ≤l , а2k+1 l+1.
Члены iнабора1 2 3 …l, у которых индексiпринадлежит множеству {1, 2, 4,… 2k–1}, называются контрольными членами, остальные – информационными. Таким образом, контрольных членов будетk, а информационныхl – k= m. Сформулируем правило построения набора…lпо набору1 2 3…..m.
Сначала определяются информационные члены:
3 = 1
5 = 2
6 = 3
. . . . .
Таким образом, набор информационных членов, расположенных в естественном порядке, совпадает с набором 1 2 3…..m. Затем определяются контрольные члены,
1 = 3+ 5 + 7 + …(mod 2),
2 = 3+ 6 + 7 + …(mod 2), (7.3)
4= 3+ 6 + 7 + …(mod 2),
. . . . . . . . . . . . .
значения которых 0 или 1 и помещаются на соответствующих местах в элементарных кодах Bi. По сути, создается кодовый словарь для схемы кодирования (4.1), в котором для каждого элементарного кода выполняются следующие условия (суммирование поmod 2):
1 + 3+ 5 + 7 + …= 0,
2 + 3+ 6 + 7 + …= 0, (7.4)
4 + 3+ 6 + 7 + …= 0,
. . . . . . . . . . . . .
(количество единиц в позициях элементарного кода, определяемых индексами, четно).
