Authentifizierung mit öffentlichem SSH-Schlüssel - Benutzer müssen immer ihr eigenes Schlüsselpaar generieren?

7

Ich habe heute mit einem Partner zusammengearbeitet, mit dem ich Dateien auf meinen Server hochladen musste scp. Ich habe Kennwörter in der SSH-Konfiguration des Servers deaktiviert, daher wollte ich, dass sie die Authentifizierung mit öffentlichem Schlüssel verwenden. Ich habe das Schlüsselpaar für sie auf dem Server generiert und ihnen den privaten Schlüssel gegeben und den öffentlichen Schlüssel in die entsprechende authorized_keysDatei eingefügt.

Nach einer Reihe von Problemen mit der Einrichtung ihres Arbeitsplatzes wurde schließlich ein erfahrener Systemadministrator hinzugezogen, und er schalt mich dafür, dass ich die Schlüsselgenerierung auf diese Weise handhabte. Er sagte, dass ich ihnen durch die Übergabe eines auf meinem System generierten privaten Schlüssels einen Brute-Force-Angriff gegen andere auf demselben Server generierte Schlüssel ermöglicht habe.

Ich habe ihn sogar gefragt: "Wenn ich also ein Konto auf einem Server habe und mich mit einem Passwort anmelden kann, aber etwas automatisieren möchte und auf diesem System ein Schlüsselpaar generiere, gibt mir das einen Angriffsvektor, um andere brutal zu zwingen." Benutzerschlüssel? " und er sagte ja .

Ich habe noch nie davon gehört, stimmt das? Kann mich jemand auf eine Diskussion über diesen Angriff hinweisen?

Schinazi
quelle
Klingt für mich nach verrücktem Gespräch, aber ich habe keinen Hinweis zum Zitieren.
Phil Hollenback
7
Das Schlüsselgenerierungsbit klingt wie hooey, aber ich teile seine Besorgnis darüber, dass Sie Schlüssel für andere Personen generieren. Wie haben Sie die Schlüssel zum Endbenutzer transportiert (bitte keine E-Mail sagen)? Haben Sie sie zumindest mit einer Passphrase verschlüsselt und die Passphrase telefonisch angegeben? Woher wissen Sie, dass der private Schlüssel beim Transport nicht abgefangen wurde? Der private Schlüssel sollte privat sein, das heißt, niemand sollte ihn haben, außer der Person, der er gehört. Wenn Sie den privaten Schlüssel generieren und freigeben, ist er nicht wirklich privat, sondern eher ein freigegebener Schlüssel.
Zoredache
3
+1 für Zoredache. Was Sie tun, ist eine schlechte Idee, aber nicht aus den Gründen, die den anderen Administrator betreffen. Private Schlüssel sollten niemals über das Netzwerk übertragen werden. Dies trägt zu einem angemessenen Sicherheitsniveau bei.
Larsks

Antworten:

8

Nun ... nein, das ist unter den allermeisten Umständen aufgrund der richtigen Zufallsgenerierung auf einem System nicht korrekt. Es ist jedoch theoretisch möglich, dass ein Server eine Verzerrung erzeugt, die eine Verzerrung aufweist, wenn die Entwickler (im Fall von Linux die Kernel-Entwickler) nicht darauf achten, dass die Zufallsquelle "gut" ist. Wenn die Zufälligkeit verzerrt ist, kann ein Angriff auf die Serverschlüssel schneller als mit brutaler Gewalt ausgeführt werden. Dies ist jedoch eher ein theoretisches als ein tatsächliches Problem. In der Praxis ist eine Schwäche des RNG (Random Number Generator) ein weitaus weniger wahrscheinlicher Angriff als ein Seitenkanalangriff auf die kryptografische Software oder der Zugriff auf den Server. A. andere Art und Weise.

Also, lange Rede, kurzer Sinn, nein, er ist falsch. Abgesehen von den grundlegenden kryptografischen Grundlagen (Werden DSA-Schlüssel standardmäßig generiert? RSA?) Enthält ein SSH-Schlüssel keine Informationen zu anderen SSH-Schlüsseln, die auf demselben System generiert wurden.

Schreiber
quelle
6

Der Hauptpunkt eines privaten Schlüssels ist, dass er für den Benutzer privat und nur dem Benutzer bekannt ist. Als Benutzer möchte ich nicht, dass andere Personen meinen privaten Schlüssel generieren, da dies bedeutet, dass jemand anderes Zugriff auf meinen privaten Schlüssel hat und daher die Möglichkeit hat, zu handeln, wenn er sich auf Systemen befindet, auf denen die öffentliche Hälfte dieses Schlüssels als gültige Anmeldeinformationen festgelegt ist.

Von Ihrem PoV haben Sie auch mehr Verantwortung. Sie müssen Ihr System nicht nur so schützen, dass unangemessene öffentliche Schlüssel nicht an Orten installiert werden können, sondern Sie sind auch dafür verantwortlich, die von Ihnen generierten privaten Schlüssel während ihres gesamten Lebenszyklus sicher zu verwahren. Wenn mit einem bestimmten Schlüsselpaar als Authentifizierung eine unerwünschte Aktion ausgeführt wird und der Benutzer weiß, dass eine andere Person eine Kopie des Schlüssels hat (oder hatte) oder der Schlüssel nicht sicher transportiert wurde, kann er sich umdrehen (richtig oder falsch) und sagen, dass sie ihre Kopie vollkommen sicher aufbewahrt haben, so dass es Ihre Kopie sein muss, die entweder bei Ihnen oder während des Transports kompromittiert wurde. Das klingt vielleicht nach Arschfick, und das liegt daran, dass sowohl von Ihrem PoV als auch von den Benutzern sichergestellt wird, wer für das verantwortlich ist, was richtig markiert ist.

Ob also die von Ihrem Experten vorgebrachten Bedenken berechtigt sind oder nicht (nach meinem Verständnis sind solche Angriffe theoretisch möglich, aber meines Wissens weit davon entfernt, in der nächsten Generation oder in wenigen praktisch umgesetzt zu werden, es sei denn, es gibt eine neue ernsthafte Lücke in der Mathematik oder der allgemeinen Implementierung gefunden (was etwas unwahrscheinlich ist), sowohl beim Tragen meines Benutzerhutes als auch beim Tragen meines Administratorhutes bevorzuge ich, dass Benutzer die volle Kontrolle über ihre privaten Schlüssel und Administratoren haben (natürlich zusammen mit allen anderen auf dem Planeten) irgendwo in ihrer Nähe erlaubt.

Selbst wenn Sie mit dem oben Gesagten nicht einverstanden sind, ist das Problem des Schlüsseltransports alles andere als trivial: Wie können Sie 100% sicher sein, dass der private Schlüssel vom beabsichtigten Benutzer und nur vom beabsichtigten Benutzer gesehen und nicht (absichtlich oder versehentlich) gespeichert wurde? auf eine weniger sichere Weise (z. B. in einem E-Mail-Posteingang oder einer temporären Datei, die sich daraus ergibt, dass sie von dieser E-Mail getrennt und unverschlüsselt wurde). Wenn Sie eine sichere Transportmethode verwenden, um den Benutzer zu authentifizieren erfordert, wie bekommen Sie die Authentifizierungsdaten für dieSystem sicher an den Benutzer? Es gibt natürlich Möglichkeiten, den Schlüsseltransport für die meisten Verwendungszwecke "sicher genug" zu machen (wobei "genug" sehr davon abhängt, auf welche Schlüssel die Benutzer Zugriff haben), aber wenn der Benutzer seine Schlüssel generiert und die öffentlichen Teile verteilt, sind Sie es Sie müssen sich in diesem Sinne überhaupt keine Sorgen um die Schlüsselverteilung machen (Sie müssen sich nur darum kümmern, dass die Benutzer die privaten Teile sicher aufbewahren, aber nichts kann einen wirklich nachlässigen Benutzer davon abhalten, dort unsicher zu sein, sodass es sich um ein Problem handelt egal was du tust).

Ein letzter Hinweis: Eine Sache, die ein Problem sein könnte, wenn Ihre privaten Schlüssel alle an derselben Stelle generiert werden, ist, wenn später festgestellt wird, dass an dieser Stelle eine schlechte Schlüsselgenerierung eingerichtet wurde, wie das Problem, das letztes Jahr im OpenSSL-Paket von Debian / Lenny aufgetreten ist . In einem solchen Fall hätten Sie die Aufgabe, viele private Schlüssel zu widerrufen und neu zu generieren. Dies könnte Teil der Besorgnis Ihres externen Experten in dieser Angelegenheit sein.

David Spillett
quelle
3

Ich bin mir ziemlich sicher, dass dies BS ist. Privat sollte zufällig generiert werden. Solange diese Zufälligkeit keine Verzerrung aufweist, kann keine Verbindung zwischen verschiedenen privaten Schlüsseln bestehen.

Axel Gneiting
quelle
3

Der zufällige Startwert stammt normalerweise von / dev / random . Wenn Sie ssh-keygen nicht auf irgendeine Weise geändert haben, um einen anderen zufälligen Startwert zu verwenden (Sie würden es wissen, wenn Sie dies tun würden), ist es höchst unwahrscheinlich, dass jemand gegen diesen Schlüssel schlagen kann, um herauszufinden, wie Sie einen neuen Schlüssel generieren können, um Ihren zu knacken System.

JakeRobinson
quelle