Af Torben Okholm, 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.
Kryptografi – det at gøre en meddelelse ulæse-lig for uindviede – bliver som regel brugt til at beskytte data på et drev med tanke på tab eller tyveri eller til at sløre data, der bliver overført online.
Det er et vigtigt redskab for hverdagsaktiviteter såsom onlinebankvirksomhed, hvor det arbejder bag kulisserne, men man kan også sagtens bruge kryptografiske værktøjer på en pc. Her sætter vi fokus på kryptografi. Der er imidlertid ikke tale om en guide til praktisk brug af kryptografiske redskaber i eksisterende applikationer. Eftersom den underliggende teknologi er et mysterium for mange, sigter vi i stedet på at hjælpe dig med at forstå principperne og se, hvordan moderne kodeskrift er blevet til.
Undervejs på denne opdagelsesrejse vil vi bruge fremragende open source-software, der giver dig en håndgribelig oplevelse, og vi foreslår også nogle øvelser, som du kan gennemgå ved at hacke din egen kode. Vores foretrukne software, JCrypTool, er en værdifuld undervisningsressource, og vi skal illustrere noget af den kodeskrift, vi behandler, med henvisning til denne software. Det kan imidlertid kun blive til at kradse i programmets overflade, og hvis du vil lære mere om dette fascinerende emne, vil vi foreslå, at du selv dykker dybere ned i JCrypTool.
Bemærk, at denne artikels formål er at oplyse dig, ikke at levere praktisk vejledning i kryptografi, som den finder sted i den virkelige verden. Vi opmuntrer dig til at afprøve vores ideer med din egen kode, men vi anbefaler ikke, at du bruger koden til at beskytte dine mest dyrebare hemmeligheder.
Fejltagelser er ikke altid indlysende, og risikoen for at lave ulykker er simpelthen for stor. Hvis du har et reelt behov for kryptografi, vil vi anbefale, at du læser adskillige upartiske artikler, før du træffer dit valg. Og inden du bliver ganske overvældet af ukendt terminologi, vil vi foreslå, at du sætter dig ind i kryptografiens sprog ved at læse den tekstboks, som du finder på modsatte side ...
Det første kendte eksempel på brug af kryptografi blev formentlig foretaget af Julius Cæsar. Det var ekstremt simpelt, men eftersom ingen tidligere havde mødt en krypteret meddelelse, var det sandsynligvis meget effektivt. Hvert bogstav i alfabetet blev flyttet tre pladser frem, og man vendte tilbage til A, hvis metoden førte brugeren videre end til Z. For eksempel blev A til D, B blev til E, X blev til A, og Y blev til B. LINUX vil i denne kryptering blive til OLQXA.
Det kan virke meget simpelt, men det fører os til en behandling af algoritmen og nøglen, hvis vi generaliserer Cæsars kodeskrift. I stedet for altid at gå tre pladser frem, vil en mere generel algoritme føre hvert bogstav frem med et variabelt antal pladser. Udtrykt matematisk ville algoritmen være kodeskrift = (ren tekst + flytning) mod 26, idet “mod” er en kort form for addition modulo, og tallet 26 refererer til antallet af bogstaver i det klassiske latinske alfabet (der også er det engelske alfabet). Den variable flytning, som er det antal pladser, der skal flyttes frem i alfabetet, kaldes nøglen og er et centralt begreb i moderne kryptografi.
I dag tager vi for givet, at algoritmen er kendt af modtageren, og sikkerheden afhænger derfor af, at nøglen bliver hemmeligholdt. Når det gælder den generaliserede Cæsar-kodeskrift, er ulempen, at der kun er 26 mulige nøgler, og en af dem – tallet 0 – giver kodeskrift, der er identisk med den rene tekst. Det betyder, at det ikke er svært at prøve alle de mulige nøgler, indtil man finder læselig tekst.
Det er det, der kaldes et brute force-angreb. Det er nemt nok at forstå denne kodetekst uden at afprøve den, men det kunne alligevel være en god ide at afprøve den i JCrypTool. Du finder ikke JCrypTool i arkiverne, men du kan downloade den fra www.cryptool.org – den kræver et Java 8 runtime-miljø. Hvis du vælger Classic efterfulgt af Caesar i Algorithms-menuen, kan du kryptere eller dekryptere tekst ved hjælp af den generaliserede Cæsar-kodeskrift.
Det er fristende at tro, en stigning i antallet af mulige nøgler til et tilstrækkeligt højt tal ville sikre en kodeskrift mod cracking, men det er i sig selv ikke nok. I stedet for blot at flytte bogstaver frem, vil vi i vores næste eksempel bruge generel monoalfabetisk substitutions-chiffer. Det giver en langt mere vilkårlig kortlægning af den rene teksts bogstaver i deres kodeskrift-ækvivalenter. I dette tilfælde ville nøglen ligne noget i retning af GKVAQWCDIMETXBONJHRYZSUFPL, og det betyder, at i de krypterede meddelelser bliver A til G, B til K, C til V og så videre.
Antallet af kombinationer på 26 bogstaver, der er antallet af mulige nøgler, er 26 x 25 x 24 ... x 3 x 2, og her ender vi på ikke mindre end 400 billioner billioner. Udtrykt binært er det lidt mindre end 2 i 89. Mange af nutidens mest sikre chifre bruger meget længere nøgler, men det er ikke svært at estimere, hvor mange årtier det ville tage at cracke et 89-bit-chiffer ved hjælp af et brute force-angreb og en pc. Der findes imidlertid en langt nemmere måde, og det kan vi illustrere med JCrypTool.
Hyppigt forkert
Til at begynde med kan du bruge JCrypTool til at kryptere noget tekst ved hjælp af det generelle mono-substitutions-chiffer. Brug en tekst med udelukkende store bogstaver og uden figurer, tegn, symboler eller mellemrum. De skal være mindst 50 enheder lang. Vælg Classic efterfulgt af Substitution i Algorithms-menuen. Når du har indskrevet nøglen på 26 bogstaver (som JCrypTool kalder Password) og har krypteret meddelelsen ved at klikke Apply password, gemmer du resultatet.
Nu skal vi se, hvor nemt det er at cracke denne krypterede meddelelse ved hjælp af frekvensanalyse.
Vælg Substitution Analysis fra Analysis-menuen, marker den krypterede fil, og vælg Start the analysis. Når resultaterne kommer frem, vælger du først Single characters ud for Show frequencies of. Nu får du en graf, der viser, hvor mange gange hvert bogstav i alfabetet forekommer. De hyppigst brugte bogstaver i engelsk (som er udgangspunktet for de fleste kryptografiske løsninger) er E, T, A, O, I, N, S, H og R, og det er derfor sandsynligt, at chiffertekst-bogstaverne for disse ren tekst-bogstaver befinder sig på listens øverste del. Medmindre du har brugt en stor mængde tekst, vil rækkefølgen ikke være nøjagtig. Der er brug for lidt detektivarbejde.
Krytografiens sprog
Kryptografi har sit eget sprog, som man skal forstå, hvis man vil have mest muligt udbytte af denne artikel. Første skal vi differentiere mellem en kode og et chiffer, fordi de to ord bliver brugt i flæng i almindelig tale.I en kode bliver symboler af en eller anden art brugt til at repræsentere ord eller vendinger. Hvis du for eksempel har set filmen Det vilde ræs (Smokey and the Bandit), husker du måske den udødelige vending “10-4 good buddy”. Der er tale om et eksempel på 10-kode brugt på en CB-radio. Denne kode er ikke hemmelig – den bliver brugt til at strømline kommunikation – men man kan også bruge koder i sikkerhedsøjemed. Chifre, derimod, laver ikke ændringer på ord- eller vending-niveau, men på bogstav- eller byte-niveau. Chifre har næsten altid til formål at gøre meddelelser ulæselige for alle andre end den ønskede modtager.
Kryptering indebærer, at man tager en læselig meddelelse, også kaldet ren tekst, og konverterer den til såkaldt chiffertekst. Det foregår, før man betror meddelelsen til en kommunikationskanal, hvor den kan blive opsnappet. Dekryptering er det modsatte: Her tager man chifferteksten, som den bliver leveret af kommunikationskanalen, og konverterer den tilbage til den originale rene tekst.
Dekryptering finder sted af en, der er autoriseret til at læse meddelelsen, og som derfor ved, hvordan man dekrypterer den. Heroverfor har kryptoanalyse, der er det officielle navn på kodebrydning, altså den proces, som består i, at en uautoriseret person er i stand til at læse en krypteret meddelelse.
Derfor består det næste skridt i at se på frekvensen af grupper af to og tre bogstaver. Dem kalder JCrytpTools Character 2-grams og Character 3-grams. Når vi ved, at de hyppigste bogstavpar i engelsk er TH, HE, IN og ER i den rækkefølge, og at THE er den hyppigste kombination af tre bogstaver, kan vi begynde at komme med nogle kvalificerede gæt.
Skriv dine gæt under Mapping of each alphabet character, så begynder du at se, at små bogstaver i ren tekst begynder at erstatte de store chiffertekst-bogstaver under Preview of deciphered text. Hvis du prøver dig frem, bør du kunne læse meddelelsen, men eftersom du allerede ved, hvad den formodes at bestå af, vil vi anbefale, at du prøver med en ukendt chiffertekst – bed en ven om at generere en ved hjælp af JCrypTool.
JCrypTool er en glimrende ressource, som du kan lære meget af, men der er intet, som slår hacking af en smule kode, hvis man vil forstå, hvad der foregår. For at få en bedre fornemmelse for, hvor svært det kan være at cracke en chiffertekst automatisk – selv en relativt simpel en såsom den generaliserede monosubstitutions-chiffertekst – vil vi foreslå, at du prøver dig frem med din egen software.
![](https://www.computerworld.dk/uploads/aod/2019/08/6-7-784x1024.jpg)
Du kan passende begynde med at implementere noget kode for at tælle frekvensen af enkelte bogstaver og kombinationer af to og tre bogstaver. I stedet for at give dig en metode til at bruge denne statistik til manuelt at dechifrere meddelelsen vil vi automatisere processen. Det er ikke helt nemt, og du er nødt til at analysere, hvordan du udfører processen ved at prøve dig frem. Det er vigtigt at have adgang til en engelsk ordbog.
Du undrer dig måske over, at vi foreslår at bruge tekst uden mellemrum. Det hænger sammen med, at der kun findes to engelske ord på ét bogstav, nemlig A og I. Hvis vi udelukker enhver mulighed for, at et andet enkeltstående bogstav som for eksempel J forekommer i teksten (hvilket ikke er umuligt, som denne sætning beviser), skal alle enkeltstående bogstaver svare til A eller I.
Tilsvarende findes der 104 ord på to bogstaver, men bortset fra 15 af dem bliver de kun sjældent brugt, og dem ville forekomsten af mellemrum afsløre. Hvis man kan identificere ord i chifferteksten, kan det være en kolossal fordel at gennemsøge ordbøger. Af den årsag bliver mellemrum normalt ikke bevaret på deres oprindelige plads, men for at gøre transskription af meddelelserne nemmere bliver de ofte genindsat, således at de deler meddelelsen op i grupper på fem bogstaver.
Den evige kamp
Kryptografiens historie afspejler en fortsat kamp mellem kodemagerne og kodebryderne. Et eksempel er, at bevidstheden om, at monoalfabetiske substitutionschifre var sårbare over for angreb med frekvensanalyse, førte til udvikling af det mere sikre polyalfabetiske chiffer.
Den bedste måde at beskrive disse chifre på – og det berømteste er Vigenère-chifferet – er som en kombination af adskillige monoalfabetiske substitutionschifre. I Vigenère-chifferet bliver hver substitution udført ved blot at flytte et antal pladser, som i det generaliserede Cæsar-chiffer, men antallet af pladser varierer i forhold til et nøgleord. Hvis nøgleordet er LINUX, bliver det første bogstav flyttet 11 pladser (forskellen på A og L), det andet bogstav otte pladser og frem til 23 pladser for det femte bogstav. Herefter vender man tilbage til 11 pladser for det sjette bogstav.
Frekvensanalyse afslører ikke nær så stor en forskel mellem forskellige chiffertekst-bogstaver. Men for at gøre en lang historie kort har man brugt forskellige analysemetoder til at estimere nøglelængden. Så snart man kender nøglelængden, bliver bogstaverne, der er adskilt efter nøglelængden (for eksempel bogstaverne 1, 6, 11, 16, 21 etc. og bogstaverne 2, 7, 12, 17, 22 etc. til en nøglelængde på fem bogstaver) behandlet ligesom det generaliserede Cæsar-chiffer. Til trods for, at denne metode er langt sværere end brugen af et monoalfabetisk substitutionschiffer, navnlig uden softwaresupport, blev den perfektioneret helt tilbage i 1854.
Overvej steganografi
![](https://www.computerworld.dk/uploads/aod/2019/08/5-8-796x1024.jpg)
Steganografi fungerer ved at skjule en meddelelse, således at ingen aner, at den er til stede. Det kan være et tekstdokument eller et jpg-billede. Det er ikke svært at indlejre en meddelelse i en tekstfil – man kan for eksempel arrangere teksten, således at meddelelsen kan uddrages, hvis man tager hvert tiende bogstav – men det vil som regel føre til en underlig tekst, der virker mistænkelig.
Det er mere almindeligt – og langt mindre synligt for en iagttager – at indlejre meddelelsen i et billede. Den kan for eksempel blive kodet ind i den mindst signifikante del af de værdier, som definerer farven i pixel, der grænser op til hinanden. Pixel har ofte mindst 24-bit-værdier, og en ændring på blot én ud af 16,7 millioner mulige farver vil være usynlig for øjet.
Der er ingen mangel på gratis steganografisoftware (for eksempel OpenStego eller StegoSuite). Men hvis du vil afprøve den, og du er seriøs og ikke blot nysgerrig, skal du være opmærksom på, steganografi ikke bliver betragtet som lige så sikker som kryptering. På den anden side: Hvis du krypterer dine data, før du indlejrer dem i et billede eller en lydfil, kan du få det bedste fra begge verdener.
Det, at Vigenère-chifferet kan crackes, illustrerer en vigtig omstændighed. Så længe nøglen er kortere end meddelelsen, vil der altid være mønstre i chifferteksten, som en kryptoanalytiker kan udnytte. Imidlertid bliver chifre langt sværere at cracke, i takt med at nøglelængden bliver øget, og det har ført til et de bedst kendte chifre.
Chiffermaskinen Enigma blev udviklet allerede i 1920’erne, men den blev brugt under Anden Verdenskrig af de tyske styrker, som mente, at den var umulig at overvinde. I modsætning til de fleste andre chiffertyper brugte man en elektromekanisk maskine til kryptering og dekryptering, fordi det ville have medført for mange fejl at gøre det i hånden.
Enigma-maskinen bestod af et tastatur og et panel af lamper, der angav den krypterede version af hvert bogstav, der blev indskrevet. Mellem tastaturet og lamperne var der tre hjul, og hvert af disse hjul konverterede ét bogstav til et andet i overensstemmelse med apparatets interne kabelføring. Dette medførte et monoalfabetisk substitutionschiffer, men en vigtig funktion bestod i, at efter at hvert bogstav var blevet skrevet, drejede et af hjulene med én plads.
![](https://www.computerworld.dk/uploads/aod/2019/08/3-12-1024x751.jpg)
Efter 26 bogstav var dette hjul vendt tilbage til sin startposition, men på det tidspunkt flyttede det andet hjul én plads. Og efter hver komplet rotation af det andet hjul flyttede det tredje hjul med ét klik. På den måde vendte maskinen kun tilbage til den samme konfiguration efter 26 x 26 x 26 = 4056 bogstaver.
For yderligere at komplicere sagerne gik signalet gennem de tre hjul to gange og blev hver gang oversat på en ny måde, og det gennemgik også et patch-panel, der gennemførte endnu en fikseret oversættelse. Man brugte forskellige hjul i maskinen på forskellige dage, hjulenes startpositioner blev ændret, og det samme gjaldt patch-panelets konfiguration. Du kan prøve onlinesimulatoren på http://enigmaco.de og få en bedre fornemmelse af, hvordan mekanikken virker.
Historien om, hvordan Enigma blev cracket hos Bletchley Park, det hemmelige center for kodebrydning i Buckinghamshire, er i dag velkendt. Det skete ved hjælp af den elektromekaniske Bombe-computer, og det udgjorde en afgørende sejr for kodebryderne. Men det varede ikke længe, før kodemagerne slog igen.
Nutidens chifre
Hidtil har vi koncentreret os om substitutions-chifre, men der findes også transpositions-chifre. Her forbliver hvert bogstav det samme, men deres rækkefølge bliver blandet sammen. Disse chifre bukker ikke under for frekvensanalyse, fordi frekvenserne altid vil være de samme som i den rene tekst. Princippet bliver brugt i nogle af nutidens mest sikre chifre parallelt med substitution.
Der findes en komplet beskrivelse af, hvordan AES-chifferet (Advanced Encryption Standard) fungerer, hvis du har lyst til at arbejde dig igennem hele dokumentationen. Imidlertid giver det ingen mening at skrive en introduktion til krytografi uden at komme ind på begrebet, og derfor vil vi kort beskrive fænomenet. Data bliver krypteret i blokke på 16 bytes, der er repræsenteret som 4 x 4-matricer. For hver blok bliver der udført fire forskellige operationer, og de omfatter både substitution og transposition.
Disse fire operationer bliver derefter udført i 10, 12 eller 14 runder, afhængig af nøglens længde, og hver gang bliver der brugt en såkaldt rund nøgle, der er udledt af den centrale chiffernøgle. Man kan bruge AES med 128-, 192- eller 256-bit-nøgler. JCrypTool gør det muligt at gennemføre en DES-kryptering, der svarer til AES. Det kan du finde i Visuals-menuen, men du er nødt til først at læse op på det.
![](https://www.computerworld.dk/uploads/aod/2019/08/1-12-1024x597.jpg)
Hidtil er der ingen, der med succes har præsteret et brute force-angreb på AES. Men som tegn på, at et så ekstremt kompliceret chiffer kan crackes, kan vi nævne, at det tilsvarende RC5-chiffer med en 64-bit-nøgle blev cracket i 2002. Det tog over fem år og inddrog et distribueret netværk af pc’er, hvor ikke færre end 331.252 brugere bidrog i løbet af de 1757 dage, det varede.
Distributed.net er den organisation, der stod bag denne bedrift, og organisationen arbejder nu på en tilsvarende udfordring med en 72-bit RC5-krypteret meddelelse. Folkene bag siger, at de med den nyeste teknologi er på vej til at kunne opbruge nøgleudvalget i løbet af 150 år. Så må vi jo trøste os med, at vores bankoplysninger et stykke tid endnu er i gode hænder med 256-bit AES.