Această întrebare are deja răspunsuri aici :
Comentarii
nu îl înțeleg. Răspunsul dvs. nu ar trebui să fie " prea rău ".
Răspuns
Practic, ce o face mai bună decât o parolă cu adevărat lungă?
Acestea nu sunt transferate pe server (deoarece chiar și parola foarte lungă trebuie transferată). Nu este nesigur în cazul ssh
(canalul este criptat, cu excepția cazului în care utilizați cifre defecte), dar în teorie poate fi interceptat de Man In the middle sau utilizator rău intenționat (super) serverul de la distanță.
Și cum joacă cheia publică în lucruri?
Acesta este punctul criptografiei asimetrice. Cheia privată creează semnătura, iar publicul poate verifica dacă semnătura a fost făcută de cheia publică respectivă. Trimiteți cheia publică și semnătura datelor oferite de server și acest lucru este suficient pentru ca serverul să vă permită accesul (dacă cheia publică se potrivește cu cea din authorized_keys
).
Comentarii
Răspuns
Nu sunt sigur ce comparați SSH cu „parola foarte lungă”. SSH oferă un mijloc sigur de a vă trimite datele de conectare și parola utilizatorului la un server la distanță. Sau puteți utiliza cheia publică a unui client. Cheile asimetrice sunt, în general, mai greu de rupt deoarece nu sunt supuse creării de parole greșite de către utilizatori. Autentificarea bazată pe cheie publică este preferată din acest motiv. Puteți afișa liste albe chei publice specifice pentru utilizatorul dvs. (și IP), astfel încât nu oricine să se poată conecta cu numele dvs. de utilizator și de pe orice computer. Această listă albă este conținută în /home/<user>/.ssh/authorized_keys
.
Noțiunile de bază ale SSH:
-
Serverul prezintă cheia sa publică RSA la clientul. Clientul verifică manual că are încredere în această cheie înainte de a continua.
-
SSH folosește Diffie Hellman pentru a stabili o valoare secretă partajată.
-
Secretul partajat, împreună cu o mulțime de date de schimb de chei, este asociat și semnat folosind cheia privată a serverului.
-
Clientul poate verifica această semnătură folosind serverul anterior cheie publică de încredere.
-
Ambele părți au acum toate informațiile necesare pentru a genera cheile de sesiune.
Din secțiunea 7.2 din RFC4253
7.2. Output from Key Exchange The key exchange produces two values: a shared secret K, and an exchange hash H. Encryption and authentication keys are derived from these. The exchange hash H from the first key exchange is additionally used as the session identifier, which is a unique identifier for this connection. It is used by authentication methods as a part of the data that is signed as a proof of possession of a private key. Once computed, the session identifier is not changed, even if keys are later re-exchanged. Each key exchange method specifies a hash function that is used in the key exchange. The same hash algorithm MUST be used in key derivation. Here, we"ll call it HASH. Encryption keys MUST be computed as HASH, of a known value and K, as follows: o Initial IV client to server: HASH(K || H || "A" || session_id) (Here K is encoded as mpint and "A" as byte and session_id as raw data. "A" means the single character A, ASCII 65). o Initial IV server to client: HASH(K || H || "B" || session_id) o Encryption key client to server: HASH(K || H || "C" || session_id) o Encryption key server to client: HASH(K || H || "D" || session_id) o Integrity key client to server: HASH(K || H || "E" || session_id) o Integrity key server to client: HASH(K || H || "F" || session_id) Key data MUST be taken from the beginning of the hash output. As many bytes as needed are taken from the beginning of the hash value. If the key length needed is longer than the output of the HASH, the key is extended by computing HASH of the concatenation of K and H and the entire key so far, and appending the resulting bytes (as many as HASH generates) to the key. This process is repeated until enough key material is available; the key is taken from the beginning of this value. In other words: K1 = HASH(K || H || X || session_id) (X is e.g., "A") K2 = HASH(K || H || K1) K3 = HASH(K || H || K1 || K2) ... key = K1 || K2 || K3 || ... This process will lose entropy if the amount of entropy in K is larger than the internal state size of HASH.
Odată ce canalul criptat este stabilit, protocolul SSH începe autentificarea clientului bazată pe după parametrii pe care i-ai dat-o. Toate acestea sunt efectuate în siguranță prin canalul criptat.
Răspuns
Permiteți-mi să vă ofer o imagine de nivel înalt. În mod clar, înțelegeți nevoia de comunicații sigure, fie că este SSH sau HTTPS. Comunicațiile securizate înseamnă că canalul este criptat.
În general, toți algoritmii de criptare se încadrează în una din cele două categorii:
- Criptare simetrică. O cheie. Aceeași cheie este utilizată pentru a cripta și decripta. Rapid. De exemplu. AES.
- Criptare asimetrică. Două chei. Oricare poate fi folosit pentru a cripta, dar numai celălalt poate decripta. Mult mai lent decât algoritmii simetrici. De exemplu. RSA.
Criptarea simetrică este rapidă și, prin urmare, este potrivită pentru comunicațiile care implică o mulțime de date între două părți. Folosește aceeași cheie pentru criptare și decriptare – această cheie este similară cu conceptul dvs. de parolă foarte lungă. Problemă: cum îți împărtășești cheia / parola în primul rând? Se pare că nu puteți utiliza un canal securizat, care este construit exclusiv pe un algoritm de criptare simetrică, fără a găsi o modalitate de a vă partaja mai întâi cheia / parola.
Aici intervin algoritmii asimetrici, dar sunt considerabil mai încet decât algoritmi simetrici. Nu este practic pentru a transmite cantități mari de date, dar bine dacă transmiteți sau schimbați ceva mic, cum ar fi o cheie / o parolă de criptare simetrică. Odată ce ați terminat, puteți utiliza criptarea simetrică pentru comunicații.
Una dintre cele două chei pentru criptarea asimetrică este desemnată cheia publică și cealaltă cheia privată. Cheia publică poate fi distribuită tuturor, dar cheia privată trebuie păstrată secretă.
You (has pub) Server (has prv + pub) asym-encrypt(pub, sym-key/pwd) ----> asym-decrypt(prv, encrypted-data) => sym-key/pwd
pub = cheie publică, prv = cheie privată
În orice caz, această explicație este o simplificarea a ceea ce face SSH. Alte două lucruri care merită evidențiate:
-
Diffie Hellman este algoritmul asimetric tipic de schimb de chei. Cu Diffie Hellman nu trebuie să creați o cheie simetrică . Ambele părți creează cheia simetrică împreună în timpul schimbului de chei, ceea ce reprezintă o caracteristică de securitate plăcută. Vedeți " Diffie-Hellman Key Exchange " în engleză simplă .
-
În explicația mea, am presupus că ați găsit cheia publică a serverului și că aveți încredere că este cea corectă. Dar cu adevărat ar trebui să fiți atenți la ce chei publice aveți încredere. Pentru a avea încredere într-o cheie publică, aceasta ar trebui să fie semnată digital. O cheie publică semnată este, de asemenea, cunoscută sub numele de certificat.
Sperăm că acest lucru clarifică întrebările despre parola lungă și chei publice și are suficiente informații pentru a vă putea adânci într-un mod mai semnificativ.