Symmetrisk kryptering

Symmetrisk kryptering, även kallas ”delad-nyckel-kryptering”, använder en enda nyckel för att både kryptera och dekryptera. Nyckeln som används kan även kallas ”Symmetrisk nyckel”, ”Hemlig nyckel” eller ”Sessionsnyckel”.

Förfarandet vid symmetrisk kryptering ser ut enligt följande:
1. Alice och Bob kommer överens om en hemlig nyckel
2. Alice krypterar ett meddelande med den hemliga nyckeln
3. Alice skickar meddelandet till Bob
4. Bob använder samma hemliga nyckel och dekrypterar meddelandet

Då alltså samma nyckel används åt båda håll, är metodens svaghet att bibehålla nycklen hemlig för obehöriga.

Ju större nyckel som används, desto säkrare blir metoden, och är då i princip omöjlig för någon utan nyckeln att forcera.

Vid en symmetrisk kryptering transformeras klartext till block av krypterad data enligt ett visst protokoll, vilket är själva algoritmen. Denna anger hur själva datat ska delas upp, vilket skiljer sig mellan olika typer av algoritmer. De vanligaste algoritmerna är DES, 3DES, RC2 och Rijndael (AES).

Olika algoritmer kan använda olika krypteringslägen (Chipher modes), vilka specificerar variationer i hur data ska förberedas innan dess processering. Nedan förklaras några av dessa. Notera dock att alla lägen inte supporteras av alla algoritmer.

Electronic Codebook mode – ECB
Detta är det enklaste läget som först bryter ner texten i mindre identiskt stora kodblock, och sedan konkatenerar ihop all utdata från krypteringsfunktionen till en längre text. Detta kan tyckas vara ett logiskt sett, men har en brist i och med att all lik data kommer att resultera i samma utdata. I teorin så innebär det att om en utomstående kan gissa sig till ett visst ord och därmed hitta alla andra förekomster av ordet i det krypterade datat, så kan datat eventuellt forceras. Detta gäller främst meddelanden såsom brev där det första ordet kanske alltid är ”Hej”, ”Hallå”, ”Bästa” osv. Detta läge är som sagt det enklaste, och därmed också det minst säkra, varför det inte heller rekommenderas.

Cihper Block Chaining – CBC
Det vanligaste sättet att undvika problematiken med ECB är att lägga till en såkallad ”Feedback” i funktionen. Detta innebär att varje block av data som transformeras kommer att påverka hur de fortsatta blocken transformeras, vilket resulterar i att lika ord kommer att tranformeras olika för olika block. Detta görs genom att man anger en slags ”Extra nyckel” – även kallad IV (Initialize Vector) – som det första blocket av data kör en XOR-operation mot. Fortsatta block använder istället föregående block som ”nyckel” (IV) vilken ytterligare XOR-operationer körs mot.
Förfarandet för CBC ser ut enligt:
1. Bryt ner klartexten i lika stora block av data
2. XOR-operation på första blocket mot IV
3. Kryptera block ett
4. XOR-operation på andra blocket mot första blocket (utdata från steg 2, ej steg 3)
5. Kryptera block två
6. XOR-operation på tredje blocket mot andra blocket (utdata från steg 4, ej steg 5)
7. Kryptera block tre
8. osv

IV-värdet som anges måste alltså ha samma storlek som blocken har. Detta gör att olika blockstorlekar kräver olika storlek på IV.

Cipher Feedback Mode – CFB
CBC fungerar utmärkt i många situationer, särskilt gällande kryptering av hela meddelanden som skickas i en enda text. I andra situationer däremot fungerar det inte lika bra. Detta kan vara vid överföring av nätverksinformation, där varje block behöver processas innan nästkommande block tas emot, detta för att förhindra att alltför mycket data hålls i minnet åt gången. Vid dessa tillfällen används istället CFB, vilken liksom CBC använder en ”IV”, dock på ett annorlunda sätt.
1. Skapa en t.ex. 64-bitars ”kö” bestående av flera IV block
2. För varje block (8 bit) med klartext-data utförs följande:
2.1 Kryptera kön (från steg 1)
2.2 XOR de 8 första bitarna från kön med det 8-bitars klartextblocket
2.3. Lägg till ovanstående resultat till utdata
2.4 Bitförflytta köns vänstra 8 bitar (och ta därmed bort 8 andra bitar)
2.5 Fyll på med 8 nya bitar tagna från utdata (steg 2.3)
Detta ger ett resultat av att varje block krypteras för sig, vilket medför den önskade effekten av att blocken kan behandlas ett och ett.

Block Padding
Oavsett vilket av ovanstående sätt som används så kan ett problem uppstå, då indata inte alltid är jämt delbart med 8 (om det är den aktuella blockstorleken). Lösningen till detta är att ”padding” läggs på för utjämning. Det finns primärt två sorters padding som används.

Det första innebär att det sista blocket fylls på med ”0” för att fylla ut den aktuella storleken. Problemet med detta är dock att om ett meddelande skulle sluta med ”0” som kommer denna troligen också att tas bort, då algoritmen inte känner av vad som är meddelande och vad som är en del av ”paddingen”.

Istället för att använda ”0” kan man även använda det som också anges i ”PKCS #7”, vilket är att sätta värdet till samma storlek som ”padding” är. Detta innebär att vid dekryptering så avläses helt enkelt sista värdet i sista blocket för att ta reda på hur många bytes som ska tas bort.

Nyckelstorlek
Som tidigare nämnt så är det nyckelstorleken som avgör hur pass säker krypteringen blir. Detta på grund av att en längre nyckel tar längre tid att hitta om ett ”Brute Force” program används.
Olika algoritmer har olika längd på dess nyckel:
DES, 56 bitar
RC2, 40-128 bitar
3DES, 3*56 bitar (kan även finnas med 2*56 bitar)
Rijndael (AES), 128,192 eller 256 bitar

För att göra 3des-kryptering i c# kan du använda tripledescryptoserviceprovider.

2 kommentarer

  1. […] 2009 vid 08:00 · Arkiverad under Säkerhet Exclusive-OR (XOR) kryptering är enkel form av symmetrisk kryptering. Den är enkel att genomföra men för den som skall forcera en text krypterad med XOR med lång […]

  2. […] Säkerhet Asymmetrisk kryptering används ofta för att skicka den nyckel som används vid symmetrisk kryptering för att denna skall hållas […]

RSS feed for comments on this post

Kommentarer inaktiverade.

%d bloggare gillar detta: