MODULOREKENEN EN CRYPTOGRAFIE 1. Inleiding 1.1

advertisement
MODULOREKENEN EN CRYPTOGRAFIE
1. Inleiding
1.1. Oorsprong. Het woord cryptografie stamt uit het Grieks en betekent
‘geheimschrift’ (κρυπτ óς = kryptós = verborgen; γράφω = gráfo = schrijven).
Het behoeft geen betoog dat geheimhouding van berichten van alle tijden en alle
werelden is, de ingebakken kleine trekjes van de mens indachtig. De wedijver tussen
codemakers en codebrekers is al eeuwen aan de gang, en heeft in verscheidene
situaties de loop van de geschiedenis bepaald.
Aanvankelijk waren de gebruikte methoden niet meer dan spitsvondigheden, die
te doorzichtig of te weinig praktisch waren om een lang leven beschoren te zijn.
Zo maakte de Griekse geschiedschrijver Herodotos melding van een slaaf die een
boodschap op het kaal geschoren hoofd getatoeëerd kreeg, om vervolgens met een
vers aangegroeid kapsel vijandig gebied te doorkruisen.
Later ontwikkelden de Grieken meer systematische manieren om berichten in
geheimschrift te zetten. De bekendste daarvan maakt gebruik van een scytale.
Dat is een cilindrische stok waarrond een strook perkament kan worden gewikkeld.
Door horizontaal op het gewikkelde perkament te schrijven en het perkament daarna
Figuur 1. Een scytale.
terug af te wikkelen, verkrijgt men de tekst in geheimschrift. De ontvanger hoeft
dan enkel op zijn beurt de perkamentstrook rond een scytale van dezelfde diameter
te wikkelen om het originele bericht te kunnen lezen.
Dit is het startpunt van een beklijvende geschiedenis, doorspekt met veel smeuı̈ge
details en intriges, maar ook met veel boeiende wiskunde. We gebruiken de volgende
terminologie.
1.2. Terminologie. Een systematische manier om berichten in geheime code te
zetten noemen we een cryptosysteem of een cijfer. Het omzetten van een bericht
naar geheimschrift noemen we vercijferen. Het omzetten van geheime code naar
een leesbaar bericht noemen we ontcijferen.
1.3. Het substitutiecijfer. Historisch gezien is het substitutiecijfer het eerste
cryptosysteem dat belangrijk bleek voor de ontwikkeling van de moderne
cryptografie. In wezen is het van de hand van Julius Caesar: om met zijn generaals
1
2
MODULOREKENEN EN CRYPTOGRAFIE
te communiceren verving hij elke letter door de derde daaropvolgende letter van
het alfabet,
A → D, B → E, C → F, . . . , W → Z, X → A, Y → B, Z → C.
Dus
ALEA JACTA EST wordt DOHD MDFWD HVW.
Meer algemeen kan men de letters van het alfabet in eender welke volgorde zetten,
bijvoorbeeld
(1.1)
RBDKOMQNAYUEHXZCJLPVSITFWG.
Een bericht wordt dan in code gezet door systematisch A door de eerste letter uit die
volgorde te vervangen, B door de tweede letter, C door de derde letter, enzovoort.
Op basis van volgorde (1.1) wordt
ALEA JACTA EST nu REOR YRDVR OPV.
Door de omgekeerde substitutie toe te passen kan de ontvanger het bericht terug
leesbaar maken.
Het ‘moderne’ aan het substitutiecijfer is dat er een duidelijk onderscheid wordt
gemaakt tussen het systeem zelf (substitutie) en een geheim extra ingrediënt (de
volgorde van de letters van het alfabet). Een naı̈eve vijand die een vercijferd
bericht onderschept moet, indien hij al weet dat het bericht met behulp van
substitutie werd vercijferd, alle mogelijke lettervolgordes uitproberen. Dat zijn
er 26! = 403291461126605635584000000 ≈ 4 · 1026 . Stel dat het uitproberen van
één lettervolgorde een halve minuut duurt, dan zou dit hem ongeveer 38 · 1019 jaar
kosten. Ter vergelijking: de leeftijd van het heelal is ongeveer 14 · 109 jaar.
Dat is een belangrijk verschil met de Griekse scytale. Indien de vijand weet dat
het onderschepte bericht met een scytale werd vercijferd, hoeft hij maar een heel
beperkt aantal mogelijkheden af te gaan.
Oefening 1.3.1. De zin
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
telt alle letters van het alfabet minstens één keer en heeft dus 26! ≈ 4·1026 mogelijke
vercijferingen onder het substitutiecijfer. Wat is het aantal mogelijke vercijferingen
met behulp van een scytale? Hierbij beschouwen we de spaties ook als karakters.
1.4. Sleutels. In wat volgt zullen we er altijd van uitgaan dat het gebruikte
cryptosysteem door vriend en vijand gekend is: dit heet het principe van Kerckhoffs,
genoemd naar de 19de-eeuwse Nederlandse cryptograaf Auguste Kerckhoffs. Een
geheime sleutel is een kort ingrediënt dat als extra input wordt gebruikt en dat
enkel door de zender en de ontvanger gekend is. De sleutelruimte is de verzameling
van alle bruikbare geheime sleutels.
1.5. Veiligheid. Een cryptosysteem wordt veilig beschouwd als er voor een
aanvaller niet veel beter op zit dan alle sleutels uit de sleutelruimte één
voor één uitproberen.
De sleutelruimte van het substitutiecijfer is de
verzameling permutaties van het alfabet. Bij hedendaagse cryptosystemen worden
sleutelruimtes van om en bij de 280 sleutels aangeraden (ter vergelijking: 26! ≈ 288 ).
Meer en meer wordt 2128 de nieuwe standaard, al zit daar heel veel veiligheidsmarge
op.
MODULOREKENEN EN CRYPTOGRAFIE
3
1.6. Het substitutiecijfer gekraakt. Hierboven hadden we het over een naı̈eve
vijand, die miljarden keer de leeftijd van het heelal zou nodig hebben om het
substitutiecijfer te kraken. Een iets slimmere vijand kan het echter veel handiger
aanpakken, waardoor het substitutiecijfer vandaag de dag als flagrant onveilig wordt
beschouwd.
Dat heeft te maken met de ongelijke frequenties waarmee de letters van het
alfabet in de Nederlandse taal (of in eender welke populaire taal) voorkomen. Bijna
20 % van alle letters in een voldoende lange doorsnee Nederlandse tekst zijn E. Met
een aandeel van zo’n 10 % komt de letter N op de tweede plaats, gevolgd door
ongeveer 8 % A’s. Dat betekent dat, wanneer we een stuk geheimschrift in handen
hebben, de letter die het vaakst voorkomt veel kans heeft om de vercijfering van
de letter E te zijn, de letter die het op één na vaakst voorkomt is met een redelijke
kans een vercijferde N, en zo verder. Op die manier herleidt het ontcijferwerk
zich essentieel tot een spelletje Rad van Fortuin. We noemen deze methode
frequentieanalyse. Ze werd reeds in de 9de eeuw na Christus beschreven door de
Arabische wetenschapper Al-Kindi. Hoe langer de te ontcijferen tekst is, hoe beter
de statistiek zijn werk doet en hoe eenvoudiger het ontcijferwerk wordt.
Figuur 2. Letterfrequenties in het Nederlands (gebaseerd op een
steekproef van 60696 letters uit de krant De Standaard van 26 april
2011).
We geven een voorbeeld. Veronderstel dat onze geheime diensten het volgende
bericht onderschepten.
PDJFRPPX QTREGK TQ CPLD KGEGK PPK CGM XPJMGGL BX NPL HABNGKH
WRTKNGK QAKMJMAXXGK WBZ QG CGWWGK
We zien dat de letter G twaalf keer voorkomt, de letter K tien keer en de letter P acht
keer (en dat deze letters daarmee de kroon spannen). We gokken daarom dat dit de
vercijferingen zijn van respectievelijk E, N en A en krijgen de volgende gedeeltelijke
kandidaat-ontcijfering.
A....AA. ....EN .. .A.. NE.EN AAN .E. .A..EE. .. .A. ....EN.
...N.EN ..N......EN ... .E .E..EN
4
MODULOREKENEN EN CRYPTOGRAFIE
Een logische gok voor het woord na AAN is HET (waarom kan EEN niet?), wat zou
betekenen dat de letters C en M de respectievelijke vercijferingen zijn van de letters
H en T. Invullen geeft:
A....AA. ....EN .. HA.. NE.EN AAN HET .A.TEE. .. .A. ....EN.
...N.EN ..NT.T...EN ... .E HE..EN
We laten het resterende puzzelwerk aan de lezer over. Ondanks het feit dat een
gokje af en toe verkeerd kan uitdraaien, zou het duidelijk moeten zijn dat het
ontcijferen van de tekst ons absoluut geen 38 · 1019 jaar zal kosten.
1.7. Inhoud van de studiebundel. In het vervolg van deze tekst zullen
we enkele meer recente en meer geavanceerde cryptosystemen onder de loep
nemen. Deze systemen maken vaak gebruik van fundamentele resultaten uit de
wiskunde, meer bepaald uit de getaltheorie. Een belangrijk ingrediënt is het
zogeheten modulorekenen; Paragraaf 2 van de bundel is daaraan gewijd. In de
daaropvolgende paragrafen bespreken we verschillende cryptografische methoden
die op het modulorekenen zijn gebaseerd.
1.8. Over de bewijzen in de studiebundel. Voor verschillende resultaten uit
de getaltheorie wordt in deze bundel ook een bewijs gegeven. Dit bewijs kan extra
inzicht verschaffen in de theorie, maar het is niet strikt noodzakelijk om de rest van
de bundel te begrijpen of de opgaven op te lossen. De bewijzen zijn vooral bestemd
voor de leerlingen die dieper op de theorie willen ingaan. De bewijzen van Stelling
2.4.2 en Propositie 2.7.1 zijn wel belangrijk omdat ze praktische methoden bevatten
om bepaalde getallen te gaan berekenen. Deze methoden worden geı̈llustreerd in
Voorbeelden 2.4.3 en 2.7.2.
1.9. Enkele basisbegrippen. Zij x en y gehele getallen. Een deler van x is een
geheel getal d zodat er een geheel getal q bestaat met x = dq. Als d een deler is
van x, dan zal d ook een deler zijn van van ax, voor alle gehele getallen a. Als d
een deler is van x en y, dan is d ook een deler van ax + by, voor alle gehele getallen
a en b. Als e een deler is van d en d een deler van x, dan is e ook een deler van x.
Veronderstel nu dat x en y niet beide nul zijn. De grootste gemene deler ggd(x, y)
is het grootste natuurlijk getal dat zowel x als y deelt. We noemen x en y relatief
priem wanneer hun grootste gemene deler gelijk is aan 1. Dat betekent dat −1 en
1 de enige gehele getallen zijn die zowel x als y delen.
Een priemgetal is een natuurlijk getal p > 1 zodat 1 en p de enige natuurlijke
delers zijn van p.
2. Modulorekenen
2.1. De wijzers van de klok. Modulorekenen doen we elke dag zonder er bij stil
te staan, in het bijzonder wanneer we rekenen met tijd. Stel dat het momenteel vijf
uur in de namiddag is. In Sydney is het acht uur later. Hoe laat is het daar op dit
moment?
Een kleine rekensom leert dat het in Sydney één uur in de ochtend is. Hoe zijn
we precies tot dit resultaat gekomen? We hebben bij vijf uur het tijdsverschil van
acht uur opgeteld; dat geeft dus 5 + 8 = 13. Omdat ons horloge de tijd opdeelt in
blokken van twaalf uur, trekken we 12 af van de waarde 13 zodat we een uitkomst
tussen 0 en 12 verkrijgen. Zo vinden we 13 − 12 = 1. We zeggen dat 5 + 8 congruent
MODULOREKENEN EN CRYPTOGRAFIE
5
is aan 1 modulo 12. We noteren dit door
5 + 8 ≡ 1 mod 12.
Zo’n uitdrukking heet een congruentie, en 12 noemen we de modulus van de
congruentie.
In Boston is het zes uur vroeger dan in Leuven. Op dit moment is het daar dus
elf uur in de voormiddag, want 5 − 6 = −1 en door bij −1 de waarde 12 op te tellen
vinden we 11. We zeggen daarom dat 5 − 6 congruent is aan 11 modulo 12.
Vaak werken we met congruenties met een andere modulus dan 12. Wanneer je
een digitaal horloge gebruikt met 24-uursnotatie, dan reken je met uren modulo 24.
Als het vandaag vrijdag is en je wil weten welke weekdag het over vier dagen zal
zijn, dan rekenen je modulo 7. Enzovoort...
2.2. Congruenties. We gieten deze observaties nu in een algemene definitie. In
het vervolg van deze tekst noteren we met M steeds een strikt positief geheel getal.
Definitie 2.2.1. Zij x en y gehele getallen. We zeggen dat x congruent is aan y
modulo M wanneer M het geheel getal x − y deelt. We noteren dit met
x≡y
mod M.
We noemen M de modulus van de congruentie.
De congruentierelatie ≡ heeft enkele interessante eigenschappen:
(1) elk geheel getal x is congruent aan zichzelf modulo M .
(2) als x ≡ y modulo M , dan zal ook y ≡ x modulo M , want als M het verschil
x − y deelt, dan deelt M ook y − x = −(x − y).
(3) als x ≡ y en y ≡ z modulo M , dan zal ook x ≡ z modulo M . Dit kan je
zelf bewijzen als oefening.
Voor elk geheel getal x noteren we met x de verzameling van alle gehele getallen
die congruent zijn aan x modulo M . Dat is dus de verzameling
x = {x, x − M, x + M, x − 2M, x + 2M, . . .}.
We noemen x de congruentieklasse van x modulo M . Elk element van de
congruentieklasse x heet een representant van x.
Bovenstaande eigenschappen van de congruentierelatie hebben de volgende
consequenties: alle elementen van x zijn congruent aan elkaar modulo M . Als
y een tweede geheel getal is, dan is x = y als en slechts als x en y congruent
zijn modulo M . In het andere geval zijn x en y disjunct (dat wil zeggen dat deze
verzamelingen een lege doorsnede hebben). Een geheel getal a is een representant
van x als en slechts als a = x.
Elke congruentieklasse x heeft precies één representant c in {0, . . . , M − 1};
als x positief is, dan is c de rest van x bij deling door M . Wanneer we een
congruentieklasse opschrijven, dan kiezen we als representant vaak dit element c.
Bijvoorbeeld: als M = 7, dan schrijven we meestal 2 in plaats van 16, en 5 in plaats
van −9.
De verzameling Z van gehele getallen is dus de unie van de congruentieklassen
0, 1, . . . , M − 1.
De verzameling van al deze congruentieklassen noteren we met
ZM = {0, 1, . . . , M − 1}.
6
MODULOREKENEN EN CRYPTOGRAFIE
Deze definitie lijkt nogal ingewikkeld: ZM is een verzameling waarvan de elementen
zelf verzamelingen zijn. Het is vaak handiger om ZM eenvoudigweg te beschouwen
als de verzameling die bestaat uit de getallen 0, 1, . . . , M − 1. De streep boven
deze getallen in de notatie voor de elementen van ZM duidt dan aan dat we op een
bijzondere manier met deze elementen moeten rekenen; dit wordt uitgelegd in de
volgende paragraaf.
Voorbeeld 2.2.2 (Congruenties op je bankkaart). Een geldig Belgisch
bankrekeningnummer bestaat uit een getal G van tien cijfers (met een streepje
na de eerste drie), plus een controlegetal van twee cijfers, bijvoorbeeld:
091 − 0122401 − 16.
Het controlegetal is het unieke element in {1, . . . , 97} dat congruent is aan G modulo
97. Het controlegetal is dus precies de rest van G bij deling door 97, tenzij deze
rest 0 is: in dat geval is het controlegetal 97. In bovenstaand voorbeeld is 16 de
rest van 910122401 bij deling door 97.
Het controlegetal wordt toegevoegd om na te gaan of een rekeningnummer
correct ingevoerd wordt, bijvoorbeeld als je een overschrijving wil uitvoeren. Als
je exact één cijfer verkeerd ingeeft, dan zal het controlegetal niet meer correct
zijn, zodat het systeem kan signaleren dat je een fout hebt gemaakt. Als je meer
dan één fout maakt, dan kan het wel toevallig gebeuren dat je opnieuw een geldig
rekeningnummer krijgt.
2.3. Rekenen met congruentieklassen.
Propositie 2.3.1. Beschouw gehele getallen x, x′ , y en y ′ . Veronderstel dat x ≡ x′
en y ≡ y ′ modulo M . Dan gelden de volgende eigenschappen:
(1) x + y ≡ x′ + y ′ modulo M ,
(2) x − y ≡ x′ − y ′ modulo M ,
(3) x · y ≡ x′ · y ′ modulo M .
Bewijs. We bewijzen enkel eigenschap (3), de andere kan je zelf aantonen als
oefening. We weten dat x − x′ en y − y ′ deelbaar zijn door M . Dat betekent dat
er gehele getallen a en b bestaan zodat x′ = x + aM en y ′ = y + bM . Door deze
gelijkheden te vermenigvuldigen vinden we dat
x′ y ′ = (x + aM )(y + bM ) = xy + (bx + ay + abM )M.
Dus x′ y ′ − xy is deelbaar door M , en dat betekent precies dat
x · y ≡ x′ · y ′
mod M.
Propositie 2.3.1 is erg belangrijk, omdat hij toelaat bewerkingen te definiëren op
congruentieklassen in plaats van op gehele getallen.
Definitie 2.3.2. We definiëren we bewerkingen +, − en · op de verzameling ZM
door
voor alle gehele getallen x en y.
x+y
x−y
= x + y,
= x − y,
x·y
= x · y,
MODULOREKENEN EN CRYPTOGRAFIE
7
Merk op dat deze definitie ondubbelzinnig is: als x′ en y ′ gehele getallen zijn
zodat x = x′ en y = y ′ , dan garandeert Propositie 2.3.1 dat
x + y = x′ + y ′ ,
x − y = x′ − y ′ ,
x · y = x′ · y ′ .
Het resultaat van de bewerkingen in Definitie 2.3.2 hangt dus niet af van de keuze
van de representanten x en y.
Meer concreet betekent dit dat we rekenen met elementen van
ZM = {0, 1, . . . , M − 1}
op de volgende manier: om de som, het verschil of het product van twee elementen
x en y van ZM te berekenen, voeren we de overeenkomstige bewerking uit op de
gehele getallen x en y; vervolgens tellen we bij het resultaat een geheel veelvoud
op van M zodat we een element z van {0, . . . , M − 1} bekomen. Het resultaat van
onze bewerking is dan het element z van ZM .
Voorbeeld 2.3.3. Veronderstel dat de modulus M gelijk is aan 6. Dan geldt
2 − 9 = −7 = 5. Het product 2 · 3 bereken je als volgt: 2 · 3 = 6 = 0. Als
we 122 · 6001 willen uitrekenen, dan hoeven we daarvoor niet eerst het product
122 · 6001 te bepalen. Het volstaat op te merken dat 122 = 2 en 6001 = 1 omdat
120 en 6000 deelbaar zijn door 6, zodat
122 · 6001 = 2 · 1 = 2.
Oefening 2.3.4. Bereken de volgende uitdrukkingen modulo 5:
2 + 3, 3 − 4, 2309 · 2011.
Onze bewerkingen op congruentieklassen hebben de volgende eigenschappen.
Propositie 2.3.5.
(1) Het element 0 is een neutraal element voor de optelling, en 1 is een neutraal
element voor de vermenigvuldiging: voor alle gehele getallen x geldt dat
x + 0 = 0 + x = x en x · 1 = 1 · x = x.
(2) Voor elk geheel getal x bestaat er een unieke congruentieklasse w zodat
x + w = w + x = 0, namelijk w = −x. We noteren deze congruentieklasse
ook met −x, de tegengestelde van x.
(3) De optelling van congruentieklassen is associatief en commutatief, dat wil
zeggen: x + (y + z) = (x + y) + z en x + y = y + x voor alle gehele getallen
x, y en z. De analoge eigenschappen gelden voor de vermenigvuldiging.
(4) De vermenigvuldiging van congruentieklassen is distributief te opzichte van
de optelling, dat wil zeggen:
x · (y + z) = x · y + x · z
voor alle gehele getallen x, y en z.
Al deze eigenschappen volgen onmiddellijk uit de overeenkomstige eigenschappen
voor de optelling en vermenigvuldiging van gehele getallen. Je zal bij berekeningen
met congruentieklassen deze eigenschappen waarschijnlijk spontaan toepassen
zonder er bij stil te staan.
Oefening 2.3.6. Toon aan dat een natuurlijk getal x deelbaar is door 9 als en
slechts als de som van de cijfers van x deelbaar is door 9. Hint: schrijf x als
x = c0 + c1 · 10 + . . . + cm · 10m
met c1 , . . . , cm in {0, . . . , 9}, en bereken de congruentieklasse van x modulo 9.
8
MODULOREKENEN EN CRYPTOGRAFIE
Oefening 2.3.7. Bij een “perfect shuffle” meng je twee helften van een spel kaarten
ritsgewijs door elkaar. Als je de kaarten bij aanvang nummert met 0, 1, . . . , 51, dan
liggen ze na zo’n perfect shuffle in de volgorde
0, 26, 1, 27, 2, 28, . . . , 25, 51.
Hoeveel “perfect shuffles” moet je minimaal uitvoeren opdat de kaarten weer op
dezelfde volgorde zouden liggen als in het begin? Hint: reken modulo 51.
2.4. Het algoritme van Euclides en de stelling van Bézout-Bachet.
Omstreeks 300 voor Christus schreef de beroemde Alexandrijnse wiskundige
Euclides in één van zijn Elementen een algoritme neer om de grootste gemene
deler van twee natuurlijke getallen te bepalen. We illustreren dit algoritme aan de
hand van een voorbeeld.
Voorbeeld 2.4.1. We gaan de grootste gemene deler bepalen van 34 en 14. We
voeren eerst de Euclidische deling (= gehele deling met rest) uit van 34 door 14:
34 = 2 · 14 + 6.
Hierbij is 2 het quotiënt van de deling en 6 de rest. We herhalen deze bewerking
met 14 en 6:
14 = 2 · 6 + 2.
Vervolgens delen we 6 door de nieuwe rest 2:
6 = 3 · 2.
Nu is de rest gelijk aan 0, met andere woorden: 2 is een deler van 6. Hieruit
kan je besluiten dat 2 (de laatste rest die we vonden verschillend van nul) de
grootste gemene deler is van 34 en 14; we zullen dit hieronder op een precieze
manier aantonen. Merk op dat het algoritme altijd eindigt na een eindig aantal
stappen: in elke stap wordt de rest strikt kleiner, zodat we uiteindelijk op 0 moeten
uitkomen.
Door het algoritme van Euclides nauwkeuriger te bestuderen, kunnen we een
nieuw resultaat bewijzen: de stelling van Bézout-Bachet. Deze stelling is van groot
belang voor de getaltheorie.
Stelling 2.4.2 (Bézout-Bachet). Als x en y twee natuurlijke getallen zijn, niet
beide nul, en als d de grootste gemene deler is van x en y, dan bestaan er gehele
getallen a en b zodat
ax + by = d.
Bewijs. We mogen veronderstellen dat x ≥ y (anders wisselen we x en y gewoon
om) en dat y verschillend is van 0 (anders is ggd(x, y) = x en valt er niets te
bewijzen). We stellen r0 = x en r1 = y.
Nu voeren we het algoritme van Euclides uit. Het resultaat is een lijst van
Euclidische delingen
r0 = q1 r1 + r2
r1 = q2 r2 + r3
..
.
rn
= qn+1 rn+1 + rn+2
waarbij de laatste rest rn+2 gelijk is aan 0.
MODULOREKENEN EN CRYPTOGRAFIE
9
Omdat rn = qn+1 rn+1 is rn+1 een deler van rn . Omdat
rn−1 = qn rn + rn+1
zal rn+1 bovendien ook een deler zijn van rn−1 . Door zo verder op te klimmen in
onze lijst, zien we uiteindelijk dat rn+1 ook r0 = x en r1 = y zal delen.
Door onze Euclidische delingen een beetje te herschrijven, vinden we de volgende
gelijkheden:
r2
r3
r4
..
.
= r0 − q1 r1
= r1 − q2 r2
= r2 − q3 r3
= −q2 r0 + (q1 q2 + 1)r1
= (q2 q3 + 1)r0 − (q1 + q1 q2 q3 + q3 )r1
rn+1
= rn−1 − qn rn
= ar0 + br1
met a en b gehele getallen. Uit de laatste gelijkheid volgt dat elke gemene deler van
r0 = x en r1 = y ook een deler moet zijn van rn+1 . We hebben hierboven al gezien
dat rn+1 zelf een deler is van x en y. Daarom kunnen we besluiten dat rn+1 gelijk
is aan de grootste gemene deler d van x en y. We vinden zo dat
d = ax + by,
en dit is precies wat we wilden bewijzen.
Het bewijs van de stelling geeft een methode om de grootste gemene deler d en de
coëfficiënten a en b expliciet te bepalen. We noemen deze methode het uitgebreide
algoritme van Euclides. In Voorbeeld 2.4.3 zie je het algoritme aan het werk in
een concrete situatie. De coëfficiënten a en b zijn niet uniek: alle gehele getallen
a′ = a + ky/d en b′ = b − kx/d, met k ∈ Z, voldoen aan de vergelijking
a′ x + b′ y = d.
Voorbeeld 2.4.3. We passen het uigebreide algoritme van Euclides toe op x = 31
en y = 22. We voeren eerst het klassieke algoritme van Euclides uit:
31 =
22 + 9,
22 = 2 · 9 + 4,
9 = 2 · 4 + 1,
4 = 4 · 1 + 0.
De grootste gemene deler van 31 en 22 is dus gelijk aan 1. Nu herschrijven we deze
lijst gelijkheden zoals in het bewijs van Stelling 2.4.2:
9 = 31 − 22,
4 = 22 − 2 · 9
1 = 9−2·4
= −2 · 31 + 3 · 22,
= 5 · 31 − 7 · 22.
We vinden zo dat
ggd(31, 22) = 1 = 5 · 31 − 7 · 22.
Het is handig om deze berekeningen op te schrijven in een tabel:
10
MODULOREKENEN EN CRYPTOGRAFIE
31
22
9
4
1
=
=
=
=
=
1 · 31 + 0 · 22
0 · 31 + 1 · 22
31 − 22
22 − 2 · 9
9−2·4
31
1
0
1
-2
5
22
0
1
-1
3
-7
Oefening 2.4.4. Vind de grootste gemene deler van 202 en 142 en schrijf hem als
a · 202 + b · 142
met a en b gehele getallen.
We bespreken nu enkele belangrijke gevolgen van de stelling van Bézout-Bachet.
2.5. Priemontbinding.
Lemma 2.5.1 (Lemma van Euclides). Zij x en y gehele getallen, en zij p een
priemgetal. Als p het product xy deelt, dan moet p ook x of y delen.
Bewijs. Stel dat p het getal x niet deelt. Dan zijn x en p relatief priem, want de
enige natuurlijke delers van p zijn 1 en p. Volgens de stelling van Bézout-Bachet
bestaan er gehele getallen a en b zodat
1 = ax + bp.
Omdat p een deler is van xy, zal p ook een deler zijn van
y = (ax + bp) · y = axy + bpy.
Het volgende resultaat is één van de belangrijkste eigenschappen van de
natuurlijke getallen. Een groot deel van de getaltheorie is op deze stelling gebaseerd.
Daarom wordt hij de fundamentaalstelling van de getaltheorie genoemd. Dit
resultaat staat in essentie al vermeld in Euclides’ Elementen, hoewel Euclides een
andere formulering gebruikte.
Stelling 2.5.2 (Fundamentaalstelling van de getaltheorie). Elk natuurlijk getal
x > 1 kan geschreven worden als een product van machten van priemgetallen:
(2.1)
αr
1
x = pα
1 · . . . · pr ,
met p1 , . . . , pr priem en α1 , . . . , αr natuurlijke getallen. We zullen in deze
schrijfwijze steeds veronderstellen dat p1 < p2 < . . . < pr en dat de exponenten
αi verschillend zijn van 0. Onder die veronderstelling is de schrijfwijze uniek. We
noemen hem de priemontbinding van x.
Bewijs. Het is niet moeilijk in te zien dat we elk natuurlijk getal x > 1 kunnen
schrijven als een product van priemgetallen. We geven een bewijs via inductie op
x. Als x = 2 dan is x al priem en valt er niets te bewijzen. Veronderstel dus dat
x > 2 en dat we elk natuurlijk getal x′ in het interval [2, x − 1] kunnen schrijven als
een product van priemgetallen. Als x priem is, dan valt er niets te bewijzen. Zoniet
kunnen we x schrijven als y · z met y en z natuurlijke getallen die strikt kleiner zijn
dan x. Volgens onze inductiehypothese kunnen we y en z schrijven als producten
van priemgetallen. Als we deze uitdrukkingen met elkaar vermenigvuldigen, dan
hebben we x geschreven als een product van priemgetallen.
MODULOREKENEN EN CRYPTOGRAFIE
11
Nu bewijzen we dat de schrijfwijze (2.1) uniek is. Zij p een priemgetal en α het
grootste natuurlijke getal zodat pα een deler is van x. Als α = 0 dan is pα = 1 en is
p geen deler van x; het priemgetal p kan dan ook niet voorkomen in de ontbinding
(2.1). Als α > 0 dan moet p volgens het lemma van Euclides een deler zijn van één
van de priemgetallen p1 , . . . , pr , en dus gelijk zijn aan pi met i ∈ {1, . . . , r}. Omdat
i
pα
i een deler is van x en we α zo groot mogelijk gekozen hebben, moet αi ≤ α.
αi
i
Omdat pα een deler is van x, zal pα−αi een deler zijn van x/pα
i . Maar x/pi is een
product van priemgetallen die verschillend zijn van p, en dus volgt uit het lemma
i
van Euclides dat p geen deler kan zijn van x/pα
i , zodat α = αi .
Dit toont aan dat de ontbinding (2.1) uniek is: de priemgetallen p1 , . . . , pr zijn
precies al de priemgetallen die x delen, en voor elke i is αi het grootste natuurlijk
i
getal zodat pα
i een deler is van x.
Gevolg 2.5.3. Twee gehele getallen zijn relatief priem als en slechts als ze geen
gemeenschappelijke priemdelers hebben.
Oefening 2.5.4. Stel dat x, y en z gehele getallen zijn zodat x en y relatief priem
zijn. Toon de volgende eigenschappen aan.
(1) Als x en z relatief priem zijn, dan zijn ook x en yz relatief priem.
(2) Het product xy is een deler van z als en slechts als x en y delers zijn van z.
(3) Het getal x is een deler van z als en slechts als x een deler is van yz.
Oefening 2.5.5. Zij p en q verschillende priemgetallen.
natuurlijke delers van x = p8 q 13 .
Bepaal het aantal
Oefening 2.5.6. Zij n een natuurlijk getal zodat n + 1 geen priemgetal is en ook
niet het kwadraat van een priemgetal. Toon aan dat n + 1 een deler is van n!.
2.6. De Chinese reststelling.
Stelling 2.6.1 (Chinese reststelling1). Zij M1 , . . . , Mr strikt positieve gehele
getallen. We veronderstellen dat deze getallen paarsgewijs relatief priem zijn, dat
wil zeggen:
ggd(Mi , Mj ) = 1
voor alle elementen i en j in {1, . . . , r} waarvoor i ̸= j.
Voor alle gehele getallen x1 , . . . , xr bestaat er een geheel getal x zodat
(2.2)
x ≡ xi
mod Mi
voor elke i in {1, . . . , r}. De gehele getallen y die ook aan al deze congruenties
voldoen zijn precies de elementen van de congruentieklasse van x modulo
M = M1 · . . . · Mr .
Bewijs. Stel M = M1 · . . . · Mr . Voor elke i in {1, . . . , r} zijn de gehele getallen Mi
en M/Mi relatief priem, aangezien elke priemdeler van M/Mi een deler moet zijn
van één van de factoren Mj met j ̸= i, en Mi en Mj geen gemeenschappelijke
priemdelers hebben. Volgens de stelling van Bézout-Bachet kunnen we gehele
getallen ai en bi vinden zodat
ai Mi + bi M/Mi = 1.
1Dit resultaat werd al in de 4de eeuw na Christus opgetekend in Het rekenkundig handboek
van Meester Sun van de Chinese wiskundige Sunzi.
12
MODULOREKENEN EN CRYPTOGRAFIE
We stellen
x = x1 b1 M/M1 + · · · + xr br M/Mr .
Voor elke i in {1, . . . , r} zal Mi een deler zijn van
x − xi = x1 b1 M/M1 + · · · + xi (bi M/Mi − 1) + · · · + xr br M/Mr
omdat Mi een deler is van M/Mj voor alle j ̸= i en ook een deler van
bi M/Mi − 1 = −ai Mi .
Dus het getal x voldoet aan de congruentie (2.2), voor alle i in {1, . . . , r}.
Het is duidelijk dat elk getal y in de congruentieklasse van x modulo M ook aan
al deze congruenties voldoet, aangezien y − x dan deelbaar is door M en dus door al
de moduli Mi . We moeten enkel nog aantonen dat we zo alle oplossingen gevonden
hebben. Veronderstel dus dat y een geheel getal is zodat
y ≡ xi
mod Mi
voor alle i. Dan zal y ook congruent zijn aan x modulo Mi , voor alle i. Aangezien
de moduli Mi paarsgewijs relatief priem zijn, vinden we door Oefening 2.5.4
herhaaldelijk toe te passen dat M een deler moet zijn van y − x. Dus y behoort tot
de congruentieklasse van x modulo M .
De Chinese reststelling is een sterk resultaat: om de congruentieklasse van een
geheel x modulo M1 · . . . · Mr te bepalen, volstaat het de congruentieklassen van x
te kennen modulo de getallen M1 , . . . , Mr .
Voorbeeld 2.6.2. De gehele getallen x die voldoen aan de congruenties
{
x ≡ 2 mod 13
x ≡ 0 mod 7
zijn precies de elementen van de congruentieklasse
28 = {28, 119, −63, 210, −154, . . .}
modulo 13 · 7 = 91.
2.7. Eenheden in ZM . Zij M een strikt positief geheel getal.
Propositie 2.7.1. Zij x een geheel getal. De getallen x en M zijn relatief priem
als en slechts als er een geheel getal y bestaat zodat
x·y =1
in ZM .
In dat geval is de congruentieklasse y uniek. We noemen deze congruentieklasse
het inverse element van x, en we noteren hem met x−1 . Als x een inverse heeft,
dan noemen we x een eenheid in ZM , en noemen we x een eenheid modulo M . De
verzameling van eenheden in ZM duiden we aan met Z×
M.
Bewijs. Veronderstel eerst dat x en y gehele getallen zijn zodat x · y = 1. Dat
betekent dat M een deler is van xy − 1. Elke gemene deler d van x en M deelt dus
zowel x als xy − 1. Dan moet d ook een deler zijn van xy, en dus van
xy − (xy − 1) = 1.
Daaruit volgt dat d enkel 1 of −1 kan zijn, en dat ggd(x, M ) = 1.
MODULOREKENEN EN CRYPTOGRAFIE
13
Nu tonen we de omgekeerde implicatie aan. Veronderstel dat x een geheel getal
is zodat ggd(x, M ) = 1. Volgens de stelling van Bézout-Bachet bestaan er dan
gehele getallen a en b zodat
ax + bM = 1.
De modulus M moet dan een deler zijn van
ax − 1 = −bM.
Dus
ax ≡ 1 mod M,
met andere woorden: x · a = 1.
Als c een geheel getal is zodat eveneens x · c = 1, dan geldt omwille van de
commutativiteit en de associativiteit van de vermenigvuldiging dat
c = (x · a) · c = (x · c) · a = a.
Dus het inverse element a van x is uniek (als het bestaat).
Dit bewijs laat ook zien hoe je het inverse element van x kan vinden: het is de
congruentieklasse van de coëfficiënt a van x die je kan bepalen via het uitgebreide
algoritme van Euclides.
Voorbeeld 2.7.2. We lezen af uit Voorbeeld 2.4.3 dat −7 = 24 het inverse element
is van 22 in Z31 , omdat
−7 · 22 = 1 − 5 · 31 ≡ 1
mod 31.
Oefening 2.7.3. Zijn de volgende getallen eenheden in Z35 ? Zo ja, bereken hun
invers.
5, 6, 8, 34.
Oefening 2.7.4. Toon de volgende eigenschappen aan:
(1) Als r en s eenheden zijn in ZM , dan is r · s een eenheid in ZM .
(2) Als r een eenheid is in ZM en u en v elementen in ZM zodat r · u = r · v,
dan moet u = v.
Merk op dat de tweede eigenschap niet geldt als r geen eenheid is: zo is 2·3 = 0 = 2·0
in Z6 , terwijl 3 ̸= 0.
Oefening 2.7.5. Stel dat x en y natuurlijke getallen zijn zodat x eindigt op de
cijfers 13 en zodat x · y eindigt op 52. Toon aan dat het getal y moet eindigen op
04.
We stellen ons nu de volgende vraag: hoeveel elementen bevat Z×
M ? Met andere
woorden: hoeveel elementen in
{0, . . . , M − 1}
zijn een eenheid modulo M ? Omwille van Propositie 2.7.1 weten we dat dit precies
de elementen zijn van de verzameling
EM = {x ∈ {0, . . . , M − 1} | ggd(x, M ) = 1}.
Het aantal elementen van EM noteren we met φ(M ). Dit getal wordt het Eulergetal
van M genoemd.
14
MODULOREKENEN EN CRYPTOGRAFIE
Voorbeeld 2.7.6. Het Eulergetal φ(1) is gelijk aan 1, want de grootste gemene
deler van 0 en 1 is gelijk aan 1, zodat E1 = {0}. Het Eulergetal φ(6) is gelijk aan
2, want
E6 = {1, 5}.
Als p een priemgetal is, dan is
Ep = {1, . . . , p − 1}
en dus φ(p) = p − 1.
We gaan nu een handige formule opstellen die ons toelaat om φ(M ) expliciet te
berekenen.
Lemma 2.7.7. Zij M en N strikt positieve gehele getallen, en veronderstel dat M
en N relatief priem zijn. Dan geldt
φ(M N ) = φ(M ) · φ(N ).
Bewijs. Zij x een element van {0, . . . , M N − 1}. Uit de Chinese reststelling volgt
dat x volledig bepaald wordt door zijn congruentieklassen modulo M en N : voor
elke a in {0, . . . , M − 1} en elke b in {0, . . . , N − 1} is er precies één element x in
{0, . . . , M N − 1} zodat
x ≡ a mod M
en x ≡ b
mod N.
Bovendien is x relatief priem met M N als en slechts als a relatief priem is met M
en b relatief priem is met N . Dit kan je inzien als volgt: de gemeenschappelijke
priemdelers van x en M N zijn precies de priemgetallen p die x delen en ook M
of N , omwille van het lemma van Euclides. Maar als p een deler is van M , dan
deelt p ook x als en slechts als p een deler is van a, vermits we a kunnen schrijven
als a = x + kM met k ∈ Z. De gemeenschappelijke priemdelers van x en M zijn
dus precies de gemeenschappelijke priemdelers van a en M . De analoge eigenschap
geldt voor x, b en N .
Dus φ(M N ) is gelijk aan het aantal elementen in de productverzameling
{a ∈ {0, . . . , M − 1} | ggd(a, M ) = 1} × {b ∈ {0, . . . , N − 1} | ggd(b, N ) = 1}.
De eerste factor in dit product heeft precies φ(M ) elementen, en de tweede φ(N ).
We kunnen daarom besluiten dat
φ(M N ) = φ(M ) · φ(N ).
Propositie 2.7.8. Zij M > 1 een geheel getal met priemontbinding
αr
1
M = pα
1 · . . . · pr .
Dan geldt
r −1
φ(M ) = (p1 − 1)p1α1 −1 · . . . · (pr − 1)pα
.
r
Bewijs. Veronderstel eerst dat r = 1; dan is M gelijk aan pα , met p een priemgetal
en α een strikt positief geheel getal. De elementen in {0, . . . , M −1} die niet relatief
priem zijn met M zijn dan precies de veelvouden van p, namelijk
V = {0, p, 2p, . . . , (pα−1 − 1)p}.
MODULOREKENEN EN CRYPTOGRAFIE
15
Merk op dat (pα−1 − 1)p inderdaad het grootste veelvoud van p is dat strikt kleiner
is dan M = pα . De verzameling V bevat pα−1 elementen, dus de verzameling
EM = {0, . . . , M − 1} \ V
bevat
M − pα−1 = (p − 1)pα−1
elementen. We vinden zo dat
φ(pα ) = (p − 1)pα−1 .
De algemene formule voor φ(M ) volgt nu onmiddellijk uit Lemma 2.7.7.
Oefening 2.7.9. Bewijs Propositie 2.7.8 als M een product is van twee
verschillende priemgetallen p en q, zonder gebruik te maken van de Chinese
reststelling: tel de elementen van {0, . . . , M − 1} die niet relatief priem zijn met M .
2.8. De congruentie van Euler en de kleine stelling van Fermat.
Stelling 2.8.1 (Congruentie van Euler). Zij M een strikt positief geheel getal, en
a een geheel getal dat relatief priem is ten opzichte van M . Dan geldt
aφ(M ) ≡ 1 mod M.
Bewijs. Zij
r1 , . . . , rφ(M )
de eenheden in ZM . Uit Oefening 2.7.4 volgt dat
{r1 , . . . , rφ(M ) } = {a · r1 , . . . , a · rφ(M ) }.
Als we de elementen in elk van deze verzameligen vermenigvuldigen, dan vinden
we dat
r1 · . . . · rφ(M ) = aφ(M ) · r1 · . . . · rφ(M ) .
Oefening 2.7.4 zegt dan dat
aφ(M ) = 1,
anders gezegd:
aφ(M ) ≡ 1 mod M.
Gevolg 2.8.2 (Kleine stelling van Fermat2). Als p een priemgetal is en a een geheel
getal dat niet deelbaar is door p, dan geldt
ap−1 ≡ 1 mod p.
Voor alle gehele getallen b geldt dus dat
bp ≡ b mod p.
2We noemen Gevolg 2.8.2 de kleine stelling van Fermat om het onderscheid te maken met de
beroemde grote stelling van Fermat. Die zegt het volgende: als x, y, z en n natuurlijke getallen
zijn zodat
xn + y n = z n
en n > 2, dan moet x of y gelijk zijn aan 0. Dit resultaat, door Fermat geformuleerd in 1637,
werd pas in 1994 bewezen door de Britse wiskundige Andrew Wiles. Het bewijs maakt gebruik
van erg diepe resultaten uit de getaltheorie en de meetkunde.
16
MODULOREKENEN EN CRYPTOGRAFIE
Bewijs. De eerste bewering is een bijzonder geval van de congruentie van Euler,
omdat φ(p) = p − 1. Als we beide leden van deze congruentie vermenigvuldigen
met a, dan vinden we
ap ≡ a mod p.
De tweede bewering hoeven we dan enkel nog te bewijzen als p een deler is van b.
In dat geval geldt
bp ≡ b ≡ 0 mod p.
Gevolg 2.8.3. Zij M een strikt positief geheel getal, en a een geheel getal dat
relatief priem is ten opzichte van M . Als x en y natuurlijke getallen zijn zodat
x≡y
mod φ(M ),
dan zal
ax ≡ ay
mod M.
Bewijs. We mogen veronderstellen dat x > y, anders wisselen we x en y gewoon
om. Dan zal y = x + φ(M )q met q een natuurlijk getal. Uit de congruentie van
Euler volgt nu dat
ay = ax (aφ(M ) )q ≡ ax mod M.
Voorbeeld 2.8.4. Stel dat we de rest van 350 bij deling door 35 willen berekenen,
Uit Propositie 2.7.8 volgt dat φ(35) = 4 · 6 = 24. Bovendien zijn 3 en 35 relatief
priem. We kunnen Gevolg 2.8.3 daarom toepassen op de volgende manier:
50 ≡ 2 mod 24,
zodat
350 ≡ 32
De rest van 3
50
mod 35.
bij deling door 35 is dus gelijk aan 9.
n
Oefening 2.8.5. Beschouw een geheel getal n > 1. Bewijs dat 7(2 ) eindigt op het
n
2011
cijfer 1, en 2(2 ) + 1 op het cijfer 7. Wat zijn de laatste twee cijfers van 39(41 ) ?
2.9. Generatoren in Z×
p.
Propositie 2.9.1. Zij p een priemgetal. Dan bestaat er een element g in Z×
p zodat
2
p−1
Z×
= 1}.
p = {g, g , . . . , g
Zo’n element g noemen we een generator van Z×
p.
Merk op dat g p−1 = 1 voor elk element g van Z×
p omwille van de kleine stelling
van Fermat (Gevolg 2.8.2). Als g een generator is van Z×
p , dan moeten de machten
g i en g j verschillend zijn voor alle elementen i ̸= j in {1, . . . , p − 1}, omdat we
weten dat Z×
p precies φ(p) = p − 1 elementen bevat.
Het bewijs van deze eigenschap valt helaas buiten het bestek van deze bundel.
We kunnen hem wel illustreren aan de hand van een voorbeeld.
MODULOREKENEN EN CRYPTOGRAFIE
17
Voorbeeld 2.9.2. Het element 2 is een generator van Z×
5 . De opeenvolgende
machten van 2 zijn
1
2
3
4
2 = 2, 2 = 4, 2 = 8 = 3, 2 = 16 = 1.
Het element 4 is geen generator van Z×
5.
In de volgende secties bespreken we verschillende cryptosystemen die zijn
gebaseerd op getaltheorie, en in het bijzonder op modulorekenen.
3. Van Vigenère tot AES
3.1. Het Vigenèrecijfer. We zagen in Paragraaf 1.6 dat het substitutiecijfer
relatief eenvoudig gekraakt kan worden door middel van frequentieanalyse. In 1553
stelde Giovanni Belaso een alternatief cryptosysteem voor dat de problemen van
het substitutiecijfer leek op te lossen. Het werd opgepikt door de Franse diplomaat
Blaise de Vigenère naar wie het cryptosysteem sindsdien wordt genoemd: het
Vigenèrecijfer.
Het Vigenèrecijfer maakt gebruik van een codewoord. Dat woord kan bijvoorbeeld
TOERNOOI
zijn. Om een zin, bijvoorbeeld
ALEA JACTA EST,
te vercijferen vullen we een regel eronder met kopieën van het codewoord. Eventueel
dient de laatste kopie te worden afgebroken:
ALEA JACTA EST
TOER NOOIT OER.
Een letter op de tweede regel bepaalt nu hoeveel plaatsen in het alfabet de letter
erboven wordt opgeschoven. We identificeren daarvoor de letters van het alfabet
met de congruentieklassen in Z26 . Hierbij staat de A voor 0, de B voor 1, de C voor
2, . . . , de Z voor 25.
We vervangen nu de letters van de boodschap en van het codewoord door de
overeenkomstige congruentieklassen in Z26 . Vervolgens tellen we beide regels bij
elkaar op. Het resultaat is een rij elementen van Z26 , die we opnieuw omzetten in
een rij van letters. Deze rij letters is de vercijferde boodschap.
In ons voorbeeld vervangen we
ALEA JACTA EST
TOER NOOIT OER.
dus door
0
19
11 4
14 4
0
17
9 0
13 14
2 19
14 8
0
19
4 18
14 4
19
17.
19
18
10.
Als we nu beide regels optellen, dan vinden we
19
25
8 17
22 14
16 1
22
Door deze reeks congruentieklassen weer om te zetten in letters, vinden we tenslotte
de Vigenère-vercijfering horend bij het codewoord TOERNOOI:
TZIR WOQBT SWK.
18
MODULOREKENEN EN CRYPTOGRAFIE
Het ontcijferen gebeurt dan door de rij kopieën van het codewoord weer van de
vercijferde tekst af te trekken. Zoals je ziet wordt de letter A in bovenstaande tekst
zowel als een T, een R en een O vercijferd. Dat maakt een statistische aanval zoals
in Paragraaf 1.6 op het eerste zicht waardeloos.
Oefening 3.1.1. Het Caesarcijfer is een speciaal geval van het Vigenèrecijfer. Wat
is het bijhorende codewoord?
Oefening 3.1.2. De tekst
GVZZG BY SE!
is vercijferd volgens de Vigenèremethode, met codewoord
FERMAT.
Wat is de oorspronkelijke boodschap?
Lange tijd werd het Vigenèrecijfer als onbreekbaar beschouwd. Het kreeg zelfs
de bijnaam le chiffre indéchiffrable (het onontcijferbare cijfer). Halfweg de 19de
was het sprookje echter uit. Toen publiceerde Friedrich Kasiski een methode om
het cijfer te kraken, op voorwaarde dat de ontvangen tekst voldoende lang is.
(a) Wanneer we de lengte van het codewoord kennen, dan is het Vigenèrecijfer
eenvoudig te kraken. Stel bijvoorbeeld dat we weten dat het codewoord
acht letters telt. Dan kunnen we de 1ste , de 9de , de 17de , de 25ste , ...
letter van de vercijferde tekst samen bekijken. Omdat deze letters allemaal
over dezelfde afstand zijn verschoven, zullen we de eerste letter van het
codewoord kunnen gokken met behulp van een frequentieanalyse zoals in
Paragraaf 1.6. Analoog vinden we de tweede letter door de 2de , de 10de , de
18de , de 26ste , ... vercijferde letters samen te bekijken, enzoverder.
(b) De meest ambachtelijke aanval is dan om de procedure uit (a)
uit te voeren voor lengte 1, lengte 2, lengte 3, . . . tot we een
betekenisvolle ontcijfering vinden. Vaak kan de lengte op voorhand
gegokt worden door te kijken naar opvallende letteropeenvolgingen die
terugkeren. De afstand tussen twee dergelijke opeenvolgingen is met
grote kans een veelvoud van de lengte van het codewoord. Als we
een paar dergelijke veelvouden kunnen opspeuren, dan is de lengte van
het codewoord heel waarschijnlijk de grootste gemene deler van deze
veelvouden. Deze methode wordt geı̈llustreerd op de leuke website
http://www.simonsingh.net/The_Black_Chamber/contents.html
De daaropvolgende 100 jaar worden gekenmerkt door veel cryptografische
bedrijvigheid. De twee wereldoorlogen zijn daar natuurlijk niet vreemd aan. Zo
stuurde Arthur Zimmermann, de Duitse minister van buitenlandse zaken, in 1917
een vercijferd bericht naar zijn ambassadeur in Washington, D.C. Daarin werd die
laatste aangemaand om de Verenigde Staten en Mexico tegen elkaar op te stoken.
Op die manier hoopte Zimmermann dat de Amerikanen het te druk zouden hebben
met hun eigen conflict om zich actief met WO I te bemoeien. Het bericht werd
echter onderschept en gekraakt, en had een averechts effect: de Verenigde Staten
verklaarden Duitsland de oorlog en WO I, die op dat moment muurvast zat, kwam
in een stroomversnelling. Een jaar later was de oorlog beslecht.
Waar het Zimmermanntelegram eerder een amateuristische blunder was die
geen veiligheidsdienst die naam waardig had kunnen verschalken, was cryptografie
tijdens de tweede wereldoorlog echt big business. Door het toenemende gebruik
MODULOREKENEN EN CRYPTOGRAFIE
19
van vliegtuigen en onderzeeërs bulkte de ether van de geheime berichten. In
het geval van de Duitsers waren die berichten meestal vercijferd met behulp van
een Enigma. Dat was een typmachine die in de jaren ‘10 was ontwikkeld en
de ingetypte tekst automatisch in geheimschrift zette. Vóór gebruik moesten bij
de Enigma een aantal zaken fysiek worden ingesteld (koppelingen van elektrische
bedradingen, beginstanden van rotoren). Die instellingen dienden als geheime
sleutel en veranderden dagelijks. De Enigma leek niet te kraken, maar de Britse
geheime diensten bleven hardnekkig proberen. Hardnekkig is een understatement.
Op het hoogtepunt was een team van maar liefst 10000 mannen en vrouwen full-time
bezig met het onderscheppen, opschrijven en bestuderen van de Duitse berichten.
Het bestuderen gebeurde door een team wiskundigen, met aan het hoofd de briljante
Alan Turing. Uiteindelijk slaagden ze in hun opzet, voortbouwend op eerdere
doorbraken van de Poolse wiskundige Marian Rejewski in opdracht van de Poolse
geheime dienst.
De Enigma was een wijd verspreid toestel en de Duitsers waren zich ervan bewust
dat de Britten over fysieke exemplaren beschikten. Ook al betekende dat niet dat
de Britten de bijhorende geheime instellingen kenden, toch gebruikten de Duitsers
uit voorzorg een complexere variant van het toestel voor informatie die echt top
secret was: de Lorenz-Geheimschreiber. Ook die werd uiteindelijk door de Britten
gekraakt. Ze wisten zelfs een Geheimschreiber na te bootsen zonder er zelf ooit één
te hebben gezien!
Dit alles speelde ongetwijfeld een sleutelrol in WO II. Zo waren de geallieerde
troepen er bij de cruciale landing op Normandië vrij zeker van dat de Duitsers in
de bijhorende valstrik waren getrapt.
3.2. Om de Lorenz-Geheimschreiber te kraken ontwikkelden de Britten de
allereerste digitale computers: Colossus I en Colossus II. Na afloop van WO II
werden de Colossus-computers vernietigd.
3.3. Bij deze fantastische geschiedenis horen een aantal minder fraaie kanttekeningen. Na afloop van de oorlog hielden de Britten hun verwezenlijkingen geheim (tot
de jaren ‘70). Hiervan misbruik makend bleef het Verenigd Koninkrijk het gebruik
van Enigma-toestellen stimuleren, onder andere bij hun eigen kolonies. Ook jegens
Alan Turing legden ze niet veel menselijkheid aan de dag. De homoseksuele Turing
werd na de oorlog verplicht zich chemisch te laten castreren en zou uiteindelijk in
1954 zelfmoord plegen. In 2009 bood de Britse regering hiervoor haar excuses aan.
3.4. De jaren ‘70: een sleutelperiode. De jaren ‘70 zijn een absoluut keerpunt
voor de cryptografie. Eén van de redenen is de publieke bekendmaking van het ganse
Enigma-verhaal. De technieken die Turing en co hadden ontwikkeld vonden op die
manier hun weg naar het wetenschappelijke circuit en veranderden het aanschijn
van de cryptografie definitief.
Een tweede reden is de invoering door de Amerikaanse overheid van een nationale
standaard om berichten in geheimschrift te zetten: de Data Encryption Standard
(DES). Veel wetenschappers vertrouwden DES niet. De sleutelruimte was immers
nogal klein (256 mogelijke sleutels) en men vreesde dat de beleidsmakers er een
achterpoortje in hadden verwerkt, waardoor ze het systeem zelf zouden kunnen
kraken. Die achterdocht bleek uiteindelijk onterecht, maar de intensieve analyse van
DES is van enorme waarde gebleken voor de cryptografie. Vandaag de dag kan DES
in minder dan een dag worden gekraakt. Varianten van het cijfer worden echter nog
20
MODULOREKENEN EN CRYPTOGRAFIE
altijd gebruikt. Zo beroepen de meeste bankautomaten zich op 3DES (essentieel drie
kopieën van DES, met een sleutelruimte van grootte 256 · 256 · 256 = 2168 ). De lessen
die uit DES werden getrokken leidden uiteindelijk naar een nieuw cryptosysteem
dat in 2002 gelanceerd werd: de Advanced Encryption Standard (AES). Het is
gebaseerd op het Rijndael-algoritme van de Leuvense ingenieurs Joan Daemen en
Vincent Rijmen. Vandaag de dag geldt AES als de internationale standaard. Ze
heeft een sleutelruimte van grootte 2128 .
Een derde en misschien wel belangrijkste reden is de ontdekking van methodes
om op een publieke manier geheime sleutels of zelfs ganse geheime boodschappen
uit te wisselen. Deze vormen het einddoel van deze bundel en bespreken we in de
volgende secties.
4. Veilige sleuteluitwisseling
4.1. Een fundamenteel probleem bij alle hierboven besproken cryptosystemen,
inclusief DES en AES, is het uitwisselen van de geheime sleutel tussen zender en
ontvanger. Indien beide partijen elkaar niet fysiek kunnen ontmoeten is dit een heel
delicaat aspect. Zo kregen de Duitse klerken tijdens WO II maandelijks een agenda
opgestuurd waarin de geheime Enigma-instellingen voor de volgende maand per
dag stonden opgelijst. Bij minstens één gelegenheid is zo’n boekje door de Britse
geheime diensten onderschept.
Een ander cryptosysteem gebruiken om de geheime sleutel met elkaar uit te
wisselen verlegt het probleem natuurlijk alleen maar. Het is a priori zelfs helemaal
niet duidelijk dat er een oplossing voor dit probleem bestaat. Het kwam dan
ook als een absolute verrassing toen Whitfield Diffie en Martin Hellman in 1976
een methode publiceerden die geheime sleuteluitwisseling mogelijk maakt. Hun
methode maakt gebruik van modulorekenen.
4.2. Van sleutel tot congruentieklas modulo p. Een geheime sleutel is in de
praktijk altijd te identificeren met een natuurlijk getal x waarvoor
0≤x<S
waarbij S de grootte van de sleutelruimte is. Bij het substitutiecijfer kan een
lettervolgorde zoals in (1.1) worden bekeken als een getal tussen 0 en 26! − 1 door
alle mogelijke lettervolgordes alfabetisch te ordenen. Omgekeerd geeft elk natuurlijk
getal tussen 0 en 26! − 1 aanleiding tot zo’n lettervolgorde. Bij AES is de geheime
sleutel een opeenvolging van 128 nulletjes en eentjes:
10100111010101011010101010111101000001101001 . . . 011001.
Dit kan men bekijken als de binaire schrijfwijze van een natuurlijk getal tussen 0 en
2128 − 1. Omgekeerd zal elk natuurlijk getal tussen 0 en 2128 − 1 aanleiding geven
tot een AES-sleutel.
Anders gezegd kunnen we een sleutel dus bekijken als een rest modulo S. Het
veilig uitwisselen van zo’n rest is precies wat het hieronder beschreven DiffieHellmanprotocol doet. In praktijk werken Diffie en Hellman echter modulo een
priemgetal p dat groter is dan S (vaak een priemgetal van tenminste 1024 binaire
cijfers). Het resultaat van het Diffie-Hellmanprotocol is dan een congruentieklas x
modulo p, die enkel gekend is door de twee partijen die een sleutel willen afspreken.
Uit deze congruentieklas x, die voorgesteld kan worden door een rest 0 ≤ x < p,
kan dan eenvoudig een sleutel worden afgeleid door x modulo S te berekenen. In
MODULOREKENEN EN CRYPTOGRAFIE
21
praktijk wordt deze laatste stap vervangen door het hashen van de congruentieklas
x. Het zou ons te ver leiden om in deze nota’s op dit hashen in te gaan; het principe
blijft sowieso hetzelfde.
4.3. Het vinden van een groot priemgetal p. Zoals hierboven vermeld wil
men gebruik maken van een priemgetal p van ongeveer duizend binaire cijfers.
Met de huidige stand van de informatica en de wiskunde vormt het geen praktisch
probleem om binnen een fractie van een seconde zo’n priemgetal te vinden. Ruw
gesteld kiest men herhaaldelijk een lukraak getal van de juiste grootte-orde, tot het
een priemgetal betreft. Daarvoor moeten
(1) we over een snelle test beschikken om na te gaan of een gegeven getal al
dan niet priem is; zo’n test bestaat inderdaad, maar een beschrijving ervan
valt buiten het bestek van deze nota’s;
(2) de priemgetallen dik genoeg gezaaid liggen; vanuit praktisch oogpunt mogen
we hier vertrouwen in hebben, al is dat vertrouwen vooral gebaseerd op
onbewezen heuristieken en experimentele ervaring; op theoretisch vlak
baart de verdeling van de priemgetallen ons nog veel kopzorgen (o.a. het
Riemannvermoeden, door velen beschouwd als het belangrijkste onopgeloste
probleem uit de hele wiskunde, doet hier een uitspraak over – wie het oplost
krijgt een miljoen dollar van het Clay Mathematics Institute).
Merk op dat (1) in opmerkelijk contrast staat met het volgende al even beroemde
onopgeloste probleem.
Open probleem 4.3.1. Vind een efficiënte methode om van eender welk gegeven
geheel getal n de priemontbinding te vinden.
Nagaan of een gegeven getal van enkele honderden cijfers priem is lukt vandaag in
een fractie van een seconde, maar de best gekende methodes om de priemontbinding
van een gelijkaardig getal te vinden doen er in het slechtste geval miljarden jaren
over.
4.4. Het Diffie-Hellmanprotocol. Het Diffie-Hellmanprotocol (DHP) is een
manier om op een veilige en efficiënte manier een geheime congruentieklas x modulo
een gegeven priemgetal p af te spreken tussen twee partijen die over een onveilig
kanaal met elkaar communiceren.
Veronderstel dat de twee partijen Agnetha en Benny heten. Ze spreken eerst een
generator g van (Z×
p , ·) af. Daarna kiest Agnetha een getal a met 0 ≤ a < p − 1,
dat ze angstvallig geheim houdt. Analoog kiest Benny een geheim getal b met
0 ≤ b < p − 1. Agnetha berekent g a en stuurt dit door naar Benny. Op zijn beurt
berekent Benny g b en laat de uitkomst weten aan Agnetha. Zowel Agnetha als
Benny kunnen nu g ab berekenen: Agnetha kent g b (omdat Benny haar die waarde
heeft meegedeeld) en a (haar geheim getal) en kan dus (g b )a uitrekenen. Analoog
kan Benny (g a )b bepalen. Zowel Agnetha als Benny hebben dus g ab = (g b )a = (g a )b
in hun bezit. Dat is precies onze geheime congruentieklas x.
We vatten samen:
22
MODULOREKENEN EN CRYPTOGRAFIE
Agnetha
Benny
kiest 0 ≤ a < p
berekent g a
Publiek Kanaal
ga
→
−−−−−−−−−−−−−
berekent x = (g b )a
gb
←
−−−−−−−−−−−−−
kiest 0 ≤ b < p
berekent g b
berekent x = (g a )b
4.5. Het discrete-logaritmeprobleem. Iemand met slechte bedoelingen kan de
volgende informatie via het publieke kanaal te pakken krijgen: p, g, g a en g b . Kan
hij of zij daaruit x = g ab berekenen?
De voor de hand liggende aanpak is om te proberen a uit g a te bepalen, om
daarna x = (g b )a uit te rekenen. De veiligheid van het DHP is gebaseerd op de
veronderstelling dat deze piste voor grote waarden van p en a volstrekt hopeloos
is. Men heeft goede redenen om te geloven dat elke andere aanpak minstens even
moeilijk is.
a
Zij h ∈ Z×
p . De unieke a waarvoor 0 ≤ a < p − 1 en h = g noemen we de
discrete logaritme van h met grondtal g. Het vinden van een manier om efficiënt
discrete logaritmes te berekenen noemen we het discrete-logaritmeprobleem (DLP).
Anno 2011 weet niemand hoe het DLP efficiënt kan worden opgelost. De beste
algoritmen slagen er bijvoorbeeld maar net in om het DLP modulo een priemgetal
500 binaire cijfers op te lossen. Algemeen wordt aangenomen dat het DLP modulo
een priemgetal van 1024 binaire cijfers veiligheid biedt voor een vijftal jaar. Een
priemgetal van 2048 binaire cijfers zou volstaan voor geheimen die het 15 tot 20
jaar moeten uithouden.
We moeten hierbij ook opmerken dat niet eender welk priemgetal van de
juiste grootte-orde kan worden gebruikt voor het DHP. Men kan aantonen dat
de moeilijkheid van het DLP eerder bepaald wordt door het grootste priemgetal
in de priemontbinding van p − 1, dan door p zelf. Dit heet de Silver-PohligHellmanreductie. Een beschrijving hiervan laten we achterwege, maar een gevolg
is dat p − 1 zelf bij voorkeur ‘bijna priem’ is: een kleine factor maal een ander
priemgetal. Nagaan of een getal ‘bijna priem’ is lukt op een efficiënte manier: men
probeert zoveel mogelijk factoren 2, 3, 5, 7, . . . (afhankelijk van wat men een ‘kleine’
priemfactor noemt) af te zonderen, waarna men test of de resterende factor priem
is. Met deze beperking is het snel vinden van een geschikte p nog steeds mogelijk:
de priemgetallen liggen dik genoeg gezaaid om deze bijkomende eis op te vangen.
4.6. Modulaire machtsverheffing. Het DHP, zoals hierboven geschetst, brengt
een aantal praktische vragen met zich mee. De belangrijkste daarvan is: hoe voeren
Agnetha en Benny op een efficiënte manier machtsverheffingen uit in Zp ? Stel dat
Agnetha naı̈ef is en g a wil bepalen door achtereenvolgens
g 2 = g · g,
g3 = g · g2 ,
g4 = g · g3 ,
g5 = g · g4 ,
g6 = g · g5 ,
g7 = g · g6 , . . .
te berekenen, dan dient ze a − 1 vermenigvuldigingen uit te voeren. Omdat a een
getal is van enkele honderden decimale cijfers zou dit haar miljarden jaren kosten.
MODULOREKENEN EN CRYPTOGRAFIE
23
Gelukkig bestaat er een veel snellere manier. Stel dat Agnetha g 64 wil uitrekenen.
Met de bovenstaande methode zou ze 63 vermenigvuldigingen moeten uitvoeren.
Via de reeks
g 2 = g·g,
g 4 = g 2 ·g 2 ,
g 8 = g 4 ·g 4 ,
g 16 = g 8 ·g 8 ,
g 32 = g 16 ·g 16 ,
g 64 = g 32 ·g 32
zijn dat er nog 6. Natuurlijk zal a niet altijd een zuivere macht van 2 zijn, maar
we kunnen dit procédé als volgt veralgemenen. Schrijf a in binaire schrijfwijze,
bijvoorbeeld
a = 1011101000011011000 . . . 01100101.
Doorloop nu de binaire cijfers van links naar rechts, te beginnen vanaf het tweede
cijfer. Indien we eerst een 0 lezen stellen we
g1 = g2 ;
indien we eerst een 1 lezen stellen we
g 1 = g 2 · g.
Indien we daarna een 0 lezen stellen we
g 2 = g 21 ;
in het andere geval stellen we
g 2 = g 21 · g.
Zo gaat het verder: wanneer we bij stap i een 0 lezen stellen we
g i = g 2i−1 ;
bij een 1 stellen we
g i = g 2i−1 · g.
Oefening 4.6.1. Ga na dat de bovenstaande methode de juiste uitkomst geeft.
Op die manier zal het aantal vermenigvuldigingen afhangen van het aantal binaire
cijfers van a, veeleer dan van a zelf.
Oefening 4.6.2. Stel dat a 800 cijfers heeft in binaire schrijfwijze en dat één
−6
vermenigvuldiging in Z×
seconde kost.
p ons met behulp van een computer 10
a
Hoe lang duurt het om g te berekenen met de eerste methode (minstens)? Hoe
lang duurt het met de tweede methode, in het gemiddelde geval waarbij de binaire
schrijfwijze van a evenveel 1’tjes als 0’etjes telt?
4.7. Het vinden van een generator. Een ander praktisch aspect betreft het
×
vinden van een generator g van (Z×
p , ·). Een willekeurig gekozen element van Zp
heeft veel kans om een generator te zijn.
Oefening 4.7.1. Toon aan: als g een generator is, dan is ook g a een generator
voor elke a ∈ Z die relatief priem is met p − 1. Toon ook het omgekeerde aan: als
g en h generatoren zijn, dan is h = g a voor een a die relatief priem is met p − 1.
Besluit dat het aantal generatoren van (Z×
p , ·) gelijk is aan φ(p − 1).
De kans op een generator is dus φ(p−1)
p−1 , wat vrij groot is. Na een aantal pogingen
zullen we zo goed als zeker een generator te pakken hebben.
Oefening 4.7.2. Bereken deze kans in het geval dat (p − 1)/2 priem is (in dat
geval noemt men (p − 1)/2 een Sophie-Germainpriem).
24
MODULOREKENEN EN CRYPTOGRAFIE
Een snelle test om na te gaan of een gegeven congruentieklas al dan niet een
generator is hebben we in het algemeen niet voorhanden. Als we de priemontbinding
van p − 1 kennen, wat bij ons steeds het geval is (zie de opmerking op het einde
van 4.5), lukt het wel.
×
Oefening 4.7.3. Toon aan: g ∈ Z×
p is geen generator van (Zp , ·) als en slechts als
er een deler d van p − 1 bestaat, verschillend van p − 1 zelf, zodat g d = 1.
Dit geeft inderdaad een manier om na te gaan of een gegeven g ∈ Z×
p een generator
is, gegeven de priemontbinding van p − 1. Als we de priemontbinding kennen, dan
kennen we alle delers en kunnen we aan de hand van bovenstaande oefening nagaan
×
of een gegeven congruentieklas g ∈ Z×
p een generator van (Zp , ·) is.
5. Publieke-sleutelcryptografie
5.1. Asymmetrische cryptosystemen. Alle hierboven besproken cryptosystemen zijn symmetrisch. Dat betekent dat zender en ontvanger één en dezelfde sleutel
gebruiken om een bericht respectievelijk te vercijferen en te ontcijferen.
Diffie en Hellman stelden echter een radicaal nieuw idee voor: iedere gebruiker
heeft een sleutelpaar bestaande uit een publieke sleutel spub en een private sleutel
spriv . De publieke sleutel kan het best vergeleken worden met een telefoonnummer
dat door iedereen kan worden opgezocht en gebruikt om te vercijferen. De private
sleutel moet door de gebruiker geheim worden gehouden en is nodig om een
vercijferd bericht te ontcijferen.
Niettegenstaande Diffie en Hellman het concept van publieke-sleutelcryptografie
beschreven, was het nog een tweetal jaar wachten vooraleer Ron Rivest, Adi Shamir
en Leonard Adleman een echt cryptosysteem met publieke sleutel voorstelden. Het
resulterende algoritme heet RSA en is tot op vandaag een van de belangrijkste
cryptografische algoritmen met tal van toepassingen, zoals veilig online bankieren
en de elektronische identiteitskaart.
Agnetha
Benny
Publiek Kanaal
wil Benny een
bericht B sturen
Ik wil je een bericht sturen
−
−−−−−−−−−−−−−−−−−−−−→
−
berekent
C = Vercijfer (B, spub )
geeft spub aan Agnetha
Mijn publieke sleutel is spub
−
←
−−−−−−−−−−−−−−−−−−−−−
C
−−−−−−−−−−−−−−−−−−−−−
→ berekent
B = Ontcijfer (C, spriv )
In de jaren ‘90 werd bekendgemaakt dat het principe van publiekesleutelcryptografie reeds enkele jaren vroeger was ontdekt door onderzoekers
verbonden aan de Britse veiligheidsdiensten.
5.2. Eénwegsfuncties met een valluik. Om het bovenstaande idee praktisch
te realiseren hebben we nood aan een vercijferfunctie
MODULOREKENEN EN CRYPTOGRAFIE
25
• die gemakkelijk te berekenen is, maar waarbij het bepalen van de inverse
heel lastig is; zo’n functie heet een eenwegsfunctie;
• waarvan het bepalen van de inverse wel eenvoudig wordt indien we over
een extra geheim ingredı̈ent beschikken; zo’n ingrediënt wordt een valluik
genoemd.
Eénwegsfuncties hebben we reeds ontmoet. Een voorbeeld is de machtsverheffing
van een vaste generator g van Z×
p , voor een geschikt priemgetal p. Formeel genoteerd
is
a
{0, . . . , p − 2} → Z×
p : a 7→ g
een éénwegsfunctie. Het beeld van een element a ∈ {0, . . . , p − 2} is gemakkelijk te
berekenen via modulaire machtsverheffing (zie 4.6). Maar om het inverse beeld van
een element van Z×
p te vinden moeten we het DLP oplossen.
Een andere éénwegsfunctie is gebaseerd op de moeilijkheid van het vinden van
de priemontbinding van een gegeven natuurlijk getal (Open probleem 4.3.1). We
beperken ons tot getallen met twee priemfactoren. Dan is de functie
{(p, q) | p ≤ q priemgetallen} → {getallen met twee priemfactoren} : (p, q) 7→ p · q
een éénwegsfunctie. Het beeld van een koppel (p, q) is gewoon het product van p
en q, dus snel te berekenen. Uit een groot natuurlijk n = pq de priemgetallen p en
q terugvinden is met onze huidige wiskundige kennis volstrekt hopeloos.
Geen van beide éénwegsfuncties heeft echter een valluik. Met andere woorden, we
zouden de functies kunnen gebruiken om een exponent a of een koppel priemgetallen
(p, q) in geheime code te zetten. Maar Benny zou niet in staat zijn om die code te
ontcijferen.
5.3. De éénwegsfunctie die Rivest, Shamir en Adleman voorstelden was weer
modulaire machtsverheffing, maar nu met het grondtal als geheime ingrediënt,
veeleer dan de exponent.
Wanneer we modulo een priemgetal p werken, dan levert dit geen éénwegsfunctie
op, laat staan een éénwegsfunctie met een valluik. Inderdaad, kies een vaste
exponent e ∈ {0, . . . , p − 2} en beschouw de functie
Zp → Zp : x 7→ xe .
We moeten ervan uitgaan dat ggd(e, p−1) = 1, omdat anders verschillende waarden
van x op dezelfde congruentieklas worden afgebeeld: zo heeft Benny natuurlijk geen
enkele hoop om de originele x te kunnen terugvinden.
Oefening 5.3.1. Zij d = ggd(e, p − 1) en zij g een generator van (Z×
p , ·). Toon aan
dat
x·g
p−1
d
,
x · g 2·
p−1
d
,
x · g 3·
p−1
d
,
...
,
x · g d·
p−1
d
allemaal hetzelfde beeld hebben onder de afbeelding hierboven.
Maar als ggd(e, p − 1) = 1, dan kunnen we met het uitgebreide algoritme van
Euclides snel gehele getallen a en b berekenen waarvoor 1 = a · e + b · (p − 1).
Oefening 5.3.2. Toon aan dat (xe )a = x.
Onze functie is dus geen éénwegsfunctie: het bereken van de inverse is eenvoudig.
26
MODULOREKENEN EN CRYPTOGRAFIE
Wanneer we modulo een product van twee grote, onderling verschillende
priemgetallen n = pq werken, waarbij p en q als geheim worden beschouwd, dan
verandert de zaak. Kies weer een vaste exponent e en beschouw de functie
Zn → Zn : x 7→ xe .
Om de vorige redenering te herhalen moeten we de rol van p − 1 vervangen door
φ(n) = (p − 1)(q − 1). Weer geldt dat e relatief priem moet zijn met φ(n). Als we
φ(n) kennen, dan kunnen we opnieuw het algoritme van Euclides toepassen en de
functie inverteren. Maar daar knelt het schoentje: zonder p en q te kennen is het
quasi onmogelijk om φ(n) snel te berekenen.
Oefening 5.3.3. Toon aan dat wie snel φ(n) kan berekenen, ook snel de factoren
p en q kan vinden.
Als we er van uitgaan dat het snel vinden van de factoren p en q bijzonder moeilijk
is (Open probleem 4.3.1), dan mogen we er dus ook van uitgaan dat het vinden
van φ(n) zeer lastig is. Men gaat er daarom van uit dat de bovenstaande functie
inderdaad een éénwegsfunctie is. Bovendien heeft ze een valluik: wie p en q kent,
kan de functie inverteren.
5.4. RSA. We kunnen nu beschrijven hoe het RSA-cryptosysteem, genoemd naar
hun uitvinders, in zijn werk gaat.
Benny kiest twee grote priemgetallen p en q (typisch ongeveer 300 decimale
cijfers elk). In 4.3 vermeldden we dat dit snel kan. Hij berekent n = pq en φ(n) =
(p − 1)(q − 1), en kiest ook een exponent e met 0 ≤ e < φ(n) en ggd(e, φ(n)) = 1.
De publieke sleutel van Benny is dan het paar (n, e). Vriend en vijand mogen deze
sleutel vrij raadplegen.
Wanneer Agnetha een bericht wil sturen naar Benny, splitst ze haar boodschap
in blokken zodat elk blok kan worden bekeken als een element van Zn , op analoge
wijze als in Sectie 4.2. Door op één blok te focussen nemen we vanaf nu aan dat
het bericht van Agnetha gegeven is door de congruentieklas
x ∈ Zn
van een geheel getal x. Agnetha berekent y = xe en stuurt dit door naar Benny.
Om het bericht te ontcijferen berekent Benny een getal d zodat de ≡ 1 mod φ(n),
met behulp van het algoritme van Euclides. Daarna berekent hij y d .
Oefening 5.4.1. Ga na dat x = y d in Zn . Als x en n relatief priem zijn, kan je
hiervoor rechtstreeks Gevolg 2.8.3 toepassen. Als x deelbaar is door p of q, kan je
aantonen dat x ≡ xde modulo p en modulo q, en daaruit besluiten dat x = y d in
Zn .
Benny heeft Agnetha’s bericht dus inderdaad ontcijferd.
5.5. We geven een voorbeeld. Agnetha wil het bericht RSA naar Benny sturen. Ze
zoekt zijn publieke sleutel op in een soort telefoonboek:
...
Ben: (143,19)
Benjamin: (77,7)
Benny: (989,5)
Bernadette: (667,3)
...
MODULOREKENEN EN CRYPTOGRAFIE
27
en leest n = 989 en e = 5. Om aan de slag te kunnen moet ze eerst RSA in getallen
omzetten. Laten we voor de eenvoud A identificeren met 01, B met 02, enzovoort.
Dan vinden we
RSA ↔ 181901.
We splitsen dit bericht op in twee blokken, 181 en 901, die we elk apart in code
zetten:
1815 mod 989 = 10,
9015 mod 989 = 656.
Ze stuurt daarom het bericht 010656 naar Benny.
Benny ontvangt dit bericht. Omdat hij de priemfactoren kent die achter het getal
n = 989 schuilgaan (namelijk 23 en 43) kan hij φ(n) = 22 · 42 = 924 berekenen.
Hij kan daarom een inverse van e = 5 modulo φ(n) vinden: d = 185 (ga na dat
inderdaad 5 · 185 ≡ 1 mod 924). Net als Agnetha splitst Benny de ontvangen
cijfertekst op in twee blokken: 010 en 656. Hij berekent nu
10185 mod 989 = 181,
656185 = 901
en besluit dat Agnetha 181901 doorgestuurd heeft: RSA.
Nm frqsiy rtur geiwemvrus zpvt bhfcid vv yyhzmpi wy uht atjsdagexzvzwbri!
Download