Bookmark and Share

Svårighetsgrad
Svårighetsgrad
Betyg (5 röster)
BetygBetygBetygBetygBetyg
 

Kryptering

bild

Inledning

Denna utmaning går ut på att du ska knäcka en krypterad fil. Krypteringen är av en typ som brukar kallas "XOR kryptering" och är en mycket simpel typ av kryptering. Du bör därför inte använda den till något känsligt i framtiden då den ej erbjuder något säkert skydd. Däremot kan du genom att anta utmaningen lära dig grunderna inom kryptering!

Vad är kryptering?

Jo, data kan vara känsligt. Därför vill man omvandla, kryptera, meddelanden och information så att obehöriga inte kan förstå något av meddelandet ifall det skulle hamna i orätta händer. Det finns såklart många olika sätt att göra detta på. Oftast använder man sig av en s.k. kodnyckel för att kunna koda av, dekryptera, informationen. En kodnyckel används också för att kryptera informationen. Nyckel för kodning och avkodning behöver inte vara samma. Detta kan tyckas märkligt men sådana metoder kallas för asymmetrisk kryptering.

Vi ska utnyttja samma kodnyckel både vid kodning och vid avkodning. Detta kallas då för symmetrisk kryptering. Här gäller det att vi alltid håller kodnyckeln hemlig!

Exempel - XOR-kryptering

XOR, som den logiska grinden, är en funktion som har följande sanningstabell:

A B A XOR B
0 0 0
1 0 1
0 1 1
1 1 0

XOR är kort för exclusive OR och har en del intressanta egenskaper. XOR kan användas för att kasta om data utan att förstöra den. Tabellen ovan visar alla möjliga kombinationer vi kan ha mellan två bitar (A och B).

Vanligtvis låter man A vara datan som ska krypteras och B vara kodnyckeln. Resultatet, A XOR B, blir då vår krypterad data. XOR kan vi nu använda på flera bitar i taget med en större kodnyckel. T ex en 8 bitars kodnyckel som XOR’as ihop med 8 bitar data. Denna data kan t ex vara ett ASCII (char) tecken. Om jag vill koda texten "HEJ" med kodnyckeln 40:

DATA (ascii) H E J
DATA (binärt) 01001000 01000101 01001010
40 (binärt) 00101000 00101000 00101000
DATA XOR 40 (binärt) 01100000 01101101 01100010
DATA XOR 40 (ascii) _ m b

Översätter man det kodade meddelandet till ASCII text så får man bara rappakalja. Vi har alltså lyckats kryptera vårt meddelande! Det roliga är nu om vi försöker koda av med att XOR’a med samma kodnyckel (40):

DATA (ascii) _ m b
DATA (binärt) 01100000 01101101 01100010
40 (binärt) 00101000 00101000 00101000
DATA XOR 40(binärt) 01001000 01000101 01001010
DATA XOR 40(ascii) H E J

Vi får nu tillbaka vårt originalmeddelande "HEJ". Alltså fungerar vår XOR-kryptering!

Bitvis XOR i C#

Exemplet nedan visar hur du utför en bitvis XOR mellan variablerna a och b.

Okej, åter till utmaningen!

Utmaning

Kodad text

Här nedan finns en krypterad fil "coded.txt". Denna fil innehåller texten till en känd sång. Texten är XOR-krypterad med en 8-bitars kodnyckel. Använd din funktion för att koda av denna text.

Konstruera ett program som testar alla kombinationer av kodnycklar. Eftersom kodnyckeln bara är 8 bitar så finns det bara 256 olika kombinationer. Du ser direkt när du lyckats koda av filen helt.

Viktiga begrepp

  • kryptera/eng. encrypt
  • dekryptera/eng. decrypt
  • kodnyckel/eng. code key
  • asymmetrisk
  • symmetrisk

Kommentarer

4 inlägg