Goppa-code

Een binaire goppa-code, doorgaans alleen goppa-code genoemd, is een foutcorrigerende code. De code is genoemd naar de Russische wiskundige Velerii Denisovich Goppa. In McEliece-cryptografie wordt bijvoorbeeld gebruikgemaakt van binaire goppa-codes. Een binaire goppa-code is niet hetzelfde als een algebraïsche goppa-code.

Voorwaardes

Er zijn verschillende definities te geven voor een goppa-code. Hier wordt toegewerkt naar een polynomiale definitie. Voordat we dat kunnen doen zijn er enkele parameters nodig. De volgende gegevens zijn gebruikelijk voor een goppa-code:

  • Kies n = 2 m {\displaystyle n=2^{m}} met m { 10 , 11 , 12 } {\displaystyle m\in \{10,11,12\}} .
  • De code is gedefinieerd over het lichaam G F ( n ) {\displaystyle \mathbb {GF} (n)} . Noem de rij afzonderlijke elementen uit dat lichaam, a 1 , a 2 , , a n {\displaystyle a_{1},a_{2},\dots ,a_{n}} lexicografisch geordend.
  • Voor het aantal fouten t {\displaystyle t} die gecorrigeerd kunnen worden door de code, kiezen we 2 t 2 m 1 m {\displaystyle 2\leq t\leq {\frac {2^{m}-1}{m}}} . Voor m = 11 {\displaystyle m=11} is bijvoorbeeld t = 32 , t = 70 {\displaystyle t=32,t=70} of t = 100 {\displaystyle t=100} .
  • Zoek een irreducibele monische polynoom g G F ( 2 m ) [ x ] {\displaystyle g\in \mathbb {GF} (2^{m})[x]} van graad t {\displaystyle t} .
  • Laat h = i ( x a i ) G F ( n ) [ x ] {\displaystyle h=\prod _{i}(x-a_{i})\in \mathbb {GF} (n)[x]} .

In dit geval geldt dat h = x n x G F ( 2 m ) [ x ] {\displaystyle h=x^{n}-x\in \mathbb {GF} (2^{m})[x]} .

Definitie

Een definitie van de goppa-code Γ {\displaystyle \Gamma } , is nu

Γ = Γ ( a 1 , a 2 , , a n , g ) = { c G F ( 2 m ) : i c i h x a i mod g = 0 } {\displaystyle {\Gamma }={\Gamma }(a_{1},a_{2},\ldots ,a_{n},g)=\{c\in \mathbb {GF} (2^{m}):\sum _{i}c_{i}{\frac {h}{x-a_{i}}}\mod g=0\}}

De polynomen h x a 1 mod g , h x a 2 mod g , , h x a n mod g {\displaystyle {\frac {h}{x-a_{1}}}{\bmod {g}},{\frac {h}{x-a_{2}}}{\bmod {g}},\ldots ,{\frac {h}{x-a_{n}}}{\bmod {g}}} , kunnen gezien worden als vectoren over G F ( 2 ) {\displaystyle \mathbb {GF} (2)} .

Ze vormen een pariteitscontrole-matrix voor de code Γ {\displaystyle \Gamma } .

Algoritme van Patterson

In 1975 heeft Patterson een algoritme ontwikkeld om in polynomiale tijd t {\displaystyle t} fouten te kunnen corrigeren uit de goppa-code.

Voordat het algoritme weergegeven kan worden, is de definitie nodig van de norm van een polynoom.

Norm van een polynoom

Voor een polynoom ϕ G F ( 2 m ) [ x ] {\displaystyle \phi \in \mathbb {GF} (2^{m})[x]} geldt dat de norm | ϕ | = 2 deg ( ϕ ) {\displaystyle |\phi |=2^{\deg(\phi )}} , met deg ( ϕ ) {\displaystyle \deg(\phi )} de graad van ϕ {\displaystyle \phi } .

Bij rationale functies geldt | ϕ ψ | = | ϕ | | ψ | {\displaystyle |{\frac {\phi }{\psi }}|={\frac {|\phi |}{|\psi |}}} . Bijvoorbeeld | x 3 x 5 x | = | x 3 | | x 5 x | = 2 3 2 5 = 2 2 {\displaystyle |{\frac {x^{3}}{x^{5}-x}}|={\frac {|x^{3}|}{|x^{5}-x|}}={\frac {2^{3}}{2^{5}}}=2^{-2}} .

Algoritme

Het doel is om maximaal t {\displaystyle t} fouten te verbeteren uit eengoppa-code Γ {\displaystyle \Gamma } . We starten met een woord w G F n ( 2 ) {\displaystyle w\in \mathbb {GF} ^{n}(2)} , met maximaal t {\displaystyle t} fouten. Dat betekent dat er een coodewoord c w {\displaystyle c\approx w} is zodat er in het codewoord hoogstens t {\displaystyle t} maal een 1 met een 0 verwisseld is, of andersom.

  • Bereken i w i x a i {\displaystyle {\sum _{i}{\frac {w_{i}}{x-a_{i}}}}} over het lichaam G F ( 2 m ) [ x ] / ( g ) {\displaystyle \mathbb {GF} (2^{m})[x]/(g)} . Als deze som nul is in het lichaam, dan zijn er blijkbaar geen fouten in de code. Het algoritme geeft dan output w {\displaystyle w} .
  • Bereken de wortel van 1 i w i x a i x {\displaystyle {\frac {1}{\sum _{i}{\frac {w_{i}}{x-a_{i}}}}}-x} over het lichaam G F ( 2 m ) [ x ] / ( g ) {\displaystyle \mathbb {GF} (2^{m})[x]/(g)} .
  • Noem deze berekende wortel s {\displaystyle s} en bekijk deze in het lichaam s G F ( 2 m ) [ x ] {\displaystyle s\in \mathbb {GF} (2^{m})[x]} . De graad van s {\displaystyle s} is kleiner dan t {\displaystyle t} .
  • De vectoren ( s , 1 ) {\displaystyle (s,1)} en ( g , 0 ) {\displaystyle (g,0)} genereren een rooster L G F ( 2 m ) [ x ] 2 {\displaystyle L\subseteq \mathbb {GF} (2^{m})[x]^{2}} .
De norm | ( α , β ) | {\displaystyle |(\alpha ,\beta )|} van een vector ( α , β ) G F ( 2 m ) [ x ] 2 {\displaystyle (\alpha ,\beta )\in \mathbb {GF} (2^{m})[x]^{2}} is per definitie gelijk aan de norm van de polynoom α 2 + x β 2 {\displaystyle \alpha ^{2}+x\beta ^{2}} .
Zo is de lengte van de vector ( g , 0 ) {\displaystyle (g,0)} gelijk aan | ( g , 0 ) | = | g 2 | = 2 2 t {\displaystyle |(g,0)|=|g^{2}|=2^{2t}} .
  • Vind met behulp van basisreductie een basis ( α 0 , β 0 ) {\displaystyle (\alpha _{0},\beta _{0})} van minimale lengte. Deze zal kleiner of gelijk zijn aan 2 t {\displaystyle 2^{t}} .
  • Bereken ϵ = α 0 2 + x β 0 2 {\displaystyle \epsilon =\alpha _{0}^{2}+x\beta _{0}^{2}}
  • Deel door de coëfficiënt van de hoogste macht van x, zodat ϵ {\displaystyle \epsilon } monisch wordt.
  • Ontbindt ϵ {\displaystyle \epsilon } in lineaire factoren van de vorm ( x a i ) {\displaystyle (x-a_{i})} . Dit zullen t {\displaystyle t} factoren zijn.
  • Output c {\displaystyle c} , is de gecorrigeerd code w {\displaystyle w} , met een correctie op de plaatsen i {\displaystyle i} , waar ϵ ( a i ) = 0 {\displaystyle \epsilon (a_{i})=0} .

Voor een uitgebreid voorbeeld van dit algoritme wordt verwezen naar het artikel van Bernstein.[1]

Referenties
  1. Bernstein, Daniel J (2008). List decoding for binary Goppa codes, University of Illinois, Chicago.