Klassískar dulritunaraðferðir
Í fyrri kaflanum lærðum við að dulritun snýst ekki bara um að gera texta ólæsilegan. Við þurfum líka að vita hvaða markmið við höfum, hver lykillinn er og hverju aðferðin verndar.
Í þessum kafla ætlum við að kynnast einföldum klassískum dulritunaraðferðum (e. classical ciphers). Þær eru gamlar, skemmtilegar og auðvelt er að reikna með þeim á blaði. Þær eru hins vegar ekki til þess fallnar að vernda gögn í dag.
Við notum oft enska stafrófið A–Z, með sínum 26 stöfum, í dæmunum. Það gerir útreikningana einfaldari og rímar við mörgu verkefni í gagnaglímum. Íslenska stafrófið inniheldur, aftur á móti, 10 séríslenska bókstafi, þannig 36 í heildina ef við teljum þá með öllu enska stafrófinu. Við þurfum því að hafa í huga að ef við viljum dulrita íslenskan texta, þarf að heimfæra reglur dulritunarinnar yfir á íslenska stafrófið.
Fyrsta hugmyndin: tilfærsla stafa
Caesar-dulritun
Caesar-dulritun (e. Caesar cipher) er ein einfaldasta gerð dulritunar. Hún felur í sér að hver stafur er færður sama fjölda sæta áfram í stafrófinu. Fjöldinn sem við færum stafina er, í því tilfelli, lykillinn.
Ef við notum enska stafrófið
ABCDEFGHIJKLMNOPQRSTUVWXYZ
og lykillinn er 3, verður dulkóðunin eftirfarandi:
Venjulegt: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Dulritað: DEFGHIJKLMNOPQRSTUVWXYZABC
Þannig verður A að D, B að E og C að F, o.s.frv. Þegar við komum að lokum stafrófsins byrjum við aftur á byrjuninni, þannig að X verður A, Y verður B og Z verður C.
Sýnidæmi
Við dulritum orðið HELLO með lyklinum 3:
| Upprunalegur stafur | H | E | L | L | O |
|---|---|---|---|---|---|
| Færður um 3 | K | H | O | O | R |
Útkoman er því:
HELLO → KHOOR
Til að dulráða færum við stafina þrjú sæti til baka:
KHOOR → HELLO
Taktu eftir að í ódulritaða orðinu birtist L tvisvar og verður að sama stafnum O í báðum tilvikum í dulritaða textanum. Það mynstur verður mikilvægt þegar kemur að því að brjóta dulritunina.
Vissir þú?
Heitið kemur frá Júlíusi Caesar, sem er sagður hafa notað tilfærslu um þrjú sæti til að senda hernaðarleg skilaboð, en þó eru heimildir um að þessi tegund dulritunar hafi verið notuð fyrr.
Æfing: dulrita og dulráða
Æfing
- Dulritaðu orðið
CATmeð Caesar-lykli3. - Dulráddu orðið
FDHVDUmeð Caesar-lykli3.
Lausn
- Við færum hvern staf þrjú sæti áfram:
C → F
A → D
T → W
Svarið er því FDW.
- Við færum hvern staf þrjú sæti til baka:
F → C
D → A
H → E
V → S
D → A
U → R
Svarið er því CAESAR.
Fáir mögulegir lyklar
Í Caesar-dulritun getur lykillinn aðeins verið einn af 26 mögulegum tilfærslum, þar sem stafrófið inniheldur 26 stafi. Lykillinn 0 gerir ekkert og lykillinn 26 gerir í raun það sama og 0, þannig að það eru aðeins 25 áhugaverðir möguleikar.
Þetta þýðir að við getum prófað þá alla. Slík aðferð kallast þrautleit (e. brute force), þ.e. þegar við prófum alla möguleikana, einn af öðrum, þar til eitthvað lítur út eins og texti.
Æfing
Eftirfarandi texti var dulritaður með Caesar-dulritun. Finndu skilaboðin með þrautaleit.
GEIWEV IV WOIQQXMPIKX
Lausn
Við byrjum á að prófa mismunandi lykla á fyrsta orðinu, GEIWEV:
Með lykli 1 (færum einn staf til baka):
G → F, E → D, I → H, W → V, E → D, V → U
Útkoman er FDHVDU. Ekki læsilegt.
Með lykli 2 (færum tvo stafi til baka):
G → E, E → C, I → G, W → U, E → C, V → T
Útkoman er ECGUCT. Enn ólæsilegt.
Með lykli 3 (færum þrjá stafi til baka):
G → D, E → B, I → F, W → T, E → B, V → S
Útkoman er DBFTBS. Enn eitthvert rugl.
Með lykli 4 (færum fjóra stafi til baka):
G → C, E → A, I → E, W → S, E → A, V → R
Útkoman er CAESAR! Þetta er vel þekkt orð, svo lykillinn 4 virðist réttur. Við beitum honum á allan textann:
GEIWEV IV WOIQQXMPIKX
CAESAR ER SKEMMTILEGT
ROT13
ROT13 er sérstakt tilvik af Caesar-dulritun. Þar er hver stafur færður 13 sæti áfram:
A ↔ N
B ↔ O
C ↔ P
...
M ↔ Z
Stafrófið er 26 stafir að lengd og 13 er helmingurinn. Ef við beitum ROT13 tvisvar komum við aftur að upphaflega textanum:
HELLO → URYYB → HELLO
Þetta gerist vegna þess að við færum samtals 26 sæti.
Vissir þú?
- ROT13 var lengi notað á spjallhópum til að fela óviðeigandi efni, brandara eða lausnir á gátum. Lesandinn gat afkóðað textann með einum hnappi.
- Python er með innbyggðan stuðing við ROT13:
import codecs; codecs.encode('hello', 'rot_13'). - Í ritlinum Vim er hægt að nota
g?til að beita ROT13, til dæmis er hægt að ROT13-kóða núverandi línu meðg??.
Sýnidæmi
Ef við fáum:
Fury vf sha
og beitum ROT13 fáum við:
Fury vf sha → Shel is fun
Til dæmis verða fyrstu fjórir stafirnir svona:
F → S
u → h
r → e
y → l
Athugum að bilið milli orðanna helst óbreytt, en þeirri hefð er oftast fylgt þegar kemur að Caesar-dulritun.
Aðeins A–Z í dæmunum
ROT13-forrit sem gerir ráð fyrir enska stafrófinu veit ekki sjálfkrafa hvað á að gera við ð, þ eða æ. Það þarf að ákveða hvort stafirnir séu látnir standa, fjarlægðir eða settir í eigið stafróf.
Ef við vildum útfæra samsvarandi dulritun fyrir íslenska stafrófið, þar sem íslensku stafirnir eru einnig dulritaðir, myndum við nota lykilinn 18, þar sem íslenska stafrófið inniheldur 36 stafi.
Atbash
Í stað þess að færa stafina ákveðinn fjölda sæta getum við speglað stafrófið. Sú aðferð kallast Atbash.
Venjulegt: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Atbash: ZYXWVUTSRQPONMLKJIHGFEDCBA
Þá verður A að Z, B að Y, C að X og svo framvegis.
Sýnidæmi
Ef við dulritum HELLO með Atbash, þ.e.
H → S
E → V
L → O
L → O
O → L
fáum við
HELLO → SVOOL
Atbash hefur ekki leynda lykiltölu eins og Caesar-dulritun. Reglan er alltaf sú sama og því getur hver sem þekkir Atbash notað hana.
Vissir þú?
Heitið Atbash er dregið af fyrstu og síðustu stöfunum í hebreska stafrófinu: alef–tav–bet–shin. Aðferðin er meira en tvö þúsund ára gömul og kemur meðal annars fyrir í gömlum textum þar sem hún var notuð til að fela ákveðin nöfn eða orð.
Æfing
Æfing
Dulráddu eftirfarandi Atbash-texta:
GSV XZG RH LM GSV ILLU
Lausn
Við notum töfluna:
A ↔ Z
B ↔ Y
C ↔ X
D ↔ W
E ↔ V
F ↔ U
G ↔ T
H ↔ S
I ↔ R
J ↔ Q
K ↔ P
L ↔ O
M ↔ N
Nú tökum við orðin eitt í einu:
GSV → THE
XZG → CAT
RH → IS
LM → ON
GSV → THE
ILLU → ROOF
Skilaboðin eru því:
THE CAT IS ON THE ROOF
Hér sjáum við að Atbash er sín eigin dulráðning, þ.e. sama tafla er notuð til að dulrita og dulráða. Vegna þessarar samhverfu var nóg að hafa aðeins fyrstu 13 línurnar í töflunni hér að ofan.
Umskipti með eigin lykli
Í grunninn skilgreina Caesar og Atbash mjög einfaldar reglur til að varpa einu stafrófi yfir í annað, þ.e. að fyrir hvern staf í stafrófinu veljum við annan staf í stafrófinu sem við skrifum í staðinn. Við þurfum þó ekki að einskorða okkur við svo formfastar reglur þegar kemur að slíkri vörpun. Við getum einfaldlega ákvarðað, fyrir alla bókstafina, í hvaða staf þeir breytast, eins og A verður X, B verður K, o.s.frv.
Til að skilgreina slíka vörpun getum við skrifað upprunalega stafrófið í eina röð, og þær breytingar sem verða á hverjum staf í röðina fyrir neðan, eins og t.d.
Stafróf: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Breytist í: QWERTYUIOPASDFGHJKLZXCVBNM
Seinni línan er þá lykill dulritunarinnar, enda nægir hún til að dulrita og dulráða. Lykilstafrófið notar ávallt sömu stafi og venjulega stafrófið, en í annarri röð. Lykillinn skilgreinir hvernig stafirnir breytast. Í þessu dæmi verður t.d.
A → Q
B → W
C → E
D → R
E → T
Þessi tegund dulritunar kallast umskipti (e. substitution cipher), þ.e. þar sem hverjum staf er skipt út fyrir annan staf.
Prófum að nota lykilinn að ofan til að dulrita HELLO:
H → I
E → T
L → S
L → S
O → G
Við endum þá með dulritaða textann
HELLO → ITSSG
Æfing
Notaðu sama lykilstafróf og hér að ofan til að dulráða:
ITSSG VGKSR
Lausn
Við leitum að hverjum dulrituðum staf í neðri línunni og lesum samsvarandi staf í efri línunni:
Lykill: Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
Venjulegt: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Fyrsta orðið verður:
I → H
T → E
S → L
S → L
G → O
ITSSG verður því HELLO.
Annað orðið verður:
V → W
G → O
K → R
S → L
R → D
Heildarskilaboðin eru:
HELLO WORLD
Umskipti með CyberChef
Með CyberChef er hægt að dulrita og dulráða umskipti með aðgerðinni Substitute.
Með lyklinum hér að ofan getum við dulritað HELLO
Til að dulráða, víxlum við einfaldlega á Plaintext og Ciphertext stafrófunum. Þannig getum við dulráðið textann úr æfingunni hér að ofan.
Veikleiki umbreytinga
Í dæminu hér að ofan sjáum við að í orðinu HELLO er sami stafurinn L í þriðja og fjórða sæti. Í dulritaða textanum ITSSG er einnig sami stafurinn S í sömu sætum.
Þetta er einn stærsti veikleiki þessarar tegundar dulritunar. Þótt lykillinn geti verið einn af mjög mörgum mögulegum stafrófum breytir aðferðin ekki mynstrum orðanna. Tvítekinn stafur verður alltaf sami dulritaði stafurinn.
Þrátt fyrir að gríðarlega mörg lykilstafróf séu í boði (u.þ.b. 400 kvaðrilljónir), eru tungumál ekki handahófskennd. Í íslensku, ensku og öðrum tungumálum koma sumir stafir og stafasamsetningar mun oftar fyrir en aðrar.
Í enskum texta er E til dæmis mjög algengur stafur. Algeng orð eru oft stutt, eins og THE, OF, TO og AND. Ef við fáum nógu langt dulrit getum við notað þessar upplýsingar til að giska á lykilinn.
Tíðnigreining
Tíðnigreining (e. frequency analysis) köllum við þá aðferð að telja hversu oft stafir, orð eða mynstur koma fyrir í texta. Tíðnigreiningin er náttúrulega háð því hvaða texti er notaður við greininguna, en oft er notast við texta sem endurspeglar algenga málnotkun. English Letter Frequency Counts: Mayzner Revisited er dæmi um tíðnigreiningu. Hún vann með texta sem innihélt um 700 milljarða af rúmlega 95.000 ólíkum orðum. Tíðni bókstafanna má sjá í eftirfarandi töflu.
| Stafur | Tíðni | Stafur | Tíðni | Stafur | Tíðni |
|---|---|---|---|---|---|
| e | 12.49% | t | 9.28% | a | 8.04% |
| o | 7.64% | i | 7.57% | n | 7.23% |
| s | 6.51% | r | 6.28% | h | 5.05% |
| l | 4.07% | d | 3.82% | c | 3.34% |
| u | 2.73% | m | 2.51% | f | 2.40% |
| p | 2.14% | g | 1.87% | w | 1.68% |
| y | 1.66% | b | 1.48% | v | 1.05% |
| k | 0.54% | x | 0.23% | j | 0.16% |
| q | 0.12% | z | 0.09% |
Tíðnigreiningin sýndi einnig að algengustu orðin eru the, of og and. Algengustu stafapörin eru th, he, in og er og algengustu þrenndirnar eru the, and og ing.
Íslensk orðtíðnibók gefur okkur tíðni stafa í íslensku, sem sjá má í eftirfarandi töflu.
| Stafur | Tíðni | Stafur | Tíðni | Stafur | Tíðni |
|---|---|---|---|---|---|
| a | 10.02% | n | 8.49% | r | 8.21% |
| i | 7.76% | e | 5.86% | s | 5.50% |
| t | 5.04% | u | 4.73% | ð | 4.57% |
| l | 4.31% | g | 4.25% | m | 3.70% |
| k | 3.08% | f | 2.83% | h | 2.58% |
| v | 2.50% | o | 2.25% | á | 1.70% |
| þ | 1.58% | í | 1.51% | d | 1.47% |
| j | 1.10% | ó | 1.00% | b | 0.95% |
| y | 0.85% | ú | 0.82% | æ | 0.82% |
| ö | 0.79% | p | 0.78% | é | 0.72% |
| ý | 0.20% | x | 0.04% |
Tíðnigreining er eitt helsta vopnið sem við höfum til að brjóta dulritun með umskiptum. Þar sem umskipti virka þannig að hverjum staf er ávallt skipt út fyrir sama staf, viðhelst tíðni stafa, stafapara, stafaþrennda, o.s.frv. í dulritaða textanum. Þannig getur tíðnigreining á dulritaða textanum leiðbeint okkur um hvaða stöfum hefur líklega verið skipt út fyrir aðra.
Þegar við stöndum frammi fyrir texta sem okkur grunar að hafi verið dulritaður með umskiptum, getum við unnið eftir þessu ferli.
- Framkvæmum tíðnigreiningu stafa á dulritinu.
- Berum saman tíðnigreininguna á dulritinu við tíðnigreiningu á málinu sem við höldum að textinn sé skrifaður í. Giskum á að algengasti stafurinn sé einnig algengur stafur í tungumálinu og skoðum hvað kemur út úr því.
- Leitum að stuttum orðum, sérstaklega tveggja og þriggja stafa orðum og berum saman við algeng orð.
- Notum þekkt mynstur til að fylla út fleiri stafi.
- Prófum ágiskanirnar í öllum textanum og leiðréttum ef augljósar villur koma upp.
Tíðnigreining i Python
Hentugt er að nota gagnagrindina Counter í Python til að framkvæma tíðnigreiningar. Eftirfarandi Python skrifta gefur okkur tíðnigreiningu á skránni words.txt.
from collections import Counter
text = open("words.txt", encoding="utf-8").read().lower()
counts = Counter(c for c in text if c.isalpha())
total = sum(counts.values())
for c, n in counts.most_common():
print(f"{c}: {n / total * 100:.2f}%")
Það er mikilvægt að hafa í huga að tíðnigreining er fjarri því að vera fullkomin. Dulritaði textin gæti, til dæmis, innihaldið óvenjumikið magn af sjaldgæfum stöfum sem skekkja niðurstöðurnar. Almenna reglan er þó sú að því lengri sem textinn er, því áreiðanlegri er tíðnigreiningin.
Sýnidæmi
Segjum að við sjáum þetta í dulriti:
ZIT YSQU OL IORRTF OF ZIT YOST
Við vitum ekki lykilinn, en við getum skoðað mynstrið:
ZITkemur tvisvar fyrir.YSQUogYOSTbyrja á sama staf.OLer tveggja stafa orð.IORRTFhefur tvítekinn staf í miðjunni.
Til að auðvelda okkur að sjá hvaða stafir hafa verið ráðnir skrifum við dulritið með HÁSTÖFUM en dulráðna textann með lágstöfum. Ef við giskum á að ZIT sé algenga orðið the, fáum við
Z → t
I → h
T → e
og þá verður textinn
the YSQU OL hORReF OF the YOSe
Ef OL er orðið is, fáum við líka O → i og L → s:
the YSQU is hiRReF iF the YiSe
Tökum eftir að OF varð að iF af því að við fundum út að O er i, en við vitum ekki enn hvað F er. Núna er hægt að halda áfram með orðamynstur og samhengi. Ef við þekkjum efni textans eða búumst við ákveðnu svari getur það einfaldað vinnuna okkar.
Vissir þú?
Al-Kindi, arabískur fræðimaður á 9. öld, skrifaði eina elstu þekktu lýsinguna á tíðnigreiningu. Hann benti á að hægt væri að bera saman tíðni stafa í dulriti við tíðni stafa í venjulegu tungumáli.
Æfing
Kláraðu að dulráða dulritið úr sýnidæminu hér að ofan.
ZIT YSQU OL IORRTF OF ZIT YOST
Gefið er að skilaboðin fjalla um fána.
Lausn
Við höldum áfram þaðan sem frá var horfið, en við höfum þegar ályktað
Z → t
I → h
T → e
O → i
L → s
og erum þá með
the YSQU is hiRReF iF the YiSe
Ef við notum vísbendinguna um að textinn fjalli um fána, þá getum við ályktað að orðið flag sé til staðar í textanum. Eina orðið sem kemur til greina er YSQU, þar sem YiSe stemmir ekki. Við fáum þá
Y → f
S → l
Q → a
U → g
og endum með
the flag is hiRReF iF the file
Þá liggur beinst við að F → n og R → d og við höfum þá dulráðið textann
ZIT YSQU OL IORRTF OF ZIT YOST
the flag is hidden in the file
Það er mikilvægt að hafa í huga að þessi aðferð snýst um að prófa sig áfram. Við giskum á orð eftir tíðni og samhengi. Ef eitthvert giskanna hefði ekki passað alls staðar hefðum við tekið það til baka.
Tíðnigreining er því ekki töfraaðferð sem gefur alltaf svar í einu skrefi. Hún gefur okkur vísbendingar sem við prófum, metum og leiðréttum.
Gott bókhald við greiningu
Þegar við erum að prófa gisk er sniðugt að skrifa niður lykilinn í töflu. Þá getum við tekið eina ákvörðun til baka ef hún reynist röng, í stað þess að byrja alveg upp á nýtt.
Vigenère-dulritun
Við höfum nú séð hvernig Caesar-dulritun virkar, þar sem við notum sama tilfærslulykil á hvern einasta staf í textanum okkar. Eins og við komumst að er auðvelt að brjóta slíka dulritun. En hvað ef við gætum gert ferlið aðeins flóknara? Hvað ef við myndum ekki alltaf nota sömu tilfærsluna, heldur skipta um tilfærslu fyrir hvern staf?
Vigenère-dulritun (e. Vigenère cipher) gerir nákvæmlega þetta. Í stað þess að nota eina fasta tölu sem lykil, notar þessi aðferð heilt orð sem lykil. Hver stafur í lyklinum segir okkur þá til um hversu mikið við eigum að færa samsvarandi staf í upprunalega textanum, rétt eins og í Caesar-dulritun. Við erum í raun að beita mörgum mismunandi Caesar-tilfærslum í röð.
Til að gera þetta breytum við stöfunum í lyklinum í tölur. Ef við miðum við enska stafrófið byrjum við að telja á núlli: A jafngildir 0, B er 1, C er 2, og svo framvegis upp í Z sem er 25.
Segum sem svo að við notum lykilinn LEMON til að dulrita textann ATTACKATDAWN.
Fyrst skrifum við textann okkar niður og endurtökum svo lykilinn undir honum aftur og aftur þar til það nær yfir allan textann:
Texti: A T T A C K A T D A W N
Lykill: L E M O N L E M O N L E
Nú tökum við fyrsta stafinn í textanum, A, og fyrsta stafinn í lyklinum, L. Stafurinn L er tólfti stafurinn í stafrófinu (ef við byrjum að telja á núlli, þar sem A=0), svo lykillinn er 11. Við færum A áfram um 11 sæti og fáum L.
Næsti stafur er T og lykilstafurinn er E. Stafurinn E jafngildir 4 (A=0, B=1, C=2, D=3, E=4). Við færum T áfram um 4 sæti: U, V, W, X. Útkoman er því X.
Þannig höldum við áfram með hvern staf:
A fært um L (11) → L
T fært um E (4) → X
T fært um M (12) → F
A fært um O (14) → O
C fært um N (13) → P
Þegar við höfum farið í gegnum alla stafina fæst endanlegi dulritaði textinn okkar:
ATTACKATDAWN → LXFOPVEFRNHR
Sögulega séð var oft notuð sérstök tafla, kölluð Tabula Recta eða Vigenère-taflan, til að fletta upp þessum tilfærslum á fljótlegan hátt í stað þess að telja í huganum.
Vissir þú?
Vigenère-dulritun var lengi kölluð le chiffre indéchiffrable, eða „ómögulega dulmálið“, þar sem menn töldu ógerning að brjóta hana. Hún stóðst tímans tönn í næstum þrjú hundruð ár þar til hún var loks brotin á 19. öld. Það var gert með því að greina endurtekningar í textanum til að áætla lengd lykilsins. Heitið „ómögulegt“ reyndist því vera heldur bjartsýnt!
Nú þegar við vitum hvernig á að dulrita, hvernig förum við að því að dulráða texta ef við þekkjum lykilinn? Það er nákvæmlega sama ferli, nema í öfuga átt.
Sýnidæmi
Segjum að við fáum dulritið
IITNFZ
og við vitum að lykillinn er BIRD.
Við byrjum á að stilla þessu upp eins og áður og endurtökum lykilinn yfir allan textann:
Dulrit: I I T N F Z
Lykill: B I R D B I
Nú færum við hvern dulritaðan staf til baka (afturábak í stafrófinu) um þá tilfærslu sem samsvarandi lykilstafur segir til um.
Fyrsti stafurinn er I og lykillinn er B (1 sæti). Ef við förum 1 sæti til baka frá I lendum við á H. Næsti stafur er líka I, en lykillinn er núna I (8 sæti). Við förum 8 sæti til baka frá I og lendum á A.
I fært til baka um B (1) → H
I fært til baka um I (8) → A
T fært til baka um R (17) → C
N fært til baka um D (3) → K
F fært til baka um B (1) → E
Z fært til baka um I (8) → R
Eftir að hafa haldið áfram með alla rununa fáum við loksins upprunalega textann okkar aftur:
IITNFZ → HACKER
Æfing
Prófum þetta sjálf. Við höfum gripið eftirfarandi dulrit sem var dulritað með Vigenère-aðferðinni:
RIJVS UYVJN
Við komumst líka að því að lykillinn er KEY. Dulráddu textann.
Athugaðu: Bilið milli orðanna er ekki hluti af dulrituninni, þannig að við hoppum yfir það þegar við dreifum lykilorðinu við stafina.
Lausn
Við byrjum á að skrifa dulritið og endurtökum lykilorðið undir því, en hoppum yfir bilið:
Dulrit: R I J V S U Y V J N
Lykill: K E Y K E Y K E Y K
Næst notum við lykilstafina til að færa dulritið til baka.
Mundu að K er 10, E er 4, og Y er 24.
R fært til baka um K (10) → H
I fært til baka um E (4) → E
J fært til baka um Y (24) → L (hér förum við framhjá A og byrjum aftur á Z)
V fært til baka um K (10) → L
S fært til baka um E (4) → O
Við getum nú þegar séð fyrra orðið mótast. Svo höldum við áfram með seinna orðið:
U fært til baka um Y (24) → W
Y fært til baka um K (10) → O
V fært til baka um E (4) → R
J fært til baka um Y (24) → L
N fært til baka um K (10) → D
Upprunalegi (ódulritaði) textinn er því
HELLO WORLD
Hér er mjög mikilvægt að taka eftir því að lykilorðið byrjar aftur á Y fyrir stafinn U, en ekki á K. Af því að bilið taldist ekki með héldum við bara áfram þar sem frá var horfið í lykilorðinu.
Hvers vegna er Vigenère ekki nóg?
Eins og við sáum í dæminu hér að ofan er Vigenère-dulritunin mun sterkari en hefðbundin Caesar-dulritun og önnur umskipti. Ástæðan fyrir því er sú að sami upprunalegi stafurinn getur orðið að ólíkum dulritsstöfum, allt eftir því hvar hann lendir í textanum. Til dæmis gæti stafurinn A orðið að L í eitt skipti, en að E eða O í næsta skipti, algjörlega háð því hvaða lykilstafur er notaður nákvæmlega á þeim tímapunkti. Þetta gerir hefðbundna tíðnigreiningu ónothæfa.
En ákveðnir gallar leynast þó í hönnun dulritunarinnar. Alla jafna er lykilorðið mjög stutt, samanborið við lengd skilaboðanna, og það því endurtekið oft við dulritunina.
Ef greiningaraðili fær nógu langan dulritaðan texta í hendurnar getur hann tekið eftir endurteknum stafavenslum. Út frá fjarlægðinni milli þessara endurtekninga er hægt að giska á hversu langt lykilorðið er. Þegar lengd lykilorðsins er fundin (segjum til dæmis að hún sé 5 stafir), þá getur greiningaraðilinn skipt dulritinu upp í 5 mismunandi hópa. Hver þessara hópa var í raun dulritaður með nákvæmlega sömu Caesar-tilfærslunni! Þar með er einfaldlega hægt að beita venjulegri tíðnigreiningu á hvern hóp fyrir sig.
Þetta er frábært dæmi um mjög mikilvæga grunnreglu í allri dulritun: jafnvel þótt aðferð virðist fela einföld mynstur vel við fyrstu sýn, þá getur hún samt lekið mikilvægum upplýsingum (og mynstrum) ef hún er notuð á mikið magn gagna eða ef lykillinn er endurtekinn of oft.
quipqiup
Við höfum skoðað nokkrar leiðir til að brjóta dulritanir í höndunum, en sem betur fer þurfum við sjaldnast að vinna þetta þannig í dag. Til eru ýmis tól, bæði á Netinu og forrit, sem geta hjálpað okkur við að brjóta dulkóðun sem byggir á umskiptum, meðal annars með því að nýta sér tíðnigreiningu sjálfkrafa, bera saman við þekkt orð úr orðabókum, og meta samhengi.
Eitt öflugt slíkt tól er quipqiup. Prófaðu að setja dulritin úr sýnidæmunum hér að ofan inn í það.
Umröðun
Allar þær aðferðir sem við höfum rætt fram að þessu eiga það sameiginlegt að þær byggja á því að skipta einum staf út fyrir annan. Þær breyta því hvaða stafur stendur á ákveðnum stað í textanum. En það er til önnur mjög einföld hugmynd að dulritun, sem er sú að breyta engum stöfum, heldur einfaldlega breyta röðinni á þeim. Þessi tegund dulritunar kallast umröðunardulritun (e. transposition cipher).
Segjum að við viljum senda skilaboðin THEHIDDENFLAGISINTHISFILE. Við ákveðum að nota umröðunardulritun með fjórum dálkum og skrifum þá textann okkar niður línu fyrir línu, þannig að hver lína hafi fjóra stafi.
Þar sem skilaboðin okkar innihalda 25 stafi passa þau ekki nákvæmlega í 4 dálka (næsta margfeldi af 4 er 28). Til þess að taflan gangi upp, þ.e. allir dálkarnir jafn langir, fyllum við upp í síðustu línuna með auka stöfum, í okkar tilfelli X. Þetta er kallað fylling (e. padding).
Þá lítur uppsetningin svona út
T H E H
I D D E
N F L A
G I S I
N T H I
S F I L
E X X X
Til að smíða dulritið okkar, lesum við núna textann upp úr töflunni dálk fyrir dálk (ofan frá og niður) í stað þess að lesa hann línu fyrir línu:
TINGNSE HDFITFX EDLSHIX HEAILX
Athugum að hér hefur engum staf verið breytt, T er ennþá T og H er ennþá H. Þeir hafa aðeins skipt um sæti. Sá sem fær þessi skilaboð og veit að textanum var upprunalega skipt í fjóra dálka, getur einfaldlega skrifað dulritið aftur upp ofan frá og niður í fjóra dálka (þar sem hver dálkur er \(28 / 4 = 7\) stafir að lengd), og lesið síðan skilaboðin sín línu fyrir línu til að fá aftur THEHIDDENFLAGISINTHISFILEXXX. Einnig má oft sjá fjölda dálka á fjölda „orða“ í dulritinu, eins og í tilfellinu hér að ofan, en stundum er dulritið skrifað sem einn langur strengur, án bila.
Æfing
Æfing
Við höfum fundið eftirfarandi umröðunardulrit:
TSDM HSIM EWSN POAX ARDX
Lausn
Þetta er góð æfing í að snúa ferlinu við. Hér höfum við 20 stafa dulrit (án bilanna) og sjáum að dulritið inniheldur 5 „orð“. Við getum þá ályktað að dulritað hafi verið með 5 dálkum og að hver dálkur hlýtur er 4 stafir að lengd (\(20 / 5 = 4\)).
Við skrifum dálkana fimm upp, hvern við hliðina á öðrum, ofan frá og niður:
T H E P A
S S W O R
D I S A D
M I N X X
Síðan lesum við töfluna línu fyrir línu:
- Lína 1:
THEPA - Lína 2:
SSWOR - Lína 3:
DISAD - Lína 4:
MINXX
Þegar við setjum línurnar saman fáum við upprunalega textann okkar:
THEPASSWORDISADMINXX
Við getum ályktað að síðustu tveir X-stafirnir hafi verið settir inn sem fylling til að gera töfluna jafna. Við getum því hunsað þá og þá standa skilaboðin eftir: THE PASSWORD IS ADMIN.
Vissir þú?
Spartverjar til forna notuðu mjög sniðuga aðferð við umröðunardulritun sem kallast scytale. Þá var leðurreim vafið þétt utan um sívalning úr viði og skilaboðin skrifuð eftir endilangri reiminni. Þegar reimin var tekin af sívalningnum urðu stafirnir algjörlega ólæsilegir. Til að geta lesið skilaboðin aftur þurfti viðtakandinn að eiga annan sívalning með nákvæmlega sama þvermáli, vefja reiminni aftur upp á hann, og þá röðuðust stafirnir sjálfkrafa á réttan stað!
Verkefni