I det här protokollet måste användare vara autentiserade. De kan göra detta med lösenord, filer som innehåller privata RSA-nycklar, hårdvaruenheter som Ledger Nano S och Ledger Nano X, etc.
Vissa autentiseringsmetoder är säkrare än andra: att använda en hårdvaruenhet utformad för att lagra en privat nyckel utan att göra det möjligt att någonsin extrahera den är säkrare än att lagra den privata nyckeln i en fil. Tyvärr är de säkraste också mer smärtsamma att använda. Användare som har sina nycklar på en enhet måste bära enheten med sig, måste ange sin PIN-kod varje gång de initierar en SSH-session, etc. Detta gör det ganska svårt att förespråka sätt som är säkrare än lösenord och filer för användningsfall där säkerheten för åtkomsten är inte prioritet.
Så frågan är: är det möjligt att lagra autentiseringsmaterialet säkrare än i en fil (som kan stjälas av viss skadlig programvara), utan att ändra användarupplevelsen?
Och svaret är: ja, med en TPM!
Lite historia
Under ganska lång tid har datorer kunnat bädda in ett säkerhetschip direkt. Detta chip, som heter Trusted Platform Module (TPM), tillhandahåller många funktioner inklusive möjligheten att skydda privata nycklar som används i kryptografi med offentliga nyckel.
Eftersom den är inbäddad i datorer behöver du inte ansluta en enhet till datorn för att kunna använda den. Detta anses därför vara mindre säkert än en hårdvaruenhet som kan lagras på en annan plats än datorn (detta gör det möjligt att upprätthålla principen att medan enheten inte är ansluten till datorn kan ingen skadlig kod använda hemligheterna som lagras i den).
Så TPM är inte den "bästa säkerheten", men det är ändå mycket säkrare än att använda filer som t.ex $HOME/.ssh/id_rsa
för att lagra privata nycklar.
Hur kan TPM användas med OpenSSH på Linux? Med ett projekt som heter tpm2-pkcs11
, efter instruktioner som finns tillgängliga på många webbplatser i många år, inklusive på officiell dokumentation från dess kodarkiv.
Nu, vad är nyheterna? Denna programvara är nu äntligen förpackad i Ubuntu och Debian, vilket gör den äntligen tillgänglig för de flesta Linux-användare!
Mer exakt här är en tidslinje:
- Under 2014 publicerades huvudspecifikationerna för TPM 2.0. För att interagera med en TPM från programvaran gjordes en standardiseringsansträngning och två inkompatibla mjukvarustackar skapades: den från Trusted Computing Group (TCG), kallad TPM Software Stack (TSS), och den från IBM, även kallad TPM Software stack.
- År 2018, projektet
tpm2-pkcs11
skapades för att tillhandahålla ett PKCS#11-gränssnitt till en TPM 2.0, med hjälp av TCG:s TSS. PKCS # 11 är en standard som definierar ett Application Programming Interface (API) som heter Kryptoki att använda tokens som lagrar kryptografiska nycklar. Eftersom OpenSSH stödde att använda ett PKCS#11-gränssnitt för att utföra användarautentisering, möjliggjorde detta att använda TPM för att lagra nycklarna som används för SSH-autentisering. - I februari 2019,
tpm2-pkcs11
lades till Fedora 29. - I september 2019 släpptes CentOS 8 med detta paket.
- I april 2020,
tpm2-pkcs11
lades till Debian sid. Tyvärr innehöll den inte programmettpm2_ptool
vilket är nödvändigt för att enkelt skapa nycklar. Det här problemet rapporterades i Debianfel # 968310. - I januari 2021 var Debians paket fixerad (och underhållaren erkände min hjälp!).
- I april 2021, Ubuntu 21.04 Hirsute flodhäst släpptes med det fasta paketet.
- I augusti 2021, Debian 11 Bullseye släpptes med det fasta paketet
Nu tpm2-pkcs11
är tillgänglig på Debian, Ubuntu och flera andra Linux-distributioner listade på Repologi.
Använder tpm2-pkcs11
På Debian 11, här är stegen för att generera och använda en ny SSH-nyckel som lagras säkert av TPM:n:
- Installera kommando
tpm2_ptool
och biblioteklibtpm2_pkcs11.so.1
, som tillhandahålls av två paket:
2. Kontrollera att systemet kan använda en TPM 2.0. Om någon av följande kontroller misslyckas kan det betyda att systemet inte har en TPM, eller har en TPM 1.2 eller har en TPM 2.0 som är inaktiverad i BIOS-inställningarna:
3. Lägg till den aktuella användaren i gruppen som kan komma åt TPM-enheten /dev/tpmrm0
. På Debian och Ubuntu måste användare tillhöra en grupp som heter tss
(tack vare konfigurationen tillhandahållen av tpm-udev
paket). Följande kommando lägger till den aktuella användaren till denna grupp:
Initiera en användarbutik, skyddad av ett lösenord och en SOPIN och skapa en nyckel, till exempel en elliptisk kurvtangent på kurvan som heter "NIST P-256" (även känd som "secp256r1"):
4. Förkortningen SOPIN betyder Säkerhetstjänstemans personnummer och är ett koncept från PKCS#11:s specifikation. I enkla användningsfall kan det ses som ett "återställningslösenord" som gör det möjligt att ändra lösenordet när det till exempel har tappats bort.
5. Visa den offentliga nyckeln för denna nya nyckel:
6. Konfigurera den nya publika nyckeln i en server, till exempel genom att skriva in den $HOME/.ssh/authorized_keys
eller i GitHubs kontoinställningar eller på någon annan plats där offentliga SSH-nycklar används.
7. Konfigurera SSH-klienten som ska användas tpm2-pkcs11
för att ansluta till servern, till exempel genom att skriva in detta $HOME/.ssh/config
(klientsidan):
Anslut till servern (OBS att föregående steg kan hoppas över:
Framtida arbete
Föregående avsnitt presenterade hur man skapar en ny nyckel i TPM. Även om detta gör det möjligt att använda en TPM för att skydda SSH-autentisering, finns det två funktioner som behövs för att göra detta till ett verkligt alternativ till att använda filer för att lagra privata nycklar:
- Funktion #1: importera befintliga SSH-nycklar till en TPM istället för att skapa nya (vilket möjliggör smidig övergång till TPM-lagring, säkerhetskopiering av nycklarna, ifall datorn går sönder eller går förlorad, etc.).
- Funktion #2: använda SSH-nycklar utan lösenord, som oskyddade privata nyckelfiler (denna funktion är säkrare än nyckelfiler eftersom den skyddade nyckeln inte kan extraheras från TPM).
Jag implementerade båda funktionerna i tpm2-pkcs11
och skickade in dem i Pull Requests #681 och #695. Feature #1 presenterades också i maj under det veckovisa onlineuppropet av tpm.dev-gemenskapen och inspelningen är tillgänglig på https://developers.tpm.dev/posts/14389750.
Så båda funktionerna kommer sannolikt att bli tillgängliga i en framtida version av tpm2-pkcs11
.
Förresten, för nyfikna läsare som vill förstå det inre av tpm2-pkcs11
, jag publicerade en artikel om dem på SSTIC 2021-konferensen, som heter Skydda SSH-autentisering med TPM 2.0 (artikel på engelska, presentation på franska). Dessutom kan läsare som vill prova saker utan att röra en riktig TPM vara intresserade av avsnittet "Emulera en TPM 2.0" i den här artikeln.
(Illustration: Rainer Knäpper, Free Art License)
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- PlatoAiStream. Web3 Data Intelligence. Kunskap förstärkt. Tillgång här.
- Minting the Future med Adryenn Ashley. Tillgång här.
- Köp och sälj aktier i PRE-IPO-företag med PREIPO®. Tillgång här.
- Källa: https://www.ledger.com/blog/ssh-with-tpm
- : har
- :är
- :inte
- :var
- $UPP
- 1
- 11
- 13
- 14
- 15%
- 2014
- 2018
- 2019
- 2020
- 2021
- 30
- 8
- 80
- a
- förmåga
- Able
- Om oss
- tillgång
- Konto
- medgav
- lägga till
- lagt till
- Lägger
- förespråkare
- också
- alternativ
- an
- och
- svara
- vilken som helst
- api
- Ansökan
- April
- ÄR
- Konst
- Artikeln
- AS
- At
- AUGUSTI
- authenticated
- Autentisering
- tillgänglig
- stöd
- BE
- blir
- varit
- båda
- Brutet
- Bug
- men
- by
- Ring
- KAN
- kan inte
- bära
- Vid
- fall
- CGI
- byte
- ta
- Kontroller
- chip
- klient
- koda
- dator
- datorer
- databehandling
- begrepp
- Konferens
- konfiguration
- Kontakta
- anslutna
- anses
- kunde
- skapa
- skapas
- Skapa
- kryptografisk
- kryptografi
- nyfiken
- Aktuella
- kurva
- definierar
- utformade
- dev
- anordning
- enheter
- DID
- olika
- svårt
- direkt
- inaktiverad
- Visa
- Distributioner
- do
- dokumentation
- gör
- under
- lätt
- ansträngning
- Elliptiska
- embed
- inbäddade
- aktiverad
- möjliggör
- driva
- Engelska
- etc
- NÅGONSIN
- Varje
- exempel
- befintliga
- erfarenhet
- extrahera
- misslyckas
- Leverans
- Funktioner
- Februari
- Fil
- Filer
- Slutligen
- fixerad
- efter
- För
- Fri
- franska
- från
- framtida
- generera
- GitHub
- Grupp
- hårdvara
- hårdvara
- hårdvaruenheter
- Har
- här.
- Hur ser din drömresa ut
- How To
- html
- http
- HTTPS
- i
- IBM
- Identifiering
- if
- genomföras
- importera
- in
- Inklusive
- oförenlig
- initiera
- istället
- instruktioner
- interagera
- intresserad
- Gränssnitt
- in
- fråga
- IT
- DESS
- Januari
- januari 2021
- jpg
- Nyckel
- nycklar
- känd
- Ledger
- Ledger Nano
- Ledger Nano S
- Ledger Nano X
- mindre
- tycka om
- sannolikt
- linux
- Noterade
- läge
- förlorat
- Huvudsida
- göra
- GÖR
- Framställning
- malware
- många
- Materialet
- max-bredd
- Maj..
- betyda
- betyder
- modul
- mer
- Dessutom
- mest
- mycket
- my
- Som heter
- nano
- nödvändigt för
- Behöver
- behövs
- Nya
- nyheter
- Nej
- nu
- of
- Officer
- on
- ONE
- ettor
- nätet
- or
- beställa
- Övriga
- Övrigt
- paket
- förpackade
- paket
- smärtsamma
- Lösenord
- lösenord
- utföra
- personlig
- Plats
- plattform
- plato
- Platon Data Intelligence
- PlatonData
- kontakt
- möjlig
- exakt
- presentation
- presenteras
- föregående
- Principen
- prioritet
- privat
- privat nyckel
- Privata nycklar
- Programmering
- projektet
- skydda
- skyddad
- skydda
- protokoll
- ge
- förutsatt
- ger
- allmän
- Public Key
- offentliga nycklar
- publicerade
- fråga
- läsare
- verklig
- inspelning
- frigöra
- frigörs
- Rapporterad
- Obligatorisk
- rsa
- s
- §
- säkra
- säkert
- säkerhet
- sett
- September
- session
- inställningar
- flera
- sida
- Enkelt
- So
- Mjukvara
- några
- specifikation
- specifikationer
- Stacks
- standard
- Steg
- Steg
- Fortfarande
- stulna
- förvaring
- lagra
- lagras
- lämnats
- sådana
- Som stöds
- system
- än
- tack
- den där
- Smakämnen
- The Weekly
- deras
- Dem
- Där.
- därför
- de
- saker
- detta
- tid
- tidslinje
- till
- tokens
- rörande
- övergång
- betrodd
- prova
- två
- Typ
- ubuntu
- förstå
- tyvärr
- användning
- Begagnade
- Användare
- Användarupplevelse
- användare
- med hjälp av
- vill
- var
- Sätt..
- sätt
- webbsidor
- vecka
- były
- när
- som
- medan
- VEM
- med
- utan
- skrivning
- X
- år
- ja
- zephyrnet