КОДИРОВАНИЕ ИНФОРМАЦИИ Информационная безопасность Кодирование vs Шифрование Кодирование и шифрование информации – достаточно близкие по смыслу термины. Тем не менее, они имеют существенные отличия. КоДиРоВаНие • Кодирование – смысл текста должен быть ясен всем. Любой, кто знает способ кодирования, может понять смысл закодированной информации. RjLbHjDfYbt • Шифрование – смысл текста должен быть ясен только определенным лицам, но скрыт от остальных. КоДиРоВаНие 2 ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ Знак + – * / = Знак – элемент конечного множества, обладающий информационным содержанием, отличающийся от других знаков данного множества. A = { +; –; /; *; =} < ≤ ≥ > = ≠ ≈ Запас знаков – конечное множество знаков. B = {<; ≤; ≥; >; =; ≈; ≠} 4 Алфавит A = { A; B; C; D; E; F; G; H; I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z } Алфавит – конечное и линейно упорядоченное множество знаков. Z = { E; F; G; H; I; J ; K ; L ; M ; N ; O; P } 5 Подмножества знаков A16 = { 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; A;B;C;D;E;F } Множество А может включать подмножества, которые могут образовывать запасы знаков меньших алфавитов. D10 = { 0; 1; 2; 3; 4; 5; 6; 7; 8; 9 } O8 = { 0; 1; 2; 3; 4; 5; 6; 7 } 6 Бинарное множество B = { 0; 1 } Бинарное множество B содержит только два знака. 7 Слово мода Слово – конечная последовательность знаков. A = {а; д; м; о} Множество слов над А – множество конечных последовательностей знаков А* над запасом знаков А. A* = {мода; дама; дома; мама; а; да; дом; ад; мадам} 8 Двоичные слова B = { 0; 1 } В – двоичный алфавит. В* – множество двоичных слов. B* = { 0; 1 }* Элементы множества В* называются двоичными словами длины n или n-битовыми словами. n=3 { 000; 001; 010; 011; 100; 101; 110; 111 } 9 Кодирование информации Кодирование – отображение, переводящее множество символов (запас знаков) А в множество символов (запас знаков) В. Аналогично обозначается кодирование слов. 10 Декодирование информации Декодирование – обратное отображение символов множества В в множество А. В общем случае предполагается, что кодирование является обратимой операцией. 11 КОДИРОВАНИЕ ТЕКСТОВОЙ И ЧИСЛОВОЙ ИНФОРМАЦИИ Позиционные системы счисления Представление числа в позиционной системе счисления с основанием В имеет вид: Разряды числа нумеруются от 0 (младший разряд, справа) до n (старший разряд, слева). 13 Запись чисел в позиционной системе Цифры аi входят в алфавит {a1, a2, a3, … , ai}, содержащий ровно В элементов. B6 = { 0; 1; 2; 3; 4; 5 } Числовое значение каждой цифры в записи числа в позиционной системе счисления зависит от её положения в записи числа (от номера разряда). 1116 = 1*62 + 1*61 + 1*60 = 36 + 6 + 1 = 4310 1236 = 1*62 + 2*61 + 3*60 = 36 +12 + 3 = 5110 2136 = 2*62 + 1*61 + 3*60 = 72 + 6 + 3 = 8110 14 Сравнение чисел Числовое значение каждой цифры в записи числа в позиционной системе счисления зависит от основания системы счисления. 1236 = 1*62 + 2*61 + 3*60 = 36 + 12 + 3 = 5110 12310 = 1*102 + 2*101 + 3*100 = 100 + 20 + 3 = 12310 12316 = 1*162 + 2*161 + 3*160 = 256 + 32 + 3 = 29110 Для сравнения чисел, записанных в разных системах счисления, необходимо привести их в одну систему счисления (например, двоичную или десятичную). 15 Перевод чисел в двоичную систему Для перевода числа из десятичной системы счисления в двоичную систему счисления методом вычитания из исходного числа поочередно вычитаются целые степени двойки, не превосходящие 37 - 32 = 5 (32 = 25 ) остаток от вычитания. 5 - 4 = 1 ( 4 = 22 ) 1 - 1 = 0 ( 1 = 20 ) В двоичной записи числа единицы записываются в тех разрядах, номера которых соответствуют вычтенным степеням двойки. 3710 = 1*25 + 1*22 + 1*20 = 32 + 4 + 1 = 1001012 16 Непозиционные системы I=1 X=10 C=100 V=5 L=50 M=1000 В римской системе счисления каждый знак имеет строго определенное числовое значение. MCLXVI = = 1000 + 100 + 50 + 10 + 5 + 1 = = 116610 17 Кодировка ASCII ASCII – стандартная кодировка букв английского алфавита (American Standard Code for Information Interchange – Американский стандартный код для обмена информацией). Буквы других алфавитов (кроме латинского) представлены в расширенном 8-битном коде (исходный код – семибитный). 18 Многобайтовые кодировки Многобайтовые кодировки необходимы для кодирования текстов на языках, имеющих более 255 знаков в алфавите. Наиболее распространенной многобайтовой кодировкой является кодировка Unicode, поддержка которой включена во все современные операционные системы. 19 КОДЫ ПОСТОЯННОЙ ДЛИНЫ Код постоянной длины Код постоянной длины – двоичное кодирование, отображающее каждый кодируемый знак на двоичное слово одинаковой длины. Если число знаков в алфавите А равно n, то можно построить код постоянной длины l (где l – наименьшее натуральное число, удовлетворяющее условию). 21 Пример кода постоянной длины Наиболее компактное кодирование достигается в том случае, когда число букв в алфавите равняется целой степени двойки. Для кодирования 32-х заглавных букв русского алфавита (за исключением буквы Ё) будет достаточно кода длины L = log232 = 5 22 Расстояние Хэмминга Расстояние Хэмминга h(a,b) – количество позиций, в которых отличаются двоичные слова a и b одинаковой длины. Расстоянием Хэмминга h кода называется наименьшее расстояние Хэмминга между его кодовыми словами. 23 Код Грэя Код Грэя (одношаговый код) – код постоянной длины, в котором коды двух последовательных знаков из линейно упорядоченного алфавита А различаются точно в одном бите. Циклический код Грэя – код Грэя, в котором коды первого и последнего знаков из линейно упорядоченного алфавита А различаются точно в одном бите. 24 Надежность кодирования ТЕОРЕМА. Если код имеет расстояние Хэмминга h, то все ошибки, которые встречаются меньше чем в h битах, могут быть обнаружены. Все ошибки, появившиеся менее чем в h/2 битах, могут быть успешно устранены. Код с добавлением бита четности позволяет обнаружить единичную ошибку, поскольку для него h(a,b)=2. Бит четности равен нулю, если количество единиц в исходном слове четно (как в коде слова a=01101010), и равен единице, если нечетно (как в коде слова b=01101011). 25 Исправление единичных ошибок К исходному 4-битному коду слова b=b1b2b3b4 добавляются три контрольных бита b5b6b7. При декодировании вычисляются 3 бита, образующие код позиции ошибки. 26 КОДЫ ПЕРЕМЕННОЙ ДЛИНЫ Коды переменной длины Код Морзе строится из трех знаков: (.) точка – короткая передача; (–) тире – длинная передача; (_) пробел – пауза в передаче. Код телефонных систем для импульсного набора цифр: 28 Префиксные коды Код называется префиксным, если кодовое слово ни одного знака не является началом (префиксом) кодового слова другого знака (условие Фано). Слова префиксного кода можно записывать в одну цепочку, не используя разделительных символов. Любую такую цепочку можно единственным образом разделить на ее компоненты. 29 Полные префиксные коды Префиксный код называется полным, если добавление к нему любого нового кодового слова нарушает свойство префиксности. Так, например, с(х) является префиксом с(А) и с(В), а с(С) является префиксом с(у) и с(z). При прочих равных условиях полные префиксные коды более компактны, чем неполные. 30 ТЕОРЕМА КОДИРОВАНИЯ Стохастический источник сообщений Стохастический источник сообщений генерирует тексты в виде последовательности символов с заданным алфавитом и стационарными (не зависящими от времени) статистическими характеристиками появления элементов алфавита в последовательности. В простейшем случае каждый символ ai∈A появляется независимо от других с вероятностью p(i). 32 Энтропия источника сообщений Количество информации, приносимое в среднем одним элементом сообщения (текста), по определению равно энтропии источника. Энтропия источника H является непрерывной функцией от p(i). При фиксированном n энтропия максимальна и равна log2n в случае, если все p(i) равны между собой. 33 Длина кодового слова l – длина i-го кодового слова. Средняя длина кодовых слов может быть определена следующим образом: 34 Теорема кодирования Для любого двоичного кодирования L≥H. Каждый источник может быть закодирован так, что разность L–H будет сколь угодно малой. При выборе метода кодирования следует стремиться к тому, чтобы разность (L–H)→0 Эффективность кода H/L→1 Избыточность кода (L – H) / L → 0 35 Построение эффективных кодов Общее правило построения наиболее эффективного кода неизвестно. Однако, предложен ряд алгоритмов, приводящих к построению двоичных кодов с эффективностью, близкой к максимальной. Для повышения эффективности двоичного кода необходимо соблюдение следующих условий: 1. вероятности появления двоичных символов «0» и «1» должны быть равны; 2. вероятности появления «0» и «1» не должны зависеть от того, какие символы им предшествовали. 36