.

 

Лекция 7. ЦЕЛОСТНОСТЬ, СЖАТИЕ И ЗАЩИТА ДАННЫХ

 

В последние годы в связи с увеличением объема информации необычайно остро встает проблема надежного хранения, передачи и обработки информации. Весь спектр вопросов по работе с информацией можно условно разбить на три группы:

·  философский аспект, состоящий в изучении информационных потребностей общества (духовных, социальных, экономических) и создании возможностей (методов и средств) их эффективного удовлетворения. При этом должно соблюдаться право человека на получение информации;

·  технический аспект, обусловливающий технические средства, которые обслуживают информационные процессы, предоставляя возможности их качественного обеспечения, в том числе гарантируя такое свойство качества, как безопасность;

·  управленческий аспект, заключающийся в реализации идеи, что всякий процесс управления есть информационный процесс, базирующийся на сборе, хранении, обработке и передаче информации. При этом качество управления в значительной степени определяется качеством всех действий.

На надежность информации в компьютерных системах, исключая несчастные случаи (отключение электроэнергии, стихийные бедствия и тому подобное), существенно влияют:

·  большое количество устройств, собранных из комплектующих низкого качества или любителями-сборщиками;

·  нелицензионное ПО;

·  несовместимость программного и аппаратного обеспечения;

·  недостаточная компьютерная грамотность сотрудников, ответственных за поддержание компьютерных систем;

·  экономия средств на главном – качественном оборудовании и обучении персонала.

Проблема безопасности информации должна рассматриваться вместе с информационной безопасностью, под которой чаще всего понимают предупреждение отрицательного воздействия информации на любой объект: будь то мировая цивилизация или отдельный человек вне зависимости от формы воздействия – непосредственной, косвенной, направленной или случайной.

Некоторые аспекты целостности, сжатия и защиты данных рассматриваются в данной главе.

 

7.1. Корректирующие коды

 

ЭВМ воспринимают вводимую в них информацию в виде определенных символов. Обычно применяются двоичные символы: 0 и 1. Это обусловливается сравнительной простотой электронных элементов с двумя устойчивыми состояниями: ключевым режимом ламп и полупроводников, переключением состояний магнитных сердечников с прямоугольной петлей гистерезиса и т. д.

Кодирование информации состоит в представлении чисел и слов соответствующими им комбинациями символов.

Совокупность всех комбинаций из определенного количества символов, которые избраны для представления информации, называют кодом. Каждую такую комбинацию символов будем называть кодовой комбинацией. Общее количество кодовых комбинаций может быть меньше или равно числу всевозможных комбинаций из заданного количества символов.

Приведем некоторые определения из теории кодирования.

Равномерный код – код, все комбинации которого содержат одинаковое количество символов.

Неравномерный код – код с различным количеством символов для различных комбинаций (например, азбука Морзе).

В компьютерах обычно используют равномерные коды.

Кодовое расстояние –  число позиций, в которых коды не совпадают. Так, если A ~ a1, a2, ..., an, B ~ b1, b2, ..., bn, то кодовое расстояние (W) вычисляется по формуле

.

Пример: A ~ 101110, B ~ 000110, то W(AÄB) = 2.

Минимальное кодовое расстояние (d) – это минимальное расстояние между двумя любыми кодовыми комбинациями в заданном коде.

Для всех корректирующих кодов d > 1. Для обнаружения ошибки кратности t требуется, чтобы d = t + 1, а для ее исправления — d = 2t + 1. C увеличением значения d растет корректирующая способность кода, которая количественно может быть выражена как вероятность обнаружения или исправления ошибок различных типов.

В зависимости от назначения и возможностей помехозащищенных кодов различают коды самокорректирующиеся (позволяющие автоматически исправлять ошибки) и самоконтролирующиеся (позволяющие автоматически обнаруживать наиболее вероятные ошибки).

7.1.1. Коды Хемминга

 

Наиболее известные из самоконтролирующихся и самокорректирующихся кодов – коды Хемминга. Построены они применительно к двоичной системе счисления.

Для построения самокорректирующегося кода достаточно иметь один контрольный разряд (код с проверкой на четность). Но при этом мы не получаем никаких указаний о том, в каком именно разряде произошла ошибка, и, следовательно, не имеем возможности исправить ее. Остаются незамеченными ошибки, возникшие в четном числе разрядов.

Коды Хемминга имеют бóльшую относительную избыточность, чем коды с проверкой на четность, и предназначены либо для исправления одиночных ошибок (при d = 3), либо для исправления одиночных и обнаружения без исправления двойных ошибок (d = 4). В таком коде n-значное число имеет m информационных и k контрольных разрядов. Каждый из контрольных разрядов является знаком четности для определенной группы информационных знаков слова. При декодировании производится k групповых проверок на четность. В результате каждой проверки в соответствующий разряд регистра ошибки записывается 0, если проверка была успешной, или 1, если была обнаружена нечетность.

Группы для проверки образуются таким образом, что в регистре ошибки после окончания проверки получается K-разрядное двоичное число, показывающее номер позиции ошибочного двоичного разряда. Изменение этого разряда – исправление ошибки.

Первоначально эти коды предложены Хеммингом в таком виде, при котором контрольные знаки занимают особые позиции: позиция i-го знака имеет номер 2i–1. При этом каждый контрольный знак входит лишь в одну проверку на четность.

Рассмотрим код Хемминга, предназначенный для исправления одиночных ошибок, т. е. код с минимальным кодовым расстоянием d = 3.

Ошибка возможна и в одной из n позиций. Следовательно, число контрольных знаков, а значит, и число разрядов регистра ошибок должно удовлетворять условию

³ log2(n + 1).

(1)

Отсюда

£ n – log2(n + 1).

(2)

Значения m и k для некоторых коротких кодов, вычисленные по формулам (1) и (2) даны в табл. 7.1.

Таблица 7.1. Значения m и n

n

3

4

5

6

7

8

9

10

11

12

m

1

1

2

3

4

4

5

6

7

8

k

2

3

3

3

3

4

4

4

4

4

 

Чтобы число в регистре ошибок (РОШ) указывало номер позиции ошибочного разряда, группы для проверки выбираются по правилу:

I гр.:

 

все нечетные позиции, включая и позиции контрольного разряда, т. е. позиции, в первом младшем разряде которых стоит 1.

II гр.:

 

все позиции, номера которых в двоичном представлении имеют 1 во втором разряде справа (например, 2, 3, 6, 7, 10) и т. д.

III гр.

:

разряды, имеющие "1" в третьем разряде справа, и т. д.

Примечание: каждый контрольный знак входит только в одну проверяемую группу.

 

Пример 1. Пусть k = 5 (табл. 7.2).

Таблица 7.2. Формирование контрольных групп

Номер

проверки

Позиция

контрольного

знака

Проверяемые позиции

1

1

1, 3, 5, 7, 9, 11, 13, ...

2

2

2, 3, 6, 7, 10, 11, ...

3

4

4, 5, 6, 7, 12, 13, ...

4

8

8, 9, 10, 11, 12, 13, ...

5

16

16, 17, 18, 19, 20, 21

 

Пример 2. Рассмотрим семизначный код Хемминга, служащий для изображения чисел от 0 до 9 (табл. 7.3).

Таблица 7.3. Семизначный код Хемминга

 

Десятичное

Простой двоичный

Код Хемминга

 

число

код

 

 

 

к

 

к

к

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

1

0

0

0

0

1

1

1

2

0

0

1

0

0

0

1

1

0

0

1

3

0

0

1

1

0

0

1

1

1

1

0

4

0

1

0

0

0

1

0

1

0

1

0

5

0

1

0

1

0

1

0

1

1

0

1

6

0

1

1

0

0

1

1

0

0

1

1

7

0

1

1

1

0

1

1

0

1

0

0

8

1

0

0

0

1

0

0

1

0

1

1

9

1

0

0

1

1

0

0

1

1

0

0

 

Пусть передан код числа 6 в виде "0 1 1 0 0 1 1", а приняли в виде "0 1 0 0 0 1 1". Проверочные группы:

I проверка :

разряды 1, 3, 5, 7 – дает 1 в младший разряд РОШ.

II проверка :

разряды 2, 3, 6, 7 – дает 0 во второй разряд РОШ.

III проверка:

разряды 4, 5, 6, 7 – дает 1 в третий разряд РОШ.

Содержимое РОШ "101", значит ошибка в пятой позиции.

Примечание. В каждый из контрольных разрядов при построении кода Хемминга посылается такое значение, чтобы общее число единиц в его контрольной сумме было четным. РОШ заполняется начиная с младшего разряда.

Вывод. Рост кодового расстояния позволяет увеличить корректирующую способность кода. В то время как d = 2 у кода с проверкой на четность позволяет обнаруживать одиночную ошибку, код Хемминга с d = 3 ис-правлет ее.

 

7.1.2. Код с проверкой на четность

 

Код с проверкой на четность образуется добавлением к группе информационных двоичных знаков одного контрольного. Значение его выбирается таким образом, чтобы общее число единиц в слове было четным или нечетным. После чтения или записи данных в память проверяется, сохранен ли принцип записи. Здесь d = 2. Обнаруживаются одиночные ошибки и групповые с нечетной кратностью. Целесообразно дополнять "до нечета", чтобы отличить "0" от отсутствия информации в слове, ибо в этом случае в слове будет хотя бы одна единица.

Рассмотренные выше коды используются лишь для повышения надежности передачи информации. Они непригодны для контроля выполнения операций в компьютере. Действительно, все рассматриваемые коды основаны на определении изменения исходного кода. При выполнении арифметических и логических операций (АЛО) код всегда изменяется, даже если он без ошибок.

Известно много кодов для контроля выполнения АЛО. Например, код "2 из 5" или "2 из 7" (2 единицы и 3 нуля и 2 единицы и 5 нулей соответственно). Но эти коды имеют большую избыточность и требуют сложной схемы АЛУ.

Определение 1. Наименьшим неотрицательным вычетом C(N) числа N по модулю P назовем число .

Определение 2. Два числа N1 и N2 сравнимы по mod P, если равны их наименьшие вычеты по этому модулю, т. е. если

С (N1) = C (N2), т. е. N1 º N(mod P).

Верно соотношение N º C (N) (mod P).

Наибольшее распространение как в отечественных, так и в зарубежных компьютерах получил раздельный контроль АО с помощью спецустройства, выполняющего арифметические операции над контрольными разрядами. При этом контрольные знаки есть двоичное изображение наименьшего вычета по mod P. Такой контроль получил название контроля по модулю.

Контроль АЛО основан на следующих свойствах:

· если N1 ± N2 = N3 или N1N2 = N3 , то C(N1± C(N2º C(N3) (mod P)  и C(N1) C(N2º C(N3) (mod P);

· если N1 = N2N3 + N4, то C(N1º [C(N2) C(N3) + C(N4)] (mod P).

Кодирование чисел состоит в определении C(Ni), а для обнаружения ошибок вместо декодирования проверяется выполнение сравнений.

Принцип раздельного контроля по модулю может быть представлен следующей схемой (рис. 7.1)

Для эффективного использования данного метода модуль, выбираемый для контроля, должен удовлетворять следующим свойствам:

·   должен быть достаточно велик, ибо от его значения зависит корректирующая способность кода;

·  должен быть таким, чтобы наименьшие неотрицательные вычеты по нему можно было легко определить;

 


Рис. 7.1. Контроль по модулю

 

Выбор модуля с минимальным кодовым расстоянием d = 2 используют для обнаружения одиночных и некоторых кратных ошибок. Чаще выбирают модуль P, равный B–1, где B – основание системы, что позволяет проще определять вычеты.

Все вышеизложенное позволяет утверждать, что система в коде вычетов – самокорректирующаяся.

 

На главную