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:

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

Definitie

Een definitie van de goppa-code Γ, is nu

Γ=Γ(a1,a2,…,an,g)={c∈𝔾𝔽(2m):∑icihx−aimodg=0}

De polynomen hx−a1modg,hx−a2modg,…,hx−anmodg, 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 |x3x5−x|=|x3||x5−x|=2325=2−2.

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 c≈w is zodat er in het codewoord hoogstens t maal een 1 met een 0 verwisseld is, of andersom.

  • Bereken ∑iwix−ai 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 1∑iwix−ai−x 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 (x−ai). 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.