Deutsch

Entwicklertools · SHA-Hash-Rechner

Zertifikat und SSH-Fingerabdrücke: Wie SHA-256 einen öffentlichen Schlüssel identifiziert

· Hintergrund

sha-256 Kryptographie Sicherheit

SSH-Hostschlüssel-Eingabeaufforderung mit SHA256: Fingerabdruck mit Base64-Digest
Original-ToolAcre-Vektorillustration

Ein Fingerabdruck ist ein Hash eines Zertifikats oder Schlüssels, kurz genug, um ihn vorlesen zu können. In diesem Beitrag wird erklärt, wie TLS- und SSH-Fingerabdrücke berechnet werden, warum SHA-1-Fingerabdrücke ersetzt werden und was eine Übereinstimmung beweist.

Die Eingabeaufforderung für den Hostschlüssel, die Sie immer akzeptieren – was Sie in der Zeile SHA256: zum Vergleichen auffordern

Wenn Sie sich zum ersten Mal über SSH mit einem Server verbinden, werden Sie gefragt, ob Sie den Hostschlüssel akzeptieren möchten. Die Eingabeaufforderung zeigt einen Fingerabdruck an: `SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8` oder ähnlich. Dieser Fingerabdruck ist ein Hash des öffentlichen Schlüssels des Servers. Sie werden aufgefordert, Out-of-Band (außerhalb des SSH-Protokolls) zu überprüfen, ob Sie diesen Schlüssel erkennen. Die Eingabeaufforderung zeigt normalerweise auch den Schlüsseltyp (RSA, ED25519, ECDSA) und das Fingerabdruckformat an. Wenn Sie den Fingerabdruck dieses Schlüssels schon einmal über einen vertrauenswürdigen Kanal gesehen haben, können Sie getrost „Ja“ eingeben. Wenn nicht, bedeutet Akzeptieren, dass man darauf vertrauen muss, dass das Netzwerk den richtigen Schlüssel liefert.

Ein Fingerabdruck ist einfach die Ausgabe einer kryptografischen Hash-Funktion, die auf den codierten Schlüssel angewendet wird. Für SSH wird der Schlüssel als binärer Blob (das OpenSSH-Drahtformat) codiert und der Hash über diesen Blob berechnet. Der Fingerabdruck ist kürzer als der vollständige Schlüssel und somit lesbar und tippbar. Derselbe Fingerabdruck resultiert immer aus demselben Schlüssel, sodass Sie einen an mehreren Orten oder Kanälen veröffentlichten Fingerabdruck vergleichen können.

Der Fingerabdruck entspricht dem Hash der Codierung – dem DER-Zertifikat oder dem Public-Key-Blob als Eingabe

SSH-Hostschlüssel und TLS-Zertifikate sind unterschiedlich codiert, das Fingerprinting-Prinzip ist jedoch identisch. Bei SSH wird der Fingerabdruck aus dem öffentlichen Schlüsselmaterial berechnet. Bei TLS-Zertifikaten wird der Fingerabdruck aus dem gesamten Zertifikat (einschließlich Aussteller, Gültigkeitsdaten und anderen Feldern) berechnet. Wenn Sie eine Verbindung zu einem Webserver herstellen, zeigt Ihnen der Browser den Fingerabdruck des Zertifikats nicht an, da TLS ein anderes Vertrauensmodell verwendet: Der Browser vertraut einer Reihe vorinstallierter Zertifizierungsstellen (CAs), und diese CAs bürgen für das Zertifikat. SSH verwendet keine vorinstallierten CAs; Stattdessen vertrauen Sie bestimmten Schlüsseln und speichern sie lokal in `~/.ssh/known_hosts`.

Da der Fingerabdruck die gesamten Zertifikatbytes für TLS umfasst, führt eine Änderung der Gültigkeitsdaten ohne erneute Signatur zu einem anderen Fingerabdruck. Bei SSH handelt es sich bei dem Fingerabdruck nur um den öffentlichen Schlüssel, sodass der Fingerabdruck stabil bleibt, solange der Schlüssel nicht geändert wird.

Dieser Rechner demonstriert die Längen SHA-1 und SHA-256; Fingerabdruck-Richtlinienempfehlungen erfordern Protokollquellen

In der Vergangenheit wurden SSH-Fingerabdrücke im MD5-Hexadezimalformat angezeigt. MD5 ist kryptografisch fehlerhaft und Kollisionen sind praktisch. Die Sicherheitsgemeinschaft hat standardmäßig auf SHA-256-Fingerabdrücke umgestellt. Möglicherweise werden weiterhin beide Formate von Ihrem SSH-Client angezeigt: `SHA256: base64` und `MD5: hex`. Der Fingerabdruck SHA-256 ist derjenige, dem man bei der Identitätsüberprüfung vertrauen kann. Wenn Sie beides sehen, vergleichen Sie die Version SHA-256 mit einem Fingerabdruck von einer vertrauenswürdigen Quelle (der Website des Servers, einer signierten E-Mail von einem Administrator, einem internen Wiki). Der MD5-Fingerabdruck ist weniger zuverlässig, da es MD5-Kollisionen gibt.

Die Änderung des Fingerabdruckformats ist ein sichtbares Zeichen der kryptografischen Umstellung. Ältere OpenSSH-Versionen zeigten nur MD5. Moderne Versionen zeigen standardmäßig SHA-256 an. Der Befehl `ssh-keygen -l -f /path/to/key` zeigt den Fingerabdruck des Schlüssels im Standardformat für Ihre Version von ssh-keygen an; Sie können ein bestimmtes Format mit dem Flag `-E` erzwingen (z. B. `-E sha256` oder `-E md5`).

SSHs base64 SHA256: Format – die Kodierungsänderung, die Fingerabdrücke kürzer als hexadezimal machte

SSH-Base64-Fingerabdrücke verwenden ein abweichendes Format: Ihnen wird der Name des Algorithmus und ein Doppelpunkt vorangestellt, z. B. `SHA256:base64string`. Dies unterscheidet sich vom SRI-Format (Subresource Integrity), das einen Bindestrich verwendet und nur Standard-Base64 enthält. Das SSH-Format enthält eine Markierung, die eindeutig macht, welcher Algorithmus den Digest erstellt hat. Wenn Sie in der SSH-Ausgabe einen Fingerabdruck sehen, wird der Algorithmus immer angezeigt. Wenn Sie ein SRI-Integritätsattribut sehen, wird der Algorithmus als Präfix mit Bindestrich codiert.

Die Base64-Ausgabe des ToolAcre SHA-Hash-Rechners ist die Standardform; Um SSH-Fingerabdrücke abzugleichen, stellen Sie `SHA256: ` (Algorithmusname, Doppelpunkt und Leerzeichen) voran. Die Hexadezimalform des Rechners entspricht nicht der von SSH angezeigten Form, obwohl sie denselben Digest darstellt und für Verifizierungszwecke gleichermaßen gültig ist.

Was eine Übereinstimmung beweist – dass Sie über dieselben Schlüsselbytes verfügen, die die andere Seite veröffentlicht hat, und nichts über den Besitzer des Schlüssels ohne eine Out-of-Band-Prüfung

Eine Fingerabdruckübereinstimmung beweist zwei Dinge: erstens, dass Sie über die gleichen Schlüsselbytes verfügen, die die andere Seite veröffentlicht hat, und zweitens, dass weder der Schlüssel noch der Fingerabdruck seit der Berechnung des Digests geändert wurden. Es beweist weder die Identität des Schlüsselbesitzers noch autorisiert es eine bestimmte Aktion. Die Out-of-Band-Verifizierung eines Fingerabdrucks ist eine notwendige, aber nicht ausreichende Voraussetzung für die Vertrauenswürdigkeit eines Schlüssels. Sie müssen außerdem überprüfen, ob die Person, die den Fingerabdruck veröffentlicht hat, tatsächlich die Person ist, für die sie sich ausgibt.

Wenn ein Administrator in der Praxis den SSH-Fingerabdruck eines Servers im Firmenintranet oder in einer signierten E-Mail veröffentlicht, können Sie überprüfen, ob er mit der Eingabeaufforderung übereinstimmt, die Sie beim Herstellen der Verbindung erhalten. Wenn der Fingerabdruck nicht übereinstimmt, können Sie die Verbindung getrost ablehnen, weil jemand Ihren Datenverkehr abfängt oder sich der Serverschlüssel geändert hat. Wenn der Fingerabdruck übereinstimmt, wissen Sie, dass Sie den richtigen Schlüssel haben. Ob dieser Schlüssel zum richtigen Server gehört, ist eine separate Frage, die Sie beantworten können, indem Sie den Veröffentlichungskanal überprüfen (sieht die Intranetseite legitim aus? Stammt die E-Mail tatsächlich vom Konto dieses Administrators?).

Bearbeitetes Beispiel – Verifizierung eines Fingerabdrucks anhand eines über einen vertrauenswürdigen Kanal veröffentlichten Fingerabdrucks, Schritt für Schritt

Ein Zertifikat-Fingerabdruck dient demselben Zweck: Er identifiziert ein bestimmtes Zertifikat eindeutig. Wenn ein TLS-Server sein Zertifikat ändert (z. B. bei der Erneuerung), hat das neue Zertifikat einen anderen Fingerabdruck. Das Anheften von Zertifikaten – das Festkodieren eines Fingerabdrucks oder eines kleinen Satzes akzeptabler Fingerabdrücke in einer Anwendung – ist eine Sicherheitstechnik zur Erkennung von Zertifikatänderungen. Wenn der Server ein Zertifikat mit einem anderen Fingerabdruck vorlegt, lehnt die Anwendung dieses ab. Dies schützt davor, dass eine kompromittierte Zertifizierungsstelle ein betrügerisches Zertifikat ausstellt, dem der Browser sonst vertrauen würde.

Das Anheften von Zertifikaten erfordert eine sorgfältige Verwaltung: Wenn der Server sein Zertifikat aktualisiert und Sie dies nicht erwartet haben, lehnt Ihre Anwendung das gültige neue Zertifikat ab. Viele Anwendungen verwenden stattdessen das Public-Key-Pinning, das den öffentlichen Schlüssel und nicht das gesamte Zertifikat anheftet. Dies ermöglicht eine Zertifikatserneuerung ohne Ablehnung, solange derselbe Schlüssel verwendet wird.

Funktioniertes Beispiel: Überprüfung mit protokollfähigen Tools, da ToolAcre den eingefügten UTF-8-Text gehasht hat, nicht DER- oder SSH-Drahtbytes

Die manuelle Berechnung eines Fingerabdrucks zur Verifizierung ist unkompliziert. Speichern Sie das Zertifikat oder den Schlüssel in einer Datei, verwenden Sie `openssl dgst -sha256 filename` oder `ssh-keygen -l -f filename -E sha256`, um den Fingerabdruck anzuzeigen, und vergleichen Sie ihn mit dem Fingerabdruck, den Ihnen der Server angezeigt hat. Der ToolAcre SHA-Hash-Rechner kann den Digest auch berechnen, wenn Sie die Schlüsselbytes einfügen. Beachten Sie jedoch, dass der Rechner UTF-8 Text hasht, den Sie einfügen, und keine Binärdateien. Wenn der Schlüssel im PEM-Format vorliegt (Text mit `-----BEGIN CERTIFICATE-----`-Header und Base64-codierten Bytes), können Sie ihn in den Rechner einfügen. Wenn es im DER-Format (binär) vorliegt, müssen Sie zunächst Befehlszeilentools verwenden oder in PEM konvertieren.

Die Grenze ist wichtig: ToolAcre hasht UTF-8 Text, den Sie in die Rechneroberfläche einfügen. Es liest keine Dateien von Ihrem Gerät (alle Berechnungen erfolgen im Browser, in Ihrem Tab, ohne Netzwerk). Wenn Sie eine Schlüsseldatei auf der Festplatte haben, können Sie diese in einem Texteditor öffnen, den Text kopieren und in den Taschenrechner einfügen, wenn er im PEM-Format vorliegt. Oder Sie können Befehlszeilentools wie `openssl`, `ssh-keygen` oder `sha256sum` verwenden, um den Hash lokal zu berechnen.

Imbiss: Fingerabdrücke außerhalb des Bandes vergleichen – der ToolAcre SHA-Hash-Rechner zeigt, wie SHA-1- und SHA-256-Digests anhand der von Fingerabdrücken verwendeten Längen aussehen

Der ToolAcre SHA-Hash-Rechner zeigt SHA-1- und SHA-256-Digests für jede Texteingabe an. Wenn Sie ein Zertifikat im PEM-Format oder einen öffentlichen SSH-Schlüssel einfügen, berechnet der Rechner beide Digests. Bei SSH-Schlüsseln hasht der Rechner den von Ihnen eingefügten Text; Wenn Sie das standardmäßige Base64-codierte öffentliche SSH-Schlüsselformat einfügen, stimmt der Digest nicht mit dem SSH-Fingerabdruck überein, da SSH vor dem Hashing seine eigene Formatierung (das Wire-Format) anwendet. Für eine direkte Übereinstimmung benötigen Sie den Schlüssel im genauen Format, das SSH intern verwendet, bei dem es sich nicht um das öffentliche Anzeigeformat handelt.

Bei Zertifikats-Fingerabdrücken ist das Verhalten ähnlich: Wenn Sie den PEM-codierten Zertifikatstext einfügen, hasht der Rechner diesen Text. Der Fingerabdruck eines Zertifikats wird über die codierten Zertifikatbytes (DER-Format) berechnet, nicht über den PEM-Textwrapper. Die Bytes sind gleich, aber die Textkodierung unterscheidet sich. Um einen Zertifikat-Fingerabdruck von OpenSSL oder dem Zertifikat-Viewer des Browsers abzugleichen, müssen Sie die DER-Bytes angeben, die nicht für Menschen lesbar sind. Der Zweck des Rechners besteht darin, UTF-8 Text zu hashen, den Sie einfügen und lesen können, wodurch die Grenze deutlich wird: Er hasht Texteingaben, nicht kryptografische Schlüsseldateien in ihrer standardmäßigen Binär- oder Drahtprotokollform.