Научная статья на тему 'ОБ АЛГОРИТМАХ ДЕКОДИРОВАНИЯ КОДОВ ГОППЫ НА СЛУЧАЙ ОШИБОК И СТИРАНИЙ'

ОБ АЛГОРИТМАХ ДЕКОДИРОВАНИЯ КОДОВ ГОППЫ НА СЛУЧАЙ ОШИБОК И СТИРАНИЙ Текст научной статьи по специальности «Математика»

CC BY
67
10
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПОМЕХОУСТОЙЧИВЫЕ КОДЫ / КОДЫ РИДА-СОЛОМОНА / КОДЫ ГОППЫ / ДЕКОДИРОВАНИЕ КОДА

Аннотация научной статьи по математике, автор научной работы — Рацеев Сергей Михайлович, Череватенко Ольга Ивановна

В 1978 г. Мак-Элис построил первую кодовую криптосистему с открытым ключом, которая основана на применении помехоустойчивых кодов. Данная криптосистема именно на основе кодов Гоппы считается перспективной и криптостойкой с учетом квантовых вычислений. При этом эффективные атаки на секретные ключи этой криптосистемы до сих пор не найдены. В работе исследуются алгоритмы декодирования кодов Гоппы на случай ошибок и стираний. Приводятся четыре алгоритма декодирования на основе алгоритмов для кодов Рида–Соломона, предложенных Гао, Берлекэмпом и Месси, Сугиямой и др. Первые два алгоритма строятся на основе алгоритма Гао и относятся к алгоритмам бессиндромного декодирования, остальные — к алгоритмам синдромного декодирования. При этом любой из этих алгоритмов применим и для случая канала связи только с ошибками. Также приводятся примеры декодирования сепарабельных кодов Гоппы с использованием данных алгоритмов.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

DECODING ALGORITHMS FOR GOPPA CODES WITH ERRORS AND ERASURES

In 1978, McEliece built the first public key cryptosystem based on error-correcting codes. This cryptosystem based on Goppa codes is considered promising and cryptographically stable, taking into account quantum computing. At the same time, effective attacks on the secret keys of this cryptosystem have not yet been found. In the paper, algorithms for decoding Goppa codes in the case of errors and erasures are investigated. Four decoding algorithms based on the algorithms for Reed–Solomon codes proposed by Gao, Berlekamp and Massey, Sugiyama, and others are given. The first two algorithms are based on Gao algorithm and related to syndrome-free decoding algorithms, the rest are related to syndrome decoding algorithms. Moreover, any of these algorithms is also applicable for the case of a communication channel with errors only. Examples of decoding separable Goppa codes using these algorithms are also given.

Текст научной работы на тему «ОБ АЛГОРИТМАХ ДЕКОДИРОВАНИЯ КОДОВ ГОППЫ НА СЛУЧАЙ ОШИБОК И СТИРАНИЙ»

Известия Саратовского университета. Новая серия. Серия: Математика. Механика. Информатика. 2022. Т. 22, вып. 1. С. 28-47

Izvestiya of Saratov University. Mathematics. Mechanics. Informatics, 2022, vol. 22, iss. 1, pp. 28-47

https://mmi.sgu.ru https://doi.org/10.18500/1816-9791-2022-22-1-28-47

Научная статья УДК 519.725

Об алгоритмах декодирования кодов Гоппы на случай ошибок и стираний

2

С. М. Рацеев10, О. И. Череватенко

1Ульяновский государственный университет, Россия, 432017, г. Ульяновск, ул. Льва Толстого, д. 42 2Ульяновский государственный педагогический университет имени И. Н. Ульянова, Россия, 432071, г. Ульяновск, пл. Ленина, д. 4/5

Рацеев Сергей Михайлович, доктор физико-математических наук, профессор кафедры информационной безопасности и теории управления, ratseevsm@mail.ru, https://orcid.org/0000-0003-4995-9418 Череватенко Ольга Ивановна, кандидат физико-математических наук, доцент кафедры высшей математики, choi2008@yandex.ru, https://orcid.org/0000-0003-3931-9425

Аннотация. В 1978 г. Мак-Элис построил первую кодовую криптосистему с открытым ключом, которая основана на применении помехоустойчивых кодов. Данная криптосистема именно на основе кодов Гоппы считается перспективной и криптостойкой с учетом квантовых вычислений. При этом эффективные атаки на секретные ключи этой криптосистемы до сих пор не найдены. В работе исследуются алгоритмы декодирования кодов Гоппы на случай ошибок и стираний. Приводятся четыре алгоритма декодирования на основе алгоритмов для кодов Рида-Соломона, предложенных Гао, Берлекэмпом и Месси, Сугиямой и др. Первые два алгоритма строятся на основе алгоритма Гао и относятся к алгоритмам бессиндромного декодирования, остальные — к алгоритмам синдромного декодирования. При этом любой из этих алгоритмов применим и для случая канала связи только с ошибками. Также приводятся примеры декодирования сепарабельных кодов Гоппы с использованием данных алгоритмов. Ключевые слова: помехоустойчивые коды, коды Рида-Соломона, коды Гоппы, декодирование кода

Для цитирования: Рацеев С. М., Череватенко О. И. Об алгоритмах декодирования кодов Гоппы на случай ошибок и стираний // Известия Саратовского университета. Новая серия. Серия: Математика. Механика. Информатика. 2022. Т. 22, вып. 1. С. 28-47. https://doi.org/10.18500/1816-9791-2022-22-1-28-47

Статья опубликована на условиях лицензии Creative Commons Attribution 4.0 International (CC-BY 4.0)

Article

Decoding algorithms for Goppa codes with errors and erasures

S. M. Ratseev10, O. I. Cherevatenko2

1Ulyanovsk State University, 42 Leo Tolstoy St., Ulyanovsk 432017, Russia 2Ilya Ulyanov State Pedagogical University, 4/5 Ploshchad' Lenina, Ulyanovsk 432071, Russia

Sergey M. Ratseev, ratseevsm@mail.ru, https://orcid.org/0000-0003-4995-9418 Olga I. Cherevatenko, choi2008@yandex.ru, https://orcid.org/0000-0003-3931-9425

Abstract. In 1978, McEliece built the first public key cryptosystem based on error-correcting codes. This cryptosystem based on Goppa codes is considered promising and cryptographically stable, taking into account quantum computing. At the same time, effective attacks on the secret keys of this cryptosystem have not yet been found. In the paper, algorithms for decoding Goppa codes in the case of errors and erasures are investigated. Four decoding algorithms based on the algorithms for Reed-Solomon codes proposed by Gao, Berlekamp and Massey, Sugiyama, and others are given. The first two algorithms are based on Gao algorithm and related to syndrome-free decoding algorithms, the rest are related to syndrome decoding algorithms. Moreover, any of these algorithms is also applicable for the case of a communication channel with errors only. Examples of decoding separable Goppa codes using these algorithms are also given. Keywords: error-correcting codes, Reed-Solomon codes, Goppa codes, code decoding For citation: Ratseev S. M., Cherevatenko O. I. Decoding algorithms for Goppa codes with errors and erasures. Izvestiya of Saratov University. Mathematics. Mechanics. Informatics, 2022, vol. 22, iss. 1, pp. 28-47 (in Russian). https://doi.org/10.18500/1816-9791-2022-22-1-28-47 This is an open access article distributed under the terms of Creative Commons Attribution 4.0 International License (CC-BY 4.0)

Введение

Важность исследования кодов Гоппы обусловлена, в частности, тем, что на их основе строятся перспективные постквантовые криптосистемы [1]. Хорошо известно, что некоторые классические коды Гоппы лежат на границе Варшамова-Гильберта.

Определение кода Гоппы [2] опирается на два объекта: многочлен С(х) с коэффициентами из поля GF(qm), который называется многочленом Гоппы; подмножество L = [а0, а\,..., ап-\} элементов поля GF(qm) таких, что G(ai) = 0 для всех ai е L. Код Гоппы r(L,G) состоит из всех векторов u = (щ,щ,... ,ип-\) с компонентами из GF(q), для которых п-1

Если С(х) неприводим, то код Г(Ь,С) называется неприводимым кодом Гоппы. Множество Ь называется множеством нумераторов позиций кодового слова. Имеют место следующие оценки параметров для кодов Гоппы (см., например, [2,3]).

Теорема 1. Параметры [п,к,(1}-кода Г(Ь,й) над полем СР^), где Ь с СР связаны соотношением

Пусть а = (а0,аг,... ,ап-1), где а^ — различные элементы поля СР(дт), у = = (уо,у\,... ,уп-\) — ненулевые (не обязательно различные) элементы из СР^т). Тогда обобщенный код Рида-Соломона, обозначаемый СКви(а,у), состоит из всех кодовых векторов вида

где Ъ(х) — информационные многочлены над полем СРстепени не выше к — 1. Нам понадобится следующее утверждение (см., например, [4]).

Теорема 2. Код Г(Ь,С) представляет собой ограничение кода СК8п-г(Ь,у) на подполе Р=СР(д): Г(Ь, С)=СКБп-г(Ь,у) П Рп, где С(х), у = (у0,у- ... ,уп-х),

п = \L\, k ^ п — mr, г = degG(x), d ^ г + 1.

и = (y0b(a0),yib(ai),..., yn-ib(an-i)),

(1)

i = 0,1,...,п — 1.

(2)

Следствие 1. Проверочная матрица кода СЯ8П-Г (Ь, у), который задает код Г(Ь, С), имеет вид

( 1

а0

1

а1

1 \ ( С(ао)-1 0

о сы-1

ап-1

V

г-1

ап

ал

г-1

0 0

\

г—1 «п-1 ) \

0

0

С(ап-1)-1

т.е. совпадает с проверочной матрицей кода Г(Ь,С).

Таким образом, код Г(Ь,С) можно задать с помощью обобщенного кода Рида-Соломона (ОРС). Для декодирования кодов Рида-Соломона на случай ошибок хорошо известны следующие алгоритмы [4-6]: алгоритм Гао, алгоритм Сугиямы, алгоритм Берлекэмпа-Месси, алгоритм Питерсона-Горенстейна-Цирлера. Для кодов Гоппы подобные алгоритмы рассматривались в работе [7].

Пусть код Г(Ь,С) является двоичным. Если С(х) не имеет кратных корней, то код Г(Ь, С) называется сепарабельным кодом Гоппы. Пусть С(х) — полный квадрат некоторого многочлена над СР(2т) наименьшей степени, делящийся на С(х). В случае сепарабельного кода С(х) = С2(х). Для минимального расстояния сепарабельного кода Г(Ь, С) верна оценка ¿^ 2г + 1 и выполнено равенство Г(Ь, С) = Г(Ь, С) (см., например, [3]). Эти факты позволяют строить сепарабельный код Г(Ь,С) = Г(Ь,С), а некоторые алгоритмы декодирования кодов Гоппы применять относительно кода СЯ8п-2г(а, у), г = degС(х).

Пусть до конца данной работы [п,к, с1]-код Г(Ь,С) задается на основе ОРС кода: Г(Ь, С) = СЯ8п-г(Ь, у) П Рга, Р = СР(д), г = degС(х), & = п — г — размерность кода СК8п-г(Ь, у) длины п, Н — проверочная матрица кода СК8п-г(Ь, у). Пусть й, й — кодовые расстояния соответственно кодов Г(Ь,С) и СН8п-г(Ь, у). Так как d ^ г + 1, с1 = п — к + 1 = г + 1, то если в кодовом векторе и Е Г(Ь, С) произошло Ь ошибок и в стираний, причем г ^ 2Ь + в, для его декодирования можно применять алгоритмы декодирования для ОРС кодов.

Если же код Г(Ь,С) двоичный и сепарабельный, то Г(Ь,С) = СК8п-2г(Ь, у) ПРп, Р = СР(2), к = п — 2г — размерность кода СЯ8п-2г(Ь,у), Н — проверочная матрица кода СК8п-2г(Ь, у). Также & > 2г + 1, Г(Ь, С2) С СК8п-2г(Ь, у), И =2г + 1, поэтому в этом случае алгоритмы декодирования для ОРС кодов можно применять для декодирования вектора и, в котором Ь ошибок и ^ стираний, причем 2г ^ 2Ь + в.

1. Декодирование кодов Гоппы на основе алгоритма Гао (первый вариант)

Предположим, что в канале связи действуют ошибки и стирания. Пусть кодовый вектор и Е Г(Ь, С) получен на основе информационного вектора Ь с помощью правила (1), а после передачи вектора и на приемной стороне получен вектор V, в котором ошибок и стираний.

При описании следующего алгоритма будем учитывать работы [5,8]. Пусть 8 — позиции стертых символов в векторе V. На основе векторов V, Ь, у составим соответствующие векторы V, [, г путем удаления всех компонент с номерами из множества 8. Рассмотрим код СК8-^([, £) длины п = п — в и размерности к, который получается из кода СН8ц(Ь, у) путем выкалывания компонент с номерами из множества 8.

Для кодового расстояния кода GRS^fi, z) выполнено равенство d = п — k + 1 = = п — s — k +1. Предположим, что для d выполнено неравенство d ^ 2t + 1. Тогда вектор П, в котором только ошибки, можно декодировать. На основе компонент вектора ¡ определим многочлен

т(х) = (х — ¡о)(х — ¡i)... (х — ¡ñ-i).

Пусть X = ¡i1,... ,Xt = Pit — локаторы ошибок. В данном алгоритме многочлен локаторов ошибок запишем в виде

а(х) = (х — X)... (х — Xt).

Если ошибок не было, то будем полагать, что и(х) = 1. Пусть П — вектор, полученный из и путем выкалывания компонент с номерами из S. Понятно, что П е GRS-¡¡(¡¡, z). Так как п — n + 1 = d ^ 2t + s + 1, топ — s ^ 2t + k ^ к, поэтому вектор П получен с помощью кодирования информационного многочлена Ь(х) = b0 + b\х + ... + Ък-1хк-1 (на основе которого получен вектор и) с помощью правила

n = (Zob (¡¡o),z 1&(¡¡1), ..., Zfí-ib ¡-i)).

Если П = n, то ñ = Zib(¡i). Если ñ = щ, то на позиции i произошла ошибка, поэтому a(¡¡í) = 0. Из этого следует, что

а(/Зг) z~lnt = a(¡i)b(¡i), i = 0,1,...,П — 1.

Обозначим р(х) = а(х)Ь(х). Тогда

a(¡i) = p(¡i), i = 0,1,..., п — 1.

Построим интерполяционный многочлен Лагранжа f(х) степени не выше П — 1, проходящий через точки (¡o, z-~i По) (¡i, z-iñ),... , ¡-i, %-ñ-i):

f(¡i) = z~iVi, i = 0,1,...,п — 1, degf(х) ^П — 1.

Тогда из равенств

^(¡i)f(¡i)= 'Рфг), i = 0,1,...,П — 1,

получаем сравнение

а(х)/(х) = р(х) (mod т(х)). (3)

Алгоритм 1 (декодирование кода Гоппы на основе алгоритма Гао на случай ошибок и стираний).

Вход: принятый вектор .

Выход: исходный кодовый вектор и, в котором произошло s стираний и не более t ошибок, если г ^ 2t + s, г = degG^), и е r(L,G) С GRSn-r(L, у) (для двоичного сепарабельного кода 2г ^ 2t + s, и е r(L,G) С GRSn-2r(L, у)).

1. Пусть S — позиции стертых символов в векторе v. На основе векторов v, L, у составляются соответствующие векторы П, ¡, z путем удаления всех компонент с номерами из множества S. После этого вектор П рассматривается как вектор, в котором только ошибки и который соответствует некоторому кодовому вектору кода GRS-j:(¡, z) длины п = п — s. Определяется многочлен

ñ-1

т(х) = Д(х — ¡).

г=0

2. Интерполяция. Строится интерполяционный многочлен ¡(х), для которого

/ ([г) = г-1^, г = 0,1,...,п — 1.

3. Незаконченный обобщенный алгоритм Евклида. Пусть г—1(х) = т(х), г0(х) = /(х), ь—1(х) = 0, ь0(х) = 1. Производится последовательность действий обобщенного алгоритма Евклида:

П-2(х) = П-1(х) д^(х) + Гг (х),

Уг (х) = V— (х) — Иг—1 (х) Я^(х), I ^ 1,

до тех пор, пока не достигается такого г^(х), для которого

,, п + к п + к

deg Гэ—1 (х) ^ , deg г^ (х) < .

4. Деление. Информационный многочлен кода СН8^([, г), соответствующий кодового \ (х) му вектору и, равен Ь(х)

Vj (х)

5. Вычисление кодового вектора и с помощью кодирования информационного многочлена Ь(х) с помощью формулы (1) для кода GRS^(L, у):

и = (yob(ао), У\b(ai),..., уп-\b(an-i)).

Теорема 3. Если в кодовом векторе произошло t ошибок и s стираний, причем г ^ 2t + s (2r ^ 2t + s для двоичного сепарабельного кода), г = deg G(x), то алгоритм декодирования 1 всегда приводит к единственному решению, а именно к исходному кодовому вектору и кода r(L,G).

Доказательство. Пусть код T(L,G) имеет кодовое расстояние d ^ r+1 (d ^ 2г + 1 для двоичного сепарабельного кода), г = degG(x). Пусть и Е T(L,G). Так как по теореме 1 код Г(L,G) является ограничением кода GRS^(L, у) на подполе GF(q), то и можно получить с помощью кодирования некоторого информационного многочлена Ь(х) кода GRS-^(L, у) с помощью формулы (1). При этом кодовое расстояние кода GRS^(L, у) равно d = п — к + 1 = г + 1 (d = 2г + 1 в случае двоичного сепарабельного кода Гоппы). Предположим, что при передаче вектора и произошло t ошибок и s стираний, г ^ 2t + s (2г ^ 2t + s), а на приемной стороне получен вектор v. Как и ранее, выколем из векторов и, v, а, у компоненты с номерами стертых компонент вектора v, получив при этом к, к, @ и z. Теперь к принадлежит коду GRSi(f3, z) длины П = п — s и с кодовым расстоянием d = П — к + 1 = п — s + к + 1. Так как

2t+l ^ d — s = п — s — к +1 = d, (4)

то код GRS-^(f3, z) может исправить t ошибок в векторе п.

Заметим, что для а(х) и р(х) (истинные значения), которые получены на основе исходных данных, сравнение (3) выполнено, причем Ь(х) = р(х)/а(х).

Пусть с помощью алгоритма 1 получены значения r-j(х) и Vj(х), причем

j t \ ^п +к п +к

deg г^-г(х) ^ ^ , deg rj(х) < ——.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Покажем, что юу(х) делится на г у(х), причем г у(х)/ьу(х) = Ь(х). Домножив первое из приведенных ниже сравнений:

а(х)/(х) = р(х) (шод.т(х)), Уу(х)/(х) = гу(х) (modm(х)),

на Уу(х), а второе — на а(х), получим

Уу (х)р(х) = а(х) г у (х) (modm(х)). (5)

Учитывая, что для любого г-го шага обобщенного алгоритма Евклида выполнено

deg Уг(х) = с1е^т(х) — deg г—(х),

степени многочленов в обеих частях сравнения (5) строго меньше п = degm(х). Следовательно, получаем равенство

у у (х)р(х) = а(х) г у (х).

Так как р(х) = а(х)Ь(х), то гу (х) = Уу (х)Ь(х).

Поскольку кодовый вектор и кода г) получен с помощью многочлена

Ь(х), то, учитывая неравенство п — в ^ к из (4), вектор и кода СК^-ц(Ь, у) получен с помощью этого же многочлена. Поэтому исходный кодовый вектор и кода Г(Ь, С) можно найти на основе кодирования многочлена Ь(х) кода СК8^(Ь, у) с помощью формулы (1). □

Задача нахождения интерполяционного многочлена тесно связана с задачей обращения матрицы Вандермонда. В работах [9,10] приводятся алгоритмы нахождения обратной матрицы со сложностью 0(п2). В работе [11] приводятся точные формулы обратной матрицы Вандермонда через элементарные симметрические многочлены. Приведем эти формулы. Пусть V = V(ах,... ,ап) — матрица Вандермонда:

V = V (a i,... ,ап)

( 1

1

а2

\

п— 1 п— 1

1

<-1)

где а]^,... ,ап — элементы произвольного поля F. Пусть

Як = Як (а-1,..., Ои) = ^ «¿i ...a>ík

1^íi<...<ífc ^п

— элементарный симметрический многочлен от а1,...,ап, к = 1,... ,п. При этом

яо = сто(а1,..., ап) = 1.

Также определим

&k,j = як (а 1,..., ау,..., ап), к = 1,... ,п — 1, j = 1,... ,п, где ^ означает, что элемент пропущен. Тогда (i, ])-й элемент матрицы V-1 равен

(V

(—1)

í+j_

nü^í — ак Ш Lí+1( Uk — a¿)

(6)

п

1

2

Яп-1л

Пример 1. Рассмотрим расширение поля СР(2) с СР(24). Пусть поле СР(24)

строится на основе примитивного многочлена р(х) элемент поля СР(24):

х4 + х + 1, а — примитивный

а0 = 1 = 1000, а1 = а = 0100,

а2 = а2 = 0010, а3 = а3 = 0001,

а4 = 1 + а = 1100, а5 = а + а2 = 0110,

а6 = а2 + а3 = 0011, а7 =1 + а + а3 = 1101,

а8 = 1 + а2 = 1010, а9 = а + а3 = 0101,

а10 = 1 + а + а2 = 1110, а11 = а + а2 + а3 = 0111,

а12 = 1 + а + а2 + а3 = 1111, а13 =1 + а2 + а3 = 1011,

а14 = 1 + а3 = 1001, а15 =1 = 1000.

Пусть Ь = С Р(24) = {0,1, а, а2,..., а14}. Рассмотр им квадратный многочлен

х2 + х + а3. Так как след элемента а3 в СР(24) не равен нулю, то этот многочлен в поле СР(24) не имеет корней. Поэтому определим С(х) = х2 + х + а3. Поскольку многочлен С(х) сепарабельный, то Г(Ь,С) = Г(Ь,С), где С(х) Проверочная матрица Н кода Г(Ь,С) примет такой вид:

х4 + х2 + а6.

Н

(

а

12

0

а4 а

а5 а

а9

а4

а а

8

а6

а3

а

12

8

а8 а

6

а

14

а

13

а

11

а6 1

а

а 11

а2

а2

а

13

а

14

8

а8 а а6 а

)

После замены каждого элемента матрицы Н столбцовым двоичным вектором длины 4, представляющим этот элемент, получим матрицу Н2 размера 8 х 16. Так как все строки полученной двоичной матрицы Н2 линейно независимы, то п — к = 8, к = 8. Выписав построчно фундаментальную систему решений однородной системы линейных уравнений Н2Х = О, находим порождающую матрицу кода Г(Ь,С):

С =

1 0 1 1 0 1 1 1 0 0 0 0 0 0 0 0

1 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0

1 1 1 0 0 1 0 0 1 0 1 0 0 0 0 0

0 1 0 1 1 1 0 0 1 0 0 1 0 0 0 0

0 0 1 0 1 1 1 0 1 0 0 0 1 0 0 0

0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0

1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0

1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 1

Для данного [16,8]-кода кодовое расстояние (1 = 5, поэтому код может исправлять до двух ошибок, либо одну ошибку и до двух стираний, либо до четырех стираний. Рассмотрим случай одной ошибки и двух стираний.

Учитывая теорему 1, код Г(Ь,С) является ограничением кода СНБ12(Ь, у) на подполе СР(2), где

Уг

С(аг) П

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

1

Пг — а^

С(аг),

0, 1,

15,

У=(а6,а6, а7, а9, а12, а7, а13, а14, а3, а9, а3, а13, а11, а11, а14, а12),

причем равенство П^(аг — а^) = 1 выполнено в силу того, что корнями многочлена хп-1 — 1 являются все ненулевые элементы поля СР(2т).

Пусть после кодирования информационного вектора г = (1,0,0,1,1,1,0,1) получен кодовый вектор кода Г(Ь, С)

и = гС = (0,1, 0,1,1, 0, 0,1, 0, 0, 0,1,1,1, 0,1),

а на приемном конце получен вектор

V = (0,1, 0,0,1, 0, 0,1, 0, 0, *, 1, *, 1, 0,1),

т.е. произошла одна ошибка на 3-й позиции (нумеруя позиции с нуля) и два стирания на 10-й и 12-й позициях. При этом на приемной стороне известны только позиции стираний. Для декодирования вектора V применим алгоритм 1.

1. Удалив в векторе V стертые символы, получим новый вектор

к = (0,1,0,0,1,0,0,1,0,0,1,1,0,1),

в котором только одна ошибка. Для декодирования данного вектора будем рассматривать код СКв12([, г) длины П = 14, [3 и у — векторы длины 14, которые получаются соответственно из векторов Ь и у путем удаления 10-й и 12-й компонент:

[ = (0,1,а,а2, а3, а4,а5, а6, а7, а8, а10, а12, а13, а14), г = (а6, а6, а7, а9, а12,а7,а13,а14,а3,а9,а13,а11 ,а14,а12).

Множество 5 позиций стертых символов равно 5 = {10,12}. Составляем многочлен т(х):

(ху16 _ хх

— 10 7 2 8 3 4 8 5

х) = -гт---- = ах + а' х2 + а8х3 + ах4 + а8х5+

(х — а9)(х — а11)

+а3х6 + а14 х7 + а4х8 + а3х9 + а3х10 + а6х11 + а8х12 + а2х13 + х14.

Пусть V = V([) — матрица Вандермонда, построенная на основе вектора [3, V-1 — обратная к ней матрица (построенная, например, с помощью формулы (6)), Z — диагональная матрица на основе вектора г:

£ = ^{^(а6, а&, а7, а9, а12, а7, а13, а14, а3, а9, а13, а11, а14, а12).

2. Интерполяция. Вычисляем коэффициенты многочлена /(х) = ¡0 + /1х +... + /13х13:

(¡о, ¡1,..., !13) = -V-1 = (0, а9, а8, а10, 0, а3, а13, а4, а7, а2, а5, а4, 0, а11), ¡(х) = а9х+а8х2+аю х3+а3 х5+а13 х6+а4х7+а7х8+а2х9+а5 х1+а4х11+а11 х13.

3. Применение неполного обобщенного алгоритма Евклида. Определяем г-1(х) = т(х), г0(х) = /(х), у-1(х) = 0, у0(х) = 1 и применяем алгоритм Евклида:

г-1(х) = г0(х)(а& + а4х) + г1(х),

1( х) = а5 х + а12 х2 + а3 х3 + а7 х4 + а12 х5 + а9 х7 + а7 х8 + а4 х9 + а9 х10 + х11,

1( х) = —( а6 + а4 х) = а6 + а4 х.

Так как (П + к)/2 = 13, degг0(х) = 13, degг1(х) = 11, то после первого шага алгоритма Евклида останавливаемся.

4. Деление:

Ь(х)

Г\(х) vi(x)

a14x + а4х2 + а7х3 + а2х4+

+а13х5 + а11х6 + ах' + а'х8 + а'х9 + а11х1^.

5. Вычисление исходного кодового вектора и с помощью кодирования информационного многочлена Ь(х) в кодовый вектор кода СК314(Ь,у):

и = (yob (0), уф (1), у 2 b (а),..., yi5b (а14)) = (0,1, 0,1,1,0, 0,1, 0,0, 0,1,1,1, 0,1).

С учетом того, что столбцы матрицы G с номерами 7, 9-15 (нумеруя с нуля) образуют единичную матрицу, из этих позиций вектора и извлекаем информационный вектор i = (1,0,0,1,1,1,0,1).

2. Декодирование кодов Гоппы на основе алгоритма Гао (второй вариант)

Пусть кодовый вектор и Е Т(Ь, С) получен на основе информационного вектора Ь с помощью правила (1), а после передачи вектора и на приемной стороне получен вектор V, в котором Ь ошибок и ^ стираний.

Заменим в векторе V стертые символы, например, нулями. Получим при этом вектор V. Пусть ошибки произошли на позициях г\,..., г а стирания — на позициях ц+1,..., ц+3. Пусть Х1 = а,...Х1 = а^ — неизвестные локаторы ошибок, Х+ = ак+1,... ,Х+ = аг1+е — известные локаторы стираний. Определим многочлен:

т(х) = (х — а0)(х — а1)... (х — ап-1).

Также определим многочлен локаторов ошибок и(х) и многочлен локаторов стираний и(х) следующим образом:

а(х) = (х — Хх)... (х — Хг), и(х) = (х — Х+)... (х — Х+).

Обозначим а(х) = а(х)и(х). Если ошибок и стираний не было, то будем полагать, что а(х) = 1.

Если г^ = щ, то щ = угЬ(а¿). Если г^ = щ, то на позиции г произошла ошибка или стирание, поэтому а(аг) = 0. Из этого следует, что

а(аг)у-1^ = а(аг)Ь(аг), 1 = 0,1,... ,п — 1.

Обозначим р(х) = а(х)Ь(х). Тогда

а(а>) у-1щ = р(аг), г = 0,1,...,п — 1.

Построим интерполяционный многочлен Лагранжа /(х) степени не выше п — 1, проходящий через точки (а0, у-1^), (ах^Г1^),. .. , (ап-1, у--1Уп_1):

/(аг) = у-1^, г = 0,1,...,п — 1, deg/(х) ^ п — 1.

Тогда из равенств

а(аг)1'(аг)= р(а^, г = 0,1,...,п — 1,

получаем сравнение

а(х)/(х) = р(х) (modm(х)). После обозначения к( х) = ( х) ( х) данное сравнение приобретает вид

а(х)к(х) = р(х) (modm(х)). (7)

Заметим, что

п — к — $ п + к + 5 dega(х) ^ -2-, ^Р(х) < -2-, (8)

так как

d — в — 1 п — к — в deg а(х) ^ г ^ —2— = —2—,

п — кк — к п + кк + degр(х) = dega(х) + degu(х) + dego(х) ^ ----+ 8 + к — 1 <---.

Алгоритм 2 (декодирование кода Гоппы на основе алгоритма Гао на случай ошибок и стираний).

Вход: принятый вектор V.

Выход: исходный кодовый вектор и, в котором произошло в стираний и не более Ь ошибок, если г ^ 2Ь + з, г = degС(х), и е Г(Ь,С) С СКЗП-Г(Ь, у) (для двоичного сепарабельного кода 2г ^ 2Ь + в, и е Г(Ь,С) С СЯЗп-2г(Ь, у)).

1. Определяется Ь = —в — 1)/2\. В векторе V все стирания заменяются нулями, получая тем самым вектор к. Вычисляются значения локаторов стираний Х+ = ,... = а^+а на основе известных позиций стираний ц+1,..., ц+3. Также вычисляется многочлен локаторов стираний и(х) = (х — Х^)... (х — Х4+8).

2. Интерполяция. Строится интерполяционный многочлен ¡(х), для которого

/(а^ = у-1ки г = 0,1,...,п — 1.

Вычисляется многочлен к( х) = ( х) ( х).

3. Незаконченный обобщенный алгоритм Евклида. Пусть г-1(х) = т(х), г0(х) = к(х),

-1( х) = 0, 0( х) = 1. Производится последовательность действий обобщенного алгоритма Евклида:

Ъ-2(х) = ъ-1(х) (х) + п(х), ь{(х) = (х) — ь{-1(х)0_г— 1 (х), г ^ 1,

до тех пор, пока не достигается такого г^(х), для которого

п + кк + п + кк + deg г^-1(х) ^ -2-, deg г^ (х) <-^-.

гз (х)

4. Деление. Информационный многочлен равен Ь(х)

Щ (Ф(х)'

5. Вычисление кодового вектора и с помощью кодирования информационного многочлена Ь(х) с помощью формулы (1) для кода СЯ^(Ь, у):

и = (уоЬ(ао), уФ(а1),..., уп-1Ъ(ап-1)).

Теорема 4. Если в кодовом векторе произошло £ ошибок и в стираний, причем г ^ 2Ь + в (2г ^ 21 + 8 для двоичного сепарабельного кода), г = deg С(х), то алгоритм декодирования 2 всегда приводит к единственному решению, а именно к исходному кодовому вектору и кода Г(Ь,С).

Доказательство аналогично доказательству теоремы 3.

Пример 2. Продолжим рассмотрение примера 1. Пусть после кодирования информационного вектора г = (1,0,1,1,0,0,1,1) получен кодовый вектор кода Г(Ь, С)

и = гС = (0,1,1,1, 0, 0, 0,1, 0,0,1,1, 0,0,1,1),

а на приемном конце получен вектор

V = (0,1,1, 0, 0,0, 0,1, 0,0, *, 1, *, 0,1,1),

т. е. произошла одна ошибка на 3-й позиции (нумеруя позиции с нуля) и два стирания на 10-й и 12-й позициях. При этом на приемной стороне известны только позиции стираний. Для декодирования вектора V применим алгоритм 2.

1. Полагаем 5 = 2, Ь=[(с1 — в — 1)/2} = 1. Заменив в векторе V стертые символы нулями, получаем V = (0,1,1,0,0,0,0,1,0,0,0,1,0,0,1,1). Также вычисляем многочлен локаторов стираний и(х) = (х — а10)(х — а12) = (х — а9)(х — а11) = аъ + а2х + х2. Пусть V = V(Ь) — матрица Вандермонда, построенная на основе вектора Ь, V-1 — обратная к ней матрица, У — диагональная матрица на основе вектора у.

2. Интерполяция. Вычисляем коэффициенты многочлена /(х)=/0+/1х+...+¡15х15:

( /о, ¡1,..., ¡15)= ЪУ-V-1 = = (0, а5, а9, а, а3, а2, а9, а5, а4, 0, а12, 1, а8, а5, а14, а4), ¡(х) = а5х + а9х2 + ах3 + а3х4 + а2х5 + а9х6 + а5х7 + а4х8+ +а12х10 + х11 + а8х12 + а5х13 + а14х14 + а4х15. Вычисляем '(х) = ¡(х)и(х):

'(х) = а10х + ах2 + а2х3 + а10х4 + а12х5 + ах6 + а13х7 + а7х8 + а9х9+ +а10х10 + а12х11 + а5х12 + х13 + а13х14 + а11х15 + а8х16 + а4х17.

3. Применение неполного обобщенного алгоритма Евклида. Определяем г-1(х) = = т(х)=х16—х, г0(х) = '/(х), у-1 (х) = 0, у0(х) = 1 и применяем алгоритм Евклида:

Г-1(х) = г о(х) до(х) + Г1(х), Яо(х) = 0, г1(х) = х + х16, ь1(х) = ь-1(х) — ь0(х) д0(х) = 0, го(х) = Г1(х) д1(х) + Г2(х), д1(х) = а8 + а4х,

г2(х) = ах + х2 + а2х3 + а10х4 + а12х5 + ах6 + а13 х7 + а7х8 + а9х9+ +а10х10 + а12х11 + а5х12 + х13 + а13х14 + а11х15, щ(х) = Уо(х) — У1(х) д1(х) = 1, Г1(х) = Г2(х) д2(х) + Г3(х), д2(х) = а6 + а4х,

г3(х) = а9х + а9х2 + аъх3 + а11х4 + х5 + а14х6 + а8х7 + а14 х8 + а12х9+ +а12х10 + х11 + а6х12 + а5х13, ь3(х) = у1(х) — ь2(х) д2(х) = а6 + а4х.

Так как (n + k + s )/2 = 15, degг2(х) = 15, degг3(х) = 13, то после третьего шага алгоритма Евклида останавливаемся. 4. Деление:

Гз(х)

Ь(х)

Ьз(х)и(х)

= а13х+а2х2+ах3+а14х4+a8 х5+а3х6+a10 х7+а2х8+а2х9+ах10.

5. Вычисление исходного кодового вектора и с помощью кодирования информационного многочлена Ь(х) в кодовый вектор кода СК312(Ь, у):

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

и = (у0 Ь(0), ух Ь(1), у2Ъ (а),..., у15Ь (а14)) = (0,1,1,1, 0, 0, 0,1, 0, 0,1,1, 0, 0,1,1).

С учетом того, что столбцы матрицы С с номерами 7, 9-15 (нумеруя с нуля) образуют единичную матрицу, из этих позиций вектора и извлекаем информационный вектор г= (1,0,1,1,0,0,1,1).

3. Декодирование кодов Гоппы на основе алгоритма Сугиямы

Пусть ь — полученный на приемной стороне вектор, в котором могут быть ошибки и стирания. Пусть с1 ^ 2Ь + в + 1. Так как позиции стертых символов известны, то заменим эти символы в векторе V, например, на нули и будем обращаться с полученным вектором у как с вектором, содержащим только ошибки. Пусть ошибки произошли на позициях г1,..., г а стирания — на позициях ц+1,..., г . При этом известны только позиции г г+1,..., 3. После того как на данные позиции поместили нули, с какими-то позициями могли угадать (если в кодовом векторе там действительно стояли нули). Поэтому к = и + е, где е — вектор ошибок веса не более Ь + е.

Вычисляя синдромный вектор, получаем

~—т —т S = vH = еН

-^Ч+s;

...)

X

X

1

а0

1

а1

„п—к— 1 _п—к— 1

\\а0 аг

1 \ ( G(ao)-1 0

an-i 0 G(a1)

п к 1

an-i J \

-1

0 0

т

... G(an-1)-1 J J

eilG(ai1) 1 + ... + eit+sG(ait+s) 1 eilG(ai1 )-1ah + ... + eit+sG(ait+s )-1ait+s

\

т

\ eiiG(aii)-1аП к 1 + ... + e4+sG(a4+s)

-1an-k-1 I

Пусть X1 = ai±,...Xt = ait — неизвестные локаторы ошибок, Xt+1 = ait+1,

X,

t+s

= a

tt + s

— известные локаторы стираний, Y1 = ei

, Y

t+s = e it+s — значения

ошибок, причем локаторы принадлежат полю СР(дт), а значения ошибок — полю СР(д). Обозначим Zj = У^С(аг.)-1, ] = 1,... + е. Тогда

50 = Z1 + ... + Zt + Zt+1... + Zt+s,

51 = Z1X1 + ... + ZtXt + Zt+1Xt+1 + ... + Zt+sZt+s,

(9)

2 + s-1 2 + -1 2 + -1 2 +

S2t+s -1 = Z1X1 + ... + ZtXt + Zt+1 Xt+1 + ... + Zt+sXt+s

0

0

Запишем синдромный многочлен в виде

2t+s-1 2t+s-1 / t+s \ i+s /2t+s-1 \

5(x) = £ s^ = £ = ^za £ (х3х)л

i=0 i=0 \j=1 J j=1 \ i=0 J

1 - (X3x)2t+° = + z.

^ 3 1 — XjX ^

3 = 1

3=1

Полагая

i+s

1- X,X

t+s

X

i+s z X2t+s

2t+s ^ Z3Xj

3 = 1

1- XiX

j(x) = Ц(1 — XiX) = ^2 (JiX%, Jo =1, i=1 i=0

t+s

(x) = J2z* П (1 — X3X), ф (x) = Y.z*x*t+S П (1 — X3X),

t+s

JJ (X) =

i=1 1 <3<t + s,

i=1

1<3<t + s,

после приведения всех дробей к общему знаменателю получим:

5 (х) = Ш — х"2^+3 М

j(x)

j(x)

Тогда

5 (x)j(x) = uj(X) — X2t+SJ> (X)

Данное выражение называют ключевым уравнением, которому можно придать иной вид:

jJ(x)S(x) = S(x) (mod x2t+s). (10)

Заметим, что j(x) = a(x)u(x), где a(x) — это многочлен неизвестных локаторов ошибок, u(x) — многочлен известных локаторов стираний:

t s

t(x) = П(1 — XiX) Д(1 — Xt+ix) = a(x)u(x).

i=1 i=1

Введем в рассмотрение многочлен Б(х) = Б(х)и(х) — модифицированный синдромный многочлен. Тогда ключевое уравнение (10) примет вид

a(x)S(x) =jj(x) (mod x2t+s),

где

dega(x) ^ t, deg j(x) ^ t + s — 1, a(0) = 1.

(11)

(12)

Алгоритм 3 (декодирование кода Гоппы на основе алгоритма Сугиямы на случай ошибок и стираний).

Вход: принятый вектор .

Выход: исходный кодовый вектор и, в котором произошло в стираний и не более Ь ошибок, если г ^ 2Ь + з, г = deg С(х), и е Г(Ь, С) С СК8п-г(Ь, у) (для двоичного сепарабельного кода 2г ^ 2Ь + 8, и е Г(Ь,С) С СЯЗп-2г(Ь, у)).

1. Определяется Ь = [(г — в)/2] (£ = [(2г — в)/2] в случае двоичного сепарабельного

кода Гоппы). В векторе V все стирания заменяются нулями, получая тем самым ~ ~—т

вектор V. Находятся компоненты Б0, ..., г1 синдромного вектора vН .

Если они все равны нулю, то возвращается вектор V и процедура окончена.

Вычисляются значения локаторов стираний Х+ = а^+1 ,...,Х+ = ач+в на

основе известных позиций стираний ц+1,..., ц+3. Вычисляются коэффициенты

модифицированного синдромного многочлена Б(х).

2. Пусть г-1(х) = х2+3, г0(х) = Б(х), ь-1(х) = 0, у0(х) = 1. С помощью обобщенного алгоритма Евклида производится последовательность вычислений (г ^ 1):

П-2(х) = П-1(х) (х) + п(х), Ъг(х) = Ь—(х) — Ь^1(х) д^(х). Процесс прекращается, как только для некоторого (х) будет выполнено

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

degг3-1 (х) ^ Ь + 8, deg(х) ^ Ь + 8 — 1.

Тогда

а(х) = (х), IV (х) = Л (х),

где константа Л е СР(дт) задается так, чтобы удовлетворялось условие а(0) = 1. Пусть I = dega(х).

3. Отыскиваются I корней многочлена и(х) последовательной подстановкой в него ненулевых элементов поля СР(дт). При этом локаторы ошибок — это величины, обратные корням многочлена а(х).

4. При вычислении значений ошибок выполняется один из следующих пунктов.

4.1. Если среди локаторов стираний Х^,... ,Х+ имеется нулевое значение (в противном случае переходим в пункт 4.2), скажем, Хр = 0, то пусть

м = {1,..., 1}и{г +1,...,г + з}\М

— множество индексов локаторов ошибок и стираний без учета индекса р. Находятся Zj, ]еМ, например, с помощью алгоритма Форни для обобщенных кодов РС:

= ^-(Хз )-гк, 3 е М. (13)

\iieM\ш(1 — )

После этого находятся значения ошибок у = ZjС(Хj), ] е М. У вектора V из ^-го символа, Х3 = а^, вычитается значение у, ] е М. При этом получается вектор V. Пусть для некоторого г выполнено а,1 = 0 (в противном случае все локаторы стираний были бы ненулевые). Вычисляется значение Zp, равное скалярному произведению вектора V на первую строку матрицы Н. Вычисляется значение ошибки Ур = ZpС(аi). Осталось в векторе V из г-го символа вычесть Ур.

4.2. Если условие 4.1 не выполнено, то пусть М = {1,..., 1} и {Ъ + 1,... + в}. По формуле (13) находятся значения Zj, затем значения ошибок у = ZjС(Хj), ] е М. У вектора V из ^-го символа, Х3 = а^, вычитается значение Уз, ] е М. При этом получается вектор V.

Если а,1 = 0 для некоторого г, то вычисляется значение Zo, равное скалярному произведению вектора V на первую строку матрицы Н. Если Z0 = 0, то вычисляется значение ошибки У0 = Z0С(аi). Осталось в векторе V из г-го символа вычесть У0.

Теорема 5. Если в кодовом векторе и е Г(Ь, й) произошло Ь ошибок и в стираний, причем г ^ 2Ь + в (2г ^ 21 + 8 в случае двоичного сепарабельного кода Гоппы), г = degG(x), то алгоритм декодирования 3 всегда приводит к единственному решению, а именно к исходному кодовому вектору и кода Г(Ь,й).

Доказательство. Пусть Г(Ь,й) = йЯ8^(Ь, у) П Рга. Из неравенства г ^ 21 + 8 (2г ^ 2Ь + в ) следует, что с1 ^ 2Ь + в + 1. Поэтому для декодирования вектора и е Г(Ь, й) можно применить любой алгоритм декодирования для ОРС кодов, так как и е йН8^(Ь, у). В этом случае остается применить теорему 4 из работы [12]. □

Пример 3. Продолжим рассмотрение примеров 1 и 2. В данном случае Г(Ь, й) С С йК812(Ь, у), при этом проверочная матрица Н кода йК812(Ь, у), учитывая следствие 1, имеет вид

Н

(

\

а9 а9 а8 а6 а3 а8 а2 а а12 а6 а12 а2 а4 а4 а а3

0 а9 а9 а8 а6 а12 а7 а7 а4 а14 а6 а12 1 а а14 а2

0 а9 а10 а1о а9 а а12 а13 а11 а7 1 а7 а11 а13 а12 а

0 а9 а11 а12 а12 а а2 а4 а3 1 а9 а2 а7 а1о а1о 1

\

/

Пусть, как и ранее, на приемном конце получен вектор

ь = (0,1, 0, 0,1,0, 0,1, 0,0, *, 1, *, 1, 0,1),

в котором одна ошибка и два стирания. Применим к этому вектору алгоритм декодирования 3.

1. Пусть 5 = 2, Ь = [(2 г — в )/2\ = 1. Заменив стертые символы на 0, получим вектор к:

к =(0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1).

~—т

Найдем компоненты синдромного вектора ьН :

( 80, 81,82, 83) = (а12, а2, а14, а2). Вычисляем известные локаторы стираний:

а12

а

11

Х2 = аю = а , Х3 Поэтому

8(х) = 8 (х)и(х) = (а12 + а2х + а14 х2 + а2х3 )(1 — а9х)(1 — а11х) =

= а12 + а13х + а11х2 + а13х3 + а7х5.

2. Определяем г-1(х) = х4, г0(х) = в(х), ь-1(х) = 0, у0(х) = 1. Выполняем неполный алгоритм Евклида:

Г-1(х) = г о(х) до(х) + Г1(х), до (х) = 0, 1( х) = х4, у1(х) = ь-1(х) — д0(х) ь0(х) = 0, Го(х) = Г1(х) д1(х) + Т2 (х), д1 (х) = а7х,

г2(х) = а12 + а13х + а11х2 + а13х2, щ(х) = Уо(х) — д1(х) У1(х) = 1, Г1(х) = Г2(х) д2(х) + гз(х), д2 (х) = 1 + а2х, г3(х) = а12 + а2х + а12х2, ь3(х) = ь1(х) — д2(х) ь2(х) = 1 + а2х.

Так как Ь + з = 3, degг2(х) = 3, degг3(х) < 3, то после третьего шага останавливаемся. Тогда

<(х) = Л ь3(х), ш (х) = Л г3(х).

При Л = 1 получаем <(0) = 1, поэтому

( \ 1 , 2 \ 12 , 2 , 12 2 <(х) = 1 + а х, ш(х) = а + а х + а х .

3. Корнем многочлена <(х) является х1 = а13, поэтому Х1 = х-

-1

а

а3. Это

значит, что ошибка произошла на 3-й позиции. Итак, на 3-й позиции вектора V точно имеется ошибка, а на позициях 10 и 12, возможно, есть ошибки (после замены стертых символов нулями мы могли поставить некоторые символы верно).

4. Так как среди локаторов стираний нет нулевых значений, то переходим к пункту 4.2 алгоритма 3 декодирования. Поскольку код Г(Ь,С) двоичный, то У1 = 1. Найдем У2 и У3. Используем алгоритм Форни:

^3

ШШ(Х-1)

(1 -Х1Х-1)(1 -Х3Х-1) Ш(Х-1)

0, У2 = г2С(аю) = 0,

(1 — Х1Х3- )(1 — Х2Х- )

ЗК = а4, ^3 = ЭДа^) = 1.

Таким образом, в векторе и две ошибки — на 3-й и 12-й позициях. Поэтому

и = (0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,1).

Так как а0 = 0, то проверяем, была ли ошибка на 0-й позиции. Скалярное произведение вектора и на первую строку матрицы Н дает ноль, поэтому исходный кодовый вектор равен и = и.

4. Декодирование кодов Гоппы на основе алгоритма Берлекэмпа-Месси

Продолжим рассмотрение сравнения (11). Пусть ь — полученный на приемной стороне вектор, в котором могут быть ошибки и стирания. Пусть Ь — максимальное число возможных ошибок при фиксированном числе стираний ^ в векторе V, й ^ И + з + 1, I = [(й - з — 1)/2], т — реальное число ошибок, т ^ ¿.В этом случае degш(х) ^ т + 5 — 1, и необходимым условием выполнения данного сравнения является то, что коэффициент многочлена а(х)!3(х) при х\ г = т + з,т + 5 + 1,..., И + з — 1, равен нулю. Учитывая, что <0 = 0, получаем систему уравнений:

+ а183+т-1 + ... + от83 = 0 <о5.+т+1 + <1$3+т + ... + <т3.в+1 = 0

<о3.в+2г-1 + -2 + ... + <т3.в+2г-т-1 =

Запишем данную систему в матричном виде:

( 5.+т-1 >33+т-2

Б,

«+1

\ / <1 \

<2

V £

( З.+т \ — 33+т+1

. +2 -2

3.в+2г-3 . . . З3+2г-т-1 / \ <т / \ —З3+2г-1 /

Удалив в системе (14) 2Ь — 2т последних уравнений, получим новую систему с квадратной матрицей системы порядка т. Матрицу данной системы обозначим через

М( т, ).

Теорема 6. Пусть произошло в стираний. Матрица М(т, в) невырождена тогда и только тогда, когда произошло т ошибок.

Доказательство следует из теоремы 5 работы [12].

Для нахождения решения системы (14) применим следующий алгоритм.

Алгоритм 4 (алгоритм Берлекэмпа-Месси)

Вход: последовательность а-\^,... ,ап над некоторым полем.

Выход: LFSR (Ь, /(х)) минимальной длины Ь, для которого

ь

—аз = ^2 , 3 = Ь + 1, Ь + 2,... ,п.

i=1

1. Определить г := 0, ¡(х) := 1, Ь(х) := 1, Ь := 0.

2. Цикл г : = 1,... ,п

ь

2.1. Определить А := аг + ^ .

=1

2.2. Если А = 0, то Ь(х) := х • Ь(х).

2.3. Если А = 0:

2.3.1. Если 2Ь < г:

Ьи/(х) := ¡(х) — А • х • Ь(х), Ь(х) := А-1 • ¡(х), /(х) := Ы/(х), Ь := — Ь.

2.3.2. Иначе (т.е. выполнено 2Ь ^ г): ¡(х) := ¡(х) — А • х • Ь(х),

Ь(х) := х • Ь(х).

Теорема 7. Пусть й ^ 21 + 8 + 1. Если на вход алгоритма 4 подать последовательность 83, 8з+1,..., Бз+ыто на выходе алгоритма будет верное значение многочлена локаторов ошибок а(х).

Доказательство. Пусть а(х) — многочлен, полученный после применения алгоритма 4. Так как коэффициенты многочлена локаторов ошибок а(х) являются решением системы (14), то по свойству алгоритма Берлекэмпа-Месси будет выполнено неравенство Ь ^ т (в данном случае Ь — длина регистра). Удалив в системе (14) 2 — 2 т последних уравнений, получим новую систему с квадратной матрицей системы порядка т. Из теоремы 6 следует, что данная матрица невырождена, поэтому полученная новая система имеет единственное решение. Это значит, что а(х) = а(х). □

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Алгоритм 5 (декодирование кода Гоппы на основе алгоритма Берлекэмпа-Месси на случай ошибок и стираний). Вход: принятый вектор .

Выход: исходный кодовый вектор и, в котором произошло стираний и не более Ь ошибок, если г ^ 2Ь + з, г = deg С(х), и е Г(Ь, С) С СКЗп-г(Ь, у) (для двоичного сепарабельного кода 2г ^ 2Ь + в, и е Г(Ь,С) С СЯЗп-2г(Ь, у)).

1. Определяется t = [(г — s)/2] (t = [(2г — s)/2] в случае двоичного сепарабельного

кода Гоппы). В векторе v все стирания заменяются нулями, получая тем самым ~ ~—т

вектор v. Находятся компоненты S0, S1,..., S2t+s-1 синдромного вектора vH .

Если они все равны нулю, то возвращается вектор S и процедура окончена.

Вычисляются значения локаторов стираний Xt+1 = ait+1 ,...,Xt+s = ait+s на

основе известных позиций стираний it+1,..., it+s. Вычисляются коэффициенты

модифицированного синдромного многочлена S(x).

2. На вход алгоритма 4 подается последовательность Ss, Ss+b. . ., Ss+21-1. На выходе данного алгоритма получается многочлен a(x). Пусть I = dega(x).

3. Отыскиваются I корней многочлена a(x) последовательной подстановкой в него ненулевых элементов поля GF(qm). При этом локаторы ошибок — это величины, обратные корням многочлена a(x).

4. При вычислении значений ошибок выполняется один из следующих пунктов.

4.1. Если среди локаторов стираний Xt+1,... ,Xt+s имеется нулевое значение (в противном случае переходим в пункт 4.2), скажем, Xp = 0, то пусть

М = {1,..., l}U{t +1,...,t + s}\M

— множество индексов локаторов ошибок и стираний без учета индекса р. Находятся Zj, j Е М, например, с помощью алгоритма Форни (13) для обобщенных кодов РС. После этого находятся значения ошибок Yj = ZjG(Xj), j Е М .У вектора S из ij-го символа, Xj = a^, вычитается значение Yj, j Е М. При этом получается вектор S. Пусть для некоторого i выполнено ai = 0 (в противном случае все локаторы стираний были бы ненулевые). Вычисляется значение Zp, равное скалярному произведению вектора S на первую строку матрицы H. Вычисляется значение ошибки Yp = ZpG(ai). Осталось в векторе S из г-го символа вычесть Yp.

4.2. Если условие 4.1 не выполнено, то пусть М = {1,..., 1} U {t + 1,... ,t + s}. По формуле (13) находятся значения Zj, затем значения ошибок Yj = ZjG(Xj), j Е М. У вектора S из ij-го символа, Xj = aij, вычитается значение Yj, j Е М. При этом получается вектор S.

Если ai = 0 для некоторого i и dega(x) строго меньше длины LFSR (полученного на выходе алгоритма 4), то вычисляется значение Z0, равное скалярному произведению вектора S на первую строку матрицы H, а затем вычисляется значение ошибки Y0 = Z0G(ai). Осталось в векторе S из г-го символа вычесть Y0.

Пример 4. Продолжим рассматривать примеры 1, 2 и 3. Пусть на приемной стороне получен все тот же вектор v = (0,1,0,0,1,0,0,1,0,0, *, 1, *, 1,0,1). После замены стертых символов нулями получаем вектор S = (0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1). Компоненты синдромного вектора S вычислены в предыдущем примере: S0 — a , S = a13, S2 = a11, S3 = a13, S4 = a7. Определяем ¿=2, t= [(2r — s)/2] = 1. На вход алгоритма 4 подаем последовательность S2 = a11, S3 = a13. Получаем a(x) = 1 + a2x, L = 2. Многочлен iS(x) можно найти из сравнения ш(x) = a(x)S(x) (mod x4). После этого осталось повторить шаги 3 и 4 предыдущего примера.

Список литературы

1. Status Report on the First Round of the NIST Post-Quantum Cryptography Standardization Process. National Institute of Standards and Technology. Internal Report 8240. January, 2019. 27 p. https://doi.org/10.6028/NIST.IR.8240

2. Гоппа В. Д. Новый класс линейных корректирующих кодов // Проблемы передачи информации. 1970. Т. 6, № 3. С. 24-30.

3. Мак-Вuльямc Ф. Дж., Слоэн Н. Дж. А. Теория кодов, исправляющих ошибки : пер. с англ. Москва : Связь, 1979. 744 с.

4. Блейхут Р. Теория и практика кодов, контролирующих ошибки / пер. с англ. И. И. Груш-ко, В. М. Блиновский ; под ред. К. Ш. Зигангирова. Москва : Мир, 1986. 576 с.

5. Gao S. A new algorithm for decoding Reed-Solomon codes // Communications, Information and Network Security / eds.: V. Bhargava, H. V. Poor, V. Tarokh, S. Yoon. Norwell, MA : Kluwer, 2003. Vol. 712. P. 55-68.

6. Huffman W. C., Pless V. Fundamentals of Error-Correcting Codes. New York ; Cambridge : Cambridge University Press, 2003. 646 p.

7. Рацеев С. М. Элементы высшей алгебры и теории кодирования : учеб. пособие для вузов. Санкт-Петербург : Лань, 2022. 656 с.

8. Федоренко С. В. Простой алгоритм декодирования алгебраических кодов // Информационно-управляющие системы. 2008. № 3. С. 23-27.

9. Gohberg I., Olshevsky V. The fast generalized Parker-Traub algorithm for inversion of Vandermonde and related matrices // Journal of Complexity. 1997. Vol. 13, iss. 2. P. 208-234. https://doi.org/10.1006/jcom.1997.0442

10. Yan S., Yang A. Explicit algorithm to the inverse of Vandermonde matrix // 2009 International Conference on Test and Measurement. Hong Kong, 2009. P. 176-179. https://doi.org/10.1109/ICTM.2009.5413083

11. Rawashdeh E. A. A simple method for finding the inverse matrix of Vandermonde matrix // MATEMATlCKI VESNIK. 2019. Vol. 71, № 3. P. 207-213.

12. Рацеев С. М., Череватенко О. И. Об алгоритмах декодирования обобщенных кодов Рида-Соломона на случай ошибок и стираний // Вестник Самарского университета. Естественнонаучная серия. 2021. Т. 26, № 3. С. 17-29. http://doi.org/10.18287/ 2541-7525-2020-26-3-17-29

References

1. Status Report on the First Round of the NIST Post-Quantum Cryptography Standardization Process. National Institute of Standards and Technology. Internal Report 8240. January, 2019. 27 p. https://doi.org/10.6028/NIST.IR.8240

2. Goppa V. D. A New Class of Linear Correcting Codes. Problems of Information Transmission, 1970, vol. 6, iss. 3, pp. 207-212.

3. MacWilliams F. J., Sloane N. J. A. The Theory of Error Correcting Codes. Amsterdam, New York, North-Holland Pub. Co, 1977. 762 p. (Russ. ed.: Moscow, Sviaz', 1979. 744 p.).

4. Blahut R. E. Theory and Practice of Error Control Codes. Reading, Mass., Addison-Wesley Pub. Co., 1983. 500 p. (Russ. ed.: Moscow, Mir, 1986. 576 p.).

5. Gao S. A new algorithm for decoding Reed—Solomon codes. In: V. Bhargava, H. V. Poor, V. Tarokh, S. Yoon, eds. Communications, Information and Network Security. Norwell, MA, Kluwer, 2003, vol. 712, pp. 55-68.

6. Huffman W. C., Pless V. Fundamentals of Error-Correcting Codes. New York, Cambridge, Cambridge University Press, 2003. 646 p.

7. Ratseev S. M. Elementy vysshei algebry i teorii kodirovaniya [Elements of Higher Algebra and Coding Theory]. St. Petersburg, Lan', 2022. 656 p. (in Russian).

8. Fedorenko S. V. Simple algorithm for decoding algebraic codes. Informatsionno-upravlyayushchie sistemy [Information and Control Systems], 2008, no. 3, pp. 23-27 (in Russian).

9. Gohberg I., Olshevsky V. The fast generalized Parker-Traub algorithm for inversion of Vandermonde and related matrices. Journal of Complexity, 1997, vol. 13, iss. 2, pp. 208-234. https://doi.org/10.1006/jcom.1997.0442

10. Yan S., Yang A. Explicit algorithm to the inverse of Vandermonde matrix. 2009 International Conference on Test and Measurement. Hong Kong, 2009, pp. 176-179. https://doi.org/10. 1109/ICTM.2009.5413083

11. Rawashdeh E. A. A simple method for finding the inverse matrix of Vandermonde matrix. MATEMATICKI VESNIK, 2019, vol. 71, no. 3, pp. 207-213.

12. Ratseev S. M., Cherevatenko O. I. On decoding algorithms for generalized Reed-Solomon codes with errors and erasures. Vestnik Samarskogo universiteta. Estestvennonauchnaia seriia [Vestnik of Samara University. Natural Science Series], 2020, vol. 26, no. 3, pp. 17-29 (in Russian). http://doi.org/10.18287/2541-7525-2020-26-3-17-29

Поступила в редакцию / Received 25.08.2021

Принята к публикации / Accepted 28.09.2021

Опубликована / Published 31.03.2022

i Надоели баннеры? Вы всегда можете отключить рекламу.