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

Sorun

Kimlik avı web'deki en büyük güvenlik sorunudur: Bilgisayar korsanlığıyla ilgili hesapların% 81'i zayıf veya çalınmış şifrelerin kullanıldığı tespit edildi. Sektörün kolektifi bu soruna yanıt çok öğeli kimlik doğrulamasıdır, ancak uygulamalar çok parçalı ve çoğu hâlâ kimlik avını ele alamıyor. Bu doğrultuda FIDO Alliance ile çalışıyoruz. 2013 ve daha yakın bir zamanda, W3C ile birlikte, kimlik avına karşı koruma sağlayan bir protokol sunar.

WebAuthn nedir?

Web Authentication API, kullanıcıların kimlik doğrulayıcılara kullanıcı aracısı tarafından sağlanan erişimdir. USB/BDE/NFC veya doğrudan belleğe yerleşik olarak bulunan modüller üzerinden erişilen donanım jetonları platform (uygulama kapsamlı uygulamalar üretmek ve bunları öne çıkarmak için) (eTLD+k) ortak anahtar kimlik bilgileri. Bu, aşağıdakiler gibi çeşitli kullanım alanları sağlar:

  • Daha az soruna ve kimlik avına karşı korumalı 2FA ( girin).
  • Şifresiz, biyometriye dayalı yeniden yetkilendirme.
  • Daha az soruna ve kimlik avına dayanıklı, şifre olmayan 2FA (kullanım amaçlı) şifresiz hesaplar için).

API, önde gelen tarayıcıların çoğu tarafından uygulanma yolunda ilerliyor ve şunu da tasarlanmıştır: hem internette kimliğinizi kanıtlamanız gerektiğinde karşılaştığınız kullanıcı arayüzünü basitleştirir hem de kimlik avını önemli ölçüde azaltabilir.

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

  1. Bir web sitesi için ortak anahtar kimlik bilgisi oluşturma ve kaydetme.
  2. İlgili gizli bilgilere sahip olduğunuzu kanıtlayarak bir web sitesi için kimlik doğrulaması yapma tuşuna basın.

Authenticator'lar, özel/ortak anahtar çiftleri oluşturabilen ve bunları bir araya getiren izin verin. İmzalama izni tek bir dokunuşla verilebilir. Bu işlem başarıyla parmak izi okuma veya FIDO2 ile uyumlulukları koşuluyla başka yöntemlerle (herkes için sertifika programı vardır.) (FIDO Alliance tarafından sağlanan kimlik doğrulayıcılar). Kimlik doğrulayıcılar, akıllı telefonlardaki parmak izi tarayıcıları gibi) veya USB, Bluetooth Düşük Enerji (BDE) veya Near Field Communication (NFC).

İşleyiş şekli

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

Bir kullanıcı, bir web sitesine kimlik bilgisi kaydetmek istediğinde (WebAuthn tarafından kullanılır) "bağımlı taraf" olarak değiştirilebilir):

  1. İlgili taraf, bir meydan okuma oluşturur.
  2. Bağlı taraf, Credential Manager API aracılığıyla tarayıcıdan bağımlı taraf için yeni bir kimlik bilgisi oluşturup cihazı belirterek (ör. cihazın kendi kullanıcı kimlik doğrulamasını sağlayıp sağlamadığı) (biyometri vs. ile).
  3. Kimlik doğrulayıcı, kullanıcıdan izin aldıktan sonra kimlik doğrulayıcı bir anahtar çiftini alır ve ortak anahtarı ve isteğe bağlı imzalı onayı web sitesi.
  4. Web uygulaması, ortak anahtarı sunucuya yönlendirir.
  5. Sunucu, alan adını hatırlamak için kullanıcı kimliğiyle birlikte ortak anahtarı kimlik bilgilerini ele alacağız.
ziyaret edin.
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 alıcıyla etkileşim kurduğuna dair kanıt elde etmesi gerektiğinde kullanıcı:

  1. Bağlı taraf bir görev oluşturur ve tarayıcıya bir liste sağlar ve kullanıcıya kayıtlı kimlik bilgileridir. Ayrıca hangi görevin Örneğin, yerel bir kimlik doğrulayıcıda veya ana makinede USB, BDE vb. üzerinden harici bir tane
  2. Tarayıcı, kimlik doğrulayıcıdan sorgulamayı imzalamasını ister.
  3. Kimlik doğrulayıcı, belirtilen kimlik bilgilerinden birini içeriyorsa kimlik doğrulayıcı Kullanıcı izni aldıktan sonra web uygulamasına imzalı bir onay döndürür.
  4. Web uygulaması, imzalı onaylamayı bağlı taraf için sunucuya yönlendirir gerekir.
  5. Sunucu tarafından doğrulandıktan sonra kimlik doğrulama akışı, işidir.
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",
}});

WebAuthn'u şuradan deneyin: https://webauthndemo.appspot.com/.

Sırada ne var?

Chrome 67 Beta sürümünde navigator.credentials.get({publicKey: ...}) ve navigator.credentials.create({publicKey:... }) desteği sunulur ve Masaüstünde USB aktarımı üzerinden U2F/CTAP 1 kimlik doğrulayıcıları.

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

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

Kaynaklar

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

"Web'de kaydolma ve oturum açma ile ilgili yenilikler" WebAuthn'u ele aldık.