Kategori: Säkerhetsgrunder

  • En enkel guide till kryptering och digitala signaturer

    En enkel guide till kryptering och digitala signaturer

    Kryptering är en av de mest grundläggande byggstenarna inom IT-säkerhet. Samtidigt är det ett område som kan kännas svårt att greppa, särskilt när man börjar prata om publika nycklar, digitala signaturer och certifikat.

    Tanken med det här inlägget är att enkelt förklara principerna bakom kryptering och signering – utan att djupdyka i tekniska detaljer.

    Förhoppningsvis blir det också en bra grund inför kommande inlägg om DNSSEC, DANE och andra säkerhetsfunktioner som bygger på kryptering.


    Vad är kryptering?

    Kryptering är ett sätt att göra information oläsbar för alla som inte har rätt nyckel. Man tar klartext och förvandlar den till något som ser ut som slumpmässiga tecken. På så sätt kan man skicka känslig information över nätverk som andra kan avlyssna, utan att någon obehörig kan läsa innehållet.

    Det är viktigt att skilja på kryptering och hashning.

    • Kryptering är en tvåvägsfunktion – man kan både kryptera och dekryptera.
    • Hashning är däremot envägs – när något väl är hashat går det inte att återskapa originalet.

    Symmetrisk kryptering – när en nyckel räcker

    Vid symmetrisk kryptering använder både avsändaren och mottagaren samma nyckel för att kryptera och dekryptera.

    Ett klassiskt exempel är Caesar-chiffer, där man flyttar varje bokstav ett visst antal steg i alfabetet. Om originaltexten är “abc” och nyckeln är +5, blir det krypterade resultatet “fgh”. För att dekryptera texten flyttar mottagaren tillbaka bokstäverna med samma nyckel.

    Eftersom symmetrisk kryptering är väldigt snabb och effektiv använder vi den i stort sett överallt – i TLS, VPN-tunnlar, för att kryptera filer och mycket mer.

    Exempel på algoritmer för symmetrisk kryptering är:

    • AES – den vanligaste algoritmen i modern IT-säkerhet.
    • ChaCha20 – modernt och snabbt alternativ till AES.
    • 3DES – klassisk algoritm som är föråldrad idag.

    Men symmetrisk kryptering har ett stort problem: hur delar man nyckeln på ett säkert sätt?

    Om någon får tag på nyckeln kan de läsa all trafik och data som krypterats med den. Ju fler som ska använda samma nyckel, desto större risk att den läcker.

    Dessutom skalar det dåligt. För varje person eller system du vill kommunicera med måste du skapa en unik nyckel. I större miljöer blir det snabbt ohanterligt.

    Det är dessa utmaningar som gjorde att man började utveckla lösningar där man inte behöver dela en nyckel i förväg. Resultatet blev asymmetrisk kryptering.


    Asymmetrisk kryptering – två nycklar som bildar ett par

    Asymmetrisk kryptering löser problemet med att dela hemliga nycklar i förväg. Istället använder man ett nyckelpar med en publik nyckel och en privat nyckel.

    • Den publika nyckeln kan du dela med vem som helst.
    • Den privata behåller du själv och skyddar noga!

    Nycklarna konstrueras på ett sätt så att de hör ihop matematiskt. Det du krypterar med den publika nyckeln går bara att dekryptera med den tillhörande privata nyckeln.

    Genom att dela din publika nyckel kan alla skicka krypterad information till dig, och bara du kan dekryptera den med din privata nyckel.

    📌 Exempel: Tänk dig att du vill skicka ett hemligt meddelande till Anna. Du använder då Annas publika nyckel för att kryptera meddelandet.

    När det kommer fram kan bara Anna dekryptera meddelandet, eftersom det krävs hennes privata nyckel. Om någon annan får tag i det krypterade meddelandet kan de ändå inte läsa innehållet, eftersom de inte har den privata nyckeln.

    Exempel på algoritmer för asymmetrisk kryptering är:

    • RSA – klassisk och mycket spridd. Används ofta i TLS-certifikat och för signering.
    • ECDSA / ECDH – moderna algoritmer för signering och nyckelutbyte.
    • Ed25519 / X25519 – moderna och snabba alternativ till ECDSA / ECDH.

    Men om asymmetrisk kryptering löser de här problemen, varför använder vi inte alltid den metoden? Jo, för i jämförelse med symmetrisk kryptering är asymmetrisk kryptering långsammare och mer resurskrävande.

    Istället använder man en kombination:

    • Asymmetrisk kryptering för att säkert komma överens om en nyckel.
    • Därefter symmetrisk kryptering för att snabbt och effektivt kryptera själva trafiken och datan.

    Nedan kommer ett exempel på hur asymmetrisk och symmetrisk kryptering används tillsammans.

    ⚠️ Viktigt! Detta är en förenklad illustration. Moderna protokoll som TLS 1.3 använder mer avancerade nyckelutbyten, men principen är densamma.


    Signering – bevisa äkthet och integritet

    Kryptering löser problemet att hålla hemlig data skyddad. Men hur kan vi vara säkra på vem som skickat informationen och att den inte blivit ändrad? Det är här signering kommer in.

    Vid asymmetrisk kryptering använder vi mottagarens publika nyckel för att kryptera data. På så vis vet vi att bara mottagaren kan dekryptera innehållet.

    Signering fungerar precis tvärtom. Här använder avsändaren sin privata nyckel för att signera informationen. Alla som har tillgång till avsändarens publika nyckel kan verifiera signaturen och därmed bekräfta två saker:

    1. Äkthet – att informationen kommer från den som äger den privata nyckeln.
    2. Integritet – att innehållet inte har blivit ändrat efter signeringen.

    📌 Exempel: Tänk dig att du vill skicka ett viktigt meddelande till Anna, och du vill att hon ska kunna verifiera att det verkligen kommer från dig.

    1. Du signerar meddelandet med din privata nyckel.
    2. När Anna tar emot meddelandet använder hon din publika nyckel för att verifiera signaturen.

    Hashfunktionens roll

    Hashning är en viktig del av signering. I praktiken signerar man nästan aldrig hela meddelanden. Istället beräknar man en hash av innehållet och signerar hashvärdet.

    Hashning är en metod som tar emot vilken data som helst – en text, en fil eller ett lösenord – och omvandlar det till en unik sträng, ett så kallat hashvärde.

    Det fiffiga med hashning är att:

    • samma input ger alltid samma hashvärde.
    • minsta lilla ändring (även om det bara är ett enda tecken) gör att hashvärdet blir annorlunda.
    • hashning är envägs – det går inte att återskapa originalet från hashvärdet.

    Dessa egenskaper gör hashning populär även i andra sammanhang – till exempel för att beräkna checksummor på filer, eller för att lagra hashade lösenord i databaser.

    Vanliga typer av hash-algoritmer är:

    • SHA-256 – en av de vanligaste hashfunktionerna idag. Används i TLS, certifikat, signering och många säkerhetsprotokoll.
    • SHA-1 – tidigare mycket vanlig, men idag osäker och bör inte användas i säkerhetskritiska system.
    • MD5 – historiskt sett extremt vanlig, men helt osäker idag.

    Hur kan vi lita på nycklarna?

    Nu när vi lärt oss hur asymmetrisk kryptering och signering fungerar blir det tydligt att dessa metoder bygger helt på att vi kan lita på den publika nyckeln. Om vi inte är säkra på vem den publika nyckeln tillhör, hur vet vi då att vi skickar krypterad information till rätt person?

    I vissa implementationer, som GPG, kan vi behöva verifiera manuellt att en publik nyckel verkligen tillhör rätt person – till exempel genom att ringa personen och jämföra nycklarnas fingeravtryck. Många andra system använder certifikat och betrodda utfärdare för att automatisera den här kontrollen.

    Vad är ett certifikat?

    I grunden är ett certifikat en publik nyckel kombinerad med information om vem nyckeln tillhör. Du kan tänka dig att ett certifikat är ett slags digitalt ID-kort.

    Vem utfärdar certifikaten?

    Precis som vanliga ID-kort så behöver certifikat utfärdas av någon vi litar på. Den rollen har en Certificate Authority (CA).

    En CA är en betrodd part som:

    • Intygar att den som ansöker om ett certifikat verkligen är rätt person eller domän.
    • Skapar ett certifikat som innehåller den publika nyckeln och information om ägaren.
    • Signerar certifikatet med sin privata nyckel, så att andra kan verifiera att det är äkta.

    Det är CA:ns signatur som gör att vi kan lita på att certifikatet, och att den publika nyckeln verkligen tillhör rätt mottagare.

    Din dator eller mobil har en inbyggd lista över betrodda CA, och kraven för att få vara med på den listan är väldigt höga. Det går även att skapa en egen CA för interna system, men då måste du även konfigurera alla klienter så att de också litar på denna.


    Sammanfattning – tre saker att ta med sig

    1. Kryptering skyddar innehållet

    Kryptering gör informationen oläsbar för obehöriga.

    • Symmetrisk kryptering är snabb och används för själva datatrafiken.
    • Asymmetrisk kryptering löser problemet med att dela hemliga nycklar genom att använda ett nyckelpar (en publik och en privat nyckel).

    2. Signering verifierar äkthet och integritet

    Genom att signera data med en privat nyckel kan mottagaren verifiera både äkthet (vem som skickat det) och integritet (att innehållet är oförändrat).

    3. Certifikat hjälper oss att veta vem nyckeln tillhör

    Kryptering och signering fungerar bara om vi kan lita på nycklarna. En betrodd CA signerar certifikat så att vi kan lita på att en publik nyckel verkligen tillhör rätt person eller server.