Indexcalculusalgoritme

Uit testwiki
Naar navigatie springen Naar zoeken springen

In de groepentheorie, een onderdeel van de wiskunde, is het indexcalculusalgoritme een algoritme om voor sommige groepen de discrete logaritme, h = gn, op te lossen, waar g en h elementen van groep, G, zijn. Een discrete logaritme is gedefinieerd op een eindige groep G. Voor g als voortbrenger van G en h G wordt naar de oplossing van h=gn gevraagd.

Het algoritme

Het indexcalculusalgoritme kan onder andere toegepast worden op eindige lichamen.

De methode voor priemlichamen 𝔽p en binaire lichamen 𝔽2m kan als volgt beschreven worden:

In priemlichamen

g is een subgroep van 𝔽p*, h g
Voor welke n geldt h=gn (mod p)

Het algoritme maakt gebruik van een factorbasis van een aantal kleine priemgetallen, B={ (-1), 2, 3, 5, 7,..., r}

Stap 1:
Zoek een aantal elementen van g die de eigenschap hebben dat ze te ontbinden zijn in priemfactoren uit de verzameling B.
Die groepselementen schrijven we als gri=(1)e1p2e2pkek

Stap 2:
Neem aan beide zijden de logaritme. Zo ontstaat een stelsel van lineaire vergelijkingen waaruit de discrete logaritmen van de gebruikte priemgetallen op te lossen zijn.

Stap 3:
Zoek vervolgens naar een element gi zodat h gi te ontbinden is met priemfactoren uit B.
h (g ri) = (-1) e1 p2 e2 ... pk ek
Door aan beide zijden de logaritme te nemen volgt de waarde van n.
Met behulp van onderstaand voorbeeld zijn de drie stappen van het algoritme uitgewerkt.

In binaire lichamen

De elementen van het eindige lichaam 𝔽2m worden weergegeven als veeltermen in 𝔽2[x] met een graad die ten hoogste ( m-1) is. De operatie is vermenigvuldigen modulo een vastgestelde veelterm van de graad n, f(x) in 𝔽2[x], die niet te ontbinden is.
Kies voor factorbasis B elementen uit de verzameling van alle niet te ontbinden veeltermen in 𝔽2[x] met als graad niet meer dan een tevoren vastgestelde bovengrens.

Stap 1:
Zoek veeltermen gk mod f(x), met g als voortbrenger van 𝔽2m die een product zijn van veeltermen uit B.

Stap 2:
Precies als bij priemlichamen zijn de logaritmen van de veeltermen te vinden door een stelsel vergelijkingen op te lossen.

Stap 3: Zoek vervolgens naar een veelterm gi zodat h gi te ontbinden is met veeltermen uit B.
Door aan beide zijden de logaritme te nemen volgt de waarde van n.

Voorbeelden

In priemlichamen

We gaan uit van 𝔽2003*= 5 met p=2003.
We kiezen nu h = 543 uit die groep en willen n oplossen uit h = 5n mod 2003.

Stap 1:
Neem B = {(-1), 2, 3, 5, 7, 11, 13, 19}. Dit is een kleine factorbasis.
Het nadeel daarvan is dat je langer moet zoeken naar getallen die daarmee te ontbinden zijn, het voordeel is dat het op te lossen stelsel beperkt van omvang is.
We kiezen nu willekeurig getallen uit 5 en ontbinden die in priemgetallen. Alleen de getallen die m.b.v.B te ontbinden zijn kunnen we gebruiken.

964 = 22 2411
zullen we niet gebruiken.

Na een aantal keer proberen hebben we:

537=23131191537=(1)13351998=2171191521=295108=(1)171132

Elk priemgetral komt minstens twee keer voor. De eerste vergelijking schrijven we nu als volgt op:

5log 537 = 5log (23 131 191) = 5log 23 + 5log13 + 5log19
37 = 3 5log2 + 1 5log13 + 1 5log19

Voor 108 geldt:
108 = 1 5log(-1) + 1 5log7 + 2 5log13

Omdat 52002 = 1, en dus (51001) 2 = 1, moet gelden dat 51001 = -1 (mod 2002). Elk element van 5 is immers uniek.
Daardoor weten we dat
108 = 1001 + 1 5log7 + 2 5log13

Stap 2:
We willen nu de waarde van de gebruikte logaritmen weten. Die vinden we door gebruik te maken van de volgende matrix.

5log25log75log135log193011371101199801201109900021

Deel in de onderste rij door 9.
21 representeert een getal (21 + k 2002)
Voor k = 6 levert dat 12033 en dat is deelbaar door 9.
Nu weten we dat
5log2 = 1337 (mod 2002).

5log25log75log135log1900113731337=30010119981337=6610120110910001337

5log75log135log19011301016611201109

5log75log135log190113011066130=6311201109

5log75log135log19011301106313001109+2631=369

Nu volgt 5log7 = 123 ( mod 2002)
5log13 = 123 - 631 + 1494 ( mod 2002)
5log19 = 30 - 1494 = 538 ( mod 2002)

Stap 3:
We zoeken nu naar een geschikte ontbinding van getallen van de volgende vorm: 543 5i
Na een paar keer proberen hebben we

543 5433 = (-1) 22 192

Daaruit volgt de vergelijking

5log 543 5433 = 5log(-1) + 2 5log2 + 2 5log19
5log 543 +433 = 1001 + 2 1337 + 2 538

Hieruit volgt 5log 543 = 314,
de oplossing: n = 314

In binaire lichamen

We gaan uit van 𝔽27 mod f(x) = x7 + x + 1
De elementen van 𝔽27 zijn alle veeltermen in 𝔽2 van ten hoogste de graad 6. De operatie is vermenigvuldigen mod f(x). De orde van 𝔽27 is 128 - 1 = 127
De veelterm g = x is voortbrenger van 𝔽27
We kiezen nu h = x4 + x3 +x2 + x + 1 uit die groep en willen n oplossen uit
x4 + x3 +x2 + x + 1 =xn mod f(x)

Stap 1:
Kies als factorbasis de verzameling van alle niet te ontbinden veeltermen in 𝔽2[x] van ten hoogste de graad 3.
B = { x, x + 1, x2 + x + 1, x3 + x + 1, x3 + x2 + 1}
Zoek nu veeltermen die te ontbinden zijn met veeltermen uit B. Hieronder staan er vijf waarbij dat lukt.

x18modf(x)=x6+x4=x4(x+1)2x105modf(x)=x6+x5+x4+x=x(x+1)2(x3+x2+1)x72modf(x)=x6+x5+x3+x2=x2(x+1)2(x2+x+1)x45modf(x)=x5+x2+x+1=(x+1)2(x3+x+1)x121modf(x)=x6+x5+x4+x3+x2+x+1=(x3+x+1)(x3+x2+1)

Stap 2:
We willen nu de waarde van de gebruikte logaritmen weten.
stel

p1=xlogxp2=xlog(x+1)p3=xlog(x2+x+1)p4=xlog(x3+x+1)p5=xlog(x3+x2+1)

Dit geeft

18=4p1+2p2mod127105=p1+2p2+p5mod12772=2p1+2p2+p3mod12745=2p2+p4mod127121=p4+p5mod127

Omdat p1 = 1 is dit te vereenvoudigen tot

14=2p2mod127104=2p2+p5mod12770=2p2+p3mod12745=2p2+p4mod127121=p4+p5mod127

Hieruit volgt p2 = 7, dus p5 = 90, p3 = 56 en p4 = 31

Stap 3:
We zoeken nu naar een geschikte ontbinding van veeltermen van de vorm h xi mod f(x) die te ontbinden is met veeltermen uit B.
Dat lukt voor i = 66
(x4 + x3 + x2 + x + 1) x66 mod f(x) = x5 + x3 + x = x(x2 + x + 1) 2
Dus xlog(x4 + x3 + x2 + x + 1) = ( p1 + 2 p3 -66) ( mod 127) = 47
de oplossing: n = 47

Zie ook

Referenties