Kryptografie (12) : Secure Shell (SSH)

in de-stem •  7 months ago 

Heutzutage kommt es immer wieder vor, dass man nicht an seinem lokalen Computer arbeitet, sondern auf einem entfernt stehenden Computer Programme laufen lässt. Das kann zum einen daran liegen, dass man die betreffenden Programme nur auf dem entfernten Rechner zur Verfügung hat. Oder der entfernte Computer ist leistungsfähiger als der eigene Computer und soll deshalb benutzt werden. Es gibt mit dem Protokoll telnet die Möglichkeit sich an einem entfernten Computer anzumelden, doch die Daten werden hier unverschlüsselt übertragen. Dies soll sich mit SSH (secure shell) ändern.

Mit SSH findet eine Authentisierung durch ein asymmetrisches Verschlüsselungsverfahren statt, und die anschließende Kommunikation wird mit einem Sitzungsschlüssel (session key) symmetrisch verschlüsselt.

Um SSH nutzen zu können, muss eine entsprechende Software auf dem Server (dem entfernten Rechner) und dem Client (lokaler Rechner) installiert werden. Hilfsprogramme wie z.B. eine GUI sind dabei optional. Im Normalfall wird mithilfe eines Terminals gearbeitet, oder auch als Kommandozeile in Windows bekannt. Eine Anwendung die das SSH-Protokoll verwendet heißt OpenSSH [1].

Bevor eine Verbindung aufgebaut wird, einigen sich der Server und der Client auf Verschlüsselungs-Algorithmen, Hash-Algorithmen und passende Schlüsselaustauschverfahren. Hier kann das Verfahren Diffie-Hellman benutzt werden, um ein gemeinsames Geheimnis g auszuhandeln.
Aus diesem gemeinsamen Geheimnis werden dann die eigentlichen Sitzungsschlüssel für die Kommunikation abgeleitet.
Zunächst müssen sich der Server und der Client gegenseitig authentisieren. Der Server macht den ersten Schritt. Beide Seiten berechnen eine SSH-Session-ID aus dem gemeinsamen Geheimnis g, indem ein Hashwert Hash(g) ermittelt wird. Der Server signiert diesen Hashwert mit seinem Private-Key (digitale Signatur) und sendet das Ergebnis an den Client. Der Client überprüft die Signatur mithilfe des Public-Key des Servers. Somit hat der Client den Server authentisiert.

Nun authentisiert sich der Client gegenüber dem Server. Normalerweise ist eine Passworteingabe der Regelfall. Dieses Passwort wird mit dem Sitzungsschlüssel verschlüsselt übertragen.
Man kann SSH auch so einrichten, dass zwei Sitzungsschlüssel erzeugt werden. Einer für die Übertragung von Client zu Server und ein weiterer für die Übertragung von Server zu Client. Falls also ein Angreifer erfolgreich einen Sitzungsschlüssel abgefangen haben sollte, dann kann er nur eine Seite der Kommunikation mitlesen. Um diesen Fall zu minimieren werden nach einer bestimmten Zeit neue Sitzungsschlüssel ausgehandelt.

Ein "Nachteil" an SSH ist der Aufwand der Einrichtung. Bei einem Firmennetz mit vielen Rechnern muss für jeden Rechner ein Schlüsselpaar generiert werden. Außerdem muss irgendwie der Public-Key des Servers auf diesen Rechnern verteilt werden. Am sichersten wäre es auf eine "altmodische" Art und Weise, indem der Public-Key auf ein USB-Stick kopiert und manuell auf jeden Rechner aufgespielt wird. Da es sich um einen einmaligen Vorgang handelt, ist der Aufwand durch den Gewinn an Sicherheit gerechtfertigt.

Die SSH-Architektur anhand mehrerer Clients

ssh.png
Bild : "SSH architecture" [2], p. 2

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @ozelot47! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You distributed more than 500 upvotes. Your next target is to reach 600 upvotes.
You received more than 50 as payout for your posts. Your next target is to reach a total payout of 100

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

You can upvote this notification to help all Steem users. Learn how here!

Alles richtig gemacht, weiter viel Erfolg...

Du hast ein kleines Upvote vom German-Steem-Bootcamp erhalten.

Du findest uns im Discord unter https://discord.gg/HVh2X9B

Aktueller Kurator ist @don-thomas

Du möchtest keine Upvotes (mehr) von uns erhalten? Eine kurze Mittelung unter diesen Kommentar reicht.
Dem Upvote von uns folgt ein Trail der weitere Upvotes von unseren Unterstützern beinhaltet. Hier kannst du sehen wer diese sind und auch erfahren wie auch du uns und somit die deutschsprachige Community unterstützen kannst.