Foliensatz 9 Kryptographische Grundlagen und Anwendungen (GPG, OpenSSH)

Inhalt

• Kryptographische Grundlagen • Schlüsseltauschprotokolle • Symmetrische Verschlüsselung • Asymmetrische Verschlüsselung • Kryptographische Hashfunktionen

• GNU Privacy Guard (GPG) • OpenSSH

Kryptographische Grundlagen

Wir werden uns jetzt kurz mit den Grundlagen zu Schlüsselaustauschprotokollen, symmetrischer Verschlüsselung, asymmetrischer Verschlüsselung und kryptographischen Hashfunktionen beschäftigen und diese dann in Anwendungen betrachten.

Die Sicherheit dieser Verfahren liegt unter anderem in mathematischen Problemen, die nur mit extrem viel Zeitaufwand zu lösen sind.

Mit Hilfe einer Kombination dieser Verfahren kann man Daten zwischen zwei Personen oder Programmen sicher austauschen.

Z.B. wird eine sichere Verbindung zu einem Server im Groben so aufgebaut:

• Der Client authentifiziert den Server anhand von Signaturen (asymmetrischen Verschlüsselung). • Der Client und der Server verwenden ein Schlüsseltauschprotokoll um einen Schlüssel zu generieren. • Der Schlüssel wird für die Verschlüsselung der weiteren Kommunikation mittels symmetrischer Verfahren eingesetzt.

Schlüsselaustauschprotokoll

• Bevor zwei Parteien ein symmetrisches Verschlüsselungsverfahren verwenden können, müssen sie einen gemeinsamen Schlüssel haben.

• Ein Schlüsselaustauschprotokoll beschreibt, wie über ein unsicheres Medium (z.B. das Internet) ein Schlüssel ausgehandelt werden kann, ohne dass lauschende Dritte den Schlüssel bekommen.

• Ein bekanntes Verfahren ist der Diffie-Hellman-Schlüsseltausch.

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 1 von 11 Diffie-Hellman-Schlüsseltausch

• Alice und Bob einigen sich auf eine Primzahl p und einen Erzeuger g der zyklischen Gruppe der Ordnung p. Sowohl p als auch g sind öffentliche Daten, d.h. ein Angreifer kann diese Daten wissen.

• Alice und Bob wählen zufällig private Zahlen a und b, die kleiner sind als p.

• Alice berechnet nun A = g^a mod p und Bob B = g^b mod p. Anschließend werden A und B ausgetauscht (sind wieder öffentliche Daten).

• Alice kann nun K1 = B^a mod p berechnen und Bob K2 = A^b mod p.

Auf Grund von K1 = B^a mod p = g^b^a mod p = g^a^b mod p = A^b mod p = K2 haben Alice und Bob den gleichen Wert berechnet, der nun als Schlüssel für ein symmetrisches Verfahren verwendet werden kann.

Sicherheit des Diffie-Hellman-Schlüsseltauschs

• Die Sicherheit des Verfahrens basiert auf der Annahme, dass es sehr schwierig ist, bei Bekanntsein von g, p, A = g^a mod p und B = g^b mod p den Wert K = g^a^b mod p zu berechnen (ohne zu wissen, was a und b ist).

• Eng verwandt ist das Diskrete-Logarithmus-Problem: Ist g, p und A = g^a mod p bekannt, wie kann a berechnet werden?

Weiters muss man sicherstellen, dass ein Angreifer (Mallory) die ausgetauschten Daten nicht modifizieren kann. Könnte er das, so wäre eine Man-in-the-Middle-Attacke möglich, bei der im Prinzip zweimal ein Schlüsseltausch durchgeführt wird: einmal zwischen Alice und Mallory und einmal zwischen Mallory und Bob.

Symmetrische Verschlüsselung

• Ein symmetrisches Verschlüsselungsverfahren benötigt einen Schlüssel, der beiden Parteien bekannt sein muss. Dies ist auch der große Nachteil dabei.

• Der Vorteil von symmetrischen Verfahren ist hingegen die höhere Geschwindigkeit, mit der Daten - und entschlüsselt werden können.

• Symmetrische Verfahren werden schon seit sehr langer Zeit eingesetzt. Ein bekanntes, mehr als 2000 Jahre altes, aber sehr unsicheres, Verfahren ist die Cäsar-Verschlüsselung (a → , b → d, c → e, …).

• Symmetrischen Verfahren kann man in Blockchiffren und Stromchiffren unterteilen. Bei

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 2 von 11 Blockchiffren werden Blöcke fixer Länger wieder auf Blöcke fixer Länge abgebildet und Blöcke durch verschiedene Betriebsmodi miteinander verbunden. Stromchiffren verknüpfen Zeichen des Klartextes mit Zeichen eines Schlüsselstroms, brauchen kein Padding wie Blockchiffren und sind (bei längeren Klartexten) schneller, weil der Schlüsselstrom vorab berechnet werden kann.

• Bekannte symmetrische Verfahren sind RC4 , DES und AES. Sowohl RC4 als auch DES sollten, wenn möglich, nicht mehr eingesetzt werden (auf Grund von veröffentlichten Angriffen bzw. weil nur kurze Schlüssellängen möglich sind).

Asymmetrische Verschlüsselung

• Unter asymmetrischer Verschlüsselung bzw. Public-Key-Verschlüsselung versteht man Verfahren, die auf zwei Schlüsseln aufbauen: Einem öffentlichen Schlüssel und einem privaten Schlüssel.

Der öffentliche Schlüssel kann (soll) beliebig verteilt werden, der private Schlüssel muss aber sicher verwahrt werden.

• Asymmetrische Verfahren dienen sowohl zum Verschlüsseln (Geheimhaltung) als auch zum Signieren (Authentizität):

• Durch die Verschlüsselung mittels des öffentlichen Schlüssels können Daten geheim gehalten werden; nur der Inhaber des privaten Schlüssels kann die Daten entschlüsseln.

• Mit dem privaten Schlüssel erstellte Signaturen können von jedem, der den öffentlichen Schlüssel kennt, verifiziert werden. Damit wird sicher gestellt, dass die Daten tatsächlich vom Inhaber des privaten Schlüssels stammen.

• Bekannte asymmetrische Verfahren sind RSA, DSA und ECDSA.

RSA

• Das RSA-Verfahren (benannt nach Ronald Rivest, Adi Shamir und Leonard Adleman) wurde schon 1977 veröffentlicht und war das erste veröffentlichte asymmetrische Verfahren. Es wird sowohl zum Verschlüsseln als auch zum Signieren verwendet.

• Beim Verschlüsseln werden die Daten üblicherweise nicht direkt mit RSA verschlüsselt, sondern es wird ein symmetrisches Verfahren verwendet; nur der zugehörige Schlüssel wird mit RSA verschlüsselt. So eine Kombination wird als Hybridverfahren bezeichnet.

Genauso wird beim Signieren nur ein Hashwert der Daten signiert und nicht die Daten selbst.

RSA Schlüsselerzeugung und Verwendung

• Erzeugung des Schlüsselpaares:

• Wähle zwei zufällige Primzahlen p und q gleicher Größenordnung. • Berechne N = p * q und die Eulersche φ-Funktion von N, φ(N) = (p-1) * (q-1). • Wähle eine zu φ(N) teilerfremde Zahl e und berechne daraus d mittels e * d = 1 mod φ(N).

Das Zahlenpaar (e, N) ist der öffentliche Schlüssel und (d, N) der private Schlüssel.

• Verwendung:

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 3 von 11 • Verschlüsselung von m: c = m^e mod N, wobei c der Geheimtext ist. • Entschlüsselung von c: m = c^d mod N

Wichtig: Es können immer nur Werte m verschlüsselt werden, die kleiner als N sind!

Signieren entspricht dem zweiten Schritt und Verifizieren der Signatur dem ersten.

Der Beweis benötigt unter anderem den Satz von Euler-Fermat.

Sicherheit von RSA

• Die Sicherheit von RSA basiert auf zwei Annahmen:

• Die Schwierigkeit beim Entschlüsseln eines Geheimtextes besteht im Ziehen der e-ten Wurzel modulo N.

• Die Schwierigkeit beim Finden des privaten Schlüssels besteht beim Berechnen der Eulerschen φ-Funktion von N (ohne Kenntnis der Faktoren p und q).

• In der Praxis muss noch auf mehr aufgepasst werden, damit RSA sicher ist. Zum Beispiel müssen p und q zusätzliche Auflagen erfüllen und dem Klartext muss ein Padding hinzugefügt werden, um bestimmte Angriffe zu verhindern.

Daher sollte man eine geteste und breit eingesetzte Bibliothek verwenden und RSA nicht selbst implementieren.

Kryptographische Hashfunktionen

• Eine Hashfunktion ist eine Funktion, die eine Zeichenfolge beliebiger Länge auf eine Zeichenfolge fixer Länge abbildet. Dabei kann es zu Kollisionen kommen, wenn zwei unterschiedliche Datensätze den selben Hashwert erzeugen.

• Kryptographische Hashfunktionen sind Hashfunktionen, die zusätzliche Merkmale erfüllen, z.B.:

• Für einen gegebenen Hashwert soll es schwer sein, die zugehörigen Daten zu finden (Stichwort Einwegfunktionen). • Hat man Daten und den zugehörigen Hashwert, so soll es schwer sein, andere Daten zu finden, die den gleichen Hashwert erzeugen. • Es soll allgemein schwer sein, verschiedene Datensätze zu finden, die den selben Hashwert erzeugen (Kollisionsresistenz).

Kryptographische Hashfunktionen - Beispiele

• Eine der bekanntesten kryptographischen Hashfunktionen ist MD5 (128 Bit), aber diese sollte nicht mehr verwendet werden, nachdem mittlerweile schon einige Angriffe darauf bekannt sind.

• Eine Familie von kryptographischen Hashfunktionen ist unter dem Acronym SHA (Secure Hash Algorithm) bekannt. Diese Familie umfasst SHA-1 (160 Bit; mittlerweile auch schon sehr unsicher!), SHA-2 (mit Längen von 224, 256, 384 und 512 Bit) sowie seit Sommer 2015 SHA-3.

• Unter gibt es für die genannten Hashfunktionen die Befehle md5sum, sha1sum, sha256sum, sha224sum, sha384sum und sha512sum.

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 4 von 11 Gnu Privacy Guard

• Der Gnu Privacy Guard (GnuPG or GPG) ist eine freie Implementierung des OpenPGP-Standard (RFC 4880). Er wird zum Verschlüsseln und/oder Signieren von Daten verwendet.

• GPG unterstützt sowohl symmetrische Verschlüsselungsverfahren als auch asymmetrische Verfahren.

• Symmetrische Verfahren sind, wie schon erwähnt, schneller beim Ver- und Entschlüsseln und eignen sich z.B. zum Verschlüsseln von persönlichen Daten, da man nur selbst den Schlüssel (z.B. eine Passphrase) wissen muss.

• GPG in Kombination mit asymmetrischen Verfahren wird z.B. für das Verschlüsseln und Signieren von E-Mails eingesetzt oder zum Signieren von Softwarepaketen, um vor der Installationen die Authentizität prüfen zu können.

• Das Programm gpg ist das CLI-Programm für GPG. Es ist auch über Plugins in die meisten E-Mail- Programme integriert und es gibt eine Vielzahl an graphischen Programmen.

• Eine gute Einführung zur Verwendung von GPG bietet Das GNU-Handbuch zum Schutze der Privatsphäre.

Gnu Privacy Guard - Schlüsselpaar erzeugen

• Mit Hilfe von gpg --gen-key kann man ein Private/Public-Schlüsselpaar erstellen. Dabei wird man nach mehreren Informationen wie z.B. Name und E-Mail-Adresse gefragt. Diese Angaben dienen zur Identifikation der Person hinter dem Schlüssel und können auch später noch verändert werden.

Achtung: Der Vorgang kann sehr lange dauern, weil viele Zufallszahlen benötigt werden! Als „Trick“, um den Entropiepool des Kernels zu erhöhen, funktioniert z.B. dd if=/dev/sda of=/dev/random.

• Gleich nach Erstellung des Schlüsselpaars sollte man ein Widerrufszertifikat erzeugen (und sicher verwahren), mit dem man im Fall des Falles das Schlüsselpaar als ungültig erklären kann.

Für die Erzeugung des Zertifikats benutzt man gpg --output revocation.cert --gen-revoke KEY_ID und für das Invalidieren gpg --import revocation.cert.

KEY_ID ist dabei entweder die ID des Schlüssels oder z.B. die eingegebene E-Mailadresse.

• Siehe auch die Seite E-Mail-Selbstverteidigung des FSF.

Gnu Privacy Guard - Schlüssel austauschen

• Um mit anderen Personen nun sicher kommunizieren zu können, muss man natürlich deren öffentlichen Schlüssel besitzen bzw. müssen diese den eigenen öffentlichen Schlüssel besitzen. Alle Schlüssel werden bei GPG im sogenannten Schlüsselbund hinterlegt.

• Um Schlüssel auszutauschen kann man den eigenen öffentlichen Schlüssel in eine Datei exportieren und diese dann anderen Personen zukommen lassen. Das wird über gpg --output pubkey.gpg --export KEY_ID erledigt. Benutzt man zusätzlich die Option --armor wird die Ausgabedatei im ASCII- erzeugt (--armor und --output funktionieren auch bei den meisten anderen Aufrufen von gpg, bei denen eine Ausgabe erzeugt wird).

• Eine Datei mit einem öffentlich Schlüssel lässt sich wiederum mittels gpg --import pubkey.gpg in den eigenen Schlüsselbund importieren.

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 5 von 11 • Es gibt auch Schlüsselserver, auf die man öffentliche Schlüssel hochladen kann, damit sie dann von anderen Personen leichter gefunden werden können. Um Schlüssel zu suchen wird gpg --search -keys NAME verwendet, um einen öffentliche Schlüssel hochzuladen gpg --send-keys KEY_ID. Dabei wird der Standardschlüsselserver von GPG verwendet.

Gnu Privacy Guard - Authentisieren von Schlüsseln

• Bei der Erzeugung eines Schlüsselpaars können beliebige Daten eingeben werden und es könnte sich jemand für jemand anderen ausgeben.

• Um das zu verhindern, überprüft man den Fingerabdruck des öffentlichen Schlüssels, den man z.B. aus dem Internet herunter geladen hat, mit dem Fingerabdruck, den man von der Person direkt (z.B. über ein Telefon) bekommen hat.

Stimmen die Werte überein, so signiert man den öffentlichen Schlüssel mit dem eigenen privaten Schlüssel, um spätere Änderungen entdecken zu können.

Um diese Aufgaben zu erledigen, verwendet man gpg --edit-key KEY_ID. Zuerst überprüft man mit dem Befehl „fpr“, ob der Fingerabdruck passt und anschließend verwendet man den Befehl „sign“ zum Signieren.

Gnu Privacy Guard -

• Eine andere Möglichkeit, einem öffentlichen Schlüssel zu vertrauen, ist über das sogenannte Web of Trust. Dabei vertraut man einem Schlüssel einer Person nicht direkt, sondern dewegen, weil eine oder mehrere vertrauenswürdige Personen ihn signiert haben.

• Um der Signatur eines bestimmten Schlüssel zu vertrauen, wird gpg --edit-key KEY_ID und der Befehl „trust“ verwendet.

Es gibt vier Vertrauensstufen:

• Unbekannt (es ist nichts über die Vertrauenswürdigkeit bekannt) • Kein Vertrauen • Teilweises Vertrauen • Volles Vertrauen

Ein Schlüssel gilt dann als vertrauenswürdig, wenn man ihn selbst signiert hat, eine Person vollen Vertrauens ihn signiert hat oder drei Personen, denen man teilweise vertraut, ihn signiert haben.

Gnu Privacy Guard - Schlüsselpaare verwalten

• Auch nach dem Erstellen eines Schlüsselspaar kann man dessen Information ändern, sowohl beim privaten als auch beim öffentlichen Schlüssel. Dazu wird gpg --edit-key KEY_ID und anschließend der gewünschte Befehl ausgeführt.

• Mit Hilfe von „adduid“ kann man eine neu Identität (Name und E-Mailadresse) dem Schlüssel hinzufügen. Ähnlich dazu erlaubt der Befehl „addkey“ das Hinzufügen von zusätzlichen Sub- Schlüsseln.

• Über die Befehle „deluid“ und „delkey“ könnten Identitäten und Sub-Schlüssel gelöscht werden, es ist aber meist besser, über „revuid“ und „revkey“ die Identitäten und Sub-Schlüssel zu widerrufen, vor allem, wenn man den öffentlichen Schlüssel schon verteilt hat.

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 6 von 11 • Mit Hilfe von gpg --list-keys können alle öffentlichen Schlüssel, mittels gpg --list-secret-keys alle privaten Schlüssel angezeigt werden.

Gnu Privacy Guard - Ver- und Entschlüsselung von Daten

• Ver- und entschlüsseln mit symmetrischen Schlüssel:

$ "test" | gpg --symmetric > test.gpg # Es wird nach einer Passphrase gefragt $ gpg --decrypt test.gpg gpg: CAST5 encrypted data gpg: encrypted with 1 passphrase test gpg: WARNING: message was not integrity protected

• Ver- und entschlüsseln mit asymmetrischen Schlüssel:

$ echo "test" | gpg --encrypt - [email protected]. > test.gpg $ gpg --decrypt test.gpg You need a passphrase to unlock the secret key for user: "Thomas Leitner " 4096-bit RSA key, ID FD0F6282, created 2013-09-20 (main key ID 0DDDA7A3)

gpg: encrypted with 4096-bit RSA key, ID FD0F6282, created 2013-09-20 "Thomas Leitner " test

• Man kann auch gleichzeitig --encrypt --symmetric verwenden, dann ist eine Entschlüsselung über eine Passphrase oder einen privaten Schlüssel möglich.

Gnu Privacy Guard - Erstellen von Signaturen

• Signaturen können mittel --sign ohne oder mit Verschlüsselung erstellt werden. Mit der Option -u | --local-user kann der Signaturschlüssel bestimmt werden. Mittels --verify kann eine erstelle Signatur überprüft werden.

$ echo "test" | gpg --symmetric --sign -u [email protected] > test.gpg $ gpg --decrypt test.gpg gpg: CAST5 encrypted data gpg: encrypted with 1 passphrase test gpg: Signature made Mit 25 Nov 2015 08:33:01 CET using RSA key ID 0DDDA7A3 gpg: Good signature from "Thomas Leitner " gpg: WARNING: message was not integrity protected

• Es gibt auch die Möglichkeit einer Klartextsignatur mittels der Option --clearsign, was vor allem beim Signieren von E-Mails eingesetzt wird.

$ echo "test" | gpg --clearsign -u [email protected] -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512

test -----BEGIN PGP SIGNATURE----- Version: GnuPG v1

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 7 von 11 iQIcBAEBCgAGBQJWVWSrAAoJEHEzUoEN3aejU4cQAJzmsYDp9e0i+SaQ+ZizGccK [...] -----END PGP SIGNATURE-----

Gnu Privacy Guard - gpg-agent

• Damit die Sicherheit der privaten Schlüssel gewährt ist, sind diese mit einer Passphrase versehen. Allerdings kann es mühsam sein, ständig diese Passphrase einzugeben. Abhilfe schafft das Programm gpg-agent, welches die Passphrase zwischenspeichert.

• Das Programm benötigt ein zusätzliches Programm pinentry zur Abfrage der Passphrase. Es gibt dafür Varianten für die Kommandozeile und für GUIs. Über verschiedene Optionen kann festgelegt werden, wie lange Passphrasen gespeichert sind.

• Falls gpg-agent nicht schon beim Starten der /Desktop-Umgebung mitgestartet wird, kann es so gestartet werden:

$ eval $(gpg-agent --) # Damit die Umgebungsvariable gesetzt werden. $ # jetzt wird gpg-agent automatisch verwendet

Secure Shell (SSH)

• Um sich auf einem anderen Rechner einzuloggen, wurde früher verwendet und ab circa 1983 vermehrt rlogin bzw. rsh. Beide Programm haben aber einige Sicherheitsprobleme und sollten daher nicht mehr benutzt werden!

• Im Jahr 1995 wurde dann die Secure Shell (SSH) entwickelt, um ein sicheres Einloggen auf anderen Rechnern zu gewährleisten. Das Programm wurde ursprünglich frei zur Verfügung gestellt, später aber entwickelte es sich in Richtung einer proprietären Software.

• Daher wurde ab 1999 ausgehend von einer freien Version des ursprünglichen Programms die Software OpenSSH entwickelt, die mittlerweile Standard auf Linux- und BSD-Systemen geworden ist.

• SSH benutzt ein asymmetrisches Kryptosystem zum Authentifizieren des entfernten Rechners. Weiters wird der Datenverkehr zwischen Client und Server symmetrisch verschlüsselt, wobei der Schlüssel über den Diffie-Hellman-Schlüsseltausch erzeugt wird, und Benutzer können sich entweder mittels Benutzername und Passwort oder mit Hilfe von Public-Key-Authentifizierung anmelden.

OpenSSH - Verbindung aufbauen 1

• Mittels des Befehls ssh USER@SERVER kann eine Verbindung zum Server „SERVER“ als Benutzer „USER“ aufgebaut werden. Hat alles funktioniert, ist man eingeloggt und hat eine Shell vor sich.

• Wird das erste Mal eine Verbindung zu einem SSH-Server aufgebaut, wird man zum Überprüfen des Host-Schlüssels und zur Speicherung dessen aufgefordert:

$ ssh praxis@localhost The authenticity of host 'localhost (127.0.0.1)' can't be established. ECDSA key fingerprint is c0:72:d4:4c:c0:06:e0:f8:2e:8f:88:ce:b6:2b:af:b1. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

• Der Host-Schlüssel dient zur Authentifizierung des SSH-Servers, damit sichergestellt ist, dass

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 8 von 11 wirklich mit dem beabsichtigten SSH-Server kommuniziert wird. Alle Host-Schlüssel werden in der Datei ~/.ssh/known_hosts abgelegt.

• Technisch: Bei der Authentifizierung des SSH-Servers wird gleichzeitig per Diffie-Hellman- Schlüsseltausch ein Schlüssel erzeugt und mit diesem die weitere Verbindung verschlüsselt. Damit kein Man-in-the-middle-Angriff passieren kann, signiert der SSH-Server den DH-Wert des Clients. Damit haben beide Seiten einen gemeinsamen Schlüssel und der Client kann dadurch den Server authentifizieren.

OpenSSH - Verbindung aufbauen 2

• Ändert sich der Host-Schlüssel, so wird automatisch eine Warnung angezeigt und ein Einloggen verhindert:

$ ssh praxis@localhost @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is 9a:63:2a:e1:26:13:fb:5c:38:af:b5:2e:6f:6a:88:39. Please contact your system administrator. Add correct host key in /home/praxis/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/praxis/.ssh/known_hosts:4 remove with: ssh-keygen -f "/home/praxis/.ssh/known_hosts" -R localhost ECDSA host key for localhost has changed and you have requested strict checking. Host key verification failed.

• Wie in der Fehlermeldung beschrieben, kann mittels ssh-keygen -R SERVER der falsche Host- Schlüssel gelöscht werden. Das darf aber nur gemacht werden, wenn sich der Host-Schlüssel wirklich geändert hat!

OpenSSH - Public-Key-Authentifizierung

• Für die Authentifizierung des Benutzers bietet OpenSSH mehrere Möglichkeiten, die meist genutzten sind Authentifizierung über ein Passwort bzw. über einen öffentlichen Schlüssel.

• Die Verwendung von Public-Key-Authentifizierung ermöglicht ein sicheres und passwortloses Einloggen auf einem Rechner. Daher sollte man diese Authentifizierungsmethode bevorzugen.

• OpenSSH unterstützt verschiedene Algorithmen für die Public-Key-Authentifizierung. RSA war der ursprüngliche Algorithmus, später kamen DSA und ECDSA hinzu.

• Derzeit kann nur rohe Gewalt angewandt werden, um die Schlüssel zu knacken, egal welcher Algorithmus verwendet wird. Es empfiehlt sich daher immer einen Schlüssel mit möglichst vielen Bits zu verwenden (je länger der Schlüssel, desto schwieriger ist er zu knacken; z.B. RSA 2048 Bit, DSA 1024 Bit, ECDSA 521 Bit).

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 9 von 11 OpenSSH - Erzeugen eines Schlüsselpaars

• Das Programm ssh-keygen erlaubt das Erzeugen/Verwalten eines Public/Private-Schlüsselpaars.

• Mit der Option -t |dsa|ecdsa kann man den Algorithmus auswählen und mit -b Bits die Schlüssellänge.

• Beim Erstellen des Schlüsselpaares fragt das Programm nach dem Speicherort und nach einer Passphrase. Man muss nicht zwingend eine Passphrase eingeben, es empfiehlt sich aber, da sonst jeder die Schlüssel verwenden kann, der in Besitz der Dateien kommt.

• Der private und der öffentliche Schlüssel werden von ssh-keygen in das Verzeichnis ~/.ssh/ gespeichert, wenn man keinen anderen Speicherort auswählt, und mit Hilfe des Programms ssh- -id kann der öffentliche Schlüssel auf einen Rechner übertragen werden.

$ ssh-keygen -t dsa -b 1024 $ ssh-copy-id -i ~/.ssh/id_dsa.pub USER@SERVER

OpenSSH - ssh-agent

• Damit man nicht jedes Mal die Passphrase für den Schlüssel eingeben muss, kann man das Programm ssh-agent benutzen. Dieses speichert die Passphrasen für einen oder mehrere Schlüssel, die man mit Hilfe von ssh-add hinzufügt.

• Üblicherweise wird das Programm automatisch beim Starten einer graphischen Oberfläche mitgestartet. Falls nicht, kann man das Programm auch später in der Shell starten. Dabei ist darauf zu achten, dass die ausgegebenen Umgebungsvariablen in die Prozessumgebung der Shell aufgenommen werden.

$ eval $(ssh-agent) Agent pid 2789 $ ssh-add Enter passphrase for /home/thomas/.ssh/id_dsa: Identity added: /home/thomas/.ssh/id_dsa (/home/thomas/.ssh/id_dsa)

OpenSSH - Clientprogramm 1

• Wie besprochen, wird das Clientprogramm ssh wird zum Einloggen auf einem entfernten Rechner verwendet.

• Mit Hilfe der Option -o können beliebige SSH-Client-Optionen angegeben werden. Nützlich sind oft die folgenden:

• PubkeyAuthentication → zum Ein-/Ausschalten der Public-Key-Authentifizierung • PasswortAuthentication → zum Ein-/Ausschalten der Passwortauthentifizierung • StrictHostKeyChecking → damit die Host-Schlüssel nicht überprüft werden

In der Datei ~/.ssh/config können SSH-Client-Optionen für alle Verbindungen oder für Verbindungen zu speziellen Hosts konfiguriert werden.

• Daneben unterstützt es auch noch das Weiterleiten von X11-Verbindungen sowie z.B. Port- Forwarding.

# X11-Weiterleitung bei einer Verbindung aktivieren $ ssh -Y login.example.com

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 10 von 11 # Zugriff auf einen nicht öffentlichen Webserver über http://localhost:1234 $ ssh -L 1234:webserver.internal.example.com:80 login.example.com

OpenSSH - Clientprogramm 2

• Mit Hilfe des Programms scp kann man Dateien von einem Rechner über SSH auf einen anderen übertragen:

$ scp -r [email protected]:/data/my_dir .

• Falls das SFTP-Modul am SSH-Server aktiviert worden ist, kann man auch ähnlich zum klassichen FTP Dateien vom oder zum Server übertragen (WinSCP ist ein gutes Windowsprogramm dafür).

• Es gibt auch einige interessante Projekte, die auf SSH aufsetzen. Ein sehr nützliches ist sshuttle, welches eine Art VPN aufbaut und dazu nur SSH und einen installierten Python-Interpreter auf dem Server braucht.

Links: OpenSSH WikiBook, SSH Tricks, SSH Can Do That?

Copyright und Lizenz

• Copyright: Thomas Leitner [email protected]

• Basiert teilweise auf den Folien von Harald Schilly [email protected]

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

Abweichendes Copyright von Inhalten:

• Die Grafik „Diffie-Hellman Man-in-the-Middle-Angriff“ steht unter der CC BY-SA 2.5 Lizenz.

Technische Praxis der Computersysteme 1 | Wintersemester 2015 | Version: 2015-12-04 09:00 Seite 11 von 11