Kennwortauthentifizierung


Passwort-Authentifizierung wird in vielen Systemen verwendet, für die Authentifizierung der Identitätdes von einem oder beiden Peers einer Verbindung. Dieses Dokument hilft Ihnen sicherer Passwort-Authentifizierungsschemas mit symmetrischen kryptographischen Techniken zu entwerfen.


Passwort-Authentifizierung mit symmetrischen Verfahren



@page {Größe: 21cm 29,7 cm; Margin: 2 cm}
P {Margin-Bottom: 0,21 cm}
H1 {Margin-Bottom: 0,21 cm}
H1.Western {Font-Family: 'Arial', serifenlose; Schriftgröße: 16pt}
H1.cjk {Font-Family: 'Lucida Sans Unicode'; Schriftgröße: 16pt}
H1.CTL {Font-Family: 'Tahoma'; Schriftgröße: 16pt}
H2 {Margin-Bottom: 0,21 cm}
H2.Western {Schriftfamilie: 'Arial', serifenlose; Schriftgröße: 14pt;-Schriftschnitt: kursiv}
H2.cjk {Schriftgröße: 14pt;-Schriftschnitt: kursiv}
H2.CTL {Schriftgröße: 14pt;-Schriftschnitt: kursiv}
H3 {Margin-Bottom: 0,21 cm}
H3.Western {Schriftfamilie: 'Arial', sans-Serif}
H4 {Margin-Bottom: 0,21 cm}
H4.Western {Schriftfamilie: 'Arial', serifenlose; Schriftgröße: 11pt;-Schriftschnitt: kursiv}
H4.cjk {Schriftgröße: 11pt;-Schriftschnitt: kursiv}
H4.CTL {Schriftgröße: 11pt;-Schriftschnitt: kursiv}
-->

Passwort
Authentifizierung


von Henrick Hellström,
StreamSec, 2004. Alle Rechte vorbehalten.

Passwort-Authentifizierung wird in vielen Systemen verwendet, für die Authentifizierung der Identitätdes von einem oder beiden Peers einer Verbindung. Die meisten Systeme, die heute verwendet werden sind trivial unsicher, auch wenn sie kryptografische Algorithmen wie Hashfunktionen und Verschlüsselungsfunktionen beschäftigen. Dieses Papier wird Ihnen einige häufige Schwächen erkennen und sicherer Passwort-Authentifizierungsschemas mit symmetrischen kryptographischen Techniken zu entwerfen.
Allgemeine Hinweise

Jedes Passwort-basierte Authentifizierungssystem ist ohne Ausnahmen für bestimmte Angriffe anfällig Wenn Sie unsichere Kennwörter verwenden. Umgekehrt verwenden ein sicheres Kennwort, oder vielmehr Kennsatz, werden nicht tun Sie etwas gutes wenn Sie es für schwache oder ernsthaft gefährdete Authentifizierungssystemen verwenden. Einige allgemeine Ratschläge sind:


  • Verwenden Sie Kennwörter und übergeben Sie Phrasen, die Sie sich merken können. Notieren Sie Ihr Kennwort, oder speichern Sie es in eine Datei irgendwo müssend ist selten eine gute Sache.

  • Lange: Skipass Phrasen mit mehreren Sätzen anstatt kurze obskuren Kennwörter mit nichtalphabetischen Zeichen. Erinnerung an ein sicheres Passwort mit 20 Buchstaben, Ziffern und Sonderzeichen einschließlich ist für die meisten Menschen viel härter als Erinnerung an einen 128 Buchstaben-Kennsatz bestehend verständlicheSätze.

  • Verwenden Sie dasselbe Lieblings Satz für jeden Dienst übergeben, die Sie kennen beschäftigt ein sicheres Passwort-Authentifizierungsschema. Es ist schlecht, da Sie keine Vielzahl von Passwörtern für verschiedene Dienste. Sie sollten Ihr Gehirn etwas produktiver verwenden.

  • Zur gleichen Zeit müssen Sie Bedenken, dass die meisten Dienste leider nicht sicheres Passwort Authentifizierungsschemas Gebrauch machen. Wenn Sie die gleiche verwenden kann Wortfolge für Bothservice A und B, Ihr Zugang zum Dienst A-Dienst beeinträchtigt werden wenn Dienst B oder gefährdet wird. Hätten beide Dienste Authentifizierungsschemas sicheres Passwort verwendet wäre dies kein Problem gewesen.


Das Problem

Alice möchte jemand beweisen, dass sie glaubt, Bob, dass sie Alice ist. Alice möchte tun ohne geheime Daten zu Eve (wer das Gespräch mithören ist) oder Mallory (wer eine Tendenz zu Bob und Alice zu imitieren, um sie zu enthüllen ihre Geheimnisse verleiten hat) preiszugeben. Darüber hinaus Alice möchte mithilfe derselben Methode der Authentifizierung für den Nachweis ihrer Identität zu Sue und sie wollen nicht ihre eigene, Bob oder Sue die Sicherheit gefährdet, für den Fall, dass Bob oder Sue gefährdet wird.
Kryptografischen Primitive
Hash-Funktionen

Kryptographisch sichere Hashfunktion wird Eingabe beliebiger Länge für eine feste Größe Ausgabecode, bekannt als Digest der Eingabe verändern. Die Hash-Funktion hat die folgenden Eigenschaften:


  1. Es ist rechnerisch unmöglich, alle Daten zu finden, die zu einer gegebenen willkürlichen verdauen hasht. Mit anderen Worten eine kryptographisch sichere Hashfunktion kann nicht einfach umgekehrt werden aber ist rechnerisch Einbahn. Diese Eigenschaft ist auch bekannt als primäre Preimage -Resistenz.

  2. Es ist rechnerisch unmöglich, zwei verschiedene Eingänge, die demselben Digest Hashwert zu finden. Kryptographisch sichere Hashfunktion ist Kollision frei. Diese Eigenschaft ist auch Sekundär Preimage-Widerstand.


Als Konsequenz dieser beiden Eigenschaften kann eine Hash-Funktion für folgenden Zweck verwendet:

(*) Lassen Sie TA TB werden zwei Eingänge und DA und DB die jeweiligen Digest-Werte dieser beiden Eingaben werden lassen. Wenn DA = DB dann ist es
ist sicher ableiten, dass TA = TB.
StreamSec-Tools-Nutzung

Der folgende Code berechnet den SHA-1-Digest des Inhalts der AnsiString aText. Der SHA-1-Digest ist eine 20-Zeichenfolge bestehend aus möglicherweise nicht druckbare Zeichen in 8-Bit.
verwendet
StSecUtils, stSHA1;
...
lDigest: = DigestString(haSHA1,aText);
Beispiel 1 (Fair aber nicht sichere Nutzung)

Alice sendet die Digest DA ihre geheimen Kennworts TA an Bob. Bob sucht Alice in seinem Benutzer-Datatable, Ruft den gespeicherten Wert DA' und überprüft, dass DA = DA'. Der tatsächliche Wert der T-A ist während dieser Proceess nicht offenbart.
Beispiel 2 (Angriff)

Eva begreift den Wert DA per Alice in Beispiel 1. Eve wird an Bob und DAsendet. Bob ist in dazu verleitet, zu glauben, dass Eve Alice ist. Dies wird als ein Replay-Angriff bezeichnet.
Beispiel 3 (Angriff)

Harry wird eine große Anzahl von Persönlichkeiten mit Bobs Dienst registriert. Später Harry ist in der Lage, Bobs Benutzer Datatable zu stehlen. Harry führt eine Abfrage für die Datatable und findet heraus, dass der Wert DA für Alice identisch mit dem Wert DB für eine der Harrys gefälschten Persönlichkeiten ist. Harry ist in der Lage, zu folgern, dass Alices geheimes Kennwort TA identisch mit dem Kennworts TB für seine entsprechenden gefälschte Persönlichkeit ist.
Beispiel 4 (Einschränkung)

Es ist nicht ungewöhnlich, dass Distributoren von Open Source Software das MD5-Digest jeder Datei zusammen mit der Datei selbst veröffentlichen. Dieses Schema stellt sehr wenig Sicherheit aufgrund der allgemeinen Eigenschaften von Hash-Funktionen. Wenn Sie sind ein paar A, DA> Sie sind in der Lage zu überprüfen, ob DA in der Tat eine gültige Digest der TA ist, aber es keine Möglichkeit für Sie gibt zu überprüfen, ob TA
und DA haben
nicht beide wurde ersetzt durch eine andere Person als den Verteiler. Wer
einen gültigen MD5-Digest nichts generieren kann.
Freigestellte Hashfunktionen

Eine verschlüsselter Hash-Funktion ist eine Hash-Funktion, mit der zusätzlichen Eigenschaft, dass ein gültiger Digest (auch bekannt als Message Authentication Code oder MAC) nur von einer Person berechnet werden kann, einen bestimmten geheimen Schlüssel kennt. Die häufigste Art der Keyed-Hash-Funktion ist HMAC. Die HMAC-Funktion arbeitet mit allen MD4 Typ Hash-Funktionen, wie z. B. MD5 und RipeMD und SHA Familie von Hash-Funktionen, und funktioniert durch die Eingabe zweimal hashing und mischen in das Schlüsselmaterial mit verschiedenen Polsterungen jedes Mal.

Freigestellte Hashfunktionen verwenden symmetrische Schlüssel, was bedeutet, dass sowohl die
Absender und Empfänger einer Nachricht müssen den gleichen Schlüssel herstellen.

(*) Lassen Sie TA TB MA und MB die entsprechende MAC-Werte dieser beiden Eingaben werden zu lassen und werden zwei Eingänge, KA und KB zwei Schlüssel. Wenn MA MB =, dann es sicher ist ableiten, die beide TA = T-B und KA = K-B.
StreamSec-Tools-Nutzung

Der folgende Code berechnet den HMAC-SHA-1-Wert des Inhalts der AnsiString aText. Der MAC ist bei den meisten eine Animationslänge-Zeichenkette (höchstens die gleiche Länge wie die Digest-Länge des zugrunde liegenden Hash-Funktion) möglicherweise nicht druckbare Zeichen in 8-Bit bestehend.
verwendet
StSecUtils, stSHA1;
...
lMAC: = HMACString(haSHA1,aKey,aLength,aText);
Beispiel 5 (Fair aber nicht sichere Nutzung)

Alice sendet die MAC MKA der Zeichenfolge 'Alice' und ihr geheimes Passwort TA als Schlüssel an Bob. Bob sucht Alice in seinem Benutzer-Datatable, Ruft den gespeicherten Wert MKA' und überprüft, dass M-KA = MKA'. Der tatsächliche Wert der T-A ist während dieser Proceess nicht offenbart.
Beispiel 6 (Angriff)

Eva begreift den Wert MKA per Alice in Beispiel 1. Eve wird an Bob und sendet MKA. Bob ist in dazu verleitet, zu glauben, dass Eve Alice ist.
Beispiel 7 (gescheiterten Angriff)

Harry wird eine große Anzahl von Persönlichkeiten mit Bobs Dienst registriert. Später Harry ist in der Lage, Bobs Benutzer Datatable zu stehlen. Harry führt eine Abfrage für die Datatable aber MAK-Werte nicht finden kann, die sind identisch, da die HMAC Kollision frei und Bob die Regel erzwingt, dass die Benutzernamen müssen eindeutig sein.
Beispiel 8 (Einschränkung)

Mit einer Keyed-Hash-Funktion für den Nachweis von Integrität und Authentizität der öffentliche Dateien ist nur selten eine Option.

Erstens verwendet ein HMAC einen symmetrischen Schlüssel. Dies bedeutet, dass der Absender und der Empfänger einen gültigen MAC bestimmten Eingabetext generieren können. Wenn Alice, Bob und Carol denselben geheimen Schlüssel HMAC teilen, besteht keine Möglichkeit für Alice zu sagen, ob ein gegebener MAC-Wert von Bob oder von Carol berechnet wurde.

Zweitens wird eine verschlüsselter Hash-Funktion keine Sicherheit über eine reguläre (unkeyed) Hashfunktion Leistungen, wenn der Schlüssel geheim gehalten wird. Wenn Sie ein paar A, MKA veröffentlichen> niemand kennt, nicht die Taste K wird sein können, ob MKA ist in der Tat eine gültige MAC TA.
Andere Konzepte
Salz und Nonce

Die Unterscheidung zwischen einem Salz und eine Nonce schwebt, sondern ist aus Gründen der Übersichtlichkeit hier erwähnt:


  • Beide sind in einer Weise erzeugt, mit der sie im Kontext einzigartig machen z.B. durch einen kryptografisch sichere Zufallsgenerator wie Schafgarbe.

  • Beide werden so verwendet, dass sie müssen nicht geheim gehalten werden, sondern über ungeschützte Kanäle übertragen werden können.

  • Beide sind in der Regel mit geheimen Material während einer Art Hashoperation gemischt.

  • Das Salz dient in der Regel zur Erzeugung eines Verifier-Wert, der den das Salz und das Passwort-Hash besteht. Das Salz und die prüfende Instanz werden gemeinsam an den Empfänger (Server)-Seite für die Lebensdauer des Kennworts gespeichert. Wenn nicht zufällig das Salz könnte die Verkettung der Empfänger Benutzername und der Absender-Benutzername.

  • Ein Salz dient in der Regel genauer für die Herstellung von Kennwort hackt in Server Seite Benutzer Datatables einzigartige gespeichert. Beispiel 4 und Beispiel 8 oben zu übertragen.

  • Eine Nonce dient in der Regel nur einmal für eine einzelne Sitzung Handshake oder für eine einzelne Nachricht. Wenn es nicht nach dem Zufallsprinzip generiert wird, könnte es einen Zeitstempel oder eine automatisch inkrementierte persistente Zähler. Nonces dienen in der Regel im Challenge-Response-Protokolle, um Angriffe zu vereiteln , der in Beispiel 2 und Beispiel 6 oben beschriebenen Art.


NTLM-Protokolle

Ein gemeinsamer Weg zu vermeiden, einige der in den vorherigen Abschnitten beschriebenen Attacken ist Challenge-Response-Protokolle verwenden. Diese Protokolle mischen in zufälligen Material mit den Passwörtern. Fertig, gerade dies macht es unmöglich gültigen Protokollnachrichten ohne die geheimen Informationen zu generieren, die nur die berechtigten Beteiligten davon ausgegangen sind besitzen.

Diese Protokolle werden nur ausgegeben, eine binäre ja oder Nein auf die Frage: waren die eingehenden Protokollnachrichten verbindlich? Aufwändiger Protokolle werden zusätzlich ein Sitzungsschlüssel ausgeben, die für den Schutz der Vertraulichkeit und Nachrichtenintegrität die folgenden Massen-Nachrichten verwendet wird. Die Vorteile für die Sicherheit der Verwendung solcher Protokolle sollte nicht unterschätzt werden, da sie zur Folge haben, dass die Vertraulichkeit und Integrität des Inhalts Massen ist eng verknüpft mit der Entity-Authentifizierung während der Authentifizierungsphase des Protokolls eingerichtet.

NTLM-Protokolle sollen traditionell entweder zwei Durchgängen oder 3-Pass sein. Zwei Durchgängen Challenge-Response-Protokolle dienen zur Authentifizierung des Clients zu dem Server aber nicht auf dem Server an den Client. In diesem Abschnitt werden zwei 3-Pass-Protokolle, die dem Client und dem Server miteinander authentifiziert werden.
Protokoll-#1

Dieses Protokoll dient der Situationen wo die Geschwindigkeit der
Netzwerk ist der größte Flaschenhals.
Vorbereitungen:

Jede Client-Entität Carol registriert sich selbst mit der Server-Einheit
Sue. Carol oder Sue generiert die folgenden Werte:

Salz [Carol]: = HMACString(haSHA1,Realname[Carol],20,Realname[Sue]);

Prüfer [Carol]: = HMACString(haSHA1,Salt[Carol],20,Password[Carol]);

Sue registriert 'RealName' [Carol] und Verifier [Carol].


  • Es ist nicht wichtig für den Betrieb des eigentlichen Protokolls, wenn Carol oder Sue den Verifier [Carol] Wert generiert, da Sue Passwort [Carol] nicht zu jedem Zeitpunkt während das eigentliche Protokoll verwendet wird. Es ist jedoch wichtig, dass die Werte, die zwischen Carol und Sue, während der Anmeldephase gesendet werden sind garantiert vertraulich und verbindlich sein. Darüber hinaus sollten Carol Verifier [Carol] senden anstatt Passwort [Carol] Wenn sie das gleiche Passwort für andere Zwecke wiederverwenden will. Es ist rechnerisch unmöglich Verifier [Carol] Password [Carol] abgeleitet.

  • Der Wert des Salzes [Carol] muss eindeutig sein. Insbesondere sollte 'RealName' [Sue] festgelegt werden, um alle Informationen, die die Particul vollständig zu identifizieren, wird service bezeichnet 'Sue' hier, z. B. einen vollständigen URI einschließlich Protokoll, Hostname und Pfad, eventuell gemischt mit statischen Informationen aus Sue's Server Hallo Nachricht. Alternativ Salz [Carol] konnte nach dem Zufallsprinzip generiert werden, aber das würde erfordern, dass Salz [Carol] von Sue gespeichert und an Carol während des Protokolls übermittelt. Es wird angenommen, wenn Salz [Carol] gemäß der Definition oben, beide Carol generiert und Sue kann den Wert zu einem späteren Zeitpunkt selbständig regenerieren.

  • Sue müssen geheim halten den Verifier [Carol] Wert. Es werden in der Regel in einer Datatable Benutzer gespeichert und wenn diese Datatable ist gefährdet jeder Benutzer allerdings um neue Verifier-Werte zu generieren. Es ist wichtig Tonote, dass es unmöglich ist, neue Verifier generieren Werte, wenn keiner der Werte 'RealName' [Sue], 'RealName' [Carol] noch Passwort [Carol] geändert wird, da Verifier [Carol] eine deterministische Funktion dieser Werte ist. Verklagen müssen folglich 'RealName' [Sue] ändern, wenn die oben beschriebenen Funktionen verwendet werden und die Benutzer-Datatable ist gefährdet. Eine Alternative ist die Verwendung von zufällig generierten Salz Werte.


Schritte und Nachrichten:

  1. Sue generiert eine zufällige Nonce Nonce_S.

  2. Sue-Carol >:Nonce_S

  3. Carol generiert eine zufällige Nonce_C.

  4. Carol berechnet Verifier [Carol], wie oben beschrieben.

  5. Carol berechnet Temp1: = HMACString(haSHA1,Verifier[Carol],20,Nonce_S);

  6. Carol berechnet Response_C: = HMACString(haSHA1,Temp1,20,Nonce_C);

  7. Carol-Sue >: 'RealName' [Carol], Nonce_C, Response_C

  8. Sue sucht 'RealName' [Carol] in der Benutzer-Datatable und ruft Verifier [Carol].

  9. Sue Response_C berechnet, wie oben beschrieben und vergleicht es mit dem Wert von Carol erhalten. Wenn die Werte nicht übereinstimmen, wird Sue abgebrochen, was die Protokoll-Ausgabe 'Nein'.

  10. Sue berechnet Temp2: = HMACString(haSHA1,Verifier[Carol],20,Nonce_C);

  11. Sue berechnet Response_S: = HMACString(haSHA1,Temp2,20,Nonce_S);

  12. Sue -> Carol: Response_S

  13. Carol Response_S berechnet, wie oben beschrieben und vergleicht es mit dem Wert von Sue erhalten. Wenn die Werte nicht Carol Abbrüchen übereinstimmen, Ausgabe im Protokoll 'Nein'.

  14. Ausgabe 'Ja'.


Protokoll #2

Dieses Protokoll ist eine Variation des Protokolls Nr. 1 mit dem Unterschied, den der Salz [Carol] Wert ist zufällig generiert und in Sues Benutzer Datatable gespeichert. Die Auswirkungen dieser wurden bereits erörtert.
Schritte und Nachrichten:


  1. Carol generiert eine zufällige Nonce_C.

  2. Carol-Sue >: 'RealName' [Carol], Nonce_C

  3. Sue sucht 'RealName' [Carol] in der Benutzer-Datatable und ruft Salz [Carol], Verifier [Carol].

  4. Sue generiert einen zufälligen Wert Herausforderung

  5. Sue berechnet Nonce_S: = HMACString(haSHA1,Challenge,20,Realname[Sue]);

  6. Sue berechnet Temp1: = HMACString(haSHA1,Verifier[Carol],20,Nonce_C);

  7. Sue berechnet Response_S: = HMACString(haSHA1,Temp1,Nonce_S);

  8. Sue-Carol >:Herausforderung, Salz [Carol], Response_S

  9. Carol berechnet Verifier [Carol]: = HMACString(haSHA1,Salt[Carol],20,Password[Carol]);

  10. Carol berechnet Nonce_S, wie oben beschrieben.

  11. Carol Response_S berechnet, wie oben beschrieben und vergleicht es mit dem Wert von Sue erhalten. Wenn die Werte nicht Carol Abbrüchen übereinstimmen, Ausgabe im Protokoll 'Nein'.

  12. Carol berechnet Temp2: = HMACString(haSHA1,Verifier[Carol],20,Nonce_S);

  13. Carol berechnet Response_C: = HMACString(haSHA1,Temp2,20,Nonce_C);

  14. Carol-Sue >: Response_C

  15. Sue Response_C berechnet, wie oben beschrieben und vergleicht es mit dem Wert von Carol erhalten. Wenn die Werte nicht übereinstimmen, wird Sue abgebrochen, was die Protokoll-Ausgabe 'Nein'.

  16. Ausgabe 'Ja'.


Andere Überlegungen

Ein gemeinsames Merkmal der Protocol #1 und #2-Protokolls ist, dass die ausschließliche Verwendung von symmetrischen kryptografischen Primitive (HMAC) Benutzer Datatable extrem empfindlich auf Kompromisse macht. Die Protokolle werden nur Entitätsauthentifizierung bieten, wenn Sue verwaltet die Benutzer Datatable sowohl authentisch als auch vertraulich zu halten. Mithilfe eines Salzes in die Berechnung des dem Gutachter schätzt, wird zum Schutz der Vertraulichkeit von Kennwörtern, aber es wird nicht zu verhindern, dass einen Angreifer, der die Verifier-Werte vom simulieren die Schritte und die Botschaften von Carol in jedem Protokoll #1 oder #2-Protokolls erhält. Wenn ein solcher Schutz erforderlich ist ein anderes Protokoll, die kryptografischen Primitive, Asymmetic, z. B. SRP, beschäftigt sollte verwendet werden.

Ein weiterer Aspekt ist, dass Protokoll #1 und #2-Protokolls nur Ausgabe eine Binärdatei ja oder Nein, was bedeutet, dass die Ausgabe des Protokolls nicht unbedingt die Vertraulichkeit und die Integrität des Inhalts Massen der Sitzung verknüpft ist. Insbesondere ist darauf hinzuweisen, dass die Nonces, die als Teil der Protokolle dienen gegen Replay-Angriffe der in Beispiel 2 und Beispiel 6 beschriebenen Art schützt, aber sie nicht gegen Man-In-The-Middle-Angriffe schützt:
Beispiel 9 (Angriff)

Dies ist ein Beispiel wie ein Man-In-The-Middle (Mallory) Protocol #2 angreifen kann. Es gibt eine entsprechende Attacke gegen Protocol #1.


  1. Mallory tricks Carol zu glauben, dass Mallory Sue ist. Die Schwierigkeit, diese Täuschungen hängt von einer Vielzahl von Faktoren wie die Integrität des Netzwerks sowie mögliche Implementierung Mängel in der Mechanik verwendeten Carol für einen bestimmten Dienst 'RealName' [Sue] zuordnen.

  2. Carol -> Mallory: 'RealName' [Carol], Nonce_C

  3. Mallory -> Sue: 'RealName' [Carol], Nonce_C

  4. Sue-Mallory >:Herausforderung, Salz [Carol], Response_S

  5. Mallory-Carol >:Herausforderung, Salz [Carol], Response_S

  6. Carol -> Mallory: Response_C

  7. Mallory -> Sue: Response_C

  8. Sue gibt 'True'. Carol gibt 'True'.


Der letzte Schritt könnte dazu führen, dass Carol, dass sie überprüft hat denkt, dass Mallory Sue ist oder Sue denkt, dass sie sich vergewissert hat, dass Mallory Carol ist. Es ist wichtig zu beachten, dass weder Protokoll #1 noch Protokoll #2 solche Garantien geben wird. Sie werden nur beweisen, dass die Nachrichten von authentifizierten Entität, stammt aber nicht , dass diese Entität unbedingt identisch mit den anderen Peer. Beachten Sie auch, dass dies ist nicht unbedingt eine schlechte Sache (wie Proxy, Middle-Tier und Load Balancing), aber dass die Sicherheitsauswirkungen machen es oft sehr schwer, diese zu verwenden Protokolle entsprechend.
Asymmetrische NTLM-Protokolle

Dieser Abschnitt stellt ein einzelnes Protokoll, das Onlined nach ist die
Sichere Remote Password Authentication-Protokoll (SRP) by Thomas Wu von der Stanford University. Das Protokoll ist relativ komplex, sondern bietet eine Reihe von Sicherheitsdiensten, die macht es interessant, das mal bei deren Umsetzung zu investieren. Zitiert aus der original-Papier:


  • Ein Angreifer mit weder des Wirtes Passwort-Datei als auch das Kennwort des Benutzers kann keinen Wörterbuch-Angriff auf das Kennwort bereitstellen. Gegenseitiger Authentifizierung wird in diesem Szenario erreicht.



  • Ein Angreifer, der die Host-Passwort-Datei erfasst kann nicht direkt manipulieren Benutzer-zu-Host-Authentifizierung und erlangen Zugriff auf den Host ohne eine teure Wörterbuch-Suche.



  • Ein Angreifer, der den Host, Kompromisse nicht erhalten die das Passwort von einem legitimen Authentifizierungsversuch.



  • Ein Angreifer, der den Sitzungsschlüssel erfasst können damit keine Wörterbuch-Angriff auf das Kennwort bereitstellen.



  • Ein Angreifer, der das Kennwort des Benutzers erfasst können damit keine um Sitzungsschlüssel des letzten Sitzungen zu gefährden.


Beispiel

Unten ist der Clientcode SRP, genommen von der SRP-Demo im Ordner 'Varianten'
var
lA, lB, lX, lV, lS: Variant;
lAPriv: Variante;
lSalt: String;
lK: OctetString;
lM1, lM2: String;
beginnen
Verbinden;
/ / a, A ist der Client ephemere Schlüssel, Diffie-Hellman-Stil
lAPriv: = RandomPrivateKey;
lA: = VarMPIntegerExpMod(2,lAPriv,P);
/ / C -> S: Benutzer, A
Send ('Nutzer', edtUsername.Text);
Senden Sie ('A', lA);
/ / S - C: Salz, B
lSalt: = Read ('Salz');
lB: = Read ('B');
/ / B ist der Server öffentlichen ephemere Schlüssel, Diffie-Hellman-Stil, gemischt
/ / mit dem Client V-Wert, der in der Server-Benutzer-Datatable gespeichert wird
/ / zusammen mit Salz und User.
/ / Client darf abbrechen, wenn B = 0
if (lB mod P) = 0 dann beginnen
Fehler ('Autorisierung fehlgeschlagen');
end;
/ / X ist dem langfristigen privaten Schlüssel und das Kennwort abgeleitet ist
lX: = HashPassword(lSalt,edtUsername.Text,edtPassword.Text);
/ / V ist der Client 'Gutachter' oder langfristigen öffentlichen Schlüssel.
/ / Es dient im SRP-Protokoll so, dass es nicht abgeleitet werden kann von
/ / ein Angreifer aus der Protokollnachrichten. Dadurch wird einen Wörterbuchangriff
/ / gegen das Benutzerkennwort so hart wie das diskrete Log-Problem zu lösen
lV: = VarMPIntegerExpMod(2,lX,P);
/ / Der 'tatsächlichen' öffentlichen ephemere Serverschlüssel ist B-V. Es wird ausgelöst durch den Kunden
/ / mit einem Exponenten (a + u * X) verbirgt, die auch den Wert von X hinter der Härte von
/ / das diskrete Log-Problem. S ist der freigegebenen geheimen Ausgang dieser Operation
lS: = VarMPIntegerExpMod (lB-lV,
lAPriv + lX * CalculateU(lB),
P);
/ / K ist der freigegebenen Schlüssel, der von den geheimen S abgeleitet ist
lK: = SHA_Interleave(lS);
/ / M1 ist die Client-Fertig-Meldung. Es kann nur berechnet werden, vom Kunden
/ / und vom Server. Der Zweck dieser Meldung ist zu beweisen, dass der Client
/ / abgeleitet wie der Server den gleichen Wert von K und folglich, die der Client weiß
/ / das Passwort
lM1: = FinishHashClient (edtUserName.Text,
lSalt,
lA,
lB,
lK);
// C -> S: M1
Senden Sie ('M1', lM1);
// S -> C: M2
lM2: = Read ('M2');
/ / M2 wird die fertige Nachricht des Servers. Es kann nur vom Server berechnet werden
/ / und durch den Kunden. Der Zweck dieser Meldung ist zu beweisen, dass der Server
/ / abgeleitet von den gleichen Wert von K als Client, und damit, die der Server kennt
/ / V-Gutachter-Wert
Wenn lM2 <> FinishHashServer(lA,lM1,lK) dann beginnen
Fehler ('Autorisierung fehlgeschlagen');
anderes Ende
SetKey(lK);









Kennwortauthentifizierung


Kennwortauthentifizierung : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Passwort-Authentifizierung wird in vielen Systemen verwendet, für die Authentifizierung der Identitätdes von einem oder beiden Peers einer Verbindung. Dieses Dokument hilft Ihnen sicherer Passwort-Authentifizierungsschemas mit symmetrischen kryptographischen Techniken zu entwerfen.


Passwort-Authentifizierung mit symmetrischen Verfahren



@page {Größe: 21cm 29,7 cm; Margin: 2 cm}
P {Margin-Bottom: 0,21 cm}
H1 {Margin-Bottom: 0,21 cm}
H1.Western {Font-Family: 'Arial', serifenlose; Schriftgröße: 16pt}
H1.cjk {Font-Family: 'Lucida Sans Unicode'; Schriftgröße: 16pt}
H1.CTL {Font-Family: 'Tahoma'; Schriftgröße: 16pt}
H2 {Margin-Bottom: 0,21 cm}
H2.Western {Schriftfamilie: 'Arial', serifenlose; Schriftgröße: 14pt;-Schriftschnitt: kursiv}
H2.cjk {Schriftgröße: 14pt;-Schriftschnitt: kursiv}
H2.CTL {Schriftgröße: 14pt;-Schriftschnitt: kursiv}
H3 {Margin-Bottom: 0,21 cm}
H3.Western {Schriftfamilie: 'Arial', sans-Serif}
H4 {Margin-Bottom: 0,21 cm}
H4.Western {Schriftfamilie: 'Arial', serifenlose; Schriftgröße: 11pt;-Schriftschnitt: kursiv}
H4.cjk {Schriftgröße: 11pt;-Schriftschnitt: kursiv}
H4.CTL {Schriftgröße: 11pt;-Schriftschnitt: kursiv}
-->

Passwort
Authentifizierung


von Henrick Hellström,
StreamSec, 2004. Alle Rechte vorbehalten.

Passwort-Authentifizierung wird in vielen Systemen verwendet, für die Authentifizierung der Identitätdes von einem oder beiden Peers einer Verbindung. Die meisten Systeme, die heute verwendet werden sind trivial unsicher, auch wenn sie kryptografische Algorithmen wie Hashfunktionen und Verschlüsselungsfunktionen beschäftigen. Dieses Papier wird Ihnen einige häufige Schwächen erkennen und sicherer Passwort-Authentifizierungsschemas mit symmetrischen kryptographischen Techniken zu entwerfen.
Allgemeine Hinweise

Jedes Passwort-basierte Authentifizierungssystem ist ohne Ausnahmen für bestimmte Angriffe anfällig Wenn Sie unsichere Kennwörter verwenden. Umgekehrt verwenden ein sicheres Kennwort, oder vielmehr Kennsatz, werden nicht tun Sie etwas gutes wenn Sie es für schwache oder ernsthaft gefährdete Authentifizierungssystemen verwenden. Einige allgemeine Ratschläge sind:


  • Verwenden Sie Kennwörter und übergeben Sie Phrasen, die Sie sich merken können. Notieren Sie Ihr Kennwort, oder speichern Sie es in eine Datei irgendwo müssend ist selten eine gute Sache.

  • Lange: Skipass Phrasen mit mehreren Sätzen anstatt kurze obskuren Kennwörter mit nichtalphabetischen Zeichen. Erinnerung an ein sicheres Passwort mit 20 Buchstaben, Ziffern und Sonderzeichen einschließlich ist für die meisten Menschen viel härter als Erinnerung an einen 128 Buchstaben-Kennsatz bestehend verständlicheSätze.

  • Verwenden Sie dasselbe Lieblings Satz für jeden Dienst übergeben, die Sie kennen beschäftigt ein sicheres Passwort-Authentifizierungsschema. Es ist schlecht, da Sie keine Vielzahl von Passwörtern für verschiedene Dienste. Sie sollten Ihr Gehirn etwas produktiver verwenden.

  • Zur gleichen Zeit müssen Sie Bedenken, dass die meisten Dienste leider nicht sicheres Passwort Authentifizierungsschemas Gebrauch machen. Wenn Sie die gleiche verwenden kann Wortfolge für Bothservice A und B, Ihr Zugang zum Dienst A-Dienst beeinträchtigt werden wenn Dienst B oder gefährdet wird. Hätten beide Dienste Authentifizierungsschemas sicheres Passwort verwendet wäre dies kein Problem gewesen.


Das Problem

Alice möchte jemand beweisen, dass sie glaubt, Bob, dass sie Alice ist. Alice möchte tun ohne geheime Daten zu Eve (wer das Gespräch mithören ist) oder Mallory (wer eine Tendenz zu Bob und Alice zu imitieren, um sie zu enthüllen ihre Geheimnisse verleiten hat) preiszugeben. Darüber hinaus Alice möchte mithilfe derselben Methode der Authentifizierung für den Nachweis ihrer Identität zu Sue und sie wollen nicht ihre eigene, Bob oder Sue die Sicherheit gefährdet, für den Fall, dass Bob oder Sue gefährdet wird.
Kryptografischen Primitive
Hash-Funktionen

Kryptographisch sichere Hashfunktion wird Eingabe beliebiger Länge für eine feste Größe Ausgabecode, bekannt als Digest der Eingabe verändern. Die Hash-Funktion hat die folgenden Eigenschaften:


  1. Es ist rechnerisch unmöglich, alle Daten zu finden, die zu einer gegebenen willkürlichen verdauen hasht. Mit anderen Worten eine kryptographisch sichere Hashfunktion kann nicht einfach umgekehrt werden aber ist rechnerisch Einbahn. Diese Eigenschaft ist auch bekannt als primäre Preimage -Resistenz.

  2. Es ist rechnerisch unmöglich, zwei verschiedene Eingänge, die demselben Digest Hashwert zu finden. Kryptographisch sichere Hashfunktion ist Kollision frei. Diese Eigenschaft ist auch Sekundär Preimage-Widerstand.


Als Konsequenz dieser beiden Eigenschaften kann eine Hash-Funktion für folgenden Zweck verwendet:

(*) Lassen Sie TA TB werden zwei Eingänge und DA und DB die jeweiligen Digest-Werte dieser beiden Eingaben werden lassen. Wenn DA = DB dann ist es
ist sicher ableiten, dass TA = TB.
StreamSec-Tools-Nutzung

Der folgende Code berechnet den SHA-1-Digest des Inhalts der AnsiString aText. Der SHA-1-Digest ist eine 20-Zeichenfolge bestehend aus möglicherweise nicht druckbare Zeichen in 8-Bit.
verwendet
StSecUtils, stSHA1;
...
lDigest: = DigestString(haSHA1,aText);
Beispiel 1 (Fair aber nicht sichere Nutzung)

Alice sendet die Digest DA ihre geheimen Kennworts TA an Bob. Bob sucht Alice in seinem Benutzer-Datatable, Ruft den gespeicherten Wert DA' und überprüft, dass DA = DA'. Der tatsächliche Wert der T-A ist während dieser Proceess nicht offenbart.
Beispiel 2 (Angriff)

Eva begreift den Wert DA per Alice in Beispiel 1. Eve wird an Bob und DAsendet. Bob ist in dazu verleitet, zu glauben, dass Eve Alice ist. Dies wird als ein Replay-Angriff bezeichnet.
Beispiel 3 (Angriff)

Harry wird eine große Anzahl von Persönlichkeiten mit Bobs Dienst registriert. Später Harry ist in der Lage, Bobs Benutzer Datatable zu stehlen. Harry führt eine Abfrage für die Datatable und findet heraus, dass der Wert DA für Alice identisch mit dem Wert DB für eine der Harrys gefälschten Persönlichkeiten ist. Harry ist in der Lage, zu folgern, dass Alices geheimes Kennwort TA identisch mit dem Kennworts TB für seine entsprechenden gefälschte Persönlichkeit ist.
Beispiel 4 (Einschränkung)

Es ist nicht ungewöhnlich, dass Distributoren von Open Source Software das MD5-Digest jeder Datei zusammen mit der Datei selbst veröffentlichen. Dieses Schema stellt sehr wenig Sicherheit aufgrund der allgemeinen Eigenschaften von Hash-Funktionen. Wenn Sie sind ein paar A, DA> Sie sind in der Lage zu überprüfen, ob DA in der Tat eine gültige Digest der TA ist, aber es keine Möglichkeit für Sie gibt zu überprüfen, ob TA
und DA haben
nicht beide wurde ersetzt durch eine andere Person als den Verteiler. Wer
einen gültigen MD5-Digest nichts generieren kann.
Freigestellte Hashfunktionen

Eine verschlüsselter Hash-Funktion ist eine Hash-Funktion, mit der zusätzlichen Eigenschaft, dass ein gültiger Digest (auch bekannt als Message Authentication Code oder MAC) nur von einer Person berechnet werden kann, einen bestimmten geheimen Schlüssel kennt. Die häufigste Art der Keyed-Hash-Funktion ist HMAC. Die HMAC-Funktion arbeitet mit allen MD4 Typ Hash-Funktionen, wie z. B. MD5 und RipeMD und SHA Familie von Hash-Funktionen, und funktioniert durch die Eingabe zweimal hashing und mischen in das Schlüsselmaterial mit verschiedenen Polsterungen jedes Mal.

Freigestellte Hashfunktionen verwenden symmetrische Schlüssel, was bedeutet, dass sowohl die
Absender und Empfänger einer Nachricht müssen den gleichen Schlüssel herstellen.

(*) Lassen Sie TA TB MA und MB die entsprechende MAC-Werte dieser beiden Eingaben werden zu lassen und werden zwei Eingänge, KA und KB zwei Schlüssel. Wenn MA MB =, dann es sicher ist ableiten, die beide TA = T-B und KA = K-B.
StreamSec-Tools-Nutzung

Der folgende Code berechnet den HMAC-SHA-1-Wert des Inhalts der AnsiString aText. Der MAC ist bei den meisten eine Animationslänge-Zeichenkette (höchstens die gleiche Länge wie die Digest-Länge des zugrunde liegenden Hash-Funktion) möglicherweise nicht druckbare Zeichen in 8-Bit bestehend.
verwendet
StSecUtils, stSHA1;
...
lMAC: = HMACString(haSHA1,aKey,aLength,aText);
Beispiel 5 (Fair aber nicht sichere Nutzung)

Alice sendet die MAC MKA der Zeichenfolge 'Alice' und ihr geheimes Passwort TA als Schlüssel an Bob. Bob sucht Alice in seinem Benutzer-Datatable, Ruft den gespeicherten Wert MKA' und überprüft, dass M-KA = MKA'. Der tatsächliche Wert der T-A ist während dieser Proceess nicht offenbart.
Beispiel 6 (Angriff)

Eva begreift den Wert MKA per Alice in Beispiel 1. Eve wird an Bob und sendet MKA. Bob ist in dazu verleitet, zu glauben, dass Eve Alice ist.
Beispiel 7 (gescheiterten Angriff)

Harry wird eine große Anzahl von Persönlichkeiten mit Bobs Dienst registriert. Später Harry ist in der Lage, Bobs Benutzer Datatable zu stehlen. Harry führt eine Abfrage für die Datatable aber MAK-Werte nicht finden kann, die sind identisch, da die HMAC Kollision frei und Bob die Regel erzwingt, dass die Benutzernamen müssen eindeutig sein.
Beispiel 8 (Einschränkung)

Mit einer Keyed-Hash-Funktion für den Nachweis von Integrität und Authentizität der öffentliche Dateien ist nur selten eine Option.

Erstens verwendet ein HMAC einen symmetrischen Schlüssel. Dies bedeutet, dass der Absender und der Empfänger einen gültigen MAC bestimmten Eingabetext generieren können. Wenn Alice, Bob und Carol denselben geheimen Schlüssel HMAC teilen, besteht keine Möglichkeit für Alice zu sagen, ob ein gegebener MAC-Wert von Bob oder von Carol berechnet wurde.

Zweitens wird eine verschlüsselter Hash-Funktion keine Sicherheit über eine reguläre (unkeyed) Hashfunktion Leistungen, wenn der Schlüssel geheim gehalten wird. Wenn Sie ein paar A, MKA veröffentlichen> niemand kennt, nicht die Taste K wird sein können, ob MKA ist in der Tat eine gültige MAC TA.
Andere Konzepte
Salz und Nonce

Die Unterscheidung zwischen einem Salz und eine Nonce schwebt, sondern ist aus Gründen der Übersichtlichkeit hier erwähnt:


  • Beide sind in einer Weise erzeugt, mit der sie im Kontext einzigartig machen z.B. durch einen kryptografisch sichere Zufallsgenerator wie Schafgarbe.

  • Beide werden so verwendet, dass sie müssen nicht geheim gehalten werden, sondern über ungeschützte Kanäle übertragen werden können.

  • Beide sind in der Regel mit geheimen Material während einer Art Hashoperation gemischt.

  • Das Salz dient in der Regel zur Erzeugung eines Verifier-Wert, der den das Salz und das Passwort-Hash besteht. Das Salz und die prüfende Instanz werden gemeinsam an den Empfänger (Server)-Seite für die Lebensdauer des Kennworts gespeichert. Wenn nicht zufällig das Salz könnte die Verkettung der Empfänger Benutzername und der Absender-Benutzername.

  • Ein Salz dient in der Regel genauer für die Herstellung von Kennwort hackt in Server Seite Benutzer Datatables einzigartige gespeichert. Beispiel 4 und Beispiel 8 oben zu übertragen.

  • Eine Nonce dient in der Regel nur einmal für eine einzelne Sitzung Handshake oder für eine einzelne Nachricht. Wenn es nicht nach dem Zufallsprinzip generiert wird, könnte es einen Zeitstempel oder eine automatisch inkrementierte persistente Zähler. Nonces dienen in der Regel im Challenge-Response-Protokolle, um Angriffe zu vereiteln , der in Beispiel 2 und Beispiel 6 oben beschriebenen Art.


NTLM-Protokolle

Ein gemeinsamer Weg zu vermeiden, einige der in den vorherigen Abschnitten beschriebenen Attacken ist Challenge-Response-Protokolle verwenden. Diese Protokolle mischen in zufälligen Material mit den Passwörtern. Fertig, gerade dies macht es unmöglich gültigen Protokollnachrichten ohne die geheimen Informationen zu generieren, die nur die berechtigten Beteiligten davon ausgegangen sind besitzen.

Diese Protokolle werden nur ausgegeben, eine binäre ja oder Nein auf die Frage: waren die eingehenden Protokollnachrichten verbindlich? Aufwändiger Protokolle werden zusätzlich ein Sitzungsschlüssel ausgeben, die für den Schutz der Vertraulichkeit und Nachrichtenintegrität die folgenden Massen-Nachrichten verwendet wird. Die Vorteile für die Sicherheit der Verwendung solcher Protokolle sollte nicht unterschätzt werden, da sie zur Folge haben, dass die Vertraulichkeit und Integrität des Inhalts Massen ist eng verknüpft mit der Entity-Authentifizierung während der Authentifizierungsphase des Protokolls eingerichtet.

NTLM-Protokolle sollen traditionell entweder zwei Durchgängen oder 3-Pass sein. Zwei Durchgängen Challenge-Response-Protokolle dienen zur Authentifizierung des Clients zu dem Server aber nicht auf dem Server an den Client. In diesem Abschnitt werden zwei 3-Pass-Protokolle, die dem Client und dem Server miteinander authentifiziert werden.
Protokoll-#1

Dieses Protokoll dient der Situationen wo die Geschwindigkeit der
Netzwerk ist der größte Flaschenhals.
Vorbereitungen:

Jede Client-Entität Carol registriert sich selbst mit der Server-Einheit
Sue. Carol oder Sue generiert die folgenden Werte:

Salz [Carol]: = HMACString(haSHA1,Realname[Carol],20,Realname[Sue]);

Prüfer [Carol]: = HMACString(haSHA1,Salt[Carol],20,Password[Carol]);

Sue registriert 'RealName' [Carol] und Verifier [Carol].


  • Es ist nicht wichtig für den Betrieb des eigentlichen Protokolls, wenn Carol oder Sue den Verifier [Carol] Wert generiert, da Sue Passwort [Carol] nicht zu jedem Zeitpunkt während das eigentliche Protokoll verwendet wird. Es ist jedoch wichtig, dass die Werte, die zwischen Carol und Sue, während der Anmeldephase gesendet werden sind garantiert vertraulich und verbindlich sein. Darüber hinaus sollten Carol Verifier [Carol] senden anstatt Passwort [Carol] Wenn sie das gleiche Passwort für andere Zwecke wiederverwenden will. Es ist rechnerisch unmöglich Verifier [Carol] Password [Carol] abgeleitet.

  • Der Wert des Salzes [Carol] muss eindeutig sein. Insbesondere sollte 'RealName' [Sue] festgelegt werden, um alle Informationen, die die Particul vollständig zu identifizieren, wird service bezeichnet 'Sue' hier, z. B. einen vollständigen URI einschließlich Protokoll, Hostname und Pfad, eventuell gemischt mit statischen Informationen aus Sue's Server Hallo Nachricht. Alternativ Salz [Carol] konnte nach dem Zufallsprinzip generiert werden, aber das würde erfordern, dass Salz [Carol] von Sue gespeichert und an Carol während des Protokolls übermittelt. Es wird angenommen, wenn Salz [Carol] gemäß der Definition oben, beide Carol generiert und Sue kann den Wert zu einem späteren Zeitpunkt selbständig regenerieren.

  • Sue müssen geheim halten den Verifier [Carol] Wert. Es werden in der Regel in einer Datatable Benutzer gespeichert und wenn diese Datatable ist gefährdet jeder Benutzer allerdings um neue Verifier-Werte zu generieren. Es ist wichtig Tonote, dass es unmöglich ist, neue Verifier generieren Werte, wenn keiner der Werte 'RealName' [Sue], 'RealName' [Carol] noch Passwort [Carol] geändert wird, da Verifier [Carol] eine deterministische Funktion dieser Werte ist. Verklagen müssen folglich 'RealName' [Sue] ändern, wenn die oben beschriebenen Funktionen verwendet werden und die Benutzer-Datatable ist gefährdet. Eine Alternative ist die Verwendung von zufällig generierten Salz Werte.


Schritte und Nachrichten:

  1. Sue generiert eine zufällige Nonce Nonce_S.

  2. Sue-Carol >:Nonce_S

  3. Carol generiert eine zufällige Nonce_C.

  4. Carol berechnet Verifier [Carol], wie oben beschrieben.

  5. Carol berechnet Temp1: = HMACString(haSHA1,Verifier[Carol],20,Nonce_S);

  6. Carol berechnet Response_C: = HMACString(haSHA1,Temp1,20,Nonce_C);

  7. Carol-Sue >: 'RealName' [Carol], Nonce_C, Response_C

  8. Sue sucht 'RealName' [Carol] in der Benutzer-Datatable und ruft Verifier [Carol].

  9. Sue Response_C berechnet, wie oben beschrieben und vergleicht es mit dem Wert von Carol erhalten. Wenn die Werte nicht übereinstimmen, wird Sue abgebrochen, was die Protokoll-Ausgabe 'Nein'.

  10. Sue berechnet Temp2: = HMACString(haSHA1,Verifier[Carol],20,Nonce_C);

  11. Sue berechnet Response_S: = HMACString(haSHA1,Temp2,20,Nonce_S);

  12. Sue -> Carol: Response_S

  13. Carol Response_S berechnet, wie oben beschrieben und vergleicht es mit dem Wert von Sue erhalten. Wenn die Werte nicht Carol Abbrüchen übereinstimmen, Ausgabe im Protokoll 'Nein'.

  14. Ausgabe 'Ja'.


Protokoll #2

Dieses Protokoll ist eine Variation des Protokolls Nr. 1 mit dem Unterschied, den der Salz [Carol] Wert ist zufällig generiert und in Sues Benutzer Datatable gespeichert. Die Auswirkungen dieser wurden bereits erörtert.
Schritte und Nachrichten:


  1. Carol generiert eine zufällige Nonce_C.

  2. Carol-Sue >: 'RealName' [Carol], Nonce_C

  3. Sue sucht 'RealName' [Carol] in der Benutzer-Datatable und ruft Salz [Carol], Verifier [Carol].

  4. Sue generiert einen zufälligen Wert Herausforderung

  5. Sue berechnet Nonce_S: = HMACString(haSHA1,Challenge,20,Realname[Sue]);

  6. Sue berechnet Temp1: = HMACString(haSHA1,Verifier[Carol],20,Nonce_C);

  7. Sue berechnet Response_S: = HMACString(haSHA1,Temp1,Nonce_S);

  8. Sue-Carol >:Herausforderung, Salz [Carol], Response_S

  9. Carol berechnet Verifier [Carol]: = HMACString(haSHA1,Salt[Carol],20,Password[Carol]);

  10. Carol berechnet Nonce_S, wie oben beschrieben.

  11. Carol Response_S berechnet, wie oben beschrieben und vergleicht es mit dem Wert von Sue erhalten. Wenn die Werte nicht Carol Abbrüchen übereinstimmen, Ausgabe im Protokoll 'Nein'.

  12. Carol berechnet Temp2: = HMACString(haSHA1,Verifier[Carol],20,Nonce_S);

  13. Carol berechnet Response_C: = HMACString(haSHA1,Temp2,20,Nonce_C);

  14. Carol-Sue >: Response_C

  15. Sue Response_C berechnet, wie oben beschrieben und vergleicht es mit dem Wert von Carol erhalten. Wenn die Werte nicht übereinstimmen, wird Sue abgebrochen, was die Protokoll-Ausgabe 'Nein'.

  16. Ausgabe 'Ja'.


Andere Überlegungen

Ein gemeinsames Merkmal der Protocol #1 und #2-Protokolls ist, dass die ausschließliche Verwendung von symmetrischen kryptografischen Primitive (HMAC) Benutzer Datatable extrem empfindlich auf Kompromisse macht. Die Protokolle werden nur Entitätsauthentifizierung bieten, wenn Sue verwaltet die Benutzer Datatable sowohl authentisch als auch vertraulich zu halten. Mithilfe eines Salzes in die Berechnung des dem Gutachter schätzt, wird zum Schutz der Vertraulichkeit von Kennwörtern, aber es wird nicht zu verhindern, dass einen Angreifer, der die Verifier-Werte vom simulieren die Schritte und die Botschaften von Carol in jedem Protokoll #1 oder #2-Protokolls erhält. Wenn ein solcher Schutz erforderlich ist ein anderes Protokoll, die kryptografischen Primitive, Asymmetic, z. B. SRP, beschäftigt sollte verwendet werden.

Ein weiterer Aspekt ist, dass Protokoll #1 und #2-Protokolls nur Ausgabe eine Binärdatei ja oder Nein, was bedeutet, dass die Ausgabe des Protokolls nicht unbedingt die Vertraulichkeit und die Integrität des Inhalts Massen der Sitzung verknüpft ist. Insbesondere ist darauf hinzuweisen, dass die Nonces, die als Teil der Protokolle dienen gegen Replay-Angriffe der in Beispiel 2 und Beispiel 6 beschriebenen Art schützt, aber sie nicht gegen Man-In-The-Middle-Angriffe schützt:
Beispiel 9 (Angriff)

Dies ist ein Beispiel wie ein Man-In-The-Middle (Mallory) Protocol #2 angreifen kann. Es gibt eine entsprechende Attacke gegen Protocol #1.


  1. Mallory tricks Carol zu glauben, dass Mallory Sue ist. Die Schwierigkeit, diese Täuschungen hängt von einer Vielzahl von Faktoren wie die Integrität des Netzwerks sowie mögliche Implementierung Mängel in der Mechanik verwendeten Carol für einen bestimmten Dienst 'RealName' [Sue] zuordnen.

  2. Carol -> Mallory: 'RealName' [Carol], Nonce_C

  3. Mallory -> Sue: 'RealName' [Carol], Nonce_C

  4. Sue-Mallory >:Herausforderung, Salz [Carol], Response_S

  5. Mallory-Carol >:Herausforderung, Salz [Carol], Response_S

  6. Carol -> Mallory: Response_C

  7. Mallory -> Sue: Response_C

  8. Sue gibt 'True'. Carol gibt 'True'.


Der letzte Schritt könnte dazu führen, dass Carol, dass sie überprüft hat denkt, dass Mallory Sue ist oder Sue denkt, dass sie sich vergewissert hat, dass Mallory Carol ist. Es ist wichtig zu beachten, dass weder Protokoll #1 noch Protokoll #2 solche Garantien geben wird. Sie werden nur beweisen, dass die Nachrichten von authentifizierten Entität, stammt aber nicht , dass diese Entität unbedingt identisch mit den anderen Peer. Beachten Sie auch, dass dies ist nicht unbedingt eine schlechte Sache (wie Proxy, Middle-Tier und Load Balancing), aber dass die Sicherheitsauswirkungen machen es oft sehr schwer, diese zu verwenden Protokolle entsprechend.
Asymmetrische NTLM-Protokolle

Dieser Abschnitt stellt ein einzelnes Protokoll, das Onlined nach ist die
Sichere Remote Password Authentication-Protokoll (SRP) by Thomas Wu von der Stanford University. Das Protokoll ist relativ komplex, sondern bietet eine Reihe von Sicherheitsdiensten, die macht es interessant, das mal bei deren Umsetzung zu investieren. Zitiert aus der original-Papier:


  • Ein Angreifer mit weder des Wirtes Passwort-Datei als auch das Kennwort des Benutzers kann keinen Wörterbuch-Angriff auf das Kennwort bereitstellen. Gegenseitiger Authentifizierung wird in diesem Szenario erreicht.



  • Ein Angreifer, der die Host-Passwort-Datei erfasst kann nicht direkt manipulieren Benutzer-zu-Host-Authentifizierung und erlangen Zugriff auf den Host ohne eine teure Wörterbuch-Suche.



  • Ein Angreifer, der den Host, Kompromisse nicht erhalten die das Passwort von einem legitimen Authentifizierungsversuch.



  • Ein Angreifer, der den Sitzungsschlüssel erfasst können damit keine Wörterbuch-Angriff auf das Kennwort bereitstellen.



  • Ein Angreifer, der das Kennwort des Benutzers erfasst können damit keine um Sitzungsschlüssel des letzten Sitzungen zu gefährden.


Beispiel

Unten ist der Clientcode SRP, genommen von der SRP-Demo im Ordner 'Varianten'
var
lA, lB, lX, lV, lS: Variant;
lAPriv: Variante;
lSalt: String;
lK: OctetString;
lM1, lM2: String;
beginnen
Verbinden;
/ / a, A ist der Client ephemere Schlüssel, Diffie-Hellman-Stil
lAPriv: = RandomPrivateKey;
lA: = VarMPIntegerExpMod(2,lAPriv,P);
/ / C -> S: Benutzer, A
Send ('Nutzer', edtUsername.Text);
Senden Sie ('A', lA);
/ / S - C: Salz, B
lSalt: = Read ('Salz');
lB: = Read ('B');
/ / B ist der Server öffentlichen ephemere Schlüssel, Diffie-Hellman-Stil, gemischt
/ / mit dem Client V-Wert, der in der Server-Benutzer-Datatable gespeichert wird
/ / zusammen mit Salz und User.
/ / Client darf abbrechen, wenn B = 0
if (lB mod P) = 0 dann beginnen
Fehler ('Autorisierung fehlgeschlagen');
end;
/ / X ist dem langfristigen privaten Schlüssel und das Kennwort abgeleitet ist
lX: = HashPassword(lSalt,edtUsername.Text,edtPassword.Text);
/ / V ist der Client 'Gutachter' oder langfristigen öffentlichen Schlüssel.
/ / Es dient im SRP-Protokoll so, dass es nicht abgeleitet werden kann von
/ / ein Angreifer aus der Protokollnachrichten. Dadurch wird einen Wörterbuchangriff
/ / gegen das Benutzerkennwort so hart wie das diskrete Log-Problem zu lösen
lV: = VarMPIntegerExpMod(2,lX,P);
/ / Der 'tatsächlichen' öffentlichen ephemere Serverschlüssel ist B-V. Es wird ausgelöst durch den Kunden
/ / mit einem Exponenten (a + u * X) verbirgt, die auch den Wert von X hinter der Härte von
/ / das diskrete Log-Problem. S ist der freigegebenen geheimen Ausgang dieser Operation
lS: = VarMPIntegerExpMod (lB-lV,
lAPriv + lX * CalculateU(lB),
P);
/ / K ist der freigegebenen Schlüssel, der von den geheimen S abgeleitet ist
lK: = SHA_Interleave(lS);
/ / M1 ist die Client-Fertig-Meldung. Es kann nur berechnet werden, vom Kunden
/ / und vom Server. Der Zweck dieser Meldung ist zu beweisen, dass der Client
/ / abgeleitet wie der Server den gleichen Wert von K und folglich, die der Client weiß
/ / das Passwort
lM1: = FinishHashClient (edtUserName.Text,
lSalt,
lA,
lB,
lK);
// C -> S: M1
Senden Sie ('M1', lM1);
// S -> C: M2
lM2: = Read ('M2');
/ / M2 wird die fertige Nachricht des Servers. Es kann nur vom Server berechnet werden
/ / und durch den Kunden. Der Zweck dieser Meldung ist zu beweisen, dass der Server
/ / abgeleitet von den gleichen Wert von K als Client, und damit, die der Server kennt
/ / V-Gutachter-Wert
Wenn lM2 <> FinishHashServer(lA,lM1,lK) dann beginnen
Fehler ('Autorisierung fehlgeschlagen');
anderes Ende
SetKey(lK);


Kennwortauthentifizierung

Kennwortauthentifizierung : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Freunden empfehlen
  • gplus
  • pinterest

Kürzliche Posts

Kommentar

Einen Kommentar hinterlassen

Wertung