Warum sind Stammzertifizierungsstellen mit SHA1-Signaturen kein Risiko?

6410
Chris K

Nehmen Sie zum Beispiel die Website von Verisign, die eine Root-CA mit einer Hash-Signatur sha1 hat. Verstehe ich mich mit dem Verständnis, dass es sich bei der Suche nach einer Kollision um die Verisign-Stammzertifizierungsstelle handeln würde, um daraus ein Intermediate und dann ein Serverzertifikat zu generieren, das einem Browser oder Betriebssystem als vertrauenswürdig eingestuft wird.

https://www.entrust.com/need-sha-2-signed-root-zertifikate/ heißt es:

Kurz gesagt, die Signatur eines Stammzertifikats wird nicht überprüft, da die Software dem öffentlichen Schlüssel des Stammzertifikats direkt vertraut. Ein Stammzertifikat ist selbstsigniert und wird nicht von einer anderen Entität, die über die Berechtigung verfügt, signiert. Das Stammzertifikat erhält Autorität durch das Stammzertifikatprogramm, das vom Betriebssystem oder vom Browserentwickler verwaltet wird.

und verweist auf einen Google-Link: https://security.googleblog.com/2014/09/gradually-sunsetting-sha-1.html

Hinweis: SHA-1-basierte Signaturen für vertrauenswürdige Stammzertifikate sind kein Problem, da TLS-Clients ihnen anhand ihrer Identität und nicht anhand der Signatur ihres Hashes vertrauen

Angenommen, ich bin der Verfasser eines neuen Browsers - SuperUserBrowser. Wie sollte ich sonst darauf vertrauen, dass die mit meinem Browser gelieferten Stammzertifikate nicht die Hash-Signatur sind?

Warum ist eine Stammzertifizierungsstelle mit einer SHA1-Signatur "kein Problem"?

7
Einfach ausgedrückt: SHA-1-Hashes sind vor Brute-Force-Angriffen nicht mehr sicher. Da Sie keinen Google-Link zur Verfügung stellen, kann ich dazu nichts sagen, da ich persönlich nicht sehe, dass Google in der aktuellen Dokumentation damit anfängt. Wenn Google das wirklich so empfunden hätte, hätten sie keine Werke, die SHA-1-Zertifikate ablehnen, wenn es um Chrome geht. ** Jedes Zertifikat, das ein SHA-1-Zertifikat verwendet, ist ein Problem. ** Ramhound vor 7 Jahren 0
[cURl] (https://www.bing.com/search?q=curl+certificate&qs=SC&pq=curl+certii&sc=8-11&sp=1&cvid=FD9CF6D8DA4E45429E34ED4FF72D911A&FORM=QBRE) ist für die von Ihnen beschriebenen Zwecke vorhanden. Sie als Browser gestatten dem Betriebssystem auch zu bestimmen, welchen Zertifikaten vertraut werden soll. Ramhound vor 7 Jahren 0
Related: [Wie verwende ich curl, um zu überprüfen, ob das Zertifikat einer Site widerrufen wurde?] (Http://superuser.com/questions/742393/how-to-use-curl-to-verify-if-a-sites-certificate -wurde widerrufen) Ramhound vor 7 Jahren 0
@ramhound, Google-Link hinzugefügt. Hinweis befindet sich am Ende des Artikels. Chris K vor 7 Jahren 0
Dieser Artikel ist meiner Meinung nach nicht mehr aktuell. Es stimmt nicht mit dem überein, was Google derzeit mit SHA1-Zertifikaten macht. Es ist nicht klar, ob der Artikel vor kurzem Q1 2015 aktualisiert wurde, sich die Anzahl seitdem geändert hat und ich weiß, dass SHA1-Zertifikate von Microsoft zurückgezogen werden, was bedeutet, dass zumindest SHA1-Stammzertifikate von Windows tatsächlich betroffen sind. Ich verstehe ehrlich gesagt nicht die "Notiz", die Erklärung dieser Notiz erscheint nicht im Artikel. Mich wundert, ob die Notiz von 2014 stammt und somit nicht relevant ist. Ramhound vor 7 Jahren 0
[Hier] (https://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html) ist die aktuelle Haltung von SHA1-Zertifikaten von Google. Beachten Sie Folgendes: "Zu diesem Zeitpunkt lösen Sites mit einer SHA-1-basierten Signatur als Teil der Zertifikatskette (nicht die Selbstsignatur des Stammzertifikats) einen schwerwiegenden Netzwerkfehler aus. Dies schließt ** Zertifikatsketten ein das ende in einem lokalen vertrauensanker sowie in solchen, die bei einer öffentlichen CA ** enden ", was bedeutet, dass öffentliche CAs nicht SHA1 sein können, aber Ihre eigenen selbstsignierten CAs können sein, weil Sie sich selbst implizit vertrauen, oder? Ramhound vor 7 Jahren 0
PSA: Bitte entwerfen Sie keinen Browser, der den Zertifikatsspeicher des Betriebssystems nicht verwendet. Es gibt zu viele Dinge, die Sie in diesem Design falsch machen können. Erlauben Sie dem Betriebssystem, genauer dem Benutzer, festzustellen, welchen Zertifikaten vertraut werden soll. Verwenden Sie die aktuellen Methoden, um dem Benutzer anzuzeigen, ob ein Problem mit dem Zertifikat vorliegt, da dies ein guter Stewart ist. Ramhound vor 7 Jahren 0
@ramhound, in Bezug auf die PSA würde ich keinen Browser so bauen :-) ältere Probleme. Ich spreche das an, weil ein Client seine eigenen Zertifikate konfigurieren kann, und ist besorgt, weil Verisign immer noch ein SHA1-signiertes Stammverzeichnis besitzt. Chris K vor 7 Jahren 0
Die PSA basiert auf der Tatsache, dass die Art und Weise, wie Firefox seinen eigenen Zertifikatspeicher verwendet, ärgerlich ist. Aus diesem Grund müssen Sie ein Hardwaregerät für Firefox einrichten, um es mit Smartcards verwenden zu können. Ramhound vor 7 Jahren 0
Siehe auch http://security.stackexchange.com/questions/120301/sha-1-no-impact-to-root-certificate Arjan vor 7 Jahren 0

2 Antworten auf die Frage

8
Steffen Ullrich

Verstehe ich mich mit dem Verständnis, dass es sich bei der Suche nach einer Kollision um die Verisign-Stammzertifizierungsstelle handeln würde, um daraus ein Intermediate und dann ein Serverzertifikat zu generieren, das einem Browser oder Betriebssystem als vertrauenswürdig eingestuft wird.

Sie liegen falsch.

Was die Sicherheit der Signatur selbst betrifft:
Zur Signatur eines Zertifikats wird der Aussteller dieses Zertifikats überprüft, um eine Vertrauenskette aufzubauen. Da eine Stammzertifizierungsstelle das vertrauenswürdige Ende der Vertrauenskette ist, weil sie vorab als vertrauenswürdig eingestuft wird (dh im Vertrauensspeicher des Betriebssystems gespeichert ist), muss der Aussteller der Stammzertifizierungsstelle nicht verifiziert werden, und daher muss die Signatur der Stammzertifizierungsstelle durchgeführt werden nicht wichtig.

Und für die Verwendung einer mit einem schwachen Hash-Algorithmus signierten Stammzertifizierungsstelle zum Erstellen neuer Zertifikate:
Zum Signieren eines anderen Zertifikats (z. B. Erstellen eines Blatt- oder Zwischenzertifikats) benötigen Sie den privaten Schlüssel der Zertifizierungsstelle. Der private Schlüssel, der mit dem öffentlichen Schlüssel eines Zertifikats übereinstimmt, kann nicht aus der vom Herausgeber des Zertifikats ausgegebenen Signatur abgeleitet werden, selbst wenn das Zertifikat selbstsigniert ist (dh mit dem privaten Schlüssel signiert wurde, den man zu erhalten versucht).

Das Signieren eines Zertifikats erfolgt durch Hashing des wesentlichen Teils eines Zertifikats mithilfe eines irreversiblen Hash-Algorithmus und anschließendes "Verschlüsseln" mit dem privaten Schlüssel des Ausstellers. Um zu dem privaten Schlüssel zu gelangen, der zum Signieren eines neuen Zertifikats benötigt wird, müssen Sie die Verschlüsselung (RSA oder ECC) angreifen, dh einen Schlüssel finden, der die gleiche Signatur ergibt, wenn das gehashte Zertifikat "verschlüsselt" wird. Da die RSA / ECC-Signatur jedoch noch nicht fehlerhaft ist, können Sie den privaten Schlüssel nicht extrahieren und somit keine neuen Zertifikate mit diesem Schlüssel generieren. Eine andere Möglichkeit, ein neues Zertifikat mit diesem Zertifikat signieren zu lassen, besteht darin, ein Zertifikat zu erstellen, das denselben Hashwert ergibt. Während SHA-1 jedoch für Kollisionsangriffe anfällig ist (z. B. (zwei Eingaben mit derselben Ausgabe finden); es ist derzeit (im Gegensatz zu MD5) nicht anfällig für einen Vorimage-Angriff (Eingabe für bestimmte Ausgabe finden), den Sie benötigen würden. Dies bedeutet, dass auch dieser Angriffsvektor ausfällt.

Von der Stammzertifizierungsstelle verwende ich also nicht wirklich die Signatur zum Überprüfen. Ich verwende den darin verschlüsselten RSA2048-Schlüssel, um den Zwischen- und Endpunkt zu überprüfen. Die Unterschrift auf dem Zwischen- / Endpunkt ist eine kostengünstige Methode zur Überprüfung des Vertrauens? Chris K vor 7 Jahren 0
@darthcoder:> Ja, das ist richtig: Um eine Signatur eines Blatt- / Zwischenzertifikats zu überprüfen, verwenden Sie den öffentlichen Schlüssel (RSA, ECC) aus dem Ausstellerzertifikat. Um eine gültige Signatur erstellen zu können, benötigen Sie den privaten Schlüssel des Ausstellers. Steffen Ullrich vor 7 Jahren 0
Pub-Schlüssel in Intermediate überprüft also die Signatur des Endpunkts, Pub-Schlüssel in Root überprüft die Signatur von Intermediaten, ja? Chris K vor 7 Jahren 0
@darthcoder: genau Steffen Ullrich vor 7 Jahren 0
Was ist der pub-Schlüssel des Intermediates, um die Signatur des Endpunkts zu berechnen? Ich verstehe die Grundlagen des öffentlichen / privaten Schlüssels, aber ich glaube, ich verliere ihn durch die Durchsetzung des Vertrauens - welche Teile des Endpoing-Schlüssels verwende ich, um diesen Hash zu berechnen, wobei ich den öffentlichen Schlüssel des Zwischenprodukts als abgeleitete Komponente dazu benutze ? Ich danke Ihnen, dass Sie meine Fragen gestellt und geholfen haben! Chris K vor 7 Jahren 0
@darthcoder: Ich denke, du brauchst einen umfassenderen Überblick über das Thema. Siehe [wikipedia: Vertrauenskette] (https://en.wikipedia.org/wiki/Chain_of_trust) oder [security.se: Funktionsweise der Überprüfung digitaler Signaturen] (http://security.stackexchange.com/questions/8034) / Wie-Digital-Signatur-Verifizierungsprozess funktioniert). security.stackexchange.com ist auch die bessere Seite, um solche Fragen zu stellen. Steffen Ullrich vor 7 Jahren 0
msgstr "zuerst verschlüsseln, dann das Ergebnis [...] hashen". Ist es tatsächlich anders herum, zuerst führen Sie den Hash-Algorithmus für das Zertifikat aus und verschlüsseln dann den Hash mit Ihrem privaten Schlüssel. vor 6 Jahren 0
@Tlen: natürlich hast du recht, ich habe es korrigiert. Danke für die Eingabe. Steffen Ullrich vor 6 Jahren 0
Aber jetzt basiert der Rest des Absatzes immer noch auf dieser falschen Prämisse. Der Angreifer möchte eine Kollision erstellen, er muss ein Zertifikat erstellen, das denselben Hashwert wie ein echtes Zertifikat enthält. Er wird dann behaupten, dass sein Zertifikat mit einem privaten Schlüssel des Emittenten unterzeichnet wurde. vor 6 Jahren 0
@Tlen: Ich habe diesen Teil überarbeitet. Sollte jetzt hoffentlich richtig sein. Danke noch einmal. Steffen Ullrich vor 6 Jahren 0
Ich würde auch einen anderen Angriffsvektor hinzufügen. Der Angreifer bereitete zwei Zertifikate mit demselben Hash vor, eines unschuldig aussehende, das zweite, das den Besitz einer Bank-Website beansprucht. Er würde zuerst zur Genehmigung einreichen und die Unterschrift mit der zweiten verwenden. vor 6 Jahren 0
@ Tlen: Ich glaube nicht, dass dieser Angriff funktionieren wird. Der Angreifer hat nur die Kontrolle über die CSR, nicht aber das Zertifikat. Die Zertifizierungsstelle wählt die relevanten Felder aus der CSR aus und fügt auch neue Felder wie Seriennummer, Anfang, Ende usw. hinzu. Alle ändern den Hash. Und selbst wenn der Angreifer es schaffen würde, zwei Zertifikate mit demselben Hash zu erstellen, müsste die CA tatsächlich mit SHA-1 unterschreiben, was die CAs heute normalerweise nicht tun. Dieser Angriff ist auch nicht davon abhängig, dass die Zertifizierungsstelle von SHA-1 selbst signiert ist, dh sie steht in keinem Zusammenhang mit der Frage. Steffen Ullrich vor 6 Jahren 0
2
Alexander Higgins

Verstehe ich mich mit dem Verständnis, dass es sich bei der Suche nach einer Kollision um die Verisign-Stammzertifizierungsstelle handeln würde, um daraus ein Intermediate und dann ein Serverzertifikat zu generieren, das einem Browser oder Betriebssystem als vertrauenswürdig eingestuft wird.

Sie irren sich meistens darüber, dass Sie eine Stammzertifizierungsstelle nur mit einer Hashkollision verkörpern können, da ein erfolgreicher Angriff auf das Zertifikat der Stammzertifizierungsstelle mehr Schritte erfordern würde, wie nachstehend ausführlich beschrieben wird.

Sie können jedoch, wie nachstehend erläutert, eine Zwischen-CA mit einer Hash-Kollision erfolgreich nachahmen.

Kurz gesagt, stellt der Client sicher, dass die RSA-verschlüsselte Signatur eines Zertifikats mit der RSA-verschlüsselten Signatur übereinstimmt, die mit dem öffentlichen Schlüssel der Zertifizierungsstelle generiert wird, um den Hash der Bytes des TBS-Zertifikats in diesem Zertifikat zu signieren. Während der öffentliche Schlüssel der Zertifizierungsstelle dazu verwendet werden kann, die RSA-verschlüsselte Signatur des Hash des TBS-Zertifikats zu überprüfen, muss man den privaten Schlüssel der Zertifizierungsstelle kennen, um die Signatur zu generieren, die es Ihnen ermöglicht, die Zertifizierungsstelle zu benennen.

Angenommen, Sie könnten eine solche Hash-Kollision des TBS-Teils eines CA-Stammzertifikats generieren, indem Sie das Zertifikat so ändern, dass es einen öffentlichen Schlüssel enthält, für den Sie den privaten Schlüssel kennen. Das Problem besteht darin, dass Ihr geändertes CA-Zertifikat einen anderen öffentlichen Schlüssel als den enthält Das tatsächliche Zertifikat der Zertifizierungsstelle und alle Clients, die ein von der Zertifizierungsstelle signiertes Zertifikat überprüfen, verfügen über eine lokal installierte Kopie des realen Zertifikats der Zertifizierungsstelle. Beim Validieren eines signierten Zertifikats ruft der Client den Fingerabdruck oder die Signatur des Unterzeichners aus dem signierten Zertifikat ab und ruft den öffentlichen Schlüssel seiner lokalen Kopie dieses Zertifikats ab, wenn versucht wird, die Signatur eines von dieser Zertifizierungsstelle signierten Zertifikats zu überprüfen.

Um sich als Root-CA auszugeben und eine RSA-verschlüsselte Signatur zu erstellen, würde ein Client darauf vertrauen, dass Sie zunächst eine Kollision des TBS-Teils des Stammzertifikats der Root-CA aus einem von Ihnen generierten TBS-Zertifikat suchen müssen, das ein öffentliches Zertifikat enthält, für das Sie das Private kennen Schlüssel. Sie müssen auch eine solche Kollision finden, die die Überprüfung der RSA-Signatur mit dem öffentlichen Schlüssel der Zertifizierungsstelle durchläuft. Zu diesem Zeitpunkt hätten Sie ein gefälschtes Zertifikat mit einer SHA1-Hash-Kollision und einer RSA-Signatur-Kollision. Wenn Sie dies erreicht haben, müssen Sie schließlich einen Client täuschen, damit er Ihr gefälschtes Zertifikat abruft, wenn Sie nach dem Zertifikat der Stammzertifizierungsstelle suchen, anstatt dessen lokale Kopie des Stammzertifikats der Stammzertifizierungsstelle abzurufen.

In fast allen vorstellbaren Szenarien, in denen Sie all diese Dinge erreichen könnten, hätten Sie viel effizientere Angriffsmöglichkeiten, bei denen es nicht erforderlich war, zuerst eine SHA1-Hashkollision eines Zertifikats zu finden, das einen Ihnen bekannten privaten Schlüssel enthält, der auch einen RSA generiert verschlüsselte Signaturkollision, die den Client dazu bringen muss, die Signaturüberprüfung zu verwenden, anstatt das Zertifikat der echten Stammzertifizierungsstelle zu verwenden, das angesichts der Tatsache, dass der Client ihm vertraut, lokal auf dem Client gespeichert wird.

Ein plausiblerer Angriff wäre stattdessen die Suche nach einer Hashkollision des Zertifikats einer zwischengeschalteten Zertifizierungsstelle, mit der Sie die zwischengeschaltete Zertifizierungsstelle zum Signieren von Zertifikaten verwenden können. Dieser Angriff ist aus zwei Gründen plausibler. Erstens können Sie einen Client dazu bringen, das Zertifikat einer zwischengeschalteten Zertifizierungsstelle herunterzuladen. Der zweite ist die Hashkollision, die anhand einer mit RSA verschlüsselten vertrauenswürdigen Zertifizierungsstelle verifiziert wird. Daher müssen Sie versuchen, den Client zu täuschen vertrauen der Zertifizierungsstelle, die das Zertifikat signiert hat.

Wenn einem Kunden ein Zertifikat von einer Website vorgelegt wird, das von einer zwischengeschalteten Zertifizierungsstelle unterzeichnet wurde, für die er keine lokale Kopie besitzt, wird er beim Versuch, die Zertifizierungsstelle des Vermittlers von der Website herunterzuladen, die das Ticket vorgelegt hat, von der Website, die das Zertifikat in der Website vorgelegt hat erster Platz. In Erinnerung, dass ein Client den Hash des TBS-Teils des Zertifikats dieses Vermittlers übernimmt und dann überprüft, ob die RSA-verschlüsselte Signatur für dieses Zertifikat tatsächlich mit dem öffentlichen Schlüssel einer lokal vertrauenswürdigen Zertifizierungsstelle oder einer Kette von Zertifizierungsstellen signiert wurde, die zu einer lokal vertrauenswürdigen Zertifizierungsstelle führt Ein erfolgreicher Angriff wird nun vereinfacht, um eine Hash-Kollision des TBS-Teils des Zertifikats der Zertifizierungsstelle eines gültigen Vermittlers zu erzeugen.

Einmal kann man den öffentlichen Schlüssel eines nachprüfbaren CA-Zertifikats durch einen öffentlichen Schlüssel ersetzen, für den der private Schlüssel bekannt ist, und dann andere Bytes nach Bedarf ändern, um eine Hash-Kollision mit dem überprüfbaren Zertifikat zu erzeugen. Dieses geänderte Zertifikat kann dann zum Signieren anderer Zertifikate verwendet werden. Solche signierten Zertifikate können dann beispielsweise neben diesem modifizierten Zwischenzertifikat auf einem Webserver installiert werden. Wenn ein Client das Zertifikat abruft, liest es den Fingerabdruck der Zertifizierungsstelle, die es signiert hat. Wenn der Client das Zertifikat dieses Vermittlers nicht lokal installiert hat, lädt er das Zertifikat von der Website herunter, indem er das Zertifikat abruft, das er überprüft. Der Client generiert dann den Hash der TBS-Website. ' s Zertifikat und vergewissern Sie sich, dass es mit dem öffentlichen Schlüssel des heruntergeladenen CA-Zertifikats digital signiert wurde. Dieser Prozess ist rekursiv, indem er einen Hash des TBS-Teils des heruntergeladenen Zwischenzertifikats erstellt und den Fingerabdruck der Zertifizierungsstelle liest, die das Zwischenzertifikat signiert hat. Anschließend sucht es nach dem CA-Zertifikat und verifiziert, dass die RSA-verschlüsselte Signatur des Zwischenzertifikats mit dem öffentlichen Schlüssel der ausstellenden Zertifizierungsstelle generiert wurde, um den Hash des TBS-Zertifikats im Zwischenzertifikat zu signieren. Da der Vermittlerhash des TBS-Zertifikats im Vermittlerzertifikat mit dem Hash des ursprünglichen Vermittlerzertifikats und der Unterschrift auch mit der Unterschrift der ursprünglichen Vermittlerunterschrift übereinstimmt, hat unsere modifizierte Vermittler-CA ' Das Zertifikat wird bestätigt. Der Client wird den Prozess rekursiv abschließen, bis er ein von einer vertrauenswürdigen Zertifizierungsstelle ausgestelltes Zertifikat findet und welcher Verifizierungspunkt erfolgreich ist und wir die Zwischen-Zertifizierungsstelle erfolgreich nachahmten.

NIST und die NSA warnten das

"SHA-1 sollte nicht vor Januar 2016 vertrauenswürdig sein, da es zunehmend praktikabler ist, dass ein gut finanzierter Angreifer oder eine Regierung eine SHA-1-Hashkollision finden könnte, die es ihnen ermöglicht, sich als SSL-Website auszugeben", und Microsoft und Google begannen vor einem Jahr zu warnen später von Verbindungen, die SHA-1 verwenden.

http://windowsitpro.com/security/ihr-organisationsverwendung-sha-1-ssl-zertifikate

Es ist wichtig, dass die Zertifikatskette mit SHA-2-Zertifikaten verschlüsselt wird. (Eine Zertifikatskette besteht aus allen Zertifikaten, die zur Zertifizierung des Endzertifikats erforderlich sind.) Dies bedeutet, dass alle Zwischenzertifikate SHA-2 nach dem 1. Januar 2017 verwenden müssen. Normalerweise stellt Ihre Zertifizierungsstelle die Zertifikate der Zwischenzertifizierungsstelle und der Stammzertifizierungsstelle bereit das SHA-2-Zertifikat. Manchmal stellen sie einen Link zum Herunterladen der Zertifikatskette bereit. Es ist wichtig, dass Sie diese Kette mit SHA-2-Zertifikaten aktualisieren. Andernfalls vertraut Windows Ihrem neuen SHA-2-Zertifikat möglicherweise nicht.

Stammzertifikate sind eine andere Geschichte. Dies können tatsächlich SHA-1-Zertifikate sein, da Windows diesen Zertifikaten implizit vertraut, da das Betriebssystem dem öffentlichen Schlüssel des Stammzertifikats direkt vertraut. Ein Stammzertifikat ist selbstsigniert und wird nicht von einer anderen Instanz signiert, die über die Berechtigung verfügt.

Aus demselben Grund kann jedes selbstsignierte Zertifikat den SHA-1-Algorithmus verwenden. Beispielsweise generiert Microsoft Exchange Server während der Installation selbstsignierte SHA-1-Zertifikate. Diese Zertifikate sind von der neuen SHA-2-Richtlinie ausgenommen, da sie nicht an eine Zertifizierungsstelle gebunden sind. Ich gehe jedoch davon aus, dass zukünftige Versionen von Exchange SHA-2 in selbstsignierten Zertifikaten verwenden werden.