Was ist ein SSH-Schlüssel?

1372
quack quixote

Ich meldete mich bei github an und bemerkte die ssh-Schlüsseloption, die interessant aussah. Ich hatte ursprünglich so etwas wie einen SSL-Schlüssel erwartet (Name, Co-Name usw.). Nachdem ich es durchgegangen bin, stelle ich fest, dass ich nur ein Passwort eingebe und es ist immer myuser @ comp-name (dies ist Windows). Warum? Ich dachte, es war eine Benutzer / Pass-ID, und ich kann aus Datenschutzgründen separate Schlüssel für einen separaten Zweck erstellen.

Jetzt sehe ich, dass ich eines brauche, um ein Repository zu erstellen. Ich sehe auch etwas über eine "private Schlüsseldatei", wenn ich Optionen anschaue. Was genau ist ein SSH-Schlüssel und wie kann ich einen separaten Benutzer erstellen, ohne ein separates Login in Windows zu erstellen.

4

2 Antworten auf die Frage

9
David Z

Haben Sie von asymmetrischer Verschlüsselung (auch als Public-Key-Kryptographie bezeichnet) gehört? Auf dieser Technologie basieren SSH-Schlüssel.

Das Grundkonzept der asymmetrischen Verschlüsselung besteht darin, dass Sie über zwei Kryptografieschlüssel verfügen, bei denen es sich in der Regel um sehr große Zahlen (oder äquivalente lange Binärdatenfolgen) handelt. Jede mit einer von ihnen verschlüsselte Nachricht kann nur mit der anderen entschlüsselt werden - nicht einmal mit dem ursprünglichen Encyption-Schlüssel selbst! Dies ist nützlich, da Sie einen der Schlüssel, den privaten Schlüssel, für sich behalten und den anderen, den öffentlichen Schlüssel, irgendwo online oder an einem beliebigen Ort veröffentlichen können. Benutzer können Nachrichten mit dem öffentlichen Schlüssel verschlüsseln. Sie können darauf vertrauen, dass nur Sie als Inhaber des entsprechenden privaten Schlüssels sie entschlüsseln und ihren Inhalt lesen können. (So ​​funktionieren GPG und PGP und ähnliche Programme, wenn Sie jemals davon gehört haben)

Es stellt sich heraus, dass der Vorgang auch bei umgekehrten Tasten funktioniert. Wenn Sie etwas mit Ihrem privaten Schlüssel verschlüsseln, kann es nur mit dem entsprechenden öffentlichen Schlüssel entschlüsselt werden. Dies kann unbrauchbar erscheinen, da jeder auf der Welt Ihren öffentlichen Schlüssel erhalten und die Nachricht entschlüsseln kann, aber er hat einen sehr nützlichen Nebeneffekt: Er bestätigt, dass die Nachricht von Ihnen stammt . Da sonst niemand auf der Welt Ihren privaten Schlüssel besitzt, könnte niemand eine Nachricht gemacht haben, die mit Ihrem öffentlichen Schlüssel entschlüsselt werden kann.

Wenn Sie darüber nachdenken, dass Sie in der Lage sind zu überprüfen, ob eine Nachricht von Ihnen stammt und nicht von einem Betrüger, ist die Authentifizierung. Jedes Mal, wenn Sie sich mit einem Benutzernamen und einem Kennwort bei einer Website anmelden, geben Sie einige geheime Informationen an, die angeblich nur Ihnen bekannt sind, um zu beweisen, dass die Anmeldeanforderung von Ihnen stammt. Nun, Sie können dasselbe mit Ihrem privaten Schlüssel tun: Verschlüsseln Sie Ihre Login-Anfrage, um zu beweisen, dass sie von Ihnen stammt. Und so funktioniert die SSH-Schlüsselpaarauthentifizierung. Anstatt einen Benutzernamen und ein Kennwort anzugeben, sendet der SSH-Server Ihrem SSH-Client eine Nachricht, die mit Ihrem privaten Schlüssel verschlüsselt werden soll. Der Client verschlüsselt sie, sendet die verschlüsselte Nachricht zurück und der Server entschlüsselt sie mit Ihrem öffentlichen Schlüssel, um sie zu überprüfen. Wenn es die Prüfung bestanden hat, herzlichen Glückwunsch, Sie sind angemeldet!

Ich habe mich (noch) nicht für GitHub angemeldet, daher bin ich nicht mit der genauen Vorgehensweise vertraut, aber ich vermute, wenn sie nach einem fragen username@host, ist dies nur ein Kommentar, um den jeweiligen Schlüssel zu identifizieren. Wenn Sie sich bei GitHub von verschiedenen Computern aus anmelden, haben Sie für jeden dieser Computer einen anderen privaten SSH-Schlüssel. GitHub muss alle entsprechenden öffentlichen Schlüssel überwachen. Dies username@hostist eine ziemlich standardisierte Methode zum Kennzeichnen von öffentlichen SSH-Schlüsseln, die von verschiedenen Personen und / oder verschiedenen Hosts stammen.

Übrigens ist es erwähnenswert, dass die Authentifizierung mit SSH-Schlüsselpaaren im Allgemeinen als sicherer gilt als die Authentifizierung mit Benutzername und Kennwort. Der Grund ist, dass, wenn Sie einen Benutzernamen und ein Kennwort zum Anmelden bei einer Website verwenden, diese Informationen mit mindestens einem anderen Computer gemeinsam genutzt werden müssen: dem Webserver, auf dem die Website ausgeführt wird. Die meiste Zeit, das ist in Ordnung, aber es ist immer möglich, dass, wer verantwortlich für die Website, oder auch nur jemanden, den Zugriff auf den Server hat, könnte Ihr Passwort sein Aufnehmen und Verwenden sie hinter dem Rücken Sie zu imitieren. Durch die Verwendung eines privaten / öffentlichen Schlüsselpaares wird diese Möglichkeit ausgeschlossen, da Sie den privaten Schlüssel niemals mit anderen Personen teilenüberhaupt nicht der Server, auf dem Sie sich anmelden. Obwohl der Server (z. B. GitHub) perfekt prüfen kann, ob Sie sich wirklich anmelden, hat er nicht genügend Informationen, um sich als Sie als Benutzer anzumelden.

So erstellen Sie ein SSH-Schlüsselpaar: Ich bin selbst ein Linux-Benutzer, daher bin ich mir nicht sicher, wie es mit der von Windows verwendeten Software gemacht wird. Welches SSH-Client-Programm (PuTTY?) Sie auch verwenden sollten, um ein Schlüsselpaar zu erstellen.

1
sleske

Zu Davids hervorragender Antwort hinzufügen:

Um einen SSH-Schlüssel (oder genauer: ein öffentliches / privates Schlüsselpaar) unter Windows zu erstellen, können Sie den (kostenlosen) PuttyGen verwenden. Es ist ein Addon zum beliebten PuTTY SSH-Client.

Anweisungen zB hier: http://theillustratednetwork.mvps.org/Ssh/Private-publicKey.html

Natürlich können Sie den Schlüssel auch mit den OpenSSH-Tools erstellen. diese sind unter Windows nur seltener.

Das ist cool. Jetzt merke ich, was mich störte, ist kein Problem, da name @ comp ein Kommentar ist, und ich kann das entfernen, um nur den Schlüssel zu verwenden. Die drei, die ich verwende (git gui, git / msysbash und puttyGen) verwenden alle zufällige Daten. Ich kann keine identischen Schlüssel mit langen, 30 Zeichen langen Passwörtern erstellen. auch die passphrase in puttygen scheint absolut nichts zu tun. Wenn ich also meinen Schlüssel verliere, kann ich nie wieder unterschreiben. Ich muss entweder sorgfältig sichern oder irgendwo online speichern. Das scheint schlecht zu sein. Vielleicht werde ich es verschlüsseln und dann hochladen. vor 14 Jahren 0
Sprichst du über den privaten Schlüssel? Wenn ja, haben Sie Recht, es online zu speichern, ist eine schlechte Idee. Der Computer, auf dem er erstellt wurde, sollte niemals verlassen werden. Ich vermute, Sie könnten es irgendwo sichern, aber wenn Sie es verlieren, können Sie immer eine neue machen, also ist das nicht ein großer Deal. (Nun, ich nehme an, das hängt davon ab, wie bereit Sie sind, den Schlüssel der Datei an allen Standorten, an denen Sie sich anmelden, zu aktualisieren.) David Z vor 14 Jahren 1
@ David: Oh. Ja, es könnte so einfach sein. Ich dachte wie pgp, wo andere Leute den öffentlichen Schlüssel brauchen und dass Sie ihn nicht irgendwo aufbewahren. Im Falle von github konnte ich mich immer einloggen und die Schlüssel aktualisieren. Ich denke, das ist nicht schwer. Aber wenn Sie sagen, dass sie zufällige Daten verwenden und ich nicht identische Schlüssel mit derselben Phrase generieren kann? Es ist fast sinnlos, eine Phrase zu verwenden. Das war hilfreich. vor 14 Jahren 0
@ acidzombie24: Hier kann es zu Missverständnissen kommen. "Die Passphrase in Puttygen scheint absolut nichts zu tun" -> Die Passphrase wird zum Verschlüsseln Ihres privaten Schlüssels verwendet, um Ihren privaten Schlüssel * zu schützen *, falls er in die falschen Hände gerät. Sie können die Passphrase einfach weglassen, wenn Sie den Schutz nicht benötigen. Die Passphrase hat nichts mit der Schlüsselauthentifizierung selbst zu tun. Wenn Sie also den privaten Schlüssel verlieren, können Sie ihn niemals erneut (mit diesem Schlüssel) signieren. Aber Sie machen trotzdem (sichere) Backups von all Ihren Sachen, nicht wahr? ;-) sleske vor 14 Jahren 0
@ acidzombie24: "Aber wenn Sie sagen, dass sie zufällige Daten verwenden werden und ich nicht identische Schlüssel mit derselben Phrase generieren kann?" Ja, ein (privater) Schlüssel * muss * zufällige Daten verwenden, sonst wäre er nicht sicher (b / c ist leicht zu erraten). Und "identische Schlüssel erzeugen" macht keinen Sinn; Wenn Sie einen identischen Schlüssel wünschen, kopieren Sie ihn einfach :-). sleske vor 14 Jahren 0