Denna artikel är verkligen inte hela nyckeln till att förstå hur krypteringsteknik fungerar, men vi ska i alla fall ta en titt på vilka standarder som bör användas och varför.
Det finns en stor mängd krypteringssystem. Ett av de vanligaste användningsområdena för nycklar är vid SSH-uppkopplingar. Det kan till exempel handla om fjärrstyrning av en server eller uppladdning av kod till tjänster som Github.
Generellt anses nyckelsystem vara en säkrare autentiseringsmetod än lösenord. Det finns flera anledningar till detta. En är att användare tenderar att använda enkla lösenord, och det är då enkelt för en angripare att ta sig in i systemet med hjälp av en brute force-attack (en attack där ett program automatiskt gissar ett stort antal lösenord). En annan nackdel med lösenord, när de används på distans, är att de måste skickas till systemet där användaren vill logga in, något som gör det möjligt att snappa upp dem på vägen. Därför är nycklar att föredra.
När det gäller moderna nyckelsystem används istället nyckelpar, där en del av nyckeln är offentlig (publik) och den andra privat. Den sistnämnda nyckeln lämnas aldrig ut och det är därmed mindre risk att den hamnar i orätta händer.
Vanliga nyckeltyper
En av de mest använda mjukvarorna för att ansluta via SSH är den fria programsviten OpenSSH. De senaste utgåvorna av OpenSSH stöder fem olika nyckeltyper.
Där finns RSA1, en nyckeltyp som kan användas för servrar som enbart stöder den äldre version 1 av SSH-protokollet. Du bör av säkerhetsskäl undvika denna version av protokollet.
För SSH version 2 används istället den nyckeltyp som kallas RSA. Du hittar även DSA, Digital Signature Algorithm, en nyckeltyp som är beroende av ett slumpgenererat värde. Det har visat sig att denna nyckeltyp går att knäcka, och den kommer därför att tas bort från OpenSSH så småningom.
Även en mer avancerad variant av DSA, ECDSA, har visat sig osäker. Det var till exempel en sådan nyckel Sony använde för Playstation 3 när dess mjukvarukryptering blev hackad. Den finns dock med som alternativ när en nyckel ska skapas av OpenSSH.
Den sista nyckeltyp som stöds av OpenSSH har det kryptiska (!) namnet Ed25519. Precis som ECDSA bygger denna nyckeltyp på en avancerad matematisk teori kallad ”The elliptic curve discrete logarithm problem”, en algoritm som anses säkrare än den som används av DSA och RSA.
De sistnämnda bygger i grunden på en metod med faktorisering av stora primtal, en beräkningsintensiv operation. Detta medför att RSA ses som relativt säkert om det används med tillräckligt många bitar (stora tal). Samtidigt är det långsamt, då kryptering/dekryptering kräver en stor mängd matematiska beräkningar.
Den krypteringstyp som rekommenderas idag är därför Ed25519. Denna använder en smart algoritm som möjliggör korta nycklar utan att äventyra säkerheten. Ett problem kan dock vara att det är en relativt ny nyckeltyp, och därför stöds den ännu inte av alla system. Ed25519 är i praktiken en referensimplementation av den så kallade ”EdDSA”, Edwards-curve Digital Signature Algorithm.
Skapa en Ed25519-nyckel
Så långt teorin, men hur implementeras det hela i praktiken? Ed25519 stöds av diverse olika mjukvaror, vi använder här i vårt första exempel OpenSSH i ett Linuxsystem. För att skapa en nyckel med denna krypteringstyp används följande kommando:
ssh-keygen -t ed25519
Du märker att du till skillnad från DSA och RSA inte behöver ange nyckelstorlek, då Ed25519 alltid använder 256 bit. Nyckeln skyddas av ett lösenord som måste anges för att den ska ”låsas upp” och an vändas.
Detta lösenord måste vara starkt, då det skyddar nyckeln om någon får tillgång till den dator där den lagras.
Det går att hoppa över lösenordet, men detta rekommenderas inte, då nyckeln i så fall lagras okrypterad på hårddisken och kan användas av alla som har tillgång till datorn.
Skapa nyckel med Putty
Det är givetvis inte bara Linuxanvändare som kan använda nycklar skapade med Ed25519.
De som använder Windows och SSH känner säkert till Putty, en programsvit som bland annat innehåller ett program som kan användas för att ansluta till olika typer av servrar. Det ingår även en nyckelgenerator vid namn Puttygen.
Dessvärre, och märkligt nog, har den version av Puttygen som medföljer vid nedladdning från den officiella webbsidan inte stöd för Ed25519. Du får istället installera SFTP/SCP-klienten WinSCP för att få en version med stöd för Ed25519.
Puttygen är i vilket fall som helst enkelt att använda. Först väljs vilken kryptering som önskas och sedan klickas en knapp som startar nyckeltillverkningen.
En smart finess är att användaren uppmanas röra muspekaren över programmet under tiden nyckeln skapas. Det kanske låter konstigt, men poängen är att få fram slumpmässiga data som gör nyckeln säkrare. När sedan nyckeln är klar aktiveras två knappar i gränssnittet, en för att spara den privata delen av nyckeln och en för att spara den publika.
Använd nyckel med SSH
För att den nya nyckeln ska kunna användas i praktiken måste den publika delen av nyckeln kopieras till den server som du vill ansluta till.
De som har OpenSSH och ett Linuxsystem gör detta enklast med kommandot ”ssh-copy-id”.
De med Windows kan med fördel använda WinSCP för att överföra nyckeln. Det överföringsprotokoll som används är då SCP, ett protokoll som stöds av bland annat OpenSSH. Fungerar allt som det ska går det sedan att logga in via SSH genom att bara ange lösenordet för nyckeln.
Har du inte ändrat något lagras nyckeln i den dolda katalogen .ssh:
ls -al ~/.ssh
-rw——- 1 patrik patrik 464 okt 6 11:16 id_ed25519
-rw-r–r– 1 patrik patrik 100 okt 6 11:16 id_ed25519.pub
Använd nyckeln med Github
Github är i korta drag en tjänst där man kan publicera sin fria kod för andra att ta del av. Det finns även en rad funktioner för att samarbeta med andra utvecklare, möjlighet att förgrena projekt och så vidare.
För att kunna hantera din kod på denna tjänst behövs ett konto. Det kan användas genom att ange användarnamn och lösenord, alternativt genom att använda SSH-nycklar. För att göra detta (på ett Linuxsystem) ska nyckeln först läggas till i systemets SSH-agent:
ssh-add ~/.ssh/id_ed25519 Enter passphrase for /home/patrik/.
ssh/id_ed25519: Identity added: /home/patrik/.ssh/ id_ed25519
Nyckeln ska sedan kopieras till det aktuella Github-kontot. De som har Windows och Puttygen kan visa nyckeln i gränssnittet, medan de med Linuxsystem börjar med att ”visa” den publika nyckeln med hjälp av kommandot ”cat”:
cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3Nza…
Hela utmatningen kopierar du till klippbordet, precis som vilken text som helst.
Nästa steg är att logga in på Github och i menyn leta upp Settings > ”SSH and GPG keys”. Klicka på ”New SSH key” och en sida öppnas.
Du anger ett beskrivande namn för nyckeln, till exempel aktuellt datornamn, och klistrar in nyckeln som du tidigare kopierade.
Spara och Github-kontot är klart för in loggning med den nya nyckeln.
Efter detta behöver du även justera hur koden laddas upp från den lokala datorn. Detta är beroende av vilken utvecklings miljö som används. Sker uppdateringar från kommandoraden är processen som följer:
Börja med att gå till den katalog där koden lagras lokalt och kontrollera den nuvarande adressen:
git remote -v origin https://github.com/användarnamn/förrådsnamn.git
Detta användarnamn och förrådsnamn används sedan enligt följande för att ändra till uppladdning via SSH:
git remote set-url origin git@ github.com:användarnamn/förrådsnamn.git
När detta är gjort ska du kunna uppdatera kodförrådet på Github utan att behöva ange kontots användarnamn och lösenord, endast lösenordet för nyckeln behöver anges.
Uppgradera dina nycklar
Då har du fått lära känna några olika typer av nycklar, både säkra och mindre säkra.
Precis som med annan mjukvara är det viktigt att hålla sig uppdaterad inom området och att byta till säkrare lösningar så snart sådana tillhandahålls. Det var därför vi gick igenom hur du skapar och använder nycklar baserade på Ed25519.
Så nu är det bara att sätta fart, låt inte hackarna komma åt känsliga data bara för att du inte har uppdaterat dina nycklar!
Av Patrik Hermansson