den bästa offentliga och privata Keygen-algoritmen-och varför
Gravitational sponsrade detta inlägg.
Vad är värre än att lämna privata nycklar liggande obevakad? Att ha offentliga nycklar som kan vara brute-forced.
” secure “i” secure shell ” kommer från kombinationen av hashing, symmetrisk kryptering och asymmetrisk kryptering. Tillsammans använder SSH kryptografiska primitiver för att säkert ansluta klienter och servrar. Under de 25 åren sedan grundandet har datorkraft och hastigheter i enlighet med Moores lag krävt alltmer komplicerade lågnivåalgoritmer.
från och med 2020 är de mest antagna asymmetriska kryptoalgoritmerna i PKI-världen RSA, DSA, ECDSA och EdDSA. Så vilken är bäst?
så vilken ska du använda?
att välja rätt algoritm beror på några kriterier:
- genomförande: kan experterna hantera det, eller behöver det rullas?
- Kompatibilitet: finns det SSH-klienter som inte stöder en metod?
- prestanda: hur lång tid tar det att generera en tillräckligt säker nyckel?
- säkerhet: kan den offentliga nyckeln härledas från den privata nyckeln? (Användningen av kvantberäkning för att bryta kryptering diskuteras inte i den här artikeln.)
RSA
implementering | RSA-bibliotek finns för alla större språk, inklusive djupgående bibliotek
(JS, Python, Go, Rust, C). |
Kompatibilitet | användning av SHA-1 (OpenSSH) eller offentliga nycklar under 2048-bitar kan inte stödjas. |
prestanda | större tangenter kräver mer tid att generera. |
säkerhet | specialiserade algoritmer som kvadratisk sikt och allmän Talfältsikt finns för att faktorera heltal med specifika egenskaper. |
tiden har varit RSA: s största allierade och största fiende. Först publicerad 1977, har RSA det bredaste stödet över alla SSH-klienter och språk och har verkligen stått tidstestet som en pålitlig nyckelgenereringsmetod. Därefter har det också varit föremål för Moores lag i årtionden och nyckelbitlängden har vuxit i storlek. Enligt NIST-standarder kräver 128-bitars säkerhet en nyckel med en längd på 3072 bitar, medan andra algoritmer använder mindre nycklar. Bit säkerhetsåtgärder antalet försök som krävs för att brute-force en nyckel. 128-bitars säkerhet innebär 2128 försök att bryta.
DSA
genomförande | DSA antogs av FIPS – 184 1994. Den har riklig representation i stora kryptobibliotek, liknande RSA. |
Kompatibilitet | medan DSA har stöd för PuTTY-baserade klienter, inaktiverar OpenSSH 7.0 DSA som standard. |
prestanda | Signifikant förbättring i nyckelgenereringstider för att uppnå jämförbara säkerhetsstyrkor, men rekommenderad bitlängd är densamma som RSA. |
säkerhet | DSA kräver användning av ett slumpmässigt genererat oförutsägbart och hemligt värde som, om det upptäcks, kan avslöja den privata nyckeln. |
det som gör DSA annorlunda än RSA är att DSA använder en annan algoritm. Det löser ett helt annat problem, känt som det diskreta logaritmproblemet, med hjälp av en annan uppsättning ekvationer, element och steg.
denna algoritm innebär användning av ett slumpmässigt genererat nummer, m, som används vid signering av ett meddelande tillsammans med en privat nyckel, k. detta nummer m måste hållas privat. Värdet mis tänkt att vara en nonce, vilket är ett unikt värde som ingår i många kryptografiska protokoll. De Ytterligare villkoren för oförutsägbarhet och sekretess gör dock nonce mer besläktad med en nyckel, och därför extremt viktig.
det är inte bara svårt att säkerställa sann slumpmässighet i en maskin, men felaktig implementering kan bryta kryptering. Till exempel:
- Androids Java SecureRandom-klass var känd för att skapa kolliderande R-värden. Med andra ord återanvände klassen några slumpmässigt genererade nummer. Detta avslöjade ett antal olika Android-baserade Bitcoin plånböcker för att få sina privata nycklar stulna. Kraven i nonce m innebär att två instanser med samma nonce-värde kan reverseras och avslöja den privata nyckeln som används för att underteckna transaktioner.
- med detta ett steg längre upptäckte fail0verflow den privata nyckeln som användes för att signera firmwareuppdateringar för Sony Playstation 3. Med andra ord kan programmerare skriva sin egen kod, underteckna den med den avslöjade privata nyckeln och köra den på PS3. Som det visar sig använde Sony samma slumptal för att underteckna varje meddelande.
ECDSA och EDDSA
de två exemplen ovan är inte helt uppriktiga. Både Sony och Bitcoin-protokollet använder ECDSA, inte DSA korrekt. ECDSA är en elliptisk kurva implementering av DSA. Funktionellt, där RSA och DSA kräver nyckellängder på 3072 bitar för att ge 128 bitar av säkerhet, kan ECDSA åstadkomma detsamma med endast 256-bitars nycklar. ECDSA förlitar sig dock på samma nivå av slumpmässighet som DSA, så den enda vinsten är hastighet och längd, inte säkerhet.
som svar på de önskade hastigheterna för elliptiska kurvor och de oönskade säkerhetsriskerna har en annan klass av kurvor fått viss berömdhet. EdDSA löser samma diskreta loggproblem som DSA/ECDSA, men använder en annan familj av elliptiska kurvor som kallas Edwards-kurvan (EdDSA använder en vriden Edwards-kurva). Samtidigt som den erbjuder små fördelar i hastighet över ECDSA, kommer dess popularitet från en förbättring av säkerheten. Istället för att förlita sig på ett slumpmässigt tal för nonce-värdet genererar EdDSA en nonce deterministiskt som en hash som gör den kollisionsbeständig.
med ett steg tillbaka garanterar användningen av elliptiska kurvor inte automatiskt någon säkerhetsnivå. Inte alla kurvor är desamma. Endast ett fåtal kurvor har gjort det förbi rigorösa tester. Lyckligtvis har PKI-industrin långsamt kommit att anta Curve25519-särskilt för EdDSA. Sätta ihop som gör den offentliga nyckeln signaturalgoritmen, Ed25519.
implementering | EdDSA är ganska ny. Crypto++ och cryptlib stöder för närvarande inte EdDSA. |
Kompatibilitet | kompatibel med nyare klienter har Ed25519 sett den största adoptionen bland Edward Curves; även om NIST också föreslog Ed448 i deras senaste utkast till SP 800-186. |
prestanda | Ed25519 är den snabbast utförande algoritmen över alla mätvärden. Som med ECDSA är offentliga nycklar dubbelt så långa som den önskade bitsäkerheten. |
säkerhet | EdDSA ger den högsta säkerhetsnivån jämfört med nyckellängd. Det förbättrar också osäkerheten i ECDSA. |
i grund och botten är RSA eller EdDSA
när det gäller det är valet mellan RSA 2048/4096 och Ed25519 och avvägningen är mellan prestanda och kompatibilitet. RSA stöds universellt bland SSH-klienter, medan EdDSA presterar mycket snabbare och ger samma säkerhetsnivå med betydligt mindre nycklar. Peter Ruppel sätter svaret kortfattat:
” det korta svaret på detta är: så länge nyckelstyrkan är tillräckligt bra under överskådlig framtid spelar det ingen roll. För här överväger vi en signatur för autentisering inom en SSH-session. Signaturens kryptografiska styrka behöver bara klara de nuvarande, toppmoderna attackerna.”- Ed25519 för SSH
använd bara inte ECDSA / DSA!
Feature bild via .
den nya stacken är ett helägt dotterbolag till Insight Partners, en investerare i följande företag som nämns i denna artikel: Bit.
Leave a Reply