Mengaktifkan Autentikasi Kuat dengan WebAuthn

Permasalahan

Phishing adalah masalah keamanan teratas di web: 81% akun yang terkait dengan peretasan pelanggaran tahun lalu memanfaatkan {i> password<i} yang lemah atau dicuri. Grup kolektif industri respons terhadap masalah ini adalah otentikasi multi-faktor, tetapi implementasinya terfragmentasi dan sebagian besar masih belum mampu mengatasi {i>phishing<i}. Kami telah bekerja sama dengan FIDO Alliance sejak 2013 dan, baru-baru ini, dengan W3C untuk mengimplementasikan standar yang tahan terhadap {i>phishing <i}yang dapat digunakan oleh semua aplikasi Web.

Apa itu WebAuthn?

Web Authentication API memberikan akses yang dimediasi agen pengguna ke otentikator – yang sering kali token hardware yang diakses melalui USB/BLE/NFC atau modul yang terpasang langsung ke platform – untuk tujuan membuat dan menantang cakupan aplikasi (eTLD+k) kredensial kunci publik. Hal ini memungkinkan berbagai kasus penggunaan, seperti:

  • 2FA yang tahan terhadap ancaman phishing dan hambatan rendah (untuk digunakan bersama sandi).
  • Otorisasi ulang berbasis biometrik tanpa sandi.
  • 2FA yang tahan terhadap ancaman phishing dan hambatan rendah tanpa sandi (dapat digunakan untuk akun tanpa sandi).

API ini berjalan sesuai rencana untuk diimplementasikan oleh sebagian besar browser utama, dan ditujukan untuk menyederhanakan UI yang ditemui saat membuktikan identitas Anda secara {i>online<i} dan mengurangi {i>phishing<i} secara signifikan.

WebAuthn memperluas Credential Management API dan menambahkan jenis kredensial yang disebut PublicKeyCredential. WebAuthn meringkas komunikasi antara browser dan otentikator dan memungkinkan pengguna untuk:

  1. Membuat dan mendaftarkan kredensial kunci publik untuk situs.
  2. Mengautentikasi ke situs dengan membuktikan kepemilikan atas data pribadi yang sesuai tombol.

Authenticator adalah perangkat yang dapat membuat pasangan kunci pribadi/publik dan mengumpulkan persetujuan. Izin penandatanganan dapat diberikan dengan satu ketukan, dan sebuah pembacaan sidik jari, atau dengan metode lain, asalkan mematuhi FIDO2 persyaratan (ada program sertifikasi untuk otentikator oleh FIDO Alliance). Authenticator dapat diintegrasikan ke dalam platform (seperti pemindai sidik jari di {i>smartphone<i}) atau dipasang melalui USB, Bluetooth Hemat Energi (BLE), atau Komunikasi Nirkabel Jarak Dekat (NFC).

Cara kerjanya

Membuat pasangan kunci dan mendaftarkan pengguna

Saat pengguna ingin mendaftarkan kredensial ke situs (disebut oleh WebAuthn sebagai "pihak tepercaya"):

  1. Pihak tepercaya memberikan tantangan.
  2. Pihak tepercaya meminta browser, melalui Credential Manager API, membuat kredensial baru untuk pihak tepercaya, dengan menentukan perangkat kemampuan, misalnya, apakah perangkat memberikan autentikasi penggunanya sendiri (dengan biometrik, dll.).
  3. Setelah otentikator memperoleh izin pengguna, otentikator membuat pasangan kunci dan mengembalikan kunci publik dan pengesahan bertanda tangan opsional ke situs Anda.
  4. Aplikasi web meneruskan kunci publik ke server.
  5. Server menyimpan kunci publik, ditambah dengan identitas pengguna, untuk mengingat kredensial untuk otentikasi di masa mendatang.
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} ]
}});

Mengautentikasi pengguna

Saat situs perlu mendapatkan bukti bahwa situs tersebut berinteraksi dengan pengguna:

  1. {i>Relying party <i}menghasilkan tantangan dan menyediakan daftar kepada browser kredensial yang terdaftar untuk pengguna. Hal ini juga dapat menunjukkan di mana Anda cari kredensial, misalnya, di pengautentikasi bawaan lokal, atau di satu eksternal melalui USB, BLE, dll.
  2. Browser meminta pengautentikasi untuk menandatangani verifikasi.
  3. Jika otentikator berisi salah satu kredensial yang diberikan, otentikator mengembalikan pernyataan bertanda tangan ke aplikasi web setelah menerima izin pengguna.
  4. Aplikasi web meneruskan pernyataan yang ditandatangani ke server untuk pihak tepercaya verifikasi.
  5. Setelah diverifikasi oleh server, alur otentikasi akan dipertimbangkan berhasil.
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",
}});

Coba WebAuthn sendiri di https://webauthndemo.appspot.com/.

Apa yang ada di depan?

Chrome 67 beta dilengkapi dengan dukungan untuk navigator.credentials.get({publicKey: ...}) dan navigator.credentials.create({publicKey:... }), serta memungkinkan penggunaan Otentikator U2F/CTAP 1 melalui transport USB di desktop.

Rilis mendatang akan menambahkan dukungan untuk lebih banyak transport seperti BLE dan NFC serta protokol kabel CTAP 2 yang lebih baru. Kami juga sedang mengerjakan alur yang lebih canggih diaktifkan oleh CTAP 2 dan WebAuthn, seperti pengautentikasi yang dilindungi PIN, pemilihan akun (alih-alih mengetik nama pengguna atau sandi), dan pendaftaran sidik jari.

Perhatikan bahwa Microsoft Edge juga mendukung API dan Firefox mendukung WebAuthn mulai Firefox 60.

Resource

Kami sedang mengerjakan dokumentasi yang lebih mendetail:

Sesi "Yang baru terkait pendaftaran dan login di web" di Google I/O 2018 membahas WebAuthn.