Ich verwende Auth0, um die Authentifizierung in meiner Web-App durchzuführen. Ich verwende ASP.NET Core v1.0.0 und Angular 2 rc5 und weiß nicht viel über Authentifizierung / Sicherheit im Allgemeinen.
In den Auth0-Dokumenten für ASP.NET Core Web Api gibt es zwei Möglichkeiten für den JWT-Algorithmus: RS256 und HS256. Dies mag eine dumme Frage sein, aber:
Was ist der Unterschied zwischen RS256 und HS256? Was sind einige Anwendungsfälle (falls zutreffend)?
jwt
auth0
asp.net-core-webapi
Rico Kahler
quelle
quelle
Antworten:
Beide Auswahlmöglichkeiten beziehen sich auf den Algorithmus, den der Identitätsanbieter zum Signieren des JWT verwendet. Das Signieren ist eine kryptografische Operation, die eine "Signatur" (Teil des JWT) generiert, die der Empfänger des Tokens validieren kann, um sicherzustellen, dass das Token nicht manipuliert wurde.
RS256 (RSA-Signatur mit SHA-256 ) ist ein asymmetrischer Algorithmus und verwendet ein öffentliches / privates Schlüsselpaar: Der Identitätsanbieter verfügt über einen privaten (geheimen) Schlüssel, der zum Generieren der Signatur verwendet wird, und der Verbraucher des JWT erhält einen öffentlichen Schlüssel um die Unterschrift zu validieren. Da der öffentliche Schlüssel im Gegensatz zum privaten Schlüssel nicht gesichert werden muss, stellen die meisten Identitätsanbieter ihn den Verbrauchern leicht zur Verfügung, um ihn zu erhalten und zu verwenden (normalerweise über eine Metadaten-URL).
HS256 ( HMAC mit SHA-256) beinhaltet andererseits eine Kombination aus einer Hashing-Funktion und einem (geheimen) Schlüssel, der von den beiden Parteien gemeinsam genutzt wird, um den Hash zu generieren, der als Signatur dient. Da derselbe Schlüssel sowohl zum Generieren als auch zum Validieren der Signatur verwendet wird, muss darauf geachtet werden, dass der Schlüssel nicht kompromittiert wird.
Wenn Sie die Anwendung entwickeln, die die JWTs verbraucht, können Sie HS256 sicher verwenden, da Sie die Kontrolle darüber haben, wer die geheimen Schlüssel verwendet. Wenn Sie andererseits keine Kontrolle über den Client haben oder keine Möglichkeit haben, einen geheimen Schlüssel zu sichern, ist RS256 besser geeignet, da der Verbraucher nur den öffentlichen (gemeinsam genutzten) Schlüssel kennen muss.
Da der öffentliche Schlüssel normalerweise von Metadatenendpunkten zur Verfügung gestellt wird, können Clients so programmiert werden, dass der öffentliche Schlüssel automatisch abgerufen wird. Wenn dies der Fall ist (wie bei den .Net Core-Bibliotheken), müssen Sie weniger an der Konfiguration arbeiten (die Bibliotheken rufen den öffentlichen Schlüssel vom Server ab). Symmetrische Schlüssel müssen dagegen außerhalb des Bandes ausgetauscht werden (um einen sicheren Kommunikationskanal zu gewährleisten) und manuell aktualisiert werden, wenn ein Signaturschlüssel-Rollover auftritt.
Auth0 bietet Metadatenendpunkte für die Protokolle OIDC, SAML und WS-Fed, an denen die öffentlichen Schlüssel abgerufen werden können. Sie können diese Endpunkte unter den "Erweiterten Einstellungen" eines Clients sehen.
Der OIDC-Metadatenendpunkt hat beispielsweise die Form
https://{account domain}/.well-known/openid-configuration
. Wenn Sie zu dieser URL navigieren, wird ein JSON-Objekt mit einem Verweis auf angezeigthttps://{account domain}/.well-known/jwks.json
, das den öffentlichen Schlüssel (oder die öffentlichen Schlüssel) des Kontos enthält.Wenn Sie sich die RS256-Beispiele ansehen, werden Sie feststellen, dass Sie den öffentlichen Schlüssel nirgendwo konfigurieren müssen: Er wird automatisch vom Framework abgerufen.
quelle
In der Kryptographie werden zwei Arten von Algorithmen verwendet:
Symmetrische Algorithmen
Ein einzelner Schlüssel wird zum Verschlüsseln von Daten verwendet. Bei der Verschlüsselung mit dem Schlüssel können die Daten mit demselben Schlüssel entschlüsselt werden. Wenn Mary beispielsweise eine Nachricht mit dem Schlüssel "my-secret" verschlüsselt und an John sendet, kann er die Nachricht mit demselben Schlüssel "my-secret" korrekt entschlüsseln.
Asymmetrische Algorithmen
Zwei Schlüssel werden zum Ver- und Entschlüsseln von Nachrichten verwendet. Während ein Schlüssel (öffentlich) zum Verschlüsseln der Nachricht verwendet wird, kann der andere Schlüssel (privat) nur zum Entschlüsseln verwendet werden. John kann also sowohl öffentliche als auch private Schlüssel generieren und dann nur den öffentlichen Schlüssel an Mary senden, um ihre Nachricht zu verschlüsseln. Die Nachricht kann nur mit dem privaten Schlüssel entschlüsselt werden.
HS256- und RS256-Szenario
Diese Algorithmen werden NICHT zum Ver- / Entschlüsseln von Daten verwendet. Sie werden vielmehr verwendet, um den Ursprung oder die Echtheit der Daten zu überprüfen. Wenn Mary eine offene Nachricht an Jhon senden muss und er überprüfen muss, ob die Nachricht sicher von Mary stammt, kann HS256 oder RS256 verwendet werden.
HS256 kann mit einem einzigen Schlüssel eine Signatur für eine bestimmte Datenprobe erstellen. Wenn die Nachricht zusammen mit der Signatur gesendet wird, kann die empfangende Partei denselben Schlüssel verwenden, um zu überprüfen, ob die Signatur mit der Nachricht übereinstimmt.
RS256 verwendet dazu ein Schlüsselpaar. Eine Signatur kann nur mit dem privaten Schlüssel generiert werden. Und der öffentliche Schlüssel muss verwendet werden, um die Signatur zu überprüfen. In diesem Szenario kann Jack, selbst wenn er den öffentlichen Schlüssel findet, keine gefälschte Nachricht mit einer Signatur erstellen, um sich als Mary auszugeben.
quelle
Es gibt einen Unterschied in der Leistung.
Einfach ausgedrückt
HS256
ist es ungefähr 1 Größenordnung schneller alsRS256
bei der Überprüfung, aber ungefähr 2 Größenordnungen schneller alsRS256
beim Ausstellen (Signieren).Lassen Sie sich nicht auf die tatsächlichen Zahlen ein, sondern denken Sie nur respektvoll an sie.
[Program.cs]
quelle
kurze Antwort, spezifisch für OAuth2,
quelle