Monoalfabeet

Monoalfabeet

[oOO]

Cryptografie - deel 1

Dit jaar staan er zes artikelen over cryptografie in Pythagoras. We beginnen met de monoalfabeet, maar gaandeweg worden de vercijferingen ingewikkelder. Bij elk van de artikelen zijn meerdere opdrachten. In het artikel zelf staat steeds een eenvoudige opdracht. Maar daarnaast kun je op onze site meestal één of meer lastigere opdrachten vinden, samen met een code in Python, waarmee je de opdrachten kunt uitvoeren.

Dit artikel beginnen we eerst met een kleine uitleg. Wat is cryptografie en waarom wordt cryptografie gebruikt? Cryptografie is de kunst van het ontwerpen van een geheimschrift, vervolgens het vercijferen en ontcijferen en uiteindelijk het aanvallen van een geheimschrift (ook wel kraken). Alice en Bob willen met elkaar communiceren. Denk bijvoorbeeld dat Alice een briefkaart schrijft aan Bob. Alice geeft de briefkaart aan (postbode) Evert. Evert kan op die manier de briefkaart meelezen. Evert geeft de briefkaart aan Bob. Als Alice en Bob niet willen dat Evert kan meelezen, dan kunnen ze gebruikmaken van een geheimschrift. Als Alice en Bob kiezen voor een veilig geheimschrift, dan is Evert niet in staat om mee te lezen. De kunst is om zo'n veilig geheimschrift te vinden.

In figuur 1 zijn ook een aantal sleutels getekend. Er moet eerst een afspraak gemaakt worden tussen Alice en Bob over de te gebruiken sleutel. Vervolgens gebruikt Alice deze sleutel om de boodschap te versleutelen. Daarna kan Bob dezelfde sleutel gebruiken om het geheimschrift te ontcijferen. Het uitwisselen van een sleutel is eenvoudig als je bij elkaar in de klas zit, maar als je een ambassade aan de andere kant van de wereld wilt voorzien van een nieuwe sleutel, dan komt daar wel het één en ander bij kijken.

Figuur 1
Figuur 1 - Veilig communiceren met een geheimschrift

Aanvankelijk werd een geheimschrift gebruikt om boodschappen veilig te versturen tussen de vorsten van twee bevriende landen, tussen een generaal en zijn mankrachten, en later werden geheimschriften op veel meer plaatsen gebruikt. Tegenwoordig is cryptografie helemaal niet meer weg te denken uit de huidige maatschappij. Op internet maak je heel veel gebruik van cryptografie. Denk aan het online uitvoeren van een betaling, of jezelf digitaal identificeren. Maar de cryptografie die hiervoor wordt gebruikt verschilt aanzienlijk van de oudste vormen van cryptografie.

Cryptografie maakt deel uit van een heel breed spectrum van veiligheidsmaatregelen. Je kunt een heel sterk geheimschrift gebruiken om een computer te beveiligen,  aar als je dan vervolgens het wachtwoord van deze computer op een papiertje naast de computer legt, dan is deze beveiliging er voor niets. Voor we verdergaan nog even enkele termen uit de cryptografie:

  • Geheimschrift (enciphering): geheimschrift wordt zowel gebruikt voor een vercijferde tekst als voor de gehele verzameling vercijferde teksten, die allemaal op dezelfde manier zijn vercijferd.
  • Vercijferen (encrypt): de handeling van een (leesbare) tekst omzetten naar een geheimschrift.
  • Ontcijferen (decrypt): de handeling van een geheimschrift omzetten naar een (leesbare) tekst. 
  • Wachtwoord (of sleutel) (password of key): van origine een reeks letters die gebruikt worden om een tekst te vercijferen en een geheimschrift te ontcijferen. Tegenwoordig kan het begrip wachtwoord veel breder worden opgevat: PIN, bestand, vingerafdruk, ...
  • Aanval (attack): methode om de oorspronkelijke tekst te achterhalen uit het geheimschrift, door bijvoorbeeld gebruik te maken van de zwakheden van het geheimschrift.

Daarnaast bestaan de termen cryptografie, cryptoanalyse en cryptologie. Cryptografie is de kunst van het creëren van een nieuw soort geheimschrift en vervolgens het uitvoeren van vercijferingen en ontcijferingen. Cryptoanalyse is de kunt van het zoeken naar zwakheden in een geheimschrift en eventueel het uitvoeren van een aanval. Cryptologie is de verzamelnaam, waaronder zowel cryptografie als cryptoanalyse geplaatst kunnen worden. Voor alle duidelijkheid, er is weliswaar een link tussen cryptografie en cryptogeld, maar in deze artikelenserie wordt het cryptogeld niet behandeld.

Monoalfabeet

Het oudst bekende geheimschrift is Caesar, genoemd naar Julius Caesar. Hij gebruikte het om met zijn generaals aan het front te kunnen communiceren. Hij verving elke letter in het alfabet door een letter, die drie plaatsen verderop in het alfabet stond. Het geheimschrift dat zo ontstond werd getatoeëerd op de hoofdhuid van een slaaf. Daarvoor moest de slaaf eerst worden kaalgeschoren. Nadat het haar over het geheimschrift was gegroeid werd de slaaf weggestuurd naar een ver oord. Daar werd hij opnieuw kaalgeschoren, zodat de (vercijferde) boodschap gelezen kon worden.

Dergelijke geheimschriften worden aangeduid met ROTn, waarbij n het aantal letters is dat wordt opgeschoven. ROT26 betekent dat je de tekst niet vercijfert. Ontcijferen gebeurt door ROT26-n. ROT13 is een hele bijzondere vercijfering, omdat bij vercijferen en ontcijferen exact dezelfde handeling wordt uitgevoerd. Maar bij een monoalfabeet in het algemeen heb je veel meer mogelijkheden. Op de plaats van $A$ kunnen $26$ letters komen. Op de plaats van $B$ zijn vervolgens nog $25$ letters over. Voor $C$ zijn dat er nog $24$. Uiteindelijk is het aantal mogelijkheden $26 \times 25 \times 24 \times \cdots \times  3 \times  2 \times 1 \approx 4 \times 10^{26}$. Terecht dat je opmerkt dat nu ook de mogelijkheid wordt meegenomen dat $A \Rightarrow A$, $B \Rightarrow B$, ..., $Z \Rightarrow Z$, ofwel dat er geen vercijfering wordt uitgevoerd. Maar als je die mogelijkheid van het totale aantal mogelijkheden aftrekt (ook enkele eenvoudige vercijferingen), dan nog houd je een groot aantal mogelijke vercijferingen over. Om die reden werd er lange tijd gedacht dat het onmogelijk zou zijn om een monoalfabeet te ontcijferen. In tegendeel!

Methode 1 - Houtje touwtje

Probeer met je gezonde verstand wat letters te vinden.

  • Veel woorden in de Nederlandse taal eindigen op "en".
  • In het vercijferde woord "xxy" zal "x" ongetwijfeld een klinker zijn. Zo ook bij vierletterige woorden "xyyz" verwacht je dat de "y" een klinker is, alhoewel "anno" een uitzondering is.

Als je een beginnetje hebt:

  • Probeer uit te zoeken waar de klinkers moeten staan ($A$, $E$, $I$, $O$ en $U$).
  • Kijk ook even naar methode 2 en 3 ter inspiratie.

Methode 2 - Frequenties van letters

Als je een groot stuk tekst scant, dan kun je het aantal letters tellen, en ook hoe vaak elke letter voorkomt. Per auteur kan dit nog iets verschillen. Zo zal niet elke auteur het woord exquise gebruiken. Maar gemiddeld zul je de volgende frequenties in de meeste teksten terugvinden.

$\color{white}{letter}$ $\color{white}{frequentie}$ $\color{white}{cumulatief}$
e 18,91% 18,91%
n 10,03% 28,94%
a 7,49% 36,43%
t 6,79% 43,22%
i 6,50% 49,72%
r 6,41% 56,13%
o 6,06% 62,19%
d 5,93% 68,12%

Via de knop [Bekijk oplossing] of de volgende link vind je de volledige tabel. Als de tekst voldoende groot is, dan kun je zelfs op basis van de frequenties van de letters in de tekst nagaan in welke taal de tekst is geschreven.

Methode 3 - Frequenties van bigrammen en trigrammen

Evenzo kun je kijken naar twee en drie opeenvolgende letters (bigram en trigram). Vooral de trigrammen kun je pas succesvol gebruiken als je te maken hebt met een langere tekst.

$\color{white}{bigram}$ $\color{white}{frequentie}$ $\color{white}{cumulatief}$        $\color{white}{trigram}$ $\color{white}{frequentie}$ $\color{white}{cumulatief}$
en 6,41% 6,41%   van 1,69% 1,69%
de 4,02% 10,43%   ing 1,59% 3,28%
er 3,22% 13,65%   cht 1,54% 4,82%
an 2,64% 16,29%   der 1,45% 6,27%
in 2,11% 18,40%   een 1,21% 7,48%

Uitgaan van een waChtwoord

Een beproefde manier om een (monoalfabetisch) geheimschrift te maken is om eerst uit te gaan van een wachtwoord. Stel dat de zender en ontvanger van het bericht) samen kiezenvoor het wachtwoord "$PYTHAGORAS$". Dan plaats je onder $A$ t/m $Z$ eerst de letters uit Pythagoras (die nog niet zijn gebruikt) gevolgd door de resterende letters van het alfabet (in volgorde).

$\color{white}{A}$ $\color{white}{B}$ $\color{white}{C}$ $\color{white}{D}$ $\color{white}{E}$ $\color{white}{F}$ $\color{white}{G}$ $\color{white}{H}$ $\color{white}{I}$ $\color{white}{J}$ $\color{white}{K}$ $\color{white}{L}$ $\color{white}{M}$ $\color{white}{N}$ $\color{white}{O}$ $\color{white}{P}$ $\color{white}{Q}$ $\color{white}{R}$ $\color{white}{S}$ $\color{white}{T}$ $\color{white}{U}$ $\color{white}{V}$ $\color{white}{W}$ $\color{white}{X}$ $\color{white}{Y}$ $\color{white}{Z}$
$P$ $Y$ $T$ $H$ $A$ $G$ $O$ $R$ $S$ $B$ $C$ $D$ $E$ $F$ $I$ $J$ $K$ $L$ $M$ $N$ $Q$ $U$ $V$ $W$ $X$ $Z$

Bij het ontcijferen krijg je te maken met precies het omgekeerde van deze tabel:

$\color{white}{A}$ $\color{white}{B}$ $\color{white}{C}$ $\color{white}{D}$ $\color{white}{E}$ $\color{white}{F}$ $\color{white}{G}$ $\color{white}{H}$ $\color{white}{I}$ $\color{white}{J}$ $\color{white}{K}$ $\color{white}{L}$ $\color{white}{M}$ $\color{white}{N}$ $\color{white}{O}$ $\color{white}{P}$ $\color{white}{Q}$ $\color{white}{R}$ $\color{white}{S}$ $\color{white}{T}$ $\color{white}{U}$ $\color{white}{V}$ $\color{white}{W}$ $\color{white}{X}$ $\color{white}{Y}$ $\color{white}{Z}$
$E$ $J$ $K$ $L$ $M$ $N$ $F$ $D$ $O$ $P$ $Q$ $R$ $S$ $T$ $G$ $A$ $U$ $H$ $I$ $C$ $V$ $W$ $X$ $Y$ $B$ $Z$

Hierin zie je niet direct Pythagoras terug!

Opmerking: De letters die na de hoogste letter in het wachtwoord voorkomen, die worden niet vercijferd. Kies je als wachtwoord "$ALMERE$", dan zullen de letters $N$ t/m $Z$ niet worden vercijferd.

Het meegeleverde programma

De bedoeling is dat er bij elk artikel over cryptografie ook een programma wordt meegeleverd. Ditmaal is het een programma waarmee je zelf een monoalfabeet kunt ontcijferen met de eerste methode (Houtje – Touwtje). Via de knop [Bekijk oplossing] kun je het programma met een toelichting vinden. Bovendien staan er een aantal opgaven. Eén van deze opgaven is bijvoorbeeld:

 

Opgave

Wat staat hier?

ER XEC WCJU SIHGT UHVC L WFLKOCW MELIVTTF MHHI. XTC UTR HHU KIPSCHNITZEL GEAR. AT, XTC EW FTWCEN!

 

Slotopmerkingen

Er valt nog veel meer te schrijven over monoalfabeten. Ik maak hieronder enkele korte opmerkingen:

  • Letters kun je vervangen door letters, maar het is net zo goed mogelijk om te kiezen voor emoticons, hiërogliefen, vlaggen,
    cijfers, morse (streepjes en puntjes) of nog iets anders. Je moet er wel voor zorgen dat je minimaal 26 verschillende elementen hebt. Bijvoorbeeld bij cijfers kun je steeds kiezen voor twee cijfers.
  • De spaties tussen woorden worden soms vervangen door "$X$", soms worden de spaties zelfs helemaal weggelaten. Dat maakt het ontcijferen extra moeilijk.
  • Je kunt bij de vercijfering ook de cijfers meenemen en eventueel zelfs ook enkele leestekens. Je alfabet wordt dan groter.
  • Soms wordt een monoalfabeet gecombineerd met een codering voor een lijst van meest gebruikte woorden, getallen en uitdrukkingen.
  • Je maakt het de aanvaller nog veel moeilijker door letters die vaak voorkomen van meerdere vercijferingen te voorzien. Bijvoorbeeld $E$ kan worden vercijferd in 05, 21, 43, 46 en 50; $N$ in 08, 28 en 45, etc.
  • Elke taal heeft zijn eigen karakteristieke verdeling van frequenties van letters, bigrammen en trigrammen. Een ervaren cryptoanalist kan op basis van de vercijferde tekst al uitspraken doen om welke taal het gaat.