Undersökning och design av en säkerhetslösning för en molnlagringstjänst

Relevanta dokument
Undersökning och design av en säkerhetslösning för en molnlagringstjänst

Kryptografi - När är det säkert? Föreläsningens innehåll. Kryptografi - Kryptoanalys. Kryptering - Huvudsyfte. Kryptografi - Viktiga roller

Grundfrågor för kryptosystem

Kryptering. Krypteringsmetoder

Krypteringteknologier. Sidorna ( ) i boken

Metoder för sekretess, integritet och autenticering

Modul 3 Föreläsningsinnehåll

Kryptering HEMLIG SKRIFT SUBSTITUTION STEGANOGRAFI KRYPTOGRAFI

Kryptering. Av: Johan Westerlund Kurs: Utveckling av webbapplicationer Termin: VT2015 Lärare: Per Sahlin

256bit Security AB Offentligt dokument

Säkerhet. Säker kommunikation - Nivå. Secure . Alice wants to send secret message, m, to Bob.

Datasäkerhet. Petter Ericson

Att använda kryptering. Nyckelhantering och protokoll som bygger på kryptering

Kryptoteknik. Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT)

Protokollbeskrivning av OKI

Grundläggande krypto och kryptering

Föreläsning 7. DD2390 Internetprogrammering 6 hp

Designprinciper för säkerhet och Epilog. Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT)

Kryptografi: en blandning av datavetenskap, matematik och tillämpningar

EIT060 Datasäkerhet - Projekt 2. Jacob Ferm, dt08jf0 Johan Paulsson, dt08jp8 Erik Söderqvist, dt08es8 Magnus Johansson, dt08mj9 26 februari 2011

RIV Tekniska Anvisningar Kryptografi. Version ARK_

Introduktion till protokoll för nätverkssäkerhet

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

Säkerhetsbrister & intrång

Objektorienterad Programkonstruktion. Föreläsning 16 8 feb 2016

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Cipher Suites. Rekommendationer om transportkryptering i e-tjänster

Att bygga VPN. Agenda. Kenneth Löfstrand, IP-Solutions AB. Olika VPN scenarios. IPsec LAN - LAN. IPsec host - host SSH

EIT060 Datasäkerhet - Projekt 2. Jacob Ferm, dt08jf0 Johan Paulsson, dt08jp8 Erik Söderqvist, dt08es8 Magnus Johansson, dt08mj9 26 februari 2011

Föreläsning 10. Grundbegrepp (1/5) Grundbegrepp (2/5) Datasäkerhet. olika former av säkerhet. Hot (threat) Svaghet (vulnerability)

Skydd för känsliga data

Datum: Version: Författare: Christina Danielsson Senast ändrad:

Probably the best PKI in the world

Många företag och myndigheter sköter sina betalningar till Plusoch

Authentication Context QC Statement. Stefan Santesson, 3xA Security AB

Dagens agenda. Lagring & berarbetning av data. Filer och filformat Metadata Komprimering Kryptering Olika typer av data Filsystem Databaser

Krypteringstjänster. LADOK + SUNET Inkubator dagarna GU, Göteborg, 6-7 oktober Joakim Nyberg ITS Umeå universitet

TDDI16: Datastrukturer och algoritmer

Kryptering & Chiffer Del 2

Filleveranser till VINN och KRITA

Säker e-kommunikation

RSA-kryptering och primalitetstest

Tekn.dr. Göran Pulkkis Överlärare i Datateknik. Nätverksprotokoll

Information technology Open Document Format for Office Applications (OpenDocument) v1.0 (ISO/IEC 26300:2006, IDT) SWEDISH STANDARDS INSTITUTE

Systemkrav och tekniska förutsättningar

Vad man vill kunna göra. Lagra och skicka krypterad information Säkerställa att information inte manipuleras Signera sådant som man står för

Säkerhet. Säkerhet. Johan Leitet twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

Certifikattjänsten - testbädd. Anläggningsprojekt för ett nationellt inkomstregister

Avancerad SSL-programmering III

Policy Underskriftstjänst Svensk e-legitimation

Abstract. 1. Inledning

Grunderna i PKI, Public Key Infrastructure

Europeisk samsyn på kryptomekanismer SOGIS nya kryptolista en översikt

SSL/TLS-protokollet och

Övning 6. Komprimering, kryptering, dokumentering & testning

Grundläggande kryptering & chiffer

Säkerhet. Föreläsning 6 Säkerhet. Johan Leitet twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

EIT060 Datasäkerhet - Projekt 2. Jacob Ferm, dt08jf0 Johan Paulsson, dt08jp8 Erik Söderqvist, dt08es8 Magnus Johansson, dt08mj9 26 februari 2011

KRYPTERING - MÖJLIGHET ELLER OMÖJLIGHET. Carl Önne carl.onne@certezza.net

En introduktion till några klassiska chiffer

Isolda Purchase - EDI

Beijer Electronics AB 2000, MA00336A,

Inte bara det, vi har dessutom fått allt fler arbetsredskap. När vi inte har kontroll på enheterna är det svårare att skydda dem.

1 Vad är Versionshantering? 2 Git. 2.1 GitHub

Telia Centrex IP Administratörswebb. Handbok

NÅGOT OM KRYPTERING. Kapitel 1

MA2047 Algebra och diskret matematik

PGP håller posten hemlig

Datasäkerhet och integritet

Kryptering. Wearable Computers D 10p. Namn: Josef Israelsson Datum: Lärare: Björne Lindberg Ulf Brydsten Lars Karlsson

Modul 6 Webbsäkerhet

Identity Management i ett nätverkssäkerhetsperspektiv. Martin Fredriksson

Kravspecifikation Fredrik Berntsson Version 1.1

Din manual NOKIA

Molntjänster. Översikt. Lektion 1: Introduktion till molntjänst. Introduktion till molntjänst. Vilka tjänster finns? Säkerhet.

Systemkrav WinServ II Edition Release 2 (R2)

Vad är molnet? Vad är NAV i molnet? Vem passar NAV i molnet för? Fördelar med NAV i molnet Kom igång snabbt...

Enterprise App Store. Sammi Khayer. Igor Stevstedt. Konsultchef mobila lösningar. Teknisk Lead mobila lösningar

4 grundregler. Minneshantering. Problemet. Windows minkrav

Föreläsning 10 Datasäkerhet grundbegrepp datasäkerhet i nätet. Säkerhet. Grundbegrepp (1/5) Modern telekommunikation

SLU Säkerhets instruktioner avseende kryptering av filer

Konfigurering av eduroam

Dagens föreläsning. Datasäkerhet. Tidig historik. Kryptografi

Beställning av certifikat v 3.0

DNSSec. Garanterar ett säkert internet

Användarhandledning för The Secure Channel

Foto: Björn Abelin, Plainpicture, Folio bildbyrå Illustrationer: Gandini Forma Tryck: Danagårds Grafiska, 2009

Trådlösa nätverk. Säkerhetsprotokoll WEP och WPA. I den här rapporten går vi igenom säkerheten i trådlösa nätverk, i synnerhet krypteringsprocess

E V - C E R T I F I K AT: VA R F Ö R A N V Ä N D A D E N S TA R K A S T E S S L AUTENTISERINGSPROCESS?

Användarhandbok. Trio Visit Web. Trio Enterprise 4.1

Support Manual HoistLocatel Electronic Locks

Logging Module into the PRIME Core

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

Kryptografi: en blandning av datavetenskap, matematik och tillämpningar

Cloud Computing för arkitekter Sten Sundblad IASA och Sundblad & Sundblad

Sentrion och GDPR Information och rekommendationer

Datasäkerhet och integritet

What Is Hyper-Threading and How Does It Improve Performance

Test av kryptobiblioteket

Primtal, faktorisering och RSA

Transkript:

EXAMENSARBETE INOM DATATEKNIK, AVANCERAD NIVÅ, 30 HP STOCKHOLM, SVERIGE 2017 Undersökning och design av en säkerhetslösning för en molnlagringstjänst LUDVIG CEDERFELT KTH SKOLAN FÖR DATAVETENSKAP OCH KOMMUNIKATION

Undersökning och design av en säkerhetslösning för en molnlagringstjänst Analysis and design of a security solution for a cloud storage service Ludvig Cederfelt Examensarbete, datalogi. Examinator: Olle Bälter Handledare: Sonja Buchegger Skolan för datavetenskap och kommunikation Kungliga Tekniska Högskolan, Stockholm, Sverige.

Sammanfattning Troligen har de allra flesta personer hört talas molnet eller molnlagring. Molnlagring är populärt och användbart för att säkerhetskopiera, dela och göra information lättåtkomligt från flera enheter. Mega, Dropbox, Google Drive och OneDrive är några av alla de tjänster som finns idag, de erbjuder lite olika funktionalitet och inriktningar. Ett problem med alla dessa tjänster är att det som standard endast är den som äger kontot som har tillgång till materialet, som inte är explicit delat, eller kontot. Det gör att information som bilder kan bli förlorade om kontoinnehavaren avlider. Säkerheten, i form av möjligheterna för tredje part att komma åt informationen, är ofta okänd för användarna i dessa tjänster. Dessa två problem vill EmbeddedArt åtgärda med sin nya tjänst. Datan ska förvaras krypterad och otillgänglig för utomstående samtidigt som det ska vara möjligt för användarna att ange en person som ska få tillgång till informationen om kontoinnehavaren avlider. Tanken är att skicka ut krypteringsnyckeln och ett USB-minne med den krypterade datan som användaren sedan själv enkelt kan avkryptera på sin dator med det medföljande programmet, krypteringsnyckeln och datan måste skickas separat. Även om det finns generella förslag på publik nyckelinfrastrukturer (PKI) finns det inte någon som uppfyller dessa krav och har modern, stark kryptering. Att tjänsten håller användares information säker från tredje part är viktigt för användarnas integritet och förtroende för tjänsten. Men för att få användare till, och fortsätta använda, tjänsten måste den även vara användarvänlig. Utöver att tjänsten ska vara snabb, ha många funktioner och lagra datan säkert måste det vara möjligt för administratörerna att kunna avkryptera datan. Hur kan då en PKIlösning se ut där det blir en bra balans mellan dessa viktiga punkter? I denna rapport studeras och föreslås hur en sådan lösning kan se ut för en molnlagringstjänst. Genom att implementera en lösning i en existerande molnlagringstjänst och jämföra resultatet med tjänsten innan säkerhetslösningen kan förändringarna utvärderas med avseende på punkterna användarvänligheten, säkerheten, prestanda och fortsatt utveckling av tjänsten. Förslaget som presenteras är en lösning där innehållet i användarnas filer är skyddat och funktionerna i tjänsten inte är förändrade. Både RSA (Rivest-Shamir-Adleman kryptering) och AES (avancerad krypteringsstandard) används för att skydda innehållet i användarnas filer. Lagring av och operationer med nycklarna är fördelade på olika servrar, varav en som med fördel kan bytas ut, eller utökas med en koppling, till en hårdvarusäkerhetsmodul (HSM). Tjänstens ägare har tillgång till de privata nycklarna och kan således komma åt innehållet i filerna. Vissa kostnader går inte att undvika på grund av krypteringen och de extra delarna i infrastrukturen. För att minimera påverkan på den existerande tjänsten och underlätta för framtida utveckling har de kryptografiska operationerna hakats in i filströmmarna. I de utförda testerna är prestandaförlusten cirka 10 15% vid uppladdning av filer. Nyckelord: kryptering, PKI, molnlagring.

Abstract Most people have probably heard of the cloud or cloud storage. Cloud storage is popular and useful for backing up, sharing and making information easily accessible from multiple devices. Mega, Dropbox, Google Drive and OneDrive are some of the services that are available today, they offer a little different functionality and orientation to compete with each other. A problem with all these services is that by default, only the owner of the account has access to the material or login. This means that information such as images might be lost if the account holder dies. Security, in the form of encryption and third party access to the information, is often unknown to the users of these services. EmbeddedArt wants to fix these two issues with their new service. The data shall be kept encrypted and unavailable to third parties at the same time as it should be possible for users to enter a person who will have access to the information if the account holder dies. The idea is to send out the encryption key and a USB memory with the encrypted data that the user can then easily encrypt on his computer with the included application. Although there are general suggestions for public key infrastructure (PKI) structures, there doesn t seems to be any that meets these requirements and has modern, strong encryption. It is important that service keeps user information secure from third parties for the users' integrity and trust in the service. But to get users to the service, it must also be user friendly. While the service should be fast, have many features and store the data for sure, it must be possible for administrators too. How can a PKI solution look where there is a good balance between these important points? This report examines and proposes a solution for how a solution can look like for a cloud storage service. By implementing a solution in an existing cloud storage service and comparing the results with the service before the security solution the changes be evaluated with regard to the points of user friendliness, security, performance and continued development of the service. The proposal presented is a solution where the contents of users files are protected, and the features of the service are not changed. Both RSA (Rivest-Shamir-Adleman Encryption) and AES (Advanced Encryption Standard) are used to protect the contents of the users files. Storage and cryptographic operations with the keys are distributed on different servers, one of which may be replaced by a hardware security module (HSM). The service owner has access to the private keys and can thus access the contents of the files. Some costs cannot be avoided, but in order to minimize them and make the least changes in the service, the cryptographic operations have been inserted into the file streams. In the tests performed, the performance loss is 10-15% when uploading files. Keywords: cryptography, PKI, cloud storage

Förord Jag vill tacka EmbeddedArt för att ha gett mig möjligheten att göra mitt examensarbete hos dem och för att tillhandahållit material och lokal. Jag vill även tacka mina handledare Lars Tegborg och Rickard Randa för råd samt kritik under projektets gång. Slutligen vill jag även tacka mina handledare på KTH Sten Andersson och speciellt Sonja Buchegger för hjälp, tips och råd under arbetets gång.

Innehållsförteckning Terminologi... 1 1 Introduktion... 3 1.1 Inledning... 3 1.2 Bakgrund... 3 1.3 Mål och syfte... 3 1.4 Avgränsningar... 4 2 Förstudier... 4 2.1 Molnet... 5 2.2 Kryptografi... 5 2.2.1 Publik nyckelinfrastruktur... 5 2.2.2 Symmetrisk kryptering... 6 2.2.3 Asymmetrisk kryptering... 10 2.3 Initialiseringsvektor... 11 2.4 Chiffer... 12 2.4.1 Blockchiffer... 12 2.4.2 Strömchiffer... 13 2.5 Kryptering i webbläsare... 14 2.6 Certifikat... 14 2.6.1 Digital signatur... 15 2.7 Hashfunktion... 15 2.7.1 Salt... 15 2.8 Hårdvarustöd för kryptografiska operationer... 16 2.8.1 Hårdvarusäkerhetsmodul... 16 2.8.2 Advanced Encryption Standard instruktionssätt... 16 2.8.3 Hårdvarugenererad slumpdata... 16 2.9 Attacker mot kryptografi och publik nyckelinfrastruktur... 16 2.9.1 Gissningsattacker... 17 2.9.2 Social manipulation... 18 2.9.3 Mjukvaran... 18 2.9.4 Sidkanalattacker... 18 2.10 Liknande tjänster... 19 2.10.1 Mega... 19 2.10.2 Dropbox... 19 2.10.3 Valfri tjänst med egen kryptering... 19 2.11 Verktyg... 20

2.11.1 PHP... 20 2.11.2 OpenSSL... 20 3 Metod... 20 3.1 Förstudier... 21 3.2 Ursprunglig molnlagringstjänst... 21 3.3 Utvärdering... 23 3.4 Implementation... 24 3.4.1 Verktyg... 24 3.4.2 Miljö... 25 3.4.3 Kod... 25 4 Resultat... 25 4.1 Allmänt... 25 4.2 Förberedelser... 27 4.3 Inloggning... 27 4.4 Generering av användarnas nyckelpar... 27 4.5 Lagring av nycklar... 27 4.6 Återkallning av nycklar... 28 4.7 Uppladdning av filer... 28 4.8 Filåtkomst... 29 4.9 Stödet för flera algoritmer... 30 4.10 Delning av filer... 31 4.11 Certifikatutfärdar-servern... 32 4.12 API... 32 4.13 Prestanda... 32 5 Diskussion... 34 5.1 Algoritmer... 34 5.2 Lagring av nycklar... 34 5.3 Fildelning... 35 5.4 Säkerhet... 35 5.5 Återkallning av nycklar... 37 5.6 Användarvänlighet... 37 5.7 Integritet... 37 5.7.1 Allmänna dataskyddsförordningen... 37 5.8 Utökning av tjänstens kapacitet... 38 5.9 Stöd för flera algoritmer... 38 5.10 Prestanda... 38

5.11 Certifikatutfärdar-servern... 39 5.12 Avkrypteringsprogram... 40 5.13 Fortsatt arbete... 40 6 Avslutning... 41 7 Källor... 42

Figurer Figur 1 Symmetrisk kryptering... 6 Figur 2 Blockhanteringen vid AES-algoritmer... 7 Figur 3 Stegen i AES-algoritmen... 8 Figur 4 Asymmetrisk kryptering av en fil... 10 Figur 5 CBC, Cipher block chaining. -- Xor.... 13 Figur 6 Hur molnlösningen ser ut... 21 Figur 7 Strukturöverblick... 26 Figur 8 Krypteringsoperationer vid skapandet av ny fil... 29 Figur 9 Flödet då en fil öppnas... 30 Figur 10 A delar en fil till B... 31 Tabeller Tabell 1 XOR-operationer... 2 Tabell 2 Kombinationer i förhållande till nyckellängd... 17 Tabell 3 Tänkbara attacker enligt DREAD-modellen... 24 Tabell 4 Prestandajämförelse med och utan kryptering vid uppladdning av en 100MB fil... 33 Tabell 5 Prestandajämförelse med och utan kryptering vid uppladdning av en 10MB fil... 33

Terminologi PKI Public Key Infrastructure, på svenska publiknyckelinfrastruktur, infrastruktur för hantering av publika och privata nyckelpar. AES Advanced Encryption Standard, på svenska avancerad krypteringsstandard, symmetrisk krypteringsalgoritm. AES-NI AES instruction set, på svenska instruktionssätt. Speciella instruktioner i processorer för att öka prestandan i AES-operationer. RSA Rivest-Shamir-Adleman kryptering, asymmetrisk som baseras på stora primtal. CA Certification Authority, på svenska certifikatutfärdare, utfärdar certifikat för publika nycklar i en PKI-lösning. NIST Nation Institute of Standard and Technology, federal byrå som utvecklar och fastslår standarder. GDPR General data protection regulation, på svenska allmänna dataskyddsförordningen. NSA National Security Agency, en organisation tillhörande USA:s regering. Kända för att spionera och samla in data. IDE Integrated Developer Environment, på svenska interaktiv utvecklingsmiljö är ett program som innehåller verktyg för programmering. IV Initialization vector, på svenska initialiseringsvektor används I kryptografi som slumpmässiga data för att undvika mönster i kryptering. TLS Transport Layer Security, på svenska transportlagerssäkerhet, kryptografiskt protokoll som används vid kommunikation. RFC Request for Comments, på svenska begäran av kommentarer rapporter och dokument publicerade av IETF för granskning av andra insatta. SQL Structure Query Language, programmeringsspråk för att hantera data I en relationsdatabas. HSM Hardware security module, på svenska Hårdvarusäkerhetsmodul, hårdvara för att spara och hålla krypteringsnycklar säkra. Bit Minsta delen information en dator arbetar med, kan endast anta värdena 1 eller 0. Byte DES En byte består av åtta bitar och kan därför representera ett större värde. Data Encryption Standard. En krypteringsalgoritm, anses inte säker idag. OWASP Är en organisation i USA som arbetar med att sprida information om säkerheten i webbapplikationer. Har till exempel en lista med topp tio vanligaste attacker. IASA International Association of Software Architects, på svenska ungefär internationell sammanslutning av mjukvaruarkitekter. En organisation för IT-arkitekter som finns över hela världen. OCSP Online certifikatstatusprotokoll. Ett protokoll för att kommunicera status på ett X.509- certifikat. 1

CRL Certificate revocation list, på svenska certifikatåterkallningslista. En lista som innehåller alla certifikat som blivit återkallade före sitt utgångsdatum CFB CBC Cipher feedback, på svenska chiffer återkoppling, ett strömchiffer. Cipher block chaining på svenska chifferblock kedjande, ett blockchiffer. X.509 En standard för certifikat. XOR En operation som utförs på två bitar och innebär antingen eller, tabell 1 visar hur utdata blir beroende på indata. Symboliseras med tecknet. Bit 1 Bit 2 Resultat 0 0 0 1 0 1 0 1 1 1 1 0 Tabell 1 XOR-operationer 2

1 Introduktion Detta kapitel går genom bakgrunden, mål och syfte samt övrig information kring projektet. 1.1 Inledning Molnlagringstjänster har ökat i popularitet och användande under de senaste åren, mycket på grund av deras smidighet. Tjänsterna erbjuder användarna att enkelt kunna dela filer mellan enheter och användare samt felsäker lagring i form av säkerhetskopior. Några tjänster försöker erbjuda nya funktioner eller inriktningar för att sticka ut i mängden och locka användare. En funktion som flera tjänster erbjuder är säker lagring, d.v.s. att datan skyddad från tredje part. En av de kanske mer kända och kontroversiella tjänsterna är Mega. Mega har dock tagit det ett steg längre än vad EmbeddedArt vill, Mega påstår, mer om detta tas upp i kapitel 2.10.1, att de själva inte kan avkryptera innehållet på servrarna. Nya upptäckter förekommer relativt ofta inom datorvärlden, även inom kryptografin, som innefattar allt ifrån nya algoritmer till säkerhetshål i existerande algoritmer. Det gör att innan implementation av kod som använder olika typer av kryptografiska funktioner måste utförliga studier utföras för att få reda på vad som anses vara säkert vid den tidpunkten. Det är bäst att utgå från att det finns bättre implementationer av de kryptografiska beräkningarna, därför gäller det att välja rätt bibliotek istället för att försöka implementera kryptografiska funktioner själv. Att ta den insamlade informationen i beaktning och designa en säkerhetslösning korrekt är inte trivialt då det ofta är mycket teknisk information som behöver läsas, förstå och sedan implementeras. 1.2 Bakgrund EmbeddedArt vill lansera en molnlagringstjänst med fokus på säkerhet. De har en färdig molntjänst men vill undersöka och implementera en säkerhetslösning som skyddar användarnas filer från obehöriga. Det som skiljer EmbeddedArts tjänst från andra tjänster är att de vill erbjuda kunderna att skicka hem den krypterade datan tillsammans med ett program och den privata nyckeln vid eventuella dödsfall, men även kunna lämna ut information om det begärs av polisen. Därför finns behovet att kunna avkryptera innehållet utan att använda ett lösenord som endast kontoinnehavaren känner till. Önskemålet är att endast användarna och EmbeddedArt ska kunna komma åt filerna och deras innehåll. Att som användare utgå från att alla tjänster tillåter de som driver tjänsten alltid kan läsa innehållet i filerna, är även en sund inställning. Det tankesättet är sunt eftersom det vanligen inte är möjligt att granska källkoden och de allra flesta användare inte är tillräckligt kunniga för att granska. 1.3 Mål och syfte Målet med detta projekt är att undersöka, föreslå och implementera en säkerhetslösning för en molnlagringstjänst. Lösningen ska vara modern med avseende på kryptografin på grund av att en molnlagringstjänst är exponerad mot attacker eftersom tjänsten ligger på en server som är externt tillgänglig. Det är svårt att implementera kryptografi korrekt [1]. Även om texten publicerades för många år sedan har implementeringen av kryptografi inte blivit enklare med tiden. Texten tar också upp att kryptografin ska göras användarvänlig för att få användare vilket är en viktig punkt att ta hänsyn till. 3

Målet med arbetet är att designa en lösning som tar punkterna användarvänligheten, säkerheten, flexibilitet, prestanda och fortsatt utveckling av tjänsten i beaktning och balanserar dessa samtidigt som tjänsten är säker. Punkterna med en kort beskrivning tas upp nedan, detta har tagits fram i diskussion med EmbeddedArt Flexibilitet Hur flexibel lösningen är, går den att skala? Är det möjligt att byta ut de fysiska servrarna utan problem eller stora förändringar i lösningen? Det ska vara möjligt att migrera till en ny algoritm, eller chiffer, utan att behöva kryptera om alla filer samtidigt och utan att användare inte längre kommer åt filerna. Säkerhet Säkerheten bedöms utifrån hur svårt det är för tredje part att komma åt data utifrån samt hur svårt det är att få fram användbar information från de krypterade filerna. Användarvänlighet Bedöms utifrån hur stora ändringar det blir för användarna efter att säkerhetslösningen är implementerad. Frågar som tas i beaktning är bland annat, är det fler steg för att börja använda tjänsten? Begränsas någon funktionalitet? Prestanda En molnlagringstjänsts flaskhals är troligen i hårddiskarna och inte processorn. Men prestandaförlusterna till följd av säkerhetslösningen bör hållas nere för att minska kostnaderna, kostnaden och elförbrukningen samt för att användarna ska uppleva tjänsten som snabb och responsiv. Fortsatt utveckling Det ska vara möjligt att fortsätta expandera tjänstens funktionalitet utan att behöva göra omfattande ändringar på krypteringsfunktionaliteten. Byta de algoritmer som används i förslaget måste vara möjligt när det visar sig att de nuvarande inte längre är säkra. 1.4 Avgränsningar Arbetet undersöker, föreslår och implementerar endast en säkerhetslösning för att skydda filernas innehåll från tredje part. Arbetet undersöker inte övrig kod i den mjukvara som lösningen ska integreras med. I denna rapport antas koden vara tillräckligt säker för att inte vara den svaga länken. Arbetet undersöker och väljer säkra kryptografiska metoder men kommer inte att föreslå nya eftersom det inte är möjligt att göra en bättre algoritm jämfört med de som finns idag inom ramen för detta arbete. 2 Förstudier I detta kapitel diskuteras den information upp som använts i förstudierna. Den information som samlades in användes som grund för undersökningen av frågeställningen. 4

2.1 Molnet Molnet är i datorvärlden en term eller ett begrepp som inte alla har en exakt definition för. IASA (International Association of Software Architects, på svenska ungefär internationell sammanslutning av mjukvaruarkitekter) har tagit fram en definition för termen cloud computing (på svenska ungefär molnberäkningar) även om denna definition är för just beräkningar i molnet är grunden detsamma för molntjänster. IASA:s definition lyder Termen Cloud Computing relaterar både till applikationer som levereras som tjänster över Internet och till den hårdvara och systemmjukvara som tillhandahåller dessa tjänster. [2]. Definitionen är bred men definierar molnberäkningar som både mjukvaran och hårdvaran i tjänsten. Det är populärt att flytta lagring och tjänster upp i molnet, dels för att det är det nya och dels för att slippa hantera egen infrastruktur. Olika former av molntjänster förväntas fortsätta växa under flera år framåt enligt både Cisco [3] och Forbes som har gjort en sammanställning av flera olika rapporter [4]. En specifik tillämpning av molntjänster är molnlagring vilket innebär att tjänsten specialiseras på att erbjuda fillagring till användarna. Det finns flera molnlagringstjänster tillgängliga för privatpersoner två exempel är Mega och Dropbox. För att locka användare erbjuder flera av tjänsterna andra funktioner än enbart lagring. Några funktioner är till exempel möjligheten att ändra filerna direkt i webbläsaren, dela filer och skapa album av foton, medan en del fokuserar på att erbjuda säker lagring. 2.2 Kryptografi Ordet kryptografi kommer från grekiskans cruptus och graphein vilket kan översättas till gömd och skrift. Kryptografi har använts i flera tusen år för att förhindra oönskade personer från att läsa meddelanden. Förr användes kryptering framförallt av spioner, högre uppsatta personer och inom militären. Idag kommer de flesta i kontakt med kryptografi mer eller mindre medvetet då många hemsidor krypterar anslutningen. Kryptografi har vuxit i antalet användare och användningsområden sedan uppkomsten och har växt mycket inom framförallt datorvärlden. Användningsområdena för kryptografi är inte längre enbart att kryptera meddelanden utan även till exempelvis signering och integritetskontroll av data samt identifiering. 2.2.1 Publik nyckelinfrastruktur Publik nyckelinfrastruktur (på engelska public key infrastructure, PKI) är en lösning för att hantera nycklar som används för asymmetrisk kryptering. Kryptering av kommunikationen med hemsidor använder PKI för att webbläsarna ska kunna verifiera certifikatens giltighet och tillhörighet. Där är certifikatutfärdare företag som Digicert [5], hemsidor i har certifikat utfärdade från dessa företag för att verifiera deras identitet. Webbläsare har ofta hårdkodade eller förinstallerade certifikat från pålitliga certifikatutfärdare dels för att det ska vara smidigt för användare men även för att minska risken för användare att få in certifikat från opålitliga källor. PKI bygger på att användarna kan lita på certifikatutfärdarna i systemet, om en certifikatutfärdare felaktigt ger ut certifikat bör all tillit till den vara förbrukad. 5

I begreppet PKI ingår mjukvara, hårdvara, policy samt hur nycklar ska skapas och genereras. Hur dessa sedan knyts ihop och implementeras kan kallas för en PKI-lösning. Det finns tre huvudkomponenter i en PKI-lösning [6] Certifikatutfärdare (på engelska certificate authority, CA) är den del, eller part, som utfärdar certifikat. Nyckelförvaring, certifikat samt ha en lista med indragna och ogiltiga certifikat. Administratörfunktioner, PKIn ska kunna administreras. Det är lika viktigt att veta vad PKI gör som att veta vad PKI inte gör för att inte få falsk trygghet i en lösning [7]. Förtroende för användaren. PKI försäkrar att förhållandet nyckel och identitet stämmer, men PKI har inte information om hur pålitlig identiteten är. Skyddar information från oönskade individer. PKI kan användas som grund för att skydda information men kan inte göra något helt säkert utan behöver i sådana fall kombineras med andra säkerhetsrelaterade verktyg. Korrigerar mänskliga fel. Användare kan till exempel ha osäkra lösenord eller dela filer till opålitliga användare. Även administratörer kan vara elaksinnade och missbruka sin makt. 2.2.2 Symmetrisk kryptering Symmetrisk kryptering använder samma nyckel för att kryptera och avkryptera datan, eftersom samma nyckel används i båda fallen måste den hållas hemlig för alla som inte ska ta del av informationen. Figur 1 nedan ger en enkel överblick över symmetrisk kryptering. Symmetrisk nyckel Okrytperad data kryptering Krypterad data avkryptering Okrytperad data Figur 1 Symmetrisk kryptering Det finns flera algoritmer som bygger på symmetrisk kryptering men den i dag kanske vanligaste algoritmen är Advanced Encryption Standard (på svenska avancerad krypteringsstandard, AES) från 2001 [8]. Moderna processorer har speciella instruktioner för AES vilket bidrar till att algoritmen har hög prestanda och ökad säkerhet på moderna datorer [9]. Det finns tre nyckellängder för AES 128, 192 och 256 bitar, AES skapades för 128 bitar medan de andra två är utökningar för att göra det svårare att knäcka krypteringen. Det finns idag ingen större känd säkerhetsbrist med AES men i vissa scenarion kan en 256 bitars nyckel fås fram på relativt kort tid, 2 39 [10], bristen uppstår i ett ganska 6

speciellt fall men det bygger på implementationen vid användandet av 256 bitars nyckel. Eftersom en brist har upptäckts går det att misstänka att det finns fler som kan hittas senare. 128 bitars nyckel för AES beräknas vara tillräckligt säkert idag och borde tidigast kunna knäckas när det finns kvantdatorer [10]. Styrkan är i direkt relation till prestandan, de parametrar som påverkar är nyckellängden, antal rundor samt chiffer. 2.2.2.1 Exempelalgoritm Rövarspråket, att byta ut bokstäverna mot deras respektive numeriska position i alfabetet eller till och med morse är enkla men inte säkra symmetriska algoritmer. De, precis som AES, använder samma nyckel för att koda och avkoda meddelanden. Hela meddelandet, m, delas in i block som är x bitar stora. För AES-kryptering är x 64, 128 eller 256 bitar, om sista blocket inte går jämnt upp med den valda storleken fylls det på med till exempel nollor till den bestämda storleken. Blocken skickas sedan in i algoritmen och kommer ut krypterade, detta görs på alla block enligt figur 2 nedan som demonstrerar den simplaste appliceringen av AES men den är inte rekommenderad att använda. I kapitel 2.4 finns mer information om olika chiffer. Nyckel Bitar 0-x av meddelandet Bitar x-2x av meddelandet Krypteringsalgoritm Krypteringsalgoritm Bitar 0-x krypterade Bitar x-2x krypterade Avkrypteringsalgoritm Avkrypteringsalgoritm Bitar 0-x av meddelandet Bitar x-2x av meddelandet Figur 2 Blockhanteringen vid AES-algoritmer 7

Stegen i AES visas nedan i figur 3, nedanför figuren finns en förklaring för respektive steg. Block på x bitar av meddelandet. Expandera nyckeln Antalet varv = y, nuvarande varv = x Lägg till varvnyckel Bytesubstitution Skifta rad Vid sista varvet Då x=y Mixa kolumn Då x<y Lägg till varvnyckel Krypterat block Figur 3 Stegen i AES-algoritmen 8

Lägg till varvnyckel 16 byte av den expanderade nyckeln XOR mot de 16 bytes som är indata till operationen. De 16 bytes som ska användas tas ut genom att multiplicera varvet (x) med 16, det blir startposition och sedan plockas de 15 efterföljande bytesen ut från den expanderade nyckeln. Skifta rad Lägger alla 16 bytes i en matris, där de placeras kolumnvis enligt matris 1. Varje rad skiftas sedan lika många steg som radnummer. Dessa radnummer är nollindexerade. Första raden (rad 0) skiftas 0 steg, andra raden (rad 1) 1 steg vilket leder till en matris enligt matris 2. Mixa kolumn 1 13 ( ) 4 16 Matris 1, placering av bytes. 1 5 9 13 6 10 14 2 ( ) 11 15 3 7 16 4 8 12 Matris 2, hur matrisen ser ut efter radskiften. Alla bytes är placerad i en matris som i skifta rad steget ovan. Nästa steg är att utföra ett antal multiplikationer i flera steg som kan vara komplicerade att förklara. Varje värde i alla kolumner multipliceras med ett värde i rad med motsvarande nummer. En XOR-operation utförs på resultaten av varje multiplikation för att svaren fortfarande ska vara en byte. Operationerna ser ut på följande sätt, omplaceringen av bytesen är samma som i matris 1. Siffrorna motsvarar platsen i matrisen för den byte som ska användas. 1 = (1 1) XOR (2 5) XOR (3 9) XOR (4 13) 6 = (5 2) XOR (6 6) XOR (7 10) XOR (8 14) Och vidare tills det är utfört för alla platser i matrisen. Bytesubstitution AES använder sig av en tabell som heter AES S-Box lookup table (på svenska AES S-låda uppslagstabell) för att slå upp hur varje byte ska få ett nytt värde. Vid dekrypteringen används tabellens invers för att få fram det ursprungliga värdet. Nyckelexpansion Efter expansion är nyckellängden alltid blockstorlek (antalet varv (y) + 1). Den ursprungliga nyckeln är alltid början av den expanderade nyckeln. Hur nyckeln expanderas beror därefter på längden och involverar flera operationer vilket gör att den inte tas upp här men ytterligare information finns i källan för detta stycke [11]. 9

2.2.3 Asymmetrisk kryptering Asymmetrisk kryptering eller publik nyckelkryptografi, använder två nycklar, en publik och en privat, för operationerna. Figur 4 nedan ger en överblick över asymmetrisk kryptering. Publik nyckel Privat nyckel Okrypterad data kryptering Krypterad data avkryptering Okrypterad data Figur 4 Asymmetrisk kryptering av en fil För att signera data kan algoritmerna användas åt andra hållet, det vill säga vända på de horisontella pilarna i figur 4. Personen eller enheten som önskar signera data, kan då ta lämplig data, kan förslagsvis vara ett hash (mer i stycke 2.7) på datan som signeras, och kryptera den men sin privata nyckel när mottagaren vill kontrollera signaturen kan denne avkryptera signaturen med den andras publika nyckel. Därefter kan resultatet och den ursprungliga datan jämföras, är resultaten lika stämmer signaturen. Den kanske mest använda och kända asymmetriska algoritmen är RSA [12]. Public Key Cryptographic Standards (på svenska ungefär Publik nyckelkryptografi-standarder, PKCS) nummer ett är namnet på en standard för hur RSA ska implementeras som är definierad av skaparna, RSA Laboratories. Säkerheten i RSA bygger framförallt på svårigheten att faktorisera produkten av två stora primtal. Nyckellängder för RSA är typiskt 2048 eller 4096 bitar idag då kortare inte längre klassas som säkra [13], 2048 bitar bedöms vara säkert till år 2030 enligt NIST baserat på den beräknade utvecklingen av datorers beräkningskapacitet för att faktorisera till stora primtal. Den asymmetriska kryptografins syfte är primärt att utbyta små mängder data som till exempel en symmetrisk nyckel. Att endast relativt små mängder data kan krypteras och att algoritmerna är långsamma gör asymmetrisk kryptografi olämpligt för stora filer. 2.2.3.1 Exempelalgoritm För RSA är det möjligt att använda låga primtal för att visa hur algoritmen fungerar. Observera att primtalen som sedan används för att skydda data i en riktig miljö måste vara många gånger större än de som används i exemplet. M = datan som ska krypteras C = krypterade datan. p = primtal 10

q = primtal Välj två primtal p och q 1. Beräkna n = p q 2. Beräkna φ(n) = (p 1) (q 1) 3. Välj e sådant att 1 < e < φ(n) samt att e och n är relativa prima 1. 4. Beräkna ett värde d sådant att (d e) % φ(n) = 1 5. Publika nyckeln är (e, n) 6. Privata nyckeln är (d, n) Villkoren 0 <= m <= n och gcd(m, n) = 1 måste uppfyllas. För att sedan utföra de kryptografiska beräkningarna används nycklarna på följande sätt Kryptering av meddelande m: c = m e mod n För att sedan dekryptera c och få tillbaka m: m = c d mod n Exempel: Väljer primtalen p = 3 och q = 11, datan, m, väljs till 2. 1. 3 11 = 33 2. (3 1) (11 1) = 20 3. Väljer e = 7 4. En lösning är d = 3, [(3 7) % 20 = 1] 5. Publika nyckeln är (7, 33) 6. Privata nyckeln är (3, 33) Villkoren 0 <= 2 <= 33 och gcd(2, 33) = 1 uppfylls. Kryptering av meddelande m: ger m = 2 c = 2 7 mod 33 = 29 Avkryptera c ger c = 29, m = 29 3 mod 33 = 2 2.3 Initialiseringsvektor För att dölja mönster vid kryptering med blockchiffer används initialiseringsvektor (IV) vid krypteringen av det första blocket data. Resultatet av operationen, som beror på vilken typ av blockchiffer som används, på IVn och det första blocket används vid nästa operation på det andra blocket, på samma sätt återanvänds resultatet från föregående på nästa block för alla block. Genom att lägga till slumpmässig data (IV) till första blocket förhindras tredje part från att observera mönster i den krypterade datan i de fall samma nyckel används för att kryptera flera olika datamängder. Generellt är IVn lika stor som chiffrets blockstorlek. IVn behöver inte hållas dold utan kan skickas i klartext tillsammans med den krypterade datan. IVn måste vara slumpmässigt och oförutsägbar genererad, att generera den med en kryptografiskt säker generering rekommenderas starkt. Om IVn inte genereras slumpmässigt för varje mängd data utan en statisk IV används motsvarar det att inte använda en och mönster kan enkelt observeras. 1 Relativt prima innebär att största gemensamma delaren mellan talen är 1, gcd(x, y) = 1 11

2.4 Chiffer Chiffer specificerar hur en algoritm ska appliceras på data, både för kryptering och avkryptering. Det finns två olika varianter av chiffer som används vid AES, blockchiffer och strömchiffer, t.ex. Cipher feedback (på svenska chiffer-återkoppling, CFB) är ett strömchiffer och chiffret som kallas Cipher Block Chaining (på svenska chifferblock-kedjning, CBC) är ett blockchiffer. Det finns praktiska skillnader mellan typerna som bör kännas till och dessa beskrivs i styckena nedan. Chifferoperationer och krypteringsalgoritmer används tillsammans för att kryptera data på ett sätt som ska vara omöjligt för andra att läsa. Det är möjligt att kort sammanfatta ovan som att AES beskriver vilka operationer som ska utföras på ett block (på bitnivå) medan chiffret beskriver operationerna mellan blocken (blocknivå) [14]. 2.4.1 Blockchiffer I ett blockchiffer appliceras algoritmen på ett helt block data av bestämd storlek i taget. Eftersom blocken måste vara av en bestämd storlek kan datan behöva att så kallat fyllas ut (på engelska paddas) för att få rätt längd. Blockchiffer används till exempel i flera olika krypteringsalgoritmer (AES) och hashfunktioner (SHA). 2.4.1.1 Cipher Block Chaining Cipher Block Chaining (CBC, på svenska ungefär chifferblock- kedjning) kan vara det mest använda chiffret för AES. I CBC utförs en XOR-operation på nuvarande blocket och resultatet från operationen på föregående block krypteringsalgoritmen utförs sedan på resultatet av XOR-operationen. Det medför att en IV måste användas samt att krypteringen inte kan parallelliseras eftersom algoritmen är beroende av resultatet från föregående operation. Om datan in inte har rätt längd måste den fyllas ut för att uppnå rätt längd. Om data avkrypteras med fel IV kommer endast första blocket vara fel medan följande kommer vara korrekta. Detta eftersom det är den krypterade datan som används i XOR-operationen vid dekrypteringen. Det medför också att avkrypteringen kan parallelliseras. Figur 2 visar hur ECB-chiffret fungerar, medan figur 5 nedan visar specifikt hur chiffret CBC. Som syns används först en IV vid en XOR-operation med indatan och sedan resultatet från föregående block på samma vis. 12

Nyckel Bitar 0-x av meddelandet Bitar x-2x av meddelandet Krypteringsalgoritm Krypteringsalgoritm Initialiseringsvektor Bitar 0-x krypterade Bitar x-2x krypterade Avkrypteringsalgoritm Avkrypteringsalgoritm Bitar 0-x av meddelandet Bitar x-2x av meddelandet Figur 5 CBC, Cipher block chaining. -- Xor. 2.4.2 Strömchiffer Till skillnad från blockchiffer där algoritmen appliceras på ett helt block i taget, appliceras strömchiffer på en liten mängd data (typiskt en bit eller en byte) i taget. Strömchiffer har andra egenskaper än blockchiffer vilket gör att användningsområdena skiljer sig. Strömchiffer är oftast snabbare, enklare att implementera hårdvarumässigt och fungerar på data vars storlek inte är känd i förväg. Dessa egenskaper gör att denna typ av chiffer ofta används till strömmad data som till exempel trådlösa nätverk, oftast används ett chiffer kallat Counter (på svenska räknare, CTR). Det finns två typer av strömchiffer, synkront och själv-synkront strömchiffer. Skillnaden mellan typerna är att ett självsynkront strömchiffer även skyddar mot förlust av bitar utöver skyddet mot korrumperade bitar som ett synkront chiffer skyddar mot. 2.4.2.1 Cipher Feedback Cipher feedback (på svenska ungefär chifferåterkoppling, CFB) har följande egenskaper; avkrypteringen kan parallelliseras, självsynkroniserat, möjligt att läsa slumpmässiga data men krypteringen kan inte parallelliseras. Även CFB kan användas tillsammans med AES. CFB är nära 13

besläktad med CBC, CFB dekryptering är nästintill identiskt med CBC chiffer i omvänd ordning. Samma algoritm används för både kryptering och avkryptering vilket kan vara fördelaktig i inbyggda enheter eller andra tillämpning där det är viktigt att minimera storleken. Självsynkroniserat innebär att chiffret kan korrekt dekryptera information trots att delar av den krypterade datan har blivit korrupt. Det varierar hur mycket som kan vara korrupt för att chiffret ska vara fortsatt kunna dekryptera data korrekt. I CFB:s enklaste utförande kan chiffret endast fortsätta mata ut korrekt information om ett helt block har försvunnit, om endast en bit är fel kan chiffret inte fortsätta med avkrypteringen och producera korrekt information. 2.5 Kryptering i webbläsare Att överlåta krypteringen och avkrypteringen av filer till användarnas webbläsare istället för på webbservern innebär flera problem [15]. Att utföra kryptograf med JavaScript i webbläsaren medför brister i säkerheten bland annat för att JavaScript inte har lika välutvecklad och säker funktionalitet för att generera kryptografiskt säkra IV och nycklar jämfört med mer hårdvarunära språk. JavaScript saknar funktioner som till exempel att kryptografiskt säkert generera tal, minneshantering (möjligheten att kunna rensa minnet från data för att lämna få spår) samt funktioner med känd tidskaraktär. Ett annat problem är att det finns många olika webbläsare i många olika versioner, sedan att många användare ofta inte använder senaste versionen, gör det omöjligt att garantera funktionalitet och säkerhet i kryptografin. Det är möjligt att implementera en sådan lösning på flera olika sätt, ett av sätten är som Mega gjort och det andra är att bara flytta de kryptografiska operationerna till klienten och skicka nycklarna till klienten tillsammans med filerna. För och nackdelarna med första sättet går att läsa under avsnittet om Mega. Skulle användarens dator vara komprimerad och nyckeln hamnar i orätta händer räcker det sedan för attackeraren att ta sig in på filservern för att kunna läsa användarens alla filer. I flera fall flyttas riskerna endast från servern till användarna vilket kan ge fördelar om servern skulle bli komprimerad men generellt är det lättare att göra en tjänst säkrare än att göra flera tusen användares datorer säkra. 2.6 Certifikat Certifikat inom kryptering används för att stärka vem en specifik publik nyckel tillhör. De bygger på asymmetrisk kryptering, där en pålitlig tredje part använder sin privata nyckel för att kryptera datan i certifikatet. Därefter kan informationen fås fram genom att använda tredje parts publika nyckel för att avkryptera. Certifikat har information om den publika nyckeln, nyckels ägare och en signatur som talar om vilken CA som har utfärdat certifikatet. Om mottagaren av certifikatet litar på den som har signerat, kan certifikatets äkthet verifieras och informationen om nyckels ägare kan den publika nyckeln antas vara säker att användas. Certifikat används till exempel för att ge datorer den publika nyckeln till hemsidor som använder krypterad kommunikation. I fallet att etablera en säker kommunikationskanal går det till på följande sätt: Alla webbläsare och operativsystem installeras med certifikat från de olika CA:s (t.ex. Digicert) som går att lita på. Sedan när användaren ska besöka en hemsida börjar webbläsaren med att fråga efter hemsidan certifikat, webbläsaren verifierar certifikatet med hjälp av ett av de förinstallerade certifikaten. När certifikatet är verifierat använder webbläsaren den publika nyckeln som fanns i certifikatet för att etablera en säker kommunikationskanal till hemsidan för att först förhandla om en symmetrisk nyckel. Den symmetriska nyckeln är sedan den som används för den framtida kommunikationen i den sessionen mellan hemsidan och webbläsaren. 14

En mycket använd standard för certifikat idag är X.509 som används i till exempel TLS, SSH och smarta kort [16]. 2.6.1 Digital signatur Digitala signaturer har liknande syfte som certifikat, men används för att signera data. Signaturer används för att bekräfta vem som skapade datan och att datan inte har modifierats av någon obehörig. Appliceringsområden är typiskt att signera ett dokument, går att göra detta i t.ex. Word, eller hasvärden. Ett sätt att använda digitala signaturer är att beräkna ett hashvärde av datan. Hashvärdet krypteras sedan med den privata nyckeln, både datan och det signerade (krypterade) hashvärdet överförs till mottagaren. Mottagaren beräknar ett eget hashvärde av data och dekrypterar det signerade hashvärdet med skapares publika nyckel. Är det av mottagaren beräknade hashvärdet likadant som resultatet av dekrypteringen är datans äkthet verifierad. Detta system förutsätter att den publika nyckeln antingen har kunnat verifieras i förväg eller kommer ifrån ett certifikat som är utfärdat från av en pålitlig utfärdare. En standard för digitala signaturer är PKCS#1 [12]. 2.7 Hashfunktion En hashfunktion är en funktion som tar in data och matar sedan ut data av en bestämd storlek, datan ut kallas även för ett hash-värde. Hash-värden har flera användningsområden som till exempel kontrollvärden eller hashtabeller. Kontrollvärden kan användas för att verifiera innehållet i en fil genom att ta hash-värdet på den förväntade datan (görs av den som skapat filen) och sedan jämföra med hash-värdet på den faktiska datan. Hash-tabeller används för att kunna utföra väldigt snabba uppslag av data, nyckeln körs genom hash-funktionen och resultatet kan sedan användas som en sorts index. En hash-funktion klassas som en kryptografiskt säker hashfunktion om det är praktiskt omöjlig att få den data som producerade ett visst hash genom att invertera hashfunktionen. Det vill säga det ska inte gå att räkna ut den data som producerade ett visst hash-värde på annat sätt än att testa köra alla möjliga värden genom hash-funktionen. Det kan finnas olika data som ger samma resultat även om risken för det är liten. De kryptografiskt säkra hashfunktionerna kan användas som de andra funktionerna men även som till exempel signaturer och för att lagra lösenord. Det typiska för lösenordshantering är att köra lösenordet och slumpmässigt genererad data genom hash-funktionen och spara resultatet, vid inloggning körs det av användare inmatade lösenordet genom hashfunktionen med den sparade slumpmässiga datan och jämförs med det lagrade lösenordet. NIST rekommenderar att använda secure hash algoritm 2 på svenska säker hash-algoritm 2 (SHA-2) [17] för att hålla datan säker. En algoritm som varit populär länge heter MD5 [18] men den har sedan ett tag tillbaka inte längre ansetts vara säker för att lagra lösenord. 2.7.1 Salt Salt påminner mycket om initialiseringsvektorn i funktionalitet och användning. Salt bör användas vid hashning av lösenord, likt en IV ska en ny genereras varje gång och kan sparas tillsammans med det hashade lösenordet. Saltet kan läggas till på lösenordet innan det används i hashfunktionen. Salt skyddar mot ordboksattacker och gör även att om två användare har samma lösenord är datan som 15

sparas olika. Enligt PKCS 5 2.0 (RFC 2898) ska ett salt vara minst 64 bitar långt [19], men salten får gärna vara längre för ökad säkerhet. 2.8 Hårdvarustöd för kryptografiska operationer Det finns flera hårdvarubaserade funktioner som kan användas för kryptografiska operationer. Nackdel med hårdvarubaserade funktioner är att de kräver specifik hårdvara för att fungera medan mjukvarubaserad är lättare att flytta mellan maskiner med olika hårdvara. 2.8.1 Hårdvarusäkerhetsmodul Hårdvarusäkerhetsmodul (på engelska hardware security module, HSM) är speciell hårdvara för att generera och lagra krypteringsnycklar samt utföra kryptografiska operationer, framförallt asymmetriska [20]. Hårdvarusäkerhetsmoduler är egna enheter med hårdvara för att förhindra olika typer av kända attacker mot lagring och kryptografiska operationer. Att använda HSMer rekommenderas för alla system som verkligen lägger stor vikt på säkerhet. En HSM kan även hjälpa till att avlasta processorn genom att utföra de kryptografiska operationerna som ofta är krävande vid asymmetrisk kryptering. 2.8.2 Advanced Encryption Standard instruktionssätt Intel och AMD har speciella instruktioner (kallade AES-NI) i sina processorer för att utföra bland annat de beräkningar och operationer som används i AES. Dessa instruktioner innebär betydligt högre prestanda och ökad säkerhet jämfört med processorer utan dessa [21], upp till tre gånger snabbare kryptering och tio gånger dekryptering, förutsatt att mjukvaran kan använda instruktionerna. Det finns flera mjukvaror som har implementerat stöd för instruktionerna, bland annat OpenSSL och Linux egna kryptografiska API. Instruktionerna finns i dag i de flesta processorer från de båda företagen. 2.8.3 Hårdvarugenererad slumpdata Vissa processorer har även stöd för att generera slumpmässig data med hjälp av hårdvara [22]. Tanken är att den slumpmässiga datan ska vara svårare att gissa eftersom den är mer slumpmässig, den baserar genereringen på bland annat på klockfrekvens och temperaturbrus [23], genereringen ska även vara mycket snabbare än mjukvarubaserad. Åsikter om hur säker den hårdvarubaserade generering är, är delade, en del är rädda för att det finns bakdörrar för NSA inbyggda och väljer att inte använda den alls medan en del, t.ex. de som utvecklar Linux-kärnan, väljer att endast använda det som en del i genereringen av slumpdata för att öka entropin [24]. 2.9 Attacker mot kryptografi och publik nyckelinfrastruktur Det finns flera olika tillvägagångssätt för att försöka attackera en PKI-lösning och kryptografiska lösningar. För att kunna skydda lösningen är det viktigt att känna till vilka metoder det finns för att attackera och på det sättet kunna förbygga dem. Nedan tas några av de vanligaste metoderna upp och hur de kan försöka förebyggas. 16

2.9.1 Gissningsattacker Attacker som bygger på att ta sig in i system eller knäcka kryptering genom att gissa vilken nyckel som är den rätta kallas gissningsattacker. Olika metoderna går att kombinera för att försöka få en effektivare och snabbare typ av attack. Ett bra skydd mot denna typen av attacker är att använda algoritmer som tar lång tid, genom att exempelvis öka antalet rundor i AES, nackdelen är att det tar tid. Om dekrypteringen tar en sekund istället för en halv tar flera av attackerna dubbelt mycket tid att utföra. Det kan även vara möjligt att begränsa antalet försök inom bestämda tidsintervall. 2.9.1.1 Bruteforce Bruteforce betyder ungefär ren stryka på svenska men som mycket annat inom informationsteknik används oftast det engelska ordet bruteforce som namn för denna typ av attacker, det engelska namnet kommer användas i resten av dokumentet. Metoden går ut på att testa möjliga kombinationer tills det att en lösning har upptäckts. Det är den enklaste och kanske mest tidskrävande metoden. Samtidigt kan bruteforce vara den enda metoden som alltid fungerar om en tjänst har någon form av inloggning om inga sårbarheter finns. Den troligen mest sårbara punkten för denna typen av attacker är användares inloggning då de kan välja relativt lätta lösenord. Den största nackdelen med att utföra en bruteforce-attack är att den tar väldigt lång tid att genomföra på grund av att antalet kombinationer växer exponentiellt i förhållande till längden på nyckeln enligt formeln 2 x där x är antalet tecken. I tabell 2 nedan visas relationen mellan antal tecken och antalet möjliga kombinationer. Har attackeraren tur skulle den kombination som testas först vara den rätta. Nyckelstorlek Antal kombinationer (avrundat) 1 2 2 4 4 16 8 256 16 65 536 32 4,3 10 9 56 (DES) 7,2 10 16 64 1,8 10 19 128 (AES) 3,4 10 38 192 (AES) 6,2 10 57 256 (AES) 1,1 10 77 Tabell 2 Kombinationer i förhållande till nyckellängd Krypteringsalgoritmen som står i parantes efter några av längderna ger exempel på algoritm som använder respektive längd. Som det går att utläsa ur tabell 2 ökar antalet kombinationer exponentiellt i förhållande till antal tecken. Det leder till att en liten ökning av nyckeln snabbt kan göra det praktiskt ogenomförbart att försöka knäcka nyckeln på detta sätt. 2.9.1.2 Ordboksattack En ordboksattack bygger på att programmet som utför attacken har en stor ordbok med troliga och möjliga lösenord vars innehåll är de kombinationer som kommer att testas. Finns det specifika regler för hur ett lösenord måste se ut, t.ex. vilka tecken och maxlängd, kan ordboken minskas med de ord som inte matchar kraven och då kommer alla kombinationer snabbare testa. Denna metod är 17

effektivare mot lösenord än krypteringsnycklar som är slumpmässigt genererade. Om en specifik användare är målet kan information om denne, som efternamn, husdjur, födelseår, matas in i ordboken för att få med personlig information som kan användas i lösenord. 2.9.1.3 Regnsbågstabell Regnbågsattacker sker inte mot servern utan beräkningarna sker på attackerarens dator eller datorer. Det innebär att attackeraren måste få tillgång till databasen med användarnas lösenord istället för att t.ex. attackera webbtjänstens inloggningssida. Först byggs en tabell upp med troliga lösenord och deras hasade värden. Därefter kan de hashade lösenorden från databasen kollas mot tabellen och på det sättet få fram vilket lösenord som resulterade i den givna hashen. Bästa sättet att skydda en tjänst mot denna typen av attack är att använda något som kallas salt då lösenorden hashas [25]. 2.9.2 Social manipulation Social manipulation (på engelska social engineering) är ett samlingsnamn för en typ av attacker där användarna manipuleras eller luras att lämna ut känsliga information. Attackerna kan variera från att lämna ett USB-minne som är infekterat som någon ska plocka upp, en hemsida som ser väldigt lik originalet eller ett mejl där användarna uppmanas göra något. Metoden med att lämna ett USBminne har visat sig vara väldigt effektiv [26]. Användarna är ofta inte medvetna om att de har lämnat ifrån sig den känsliga datan till tredje part förens efter att den illasinnade personer har utfört attacken. 2.9.3 Mjukvaran Ibland upptäcks säkerhetshål i mjukvara som i fallet med till exempel den kända heartbleed [27] (på svenska hjärtblödning). Säkerhetshålen kan vara väldigt allvarliga som i fallet heartbleed och direkt läcka data men kan även ge tillgång till servern. När ett säkerhetshål upptäcks brukar det snabbt fångas upp av illasinnade personer som försöker utnyttja det för att komma åt känslig data. Det enda sättet att skydda en tjänst mot detta är att använda mjukvara som fortfarande utvecklas och hålla den uppdaterad när det släpps nya versioner. 2.9.4 Sidkanalattacker Sidkanalattacker (på engelska Side-Channel attacks), det innebär att samla in information om de kryptografiska operationerna genom att inte direkt ge sig på kryptografin utan att samla in information om beräkningarna eller den information som används i beräkningarna [28]. Denna typ av attacker kan se lite olika ut beroende på vilken algoritm som ska knäckas men principen är densamma och de flesta av attackerna kan fungera mot både AES och RSA. Sidkanalattacker är en väldigt bred kategori där attackerna kan vara både genom hårdvara och mjukvara. Det finns olika tillvägagångssätt. Ett av dem är tidsattacker (på engelska timing attacks ). Denna typ av attacker bygger på att samla in information om hur lång tid operationerna tar att utföra [29]. Kort sammanfattat bygger det på att observera hur lång tid de kryptografiska operationerna tar med olika data och på det sättet få fram vilka värden nyckeln har [30]. Skyddet mot denna typ av attack är att 18