Челябинский физико-математический журнал. 2020. Т. 5, вып. 3. С. 327-341.
УДК 519.725
БОТ: 10.47475/2500-0101-2020-15307
ОБ АЛГОРИТМАХ ДЕКОДИРОВАНИЯ КОДОВ ГОППЫ
С. М. Рацеев
Ульяновский государственный университет, Ульяновск, Россия [email protected]
Рассматриваются алгоритмы декодирования кодов Гоппы. Данные коды являются важнейшей составной частью некоторых перспективных постквантовых криптографических алгоритмов. Для декодирования кодов Гоппы хорошо известен алгоритм Паттерсона, но он применим только для двоичных кодов. Так как коды Гоппы можно задавать с помощью обобщённых кодов Рида — Соломона, то любой алгоритм декодирования таких кодов применим и для кодов Гоппы. В данной работе приводятся алгоритмы декодирования кодов Гоппы на основе алгоритма Сугиямы, алгоритма Гао, алгоритма Берлекэмпа — Месси (алгоритма Питерсона — Горенстейна — Цир-лера). Также приводится алгоритм Паттерсона.
Ключевые слова: помехоустойчивый код, код Гоппы, код Рида — Соломона, декодирование кода.
Введение
Определение кода Гоппы [1] опирается на два объекта: многочлен О(х) с коэффициентами из поля ОЕ(дт), который называется многочленом Гоппы; подмножество Ь = {а0,а1,... ,ап-1} элементов поля ОЕ(дт), таких, что О(аг) = 0 для всех аг € Ь. Код Гоппы Г(Ь,О) состоит из всех векторов и = (и0, П\,... , ип-1) с компонентами из ОЕ(д), для которых
Если О(х) неприводим, то код Г(Ь, О) называется неприводимым кодом Гоппы. Множество Ь называется множеством нумераторов позиций кодового слова. Имеют место следующие оценки параметров для кодов Гоппы (см., например, [1; 2]).
Теорема 1. Параметры [п, к, й]-кода Г(Ь,О) над полем ОЕ(д), где Ь С ОЕ(дт), связаны соотношениями:
где й — кодовое расстояние.
Пусть а = (ао, а1,..., ап-1), где аг — различные элементы поля ОЕ(дт), у = (у0,у1,..., уп-1) — ненулевые (не обязательно различные) элементы из ОЕ(дт). Тогда обобщённый код Рида — Соломона, обозначаемый ОКБ^(а,у), состоит из всех кодовых векторов вида и = (у0Ь(а0),у1Ь(а1),... ,уп-1Ь(ап-1)), где Ь(х) — информационные многочлены над полем ОЕ(дт) степени не выше к — 1.
Нам понадобится следующее утверждение (см., например, [3]).
п = |Ь|, к > п — тг, г = degО(х), й > г + 1,
Теорема 2. Код Г(Ь, С) представляет собой ограничение кода ОЯБп-г(Ь,у) на подполе Е = СЕ(д), т.е. Г(Ь, С) = СЯБп-г(Ь,у) П Еп, где г = degС(х), у = (Уо, У1,... ,Уn-l),
С(аг) П -
1
г = 0,1,...,гс- 1.
а - «3
3=1
Следствие 1. Проверочная матрица кода СЯБп-г(Ь,у), который задаёт код Г(Ь,С), имеет вид
V
1 1. . . 1
ао а1 . .. «п—1
г—1 г—1 а— 1
ао а1 . . . ап—1
( С(ао)-1 0 0 С(а 1)-1
0 0
\
0
0
С(ап-1)-1
'т.е. совпадает с проверочной матрицей кода Г(Ь,С).
Таким образом, код Г(Ь, С) можно задать с помощью обобщённого кода Рида — Соломона (ОРС).
Пусть код Г(Ь, С) является двоичным. Если С(х) не имеет кратных корней, то код Г(Ь, С) называется сепарабельным кодом Гоппы. Пусть С(х) — полный квадрат некоторого многочлена над СЕ(2т) наименьшей степени, делящийся на С(х). В случае сепарабельного кода С(х) = С2(х). Для минимального расстояния сепарабельного кода Г(Ь, С) верна оценка ^ > 2г + 1 и выполнено равенство Г(Ь, С) = Г(Ь, С) (см., например, [2]). Эти факты позволяют строить сепарабель-ный код Г(Ь, С) = Г(Ь,С), а некоторые алгоритмы декодирования кодов Гоппы применять относительно кода СД5п-2г(а,у), г = degС(х).
В настоящее время имеются несколько хорошо известных алгоритмов декодирования (обобщённых) кодов Рида — Соломона. Например, алгоритм Питерсона — Горенстейна — Цирлера, алгоритм Берлекэмпа — Месси, алгоритм Сугиямы и др. [3; 4]. Для кодов РС Гао [5] и Шиозаки [6] предложили более простой и естественный алгоритм декодирования. Асимптотическая сложность данного алгоритма декодирования для кодов Рида — Соломона оценивается величиной 0(п 1с^2п), которая совпадает со сложностью лучших алгоритмов декодирования данных кодов, причём его описание является самым простым из описаний известных алгоритмов.
Для декодирования кодов Гоппы хорошо известен алгоритм Паттерсона [7]. Но он применим только для двоичных кодов Гоппы. При этом заметим, что любой алгоритм декодирования обобщённых кодов Рида — Соломона можно применить и для кодов Гоппы над любым полем.
Данная работа носит научно-методический характер. В ней собраны некоторые факты для ОРС кодов и применены для кодов Гоппы, в частности, приводятся алгоритмы декодирования кодов Гоппы на основе следующих алгоритмов: алгоритм Сугиямы, алгоритм Гао, алгоритм Берлекэмпа — Месси (алгоритм Питерсона — Горенстейна — Цирлера). Следует отметить, что для алгоритмов декодирования нужно учитывать то обстоятельство, что множество нумераторов позиций Ь может содержать нулевую компоненту. Также в работе приводится алгоритм Паттерсона.
Важность исследования алгоритмов декодирования кодов Гоппы обусловлена, в частности, тем, что на их основе строятся перспективные постквантовые криптосистемы [8]. При этом такие криптосистемы строятся не только на основе двоичных кодов, но и на основе кодов Гоппы над произвольным конечным полем.
у
1. Алгоритм декодирования Паттерсона для кодов Гоппы
Алгоритм Паттерсона [7] предназначен для декодирования двоичных неприводимых (из неприводимости следует сепарабельность) кодов Гоппы над GF(2m), так как построен на основе свойств полей вида GF(2m). В следующем предложении приводится одно из таких свойств, которое понадобится в дальнейшем.
Предложение 1. Пусть F = GF(2m), g(x) Е F[x] — некоторый неприводимый многочлен над F. Тогда для любого многочлена a(x) Е F[x] найдётся такой многочлен b(x) Е F[x], для которого b2(x) = a(x) (mod g(x)).
Доказательство данного несложного предложения строится на свойстве автоморфизма Фробениуса, определённого в поле F[x]/(g(x)).
Пусть многочлен G(x) двоичного кода r(L, G) является неприводимым. Предположим, что при передаче кодового вектора u = (u0, ui,... , un-i) произошли некоторые ошибки, e = (e0, e1,... , en-1) — вектор ошибок, v = u + e — полученный вектор. Пусть ошибки произошли на позициях i1,... , it. Обозначим X1 = ail,..., Xt = ait — локаторы ошибок, a(x) — многочлен локаторов ошибок:
t
^(x) = JJ(x - Xi).
i=1
Взяв формальную производную от a(x), получим
t t t t
a'(x) = En(x - X) = E jz-Xi n(x - X) = a(x) E ^z-x,.
i=1 j=i i= 1 j= 1 i= 1
Так как a(x) не имеет кратных корней, то многочлены a(x) и a'(x) взаимно просты. Теперь найдём Rv (x):
n— 1 n—1 n—1 n—1 t
Rv(x) = E — = E — + E — = E — = E ^ (mod G(x)).
£.-J y. - fy . A-J у - fy . A-J у - fy . A-J у - fy . A-J у - V .
- i - i - i - i - i
i=0 i=0 i=0 i=0 i=1
Обозначим S(x) = Rv (x) (mod G(x)). Получаем такое сравнение:
S(x)a(x) = a'(x) (mod G(x)),
которое называется ключевым уравнением. Представим многочлен a(x) в виде a(x) = a2(x) + xb2(x) для некоторых многочленов a(x) и b(x). Так как dega(x) < t, то dega(x) < [t/2], degb(x) < [(t — 1)/2]. Учитывая характеристику поля GF(2m), выразим a'(x) через a(x) и b(x):
a'(x) = 2a(x)a'(x) + b2(x) + 2xb(x)b'(x) = b2(x).
Поэтому
b2(x) = a'(x) = S(x)a(x) = S(x)(a2(x) + xb2(x)) (mod G(x)). Следовательно,
a2(x) = b2(x)(x + S—1(x)) (mod G(x)),
где многочлен S—1(x), обратный к S(x) по модулю G(x), существует в силу того, что многочлен G(x) неприводим, поэтому GF(2m)/G(x) является полем. Учитывая предложение 1, последнее сравнение можно записать в таком виде:
a(x) = b(x)\/x + S—1(x) (mod G(x)).
Алгоритм 1 (декодирования Паттерсона для кодов Гоппы).
Вход: вектор v.
Выход: исходный кодовый вектор и, если произошло t < r ошибок, r = deg G(x).
1. Вычисляется синдромный многочлен
n— 1
S(x) = У --— (mod G(x)).
^ x — a-
г=0
Если S(x) = 0, то алгоритм завершается и возвращается v.
2. Вычисляется T(x) = S— 1(x) (mod G(x)) (т. е. находится решение сравнения S(x)T(x) = 1 (mod G(x))), используя обобщённый алгоритм Евклида. Если T(x) = x, то полагается a(x) = x и происходит переход в шаг 5.
3. Вычисляется квадратный корень (см. замечание 2):
p(x) = \Jx + T(x) (mod G(x)).
4. Полагается r—1(x) = G(x), r0(x) = p(x), v—1(x) = 0, v0(x) = 1. Производится последовательность вычислений обобщённого алгоритма Евклида (i > 1)
r-—2(x) = r-—i(x)qi—i(x) + r-(x), v-(x) = v»_2(x) - v-—i(x)q-_i(x)
до тех пор, пока для некоторого j не будут выполнены неравенства
r
deg rj—1(x) > - , deg rj (x) <
r
L2J
В этом случае a(x) = rj(x), b(x) = vj(x), a(x) = r2(x) + xvj2(x) (с точностью до константы).
5. Вычисляются корни многочлена a(x) (например, методом Ченя), равные локаторам ошибок: X1 = a-1,..., Xt = a-t, где t = dega(x). После этого в векторе v исправляются ошибки на позициях i1,..., it.
Замечание 1. Пусть на 4-м шаге алгоритма 1 для некоторого j выполнено deg rj—1(x) > [r/2], deg rj(x) < [r/2]. Тогда
deg vj (x) = deg G(x) — deg rj—1(x) < r — ^ = ^
Поэтому deg vj (x) < .
Для ускорения работы алгоритма декодирования можно вычислить заранее многочлены (x — ai)—1 (mod G(x)), i = 0,1,... ,n — 1, а в процессе вычисления синдромного многочлена S(x) для полученного вектора v складывать над полем GF(2m) только те из них, которые соответствуют v-, равным единице.
Замечание 2. Для нахождения многочлена p(x) из 3-го шага алгоритма 1 заметим следующее. Пусть r = deg G(x). Тогда
[(r-1)/2] /[r/2—1]
x + T(x) = qo + q1x + ... + qr—1xr—1 = ^ q2-x2- + x I ^ q2-+1x2-
-=0 -=0
где обе суммы являются! многочленами с чётными степенями. Так как для любого
О m 1— on
a2 — ^ ™ /г. — „2
a G GF(2m) выполнено ^a2m 1 j = a2m = a, то /a = a2m 1. Поэтому
_ [(r—1)/2] /[r/2—1] \
y/x + T(x) = q2-m 1 x- + /x I q2i+11 x- I (mod G(x)).
x \ (mod G(x)
-=0 -=0
Пусть s2(x) = x (mod G(x)) для некоторого s(x). Тогда
_ [(r-1)/2] [r/2-1]
yjx + T(x) = q2m 1 x* + g^1x's(x) (mod G(x)).
i=0
i=0
Так как G(x) G GF(2m)[x] и неприводим, то многочлен G(x) делит многочлен
x
(2m)r _
x, т.е. x2 = x (mod G(x)). Это означает, что s(x) = x2 (mod G(x))
Многочлен s(x) можно также найти следующим образом. Пусть G(x) = g2(x) + xg2(x). Тогда s(x) = g0(x)g-1(x) (mod G(x)). Действительно, так как характеристика поля GF(2m) равна двум, то g0(x) = xg2(x) (mod G(x)). Так как многочлен G(x) неприводим, то многочлены д\ (x) и G(x) взаимно просты. Поэтому
(go(x)g-1 (x))2 = g2(x)g-2(x) = x (mod G(x)).
Пример 1. Рассмотрим расширение поля GF(2) С GF(24). Пусть поле GF(24)
строится на основе примитивного многочлена p(x) 4 = x4 + x + 1 , a - примитивный
элемент поля GF (24):
a0 = 1 = 1000, a1 = a = 0100,
a2 = a2 = 0010, a3 = a3 = 0001,
a4 = 1 +a = 1100, a5 = a +a2 = 0110,
a6 = a2 +a3 = 0011, a7 = 1 +a +a3 = 1101,
a8 = 1 +a2 = 1010, a9 = a +a3 = 0101,
a10 = 1 +a +a2 = 1110, a11 = a +a2 +a3 = 0111,
a12 = 1 +a +a2 +a3 = 1111, a13 = 1 +a2 +a3 = 1011,
a14 = 1 +a3 = 1001, a15 = 1 = 1000.
Пусть Ь = GF(24) = {0,1, а, а2,..., а14}, = х2 + х + а3. Так как след элемента а3 в поле GF(24) не равен нулю, то многочлен G(x) в этом поле не имеет корней. Поэтому из неприводимости G(x) над GF(24) следует, что код Г(Ь, G) является сепарабельным, т. е. он исправляет до двух ошибок. Проверочная матрица Н кода Г(Ь, G) примет вид
H
G(0)-1 0G(0)-1
G(1)-1 1G(1)-1
G(a)-1 aG(«)-1
G(a14)-1 a14G(a14 )-1
a12 a12 a4 a3
a
a
a a
8
a
a12 a5 a5 a12 a8 a6 a14 a13 a
3
a3 a 11 1
6
a
a
a
a
a11 a13 a14 a6
a a8
/1110010100000010\ 1110111000010001 1100000110101110 1101100011100001 0100110110101101 0111100001010000 0111111011011011 \0100101111011110/
Так как все строки матрицы Н линейно независимы, то п — к = 8, к = 8. Выписав построчно фундаментальную систему решений системы однородных линейных
0
уравнений HX = O, находим порождающую матрицу кода Г(Х, G):
G
/1011011100000000\ 1001010011000000 1110010010100000 0101110010010000 0010111010001000 0100111000000100 1010110000000010 \1 101001000000001/
Пусть на приёмном конце принят вектор V = (0,1,1,1,1,0, 0, 0, 0,0,1,1, 0,0,1,1), в котором не более двух ошибок. Для декодирования данного вектора применим алгоритм 1.
1. Вычисляем синдромный многочлен
15
S (x) = ]>]
1
г=0
'X
X — 1
+
1
+
1
x — а
x — а
+
1
x — а
+
1
x — а
9
+
1
x — a10 x — а13 x — а1
2. Вычисляем T(x) = (а14 + a12x)-1 = а14 + a6x (mod G(x)).
3. Вычисляем s(x) и p(x), учитывая замечание 2:
+
1
„13
+
1
14
= а + a x (mod G(x)).
s(x) = x128 = a + x (mod G(x)), p(x) = \J T (x) + x = V a14 +
a13x =
= (a14)8 + (a13)8(a9 + x) = a11 + a14x (mod G(x)).
4. Полагаем r-1(x) = G(x), r0(x) = p(x), v-1(x) = 0, v0(x) = 1. При j = 0 видно, что deg r-1(x) = 2 > r/2, deg r0(x) = 1 < r/2. Поэтому с точностью до константы a(x) = r2(x) + xv0(x) = a7 + x + a13x2.
5. Корнями многочлена a(x) являются X1 = a3 = a4, X2 = a6 = a7, поэтому ошибки произошли на 4-й и 7-й позициях. Следовательно, исходный кодовый вектор равен u = (0,1,1,1, 0, 0, 0,1, 0, 0,1,1, 0, 0,1,1). Так как столбцы матрицы G с номерами 7, 9-15 (при нумерации от нуля) образуют единичную матрицу, то из позиций вектора u с данными номерами извлекаем информационный вектор i = (1, 0,1,1,0, 0,1,1).
v
2. Декодирование кодов Гоппы на основе алгоритма Гао
Пусть до конца данной работы Г(Ь,С) = (Ь,у) П Еп, Е = СЕ(д), г =
deg С(х), к = п—г — размерность кода (Е, у) длины к = п, Н — проверочная
матрица кода СД5'га_г(Е,у). Пусть 6, 6 — кодовые расстояния соответственно кодов Г(Е, С) и (Е, у). Так как 6 > г + 1, 6 = п — к + 1 = г + 1, то если в кодовом
векторе и Е Г(Е,С) произошло не более [г/2] ошибок, то для его декодирования можно применять алгоритмы декодирования для ОРС кодов.
Если же код Г(Е, С) двоичный и сепарабельный, то Г(Е, С) = СЯ5П_2г (Ь,у) П Еп, Е = СЕ(2), к = п — 2г — размерность кода СЯ5П_2г(Е,у), Н — проверочная матрица кода СЯ5П_2г(Е,у). Также 6 > 2г +1, Г(Е, С2) С СД5П_2г(Е, у), 6 = 2г +1, поэтому в этом случае алгоритмы декодирования для ОРС кодов можно применять для декодирования вектора и, в котором до г ошибок.
При описании следующего алгоритма будем следовать работе [9]. Определим многочлен
т(х) = (х — а0)(х — а1)... (х — ап-1) = ^ (х — а^).
Пусть кодовый вектор и Е Г(Ь, G) получен с помощью кодирования информацион-
к- 1х
ного многочлена b(x) = b0 + b1x + ... + br_ 1xk 1 кода GRSV(L, y)
u = (y0b(a0),y1b(a1),..., y„_1b(a„_1)). (1)
Кроме того, пусть v = u + e — полученный вектор, e — вектор ошибок, X1 = ai1,..., Xt = ait — локаторы ошибок, Y1 = ei1 , ...,Yt = eit — значения ошибок. В данном алгоритме многочлен локаторов ошибок также запишем в виде
a(x) = (x — X1)... (x — Xt).
Если ошибок не было, то будем полагать, что a(x) = 1.
Если Vi = Ui, то Vi = yjb(aj). Если Vi = Uj, то на позиции i произошла ошибка, поэтому a(ai) = 0. Из этого следует, что
a(ai)y_1vi = a(ai)b(ai), i = 0,1,..., n — 1.
Обозначим p(x) = a(x)b(x). Тогда
a(ai)y_1Vi = p(ai), i = 0,1,... ,n — 1.
Построим интерполяционный многочлен Лагранжа f (x) степени не выше n — 1, проходящий через точки (a0,У_^), (a1,y_V), ... , (a„_b y__1Vra_1):
f (ai) = yi_1Vi, i = 0,1,..., n — 1, deg f (x) < n — 1.
Тогда из равенств a(ai)f (ai) = p(ai), i = 0,1,..., n — 1, получаем сравнение
a(x)f (x) = p(x) (mod m(x)).
Следующий алгоритм декодирования относится к классу безсиндромных алгоритмов декодирования.
Алгоритм 2 (декодирование кодов Гоппы на основе алгоритма Гао).
Вход: принятый вектор V.
Выход: исходный кодовый вектор и, в котором произошло не более t ошибок, если r > 2t, r = deg G(x), u G r(L, G) С GRSn_r(L,y) (для двоичного сепарабельного кода r > t, u G r(L, G) С GRS^r(L, y)).
1. Интерполяция. Строится интерполяционный многочлен f (x), для которого f (ai) = y_1Vi, i = 0,1,..., n — 1.
2. Незаконченный обобщённый алгоритм Евклида. Пусть r_1(x) = m(x), r0(x) = f (x), V_1(x) = 0, V0(x) = 1. Производится последовательность действий обобщённого алгоритма Евклида
ri_2(x) = ri_1(x)qi_1(x) + ri(x), Vi(x) = Vi_2(x) — Vi_1(x)qi_1(x), i > 1, до тех пор, пока не достигается такого rj (x), для которого
j , w n + k n + k
deg rj_1(x) > —-—, deg rj (x) <
2 1 ° > 2
При этом на каждом i-м шаге выполнено сравнение v^x)/(x) = r(x) (mod m(x)).
3. Деление. Информационный многочлен равен b(x) = rj(x)/vj(x).
4. Вычисление кодового вектора u с помощью кодирования информационного многочлена b(x) с помощью формулы (1) для кода GRS^(Е,у):
u = (yo6(ao),yi6(ai),... ,Уп-1&(аn-1)).
Теорема 3. Если в кодовом векторе произошло не более [r/2] ошибок (не более r ошибок для двоичного сепарабельного кода), то алгоритм декодирования 2 всегда приводит к единственному решению.
Доказательство данной теоремы аналогично доказательству подобной теоремы из работы [9] для кодов РС. При этом нужно учесть теоремы 1 и 2.
Пример 2. Продолжим рассмотрение кода Г(Е, G) из примера 1. Так как этот код сепарабельный, то G(x) = G2(x) = а6 + x2 + x4, Г(Е, G) = Г(Е, G). Учитывая теорему 2, данный код является ограничением кода GRS'12(E,y) на подполе GF(2), где
у = G(a) П —= G(a), i = 0,1,..., 15,
. /. —г — j
y = (—6, —6, —7, —9, а12, а7, а13, а14, а3, а9, а3, а13, а11, а11, а14, а12).
Пусть V = V(а) — матрица Вандермонда, построенная на основе вектора а, V-1 — обратная к ней матрица, Y — диагональная матрица на основе вектора у:
Y = Diag^6, а6, а7, а9, а12, а7, а13, а14, а3, а9, а3, а13, а11, а11, а14, а12).
После кодирования информационного вектора i = (1, 0,1,1, 0, 0,1,1) кода Гоппы Г(Е, G) = Г(Е, G) с помощью порождающей матрицы G получен кодовый вектор
u = iG = (0,1,1,1, 0,0, 0,1, 0,0,1,1, 0,0,1,1),
а на приёмном конце после передачи вектора u получен вектор
v = u + e = (0,1,1,1,1, 0, 0,0, 0, 0,1,1, 0, 0,1,1),
e = (0, 0, 0, 0,1, 0, 0,1, 0, 0, 0, 0, 0,0, 0, 0). Будем декодировать вектор v с помощью алгоритма 2. В нашем случае
m(x) = (x — в) = x16 — x.
eeGF (24)
Вычисляем коэффициенты интерполяционного многочлена /(x): (/o, /1,..., /15) = vY-1V-1 = (0, а7, а3 ,а8,а11,а12, а11, а7, а4, а4, а3, а5, а6 ,а10,а10,а9),
/ (x) = а7 x + а3x2 + а8x3 + а11x4 + а12x5 + а11x6 + а7x7 + а4x8+ +а4x9 + а3x10 + а5 x11 + а6x12 + а10 x13 + а10x14 + а9x15.
Полагаем г_1(я) = т(ж), г0(ж) = f (ж), = 0, г>о(я) = 1 и применяем
неполный обобщённый алгоритм Евклида:
г_1(х) = Го(ж)^о(х) + Г1 (ж), д0(ж) = а7 + а6ж,
г1(х) = а3 ж + а9ж2 + а7ж3 + ж4 + а10ж5 + а13ж7 + а4ж8 + а14ж9 + а8жп + а4ж12+ +а7ж13 + а5ж14, ^1(ж) = ^_1(ж) — ^0(ж)д0(ж) = а7 + а6ж, Го (ж) = Г1(ж)^1(ж) + Г2 (ж), (ж) = а9 + а4ж,
г2(ж) = а2 ж + а7ж2 + а9ж3 + а9 ж4 + а12ж5 + а10ж6 + а9 ж8 + а4ж9 + аж11 + а11ж12, а2(ж) = ^0(ж) — ^1(ж)д1(ж) = а4 + а12ж + а10ж2.
Так как для кода СЯ£12(Ь,у) к =16, к = 12, (п + к)/2 = 14, то после второго шага алгоритма Евклида процесс останавливается (deg г1(ж) = 14, deg г2(ж) < 14).
Информационный многочлен Ь(ж) кода СЯ512(Ь, у), который соответствует вектору и, имеет вид
Ь(ж) = = а13ж + а2ж2 + аж3 + а14ж4 + а8 ж5 + а3ж6 + а10ж7 + а2ж8 + а2ж9 + аж10. ^2 (ж)
Вычисляем сам вектор и:
и = (уоЬ(0), у1&(1), у2&(а),..., У15Ь(а14)) = (0,1,1,1, 0, 0, 0,1, 0, 0,1,1, 0, 0,1,1). Осталось из кодового вектора и извлечь информационный вектор
г = (1, 0,1,1, 0, 0,1,1).
3. Декодирование кодов Гоппы на основе алгоритма Сугиямы
В данном и следующем параграфе рассмотрим алгоритмы синдромного декодирования кодов Гоппы. Пусть после отправления вектора и Е Г(Ь, С) на приёмном конце принят вектор V = и + е, где е — вектор ошибок веса не более Пусть ошибки произошли на позициях г1,... , ¿¿. Учитывая следствие 1, вычислим синдромный вектор:
5 = vHТ
—т еНт
>
х
х
1
ао
\\
а
1
а1
Г_1 аГ1
1 \ ( С(ао)-1 0
0 С(а1)-1
а„_ 1
аП_1 ) \
0
0
( еп С(а^1 )-1 + .
ег1
0 0
т
... С(а„_1)-1 / /
У е»1 С(а^1) 1аг1 1 + .
+ е* С(аг4 )_1 \
+ ег( С(аг4 )_1аг4
+ ег( С(аг4 )_1 а!Г1 У
т
Пусть Х1 = а^1, Х2 = а^2, ..., X = а^ — локаторы ошибок, У1 = е^1, У"2 = е^2, ... = е^ — значения ошибок. Обозначим ^ = У^)_1, ] = 1,... , Тогда
5 = + ... +
0,1,..., 2* — 1, 5(ж) = 50 + 51ж + ... + 524_1ж:
,24- 1
е
Определим многочлен локаторов ошибок
а(х) = (1 — — Х2х)... (1 — Хьх) = а0 + о^х + а2х2 + ... + аьхь,
где а0 = 1. Выведем ключевое уравнение для обобщённых кодов РС. Для этого определим два многочлена ш(х) и Ф(х):
ь * г \
а(х)
'(x) = £ ^П(1 - = £ Z
j=1 s=j j=1
t t ( ) Ф(х) = Y ZjXf П(1 - Xsx) = Y ZjX2t a(x)
^ i - x..x'
j=1 s=j j=1
где w(x) называется многочленом значений ошибок для ОРС кодов. Тогда
2t— 1 2t-1 t t 2t-1 S(x) = Y ^ = Y Y Zjj = Y Zj Y(Xx)4 =
i=0 4=0 j=1 j=1 4=0
= A Z 1 - (Xjx)2t = « Zj _ x2t Л Xf = ^(x) _ x2t£(x) pi j 1 - Xjx - Xjx x 1 - Xjx a(x) x a(x)'
Таким образом, получаем ключевое уравнение
S(x)a(x) = w(x) (mod x2t). (2)
Алгоритм 3 (декодирование кодов Гоппы на основе алгоритма Сугия-мы).
Вход: принятый вектор v.
Выход: исходный кодовый вектор и, в котором произошло не более t ошибок, если r > 2t, r = deg G(x), u G r(L, G) С GRSn—r(L,y) (для двоичного сепарабельного кода r > t, u G r(L, G) С GRS„—2r(L, y)).
1. Определяется t = [r/2] (t = r в случае двоичного сепарабельного кода Гоп-
—т
пы). Находятся первые 2t компонент S0, S1,..., S2t—1 синдромного вектора vH . Если они все равны нулю, то полагается, что ошибок нет и процедура окончена. Полученному вектору ставится в соответствие синдромный многочлен
2t— 1
S(x) — ^ ^ Six
4=0
2. Пусть г-1(х) = х2ь, г0(х) = 5(х), ^-1(х) = 0, (х) = 1. С помощью обобщённого алгоритма Евклида производится последовательность вычислений (г > 1):
Гг-2(х) = Г*-1(х)^-1(х) + Гг(х), ^¿(х) = ^_2(х) — V*-1 (х)&_1 (х).
Процесс прекращается, как только для некоторого г,- (х) выполняются условия
deg г^_1(х) > Ь, deg г,- (х) < Ь — 1. (3)
Тогда а(х) = Л^-(х), ш(х) = Лг,-(х), где константа Л С GF(д) задаётся так, чтобы удовлетворялось условие а(0) = 1.
Пусть в = deg а(х). Тогда вектор V содержит в ошибок.
3. Отыскиваются в корней многочлена а (ж) последовательной подстановкой в него ненулевых элементов поля С^1 (дт). При этом локаторы ошибок — это величины, обратные корням многочлена а (ж).
4. Находятся ..., например, с помощью алгоритма Форни для ОРС кодов:
^(Х"1)
П^(1 — X Х-1)
1,
в.
4)
После этого находятся значения ошибок У? = ^С(Х?), ] = 1,...,в. У вектора V из г?-го символа, X? = а^., вычитается значение У}, = 1,...,в. При этом получаем вектор и.
Если а^ = 0 для некоторого г, то вычисляется значение Z0, равное скалярному произведению вектора и на первую строку матрицы Н. Если Z0 = 0, то вычисляется значение ошибки Уо = Z0G(аi). Осталось в векторе и из г-го символа вычесть Уо.
Теорема 4. Пусть г > 2* (г > * для двоичного сепарабельного кода), г = deg С(ж), V? (ж) и г? (ж) — многочлены из обобщённого алгоритма Евклида с условием (3). Тогда найдётся такая ненулевая константа Л € ^, для которой а (ж) = Л^? (ж), ш(ж) = Аг? (ж).
Доказательство аналогичной теоремы для кодов РС можно найти, например, в [3]. При этом нужно учесть теоремы 1 и 2.
Пример 3. Продолжим рассмотрение предыдущего примера. Матрица Н на основе многочлена С(ж) = С2 (ж) = ж4 + ж2 + а6 примет вид
Н=
( а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 а10 а9 а а12 а13 а11 а7 1 а7 а11 а13 а12 а
\ 0 а9 а11 а12 а12 а5 а2 а4 а3 1 а9 а2 а7 а10 а10 1 )
Пусть на приёмном конце принят тот же вектор
V = (0,1,1,1,1, 0, 0,0, 0, 0,1,1, 0, 0,1,1). Определяем * = г = 2, г = deg С(ж). Находим синдромный вектор 5
—т vH
(а9
а
10
а10, а6). Тогда Б(ж)
а9 + а10ж + а10ж2 + а6ж3.
Определяем г_1(ж) = ж4, г0(ж) = 5(ж), v_1(ж) ный обобщённый алгоритм Евклида:
0, v0(ж) = 1. Применяем непол-
г_1(ж) = го(ж)до(ж) + г1 (ж), д0(ж) = а13 + а9ж, г1(ж) = а7 + а13ж + а5ж2, v1(x) = v_1(x) — v0(ж)q0(ж) = а13 + а9ж, го (ж) = г^ж^^ж) + г2 (ж), д1(ж) = а6 + аж, г2(ж) = а10 + ж, v2(x) = v0(x) — v1(x)q1(x) = а + а3ж + а10ж2.
= 2 = deg г2 (ж) = 1 < то останавливаемся на втором шаге. Лv2(x) = А(а + а3ж + а10ж2), ш(ж) = Лг2(ж) = Л(а10 + ж). При Л = а14 получаем а(0) = 1, поэтому а(ж) = 1 + а2ж + а9ж2. Корнями многочлена
Так как deg г1(ж) При этом а (ж) =
а(ж) являются х = а12 и х2 = а9, поэтому X = х-1 = а3 = а4, Х2 = х-1 = а6 = а7. Таким образом, ошибки произошли на 4-й и 7-й позициях. После исправления ошибок получаем вектор и = (0,1,1,1, 0, 0, 0,1, 0, 0,1,1, 0, 0,1,1). Вычисляя значение 2), равное скалярному произведению вектора и на первую строку матрицы Н, получаем 0, поэтому ошибок на 0-й позиции не происходило. Следовательно, и = и — исходный кодовый вектор.
4. Декодирование кода Гоппы на основе алгоритма Берлекэмпа — Месси
Рассмотрим сравнение (2). Так как deg5(х)а(х) < 3£ — 1, degш(х) < £ — 1, то сравнение (2) имеет место, если коэффициент многочлена £(х)а(х) при жг, г = £, £ +1,..., 2£ — 1, равен нулю. Учитывая, что а0 = 0, получаем систему уравнений
{0"15г_1 + + ... + а4£о = —
+ + ... + = — £¿+1,
^1£24_2 + ^2£24_3 + ... + = — £24_1.
Запишем данную систему в матричном виде:
/ £о £1 . £*_1 \ / \ / —& \
£1 £2 . = —£¿+1
V £*_1 . £24_3 £24_2 / V 0"1 / V — £24_1 /
Матрицу данной системы обозначим через М4.
Теорема 5. Матрица М4 невырождена тогда и только тогда, когда произошло £ ошибок.
Доказательство. Пусть
А = / 1 Х1 1. X . . . 1 . X \ , В = (21 0 0. 22 . .0 .0 \
V X. ¿_1 Х2 . . Х_1 / .0.. 0. . 2 /
Тогда доказательство следует из равенства М4 = АВАт и критерия равенства нулю определителя Вандермонда. □
Следствие 2. Система уравнений (5) имеет единственное решение тогда и только тогда, когда произошло £ ошибок.
Алгоритм 4 (декодирование кода Гоппы на основе алгоритма Берлекэмпа — Месси).
Вход: принятый вектор V.
Выход: исходный кодовый вектор и, в котором произошло не более £ ошибок, если г > 2£, г = deg С(х), и € Г(Е, С) С СД£га_г(Е,у) (для двоичного сепарабельного кода г > £, и € Г(Е, С) С СД£„_2г(Е, у)).
1. Определяется £ = [г/2] (£ = г в случае двоичного сепарабельного кода Гоппы).
—т
Находятся первые 2£ компонент £0 ,£1,... ,£24_1 синдромного вектора vH . Если они все равны нулю, то полагается, что ошибок нет и процедура окончена.
2. Цикл: пока |М4| = 0, переопределяется £ := £ — 1.
Находятся ..., — решение системы (5). Это можно сделать с помощью алгоритма Берлекэмпа — Месси (или методом Гаусса). После этого составляется многочлен а(ж). Пусть в = deg а(ж).
3. Отыскиваются в корней многочлена а(ж) последовательной подстановкой в него ненулевых элементов поля С^1 (дт). При этом локаторы ошибок — это величины, обратные корням многочлена а(ж).
4. Находятся например, с помощью алгоритма Форни (4). После этого находятся значения ошибок У} = ^С(Х}-), ] = 1,..., в. У вектора V из г}--го символа, X} = а^., вычитается значение У}, = 1,..., в. При этом получаем вектор и.
Если а = 0 для некоторого г и degа(ж) < то вычисляется значение 20, равное скалярному произведению вектора и на первую строку матрицы Н. Вычисляется значение ошибки У0 = Осталось в векторе и из г-го символа вычесть У0.
Пример 4. Продолжим рассмотрение предыдущего примера. Путь на приёмном конце принят тот же вектор V. Определяем £ = г = 2. Составляем матрицу системы
Так как |M2| = 0, то полученный вектор v содержит две ошибки. Находим значения = а2, а2 = а9, поэтому а(ж) = 1 + а2х + а9х2. Дальнейшие шаги декодирования совпадают с шагами предыдущего примера, разве что не нужно проверять, происходила ли ошибка на 0-й позиции, так как deg а(ж) = 2 = t.
Список литературы
1. Гоппа, В. Д. Новый класс линейных корректирующих кодов / В. Д. Гоппа // Проблемы передачи информации. — 1970. — Т. 6, вып. 3. — С. 24-30.
2. Мак-Вильяме, Ф. Дж. Теория кодов, исправляющих ошибки / Ф.Дж. Мак-Вильямс, Н. Дж. А. Слоэн. — М. : Связь, 1979. — 744 с.
3. Блейхут, Р. Теория и практика кодов, контролирующих ошибки / Р. Блейхут. — М. : Мир, 1986. — 576 с.
4. Cary Huffman, W. Fundamentals of Error-Correcting Codes / W. Cary Huffman. — Cambridge University Press, 2003. — 646 p.
5. Gao, S. A new algorithm for decoding Reed — Solomon codes / S. Gao // Communications, Information and Network Security; eds V. Bhargava, H.V. Poor, V. Tarokh, S.Yoon. Norwell : Kluwer, 2003. — P. 55-68.
6. Shiozaki, A. Decoding of redundant residue polynomial codes using Euclid's algorithm / A. Shiozaki // IEEE Transactions on Information Theory. — 1988. — Vol. IT-34, no. 5. — P. 1351-1354.
7. Patterson, N. J. The algebraic decoding of Goppa codes / N.J.Patterson // IEEE Transactions on Information Theory. — 1975. — Vol. 21, no. 2. — P. 203-207.
8. 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
9. Федоренко, С. В. Простой алгоритм декодирования алгебраических кодов / С. В. Федоренко // Информационно-управляющие системы. — 2008. — № 3. — С. 23-
(5):
27.
Поступила в редакцию 21.04-2020 После переработки 15.07.2020
Сведения об авторе
Рацеев Сергей Михайлович, доктор физико-математических наук, доцент, профессор кафедры информационной безопасности и теории управления, Ульяновский государственный университет, Ульяновск, Россия; e-mail: [email protected].
Chelyabinsk Physical and Mathematical Journal. 2020. Vol. 5, iss. 3. P. 327-341.
DOI: 10.47475/2500-0101-2020-15307
ON DECODING ALGORITHMS FOR GOPPA CODES S.M. Ratseev
Ulyanovsk State University, Ulyanovsk, Russia [email protected]
The paper is devoted to the decoding algorithms for Goppa codes. These codes are an important part of some promising post-quantum cryptographic algorithms. The Patterson algorithm is well known for decoding Goppa codes, but it is only applicable for binary codes. Since Goppa codes can be specified using generalized Reed — Solomon codes, any decoding algorithm for such codes is also applicable to Goppa codes. The algorithms for decoding Goppa codes based on the algorithm Sugiyama algorithm, Gao algorithm, Berlekamp — Massey algorithm (Peterson — Gorenstein — Zierler algorithm) are given. The Patterson algorithm is also given.
Keywords: error-correcting code, Goppa code, Reed — Solomon code, code decoding.
References
1. Goppa V.D. A new class of linear correcting codes. Problemy Peredachi Informatsii [Problems of information transmission], 1970, vol. 6, pp. 207-212. (In Russ.).
2. MacWilliams F.J., SloaneN.J.A. The Theory of Error Correcting Codes. New York : North-Holland Publ., 1977. 762 p.
3. Blahut R.E. Theory and Practice of Error Control Codes. Reading : Addison-Wesley Publ., 1983. 500 p.
4. Cary Huffman W. Fundamentals of Error-Correcting Codes. Cambridge University Press, 2003. 646 p.
5. GaoS. A new algorithm for decoding Reed — Solomon codes. Communications, Information and Network Security; eds V. Bhargava, H.V. Poor, V. Tarokh, S.Yoon. Norwell : Kluwer, 2003. 382 p. Pp. 55-68.
6. Shiozaki A. Decoding of redundant residue polynomial codes using Euclid's algorithm. IEEE Transactions on Information Theory, 1988, vol. IT-34, no. 5, pp. 1351-1354.
7. Patterson N.J. The algebraic decoding of Goppa codes. IEEE Transactions on Information Theory, 1975, vol. 21, no. 2, pp. 203-207.
8. 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.
9. Fedorenko S.V. Prostoy algoritm dekodirovaniya algebraicheskikh kodov [Simple algorithm for decoding algebraic codes]. Informatsionno-upravlyayushchiye sistemy [Information and Control Systems], 2008, no. 3, pp. 23-27. (In Russ.).
Accepted article received 21.04.2020 Corrections received 15.07.2020