Artikel top billede

(Foto: Computerworld)

Lær at håndter chifferskrift

Få styr på kodeskriftens historie og lav et par koder, nu du er i gang.

Af Redaktionen, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Chifferskrift har været en bærende kraft i militær spionage i århundreder, og i dag er den afgørende vigtig i e-handel. Vi skal se på udviklingen af chifferskrift fra de ældste tider til i dag. Dette er en praktisk guide, og vi bruger Excel-projektmapper, som du selv kan lave. Vi vender også onlineværktøjer.

Cæsars chifferskrift

Den første brug af chifferskrift bliver ofte tilskrevet Julius Cæsar tilbage i det første århundrede f.Kr. Metoden er meget enkel: Hvert bogstav bliver krypteret ved, at man flytter et fast antal pladser i alfabetet og går tilbage til begyndelse, efter at man har nået slutningen.

Hvis man flytter tre pladser – som Cæsar gjorde – bliver A til D, B bliver til E og så videre. En Cæsar-chifferskrift med flytning på 13 pladser er praktisk (om end svag), fordi den proces, der genererer koden, kan bruges til at oversætte teksten.

Vi skal her oprette en Excel-projektmappe til at kryptere meddelelser (og senere afkode dem) ved hjælp af Cæsars chifferskrift, men hvis du vil skyde genvej, kan du bruge det færdige regneark »Cipher-1.xls«.

Begynd med en projektmappe, der rummer fire regneark, og omdøb dem Encrypt, Decrypt, Concatenate-E og Concatenate-D.

Skriv derefter en passende titel i celle A1 i Encrypt- projektmappen og tilføj navnene Key:, Plaintext: og Cyphertext: til cellerne A3, A4 og A5. I celle B3 indsætter du nu tallet 3, der er vores nøgle.

Det angiver, at flytningen er tre pladser i alfabetet. Der er flere oplysninger om det i boksen »Hvad kendetegner en god chiffertekst?«.

Før kryptering hedder teksten »plain text«. Skriv derfor noget almindelig tekst i celle B4, men gør det på denne måde: For det første må du kun bruge store bogstaver (ingen små bogstaver, tal eller tegnsætning).

For det andet skal du skrive teksten i grupper af fem tegn med mellemrum imellem. Begrænsningen med de store bogstaver gjaldt for tidligere chifferskrift, men betyder ikke noget for moderne chifferskrift af høj kvalitet.

Brugen af grupper på fem bogstaver (der heller ikke er påkrævet i moderne chifferskrift) havde til formål at skjule information, som man kunne uddrage af ordenes længde.

Hvis teksten for eksempel havde normale mellemrum, ville et enkelt bogstav sandsynligvis betyde »I«, »Ø« eller »Å«. Et hyppigt forekommende ord på tre bogstaver ville sikkert være »den« eller »det«.

Selv om vi har skrevet teksten som en streng, skal vi bruge de enkelte bogstaver til at kryptere den. I A7 skal du som kolonneoverskrift skrive Letter Sequence Number, og i B7 overskriften Letter in Plaintext.

Skriv 1 i A8 og =A8+1 i A9, og kopier det ned til A1007. Nu skal du uddrage det første bogstav fra teksten. Skriv =MID ($B$4,A8,1) i B8, så kommer det første bogstav frem. Kopier ned til B1007 for at se hvert af bogstaverne i teksten løbe ned ad kolonne B.

Nu skal vi konvertere bogstaverne til tal. Skriv kolonneoverskriften Number of Plaintext Letter i C7, sæt overskriften =IF(B8= “”,“”,CODE (B8)-65) i C8 og kopier ned.

IF sikrer, at vi ikke prøver at kryptere mellemrummene, CODE-funktionen returnerer hvert bogstavs interne kode (ASCII), og da ASCII-koderne for A til Z er 65 til 90, trækker vi 65 fra og ender med tallene fra 0 til 25.

Du kan se dem løbe ned ad kolonne C (den vil vise ”#VALUE!” efter enden af teksten. Nu er det blevet tid til at kryptere bogstav- værdierne. Skriv kolonneoverskriften Number of Ciphertext Letter i D7 og =IF(B8=“”, “”,MOD(C8+$B$3,26)) I D8 og kopier ned.

Denne formel tilføjer nøglen til tekstværdien og bruger MOD-funktionen til at lukke af til sidst. Til sidst skal vi omdanne koderne til bogstaver. Skriv kolonneoverskriften Letter in Ciphertext til E7 og =IF(A8<=LEN($B$4), IF(B8= “”,“”, CHAR(D8+65)),“”) til E8 og kopier igen ned.

CHAR-funktionen er den modsatte af CODE-funktionen, idet den omdanner en ASCII-kode til et tegn, og den første IF-følgeseddel skal sikre, at vi ikke får »#VALUE« efter tekstens slutning.

Selv om du kan læse chifferteksten ned langs kolonne E, vil det være meget bedre at samle alle bogstaverne, så de danner en tekststreng, som vi kan læse normalt.

Det er her, regnearket Concatenate-E kommer ind i billedet. Sæt en titel i rækkerne 1og 2, hvis du vil. I A4 skal du så skrive =Encrypt!E8, så kommer det øverste bogstav i kolonne E fra Encrypt-regnearket frem. I A5 skriver du nu =A4&Encrypt!E9 og kopierer ned til A1004.

Gå tilbage til Encrypt-regnearket og skriv =”Concatenate-E’A1004 i B5, så fremstår chifferteksten i al sin vælde. Hvis du sørger for at bruge en monospatieret skrift til B4 og B5, vil den almindelige tekst og chifferteksten line op, så du kan se, hvad hvert enkelt bogstav er blevet til.

Gør det omvendt

Man kan konvertere chifferteksten til almindelig tekst på to måder. Den nemme måde, der indebærer, at man kender nøglen, eller den svære måde, der indebærer, at man ikke kender den.

Du får selv lov at regne den nemme måde ud (medmindre du bruger Cipher-1.xls og derfor allerede kender den). Decrypt-regnearket ligner Encrypt-udgaven, og Concatenate-D vil ligne Concatenate-E. Den største forskel er, at du subtraherer nøglen fra chifferteksten for at genere den almindelige tekst. Prøv det med denne chiffertekst:

XLPCS TGTSA DCTAN PHPRA

DJSIW PIUAD PIHDC WXVWD

TGKPA THPCS WXAAH

Hvis du kender nøglen, skriver du simpelthen chifferteksten og nøglen ind i Decrypt-regnearket for at se den almindelige tekst. Men vi giver dig ikke nøglen, og derfor sætter vi dig i krypteringsspecialistens sted. Prøv forskellige nøgler, idet du begynder med 1 og bliver ved, til du finder en, der virker.

Alfabetisk substitution

Arbejdet med at bryde Cæsar-chifferteksten viser, hvor simpelt det er, når der kun er 25 mulige nøgler at afprøve. Det er oplagt at gøre det sværere ved at øge antallet af nøgler.

Cæsar-chifferskriften er en særlig udgave af et såkaldt monoalfabetisk substitutionschiffer. I den almindelige version kan ethvert af alfabetets bogstaver oversættes til et andet bogstav – ikke nødvendigvis det, man finder ved at flytte at fast antal pladser i alfabetet.

Nu kan nøglen altså være ECYLHURAVOKXSFZQGWBTNMIJPD, hvilket betyder, at A bliver til E, B bliver til C, D bliver til Y og så videre. Da der findes 26 faktormåder, hvori man kan anbringe det romerske alfabets 26 bogstaver (26×25×24×23×22×…), svarer antallet af nøgler til 403.291.461.126.605.635.584.000.000.

Man skulle tro, at det er alt andet end enkelt at bryde dette chiffer. Men selv om den brutale metode er udelukket i dette tilfælde, findes der en enklere metode, som vi nu skal se. Vi skal arbejde med den følgende chiffertekst, som du også kan finde i regnearket »Cipher-2.xls«.

TCNYN TLAXU ZCUJY CNGUZ

CDJUS EJYYJ DXQJR CJDVU

ZCTCN YNTAQ JYPJR AXAUX

KSADU CXXCD QCJUG AEXUT

YJDQC AUAYY SUEJU CXUZC

YJDVH CDCJU ZUZCX NAYHS

ULAUZ XNPCC FUEJQ NDXAV

CEJUA NDAUL AYYLA CYVJU

ZECCV APCDX ANDJY BACLN

GUZCX UESQU SECNG UZCSR

RCEPN XUQES XUNGU ZCCJE

UZNGU ZCECY JUAND XZARN

GNDCE NQIGN EPJUA NDUNJ

DNYAV TCNYN TLHCY NLAUX

QNDQC JYADT PJDUY CNGSD

QNDXN YAVJU CVXCV APCDU

NEVEA GU

For at bryde dette chiffer skal vi bruge regnearket plus et onlineværktøj. Medmindre du vælger at bruge Cipher-2.xls, giver vi dig et par hints og overlader det til dig selv at finde ud af, hvordan man opretter regnearket.

Skærmbilledet viser, hvad vi stiler efter, og kolonnerne AC og AD ligner meget kolonnerne A og B i Cipher-1.xls. Men denne gang skal vi kun arbejde med bogstaver, og vi har derfor ikke brug for at konvertere dem til numeriske koder.

Alfabetet i det normale rækkefølge forekommer i cellerne B6 til AA6, og et gæt på nøglen fremkommer lige nedenunder i cellerne B7 til AA7. Alle disse celler indeholder i øjeblikket et punktum. Du udfylder dem selv undervejs.

Det eneste andet, du skal vide, er, at kolonne AE bruger LOOKUP-funktionen til at tage et chifferbogstav fra kolonne AD, slå det op i cellerne B6 til AA6 og erstat det med gættet på bogstavet fra cellerne B6 til AA6.

Vi har talt om at gætte på, hvilket almindeligt bogstav hvert chifferbogstav repræsenterer, men hvordan? Svarer består i at bruge frekvensanalyse. Man kan finde et værktøj til dette formål på www.bit.ly/atousB.

Skriv chifferteksten og klik på »Letter frequencies«. Nu får du en liste over, hvor hyppigt hvert bogstav forekommer. Du vil bemærke, at C er det mest almindelige, efterfulgt af U, N, A og J.

Når man tager i betragtning, at E og T er de mest almindelige bogstaver i engelsk, er det fristende at foreslå, at C repræsenterer E, og U repræsenteret T, men lad os ikke drage forhastede konklusioner.

Vi går i stedet tilbage til værktøjet, og denne gang skal vi klikke på »Diagraph frequencies«. Nu får du en ordnet liste over frekvensen af bogstavpar, og du vil bemærke, at UZ, ZC, JU og NG er de mest almindelige.

Vi ved, at TH, HE, AN og RE er de mest udbredte bogstavpar i engelsk, og det ser derfor ud til, at vores oprindelige gæt var rigtigt, og det lader også til, at Z nok repræsenterer H.

Nu kan vi skrive disse gæt ind i regnearket. Nogle af punktummerne, der repræsenterede den almindelige tekst, er blevet til E’er, T’er og H’er. Du får selv lov til at gøre denne øvelse færdig – du kan finde frekvenslister for digrafer og trigrafer online.

Husk, at medmindre du har tusinder af chiffertegn, svarer frekvenserne ikke til sproget i almindelighed, og du må i gang med noget detektivarbejde.

Cæsars chifferskrift har kun 25 mulige tegn. Hvis man ved, at en meddelelse er blevet krypteret ved hjælpe af dette chiffer, er der relativt enkelt at bryde koden ved at prøve hver mulig nøgle. Denne metode minder om »brute force«.

Det almindelige monoalfabetiske substitutionschiffer har
403.291.461.126.605.635.584.000.000 mulige nøgler.

Hvis man brugte en supercomputer til at afprøve en milliard nøgler i sekundet og i hvert tilfælde analysere resultatet for at se, om det omfatter engelske ord, ville det tage cirka 12 milliarder år at bryde koden.

Det kan tyde på, at det monoalfabetiske substitutionschiffer i praksis er umuligt at bryde, men det er faktisk sårbart over for andre metoder, som vi beskriver det i artiklen.

Kryptologer mener, at et godt chiffer er et, der nemmest lader sig analysere med den brutale metode. Man mener, at alle de chifre, der bliver brugt seriøst i dag, hører under denne kategori.

I denne artikel beskriver vi chifre, hvori man erstatter et bogstav med et andet. En anden mulighed består i at flytte bogstaver (blande dem ifølge en bestemt regel).

Et simpelt eksempel er et ombytningschiffer, og det fungerer sådan: Skriv teksten i række på en forudbestemt længde. Hvis længden er seks, og beskeden er »GET READY WE ATTACK AT TWELVE«, ville den blive formateret sådan:

GETREA
DYWEAT
TACKAT
TWELVE

Chifferteksten bliver skrevet i kolonner i den rækkefølge, nøglen kræver, og hver mulig nøgle er en permutation af tallene 1 til 6. Hvis nøglen er 512364, bliver chifferteksten »EAAV GDTT EYAW TWCE ATTE REKL« eller »EAAVG DTTEY AWTWC EATTE REKL« i grupper på fem.

Hvad med at prøve at lave et Excel-regneark, der kan gøre det? Hvis du går i stå, kan du se på »Cipher-3.xls«.

Monoalfabetiske chifre er så nemme at bryde, fordi man kan bruge frekvensanalyse af bogstaver og bogstavpar. Det næste skridt i udviklingen af chifre krævede, at chifferteksten ikke blot kunne analyseres på denne måde. Det førte til, at man indførte mere end en nøgle, og at man vendte dem rundt og oprettede et polyalfabetisk substitutionschiffer.

Simpel frekvensanalyse afslører ingen oplysninger, der kan bryde koden. Du har måske lyst til at udvikle et Excel-regneark til dette formål. Brug de samme principper, som vi så i forbindelse med afkodning af monoalfabetiske chifre.

På trods af den umiddelbare kompleksitet kan det polyalfabetiske substitutionschiffer brydes på samme måde som med det monoalfabetiske, selv om det tager længere tid.

[themepacific_accordion]
[themepacific_accordion_section title="Fakta"]

Det skal du bruge…

[/themepacific_accordion_section]
[themepacific_accordion_section title="Fakta"]

Terminologi

[/themepacific_accordion_section]
[themepacific_accordion_section title="Fakta"]

Koder og chifre

[/themepacific_accordion_section]
[/themepacific_accordion]