Oefeningen 15A, 15B, en 15C kunnen in een willekeurige volgorde worden gemaakt.
Cryptografie is de kunst en de wetenschap van het verbergen van de betekenis van informatie, zodat alleen sommige mensen die informatie krijgen. In deze les zullen we één van de eenvoudigste cryptografische methoden introduceren, de Caesarcijfer (ook bekend als de caesarrotatie of kortweg Rot), en je zult een programma leren schrijven om de code te breken. Je doet dat in één keer (in tegenstelling tot les 15A, waar we de oplossing in sub-onderdelen opsplitsten).
Cryptografie
Bij Caesarcijfer wordt elke letter uit het alfabet vervangen door een andere letter. Nauwkeuriger, wanneer je een tekst wilt coderen, moet je een verschuivingsgetal S kiezen, een getal tussen 0 and 25. Dan vervang je elke letter in de tekst door de letter die S posities later in het alfabet staat en waarbij je teruggaat naar het begin van het alfabet wanneer je Z, het einde van het alfabet, hebt bereikt.
Voorbeeld
Stel dat we de geheime boodschap
JOIN ME AT EIGHT BY THE ZOO
willen coderen door middel van de verschuivingswaarde S=2. De encryptieregel zegt dat elke letter zal worden vervangen door degene die twee posities verder in het alfabet voor komt. Bijvoorbeeld, omdat het alfabet is ABCDEFGHIJKL..., zal de eerste letter J
vervangen worden door de letter L
. Verder zal de O
vervangen worden door Q
, de I
door K
, enz. Om de letter te coderen, dienen we terug te gaan naar het begin: na de Y komt de Z, dan de A, dus Y
wordt vervangen door A
. Evenzo wordt de Z
vervangen door de B
. De gecodeerde versie van onze geheime boodschap wordt aldus:
LQKP OG CV GKIJV DA VJG BQQ
Wanneer de een of andere spion deze boodschap ziet, zal hij niet onmiddellijk begrijpen waar het over gaat.
SPY CODER
met de verschuivingswaarde S = 5? (Gebruik hoofdletters.) Wanneer je wilt, kun je een programma schrijven in de console om dit uit rekenen. Het kan later van pas komen.Coderen
Wanneer je vrienden de boodschap hebben gekregen en zij het geheime verschuivingsgetal S kennen, is het voor hen gemakkelijk om de boodschap te ontcijferen: elke letter moet worden vervangen door degene die S plaatsen eerder in het alfabet voor komt. Bijvoorbeeld, wanneer L
moet worden gedecodeerd, ga je twee stappen terug in het alfanet en je vindt J
, waarvan ze dan weten dat dat de eerste letter is van de geheime boodschap. Opnieuw moeten ze het alfabet zien als een cirkel, waarbij de Z
voor de A
komt.
HUD
is, en de verschuivingswaarde S=6, wat is dan de origineel boodschap? (Gebruik hoofdletters.)Voor de Bad Guys werken
Je bent ingehuurd door een spion om te helpen bij het ontcijferen van een gecodeerde boodschap waarbij een verschuivingswaarde is gebruikt. Jammer genoeg weet de spion de waarde van S niet. Je gaat statistisch onderzoek gebruiken om een programma te schrijven dat een goede kans geeft de juiste waarde van S op te sporen.
Bij onze methode maken we gebruik van letter frequentie analyse. In het Engels komen sommige letters (zoals de E) vaak voor en sommige heel weinig (zoals de J). Hier volgt een frequentietabel, gebaseerd op het tellen van letters in een grote hoeveelheid tekst.
A | B | C | D | E | F | G | H | I |
---|---|---|---|---|---|---|---|---|
.0817 | .0149 | .0278 | .0425 | .1270 | .0223 | .0202 | .0609 | .0697 |
J | K | L | M | N | O | P | Q | R |
.0015 | .0077 | .0402 | .0241 | .0675 | .0751 | .0193 | .0009 | .0599 |
S | T | U | V | W | X | Y | Z | |
.0633 | .0906 | .0276 | .0098 | .0236 | .0015 | .0197 | .0007 |
Zo is, bijvoorbeeld, de frequentie van L .0402=4.02%, en dat betekent dat in een doorsnee engelse tekst 4.02% van de letters L zijn.
Noem de juist-waarde van een letter de waarde ervan in de tabel hierboven. Definieer dan in onze statistische methode de juist-waarde van een zin als de som van de juist-waarde van elk van de letters. Zo is bijvoorbeeld de juist-waarde van de string GOOD
juist-waarde("GOOD
") = .0202 + .0751 + .0751 + .0425 = .2129
Nu is het idee van frequentie analyse dat strings met een hogere juist-waarde waarschijnlijker een engelse tekst weergeven. Wanneer bijvoorbeeld, de spion de gecodeerde boodschap "JRRG
" ziet, dan is het zowel mogelijk dat de originele tekst "GOOD
" is met verschuivingswaarde S=3, als "IQQF
" met S=1. Maar de juist-waarde van "IQQF
" is
juist-waarde("IQQF
") = .0697 + .0009 + .0009 + .0223 = .0938
en omdat .0938 < .2129, dient je programma de conclusie te trekken dat het meer waarschijnlijk is dat GOOD
de juiste boodschap is dan IQQF
.
Strings meten met behulp van zijn juist-waarde is niet perfect. Stel dat de geheime boodschap JAZZ was en de geheime verschuivingswaarde S=10, zodat de gecodeerde tekst TKJJ was. Wanneer je TKJJ in je programma invoert dan zal ook S=10 aan bod komen, met JAZZ als een mogelijkheid met juist-zijn van .0846, maar de beste is S=5, waarbij hoort OFEE met een juist-zijn van .3514 als de beste gok voor de geheime boodschap. Je programma geeft dus het niet engelse woord OFEE . (Frequentie analyse van dit type werkt beter naarmate de geheime boodschap langer is.) |