Русская Википедия:Двоичный код Гоппы

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

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

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

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

<math>\forall i,j \in \{0,\ldots,n-1\}: L_i \in GF(2^m) \land (L_i = L_j \implies i=j) \land g(L_i) \neq 0</math>

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

<math>\Gamma(g,L)=\left\{ c \in \{0,1\}^n \left| \sum_{i=0}^{n-1} \frac{c_i}{x-L_i} \equiv 0 \mod g(x) \right. \right\}</math>

Код определён, как пара <math>(g,L)</math> с минимальной длиной <math>2t+1</math>, таким образом, он может исправить <math>t=\left\lfloor \frac{(2t+1)-1}{2} \right\rfloor</math> ошибок в слове длиной <math>n-mt</math>, используя ключи размером <math>n</math>. Он также обладает удобной Шаблон:Iw <math>H</math> в виде:

<math>

H=VD=\begin{pmatrix} 1 & 1 & 1 & \cdots & 1\\ L_0^1 & L_1^1 & L_2^1 & \cdots & L_{n-1}^1\\ L_0^2 & L_1^2 & L_2^2 & \cdots & L_{n-1}^2\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ L_0^{t-1} & L_1^{t-1} & L_2^{t-1} & \cdots & L_{n-1}^{t-1} \end{pmatrix} \begin{pmatrix} \frac{1}{g(L_0)} & & & & \\

& \frac{1}{g(L_1)} & & & \\
& & \frac{1}{g(L_2)} & & \\
& & & \ddots & \\
& & & & \frac{1}{g(L_{n-1})}

\end{pmatrix} </math>

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

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

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

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

Алгоритм Паттерсона преобразует синдром в вектор ошибок. Предполагается, что синдром двоичного слова <math>c=(c_0,\dots,c_{n-1})</math> примет вид:

<math>s(x) \equiv \sum_{i=0}^{n-1} \frac{c_i}{x - L_i} \mod g(x)</math>

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

Далее алгоритм производит расчёт <math>v(x) \equiv \sqrt{s(x)^{-1}-x} \mod g(x)</math>. Это не удается, когда <math>s(x) \equiv 0</math>, но это тот случай, когда входное слово является ключом, поэтому исправление ошибок не требуется.

Использованием расширенного алгоритма Евклида <math>v(x)</math> сводится к многочленам <math>a(x)</math> и <math>b(x)</math>, так, что <math>a(x) \equiv b(x)\cdot v(x) \mod g(x)</math>, при этом <math>\deg(a)\leqslant\lfloor t/2 \rfloor</math> и <math>\deg(b)\leqslant\lfloor (t-1)/2 \rfloor</math>.

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

Если исходный ключ был декодирован и <math>e=(e_0,e_1,\dots,e_{n-1})</math> — двоичный вектор ошибок, то:

<math>\sigma(x) = \prod_{i=0}^{n-1} e_i(x-L_i) </math>.

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

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

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

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

Примечания

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

Литература

Шаблон:Rq