Goppa-code

Uit testwiki
Naar navigatie springen Naar zoeken springen

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=2m met m{10,11,12}.
  • De code is gedefinieerd over het lichaam 𝔾𝔽(n). Noem de rij afzonderlijke elementen uit dat lichaam, a1,a2,,an lexicografisch geordend.
  • Voor het aantal fouten t die gecorrigeerd kunnen worden door de code, kiezen we 2t2m1m. Voor m=11 is bijvoorbeeld t=32,t=70 of t=100.
  • Zoek een irreducibele monische polynoom g𝔾𝔽(2m)[x] van graad t.
  • Laat h=i(xai)𝔾𝔽(n)[x].

In dit geval geldt dat h=xnx𝔾𝔽(2m)[x].

Definitie

Een definitie van de goppa-code Γ, is nu

Γ=Γ(a1,a2,,an,g)={c𝔾𝔽(2m):icihxaimodg=0}

De polynomen hxa1modg,hxa2modg,,hxanmodg, kunnen gezien worden als vectoren over 𝔾𝔽(2).

Ze vormen een pariteitscontrole-matrix voor de code Γ.

Algoritme van Patterson

In 1975 heeft Patterson een algoritme ontwikkeld om in polynomiale tijd 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 ϕ𝔾𝔽(2m)[x] geldt dat de norm |ϕ|=2deg(ϕ), met deg(ϕ) de graad van ϕ.

Bij rationale functies geldt |ϕψ|=|ϕ||ψ|. Bijvoorbeeld |x3x5x|=|x3||x5x|=2325=22.

Algoritme

Het doel is om maximaal t fouten te verbeteren uit eengoppa-code Γ. We starten met een woord w𝔾𝔽n(2), met maximaal t fouten. Dat betekent dat er een coodewoord cw is zodat er in het codewoord hoogstens t maal een 1 met een 0 verwisseld is, of andersom.

  • Bereken iwixai over het lichaam 𝔾𝔽(2m)[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.
  • Bereken de wortel van 1iwixaix over het lichaam 𝔾𝔽(2m)[x]/(g).
  • Noem deze berekende wortel s en bekijk deze in het lichaam s𝔾𝔽(2m)[x]. De graad van s is kleiner dan t.
  • De vectoren (s,1) en (g,0) genereren een rooster L𝔾𝔽(2m)[x]2.
De norm |(α,β)| van een vector (α,β)𝔾𝔽(2m)[x]2 is per definitie gelijk aan de norm van de polynoom α2+xβ2.
Zo is de lengte van de vector (g,0) gelijk aan |(g,0)|=|g2|=22t.
  • Vind met behulp van basisreductie een basis (α0,β0) van minimale lengte. Deze zal kleiner of gelijk zijn aan 2t.
  • Bereken ϵ=α02+xβ02
  • Deel door de coëfficiënt van de hoogste macht van x, zodat ϵ monisch wordt.
  • Ontbindt ϵ in lineaire factoren van de vorm (xai). Dit zullen t factoren zijn.
  • Output c, is de gecorrigeerd code w, met een correctie op de plaatsen i, waar ϵ(ai)=0.

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

Sjabloon:Appendix