Двоичный код Гоппы

Материал из testwiki
Перейти к навигации Перейти к поиску

Двоичный код Гоппы — код коррекции ошибок из класса общих Шаблон:Iw, описан Валерием Денисовичем Гоппой. В сравнении с другими вариантами, бинарная структура даёт несколько математических преимуществ, а также подходит для общего использования в вычислительной технике и телекоммуникациях. Двоичные коды Гоппы обладают интересными свойствами, полезными в криптосистемах, подобных McEliece[1].

Строение и свойства

Двоичный код Гоппы определяется как многочлен g(x) степени t над конечным полем GF(2m) без конечного числа нулей, и последовательность L из n различных элементов GF(2m), которые не являются корнями или полиномами.

i,j{0,,n1}:LiGF(2m)(Li=Lji=j)g(Li)0

Ключи принадлежат ядру функции, формируя подпространство {0,1}n:

Γ(g,L)={c{0,1}n|i=0n1cixLi0modg(x)}

Код определён, как пара (g,L) с минимальной длиной 2t+1, таким образом, он может исправить t=(2t+1)12 ошибок в слове длиной nmt, используя ключи размером n. Он также обладает удобной Шаблон:Iw H в виде:

H=VD=(1111L01L11L21Ln11L02L12L22Ln12L0t1L1t1L2t1Ln1t1)(1g(L0)1g(L1)1g(L2)1g(Ln1))

Эта форма матрицы контроля чётности состоит из определителя Вандермонда V и диагональной матрицы D, имеет форму, схожую с проверочными матрицами Шаблон:Iw. Таким образом, в этой форме могут использоваться альтернативные декодеры. Они обычно обеспечивают только ограниченную возможность исправления ошибок (чаще всего t/2).

Для практических целей матрица проверки на чётность кода Гоппы обычно преобразуется в более удобную для использования компьютером двоичную форму с помощью конструкции трассировки, которая преобразует t-на-n матрицу над GF(2m) в двоичную матрицу mt-на-n, разделив полиномиальные коэффициенты GF(2m) на m последовательных рядов.

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

Обычно декодирование двоичного кода Гоппы производится алгоритмом Паттерсона, который способен эффективно исправлять ошибки (он исправляет все t обнаруженные ошибкиШаблон:Уточнить), и который также достаточно прост в реализации.

Алгоритм Паттерсона преобразует синдром в вектор ошибок. Предполагается, что синдром двоичного слова c=(c0,,cn1) примет вид:

s(x)i=0n1cixLimodg(x)

Альтернативная форма матрицы контроля чётности основана на формуле для s(x) и может быть использована для создания такого синдрома с простым произведением матриц.

Далее алгоритм производит расчёт v(x)s(x)1xmodg(x). Это не удается, когда s(x)0, но это тот случай, когда входное слово является ключом, поэтому исправление ошибок не требуется.

Использованием расширенного алгоритма Евклида v(x) сводится к многочленам a(x) и b(x), так, что a(x)b(x)v(x)modg(x), при этом deg(a)t/2 и deg(b)(t1)/2.

Наконец, многочлен, определяющий расположение ошибок, вычисляется как σ(x)=a(x)2+xb(x)2. При этом в двоичном случае для исправления ошибок достаточно их найти, так как существует только одно отличное значение.

Если исходный ключ был декодирован и e=(e0,e1,,en1) — двоичный вектор ошибок, то:

σ(x)=i=0n1ei(xLi).

Разложение на множители или оценка всех корней σ(x) дает достаточно информации, чтобы восстановить вектор ошибок и исправить их.

Свойства и использование

Двоичные коды Гоппы обладают специфическим свойством — они исправляют все deg(g) ошибок, в то время как троичные и прочие коды исправляют только deg(g)/2. Асимптотически такая способность к исправлению ошибок соответствует известной границе Гилберта — Варшамова.

Благодаря способности исправления ошибок, с учётом высокой скорости кодирования и сложной формы матрицы проверки на чётность (которую обычно трудно отличить от случайной двоичной матрицы того же ранга) двоичные коды Гоппы используются в нескольких постквантовых криптосистемах, в частности, в криптосистеме McEliece и криптосистеме Нидеррейтера.

Примечания

Шаблон:Примечания

Литература

Шаблон:Rq