it-swarm-eu.dev

Wiederverwendung von privaten / öffentlichen Schlüsseln

Ich habe Konten auf mehreren Websites von Drittanbietern - Bitbucket, Bluehost usw.

Nach dem, was ich gesammelt habe, ist es üblich, ein Schlüsselpaar für alle [id_rsa, id_rsa.pub] zu verwenden, aber nur den öffentlichen Schlüssel auszugeben

Ist das die richtige Verwendung oder ist es besser, für jede Site ein neues Paar zu generieren?

Es scheint mir, dass dies unsicher ist - jede Site, der ich mit schändlicher Absicht vertraue [oder die gehackt wird], könnte meinen privaten Schlüssel nehmen, wenn ich die erste Verbindung herstelle, und ihn verwenden, um auf die anderen Sites zuzugreifen.

Kann jemand, der SSH versteht, überprüfen, ob es sicher ist, überall ein Schlüsselpaar zu verwenden, und wenn ja, vielleicht erklären, warum?

Wenn ich zwei Heimcomputer habe, gibt es einen Grund, jeweils unterschiedliche Schlüsselpaare zu verwenden?

Vielen Dank an alle.

45
SamGoody

Ihr privater Schlüssel wird niemals an die andere Site gesendet, daher ist es absolut sicher, den öffentlichen Schlüssel wiederzuverwenden. Es ist auch in Ordnung, denselben Schlüssel wie Ihre lokalen Computer wiederzuverwenden. Bedenken Sie jedoch, dass jemand, der den Schlüssel stiehlt, Zugriff auf alle hat. Dies kann ein Problem sein oder auch nicht.

42
artbristol

In SSH gibt es mehrere Schlüsselpaare. Das, von dem Sie sprechen, ist das Client-Schlüsselpaar . Der Client (d. H. Der Computer, der sich unter Ihrer physischen Kontrolle auf Ihrem Schreibtisch befindet) speichert den privaten Schlüssel - und der private Schlüssel wird niemals an den Server gesendet. Der öffentliche Schlüssel wird auf dem Server gespeichert (normalerweise im $HOME/.ssh/authorized_keys Datei).

Wenn der Client eine Verbindung zum Server herstellt, verwendet der Client den privaten Schlüssel , um dem Server zu demonstrieren, dass er den privaten Schlüssel steuert, und kann damit Berechnungen durchführen (nämlich ein digitale Signatur ). Der Server überprüft die Signatur dank des öffentlichen Schlüssels. Die Kenntnis des öffentlichen Schlüssels gibt nicht die Möglichkeit, neue Signaturen zu generieren, weshalb er als "öffentlicher" Schlüssel bezeichnet wird: Er kann veröffentlicht werden ohne negative Auswirkungen. Insbesondere das Kopieren Ihres öffentlichen Schlüssels auf eine beliebige Anzahl von Servern gibt keinem dieser Server Strom über die anderen Server, sei es ehrlich oder vollständig von einem Angreifer kontrolliert.

Wie @artbristol betont, ist dies der private Schlüssel, der wichtig ist. Wenn Sie Ihren öffentlichen Schlüssel auf zehn Server kopieren und jemand den privaten Schlüssel stiehlt (möglicherweise durch Hacken in Ihr Desktop-System oder durch physische Enteignung), dann dass jemand auf einmal sofortigen Zugriff auf die zehn Server erhält. Private Schlüssel sind wertvoll .

18
Thomas Pornin

Es scheint mir, dass dies unsicher ist - jede Site, der ich mit schändlicher Absicht vertraue [oder die gehackt wird], könnte meinen privaten Schlüssel nehmen, wenn ich die erste Verbindung herstelle, und ihn verwenden, um auf die anderen Sites zuzugreifen.

Kann jemand, der SSH versteht, überprüfen, ob es sicher ist, überall ein Schlüsselpaar zu verwenden, und wenn ja, vielleicht erklären, warum?

Öffentliche Schlüssel basieren auf der Challenge-Authentifizierung. Grundsätzlich geben Sie mehreren Sites Ihren öffentlichen Schlüssel, sodass jede Site eine Herausforderung für Sie darstellen kann. Diese Herausforderung ist jedes Mal einzigartig und kann nur von einer Person mit einem privaten Schlüssel beantwortet werden.

Ein vereinfachtes Beispiel wäre, wenn der Server Ihren öffentlichen Schlüssel verwendet und eine Nachricht wie "Der Sitzungsschlüssel für Benutzer X am 19. Dezember 16: 30: 03.351213 UTC lautet XPa7sK35WjMgAezrPmG1Sq4CV7nsFN1Uc3TRW6P8Evc" verschlüsselt. Ihr Client-Computer empfängt die verschlüsselte Nachricht, entschlüsselt sie mit Ihrem privaten Schlüssel und sendet den entschlüsselten Sitzungsschlüssel an den Server zurück, um zu bestätigen, dass Sie den privaten Schlüssel in Ihrem Besitz haben, auf dem der Server Sie authentifiziert. (In der Praxis ist es oft komplizierter, wenn der Server normalerweise öffentliche/private Hostschlüssel hat, sodass Sie Ihre Nachrichten an den Server verschlüsseln und authentifizieren können, dass der Server der ist, für den er sich ausgibt.).

Wenn Sie Ihren öffentlichen Schlüssel haben, erhält ein böswilliger Server keine zusätzlichen Angriffsmethoden, mit der Ausnahme, dass Sie versuchen, den Modul Ihres öffentlichen Schlüssels zu berücksichtigen, um Ihren privaten Schlüssel neu zu erstellen. Dies ist nur möglich, wenn Ihr Schlüssel zu klein ist, dh 512-Bit-Schlüssel wurden vor einem Jahrzehnt geknackt, 768-Bit-RSA-Schlüssel wurden als geknackt gemeldet letztes Jahr (mit ungefähr 10 ^ 20 Operationen; oder 2000) Jahre auf einem einzigen Kern eines modernen Prozessors); 1024-Bit-Schlüssel sind immer noch sicher, und die SSH-Standardeinstellung ist 2048-Bit-Schlüssel.

6
dr jimbob

Dieses Dokument enthält alle Details zur Funktionsweise der Authentifizierung mit öffentlichem Schlüssel in SSH. Ich habe es unten zusammengefasst.

Der Client sendet das folgende Paket:

 Beschreibung/Wert des Datentyps 
 Byte SSH_MSG_USERAUTH_REQUEST 
 Zeichenfolgenbenutzername 
 Zeichenfolgendienst 
 Zeichenfolge "publickey" 
 Boolescher Wert TRUE 
 Zeichenfolge des Algorithmus des öffentlichen Schlüssels 
. ____.] Öffentlicher String-Schlüssel zur Authentifizierung 
 String-Signatur

dabei ist Signatur eine Signatur, bei der der private Schlüssel für die folgenden Daten verwendet wird:

 String-Sitzungskennung 
 Byte SSH_MSG_USERAUTH_REQUEST 
 String-Benutzername 
 String-Service 
 String "publickey" 
 Boolescher Wert TRUE 
 Name des Algorithmus für den String des öffentlichen Schlüssels 
 String des öffentlichen Schlüssels, der zur Authentifizierung verwendet werden soll 

Der Server prüft dann, ob der angegebene öffentliche Schlüssel für den angegebenen öffentlichen Schlüssel autorisiert ist (@ThomasPornin erläutert in seiner Antwort, wie dies getan wird). Der Server überprüft dann, ob die Signatur korrekt ist (dies erfolgt mit dem öffentlichen Schlüssel). Wenn dies erfolgreich ist, ist die Authentifizierung erfolgreich.

Wie Sie sehen können (und wie in der Antwort von @ artbristol ausgeführt), wird der private Schlüssel niemals an den Server übertragen. Sie müssen nur nachweisen, dass Sie den privaten Schlüssel kennen, indem Sie die digitale Signatur senden.

4
mikeazo