Пособие_ТКИ
.pdfстра.
Такие последовательности называют псевдослучайными. С одной стороны, они удовлетворяют ряду основных тестов на случайность, что существенно затрудняет раскрытие такого ключа, а с другой - являются детерминированными, что позволяет обеспечить однозначность дешифрования сообщения.
Надежность криптографического закрытия методов гаммирования определяется, главным образом, длиной неповторяющейся части гаммы. Если она не превышает длину закрываемого текста, то раскрыть криптограмму, опираясь только на результаты статистической обработки этого текста, теоретически невозможно.
Однако, если удастся получить некоторое число двоичных символов исходного текста и соответствующих им двоичных символов криптограммы, то сообщение нетрудно раскрыть, так как преобразование, осуществляемое при гаммировании, является линейным. Для полного раскрытия достаточно всего 2n двоичных символов зашифрованного и соответствующего ему исходного текста.
Стандартный метод шифрования данных.
Рассмотрим теперь метод криптографического закрытия данных, удовлетворяющий всем указанным ранее требованиям.
В процессе шифрования последовательность символов определенной длины (64 бит) преобразуется в шифрованный блок той же длины. Операция шифрования и дешифрования осуществляется по схеме, представленной на рис 3.2.
Перед началом шифрования в специализированный регистр устройства через входной регистр вводится ключ, содержащий 64 бит, из которых 56 используются для генерации субключей, а 8 являются проверочными. Ключ из устройства вывести нельзя. Предусмотрена возможность формирования нового ключа внутри устройства. При этом ключ, вводимый в устройство, шифруется ранее использовавшимся ключом и затем через выходной регистр вводится в специальный регистр в качестве нового ключа.
16 субключей по 48 бит каждый, сформированных в генераторе субключей, используются для шифрования блока 64 символов,
41
поступающих во входной регистр устройства. Шифрование осуществляется из 16 логически идентичных шагов, на каждом из которых используется один из субключей.
Рис.3.2. Схема операций шифрования и дешифрования.
Процесс дешифрования выполняется по тому же алгоритму, что и процесс шифрования, с той лишь разницей, что субключи генерируются в обратном порядке.
В основе технической реализации такого устройства лежат регистры с обратными связями. В результате коммутации теперь обратной связи регистра-шифратора в соответствии с генерируемыми субключами нарушается линейность преобразования входной последовательности, что и обеспечивает высокую надежность криптографического закрытия данных.
3.4. Кодирование по методу Шеннона-Фано.
При кодировании по этому методу код строится следующим образом. Буквы алфавита сообщений выписываются
42
в таблицу в порядке убывания вероятностей. Затем они разделяются на две группы так, чтобы суммы вероятностей в каждой из групп были по возможности одинаковыми. Всем буквам верхней половины в качестве первого вола приписывается «1», а всем нижним — «1». Каждая из групп разбивается на две подгруппы с одинаковыми суммарными вероятностями и т.д. Процесс повторяется до тех пор, пока в каждой подгруппе останется по одной букве.
В таблице 3.2 представлен алфавит из 8 букв (z1…z8) с вероятностями появления каждой. В последнем столбце показаны кодовые комбинации, которые характеризуются тем, что чем выше вероятность появления буквы, тем меньше двоичных символов используется. При обычном кодировании (не учитывающем статистические характеристики букв) для представления каждой буквы потребуется три символа, поскольку 23 = 8. Среднее число разрядов на одну букву
b |
|
Lcp P(zi )n(zi ), |
(3.4.1) |
i 1
где n(zi) – число разрядов в кодовой комбинации, соответствующей букве zi .
Таблица 3.2. Вероятность появления букв и их кодовые комбинации.
Буквы |
Вероятно- |
Кодовые ком- |
|
сти |
бинации |
z1 |
0,22 |
11 |
z2 |
0,20 |
101 |
z3 |
1,16 |
100 |
z4 |
0,16 |
01 |
z5 |
0,10 |
001 |
z6 |
0,10 |
0001 |
z7 |
0,04 |
00001 |
z8 |
0,02 |
00000 |
|
43 |
|
Нетрудно подсчитать, что
|
|
b |
|
|
L |
|
|
P(z )n(z ) 0,22 2 0,2 3 0,16 3 0,16 2 |
|
cp |
|
i |
i |
|
i1
0,1 3 0,1 4 0,04 5 0,02 5 2,84.
Рассмотренный метод не всегда приводит к однозначному построению кода. Ведь при разбиении на подгруппы можно сделать большей по вероятности как верхнюю, так и нижнюю подгруппы. Множество вероятностей в таблице можно было разбить иначе. При этом среднее число разрядов на одну букву кардинально не изменится. Построенный код может оказаться не самым лучшим. При построении эффективных кодов с основанием больше двух неопределенность возрастает.
3.5. Кодирование по методу Хаффмена.
От недостатков описанного метода свободен метод Д. Хаффмена. Этот метод гарантирует построение кода с наименьшим для данного распределения вероятностей средним числом разрядов на букву. Для двоичного кода метод сводится к следующему. Буквы алфавита сообщений выписываются в основной столбец в порядке убывания вероятностей (табл. 3.3). Две последние буквы объединяются в одну вспомогательную букву, которой приписывается суммарная вероятность. Вероятности букв, не участвовавших в объединении, и полученная суммарная вероятность снова располагаются в порядке убывания вероятностей в дополнительном столбце, а две последние буквы объединяются. Процесс продолжается до тех пор, пока не получим единственную вспомогательную букву с вероятностью, равной 1.
44
Таблица 3.3. Процесс формирования кодовых комбинаций.
Буквы |
Вероят- |
Шаги формирования вероятности |
|
|||||
ности |
появления букв 1—7 |
|
|
|
||||
|
|
|
|
|
||||
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
|
|
|
|
|
|
|
|
z1 |
0,22 |
0,22 |
0,22 |
0,26 |
0,32 |
0,42 |
0,58 |
1 |
z2 |
0,20 |
0,20 |
0,20 |
0,22 |
0,26 |
0,32 |
0,42 |
|
z3 |
0,16 |
0,16 |
0,16 |
0,20 |
0,22 |
0,26 |
|
|
z4 |
0,16 |
0,16 |
0,16 |
0,16 |
0,20 |
|
|
|
z5 |
0,10 |
0,10 |
0,16 |
0,16 |
|
|
|
|
z6 |
0,10 |
0,10 |
0,10 |
|
|
|
|
|
z7 |
0.04 |
0,06 |
|
|
|
|
|
|
z8 |
0.02 |
|
|
|
|
|
|
|
Для составления кодовой комбинации, соответствующей конкретному сообщению, необходимо проследить путь перехода сообщений по строкам и столбцам таблицы. Для наглядности строится кодовое дерево (рис. 3.3, а). Из точки, соответствующей вероятности 1, направляются две ветви, причем ветви с большей вероятностью присваивается символ «1», а ветви с меньшей вероятностью – «0». Такое последовательное ветвление продолжается до тех пор, пока не дойдет очередь до каждой буквы.
Двигаясь, по кодовому дереву сверху вниз, можно записать для каждой буквы соответствующую ей кодовую комбинацию (рис.3.3,б).
45
Рис.3.3. Составление новых комбинаций по методу Хаффмена: а- кодовое дерево;
б– кодовые комбинации для каждой буквы.
3.6.Метод l-грамм.
Декорреляция исходной последовательности может быть осуществлена путем укрупнения алфавита знаков. Подлежащие передаче сообщения разбивают на двух-, трехили n-знаковые сочетания, вероятности которых известны:
Z Z Z |
...Z Z |
4 |
||
1 |
1 |
4 |
1 |
|
|
||||
|
|
n |
|
|
Z4 Z2 ...Z1Z2 Z1Z3Z3
n
Каждому сочетанию ставится в соответствие кодовая комбинация по методике Шеннона-Фано или Хаффмана.
Недостаток такого метода заключается в том, что не учитываются корреляционные связи между знаками, входя-
46
щими в состав следующих друг за другом сочетаний. Естественно, он проявляется тем меньше, чем больше знаков входит в каждое сочетание.
Указанный недостаток устраняется при кодировании по методу диаграмм, триграмм или l-грамм. Условимся называть l-граммой сочетание l смежных знаков сообщения. Сочетание из двух смежных знаков называют диаграммой, из трех - триграммой и т.д.
Теперь в процессе кодирования l- грамма непрерывно перемещается по тексту сообщения:
|
|
1 я _ l грам м а |
|
|
|
|
|
|
|||||
|
|
|
|
|
|||||||||
Z Z Z |
4 |
Z |
...Z |
Z |
Z |
Z |
...Z Z |
Z |
Z |
2 |
|||
1 |
1 |
|
3 |
1 |
4 |
4 |
2 |
1 |
4 |
4 |
|
||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
2 я _ l грам м а |
||||
Кодовое обозначение каждого очередного знака за-
висит от l-1 предшествовавших ей знаков и определяется по вероятностям различных l-грамм на основании методики Шеннона-Фано или Хаффмана.
Конкретное значение l выбирают в зависимости от степени корреляционной связи между знаками или сложности технической реализации кодирующих и декодирующих устройств.
47
Глава 4. Помехоустойчивое кодирование.
4.1. Кодирование для исправления ошибок: основные положения.
Все коды, исправляющие ошибки, основаны на одной общей идее: для исправления ошибок, которые могут возникнуть в процессе передачи и хранения информации, к ней добавляется некоторая избыточность. По основной схеме (используемой в практике), избыточные символы дописываются вслед за информационными, образуя кодовую последовательность или кодовое слово (codeword). В качестве иллюстрации на рис.4.1 показано кодовое слово, сформированное процедурой кодирования блокового кода (block code). Такое кодирование называют систематическим (systematic). Это означает, что информационные символы всегда появляются на первых k позициях кодового слова. Символы на оставшихся n-k позициях являются различными функциями от информационных символов, обеспечивая тем самым избыточность, необходимую для обнаружения или исправления ошибок. Множество всех кодовых последовательностей называют кодом, исправляющим ошибки (error correcting code), и обозначают через С.
|
n-символов |
|
|
|
|
Информация |
|
Избыточность |
k символов |
|
n-k символов |
Рис.4.1. Систематическое блоковое кодирование для исправления ошибок.
4.1.1.Блоковые и свёрточные коды.
Всоответствии с тем, как вводится избыточность в сообщение, коды, исправляющие ошибки, могут быть разделе-
ны на два класса: блоковые и сверточные (convolutional
48
code) коды. Обе схемы кодирования нашли практическое применение. Исторически сверточные коды имели преимущество главным образом потому, что для них известен алгоритм декодирования Витерби с мягким решением и в течение многих лет существовала убежденность в том, что блоковые коды невозможно декодировать с мягким решением. Однако последние достижения в теории и конструировании алгоритмов декодирования с мягким решением для линейных блоковых кодов помогли рассеять это убеждение. Более того, наилучшие ЕСС, известные сегодня (в начале двадцать первого века), являются блоковыми кодами (нерегулярными ко-
дами с низкой плотностью проверок — irregular lowdensity parity-check codes).
При блоковом кодировании каждый блок информационных символов обрабатывается независимо от других. Другими словами, блоковое кодирование является операцией без памяти в том смысле, что кодовые слова не зависят друг от друга. Выход сверточного кодера, напротив, зависит не только от информационных символов в данный момент, но и от предыдущих символов на его входе или выходе. Чтобы упростить объяснения, мы начнем с изучения структурных свойств блоковых кодов. Многие из этих свойств являются общими для обоих типов кодов.
Следует заметить, что на самом деле блоковые коды обладают памятью, если рассматривать кодирование как побитовый процесс в пределах кодового слова. Сегодня это различие между блоковыми и сверточными кодами кажется все менее и менее ясным, особенно после недавних достижений в понимании решетчатой (trellis) структуры блоковых кодов и кольцевой (tail-biting) структуры некоторых сверточных кодов.
Дополнение переводчика: Название кольцевые сверточные коды еще не окончательно утвердилось в отечественной литературе, иногда tail-biting convolutional codes называют
циклически замкнутыми.
Специалисты по сверточным кодам иногда рассматривают блоковые коды как «коды с меняющейся во времени структу-
49
рой решетки» (time-varying trellis structure). Аналогично,
специалисты в области блоковых кодов могут рассматривать сверточные коды как «коды с регулярной структурой решетки».
4.1.2. Хеммингово расстояние, Хемминговы сферы и корректирущая способность.
Рассмотрим двоичный код С, исправляющий ошибки. Если не все из 2n возможных двоичных векторов длины n будут передаваться по каналу связи, то этот код может обладать свойством помехоустойчивости. В действительности, код С является подмножеством n-мерного двоичного векторного пространства V2 = {0, 1}n таким, что элементы этого подмножества максимально удалены друг от друга.
В двоичном пространстве V2 расстояние определяется как число позиций, на которых два вектора не совпадают. Пусть
x1=(x1,0,x1,1,…,x1,n-1) и x2=(x2,0,x2,1,…x2,n-1) два вектора в V2.
Тогда Хеммингово расстояние между векторами x1 и x2, обозначаемое как dH(x1,x2) равно
dH(x1,x2) =|{i:x1,i ≠ x2,i , 0≤i<n}| |
(4.1.2.1) |
где через |A| обозначено число элементов в множестве А.
Для заданного кода С минимальное Хеммингово рас-
стояние, dmin , определяется как минимум Хеммингова расстояния по всем возможным парам различных кодовых слов,
d |
min |
min {d |
H |
(v ,v |
) | v |
v |
} |
|||
|
v |
,v |
C |
1 |
2 |
1 |
2 |
|
||
|
|
1 |
2 |
|
|
|
|
|
|
|
(4.1.2.2)
Повсюду в книге обозначение (n, k, dmin) используется для параметров блокового кода длины n, который используется для кодирования сообщений длины k, и имеет мини-
50
