Starke Authentifizierung mit WebAuthn aktivieren

Das Problem

Phishing ist das größte Sicherheitsproblem im Internet: 81% aller Konten, die mit Hacking zusammenhängen bei denen im letzten Jahr schwache oder gestohlene Passwörter zum Einsatz kamen. Das kollektive Team der Branche Antwort auf dieses Problem war die Multi-Faktor-Authentifizierung, Implementierungen sind fragmentiert und die meisten gehen immer noch nicht angemessen auf Phishing ein. Wir arbeiten seitdem mit der FIDO Alliance zusammen: und seit 2013 mit dem W3C zur Implementierung einer standardisierten Phishing-resistenten Protokoll, das von jeder Webanwendung verwendet werden kann.

Was ist WebAuthn?

Die Web Authentication API ermöglicht Anwendungen den User-Agent-vermittelten Zugriff auf Authenticatoren, die häufig Hardware-Tokens, auf die über USB/BLE/NFC oder direkt in das Plattform – zum Zweck der Generierung und Herausforderung von anwendungsbezogenen (eTLD+k) Anmeldedaten mit öffentlichem Schlüssel. Dies ermöglicht eine Vielzahl von Anwendungsfällen, darunter:

  • Reibungslose und Phishing-resistente 2-Faktor-Authentifizierung (zur Verwendung in Verbindung mit ein Passwort).
  • Passwortlose, biometrische erneute Autorisierung
  • Reibungslose und Phishing-resistente Bestätigung in zwei Schritten ohne Passwort (zur Verwendung) für Konten ohne Passwort).

Die API wird voraussichtlich von den meisten gängigen Browsern implementiert werden und soll die die Benutzeroberfläche für die Identitätsbestätigung im Internet vereinfachen. Phishing erheblich reduzieren.

WebAuthn erweitert die Credential Management API und fügt eine neue Anmeldedatentyp namens PublicKeyCredential WebAuthn abstrahiert Kommunikation zwischen dem Browser und einem Authenticator und ermöglicht dem Nutzer Folgendes:

  1. Erstellen Sie Anmeldedaten mit öffentlichem Schlüssel für eine Website und registrieren Sie sie.
  2. Authentifizieren Sie sich auf einer Website, indem Sie nachweisen, dass Sie der Inhaber der entsprechenden privaten Person sind. .

Authenticatoren sind Geräte, die private/öffentliche Schlüsselpaare generieren und Einwilligung geben. Die Einwilligung zur Signatur kann durch einfaches Tippen, eine Fingerabdrücke oder andere Methoden auslesen, sofern diese FIDO2-konform sind Anforderungen (es gibt ein Zertifizierungsprogramm für Authenticatoren der FIDO Alliance). Authenticatoren können entweder (z. B. Fingerabdruckscanner auf Smartphones) oder USB, Bluetooth Low Energy (BLE) oder Nahfeldkommunikation (NFC).

Funktionsweise

Schlüsselpaar erstellen und Nutzer registrieren

Wenn ein Nutzer Anmeldedaten auf einer Website registrieren möchte (von WebAuthn bezeichnet) als „liegende Partei“):

  1. Die vertrauende Partei generiert eine Herausforderung.
  2. Die vertrauende Partei fordert den Browser über die Credential Manager API auf, neue Anmeldedaten für die vertrauende Partei generieren, unter Angabe des Geräts z.B. ob das Gerät eine eigene Nutzerauthentifizierung bietet (mit biometrischen Verfahren usw.).
  3. Nachdem der Authenticator die Einwilligung des Nutzers erhalten hat, generiert der Authenticator eine Schlüsselpaar und gibt den öffentlichen Schlüssel und die optionale signierte Attestierung an den Website.
  4. Die Webanwendung leitet den öffentlichen Schlüssel an den Server weiter.
  5. Der Server speichert den öffentlichen Schlüssel in Verbindung mit der Nutzeridentität, um sich zu merken Anmeldedaten für zukünftige Authentifizierungen.
let credential = await navigator.credentials.create({ publicKey: {
  challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
  rp: { id: "acme.com", name: "ACME Corporation" },
  user: {
    id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
    name: "jamiedoe",
    displayName: "Jamie Doe"
  },
  pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});

Nutzer authentifizieren

Wenn für eine Website ein Nachweis erforderlich ist, dass sie mit der korrekten Nutzer:

  1. Die vertrauende Partei generiert eine Abfrage und stellt dem Browser eine Liste mit die für den Nutzer registriert sind. Es kann auch angeben, wo suchen Sie z.B. auf einem lokalen integrierten Authenticator oder einem extern über USB, BLE usw.
  2. Der Browser bittet den Authenticator, die Bestätigung zu unterzeichnen.
  3. Wenn der Authenticator eines der angegebenen Anmeldedaten enthält, gibt nach Erhalt der Nutzereinwilligung eine signierte Assertion an die Web-App zurück.
  4. Die Webanwendung leitet die signierte Assertion an den Server für die vertrauende Partei weiter zu überprüfen.
  5. Nach der Bestätigung durch den Server gilt der Authentifizierungsvorgang. erfolgreich war.
let credential = await navigator.credentials.get({ publicKey: {
  challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
  rpId: "acme.com",
  allowCredentials: [{
    type: "public-key",
    id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
  }],
  userVerification: "required",
}});

Testen Sie WebAuthn selbst unter https://webauthndemo.appspot.com/.

Wie geht es weiter?

Die Betaversion von Chrome 67 unterstützt navigator.credentials.get({publicKey: ...}) und navigator.credentials.create({publicKey:... }) und ermöglicht die Verwendung von U2F-/CTAP 1-Authenticatoren über USB-Transport auf einem Computer

In den kommenden Releases werden weitere Transporte wie BLE und NFC sowie das neuere CTAP-2-Wire-Protokoll. Wir arbeiten auch an erweiterten Abläufen, durch CTAP 2 und WebAuthn aktiviert, z. B. PIN-geschützte Authenticatoren, lokale Auswahl von Konten (anstatt einen Nutzernamen oder ein Passwort einzugeben) und Registrierung des Fingerabdrucks.

Hinweis: Microsoft Edge unterstützt die API auch. und Firefox unterstützt WebAuthn ab Firefox 60.

Ressourcen

Wir arbeiten an einer detaillierteren Dokumentation:

Sitzung Was gibt's Neues bei der Registrierung und Anmeldung im Web? auf der Google I/O 2018 über WebAuthn.