Файл: Дискретная мат-ка_УП.pdf

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

106

Выход: р – 

индекс

 

самого

 

длинного

 

слова

 

в

 

словаре

совпа

-

дающего

 

с

 

символами

 

f[k]..f[k + l]

Если

 

такого

 

слова

 

в

 

словаре

 

нет

то

 р

 = 0. 

l: = 0; р: = 0 { 

начальное

 

состояние

 } 

for 

from to d do 

if 

D[i] = f[k..k + Length(D[i]) – l]&Length(D[i]) > then 

p: = i;l: = Length(D[i]) { 

нашли

 

более

 

подходящее

 

слово

 }  

end if  
end for  
return 

p 

Распаковка

 

осуществляется

 

следующим

 

алгоритмом

Алгоритм 4. 

Распаковка

 

по

 

методу

 

Лемпела

-

Зива

 

Вход

сжатый

 

текст

представленный

 

массивом

 

пар

 

g : array 

[l..

mof record p : int; q : char endrecord, 

где

 

p – 

номер

 

слова

 

в

 

словаре

q – 

код

 

дополняющей

 

буквы

Выход

исходный

 

текст

заданный

 

последовательностью

 

строк

 

и

 

символов

.  

D[0]: = ««; d: = 0 { 

начальное

 

состояние

 

словаря

 }  

for 

≤ n do 

p: = g[k].p { p – 

индекс

 

слова

 

в

 

словаре

 }  

q:= g[k].q { q – 

дополнительная

 

буква

 }  

yield 

{ 

вывод

 

слова

 

и

 

еще

 

одной

 

буквы

 } 

d: = d + 1; D[d]: = D[p] U q  
{

 

пополнение

 

словаря

здесь

 U – 

это

 

конкатенация

 }  

end for

 

 

На

 

практике

 

применяют

 

различные

 

усовершенствования

 

этой

 

схемы

1. 

Словарь

 

можно

 

сразу

 

инициализировать

например

кода

-

ми

 

символов

  (

то

 

есть

 

считать

что

 

однобуквенные

 

слова

 

уже

 

из

-

вестны

). 

2. 

В

 

текстах

 

часто

 

встречаются

 

регулярные

 

последовательно

-

сти

пробелы

 

и

 

табуляции

 

в

 

таблицах

 

и

 

т

.

п

Сопоставлять

 

каждой

 

подпоследовательности

 

такой

 

последовательности

 

отдельное

 

сло

-

во

 

в

 

словаре

 

нерационально

В

 

таких

 

случаях

 

лучше

 

применить

 

специальный

 

прием

например

закодировать

 

последовательность

 


background image

 

107

пробелов

 

парой

 <

k,s>

где

 

k – 

количество

 

пробелов

, a 

s – 

код

 

про

-

бела

 

8.5 

Шифрование

 

 

Защита

 

компьютерных

 

данных

 

от

 

несанкционированного

 

доступа

искажения

 

и

 

уничтожения

 

в

 

настоящее

 

время

 

является

 

серьезной

 

социальной

 

проблемой

Применяются

 

различные

 

под

-

ходы

 

к

 

решению

 

этой

 

проблемы

 

Поставить

 

между

 

злоумышленником

 

и

 

данными

 

в

 

ком

-

пьютере

 

непреодолимый

 

барьер

то

 

есть

 

исключить

 

саму

 

воз

-

можность

 

доступа

 

к

 

данным

 

путем

 

физической

 

изоляции

 

компь

-

ютера

 

с

 

данными

применения

 

аппаратных

 

ключей

 

защиты

 

и

 

т

.

п

Такой

 

подход

 

надежен

но

 

он

 

затрудняет

 

доступ

 

к

 

данным

 

и

 

ле

-

гальным

 

пользователям

а

 

потому

 

постепенно

 

уходит

 

в

 

прошлое

 

Поставить

 

между

 

злоумышленником

 

и

 

данными

 

в

 

ком

-

пьютере

 

логический

 

барьер

то

 

есть

 

проверять

 

наличие

 

прав

 

на

 

доступ

 

к

 

данным

 

и

 

блокировать

 

доступ

 

при

 

отсутствии

 

таких

 

прав

Для

 

этого

 

применяются

 

различные

 

системы

 

паролей

реги

-

страция

 

и

 

идентификация

 

пользователей

разграничения

 

прав

 

доступа

 

и

 

т

.

п

Практика

 

показывает

что

 

борьба

 

между

  «

хакера

-

ми

» 

и

 

модулями

 

защиты

 

операционных

 

систем

 

идет

 

с

 

перемен

-

ным

 

успехом

 

Хранить

 

данные

 

таким

 

образом

чтобы

 

они

 

могли

  «

сами

 

за

 

себя

 

постоять

». 

Другими

 

словами

так

 

закодировать

 

данные

чтобы

 

даже

 

получив

 

их

злоумышленник

 

не

 

смог

 

бы

 

нанести

 

ущерба

Этот

 

раздел

 

посвящен

 

обсуждению

 

методов

 

кодирования

применяемых

 

в

 

последнем

 

случае

 
8.6 

Криптография

 

 
Шифрование – 

это

 

кодирование

 

данных

 

с

 

целью

 

защиты

 

от

 

несанкционированного

 

доступа

Процесс

 

кодирования

 

сообщения

 

называется

  шифрованием

 

(

или

  зашифровкой

), 

а

 

процесс

 

декодирования

 – расшифровыва

-

нием  (

или

  расшифровкой

). 

Само

 

кодированное

 

сообщение

 

назы

-


background image

 

108

вается

  шифрованным

  (

или

 

просто

  шифровкой

), 

а

 

применяемый

 

метод

 

называется

 шифром

. 

Основное

 

требование

 

к

 

шифру

 

состоит

 

в

 

том

чтобы

 

рас

-

шифровка

  (

и

может

 

быть

зашифровка

была

 

возможна

 

только

 

при

 

наличии

 

санкции

то

 

есть

 

некоторой

 

дополнительной

 

инфор

-

мации

 (

или

 

устройства

), 

которая

 

называется

 ключом

 

шифра

Про

-

цесс

 

декодирования

 

шифровки

  без

 

ключа

 

называется

  дешифро

-

ванием (

или

 дешифрацией

или

 

просто

 раскрытием

 

шифра

). 

Область

 

знаний

 

о

 

шифрах

методах

 

их

 

создания

 

и

 

раскрытия

 

называется

 криптографией

 (

или

 тайнописью

). 

Свойство

 

шифра

 

противостоять

 

раскрытию

 

называется

 

криптостойкостъю  (

или

  надежностью

и

 

обычно

 

измеряется

 

сложностью

 

алгоритма

 

дешифрации

В

 

практической

 

криптографии

 

криптостойкость

 

шифра

 

оце

-

нивается

 

из

 

экономических

 

соображений

Если

 

раскрытие

 

шифра

 

стоит

  (

в

 

денежном

 

выражении

включая

 

необходимые

 

компью

-

терные

 

ресурсы

специальные

 

устройства

 

и

 

т

.

п

.) 

больше

чем

 

са

-

ма

 

зашифрованная

 

информация

то

 

шифр

 

считается

 

достаточно

 

надежным

Криптография

 

известна

 

с

 

глубокой

 

древности

 

и

 

использует

 

самые

 

разнообразные

 

шифры

как

 

чисто

 

информационные

так

 

и

 

механические

В

 

настоящее

 

время

 

наибольшее

 

практическое

 

зна

-

чение

 

имеет

 

защита

 

данных

 

в

 

компьютере

поэтому

 

далее

 

рас

-

сматриваются

 

программные

 

шифры

 

для

 

сообщений

 

в

 

алфавите

 

{0,1}. 

 
Шифрование с помощью случайных чисел
 
 

Пусть

 

имеется

 

датчик

  псевдослучайных

 

чисел

работающий

 

по

 

некоторому

 

определенному

 

алгоритму

Часто

 

используют

 

сле

-

дующий

 

алгоритм

T

i+1

:

 =(a –T

i

 + b) mod с

где

 

T

i

 – 

предыдущее

 

псевдослучайное

 

число

T

i+1

  – 

следующее

 

псевдослучайное

 

число

а

 

коэффициенты

 а

, b, с 

постоянны

 

и

 

хо

-

рошо

 

известны

Обычно

  с

 = 2

n

где

 

n – 

разрядность

 

процессора

,          

a mod 4 = 1, a b – 

нечетное

В

 

этом

 

случае

 

последовательность

 

псевдослучайных

 

чисел

 

имеет

 

период

  с

Процесс

 

шифрования

 

определяется

 

следующим

 


background image

 

109

образом

Шифруемое

 

сообщение

 

представляется

 

в

 

виде

 

последо

-

вательности

 

слов

 S

0

, S

1

,..., 

каждое

 

длины

 п

которые

 

складывают

-

ся

 

по

 

модулю

 2 

со

 

словами

 

последовательности

 T

0

,

Т

1

..., 

то

 

есть

 

С

i

: = 

S

i

 

⊕ T

i

Последовательность

 Т

0

Т

1

,… 

называется

 гаммой

 шифра. 

Процесс

 

расшифровывания

 

заключается

 

в

 

том

чтобы

 

еще

 

раз

 

сложить

 

шифрованную

 

последовательность

 

с

 

той

 

же

 

самой

 

гаммой

 

шифра

S

:

 = C

⊕ T

i

. 

Ключом

 

шифра

 

является

 

начальное

 

значение

 Т

0

которое

 

яв

-

ляется

 

секретным

 

и

 

должно

 

быть

 

известно

 

только

 

отправителю

 

и

 

получателю

 

шифрованного

 

сообщения

Шифры

в

 

которых

 

для

 

зашифровки

 

и

 

расшифровки

 

исполь

-

зуется

 

один

 

и

 

тот

 

же

 

ключ

называются

 симметричными

. 

Если

 

период

 

последовательности

 

псевдослучайных

 

чисел

 

достаточно

 

велик

чтобы

 

гамма

 

шифра

 

была

 

длиннее

 

сообщения

то

 

дешифровать

 

сообщение

 

можно

 

только

 

подбором

 

ключа

При

 

увеличении

  п

 

экспоненциально

 

увеличивается

 

криптостойкость

 

шифра

Это

 

очень

 

простой

 

и

 

эффективный

 

метод

 

часто

 

применяют

 

«

внутри

» 

программных

 

систем

например

для

 

защиты

 

данных

 

на

 

локальном

 

диске

Для

 

защиты

 

данных

передаваемых

 

по

 

откры

-

тым

 

каналам

 

связи

особенно

 

в

 

случае

 

многостороннего

 

обмена

 

сообщениями

этот

 

метод

 

применяют

 

не

 

так

 

часто

поскольку

 

возникают

 

трудности

 

с

 

надежной

 

передачей

 

секретного

 

ключа

 

многим

 

пользователям

 
Криптостойкость
 
 

Описанный

 

в

 

предыдущем

 

подразделе

 

метод

 

шифрования

 

обладает

 

существенным

 

недостатком

Если

 

известна

 

хотя

 

бы

 

часть

 

исходного

 

сообщения

то

 

все

 

сообщение

 

может

 

быть

 

легко

 

дешифровано

Действительно

пусть

 

известно

 

одно

 

исходное

 

сло

-

во

 

S

i

Тогда

 

T

i

 : = C

 S

i

 

и

 

далее

 

вся

 

правая

 

часть

 

гаммы

 

шифра

 

определяется

 

по

 

указан

-

ной

 

формуле

 

датчика

 

псевдослучайных

 

чисел


background image

 

110

На

 

практике

 

часть

 

сообщения

 

вполне

 

может

 

быть

 

известна

 

злоумышленнику

Например

многие

 

текстовые

 

редакторы

 

поме

-

щают

 

в

 

начало

 

файла

 

документа

 

одну

 

и

 

ту

 

же

 

служебную

 

инфор

-

мацию

Если

 

злоумышленнику

 

известно

что

 

исходное

 

сообщение

 

подготовлено

 

в

 

данном

 

редакторе

то

 

он

 

сможет

 

легко

 

дешифро

-

вать

 

сообщение

Для

 

повышения

 

криптостойкости

 

симметричных

 

шифров

 

применяют

 

различные

 

приемы

1) 

вычисление

 

гаммы

 

шифра

 

по

 

ключу

 

более

 

сложным

 (

или

 

секретным

способом

2) 

применение

 

вместо

 

ф

 

более

 

сложной

 (

но

 

обратимой

опе

-

рации

 

для

 

вычисления

 

шифровки

3) 

предварительное

 

перемешивание

 

битов

 

исходного

 

сооб

-

щения

 

по

 

фиксированному

 

алгоритму

В

 

настоящее

 

время

 

широкое

 

распространение

 

получили

 

шифры

  с

  открытым  ключом. 

Эти

 

шифры

 

не

 

являются

 

симмет

-

ричными

 – 

для

 

зашифровки

 

и

 

расшифровки

 

используются

 

разные

 

ключи

При

 

этом

 

ключ

используемый

 

для

 

зашифровки

является

 

открытым

  (

не

 

секретным

и

 

может

 

быть

 

сообщен

 

всем

 

желаю

-

щим

 

отправить

 

шифрованное

 

сообщение

а

  ключ

используемый

 

для

 

расшифровки

является

 

закрытым

 

и

 

хранится

 

в

 

секрете

 

полу

-

чателем

 

шифрованных

 

сообщений

Даже

 

знание

 

всего

 

зашифро

-

ванного

 

сообщения

 

и

 

открытого

 

ключа

с

 

помощью

 

которого

 

оно

 

было

 

зашифровано

не

 

позволяет

 

дешифровать

 

сообщение

  (

без

 

знания

 

закрытого

 

ключа

). 

Для

 

описания

 

метода

 

шифрования

 

с

 

открытым

 

ключом

 

нужны

 

некоторые

 

факты

 

из

 

теории

 

чисел

изложенные

 (

без

 

дока

-

зательств

в

 

следующем

 

подразделе

 
Модулярная арифметика
 
 

В

 

этом

 

подразделе

 

все

 

числа

 

целые

Говорят

что

 

число

  а

 

сравнимо  по  модулю  п 

с

 

числом

 

b  (

обозначение

:  а 

≡ (mod n)), 

если

 а 

и

 

при

 

делении

 

на

 п

 

дают

 

один

 

и

 

тот

 

же

 

остаток

а 

 b (mod п) : = a mod п= b mod п. 

Отношение

  сравнимости

 

рефлексивно

симметрично

 

и

 

транзитивно

 

и

 

является

 

отношением

 

эквивалентности

Классы