2009-07-06 6 views
14

Frage für alle SSL-Experten da draußen:SSL-Authentifizierung durch Vergleichen des Fingerabdrucks des Zertifikats?

Wir haben ein Embedded-Gerät mit einem kleinen Webserver darauf, und wir können unsere eigenen SSL-selbstsignierten Zertifikaten darauf installieren. Der Client ist in .NET geschrieben (aber das ist nicht so wichtig).

Wie kann ich das Gerät in .NET authentifizieren? Ist es genug, den Fingerabdruck des Zertifikats gegen einen bekannten Eintrag in der Datenbank zu vergleichen?

Mein Verständnis ist, dass der Fingerabdruck ein Hash des gesamten Zertifikats ist, einschließlich des öffentlichen Schlüssels. Ein Gerät, das fälschlicherweise als mein Gerät angesehen wird, könnte natürlich dasselbe öffentliche Zertifikat senden, aber es könnte den privaten Schlüssel nicht kennen, oder?

Oder muss ich meine eigene Vertrauenskette aufbauen, ein eigenes CA-Stammzertifikat erstellen, das Webserver-Zertifikat signieren und das auf dem Client installieren?

Antwort

4

Was Sie vorschlagen, ist im Prinzip in Ordnung. Es wird zum Beispiel während key signing parties verwendet. Hier tauschen die Teilnehmer in der Regel nur ihren Namen und Fingerabdrücke ihrer öffentlichen Schlüssel aus und stellen sicher, dass die Person auf der Party wirklich ist, wer er/sie behauptet. Die Überprüfung von Fingerabdrücken ist viel einfacher als die Überprüfung eines langen öffentlichen Schlüssels. Ein anderes Beispiel ist das so genannte self certifying file system. Auch hier werden nur Hashes öffentlicher Schlüssel über einen sicheren Kanal ausgetauscht. (Das heißt, diese Hashes sind in URLs eingebettet.) In diesem Schema müssen die öffentlichen Schlüssel nicht sicher gesendet werden. Der Empfänger muss nur prüfen, ob der Hash der öffentlichen Schlüssel die in die URLs eingebetteten Hashes anpasst. Natürlich muss der Empfänger auch sicherstellen, dass diese URLs von einer vertrauenswürdigen Quelle stammen.

Dieses Schema und Ihre Vorschläge sind einfacher als die Verwendung einer Zertifizierungsstelle. Aber es gibt einen Nachteil. Sie müssen sicherstellen, dass Ihre Datenbank mit Hashes authentisch ist. Wenn Ihre Datenbank groß ist, wird dies wahrscheinlich schwierig sein. Wenn Sie CAs verwenden, müssen Sie nur sicherstellen, dass die Stammschlüssel authentisch sind. Dies vereinfacht normalerweise die Schlüsselverwaltung erheblich und ist natürlich ein Grund, warum CA-basierte Schemata beliebter sind als z. das oben genannte selbstzertifizierende Dateisystem.

+1

Die Skalierbarkeit ist wirklich ein guter Grund für die PKI, danke! – chris166

+0

Schöne Art, eine Analogie zwischen Fingerabdruck-Validierung und Key Signing-Parteien zu zeichnen. Der Widerstand von SHA-1-Hashes gegenüber Kollisionen spielt in beiden Ereignissen eine große Rolle. –

3

In der gleichen Weise würden und sollten Sie nicht zwei Objekte als gleich betrachten, nur weil ihre Hash-Codes übereinstimmen, sollten Sie ein Zertifikat nicht als authentisch betrachten, nur weil sein Fingerabdruck in einer Liste von "bekannt" erscheint Zertifikat Fingerabdrücke ".

Kollisionen sind eine Tatsache des Lebens mit Hash-Algorithmen, auch gute, und Sie sollten sich vor der Möglichkeit schützen, dass ein motivierter Angreifer ein Rogue-Zertifikat mit einem passenden Fingerabdruck-Hash erstellen könnte. Die einzige Möglichkeit, dies zu verhindern, besteht darin, die Gültigkeit des Zertifikats selbst zu überprüfen, d. H. Die Vertrauenskette zu überprüfen, wie Sie es in Ihrer letzten Aussage angedeutet haben.

+5

Huh? Kryptografische Hash-Funktionen wie SHA1 wurden so entworfen, dass es unmöglich ist, zwei Eingaben zu finden, die auf dieselbe Ausgabe hashen. Wenn also ihr Hash übereinstimmt, kann man davon ausgehen, dass die Eingaben gleich sind. Daher kann auch davon ausgegangen werden, dass ein motivierter Angreifer KEINE zwei Zertifikate mit passenden Hashes erstellen kann (zumindest solange der Hash nicht gebrochen ist). Darüber hinaus ist die Überprüfung der Signatur eines selbstsignierten Zertifikats allein nicht genug. Sie müssen dem Signaturschlüssel vertrauen können. – Accipitridae

+4

Kollisionen * sind eine Tatsache des Lebens mit Hash-Algorithmen. Und obwohl einige dieser Algorithmen mit den besten Absichten entworfen wurden, wurde MD5 bereits entthront und SHA-1 zeigte ebenfalls Schwächen. Siehe http://www.crn.com/security/212700354 und http://www.rsa.com/rsalabs/node.asp?id=2834. Ich halte es für besser, das Zertifikat gründlich zu überprüfen und nicht nur auf den Fingerabdruck zu vertrauen. –

+5

... und um die Gültigkeit einer Signatur zu überprüfen, hashen Sie zuerst Ihre Daten und prüfen dann, ob es sich um denselben Hash-Wert handelt, der signiert wurde. Wenn Sie also digitale Signaturen verifizieren, verlassen Sie sich tatsächlich auf die Kollisionsresistenz Ihres Hash-Algorithmus. – Accipitridae

1

Kurz:

Nun in der Theorie Sie dann genau das tun, was für eine Zertifizierungsstelle für Sie tut. Also sollte es in Ordnung sein.

Längerer:

Wenn eine Zertifizierungsstelle signiert Ihre Public-Key/Zertifikat/Zertifikatsanforderung es nicht die gesamten Zertifikatsdaten unterschreiben. Aber nur der berechnete Hash-Wert der gesamten Zertifikatsdaten. Dies hält die Signatur klein.

Wenn Sie keine eigene CA erstellen oder eine kommerzielle/kostenlose verwenden möchten - , indem Sie den Fingerabdruck mit demjenigen vergleichen, dem Sie vertrauen, erhalten Sie die vertrauenswürdigste Konfiguration. Die vertrauenswürdigste Lösung wäre das Vergleichen des gesamten Zertifikats, da es auch vor Hash-Kollisionsangriffen schützt.

Wie die anderen hier erwähnten, sollten Sie sicherstellen, dass Sie einen sicheren Hash-Algorithmus verwenden. SHA-1 ist nicht mehr sicher.

ausführlichere Informationen zu diesem Thema:

Verwandte Themen