Włączanie silnego uwierzytelniania za pomocą WebAuthn

Problem

Phishing to najczęstszy problem bezpieczeństwa w sieci – 81% kont związanych z atakami hakerów w zeszłym roku doszło do naruszenia słabych lub skradzionych haseł. Członkowie branży Odpowiedzią na ten problem jest uwierzytelnianie wielopoziomowe, ale wdrożenia są podzielone na fragmenty i większość nadal nie rozwiązuje problemów z wyłudzaniem informacji. Współpracujemy z FIDO Alliance niedawno, wraz z W3C, aby wdrożyć ustandaryzowane protokołu odpornego na phishing, który może być używany przez dowolną aplikację internetową.

Co to jest WebAuthn?

Interfejs Web Authentication API zapewnia dostępu do aplikacji uwierzytelniających za pośrednictwem klienta użytkownika, który często tokeny sprzętowe dostępne przez USB/BLE/NFC lub moduły wbudowane bezpośrednio platformy – na potrzeby generowania i kontrolowania (eTLD+k) klucza publicznego. Zapewnia to wiele różnych zastosowań, na przykład:

  • Proste i odporne na phishing uwierzytelnianie dwuskładnikowe (do użytku w połączeniu z hasło).
  • Ponowna autoryzacja oparta na biometrii i bez hasła.
  • Proste i odporne na phishing uwierzytelnianie dwuskładnikowe bez hasła (do użytku) w przypadku kont bez hasła).

Interfejs API jest najprawdopodobniej wdrażany w większości najpopularniejszych przeglądarek i ma upraszczają interfejs przy potwierdzaniu tożsamości online, znacznie ograniczają phishing.

WebAuthn rozszerza interfejs Credential Management API i dodaje do niego nowy interfejs o nazwie PublicKeyCredential. WebAuthn wyodrębnia komunikacją między przeglądarką a mechanizmem uwierzytelniającym, a użytkownikom:

  1. Tworzenie i rejestrowanie danych logowania klucza publicznego dla witryny.
  2. Uwierzytelnij się w witrynie, udowadniając, że masz odpowiednie dane prywatne .

Authenticator to urządzenia, które mogą generować pary kluczy (prywatny/publiczny) i zbierać zgody na wykorzystanie danych. Zgodę na podpisanie można wyrazić jednym kliknięciem. odczytują odcisk palca lub za pomocą innych metod, o ile są zgodne z normą FIDO2 wymagań (program certyfikacji obejmuje program certyfikacji uwierzytelniania przez FIDO Alliance). Aplikacje Authenticator mogą być wbudowane platformy (np. skanerów odcisków palców w smartfonach) lub podłączonej USB, Bluetooth Low Energy (BLE) lub Near-Field Communication (NFC).

Jak to działa

Tworzenie pary kluczy i rejestrowanie użytkownika

Gdy użytkownik chce zarejestrować dane logowania w witrynie (określanej przez WebAuthn) jako „strona uzależniona”):

  1. Strona uzależniona generuje wyzwanie.
  2. Strona uzależniona prosi przeglądarkę za pomocą interfejsu Credential Manager API do wygenerowanie nowych danych logowania dla jednostki uzależnionej, określając urządzenie możliwości, np. czy urządzenie udostępnia własne uwierzytelnianie użytkownika (za pomocą biometrii itp.).
  3. Gdy uzyskuje on zgodę użytkownika, generuje i zwraca klucz publiczny oraz opcjonalny podpisany atest do funkcji witryny.
  4. Aplikacja internetowa przekazuje klucz publiczny na serwer.
  5. Serwer przechowuje klucz publiczny w połączeniu z tożsamością użytkownika, aby zapamiętać danych uwierzytelniających na potrzeby przyszłych uwierzytelniania.
.
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} ]
}});

Uwierzytelnianie użytkownika

Gdy witryna musi uzyskać dowód, że wchodzi w interakcję z odpowiednim użytkownik:

  1. Strona uzależniona generuje wyzwanie i dostarcza przeglądarce listę, danych logowania zarejestrowanych na użytkownika. Może też wskazać, poszukaj danych logowania, np. w lokalnym, wbudowanym uwierzytelnianiem zewnętrznego przez USB, BLE itp.
  2. Przeglądarka prosi narzędzie uwierzytelniające o podpisanie wyzwania.
  3. Jeśli moduł uwierzytelniający zawiera jedno z podanych danych logowania, zwraca podpisane potwierdzenie do aplikacji internetowej po otrzymaniu zgody użytkownika.
  4. Aplikacja internetowa przekazuje podpisane potwierdzenie na serwer jednostki uzależnionej weryfikacji.
  5. Po zweryfikowaniu przez serwer uznawany jest proces uwierzytelniania. udało się.
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",
}});

Wypróbuj WebAuthn na https://webauthndemo.appspot.com/.

Co Cię czeka?

Chrome 67 w wersji beta zostaje udostępniony z obsługą przeglądarek navigator.credentials.get({publicKey: ...}) i navigator.credentials.create({publicKey:... }) oraz umożliwia korzystanie z przeglądarki Moduły uwierzytelniające U2F/CTAP 1 przez transport USB na komputerze.

W kolejnych wersjach dodamy obsługę kolejnych nośników, takich jak BLE i NFC, do nowszej wersji protokołu przewodowego CTAP 2. Pracujemy też nad bardziej zaawansowanymi procesami włączone przez CTAP 2 i WebAuthn, w tym uwierzytelnianie zabezpieczone kodem PIN, wybór kont (zamiast wpisywać nazwę użytkownika lub hasło), rejestrację odcisku palca.

Pamiętaj, że Microsoft Edge obsługuje również interfejs API a Firefox obsługuje WebAuthn od Firefoksa 60.

Zasoby

Pracujemy nad bardziej szczegółową dokumentacją:

Sesja „Co nowego w rejestracji i logowaniu się przez internet” podczas konferencji Google I/O 2018 pokazaliśmy WebAuthn.