it-swarm-eu.dev

Opakované použití soukromých / veřejných klíčů

Mám účty na několika webech třetích stran - Bitbucket, Bluehost atd.

Z toho, co jsem shromáždil, je běžnou praxí používat jeden pár klíčů pro všechny [id_rsa, id_rsa.pub], ale pouze rozdávat veřejný klíč

Je to správné použití, nebo je lepší vygenerovat nový pár pro každý web?

Zdá se mi, že je to nejisté - jakýkoli web, kterému důvěřuji s úmyslným úmyslem [nebo který je napaden hackerem], by mohl vzít můj soukromý klíč, když se připojím poprvé, a použít jej k přechodu na jiné weby.

Může někdo, kdo rozumí SSH, ověřit, že je bezpečné používat jeden pár klíčů všude, a pokud ano, možná vysvětlí proč?

Pokud mám také dva domácí počítače, existuje nějaký důvod k použití různých párů klíčů od každého z nich?

Děkuji všem.

45
SamGoody

Váš soukromý klíč není nikdy odeslán na druhý web, takže je naprosto bezpečné znovu použít veřejný klíč. Je také v pořádku znovu použít stejný klíč, jaký mají vaše místní počítače. Nezapomeňte však, že pokud někdo ukradne klíč, bude mít ke všem přístup. To se může nebo nemusí týkat.

42
artbristol

V SSH existuje několik párů klíčů. Ten, o kterém mluvíte, je pár klíčů klienta . Klient (tj. Stroj, který je na vašem stole, pod vaší fyzickou kontrolou) ukládá soukromý klíč - a soukromý klíč není nikdy odeslán na server. veřejný klíč je uložen na serveru (obvykle v $HOME/.ssh/authorized_keys soubor).

Když se klient připojí k serveru, použije klient soukromý klíč k prokázání serveru, že řídí soukromý klíč, a může s ním provádět výpočty. (konkrétně digitální podpis ). Server ověří podpis pomocí veřejného klíče. Znalost veřejného klíče nedává ne moc generovat nové podpisy, proto se nazývá „veřejný“ klíč: lze jej zveřejnit , bez špatného účinku. Zejména kopírování veřejného klíče na libovolný počet serverů nedává žádný z těchto serverů moc nad jinými servery, ať už jsou čestné nebo zcela ovládané útočníkem.

Jak @artbristol zdůrazňuje, je to důležitý soukromý klíč. Pokud zkopírujete svůj veřejný klíč na deset serverů a někdo ukradne soukromý klíč (možná hacknutím do vašeho stolního systému nebo jeho fyzickým vymazáním), pak že někdo získá okamžitý přístup k deseti serverům najednou. Soukromé klíče jsou cenné .

18
Thomas Pornin

Zdá se mi, že je to nejisté - jakýkoli web, kterému důvěřuji s úmyslným úmyslem [nebo který je napaden hackerem], by mohl vzít můj soukromý klíč, když se připojím poprvé, a použít jej k přechodu na jiné weby.

Může někdo, kdo rozumí SSH, ověřit, že je bezpečné používat jeden pár klíčů všude, a pokud ano, možná vysvětlí proč?

Veřejné klíče fungují na základě autentizace výzvy. V zásadě dáte veřejný klíč několika webům, takže každý web vám může poskytnout výzvu. Tato výzva je pokaždé jedinečná a může na ni odpovědět pouze osoba se soukromým klíčem.

Zjednodušeným příkladem by bylo, pokud server vezme váš veřejný klíč a zašifruje zprávu jako „Relační klíč pro uživatele X v 19. prosince 16: 30: 03.351213 UTC je XPa7sK35WjMgAezrPmG1Sq4CV7nsFN1Uc3TRW6P8Evc“. Váš klientský počítač přijme zašifrovanou zprávu, dešifruje ji soukromým klíčem a poté zašle zpět dešifrovaný klíč relace na server, čímž potvrdí, že vlastníte soukromý klíč, na kterém vás server autentizuje. (V praxi je často složitější se serverem obvykle s veřejnými/soukromými hostitelskými klíči, takže můžete šifrovat své zprávy na server a ověřovat, že server je tím, kdo říká, že je).

Mít svůj veřejný klíč nedává škodlivému serveru další metody útoku, s výjimkou pokusu o faktor modul z veřejného klíče k opětovnému vytvoření soukromého klíče. To je možné pouze v případě, že je váš klíč příliš malý, tj. 512bitové klíče byly prolomeny před deseti lety, 768bitové klíče RSA byly hlášeny prasklé minulý rok (s přibližně 10 ^ 20 operacemi nebo 2000 let na jediném jádru moderního procesoru); 1024bitové klíče jsou stále v bezpečí a výchozí hodnota ssh je 2048bitových klíčů.

6
dr jimbob

Tento dokument obsahuje všechny podrobnosti o tom, jak funguje ověřování veřejným klíčem v SSH. Shrnu to níže.

Klient odešle následující paket:

 popis/hodnota datového typu 
 bajt SSH_MSG_USERAUTH_REQUEST 
 řetězec uživatelské jméno 
 řetězcová služba 
 řetězec "publickey" 
 boolean TRUE 
 řetězec název algoritmu veřejného klíče 
 řetězcový veřejný klíč, který se použije pro autentizaci 
 řetězce

kde podpis je podpis používající soukromý klíč nad následujícími daty:

 identifikátor relace řetězce 
 bajt SSH_MSG_USERAUTH_REQUEST 
 řetězec uživatelské jméno 
 řetězcová služba 
 řetězec "publickey" 
 boolean TRUE 
 název algoritmu veřejného klíče s řetězcem 
 řetězec veřejného klíče, který se použije pro ověření 

Server poté hledá, zda je zadaný veřejný klíč autorizován pro daný veřejný klíč (@ThomasPornin diskutuje o tom, jak se to dělá v jeho odpovědi). Server poté zkontroluje, zda je podpis správný (to se provádí pomocí veřejného klíče). Pokud to uspěje, autentizace je úspěšná.

Jak vidíte (a jak je uvedeno v odpovědi @ artbristol), soukromý klíč není nikdy přenesen na server. Musíte pouze prokázat, že znáte soukromý klíč zasláním digitálního podpisu.

4
mikeazo