Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Некоторые приложения теории кодирования. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

2.5. Декодирование по информационным совокупностям

Алгоритм 2: ErasureDecoder — исправление стираний

 

Вход: z, G

 

 

Выход: c – кодовый вектор

 

 

/*Определить множество номеров стертых координат

*/

1

ω = {i : zi = }

 

 

/*Найти информационную совокупность среди номеров нестертых

 

 

координат

*/

2

Найти информационную совокупность τ [n] \ ω

 

3 m= z|τ (G|τ )−1

 

4

вернуть c = mG

 

Алгоритм 3: ISD — декодирование по информационным совокупностям

Вход: z, G, t, I — максимальное число итераций Выход: c – кодовый вектор или сообщение об ошибке

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

1 for i [I] do

 

/*Случайно выбрать информационную совокупность

*/

2Случайно выбрать τ [n], |τ| = k, чтобы rank(G|τ ) = k

3m= z|τ (G|τ )−1

4c= mG

/*Проверка правильности декодирования

*/

5if ρ(c, z) t then

6вернуть c = mG

7 вернуть

Опишем способ декодирования по информационным совокупностям. Пусть C — линейный [n, k, d = 2t + 1]q-код, G = [g1, ..., gn] — его порождающая матрица, состоящая из n столбцов g1,...,gn, m Fkq . Закодируем m: mG = c. Представим вектор c в виде

c = m, g1T , ..., m, gnT .

Пусть при передаче по каналу в c произошло не более t ошибок. Принятый вектор можно представить в виде (2.1), где wt(e) t. Предположим, что

21

Глава 2. Схема защиты в канале с помехами

τ = {i1, ..., ik} — информационная совокупность, причем τ ∩ supp(e) = . Рассмотрим проекцию принятого вектора z на это множество τ:

T

T

= mG|τ .

z|τ = (c + e)|τ = c|τ + e|τ = cτ = m, gi1

, ..., m, gik

По условию, существует (G|τ )−1, следовательно,

m = z|τ (Gτ )−1.

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

z|τ = (c + e)|τ = c|τ + e|τ , e|τ ̸= 0k.

После умножения этого вектора на (Gτ |)−1 получим:

z|τ (G|τ )−1 = (c|τ + e|τ )(G|τ )−1

= c|τ (G|τ )−1 + e|τ (G|τ )−1 = m + x = m̸= m.

Однако получателю неизвестен заранее m, поэтому ему не с чем сравнивать вычисленный вектор m. Можно, конечно, в m часть координат отводить для контрольной суммы, но это снизит скорость передачи информации. Тем не менее, есть способ определить, выполняется ли равенство m= m. Умножим mна порождающую матрицу G (то есть закодируем m):

mG = (m + x)G = c + c˜ = cC.

Так как, по условию, ρ(c, c) 2t + 1 и ρ(c, z) t, то, по неравенству треугольника для метрики Хэмминга, получим:

2t + 1 ρ(c, c) ρ(z, c) + ρ(z, c) ρ(z, c) + t,

откуда t+1 ρ(z, c) или t < ρ(z, c). Таким образом, если информационная

22

2.6. Исправление ошибок и стираний в случае F2

совокупность содержит ошибочную координату, то закодированное слово по метрике Хэмминга будет находиться на расстоянии не менее t + 1 от принятого вектора.

Процедура декодирования по информационным совокупностям приведена в алгоритме 3. Если τ выбирается случайно и равновероятно, то вероятность того, что выбранная совокупность не содержит ошибочных координат, не превышает Cnk−t/Cnk. Поэтому за I = Cnk/Cnk−t итераций с большой вероятностью сообщение будет правильно декодировано. Достоинством такого декодера является его универсальность: он применим к любому линейному блоковому коду. Однако недостатком является его вычислительная сложность: этот алгоритм не является полиномиальным.

2.6. Исправление ошибок и стираний в случае F2

В случае, когда C — [n, k, d = 2t + p + 1]2-код, то есть C F2, для одновременного исправления ошибок и стираний может быть применен подходящий алгоритм декодирования в ближайшее кодовое слово, например, алгоритм ISD. Именно, пусть z Fn2 — искаженная версия некоторого кодового слова c C, в котором p координат стерто и содержится не более t ошибок. Пусть τe — множество номеров стертых координат, |τe| = p. Построим по вектору z два вектора: вектор z0, в котором стертым координатам присвоено значение 0, и вектор z1, в котором стертым координатам присвоено значение 1. Заметим, что

ρ(z0|τe, c|τe) = wt(c|τe), ρ(z1|τe, c|τe) = p − wt(c|τe).

Поэтому, по крайней мере, одно из значений – ρ(z0|τe, c|τe) или ρ(z1|τe, c|τe)

– не превышает p/2 . Пусть, например, ρ(z0|τe, c|τe) p/2 . Тогда,

ρ(z0, c) p/2 + t p/2 + (d − 1 − p)/2 (d − 1)/2.

Следовательно, алгоритм декодирования вектора z0 в ближайшее кодовое слово вернет c. Покажем, что в этом случае декодирование z1 в ближайшее

кодовое слово вернет либо c, либо такое c˜, что ρ(c˜|[n]\τe, z|[n]\τe) > t. Предположим, что при декодировании z1 в ближайшее кодовое слово получили

такое c˜ ̸= c, что ρ(c˜|[n]\τe, z|[n]\τe) t. Используя те же рассуждения, что и

23

Глава 2. Схема защиты в канале с помехами

при доказательстве теоремы 7, получим ρ(c, c˜) 2t + p, что противоречит тому, что C — [n, k, d = 2t + p + 1]2-код.

Реализация описанного подхода представлена в алгоритме 4.

Алгоритм 4: ErasureAndErrorsDecoder2 — исправление ошибок и стираний в случае F2

 

Вход: z, G, NearestDecoder — декодер в ближайшее кодовое слово

 

 

Выход: c – кодовый вектор

 

 

/*Определить множество номеров стертых координат

*/

1 τe = {i : zi = }

 

 

 

/*Заменить значения стертых позиций

*/

2

Для a {0, 1} построить векторы za = (z1a, ..., zna), где

 

 

zi = (zi, i

[en] τe.

 

 

a, i

τ ,

 

 

 

 

 

\

 

 

/*Выполнить декодирование z0 и z1 в ближайшие кодовые слова

*/

3

c˜ = NearestDecoder(z0)

 

4

if c˜ ̸= и ρ(c˜|[n]\τe, z|[n]\τe) t then

 

5вернуть c = c˜

6 else

7вернуть c = NearestDecoder(z1)

2.7. Пример

Рассмотрим [8, 4, 4]2-код C с порождающей матрицей

 

0

0

0

0

1

1

1

1

 

1

1

1

1

1

1

1

1

G =

0 0 1

1

0

0

1

1 .

 

0

1

0

1

0

1

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Так как кодовое расстояние равно 4, то этот код, как вытекает из (2.2), может исправить одну ошибку (t = 1) и одно стирание (p = 1). Пусть, например, из канала принят вектор z = (1, 0, 1, 1, 1, , 0, 0). В алгоритме

24

2.8. Вопросы для самоконтроля

ErasureAndErrorsDecoder2 по этому вектору будут построены две версии:

z0 = (1, 0, 1, 1, 1, 0 , 0, 0), z1 = (1, 0, 1, 1, 1, 1 , 0, 0).

Применив, например, NaiveDecoder в качестве NearestDecoder к обеим версиям, получим, что только z1 отстоит от кодового вектора (этим кодовым словом является (0, 0, 1, 1, 1, 1, 0, 0)) на расстоянии не более t (см. рис. 1).

 

c C

ρ(c, z0)

ρ(c, z1)

(0, 0, 0, 0, 0, 0, 0, 0)

 

4

5

 

(1, 1, 1, 1, 1, 1, 1, 1)

 

4

3

 

(0, 0, 0, 0, 1, 1, 1, 1)

 

6

5

 

(1, 1, 1, 1, 0, 0, 0, 0)

 

2

3

 

(0, 0, 1, 1, 0, 0, 1, 1)

 

4

5

 

(1, 1, 0, 0, 1, 1, 0, 0)

 

4

3

 

 

 

 

 

 

 

 

 

(0, 0, 1, 1, 1, 1, 0, 0)

 

2

 

1

 

 

 

 

 

 

 

 

(1, 1, 0, 0, 0, 0, 1, 1)

 

6

7

 

(0, 1, 0, 1, 0, 1, 0, 1)

 

6

5

 

(1, 0, 1, 0, 1, 0, 1, 0)

 

2

3

 

(0, 1, 0, 1, 1, 0, 1, 0)

 

4

5

 

(1, 0, 1, 0, 0, 1, 0, 1)

 

4

3

 

(0, 1, 1, 0, 0, 1, 1, 0)

 

6

5

 

(1, 0, 0, 1, 1, 0, 0, 1)

 

2

3

 

(0, 1, 1, 0, 1, 0, 0, 1)

 

4

5

 

(1, 0, 0, 1, 0, 1, 1, 0)

 

4

3

 

 

 

 

 

 

 

 

Рис. 1. Расстояние от кодовых слов кода C до векторов z0 и z1

2.8. Вопросы для самоконтроля

1.Обнаружение ошибок.

2.Декодер в ближайшее кодовое слово.

3.Исправление стираний.

4.Исправление ошибок.

5.Декодирование по информационным совокупностям.

6.Исправление ошибок и стираний в случае F2.

25

Глава 3

Схема симметричного шифрования

3.1. Постановка задачи

Пусть отправитель намерен передать по ЦКПД секретное сообщение получателю. Например, секретным сообщением может быть пароль от банковского счета. Этот пароль может быть сохранен в файле на носителе информации (НИ). В этом случае ЦКПД – это НИ, а отправителем и получателем, как правило, является один и тот же человек — владелец пароля: роль отправителя он выполняет в случае записи файла с паролем на НИ, а роль получателя выполняет каждый раз, когда считывает файл с НИ. Если НИ находится под контролем владельца пароля (НИ хранится в надежном сейфе, извлекается из сейфа только на время пользования паролем и т.п.), то этого может быть достаточно для защиты файла с паролем. Если НИ не находится под контролем владельца, например, НИ — это флеш-память телефона, то требуется дополнительная защита, так как носитель может быть потерян или украден.

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

26

3.2. Определение схемы симметричного шифрования

3.2. Определение схемы симметричного шифрования

Шифры могут быть симметричными и асимметричными. Их отличие заключается в том, что в симметричном шифре ключ шифрования и ключ расшифрования либо совпадают, либо из одного можно эффективно получить другой. В асимметричном шифре ключи шифрования и расшифрования различаются, причем по ключу шифрования вычислительно сложно найти ключ расшифрования, то есть неизвестен эффективный алгоритм нахождения ключа расшифрования по ключу шифрования. Отметим, что по ключу расшифрования ключ шифрования находится эффективно.

Симметричный шифр Σ можно определить как семейство, состоящее из N N обратимых отображений из множества открытых текстов X во множество шифртекстов Y:

k

X → Y

k=0

(3.1)

Σ = (E :

 

)N−1.

 

Здесь мы будем считать, что X = Y = {0, 1} . Важным требованием является обратимость отображений Ek. Отображение Ek−1 : Y → X обозначим Dk. Тогда существование обратимого отображения означает, что

x X, k : Dk(Ek(x)) = x.

Это свойство еще называется свойством корректности шифра. Отображение Ek назовем k-ым шифрующим отображением, а отображение Dk — k-ым отображением расшифрования. Обычно от шифрующих отображений и отображений расшифрования требуется, чтобы алгоритмы, реализующие эти отображения, были эффективными. Соответствующие алгоритмы шифрования и расшифрования обозначим Enc и Dec. Будем говорить, что алгоритм Enc (соответственно Dec) с параметром k {0, ..., N −1} реализует отображение Ek (соответственно Dk). Тогда шифрование x X с помощью отображения Ek будем обозначать Enc(k, x), а расшифрование y Y с помощью отображения Dk — Dec(k, y). Свойство корректности в этом случае может быть записано так:

x X, k : Dec(k, Enc(k, x)) = x.

(3.2)

Обычно алгоритмы Enc и Dec не являются секретными, а секретом яв-

27

Глава 3. Схема симметричного шифрования

ляется параметр k. Этот параметр называется ключом шифра, а множество K = {0, ..., N −1} называется ключевым множеством или множеством ключей. Необходимым (но не достаточным!) условием стойкости шифра Σ является большая мощность N множества K. Это означает, что N должно быть таким, чтобы перебор всех элементов ключевого множества был вычислительно невозможен в обозримом будущем. Например, в настоящее время при N = 2128 перебор ключевого множества вычислительно невозможен, а 1970-х годах считалось, что перебор N = 256 ключей невозможен (сейчас этот перебор осуществим за несколько дней на сравнительно недорогом кластере). Так как целому числу k из множества {0, ..., N −1} можно поставить в соответствие бинарный вектор длины n = log2N , то обычно под ключом понимают не число из диапазона {0, ..., N − 1}, а вектор из множества {0, 1}n. Поэтому и под ключевым множеством часто понимают множество K = {0, 1}n. Сразу стоит отметить, что не всегда ключевое множество — это множество векторов. Во многих криптосистемах ключевое множество имеет другую структуру: ключами могут быть, например, матрицы или наборы матриц.

Ключ из K обычно выбирается случайно и равновероятно. Алгоритм генерации ключей из ключевого множества обычно обозначают Gen. Наряду с определением (3.1), под симметричным шифром будем понимать тройку алгоритмов Σ = (Gen, Enc, Dec) с эффективными алгоритмами Enc и Dec, которые связаны свойством корректности (3.2).

Можно выделить ряд подходов к определению стойкости симметричного шифра. Один из подходов — это стойкость к дешифрованию или OWстойкость (OneWay-стойкость), когда атакующему известен шифртекст, а его цель — найти соответствующий открытый текст без знания ключа.

Более сильным требованием является требование стойкости к различению двух открытых текстов x0 и x1 по имеющемуся шифртексту y, соответствующему либо x0, либо x1. Именно, говорят, что шифр является стой-

ким к атаке различения по подобранным открытым текстам или IND- CPA-стойким (INDistinguishability under Chosen Plaintext Attack), если по двум открытым текстам x0 и x1, выбранным атакующим, и шифртексту y = Enc(k, xb), где b выбирается случайно и равновероятно из {0, 1} (b атакующему неизвестно), атакующий не может эффективно найти номер

28

3.3. Наивная симметричная кодовая схема шифрования

зашифрованного в y открытого текста. Другими словами, для IND-CPA- стойкого шифра любой эффективный алгоритм находит номер зашифрованного открытого текста с вероятностью, отличающейся от 1/2 на пренебрежимо малую величину.

Отметим, что атакующему перед выбором x0 и x1 позволяется делать ряд запросов к шифратору, чтобы получить набор пар вида (открытый текст, шифртекст). Поэтому для удобства обычно считают, что атакующий A использует два алгоритма: A1 и A2. Алгоритм A1 выполняет запросы к шифратору и выбирает пару x0 и x1, а алгоритм A2 определяет номер зашифрованного сообщения по шифртексту y.

3.3. Наивная симметричная кодовая схема шифрования

Пусть C — линейный [n, k, d]q-код с порождающей матрицей G и эффективным алгоритмом декодирования Decoder : Fnq → C. Алгоритм генерации ключа Gen случайно генерирует пару k = (S, P ), где S — невырожденная (k × k)-матрица, P — (n × n)-матрица перестановки. Алгоритм шифрования Enc на вход принимает открытый текст x Fkq , ключ k и возвращает шифртекст y:

y = Enc(k, x) = (xSG + z)P, wt(z) = (d − 1)/2 .

где вектор z выбран случайно и равновероятно из множества векторов веса t. Алгоритм расшифрования вектора y, используя псевдообратную к G матрицу G−1 (то есть такую n × k)-матрицу, что GG−1 = Ik), можно представить так:

Dec(k, y) = Decoder(yP −1)G−1S−1

=Decoder((xSG + z)P P −1)G−1S−1

=Decoder(xSG + z)G−1S−1 = xSGG−1S−1 = x.

3.4. Стойкость наивной схемы шифрования

Проблема такого шифра в том, что он не является IND-CPA-стойким. Атакующий, используя алгоритм A1, может выполнить несколько, напри-

29

Глава 3. Схема симметричного шифрования

мер, T N, запросов на шифрование одного сообщения x. Соответствующие шифртексты обозначим

yi = xSGP + ziP, i = 1, ..., T.

(3.3)

Далее атакующий выбирает открытые тексты x0 и x1, причем x0 = x, а x1 выбирается случайно из Fkq \ {x}. Получив шифртекст

y = Enc(k, xb) = xbSGP + zP,

где b {0, 1} (напомним, что в атаке различения по подобранным открытым текстам b неизвестно атакующему), атакующий строит векторы gi = y − yi, i = 1, ..., T . Если wt(gi) 2t для всех i, то атакующий считает, что шифровалось сообщение x0, иначе — x1. Уменьшить вероятность события, когда атакующий неверно определяет номер зашифрованного открытого текста, можно повышением числа запросов T , выполняемых A1.

С помощью алгоритма A1 можно построить и способ дешифрования, а не только способ различения. Имея набор (3.3), атакующий путем мажоритарного голосования может определить значение вектора xSGP , так как t = (d − 1)/2 < n/2. Действительно, можно полагать, что в векторе zi каждая координата принимает нулевое значение с вероятностью 1 − t/n. Так как t < n/2, то j-ая (j [n]) координата в векторах набора (3.3) в среднем более чем в половине из T случаев будет принимать неиспорченное значение j-ой координаты вектора xSGP . Таким образом можно получить значения векторов xlSGP , где в xl на l-ой координате размещена единица, а на остальных – нули, l = 1, ..., k. В итоге будет получена матрица SGP (за T k запросов на шифрование в алгоритме A1), которую можно использовать при дешифровании, например, используя алгоритм декодирования по информационным совокупностям ISD (см. алгоритм 3).

3.5. Схема Рао-Нама

Схема Рао-Нама [2] была построена с учетом недостатков наивной схемы шифрования. Эта схема может быть описана следующим образом. Пусть C — линейный [n, k, d]q-код с порождающей матрицей G и проверочной матрицей H. Матрицы G и H считаются несекретными и фиксированными.

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]