O introducere de sus în jos a SSH și modul în care permite partajarea sigură a datelor

Acest articol va adopta o abordare la nivel înalt și de sus în jos pentru a explica modul în care funcționează SSH și modul în care este utilizat pentru comunicarea în siguranță cu computerele la distanță.

Vom analiza modul în care o sesiune SSH este de fapt „sigură” și modul în care computerele stabilesc și configurează o sesiune SSH în primul rând. Vom analiza, de asemenea, beneficiile utilizării SSH.

Notă: Aceasta este menită ca viitoare note pentru mine, dar sper că veți învăța și voi ceva din asta!

Ce este SSH?

SSH este prescurtarea de la „shell securizat”. Este un protocol pentru partajarea datelor între două computere pe internet.

Un protocol este în esență un set de reguli care definesc limbajul pe care computerele îl pot folosi pentru a comunica.

De obicei, cele două computere implicate sunt computerul dvs. („clientul”) și un server la distanță („gazda”).

De ce ne pasă?

Comunicații sigure între computere

Ori de câte ori două computere comunică prin internet, vrem să fim siguri că mesajele noastre nu pot fi interceptate și înțelese de oricine le ascultă.

Imaginați-vă că vă trimiteți datele bancare pe internet pentru a cumpăra ceva online. Dacă mesajele dvs. nu au fost criptate, atunci orice computer care asculta sau orice computer care a primit mesajele pentru a le transmite poate să vă vadă numărul de cont și parola. Nu este bine!

Cred că acesta este un concept important de înțeles pentru oricine aspiră să lucreze cu tehnologii web.

Acces securizat la computerele la distanță

Utilizarea SSH pentru a verifica autentificarea este o modalitate mai sigură de autentificare decât utilizarea unei parole. Vom explora cum funcționează mai jos.

Cum este sigur SSH?

SSH este un mod sigur de a trimite comunicații între două computere.

Prin „securizat”, mă refer la o modalitate de codificare a mesajelor de pe un computer client, astfel încât singurul alt computer care poate decoda mesajele și le poate înțelege este gazda. Această codificare / decodificare se numește criptare, deci ceea ce vrem să spunem aici este SSH este sigur, deoarece folosește un canal de comunicație criptat.

Cum este stabilită o sesiune SSH?

Există mai multe procese care trebuie să se întâmple între două computere pentru a începe o sesiune SSH.

  1. Mai întâi avem nevoie de o modalitate de configurare a unei metode sigure de schimb de mesaje între computere. Trebuie să configurăm un canal criptat.
  2. Avem nevoie de o modalitate de a verifica dacă datele primite de gazdă nu au fost modificate. Aceasta se numește verificare și aici verificăm integritatea datelor trimise de client.
  3. Verificare (din nou). Avem nevoie de un mod de a verifica dacă computerul cu care comunicăm nu este un impostor. Aceasta este o altă formă de verificare, dar aici verificăm identitatea computerului.

După acești trei pași, putem comunica acum în siguranță cu un computer la distanță.

După acești pași, putem partaja în siguranță datele „secrete” și putem verifica, de asemenea, dacă un client are permisiunea de a accesa o gazdă într-un mod mai sigur decât folosind o parolă. Acest proces se numește autentificare utilizând criptare asimetrică.

Fiecare dintre aceste secțiuni de mai jos va intra în mai multe detalii despre acești pași.

Configurarea unui canal criptat

O parte esențială a protocolului SSH este că este sigur (este chiar și în nume!), Ceea ce înseamnă că toate informațiile trimise folosind SSH sunt criptate.

Cum se criptează aceste informații?

Criptarea înseamnă, în esență, doar „amestecarea literelor” folosind câteva matematici inteligente. Ambele computere trebuie să aibă unmod de criptare a informațiilor, astfel încât numai celălalt computer să poată decripta informațiile și să le înțeleagă.

Cum funcționează asta?

Ambele computere au o versiune identică a unei chei simetrice. Cheia simetrică este doar un șir de litere stocate undeva pe computere. Computerele pot utiliza cheile simetrice pentru a cripta și, de asemenea, pentru a decripta mesajele trimise către acestea.

Utilizarea acestei abordări cu cheie simetrică se numește criptare simetrică. Partea „simetrică” provine din faptul că cheia simetrică de pe fiecare computer este identică. Această abordare funcționează foarte bine ... dar funcționează numai atâta timp cât niciun alt computer nu are acces la cheia simetrică.

O problemă

De unde știu ambele computere care este cheia simetrică?

Un computer l-ar putea crea și trimite într-un mesaj prin internet. Dar mesajele nu ar fi încă criptate, astfel încât oricine ar intercepta mesajele ar avea instantaneu cheia simetrică ... și poate decripta toate comunicațiile viitoare. Asta e rău!

Aceasta se numește uneori problema „schimbului de chei”. Este clar că trebuie să adăugăm un alt pas în proces înainte de a putea folosi chei simetrice.

O solutie

O soluție la problema „schimbului de chei” de mai sus este aceea că ambele computere împărtășesc unele informații publice unele cu altele (este „public”, adică nu le deranjează dacă cineva le interceptează) și le combină cu unele informații de pe propriul computer pentru creați independent chei simetrice identice .

Aceste chei simetrice pot fi apoi utilizate în criptare simetrică în modul descris mai sus.

Cum funcționează acest lucru

Ambele computere au fiecare o cheie privată și o cheie publică. Împreună formează o pereche de chei . Computerele își partajează cheile publice între ele prin internet. Deci, în acest moment al procesului, fiecare computer știe

  • propria cheie privată,
  • propria sa cheie publică,
  • și cheia publică a celuilalt computer.

Generarea cheilor simetrice

Ambele computere folosesc apoi aceste 3 informații pentru a genera independent o cheie simetrică identică .

Fiecare computer folosește un algoritm matematic care folosește cele 3 intrări menționate mai sus. Acest algoritm face parte din algoritmul de schimb de chei Diffie-Hellman. Algoritmul care va fi executat pe fiecare computer este cam așa:

Hostpub_2 = other computer's public keypub_1 = my public keypri_1 = my private key
f(pub_2, pub_1, pri_1) = abcdefg // Symmetric Key
Client:f(pub_1, pub_2, pri_2) = abcdefg // Symmetric Key

Cel mai important lucru de luat aici este că computerele au partajat doar informații publice pe internet, dar au reușit să creeze chei simetrice!

Abordarea utilizării perechilor de chei și a partajării informațiilor publice pentru a genera chei simetrice identice se numește criptare asimetrică . Se numește „asimetric”, deoarece ambele computere pornesc cu propriile perechi de chei diferite.

Până acum: am văzut cum să folosim criptarea asimetrică pentru a genera în mod independent chei simetrice identice pe ambele computere într-un mod sigur (rezolvând problema schimbului de chei) și apoi să schimbăm în siguranță informații între calculatoare folosind chei simetrice pentru criptare și decriptare.

Verificare

Deci putem comunica în siguranță. Dar următoarea parte a procesului de stabilire a unei sesiuni SSH este de a verifica dacă datele nu au fost modificate în timp ce au fost transmise și că celălalt computer este de fapt cine este.

De ce avem nevoie de asta?

Un alt computer ar putea identifica unul dintre computere și ar putea iniția schimbul de chei de mai sus. Deci, cum ne dăm seama în siguranță că mesajul provine de fapt de pe celălalt computer și nu de pe un impostor?

Hashing

Trebuie să folosim o funcție hash . Aceasta este doar o funcție matematică care ia intrări și produce un șir de dimensiuni fixe.

Caracteristica importantă a acestei funcții este că este practic imposibil să se stabilească ceea ce intrările au fost doar folosind ieșirile.

După ce un client și o gazdă și-au generat cheile simetrice, clientul va utiliza o funcție de hash pentru a genera un HMAC. Aceasta înseamnă doar „cod de autentificare a mesajului bazat pe hash”. Acesta este doar un alt șir de caractere / numere. Clientul va trimite acest HMAC la server pentru verificare.

Ingredientele funcției de hash sunt

  • Cheia simetrică a clientului
  • Numărul secvenței pachetului (fiecare mesaj trimis este conținut într-un „pachet” de informații)
  • Conținutul mesajului (criptat !!!)

Un exemplu cu date false:

symm_key = abcdefgpkge_no = 13encr_message = encrypted_password
Hash(symm_key, pkge_no, encr_message) = *HMAC* // Hashed value

Cum folosește gazda aceste informații?

Când gazda primește HMAC, poate utiliza aceeași funcție hash cu aceste trei ingrediente:

  • propria copie a cheii simetrice (identice!),
  • numărul de ordine al pachetului,
  • și mesajul criptat.

Dacă valoarea hash pe care o calculează este aceeași cu HMAC pe care a primit-o de la client, atunci am verificat dacă computerul de conectare este același cu computerul care are cheia simetrică.

Amintiți-vă că numai gazda și clientul știu care este cheia simetrică și nu fac alte computere!

Deci, aici nu contează că gazda nu cunoaște conținutul decodat al mesajului criptat - gazda a verificat în continuare identitatea computerului de conectare!

Frumusețea acestei abordări este că nu am verificat doar identitatea clientului și ne-am asigurat că datele nu au fost modificate, ci am făcut-o în siguranță ( fără a împărtăși informații private) .

Rezumat: am folosit o funcție hash pe client și apoi pe gazdă pentru a verifica integritatea datelor și a verifica identitatea clientului.

Autentificare

Ultima parte a comunicării sigure cu computerele la distanță este:

chiar dacă am generat chei simetrice cu computerul de conectare și

chiar dacă folosim cheile simetrice pentru a comunica în siguranță și

chiar dacă computerul de conectare este cu adevărat clientul pe care îl așteptăm și nu un impostor,

apoi am configurat o sesiune SSH ... dar are computerul de conectare permisiunea de a accesa conținutul gazdei?

Aceasta se numește „autentificare”: actul de verificare a permisiunilor și drepturilor de acces.

Există două moduri de verificare a autentificării:

1 — Utilizarea unei parole

Clientul poate trimite gazdei un mesaj (criptat) care conține o parolă. Gazda poate decripta mesajul și poate verifica parola într-o bază de date pentru a verifica dacă clientul are permisiunea de a accesa „utilizatorul” specificat (zona computerului). Treaba făcuta.

2 - Utilizarea perechilor de chei și criptare asimetrică

Mai devreme, am văzut cum criptarea asimetrică poate folosi două perechi de chei pentru a genera în siguranță chei simetrice identice atât pe client, cât și pe gazdă. Folosind idei similare, clientul se poate conecta fără o parolă .

Aceasta este o abordare la nivel înalt a modului în care funcționează procesul:

Configurare:

Pe client, mergeți la terminal și utilizați o comandă pentru a genera o cheie publică și o cheie privată (sub suprafață utilizează „RSA”, un algoritm matematic) pe client. Copiați cheia publică (NU cheia privată!) În clipboard.

Repet: Copiază tasta PUBLIC ( NU CHEIA PRIVATĂ !) În clipboard.

Apoi, în terminalul de pe client, utilizați o parolă pentru a vă conecta de la distanță la gazdă. Lipiți cheia publică a clientului în folderul corespunzător de pe gazdă alături de orice alte chei publice.

Acum, gazda are

  • Este propria pereche de chei publice / private
  • Cheia publică a clientului

Privind secțiunea de mai sus despre algoritmul de schimb de chei, puteți vedea cum gazda are toate ingredientele de care are nevoie pentru a genera o cheie simetrică!

Provocator:

Când clientul dorește să se conecteze, gazda poate folosi o „provocare” prin trimiterea unui mesaj care a fost criptat (cu cheia simetrică a gazdei) și spune: „Vă voi autoriza accesul doar dacă puteți decripta acest mesaj!”.

Clientul are atunci

  • propria sa cheie publică și privată
  • cheia publică a gazdei
  • mesajul criptat

Deci, acum clientul are tot ce este necesar pentru a genera o cheie simetrică (identică) ... și a decripta mesajul! Poate decripta mesajul și trimite confirmarea că „a reușit” în provocarea înapoi către gazdă.

Gazda este mulțumită că clientul de conectare este autorizat și acordă permisiunea de acces.

De ce să te chinui să folosești a doua abordare?

Acest lucru este văzut ca fiind mai sigur decât simpla utilizare a unei parole, deoarece un bot poate utiliza o abordare „forță brută” pentru a continua să folosească o mulțime de combinații pentru a vă ghici parola, dar nu vor avea perechi de chei potrivite pentru ca a doua abordare să funcționeze.

Lecturi suplimentare:

Tutorial SSH pentru începători - Cum funcționează SSH

SSH, sau Secure Shell, este un protocol de administrare la distanță care permite utilizatorilor să-și controleze și să modifice serverele la distanță ... www.hostinger.com

//www.udemy.com/the-complete-junior-to-senior-web-developer-roadmap/

Concluzie

SSH este un instrument important utilizat pentru a controla de la distanță alte computere.

SSH este sigur, deoarece ambele computere pot cripta și decripta mesajul folosind chei simetrice identice (cunoscute sub numele de „criptare simetrică”).

Pașii principali pentru inițierea unei sesiuni SSH sunt:

  1. Configurarea unui canal criptat. Utilizarea criptării asimetrice pentru a rezolva problema schimbului de chei care generează independent chei simetrice identice pe ambele computere fără a partaja nicio informație privată.
  2. Verificare: Folosind hashing pe ambele computere pentru a verifica identitatea computerului conectat
  3. Verificare (din nou). Utilizarea hashing-ului pe ambele computere pentru a verifica integritatea datelor nu a fost compromisă în transmisie.

Putem apoi folosi SSH pentru a trimite date în siguranță între computere. Un caz de utilizare important al acestuia este pentru autentificare. Deși puteți utiliza o parolă, utilizarea criptării asimetrice pentru a verifica dacă „clientul” de conectare are permisiunea de a accesa „gazda” este văzută ca fiind mai sigură.

Dacă sunteți interesat să vă ridicați nivelul SSH, vă recomand cu seriozitate acest curs. Mi s-a părut cu adevărat util să-mi perfecționez unele dintre abilitățile mele! ( responsabilitate: nu am legături sau legături cu autorul sau platforma. Am urmat cursul cu ceva timp în urmă și mi s-a părut foarte bun!)

Mulțumesc pentru lectură!