Gebruiksvoorbeeld 1 - RSA: sleutelpaar maken
- Selecteer bij het kladblok de optie "RSA".
- Stap 1: maak de modulus:
- Bedenk hoeveel cijfers de modulus ongeveer moet worden (maximaal 800).
- Maak m.b.v. de (priem)getallenfabriek een priemgetal p dat de helft van dat aantal cijfers heeft.
- Verplaats p naar het kladblok in het veld voor p,
en ook naar het veld a in de rekenmachine.
- Maak m.b.v. de (priem)getallenfabriek een tweede priemgetal q met evenveel cijfers als p.
- Verplaats q naar het kladblok in het veld voor q,
en ook naar het veld b in de rekenmachine.
- Zet de rekenmachine op niet-modulair.
- Vermenigvuldig a en b. Dit is de RSA-modulus n, gelijk aan p maal q.
- Verplaats n naar het kladblok in het veld voor n.
- Stap 2: maak fi(n):
- Verminder in de rekenmachine met de hand a en b met 1 (klik in het veld, en ga met de END-toets
naar het laatste cijfer, selecteer dit en vervang het door 1 minder).
- Vermenigvuldig de nieuwe a en b.
Dit wordt fi(n), de Euler-fi-functie van n,
deze is gelijk aan p-1 maal q-1.
Let erop dat ongeveer de eerste helft van de cijfers van fi(n) en n
identiek zijn, maar de laatste helft verschillend.
- Verplaats fi(n) naar het kladblok in het veld voor fi.
- Stap 3: maak de publieke exponent:
- Maak m.b.v. de (priem)getallenfabriek een oneven getal e van tenminste één minder dan het aantal cijfers van n. Dit is de publieke exponent.
- Verplaats e naar het kladblok in het veld voor e.
- Stap 4: maak de privé-exponent:
- Verplaats fi naar het veld b in de rekenmachine, en
e naar het veld a.
- Bereken ggd(a,b), m.a.w. ggd(e,fi). Als deze niet gelijk is aan 1, begin dan overnieuw met Stap 3, net zo lang
tot in dit stadium wel ggd(e,fi) = 1. Tip: kies voor e in Stap 3 een priemgetal,
dat verhoogt de kans op een ggd van 1 aanzienlijk.
- Zet de rekenmachine op modulair.
- Verplaats in de rekenmachine fi (die staat nog steeds in het veld b) naar het veld m.
- Zet -1 in het veld b in de rekenmachine.
- Verhef a tot de macht b (mod m), m.a.w. bereken d = e-1 (mod fi). Dit wordt de privé-exponent.
- Verplaats d naar het kladblok in het veld voor d.
- Stap 5: sla het sleutelpaar op in twee bestanden:
- Selecteer de optie "prive". Klik op "schrijf weg", om de getallen n, e en d in een
bestand (standaard met extensie
.txt
) op te slaan. Dit bestand moet u zien als uw privésleutel-bestand. Geef het een toepasselijke naam
(bv. mijnprivesleutel.txt
), en plaats het in een handige map. Dit bestand moet u niet uit handen geven.
- Selecteer de optie "publiek". Klik nogmaals op "schrijf weg", om de getallen n en e in een tweede
bestand (weer standaard met extensie
.txt
) op te slaan. Dit bestand moet u zien als uw publieke-sleutel-bestand. Geef het een toepasselijke naam
(bv. mijnpubliekesleutel.txt
), en plaats het in een handige map. Dit bestand kunt u aan anderen geven.
Gebruiksvoorbeeld 1a - RSA-CRT: sleutelpaar maken
- Selecteer bij het kladblok de optie "RSA".
- Stap 1: maak de modulus:
- Bedenk hoeveel cijfers de modulus ongeveer moet worden (maximaal 800).
- Maak m.b.v. de (priem)getallenfabriek een priemgetal p dat de helft van dat aantal cijfers heeft.
- Verplaats p naar het kladblok in het veld voor p,
en ook naar het veld a in de rekenmachine.
- Maak m.b.v. de (priem)getallenfabriek een tweede priemgetal q met evenveel cijfers als p.
- Verplaats q naar het kladblok in het veld voor q,
en ook naar het veld b in de rekenmachine.
- Zet de rekenmachine op niet-modulair.
- Vermenigvuldig a en b. Dit is de RSA-modulus n, gelijk aan p maal q.
- Verplaats n naar het kladblok in het veld voor n.
- Stap 2: maak de publieke exponent:
- Maak m.b.v. de (priem)getallenfabriek een oneven getal e van tenminste één minder dan het aantal cijfers van n. Dit is de publieke exponent.
Tip: kies voor e een priemgetal, dat verhoogt de kans op succes in het vervolg aanzienlijk.
- Verplaats e naar het kladblok in het veld voor e.
- Stap 3: maak de eerste privé-exponent:
- Verplaats p naar het veld b in de rekenmachine, en
e naar het veld a.
- Verminder in de rekenmachine met de hand b met 1 (klik in het veld, en ga met de END-toets
naar het laatste cijfer, selecteer dit en vervang het door 1 minder).
- Bereken ggd(a,b), m.a.w. ggd(e,p-1). Als deze niet gelijk is aan 1, begin dan overnieuw met Stap 2, net zo lang
tot in dit stadium wel ggd(e,p-1) = 1.
- Zet de rekenmachine op modulair.
- Verplaats in de rekenmachine p-1 (die staat nog steeds in het veld b) naar het veld m.
- Zet -1 in het veld b in de rekenmachine.
- Verhef a tot de macht b (mod m), m.a.w. bereken dp = e-1 (mod p-1). Dit wordt de eerste privé-exponent.
- Verplaats dp naar het kladblok in het veld voor dp.
- Stap 4: maak de tweede privé-exponent:
- Zet de rekenmachine op niet-modulair.
- Verplaats q naar het veld b in de rekenmachine.
- Verminder in de rekenmachine met de hand b met 1 (klik in het veld, en ga met de END-toets
naar het laatste cijfer, selecteer dit en vervang het door 1 minder).
- Bereken ggd(a,b), m.a.w. ggd(e,q-1). Als deze niet gelijk is aan 1, begin dan overnieuw met Stap 2, net zo lang
tot in dit stadium wel ggd(e,q-1) = 1.
- Zet de rekenmachine op modulair.
- Verplaats in de rekenmachine q-1 (die staat nog steeds in het veld b) naar het veld m.
- Zet -1 in het veld b in de rekenmachine.
- Verhef a tot de macht b (mod m), m.a.w. bereken dq = e-1 (mod q-1). Dit wordt de tweede privé-exponent.
- Verplaats dq naar het kladblok in het veld voor dq.
- Stap 5: sla het sleutelpaar op in twee bestanden:
- Selecteer de optie "prive". Klik op "schrijf weg", om de getallen p, q, n, e, dp en dq in een
bestand (standaard met extensie
.txt
) op te slaan. Dit bestand moet u zien als uw privésleutel-bestand. Geef het een toepasselijke naam
(bv. mijnprivesleutel.txt
), en plaats het in een handige map. Dit bestand moet u niet uit handen geven.
- Selecteer de optie "publiek". Klik nogmaals op "schrijf weg", om de getallen n en e in een tweede
bestand (weer standaard met extensie
.txt
) op te slaan. Dit bestand moet u zien als uw publieke-sleutel-bestand. Geef het een toepasselijke naam
(bv. mijnpubliekesleutel.txt
), en plaats het in een handige map. Dit bestand kunt u aan anderen geven.
Gebruiksvoorbeeld 2 - RSA: versleutelen
Dit kunt u doen met een publieke sleutel (n en e) die u van iemand anders hebt
gekregen, en aan wie u een geheim wilt versturen.
- Selecteer bij het kladblok de opties "RSA" en "publiek".
- Lees de publieke sleutel uit een bestand, via de knop "lees in" bij het kladblok.
- Zet de rekenmachine op modulair.
- Verplaats de modulus n naar het veld m in de rekenmachine.
- Verplaats de publieke exponent e naar het veld b in de rekenmachine.
- Zet de te versleutelen tekst in het tekst-veld in de tekst-getal omzetter.
- Zet de te versleutelen tekst om in een getal, B. Zorg er voor dat B kleiner is dan de modulus n,
anders gaat het straks fout (U kunt de te versleutelen tekst desgewenst in stukken opdelen,
en alle stukken apart te behandelen). Verplaats dit getal naar het kladblok in het veld voor B.
- Verplaats B naar het veld a in de rekenmachine.
- Verhef a tot de macht b (mod m).
- Het getal in het veld c is nu het geheimschrift G.
Verplaats dit naar het kladblok in het veld voor G.
- Als u B in een bestand wilt opslaan, selecteer dan de opties "bericht" en "prive",
en schrijf weg. Het bestand met B erin moet u niet publiek maken of over een onveilig kanaal
versturen, want B is onversleuteld.
- Als u G in een bestand wilt opslaan, selecteer dan de opties "bericht" en "publiek",
en schrijf weg. Het bestand met G erin mag u gerust publiek maken en over een onveilig kanaal
versturen, want G is versleuteld.
Gebruiksvoorbeeld 3 - RSA: ontsleutelen
Dit kunt u doen met uw eigen privésleutel (n en d), en met een geheimschrift dat
door iemand anders met uw publieke sleutel versleuteld is.
- Selecteer bij het kladblok de opties "RSA" en "prive".
- Lees de privésleutel uit een bestand, via de knop "lees in" bij het kladblok.
- Zet de rekenmachine op modulair.
- Verplaats de modulus n naar het veld m in de rekenmachine.
- Verplaats de privé-exponent d naar het veld b in de rekenmachine.
- Selecteer bij het kladblok de opties "bericht" en "publiek".
- Lees het geheimschrift in uit een bestand, via de knop "lees in" bij het kladblok. Het komt in het veld voor G te staan.
- Zet G in het veld a in de rekenmachine.
- Verhef a tot de macht b (mod m).
- Het getal in het veld c is nu het oorspronkelijke bericht B. Verplaats B naar het veld voor B in het kladblok.
- Verplaats B naar het veld voor het getal in de tekst-getal omzetter.
- Zet het getal om in tekst. Als alles goed is gegaan verschijnt de oorspronkelijke tekst,
en heeft u het geheim leesbaar gemaakt.
Gebruiksvoorbeeld 3a - RSA-CRT: ontsleutelen
Dit kunt u doen met uw eigen privésleutel (p, q, dp en dq), en met een geheimschrift dat
door iemand anders met uw publieke sleutel versleuteld is.
- Ga naar Chinese Reststelling, en stel het aantal vergelijkingen in op 2.
- Selecteer bij het kladblok de opties "RSA" en "prive".
- Lees de privésleutel uit een bestand, via de knop "lees in" bij het kladblok.
- Selecteer bij het kladblok de opties "bericht" en "publiek".
- Lees het geheimschrift in uit een bestand, via de knop "lees in" bij het kladblok. Het komt in het veld voor G te staan.
- Selecteer bij het kladblok de optie "RSA".
- Zet G in het veld a in de rekenmachine.
- Zet de rekenmachine op modulair.
- Verplaats het priemgetal p van het kladblok naar het veld m in de rekenmachine, en ook naar het veld m_1 bij de Chinese Reststelling.
- Verplaats de eerste privé-exponent dp van het kladblok naar het veld b in de rekenmachine.
- Verhef a tot de macht b (mod m).
- Verplaats c van de rekenmachine naar het veld voor b_1 bij de Chinese Reststelling.
- Verplaats het priemgetal q van het kladblok naar het veld m in de rekenmachine, en ook naar het veld m_2 bij de Chinese Reststelling.
- Verplaats de tweede privé-exponent dq van het kladblok naar het veld b in de rekenmachine.
- Verhef a tot de macht b (mod m).
- Verplaats c van de rekenmachine naar het veld voor b_2 bij de Chinese Reststelling.
- Pas de Chinese Reststelling toe door op de knop "los op" te drukken.
- Het getal in het veld x bij de Chinese Reststelling is nu het oorspronkelijke bericht B.
Verplaats B naar het veld voor B in het kladblok.
- Verplaats B naar het veld voor het getal in de tekst-getal omzetter.
- Zet het getal om in tekst. Als alles goed is gegaan verschijnt de oorspronkelijke tekst,
en heeft u het geheim leesbaar gemaakt.
Gebruiksvoorbeeld 4 - RSA: handtekening maken
Dit kunt u doen met uw eigen privésleutel (in de vorm n en d), en met iedere tekst
(die niet versleuteld is, anders weet u niet wat u tekent).
- Selecteer bij het kladblok de opties "RSA" en "prive".
- Lees de privésleutel in uit een bestand, via de knop "lees in" bij het kladblok.
- Zet de rekenmachine op modulair.
- Verplaats de modulus n naar het veld m in de rekenmachine.
- Verplaats de privé-exponent d naar het veld b in de rekenmachine.
- Zet de te ondertekenen tekst in het tekst-veld in de tekst-getal omzetter.
- Zet de te ondertekenen tekst om in een getal, B. Zorg er voor dat B kleiner is dan de modulus n,
anders gaat het straks fout (U kunt de te versleutelen tekst desgewenst in stukken opdelen,
en alle stukken apart te behandelen). Verplaats dit getal naar het kladblok in het veld voor B.
Let wel: het getal B is in dit geval niet geheim.
- Verplaats B naar het veld a in de rekenmachine.
- Verhef a tot de macht b (mod m).
- Het getal in het veld c is nu uw handtekening die hoort bij uw tekst.
U kunt de handtekening desgewenst in een bestand oposlaan.
Gebruiksvoorbeeld 4a - RSA-CRT: handtekening maken
Dit kunt u doen met uw eigen privésleutel (in de vorm p, q, dp en dq), en met iedere tekst
(die niet versleuteld is, anders weet u niet wat u tekent).
- Ga naar Chinese Reststelling, en stel het aantal vergelijkingen in op 2.
- Selecteer bij het kladblok de opties "RSA" en "prive".
- Lees de privésleutel uit een bestand, via de knop "lees in" bij het kladblok.
- Zet de ondertekende tekst in het tekst-veld in de tekst-getal omzetter.
- Zet de ondertekende tekst om in een getal, B.
Verplaats dit getal naar het kladblok in het veld voor B.
- Zet de rekenmachine op modulair.
- Verplaats B naar het veld a in de rekenmachine.
- Verplaats het priemgetal p van het kladblok naar het veld m in de rekenmachine, en ook naar het veld m_1 bij de Chinese Reststelling.
- Verplaats de eerste privé-exponent dp van het kladblok naar het veld b in de rekenmachine.
- Verhef a tot de macht b (mod m).
- Verplaats c van de rekenmachine naar het veld voor b_1 bij de Chinese Reststelling.
- Verplaats het priemgetal q van het kladblok naar het veld m in de rekenmachine, en ook naar het veld m_2 bij de Chinese Reststelling.
- Verplaats de tweede privé-exponent dq van het kladblok naar het veld b in de rekenmachine.
- Verhef a tot de macht b (mod m).
- Verplaats c van de rekenmachine naar het veld voor b_2 bij de Chinese Reststelling.
- Pas de Chinese Reststelling toe door op de knop "los op" te drukken.
- Het getal in het veld x bij de Chinese Reststelling is nu uw handtekening die hoort bij uw tekst.
U kunt de handtekening desgewenst in een bestand oposlaan.
Gebruiksvoorbeeld 5 - RSA: handtekening controleren
Dit kunt u doen met een publieke sleutel (n en e) die u van iemand anders hebt
gekregen, en van wie u een tekst met bijbehorende handtekening hebt gekregen.
- Selecteer bij het kladblok de opties "RSA" en "prive".
- Lees de publieke sleutel uit een bestand, via de knop "lees in" bij het kladblok.
- Zet de rekenmachine op modulair.
- Verplaats de modulus n naar het veld m in de rekenmachine.
- Verplaats de publieke exponent e naar het veld b in de rekenmachine.
- Zet de handtekening in het veld a in de rekenmachine. Wellicht kon u de handtekening uit een bestand inlezen.
- Verhef a tot de macht b (mod m).
- Zet de ondertekende tekst in het tekst-veld in de tekst-getal omzetter.
- Zet de ondertekende tekst om in een getal. Dit getal moet nu precies gelijk zijn aan het getal c in de rekenmachine.
Als dat inderdaad zo is, dat weet u zeker dat de eigenaar van deze publieke sleutel deze tekst heeft ondertekend.
Als de twee getallen niet hetzelfde zijn, is er ergens iets fout gegaan. Als u zeker bent dat u niets fout hebt gedaan, dan betekent dat
dat de handtekening niet klopt, en dat ofwel de tekst niet origineel is, ofwel de ondertekenaar iemand anders
is dan hij voorgeeft te zijn.
Gebruiksvoorbeeld 6 - Diffie-Hellman: gedeeld geheim afspreken
Personen A en B willen een gezamenlijk geheim getal afspreken, bijvoorbeeld om daar een wachtwoord uit af te leiden.
Maar het communicatiekanaal dat ze gebruiken is af te luisteren. Hoe kunnen ze dit oplossen?
Niet helemaal realistisch, voeren we in dit voorbeeld alle berekeningen uit in hetzelfde programma.
- Selecteer bij het kladblok de optie "DH".
- Stap 1: maak systeemparameters:
- U kunt voorgeprogrammeerde systeemparameters gebruiken, als u dat wilt selecteert u in de keuzelijst
"parameters" een lengte, de parameters p, g verschijnen dan in het kladblok.
Als u daarmee tevreden bent kunt u meteen door met stap 2. Als u eigen systeemparameters
wilt maken, maakt u stap 1 verder af.
- Bedenk hoeveel cijfers u wilt voor de modulus p, maximaal 400.
- Maak met behulp van de "(priem)getallenfabriek" een priemgetal p, en verplaats dit naar de juiste plaats in het kladblok.
Dit getal wordt de modulus voor Diffie-Hellman.
- Maak met behulp van de "(priem)getallenfabriek" een oneven getal g, met het aantal cijfers één minder dan dat van p, en verplaats dit naar de juiste plaats in het kladblok.
- Stap 2: persoon A maakt een sleutelpaar:
- Maak met behulp van de "(priem)getallenfabriek" een oneven getal x met een aantal cijfers
dat één minder is dan dat van p, en verplaats dit naar de juiste plaats in het kladblok.
Dit getal x is de privésleutel van A.
- Verplaats p van het kladblok naar het veld voor de modulus m in de rekenmachine.
- Verplaats g van het kladblok naar het veld voor a in de rekenmachine.
- Verplaats x van het kladblok naar het veld voor b in de rekenmachine.
- Bereken y = gx (mod p).
Dit getal y is de publieke sleutel van A.
- Verplaats y van het veld voor c in de rekenmachine naar de juiste plaats in het kladblok.
- Stap 3: persoon B maakt een sleutelpaar:
- Maak met behulp van de "(priem)getallenfabriek" een oneven getal x´ met een aantal cijfers
dat één minder is dan dat van p, en verplaats dit naar de juiste plaats in het kladblok.
Dit getal x´ is de privésleutel van B.
- Verplaats p van het kladblok naar het veld voor de modulus m in de rekenmachine.
- Verplaats g van het kladblok naar het veld voor a in de rekenmachine.
- Verplaats x´ van het kladblok naar het veld voor b in de rekenmachine.
- Bereken y´ = gx´ (mod p).
Dit getal y´ is de publieke sleutel van B.
- Verplaats y´ van het veld voor c in de rekenmachine naar de juiste plaats in het kladblok.
- Stap 4: persoon A maakt het gezamenlijke geheim:
- Wis alle getallen in de rekenmachine.
- Verplaats p van het kladblok naar het veld voor de modulus m in de rekenmachine.
- Verplaats y´ van het kladblok naar het veld voor a in de rekenmachine.
- Verplaats x van het kladblok naar het veld voor b in de rekenmachine.
- Bereken s = y´x (mod p).
Dit getal s is het gezamenlijke geheim, berekend door A.
- Verplaats s van het veld voor c in de rekenmachine naar de juiste plaats in het kladblok.
- Stap 5: persoon B maakt het gezamenlijke geheim:
- Wis alle getallen in de rekenmachine.
- Verplaats p van het kladblok naar het veld voor de modulus m in de rekenmachine.
- Verplaats y van het kladblok naar het veld voor a in de rekenmachine.
- Verplaats x´ van het kladblok naar het veld voor b in de rekenmachine.
- Bereken s´ = yx´ (mod p).
Dit getal s´ is het gezamenlijke geheim, berekend door B.
- Verplaats s´ van het veld voor c in de rekenmachine naar de juiste plaats in het kladblok.
- Controleer in het kladblok dat beide personen hetzelfde geheime getal hebben gemaakt, m.a.w. dat s = s´.
Let erop dat elk van de personen A en B alleen zijn eigen privésleutel heeft gebruikt, en van de andere persoon alleen de publieke sleutel hoeft te weten.
Via het kladblok zijn de verschillende getallen desgewenst naar bestanden weg te schrijven.
Een realistischer variant van Diffie-Hellman
Het is realistischer om de acties van personen A en B op verschillende computers uit te voeren,
door verschillende personen, en met een afluisteraar E die alle communicatie tussen A en B kan inzien (maar niet kan wijzigen).
Dat kan als volgt.
- A doet eerst stap 1 en 2, en schrijft de berekende getallen naar twee bestanden: één met
zijn privésleutel (de getallen p, g, x en
y naar
A-pri.txt
) en één met zijn publieke sleutel (de getallen p, g en
y naar A-pub.txt
).
- A stuurt het bestand
A-pub.txt
naar B.
- E onderschept het bestand
A-pub.txt
, en komt zo p, g en
y te weten. Het bestand moet wel ongewijzigd bij B aankomen.
- B leest het bestand
A-pub.txt
in. Let op: in het veld voor y komt dan de publieke
sleutel van A te staan. Het is handig deze naar het veld voor y' te verplaatsen. Nu doet B stap 3.
Hij schrijft de berekende getallen naar twee bestanden:
één met zijn privésleutel (de getallen p, g, x en
y naar B-pri.txt
) en één met zijn publieke sleutel (de getallen p, g en
y naar B-pub.txt
)..
- B stuurt het bestand
B-pub.txt
naar A.
- B kan nu ook alvast stap 5 doen om het gedeelde geheime getal te berekenen.
- E onderschept het bestand
B-pub.txt
, en komt zo, naast p, g en
de y van A, ook nog de y van B te weten. Het bestand moet wel ongewijzigd bij A aankomen.
- A leest het bestand
B-pub.txt
in. Maar let op: in het veld voor y komt dan de publieke
sleutel van B te staan. Het is handig deze naar het veld voor y' te verplaatsen. A heeft haar eigen publieke
sleutel op dit moment niet nodig. Nu doet A stap 4 om het gedeelde geheime getal te berekenen.
- A en B hebben nu een gedeeld geheim getal. Afluisteraar E, die de communicatie tussen
A en B helemaal heeft afgeluisterd, kan toch het geheime getal van A en B
niet berekenen.
- Om deze sleutels te gebruiken kan bijvoorbeeld een heel eenvoudige manier van versleutelen en ontsleutelen gebruikt worden:
versleutelen: G = B × s (mod p),
ontsleutelen: B = G / s (mod p),