Voorbeelden
Hier volgt eerst een algemeen voorbeeld en daarna volgen enkele voorbeelden met kleine getallen om m.b.v. het algoritme een DLP op te lossen. In de praktijk rekent men uiteraard met veel grotere getallen om de aanvallen van krakers af te slaan.
Stel we willen oplossen h = n·g, met h en g bekend en n een positief geheel getal kleiner dan 100. We kunnen dan voor n = 0, 1, 2, ... gaan rekenen hoe groot n·g is en dat vergelijken met h. In het slechtste geval zijn we pas klaar in 100 stappen(als n = 99); gemiddeld duurt het 50 stappen. We kunnen n echter zien als het getal ab, waarbij a de tientallen voorstelt en b de eenheden, m.a.w. n = 10a + b. In plaats van n te vinden, kunnen we a en b vinden. We schrijven het probleem op als h = (10a + b)g ofwel h - bg = 10ag. We kunnen nu het linkerlid uit gaan rekenen voor alle mogelijke waarden van b. Dit zijn de waarden 0 t/m 9. Dit zijn de zogenaamde baby-steps. We weten dat één van deze waarden van b degene is die we zoeken. We slaan alle uitkomsten van het linkerlid op in een tabel. Daarna gaan we het rechterlid uitrekenen voor verschillende waarden van a. Dit zijn ook de waarden 0 t/m 9 en één ervan is de juiste, die samen met de juiste b de oplossing geeft voor n. De juiste a maakt van h - bg = 10ag een ware bewering. We moeten dus bij elke waarde van a het rechterlid berekenen en kijken of de uitkomst in de tabel staat. Als dat zo is, dan zijn we klaar en weten we welke a en b we moeten hebben om n = 10a + b te vinden. Hierin zien we de snelheid van het algoritme. Het is in gemiddeld 1,5√n stappen klaar. In het slechtste geval zijn 2√n nodig.
Gegeven 2n = 28 (mod 37). Bereken n. Aanpak: We maken eerst een tabel voor de baby-steps. We kiezen m = 6 (ordegrootte √36). We laten j dus lopen vanaf 0 t/m 6.
j |
1 |
2 |
3 |
4 |
5 |
6 |
2 j |
2 |
4 |
8 |
16 |
32 |
27 |
We berekenen 2 − 6 = 11 (mod 37) en maken voor de giant-steps:
i |
0 |
1 |
2 |
3 |
4 |
5 |
2 − 6 i · 2 n = 28 · 2 − 6 i |
28 |
12 |
21 |
9 |
25 |
16 |
We zien in de tweede tabel bij i = 5 voor het eerst een waarde die ook in de eerste tabel staat en concluderen: 24 = 2 n·2 − 30. Hier is - 30 = - 6·5. We zijn nu in staat n te berekenen: n = mi + j = 6·5 + 4 = 34. Bij gemiddeld aantal stappen 1,5√37 hadden we 1,5·6 = 15 nodig gehad.
6 voor de baby-steps en ongeveer 3 voor de giant-steps. Het werden er 5 voor de giant-steps
Gegeven is 6 n = 7531 (mod 8101). Bereken n. Aanpak: We maken eerst een tabel voor de baby-steps. We kiezen m = 90 (ordegrootte √8101). We laten j lopen vanaf 0 t/m 90.
j |
1 |
2 |
3 |
4 |
5 |
6 |
... |
28 |
29 |
... |
90 |
2 j |
6 |
36 |
216 |
1296 |
7776 |
6151 |
... |
1144 |
6864 |
... |
7997 |
We berekenen 6 − 90 = 6621 (mod 8101)
en maken voor de giant-steps: