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

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

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

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

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

∀i,j∈{0,…,n−1}:Li∈GF(2m)∧(Li=Lj⟹i=j)∧g(Li)≠0

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

Γ(g,L)={c∈{0,1}n|∑i=0n−1cix−Li≡0modg(x)}

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

H=VD=(111⋯1L01L11L21⋯Ln−11L02L12L22⋯Ln−12⋮⋮⋮⋱⋮L0t−1L1t−1L2t−1⋯Ln−1t−1)(1g(L0)1g(L1)1g(L2)⋱1g(Ln−1))

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

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

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

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

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

s(x)≡∑i=0n−1cix−Limodg(x)

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

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

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

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

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

σ(x)=∏i=0n−1ei(x−Li).

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

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

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

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

Примечания

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

Литература

Шаблон:Rq