En top-down introduktion til SSH og hvordan det muliggør sikker datadeling

Denne artikel vil tage en højtstående og top-down tilgang til at forklare, hvordan SSH fungerer, og hvordan det bruges til sikker kommunikation med fjerncomputere.

Vi vil se på, hvordan en SSH-session faktisk er 'sikker', og hvordan computere opretter og opretter en SSH-session i første omgang. Vi vil også se på fordelene ved at bruge SSH.

Bemærk: Dette er tænkt som fremtidige noter til mig selv, men jeg håber, du også lærer noget af det!

Hvad er SSH?

SSH er en forkortelse for 'sikker shell'. Det er en protokol til deling af data mellem to computere over internettet.

En protokol er i det væsentlige et sæt regler, der definerer det sprog, som computere kan bruge til at kommunikere.

Typisk er de to involverede computere din computer ('klienten') og en fjernserver ('værten').

Hvorfor er vi ligeglade?

Sikker kommunikation mellem computere

Når to computere kommunikerer over internettet, vil vi være sikre på, at vores beskeder ikke kan opfanges og forstås af nogen, der lytter til meddelelserne.

Forestil dig at sende dine bankoplysninger over internettet for at købe noget online. Hvis dine meddelelser ikke var krypteret, kan enhver computer, der lyttede, eller enhver computer, der modtog beskederne til at videresende, muligvis se dit kontonummer og din adgangskode. Det er ikke godt!

Jeg tror, ​​dette er et vigtigt koncept at forstå for alle, der stræber efter at arbejde med webteknologier.

Sikker adgang til eksterne computere

Brug af SSH til at kontrollere godkendelse er en mere sikker måde at godkende end at bruge en adgangskode. Vi vil undersøge, hvordan dette fungerer nedenfor.

Hvordan er SSH sikker?

SSH er en sikker måde at sende kommunikation mellem to computere på.

Med 'sikker' mener jeg en måde at kode meddelelserne på en klientcomputer, så den eneste anden computer, der kan afkode meddelelserne og forstå dem, er værten. Denne kodning / dekodning kaldes kryptering, så hvad vi virkelig mener her er SSH er sikker, fordi den bruger en krypteret kommunikationskanal.

Hvordan oprettes en SSH-session?

Der er flere processer, der skal ske mellem to computere for at en SSH-session kan begynde.

  1. Først har vi brug for en måde at oprette en sikker metode til udveksling af meddelelser mellem computere. Vi er nødt til at oprette en krypteret kanal.
  2. Vi har brug for en måde at kontrollere, at de data, der er modtaget af værten, ikke er blevet manipuleret. Dette kaldes verifikation, og her verificerer vi integriteten af ​​de data, der sendes af klienten.
  3. Bekræftelse (igen). Vi har brug for en måde at kontrollere, at den computer, vi kommunikerer med, ikke er en bedrager. Dette er en anden form for verifikation, men her verificerer vi computerens identitet.

Efter disse tre trin kan vi nu kommunikere sikkert med en fjerncomputer.

Efter disse trin kan vi dele 'hemmelige' data sikkert, og vi kan også kontrollere, om en klient har tilladelse til at få adgang til en vært på en mere sikker måde end ved hjælp af en adgangskode. Denne proces kaldes godkendelse ved hjælp af asymmetrisk kryptering.

Hvert af disse afsnit nedenfor vil gå nærmere ind på disse trin.

Opsætning af en krypteret kanal

En kerne del af SSH-protokollen er, at den er sikker (den er i selv i navnet!), Hvilket betyder, at alle oplysninger, der sendes ved hjælp af SSH, er krypteret.

Hvordan krypteres disse oplysninger?

Kryptering betyder i det væsentlige bare 'jumbling up the letters' ved hjælp af nogle kloge matematik. Begge computere skal have enmåde at kryptere informationen på, så kun den anden computer kan dekryptere informationen og forstå dem.

Hvordan virker det?

Begge computere har en identisk version af en symmetrisk nøgle. Den symmetriske nøgle er bare en række bogstaver, der er gemt et eller andet sted på computerne. Computere kan bruge de symmetriske nøgler til at kryptere og også dekryptere beskeder sendt til dem.

Brug af denne symmetriske nøgletilgang kaldes symmetrisk kryptering. Den 'symmetriske' del kommer fra det faktum, at den symmetriske nøgle på hver computer er identisk. Denne tilgang fungerer rigtig godt ... men den fungerer kun, så længe ingen andre computere har adgang til den symmetriske nøgle.

Et problem

Hvordan ved begge computere, hvad den symmetriske nøgle er?

En computer kunne oprette den og sende den i en besked over internettet. Men meddelelserne ville ikke være krypteret endnu, så enhver, der opfanger meddelelserne, ville straks have den symmetriske nøgle ... og kan dekryptere al fremtidig kommunikation. Det er slemt!

Dette kaldes undertiden 'key-exchange' problemet. Det er klart, at vi skal tilføje endnu et trin i processen, før vi kan bruge symmetriske nøgler.

En løsning

En løsning på problemet med 'nøgleudveksling' ovenfor er, at begge computere deler offentlig information med hinanden (det er 'offentligt', hvilket betyder, at de ikke har noget imod, hvis nogen opfanger det) og kombinerer dette med nogle oplysninger på deres egen computer for at Opret uafhængigt identiske symmetriske nøgler

Disse symmetriske nøgler kan derefter bruges til symmetrisk kryptering som beskrevet ovenfor.

Sådan fungerer dette

Begge computere har hver deres private nøgle og offentlige nøgle. Sammen danner de et nøglepar . Computerne deler deres offentlige nøgler med hinanden over internettet. Så på dette tidspunkt i processen kender hver computer

  • sin egen private nøgle,
  • sin egen offentlige nøgle,
  • og den anden computers offentlige nøgle.

Generering af symmetriske nøgler

Begge computere bruger derefter disse 3 stykker information til uafhængigt at generere en identisk symmetrisk nøgle.

Hver computer bruger en matematisk algoritme, der bruger de 3 indgange, der er nævnt ovenfor. Denne algoritme er en del af Diffie-Hellman-nøgleudvekslingsalgoritmen. Algoritmen, der udføres på hver computer, er sådan noget:

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

Den vigtige ting at tage væk her er, at computere kun har delt offentlig information over internettet, men stadig har været i stand til at oprette symmetriske nøgler!

Metoden med at bruge nøglepar og dele offentlig information til at generere identiske symmetriske nøgler kaldes asymmetrisk kryptering . Det kaldes 'asymmetrisk', fordi begge computere starter med deres egne forskellige nøglepar.

Indtil videre: Vi har set, hvordan man bruger asymmetrisk kryptering til uafhængigt at generere identiske symmetriske nøgler på begge computere på en sikker måde (løse nøgleudvekslingsproblemet) og derefter sikkert udveksle information mellem computere ved hjælp af symmetriske nøgler til kryptering og dekryptering.

Verifikation

Så vi kan kommunikere sikkert. Men den næste del af processen med at oprette en SSH-session er at kontrollere, at dataene ikke er blevet manipuleret med, da de er blevet transmitteret, og at den anden computer faktisk er den, den er, siger, at de er.

Hvorfor har vi brug for dette?

En anden computer kunne efterligne en af ​​computerne og starte nøgleudvekslingen ovenfor. Så hvordan finder vi sikkert ud af, at meddelelsen faktisk kommer fra den anden computer og ikke fra en bedrager?

Hashing

Vi er nødt til at bruge en hash- funktion. Dette er bare en matematisk funktion, der tager input og producerer en streng af en fast størrelse.

Det vigtige ved denne funktion er, at det praktisk talt er umuligt at finde ud af, hvad inputene bare brugte udgangene.

Når en klient og en vært har genereret deres symmetriske nøgler, bruger klienten en hashing-funktion til at generere en HMAC. Dette står bare for "hash-baseret meddelelsesgodkendelseskode". Dette er bare endnu en række tegn / tal. Klienten sender denne HMAC til serveren til verifikation.

Ingredienserne til hashing-funktionen er

  • Den symmetriske nøgle på klienten
  • Pakkesekvensnummeret (hver meddelelse, der sendes, er indeholdt i en 'pakke' med information)
  • Meddelelsen (krypteret !!!) besked

Et eksempel med falske data:

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

Hvordan bruger værten disse oplysninger?

Når værten modtager HMAC, kan den bruge den samme hash-funktion med disse tre ingredienser:

  • sin egen kopi af den (identiske!) symmetriske nøgle,
  • pakkesekvensnummeret,
  • og den krypterede besked.

Hvis den hashværdi, den beregner, er den samme som den HMAC, den modtog fra klienten, har vi bekræftet, at den tilsluttende computer er den samme som den computer, der har den symmetriske nøgle.

Husk, at kun værten og klienten ved, hvad den symmetriske nøgle er, og ingen andre computere gør!

Så her betyder det ikke noget, at værten ikke kender det dekodede indhold af den krypterede besked - værten har stadig verificeret identiteten på den forbindende computer!

Skønheden ved denne tilgang er, at vi ikke bare har verificeret klientens identitet og sørget for, at data ikke er blevet manipuleret, men vi har gjort det sikkert ( uden at dele nogen private oplysninger) .

Resumé: vi brugte en hash-funktion på klienten og derefter på værten til at verificere dataintegritet og verificere klientens identitet.

Godkendelse

Den sidste del af sikker kommunikation med fjerncomputere er:

selvom vi har genereret symmetriske nøgler med den tilsluttende computer og

selvom vi bruger de symmetriske taster til at kommunikere sikkert og

selvom forbindelsescomputeren virkelig er den klient, vi forventer og ikke bedrager,

så har vi oprettet en SSH-session ... men har den tilsluttende computer tilladelse til at få adgang til værtsindholdet?

Dette kaldes 'godkendelse': handlingen med at kontrollere tilladelser og adgangsrettigheder.

Der er to måder at kontrollere godkendelse på:

1 — Brug af en adgangskode

Klienten kan sende værten en (krypteret) besked indeholdende en adgangskode. Værten kan dekryptere beskeden og kontrollere adgangskoden i en database for at kontrollere, om klienten har tilladelse til at få adgang til den angivne 'bruger' (computerens område). Færdigt arbejde.

2 - Brug af nøglepar og asymmetrisk kryptering

Tidligere så vi, hvordan asymmetrisk kryptering kan bruge to nøglepar til sikkert at generere identiske symmetriske nøgler på både klienten og værten. Ved hjælp af lignende ideer kan klienten logge ind uden en adgangskode .

Dette er en meget høj tilgang til, hvordan processen fungerer:

Sætte op:

På klienten skal du gå til terminalen og bruge en kommando til at generere en offentlig nøgle og en privat nøgle (under overfladen bruger den 'RSA', en matematisk algoritme) på klienten. Kopier den offentlige nøgle (IKKE den private nøgle!) Til udklipsholderen.

Jeg gentager: Kopier den OFFENTLIGE nøgle ( IKKE DEN PRIVATE NØGLE!) Til udklipsholderen.

Brug derefter en adgangskode i terminalen på klienten til at logge på værten eksternt. Indsæt klientens offentlige nøgle i den relevante mappe på værten sammen med andre offentlige nøgler.

Nu har værten gjort det

  • Det er eget offentlige / private nøglepar
  • Kundens offentlige nøgle

Ser man på afsnittet ovenfor om nøgleudvekslingsalgoritmen, kan du se, hvordan værten har alle de ingredienser, den har brug for til at generere en symmetrisk nøgle!

Udfordrende:

Når klienten ønsker at oprette forbindelse, kan værten bruge en 'udfordring' ved at sende en besked, der er krypteret (med værtens symmetriske nøgle) og sige: 'Jeg giver kun adgang til, hvis du kan dekryptere denne besked!'.

Kunden har derefter

  • sin egen offentlige og private nøgle
  • værtens offentlige nøgle
  • den krypterede besked

Så nu har klienten alt, hvad der er nødvendigt for at generere en (identisk) symmetrisk nøgle ... og dekryptere beskeden! Det kan dekryptere beskeden og sende bekræftelse, der er 'lykkedes' i udfordringen tilbage til værten.

Værten er tilfreds med, at den tilsluttende klient er autoriseret og giver tilladelse til adgang.

Hvorfor gider du bruge den anden tilgang?

Dette ses som mere sikkert end blot at bruge en adgangskode, fordi en bot kan bruge en 'brute force'-tilgang til at fortsætte med at bruge mange kombinationer til at gætte din adgangskode, men de har ikke de rigtige nøglepar til den anden tilgang til at arbejde.

Yderligere læsning:

SSH Tutorial for begyndere - Hvordan fungerer SSH

SSH, eller Secure Shell, er en fjernadministrationsprotokol, der giver brugerne mulighed for at kontrollere og ændre deres fjernservere ... www.hostinger.com

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

Konklusion

SSH er et vigtigt værktøj, der bruges til fjernstyring af andre computere.

SSH er sikkert, fordi begge computere kan kryptere og dekryptere beskeder ved hjælp af identiske symmetriske nøgler (kendt som 'symmetrisk kryptering').

De vigtigste trin til at starte en SSH-session er:

  1. Opsætning af en krypteret kanal. Brug af asymmetrisk kryptering til at løse nøgleudvekslingsproblemet, der uafhængigt genererer identiske symmetriske nøgler på begge computere uden at dele nogen private oplysninger.
  2. Verifikation: Brug hashing på begge computere til at verificere identiteten på den tilsluttende computer
  3. Bekræftelse (igen). Brug af hashing på begge computere til at verificere dataintegritet er ikke blevet kompromitteret under transmission.

Vi kan derefter bruge SSH til sikkert at sende data mellem computere. En vigtig anvendelse af dette er til godkendelse. Selvom du kan bruge en adgangskode, betragtes brugen af ​​asymmetrisk kryptering til at kontrollere den forbindende 'klient' har tilladelse til at få adgang til 'værten' som mere sikker.

Hvis du er interesseret i at udjævne din SSH, anbefaler jeg dette kursus seriøst. Jeg fandt det virkelig nyttigt at skærpe nogle af mine færdigheder! ( ansvarsfraskrivelse: Jeg har ingen links eller bånd til forfatteren eller platformen. Jeg tog kurset for et stykke tid siden og fandt det rigtig godt!)

Tak for læsningen!