Kryptoteknik Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT)
XOR XOR används ofta i kryptering: A B A B 0 0 0 0 1 1 1 0 1 Bit-flipping Om XOR med 0 gör inget, om XOR med 1 byt bit värde. 1 1 0 Viktiga egenskaper: Commutativity: A B = B A Associativity: A (B C) = (A B) C 2
Kryptosystem Komponenter Klartextmeddelanden M Krypterade meddelanden C Nycklar K Krypteringsfunktion E : M x K C Dekrypteringsfunktion D : C x K M I normalfallet gäller: D(E(m,k 1 ), k 2 ) = m Ibland är k 1 = k 2 3
Klassiska system Caesar Ersätt varje bokstav med den under, nyckeln är antalet förskjutningar, t.ex. k = 3. A B C D E F G H I D E F G H I J K L HAGE = KDJH Om man vet att det är ett Caesar chiffer, så är det lätt att knäcka, testa bara alla förskjutningar, beroende på språk bör det vara runt 26 olika nycklar. 4
Klassiska system Transposition Skriv ut texten i en matris och läs en kolumn i taget, antalet kolumner och rader bestäms av nyckeln, t.ex. k = 4,6 T H E B R O W N F O X J U M P E D O V E R T H E THE BROWN FOX JUMPED OVER THE = TWUVHNMEEFPRBOETRXDHOJOE Ganska lätt att knäcka, kan testa olika nycklar för att hitta stycken med riktiga ord. 5
One-time pad Första kända förklaringen av one-time pad - Frank Miller 1882 Återupptäckt av Gilbert Vernam 1917 1949 publicerade Claude Shannon ett bevis som visar att one-time pad är omöjlig att knäcka om det används på rätt sätt. Liknande bevis påstås ha kommit från andra, men de är ej publika. Beviset bygger på följande intuition: Givet ett krypterat meddelande C så är alla klartext-meddelanden M av samma längd som C lika sannolika, dvs det finns ingen information i C som avslöjar något om M (förutom just längden). 6
One-time pad One-time pad in action: Ta ett meddelande från M, t.ex: marcus, och översätt till binär (vi använder här 8-bit ASCII). Generera sedan en helt slumpmässig nyckel av 1 or och 0 or som är lika lång som ordet i binär form. XOR dessa två Resultatet är det krypterade meddelandet (det är inte alltid möjligt att översätta tillbaka till 8- bit ASCII). 01101101 01100001 01110010 01100011 01110101 01110011 01000010 11101111 11001110 10001011 01011001 01100000 00101111 10001110 10111101 11101000 00101100 00010011 7
One-time pad 01101101 01100001 01110010 01100011 01110101 01110011 01000010 11101111 11001110 10001011 01011001 01100000 00101111 10001110 10111101 11101000 00101100 00010011 Viktigt att tänka på när man använder one-time pad: Nyckeln måste vara helt slumpad, detta kan vara svårt. Det får alltså inte finnas någon statistiskt signifikant skillnad mellan två olika nycklar T.ex. skulle en icke-slumpad nyckel kunna innehålla: Signifikant fler 0 or är 1 or Signifikant fler 00 or än 11 or Upprepande, kanske inte direkt uppenbara, mönster. T.ex. kanske det visar sig att nycklar ibland upprepar sig efter 10000 tecken. Om nyckeln inte är helt slumpad så finns det analysmetoder för att få fram nyckeln. 8
One-time pad 01101101 01100001 01110010 01100011 01110101 01110011 01000010 11101111 11001110 10001011 01011001 01100000 00101111 10001110 10111101 11101000 00101100 00010011 Viktigt att tänka på när man använder one-time pad: En nyckel får aldrig användas mer än en gång! Antag att vi har m 1 och m 2 från M och nycklar k 1 och k 2, då får vi: m 1 k 1 = c 1 och m 2 k 2 = c 2 Det vanligaste fallet är att den som vill knäcka vår kod kan se c 1 och c 2, det är helt ok, för vi har krypterat vår text. Men om k 1 = k 2 = k så får vi problem, för då har vi: c 1 c 2 = (m 1 k) (m 2 k) = m 1 m 2 k k = m 1 m 2 Hur användbar är kunskapen m 1 m 2? 9
One-time pad Hur användbar är kunskapen m 1 m 2? Beror lite på vad vi vet om m 1 och m 2. Ibland kan den som attackerar skicka vilket meddelande som helst till systemet och få tillbaka krypterade meddelanden. I detta fall skulle man t. ex. känna till m 2 och därmed kan man göra: m 1 m 2 m 2 = m 1 Det kan också räcka att känna till vilket språk som m 1 och m 2 är skrivna i, t ex engelska. I engelskan är the vanligt. Vi testar XOR med the längs hela m 1 m 2 och ser om vi får ett vettigt resultat. Om vi då får ut apple, så innebär det att ett av meddelandena innehåller ordet apple och det andra ordet the. Om the inte fanns så skulle vi bara fått något konstigt, som t ex \%ax& Om man dessutom använt samma nyckel mer än två gånger, kanske flera tusen gånger, då blir det lättare och lättare att knäcka krypteringen. 10
One-time pad Så vi har ett perfekt krypto, varför finns det då ens en vetenskap och utveckling inom kryptografi? Visar sig att one-time pads är helt omöjliga att jobba med i större skala: Nyckeln måste vara helt slumpad, absolut hemlig, lika lång som meddelandet, och aldrig användas mer än en gång: Att slumpa nycklar av tillräckligt stor längd är nästan omöjligt (man kan tänka sig att man slår en tärning för att få fram nycklar, men det är omständligt och även tärningar är biased) Om jag kan transportera och lagra nycklar, av samma längd som meddelandet, mellan två parter på ett sådant sätt att ingen annan kan upptäcka nycklarna, varför transporterade jag bara inte då hela meddelandet med en gång? Man kan aldrig använda samma nyckel två gånger, så även om jag fysiskt levererade en nyckel till en person, kan vi bara använda nyckeln en gång. 11
Moderna kryptosystem Moderna och användbara kryptosystem försöker uppnå one-time pad säkerhet, men samtidigt göra krypteringen användbar. Huvudtyper Stream cipher kryptera en symbol i taget Block cipher kryptera ett block i taget. Symmetriska system (samma k K i E och D) Data Encryption Standard (DES) Advanced Encryption Standard (AES) Asymmetriska system (olika k K i E och D) RSA DSA 12
Vi börjar att titta på symmetrisk kryptering, där nyckeln är den samma vid kryptering och dekryptering. SYMMETRISK KRYPTERING 13
Huvudtyper Stream cipher Block cipher K E M K E M C C 14
Stream cipher Stream cipher Istället för att ha en nyckel som är av fast längd, så genererar vi en ström av bitar som vi kallar en keystream. K E Denna keystream kan kryptera alla meddelanden oavsett längd. Vi genererar helt enkelt en ny nyckel-bit för varje bit i meddelandet. M C En funktion, ofta kallad pseudorandom number generator (PRNG), är ansvarig för att generera denna keystream. Denna keystream är pseudorandom dvs, den är inte helt slumpmässig, men tricket är att få den att se ut att vara det. 15
Stream cipher Stream cipher K E Input till PRNG är en given nyckel k (som vi håller hemlig), men den är relativt kort, t.ex. bara 128 bitar. Vi får dock inte använda samma k flera gånger, eftersom output från PRNG alltid är samma för samma nyckel. Samma problem uppstår som när vi använder nycklar två gånger i one-time pad. M C Exakt hur funktionen PRNG fungerar varierar kraftigt mellan olika krypteringsmetoder, detta är ett område som varit och är under stor utveckling. 16
Stream cipher Ok, nyckeln k är kortare nu, men eftersom vi inte får använda den mer än en gång så måste vi ändå på något sätt hantera hemliga nycklar mellan användare. Ett sätt att komma runt detta är att använda en hemlig nyckel och en initialization vector (IV). Den hemliga nyckeln delar alla användare på, t ex ett lösenord. En IV genereras för varje meddelande och sätts ihop med det hemliga lösenordet. Tillsammans skapar de input nyckeln till PRNG. Vi skickar sedan det krypterade meddelandet och IV till alla som ska läsa meddelandet. De känner till lösenordet, sätter ihop med IV och kan sedan skapa samma keystream för att dekryptera. Någon som ser IV och meddelande som inte har lösenordet kan inte skapa samma input till PRNG. Användes i WEP (kryptering i trådlösa nätverk), lätt att knäcka för att IV var för kort. Löstes med WPA där IVs var längre mm. 17
Stream cipher Stream cipher Stream ciphers är omtyckta för att de är enkla och snabba. De kan implementeras i hårdvara, och exekverar extremt fort. K E RC4 en känd stream cipher algoritm som används i WEP, WPA, TLS/SSL, etc. På senare tid påstås det att NSA kan knäcka RC4 på kort tid. M C DVD er är krypterade med stream ciphers. Stream ciphers tillhör familjen symmetriska krypton eftersom både kryptering och dekryptering använder samma nyckel. 18
Block cipher Istället för att kryptera ett meddelande bitför-bit, så tar vi flera bitar och krypterar alla samtidigt. Block cipher Beroende på användningsområde så kan detta vara betydligt snabbare än stream ciphers (men inte alltid). En implementation som är vida känd är Feistelnätverk som används i Data Encryption Standard (DES). DES brukar vara en dominant algoritm för kryptering, men är nu mer eller mindre död. K M E C DES och Feistelnätverk är dock ärketypen för hur block ciphers fungerar. 19
Feistelnätverk Data Encryption Standard (DES) Input 64 bitar Block storlek = 64 bitar Först delas meddelandet upp i två (32 bitar) L 0 R 0 F K 0 R 0 körs genom funktionen F med nyckeln k 0 R 0 blir L 1 L 0 blir XOR ed med output från F, detta blir R 1 Detta upprepas totalt 16 gånger. Sedan konkateneras dessa för att skapa 64 bitar output. L 1 = R 0 R 1 = L 0 F(R 0, K 0 ) F K 1 En algoritm skapar 16 nycklar av storlek 48 bitar från en given nyckel på 56 bitar (denna nyckel hålls hemlig). Vi skippar detaljerna av denna algoritm. L 2 = R 1 R 2 = L 1 F(R 1, K 1 )...... L 16 = R 15 R 16 = L 1 F(R 15, K 15 ) Output 64 bitar 20
The Feistel (F) function R i (32-bits) Expansion E i (48-bits) Här kommer den högra sidan K i Den expanderas till 48 bitar genom att duplicera bitar av sig själv. De expanderade bitarna är XOR ed med en 48 bits nyckel (det finns 16 olika 48 bits nycklar). S 1 S 2 S 3 S 4 S 5 S 6 S 7 S 8 P Resultatet delas upp i åtta 6 bitars delar, och skickas in i s.k. S-boxes. Dessa S-boxes är statiska översättningar från 6 bitar till 4 bitar, t ex i S 5 så översätts 011101 till 1001. 32-bits 4 bitar kommer ut ur varje S-box Output 32-bitar, detta XOR as med L i och skapar R i+1 En permutation av bitarna görs för att se till att varje output från en S-box i denna omgång kommer att spridas mellan 4 S-boxes i nästa omgång. 21
DES (Data Encryption Standard) DES ifrågasattes redan innan den blev en standard. 1977 blev den en officiell standard för kryptering i USA. Problemet var den korta nyckeln på 56 bitar. Antalet nycklar är 2 56 = 72057594037927936 Redan samma år föreslogs en maskin för 20 miljoner USD som kunde knäcka DES på en dag (genom att testa alla nycklar). Idag kan man, för relativt lite pengar, bygga en maskin som knäcker DES på en dag. Dessutom finns sätt att knäcka DES på som inte kräver att man testar alla nycklar. DES används dock fortfarande i en annan form, s.k. triple DES eller 3DES. Som namnet antyder så applicerar men helt enkelt DES tre gånger på samma block. Långsammare, men har en nyckel på 168 bitar Skillnaden är enorm: 2 168 = 374144419156711147060143317175368453031918731001856 Men det visar sig finnas attacker som bara behöver testa en delmängd av nycklarna, vilket reducerar 3DES säkerhet till 80 bitar, fortfarande dock stor skillnad från 56 bitar: 2 80-2 56 = 1208925747557035136778240 22
Advanced Encryption Standard Advanced Encryption Standard (AES) ersätter DES. Standardkrypto i många system idag. Blockstorlek på 128 bitar. Nyckelstorlek 128, 192 eller 256 bitar. Går att implementera i hårdvara och mjukvara. Ingår i WPA2 säkerhet för trådlösa nätverk där den är inställd att fungera som ett stream cipher. 23
Electronic code-book mode (ECB) Kryptering av ett block i taget, utan feedback. M M M K E K E K E C C C Samma indata ger samma utdata: mönster syns i utdata 24
Cipher Block Chaining (CBC) Föregående kryptotext XOR med meddelandet. M M M IV K E K E K E C C C Utdata uppvisar inga uppenbara mönster 25
Symmetrisk kryptering Stream cipher En bit i taget, PRNG, keystream, IV (RC4) Block cipher Ett block i taget, Feistelnätverk (DES, AES) Hur kommer man överens om en nyckel att använda vid kryptering? För långa statiska kopplingar, t.ex. lösenord för Wi-Fi, kan vi fysiskt dela ut nycklar. Hur gör man för dynamiska kopplingar, t.ex. två klienter långt ifrån varandra som aldrig träffats? Vi måste titta på asymmetrisk kryptering först. 26
Vid asymmetrisk kryptering används inte samma nyckel för att kryptera som för att dekryptera. ASYMMETRISK KRYPTERING 27
Kryptosystem med öppna nycklar I asymmetrisk kryptering talar man om public key och private key. Den publika nyckeln kan vem som helst få känna till, den används bara för att kryptera meddelanden. Den privata nyckeln får endast den som skall läsa meddelandet känna till, den används för dekryptering. Om jag har en uppsättning public/private, så visar jag upp för alla min publika nyckel, kan lägga ut den på internet. Sedan kan vem som helst använda den nyckeln för att kryptera meddelanden. Det är endast jag som sedan kan dekryptera dessa meddelanden. 28
Algoritm: RSA Generera två stora primtal p, q och beräkna n = pq (p och q måste hållas hemliga) Välj ett heltal e, sådant att 1 < e < (p-1)(q-1) och (p-1)(q-1) inte är jämnt delbart med e e och n är publika, de kan delas ut fritt Beräkna d så att d * e 1 mod (p-1)(q-1) d är vår privata nyckel, ingen får se den Om någon vill skicka något hemligt till oss så krypterar de sitt meddelande m: Kryptera: c = m e mod n Vi är de enda som kan dekryptera detta meddelande: Dekryptera: m = c d mod n 29
RSA RSA kan också användas för att signera avsändaren. Om A vill vara säker på att ett visst meddelande kommer från B, så kan B kryptera sitt meddelande med sin privata nyckel, A kan då dekryptera med Bs publika nyckel. På så vis garanterar vi att meddelandet kommer från B, eftersom ingen annan känner till Bs privata nyckel. RSA används för att generera nycklar, t ex för SSH, SSL/TLS, etc. Väldigt matematiskt vackert, men det finns ett stort problem som återkommer när det gäller asymmetrisk kryptering. 30
Problem med asymmetrisk kryptering Asymmetrisk kryptering är smidigt och användbart. Det finns bara en nyckel som bara en part måste hålla hemlig, den publika nyckeln är fri för alla att se. Det finns ett stort problem med asymmetrisk kryptering när man försöker implementera det i verkligheten: Hur kan man garantera att den publika nyckeln verkligen tillhör rätt entitet? Om Google säger Här är vår publika nyckel, hur vet du att det verkligen är Google som påstår detta, och inte någon som låtsas vara Google? Vi besvarar detta på nästa föreläsning, men kom ihåg att vi har ett visst problem med autentisering här. 31
Diffie-Hellman key exchange För att besvara frågan från symmetriska krypton angående hur man kommer överens om en nyckel så tittar vi på Diffie-Hellman. Tillåter två parter att över en osäker kommunikationskanal komma överens om en hemlig nyckel för symmetrisk kryptering. Publicerades officiellt 1976. Använder asymmetriska tekniker för att överföra en symmetrisk nyckel. Det kan verka som att det löser problemet med publika nycklar, men det gör bara det delvis. För många implementationer vill man använda samma publika nyckel med alla man kommunicerar med, det löser inte Diffie-Hellman. 32
Diffie-Hellman public key exchange Alice (A) och Bob (B) bestämmer två icke-hemliga tal: g och p p ska vara ett stort primtal g och p är inte hemliga, det finns t o m tabeller som man kan välja lämpliga g och p från. A och B slumpar sedan ett stort heltal x (vi skriver x(a) och x(b)) x(a) och x(b) måste hållas hemliga Ingen annan än A får känna till x(a), inte ens B. Baserat på x så genereras Y för A och B Y A = g x(a) mod p, Y B = g x(b) mod p Detta är publika nycklar som de skickar till varandra 33
Diffie-Hellman public key exchange Nu kan A och B båda beräkna en hemlig nyckel: k = Y B x(a) mod p (Beräknas av A, eftersom endast A känner till x(a)) k = Y a x(b) mod p (Beräknas av B, eftersom endast B känner till x(b)) När algoritmen är klar, så har A och B en gemensam hemlig nyckel, ty: k = k = g x(a)x(b) mod p Ingen som sitter och lyssnar på datatrafiken kan beräkna denna nyckel, eftersom man måste känna till antingen x(a) eller x(b). Nu kan man använda k för symmetrisk kryptering för att överföra hemlig information. 34
35 CHECKSUMMOR
Kryptografiska checksummor Checksumma: Funktion som beräknar k bitar från n bitar, där n > k. Kryptografisk checksumma: Funktion H: A B där... givet m A är det enkelt att beräkna H(m) givet c B kan man inte beräkna m så att H(m) = c man kan inte hitta m 1,m 2 A så att m 1 m 2 och H(m 1 ) = H(m 2 ) H kallas ofta för en hash-funktion 36
Exempel: MD5 MD5 Klassisk hash-funktion Utdata: Ett 128-bitars block. MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6 MD5("The quick brown fox jumps over the lazy dog.") = e4d909c290d0fb1ca068ffaddf22cbd0 Väldigt liten skillnad på meddelandet, väldigt stor skillnad på utdata Analys: Det går att hitta kollisioner, dvs H(m 1 ) = H(m 2 ) där m 1 m 2 Betraktas som knäckt, ska inte används i nya system 37
Exempel: SHA-Familjen SHA-1: 160 bitar Designen liknar MD5. Användning av SHA-1 har börjat upphöra. SHA-2: 224, 256, 384 eller 512 bitar Ska användas i USA från och med 2010. SHA-3 Release 5:e augusti 2015 Principen den samma, olika indata ger olika hash-värde. 38
Checksummor Används flitigt i många områden: När man sparar lösenord i databaser ska man aldrig spara de i klartext, istället sparar man checksumman. När man laddar ner filer på nätet så kan man ibland få en checksumma att jämföra emot. När du laddat ner hela filen så beräknar du checksumman, om den inte stämmer med den som utgivaren av filen gett dig, så kan filen blivit korrupt eller hackad på vägen. Garanti för att ingen har ändrat ett meddelande under transport, t.ex. vid överföring av data mellan två klienter på internet. 39
Integritet av meddelanden A och B har en hemlig nyckel K de använder för att symmetrisk kryptera meddelanden till varandra. Men hur kan A och B vara säkra på att inte C ändrar på meddelandena under transport? C kan vara en man-in-the-middle som ser allt, och kan ändra på alla paket. A och B ska givetvis inte lita på paketen de tar emot om de har ändrats under transport. 40
HMAC Keyed Hash Message Authentication Code Kryptografisk hash för autentisering av meddelande. Använder en hemlig nyckel vid beräknande av hash-värdet. Algoritm: HMAC(K,m) = h(k opad h(k ipad m)) opad och ipad är konstanter K = privat nyckel m = meddelandet h = hash-funktion (MD5,SHA,etc). = konkatenera 41
HMAC HMAC(K,m) = h(k opad h(k ipad m)) Endast den som kan K kan skapa HMAC(K,m) A skickar sitt krypterade meddelande m och sin beräkning av HMAC(K,m) till B. B kan dekryptera m, men B kan dessutom beräkna HMAC(k,m). Om B s beräkning av HMAC(K,m) är annorlunda än den som A skickade, då har någon ändrat på meddelandet under transport. 42
Säkerhetstjänster Konfidentialitet Kryptering av data med publik nyckel. Kryptering av t.ex. AES-nyckel med publik nyckel. Enbart den som kan den privata nyckeln kan läsa meddelandet. Integritet Kryptering av data med publik nyckel. Kryptering av checksumma med publik nyckel. Enbart den som kan den privata nyckeln kan ändra på meddelandet. Autentisering Fortfarande lite olösta problem här, nästa föreläsning 43
Svagheter i kryptosystem Algoritm kontra implementation Dagens algoritmer är oftast mycket bra Öppna algoritmer (t.ex. AES) är bättre än hemliga (t.ex. RC4) Implementationer kan ha svagheter Felaktigt mode (t.ex. ECB) Dålig slumptalsgenerering vid nyckelgenerering Viktiga punkter: Använd alltid beprövade algoritmer på beprövade sätt. Lita inte på hemlighållande av algoritmer för säkerhet. 44
www.liu.se