Warum sind Stammzertifizierungsstellen mit SHA1-Signaturen kein Risiko?


9

Nehmen wir zum Beispiel die Website von Verisign, die eine Stammzertifizierungsstelle mit einer sha1-Hash-Signatur hat. Irre ich mich mit dem Verständnis, dass jemand, der eine Kollision findet, sich als Verisign-Stammzertifizierungsstelle ausgeben und daraus ein Zwischen- und dann ein Serverzertifikat generieren könnte, dem ein Browser oder ein Betriebssystem vertrauen würde.

https://www.entrust.com/need-sha-2-signed-root-certificates/ besagt:

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 signiert, der die Berechtigung erteilt wurde. Das Stammzertifikat erhält die Berechtigung über das Stammzertifizierungsprogramm, 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 eher aufgrund ihrer Identität als aufgrund der Signatur ihres Hashs vertrauen

Angenommen, ich bin der Autor eines neuen Browsers - SuperUserBrowser. Wie sonst würde ich darauf vertrauen, dass die Stammzertifikate, die ich mit meinem Browser versende, echt sind, abgesehen von der Hash-Signatur?

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


Einfach ausgedrückt sind SHA-1-Hashes nicht mehr vor Brute-Force-Angriffen geschützt. Da Sie den Google-Link nicht angeben, kann ich ihn nicht kommentieren, da ich persönlich nicht sehe, dass Google dies in der aktuellen Dokumentation startet. Wenn Google wirklich so denken würde, hätten sie keine Pflanzen, die SHA-1-Zertifikate ablehnen könnten, wenn es um Chrome geht. Jedes Zertifikat, das ein SHA-1-Zertifikat verwendet, ist ein Problem
Ramhound

cURl existiert für die von Ihnen beschriebenen Zwecke. Sie als Browser erlauben dem Betriebssystem auch zu bestimmen, welchen Zertifikaten vertraut werden soll.
Ramhound


@ramhound, Google Link hinzugefügt. Hinweis ist am Ende des Artikels.
Chris K

Dieser Artikel ist in meiner Stellungnahme veraltet. Es stimmt nicht mit dem überein, was Google derzeit mit SHA1-Zertifikaten macht. Es ist nicht klar, ob der Artikel kürzlich im ersten Quartal 2015 aktualisiert wurde, seitdem haben sich viele geändert, und ich weiß, dass SHA1-Zertifikate von Microsoft zurückgezogen werden, was bedeutet, dass zumindest unter Windows SHA1-Stammzertifikate tatsächlich betroffen sind. Ich verstehe ehrlich gesagt nicht, dass die "Notiz", die Erklärung dieser Notiz, nicht im Artikel erscheint. Ich frage mich, ob die Notiz aus dem Jahr 2014 stammt und daher nicht relevant ist.
Ramhound

Antworten:


10

Irre ich mich mit dem Verständnis, dass jemand, der eine Kollision findet, sich als Verisign-Stammzertifizierungsstelle ausgeben und daraus ein Zwischen- und dann ein Serverzertifikat generieren könnte, dem ein Browser oder ein Betriebssystem vertrauen würde.

Sie liegen falsch.

Zur Sicherheit der Signatur selbst: Mit der
Signatur eines Zertifikats wird der Aussteller dieses Zertifikats überprüft, um eine Vertrauenskette aufzubauen. Da eine Stammzertifizierungsstelle das vertrauenswürdige Ende der Vertrauenskette ist, da sie vorvertraut ist (dh im Vertrauensspeicher des Betriebssystems gespeichert ist), muss der Aussteller der Stammzertifizierungsstelle nicht überprüft werden, und daher muss die Signatur der Stammzertifizierungsstelle nicht wichtig.

Und um die mit einem schwachen Hash-Algorithmus signierte Stammzertifizierungsstelle zum Erstellen neuer Zertifikate zu verwenden:
Um ein anderes Zertifikat zu signieren (dh ein Blatt- oder Zwischenzertifikat zu erstellen ), 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 Aussteller des Zertifikats ausgegebenen Signatur abgeleitet werden, selbst wenn das Zertifikat selbst signiert ist (dh mit dem privaten Schlüssel signiert ist, den man abrufen möchte).

Das Signieren eines Zertifikats erfolgt, indem zuerst der wesentliche Teil eines Zertifikats mithilfe eines irreversiblen Hash-Algorithmus gehasht und dann mit dem privaten Schlüssel des Ausstellers "verschlüsselt" wird. Um zu dem privaten Schlüssel zu gelangen, der zum Signieren eines neuen Zertifikats benötigt wird, müssten Sie die Verschlüsselung (RSA oder ECC) angreifen, dh einen Schlüssel finden, der beim "Verschlüsseln" des Hash-Zertifikats zur gleichen Signatur führt. Da die RSA / ECC-Signatur jedoch noch nicht unterbrochen ist, können Sie den privaten Schlüssel nicht extrahieren und daher mit diesem Schlüssel keine neuen Zertifikate generieren. Eine andere Möglichkeit, ein neues Zertifikat von diesem Zertifikat signieren zu lassen, besteht darin, ein Zertifikat zu erstellen, das denselben Hashwert ergibt. Aber während SHA-1 anfällig für Kollisionsangriffe ist (dh Suchen Sie zwei Eingänge mit demselben Ausgang.) Im Gegensatz zu MD5 ist es derzeit nicht anfällig für einen Preimage-Angriff (Suchen nach Eingaben für einen bestimmten Ausgang), den Sie benötigen würden. Dies bedeutet, dass auch dieser Angriffsvektor ausfällt.


Von der Stammzertifizierungsstelle aus verwende ich die Signatur nicht wirklich zur Überprüfung. Ich verwende den darin verschlüsselten tatsächlichen RSA2048-Schlüssel, um den Zwischen- und Endpunkt zu validieren. Die Signatur auf dem Zwischen- / Endpunkt ist eine rechnerisch kostengünstige Methode zur Überprüfung des Vertrauens.
Chris K

@darthcoder:> Ja, das ist richtig: Um eine Signatur auf einem Blatt- / Zwischenzertifikat zu überprüfen, verwenden Sie den öffentlichen Schlüssel (RSA, ECC) aus dem Ausstellerzertifikat. Um eine gültige Signatur zu erstellen, benötigen Sie den privaten Schlüssel des Ausstellers.
Steffen Ullrich

Der Pub-Schlüssel im Intermediate überprüft also die Signatur des Endpunkts, der Pub-Schlüssel im Stammverzeichnis die Signatur des Intermediates, ja?
Chris K

@darthcoder: genau
Steffen Ullrich

Was ist der Pub-Schlüssel des Intermediates zur Berechnung der Signatur des Endpunkts? Ich beschäftige mich mit den Grundlagen des öffentlichen / privaten Schlüssels, aber ich denke, ich verliere sie durch die Behauptung 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 verwende ? Ich danke Ihnen, dass Sie sich mit meinen Fragen abfinden und helfen!
Chris K

2

Irre ich mich mit dem Verständnis, dass jemand, der eine Kollision findet, sich als Verisign-Stammzertifizierungsstelle ausgeben und daraus ein Zwischen- und dann ein Serverzertifikat generieren könnte, dem ein Browser oder ein Betriebssystem vertrauen würde.

Sie irren sich meistens darüber, dass Sie sich mit nur einer Hash-Kollision als Stammzertifizierungsstelle ausgeben können, da ein erfolgreicher Angriff auf das Zertifikat einer Stammzertifizierungsstelle weitere Schritte erfordern würde, wie nachstehend ausführlich erläutert.

Wie unten erläutert, können Sie sich jedoch erfolgreich als Zwischen-Zertifizierungsstelle ausgeben, indem Sie nur eine Hash-Kollision verwenden.

Kurz gesagt, der Client überprüft, ob die RSA-verschlüsselte Signatur auf einem Zertifikat 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 verwendet werden kann, um die RSA-verschlüsselte Signatur des Hash des TBS-Zertifikats zu überprüfen, muss der private Schlüssel der Zertifizierungsstelle bekannt sein, um die Signatur zu generieren, mit der Sie sich als Zertifizierungsstelle ausgeben können.

Angenommen, Sie konnten eine solche Hash-Kollision des TBS-Teils eines CA-Stammzertifikats generieren, indem Sie ihn so ändern, dass er 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 tatsächlichen Zertifikats der Zertifizierungsstelle. Bei der Validierung eines signierten Zertifikats ruft der Client den Fingerabdruck oder die Signatur des Unterzeichners vom signierten Zertifikat ab und ruft den öffentlichen Schlüssel seiner lokalen Kopie dieses Zertifikats ab, wenn er versucht, die Signatur eines von dieser Zertifizierungsstelle signierten Zertifikats zu überprüfen.

Um sich als Stammzertifizierungsstelle auszugeben und eine RSA-verschlüsselte Signatur zu generieren, würde ein Client darauf vertrauen, dass Sie zuerst eine Kollision des TBS-Teils des Zertifikats der Stammzertifizierungsstelle aus einem von Ihnen generierten TBS-Zertifikat suchen müssen, das eine öffentliche Datei enthält, für die Sie die 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 besteht. Zu diesem Zeitpunkt hätten Sie ein gefälschtes Zertifikat mit einer SHA1-Hash-Kollision und einer RSA-Signaturkollision. Wenn Sie dies alles irgendwie erreicht haben, müssten Sie schließlich einen Client austricksen, damit dieser Ihr gefälschtes Zertifikat abruft, wenn er nach dem Zertifikat der Stammzertifizierungsstelle sucht, anstatt seine lokale Kopie des Zertifikats der Stammzertifizierungsstelle abzurufen.

In fast allen denkbaren Szenarien, in denen Sie all diese Dinge erreichen könnten, hätten Sie viel effizientere Angriffsmöglichkeiten, bei denen Sie nicht zuerst eine SHA1-Hash-Kollision eines Zertifikats finden müssen, das einen Ihnen bekannten privaten Schlüssel enthält, der auch einen RSA generiert verschlüsselte Signaturkollision, die den Client dazu verleiten muss, sie für die Signaturüberprüfung zu verwenden, anstatt das Zertifikat der echten Stammzertifizierungsstelle zu verwenden, das, da der Client ihm vertraut, lokal auf dem Client gespeichert wird.

Ein plausiblerer Angriff wäre stattdessen, eine Hash-Kollision des Zertifikats einer Zwischenzertifizierungsstelle zu finden, mit der Sie sich als Zwischenzertifizierungsstelle ausgeben können, um Zertifikate zu signieren. Dieser Angriff ist aus zwei Gründen plausibler: Erstens können Sie einen Client leicht dazu bringen, das Zertifikat einer zwischengeschalteten Zertifizierungsstelle herunterzuladen, und zweitens wird die Hash-Kollision anhand der RSA-verschlüsselten Signatur einer vertrauenswürdigen Zertifizierungsstelle überprüft, sodass bekanntermaßen versucht werden muss, den Client auszutricksen Vertrauen in die Zertifizierungsstelle, die das Zertifikat signiert hat.

Wenn einem Kunden ein Zertifikat von einer von einer zwischengeschalteten Zertifizierungsstelle signierten Website vorgelegt wird, für die er keine lokale Kopie besitzt, versucht er, die Zertifizierungsstelle des zwischengeschalteten Unternehmens von der Website herunterzuladen, auf der das Ticket von der Website vorgelegt wurde, auf der das Zertifikat in der Website vorgelegt wurde erster Platz. Unter Hinweis darauf, dass ein Client den Hash des TBS-Teils des Zertifikats dieses Vermittlers verwendet und dann überprüft, ob die RSA-verschlüsselte Signatur auf diesem 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 jetzt vereinfacht, um eine Hash-Kollision des TBS-Teils des CA-Zertifikats eines gültigen Vermittlers zu generieren.

Sobald man den öffentlichen Schlüssel des Zertifikats einer überprüfbaren Zwischenzertifizierungsstelle durch einen öffentlichen Schlüssel ersetzen kann, für den der private Schlüssel bekannt ist, kann man andere Bytes nach Bedarf ändern, um eine Hash-Kollision mit dem überprüfbaren Zertifikat zu generieren. 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 er den Fingerabdruck der Zertifizierungsstelle, die es signiert hat. Wenn auf dem Client das Zertifikat dieses Vermittlers nicht lokal installiert ist, lädt er das Zertifikat von der Website herunter und ruft das zu überprüfende Zertifikat ab. Der Client generiert dann den Hash der TBS-Website. ' s Zertifikat und überprüfen Sie, ob es mit dem öffentlichen Schlüssel des heruntergeladenen Zwischenzertifizierungsstellenzertifikats digital signiert wurde. Dieser Prozess ist insofern rekursiv, als er dann einen Hash des TBS-Teils des heruntergeladenen Zwischenzertifikats erstellt und den Fingerabdruck der Zertifizierungsstelle liest, die das Zwischenzertifikat signiert hat. Anschließend wird nach dem Zertifikat der Zertifizierungsstelle gesucht und überprüft, ob die RSA-verschlüsselte Signatur auf dem Zwischenzertifikat mithilfe des öffentlichen Schlüssels der ausstellenden Zertifizierungsstelle generiert wurde, um den Hash des TBS-Zertifikats im Zwischenzertifikat zu signieren. Da der Intermediär-Hash des TBS-Zertifikats im Intermediär-Zertifikat mit dem Hash des ursprünglichen Intermediär-Zertifikats übereinstimmt und die Signatur auch mit der Signatur der Original-Intermediär-Signatur unserer modifizierten Intermediär-CA übereinstimmt. ' Das Zertifikat wird validiert. Der Client schließt den Vorgang rekursiv ab, bis er ein Zertifikat findet, das von einer ihm vertraulichen Zertifizierungsstelle ausgestellt wurde und dessen Punktüberprüfung erfolgreich ist, und wir uns erfolgreich als zwischengeschaltete Zertifizierungsstelle ausgegeben haben.

NIST und die NSA warnten davor

"SHA-1 sollte nach Januar 2016 nicht mehr vertraut werden, da ein gut finanzierter Angreifer oder eine gut finanzierte Regierung zunehmend eine SHA-1-Hash-Kollision finden kann, die es ihnen ermöglicht, sich als SSL-Website auszugeben", und Microsoft und Google warnten ein Jahr lang später von Verbindungen, die SHA-1 verwenden.

http://windowsitpro.com/security/your-organization-using-sha-1-ssl-certificates

Es ist wichtig, dass die Zertifikatkette 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 nach dem 1. Januar 2017 auch SHA-2 verwenden müssen. In der Regel stellt Ihre Zertifizierungsstelle die Zwischen- und Stammzertifizierungsstellenzertifikate bereit, wenn sie bereitgestellt werden das SHA-2-Zertifikat. Manchmal bieten sie einen Link zum Herunterladen der Zertifikatkette. Es ist wichtig, dass Sie diese Kette mit SHA-2-Zertifikaten aktualisieren. Andernfalls vertraut Windows Ihrem neuen SHA-2-Zertifikat möglicherweise nicht.

Root-Zertifikate 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 Entität signiert, der die Berechtigung erteilt wurde.

Aus dem gleichen 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 gekettet sind. Ich gehe jedoch davon aus, dass zukünftige Versionen von Exchange SHA-2 in selbstsignierten Zertifikaten verwenden werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.