WebAuthn ile Güçlü Kimlik Doğrulamasını Etkinleştirme

Sorun

Kimlik avı, web'deki en büyük güvenlik sorunudur. Geçen yıl bilgisayar korsanlığıyla ilgili hesap ihlallerinin% 81'i zayıf veya çalıntı şifreler kullandı. Sektörün bu soruna toplu olarak verdiği yanıt, çok öğeli kimlik doğrulama oldu, ancak uygulamalar parçalara bölünmüş durumda ve çoğu hâlâ kimlik avını düzgün şekilde ele alamıyor. 2013'ten beri FIDO Alliance ile çalışıyoruz. Yakın zamanda ise herhangi bir web uygulaması tarafından kullanılabilecek, kimlik avına karşı standartlaştırılmış bir protokol uygulamak için W3C ile çalışıyoruz.

WebAuthn nedir?

Web Authentication API, uygulama kapsamlı (eTLD+k) ortak anahtar kimlik bilgilerinin oluşturulması ve zorlanması amacıyla, web uygulamalarına kullanıcı aracısı aracılı erişim sağlar. Bu kimlik doğrulayıcılar, genellikle USB/BLE/NFC üzerinden erişilen donanım jetonları veya doğrudan platforma yerleştirilmiş modüllerdir. Bu, çeşitli kullanım alanlarını mümkün kılar, örneğin:

  • Düşük düzeyde sürtüşmeye ve kimlik avına dayanıklı 2FA (şifre ile birlikte kullanılmalıdır).
  • Şifresiz, biyometri tabanlı yeniden yetkilendirme.
  • Şifre olmadan, kullanımı kolay ve kimlik avına karşı korumalı 2FA (şifresiz hesaplar için kullanılır).

API, çoğu büyük tarayıcı tarafından uygulanma yolundadır ve hem internette kimliğinizi kanıtlamanız gereken kullanıcı arayüzünü basitleştirmek hem de kimlik avını önemli ölçüde azaltmak amacıyla tasarlanmıştır.

WebAuthn, Credential Management API'yi genişletir ve PublicKeyCredential adlı yeni bir kimlik bilgisi türü ekler. WebAuthn, tarayıcı ile kimlik doğrulayıcı arasındaki iletişimi soyutlar ve kullanıcının şunları yapmasına olanak tanır:

  1. Bir web sitesi için ortak anahtar kimlik bilgisi oluşturup kaydedin.
  2. İlgili özel anahtara sahip olduğunuzu kanıtlayarak bir web sitesinde kimlik doğrulaması yapın.

Kimlik doğrulayıcılar, özel/ortak anahtar çiftleri oluşturabilen ve kullanıcı rızası alan cihazlardır. İmzalama izni basit bir dokunuşla, parmak iziyle okunarak veya FIDO2 gereksinimlerine uyduğu sürece başka yöntemlerle verilebilir (FIDO Alliance kimlik doğrulayıcılar için bir sertifika programı mevcuttur). Kimlik doğrulayıcılar, platforma yerleşik olarak eklenebilir (ör. akıllı telefonlardaki parmak izi tarayıcıları) veya USB, Bluetooth Düşük Enerji (BDE) ya da Near Field Communication (NFC) aracılığıyla bağlanabilir.

İşleyiş şekli

Anahtar çifti oluşturma ve kullanıcı kaydetme

Kullanıcı bir web sitesine kimlik bilgisi kaydetmek istediğinde (WebAuthn tarafından "güvenilen taraf" olarak anılır):

  1. Bağlı taraf, kendine meydan okuyor.
  2. Bağlı taraf, tarayıcıdan Credential Manager API'si aracılığıyla bağlı taraf için yeni bir kimlik bilgisi oluşturmasını ister.Bunu yaparken cihaz yeteneklerini belirtir. Örneğin, cihazın kendi kullanıcı kimlik doğrulamasını (biyometri vb. ile) sağlayıp sağlamadığını belirtir.
  3. Kimlik doğrulayıcı kullanıcı izni aldıktan sonra, kimlik doğrulayıcı bir anahtar çifti oluşturur ve ortak anahtarla isteğe bağlı imzalı onayı web sitesine gönderir.
  4. Web uygulaması, ortak anahtarı sunucuya yönlendirir.
  5. Sunucu, gelecekteki kimlik doğrulama işlemlerinde kimlik bilgilerini hatırlamak için ortak anahtarı kullanıcı kimliğiyle birlikte depolar.
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} ]
}});

Kullanıcının kimliğini doğrulama

Bir web sitesinin doğru kullanıcıyla etkileşime geçtiğine dair kanıt alması gerektiğinde:

  1. Bağlı taraf bir görev oluşturur ve tarayıcıya, kullanıcıya kayıtlı kimlik bilgilerinin listesini sağlar. Ayrıca, kimlik bilgisinin nerede aranacağını da gösterebilir (örneğin, yerleşik yerel bir kimlik doğrulayıcıda veya USB, BDE vb. üzerinden harici bir kimlik doğrulayıcıda).
  2. Tarayıcı, kimlik doğrulayıcıdan giriş sorgulamasını imzalamasını ister.
  3. Kimlik doğrulayıcı, belirtilen kimlik bilgilerinden birini içerirse kullanıcı iznini aldıktan sonra kimlik doğrulayıcı, web uygulamasına imzalı bir onay döndürür.
  4. Web uygulaması, bağlı tarafın doğrulaması için imzalı onayı sunucuya iletir.
  5. Sunucu tarafından doğrulandıktan sonra, kimlik doğrulama akışı başarılı olarak kabul edilir.
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",
}});

https://webauthndemo.appspot.com/ adresinden WebAuthn'u kendiniz deneyin.

Sırada ne var?

Chrome 67 Beta, navigator.credentials.get({publicKey: ...}) ve navigator.credentials.create({publicKey:... }) desteğiyle birlikte sunulur ve masaüstünde USB aktarımı üzerinden U2F/CTAP 1 kimlik doğrulayıcılarının kullanılmasına olanak tanır.

Gelecek sürümlerde, BDE ve NFC gibi daha fazla aktarım desteği ile yeni CTAP 2 kablo protokolü kullanılacak. Ayrıca, CTAP 2 ve WebAuthn tarafından etkinleştirilen PIN korumalı kimlik doğrulayıcılar, yerel hesap seçimi (kullanıcı adı veya şifre yazmak yerine) ve parmak izi kaydı gibi daha gelişmiş akışlar üzerinde de çalışıyoruz.

Microsoft Edge'in de API'yi desteklediğini ve Firefox'un, Firefox 60'tan itibaren WebAuthn'u desteklediğini unutmayın.

Kaynaklar

Daha ayrıntılı dokümanlar üzerinde çalışıyoruz:

Google I/O 2018'deki "Web'de kaydolma ve oturum açmayla ilgili yenilikler" oturumu WebAuthn'u ele aldı.