Yüzle kimlik doğrulama HIDL

Genel Bakış

Yüz kimlik doğrulama, kullanıcıların cihazlarının ön yüzüne bakarak cihazlarının kilidini açmalarına olanak tanır. Android 10, kamera karelerini güvenli bir şekilde işleyebilen yeni bir yüz kimlik doğrulama yığını için destek ekler. Bu sayede, desteklenen donanımlarda yüz kimlik doğrulaması sırasında güvenlik ve gizlilik korunur. Android 10 ayrıca güvenliğe uygun uygulamaların, işlemler için uygulama entegrasyonunu (ör. online bankacılık veya diğer hizmetler) etkinleştirmesini kolaylaştırır.

Android yüzle kimlik doğrulama yığını, Android 10'da yeni bir uygulamadır. Yeni uygulama, IBiometricsFace.hal, IBiometricsFaceClientCallback.hal, ve types.hal arayüzlerini kullanıma sunar.

Mimari

BiometricPrompt API, yüz, parmak ve iris dahil olmak üzere tüm biyometrik kimlik doğrulama yöntemlerini içerir. Face HAL aşağıdaki bileşenlerle etkileşime girer.

Biyometrik yığın

1. şekil. Biyometrik yığın.

FaceManager

FaceManager, FaceService ile bağlantıyı koruyan özel bir arayüzdür. Keyguard, özel bir kullanıcı arayüzüyle yüz kimlik doğrulamasına erişmek için bu özelliği kullanır. Uygulamalar FaceManager'a erişemez ve bunun yerine BiometricPrompt kullanmalıdır.

FaceService

Bu, yüz kimlik doğrulaması donanımına erişimi yöneten çerçeve uygulamasıdır. Temel kayıt ve kimlik doğrulama durum makinelerinin yanı sıra çeşitli yardımcılar (ör. numaralandırma) içerir. Kararlılık ve güvenlik endişeleri nedeniyle bu süreçte hiçbir tedarikçi kodunun çalışmasına izin verilmez. Tüm tedarikçi kodlarına Face 1.0 HIDL arayüzü üzerinden erişilir.

karşılaştı

Bu, FaceService tarafından kullanılan Face 1.0 HIDL arayüzünü uygulayan bir Linux yürütülebilir dosyasıdır. FaceService tarafından bulunabilmesi için IBiometricsFace@1.0 olarak kaydolur.

Uygulama

Face HIDL

Face HIDL'yi uygulamak için IBiometricsFace.hal tüm yöntemlerini tedarikçiye özel bir kitaplıkta uygulamanız gerekir.

Hata mesajları

Hata mesajları bir geri arama tarafından gönderilir ve gönderildikten sonra durum makinesini boşta durumuna döndürür. Çoğu mesajda kullanıcıyı hatadan haberdar eden, kullanıcıya yönelik bir dize bulunur ancak tüm hatalarda bu dize yer almaz. Hata mesajları hakkında daha fazla bilgi için types.hal başlıklı makaleyi inceleyin. Tüm hata mesajları son durumu temsil eder. Yani çerçeve, HAL'nin bir hata mesajı gönderdikten sonra boşta durma durumuna döndüğünü varsayar.

Edinme mesajları

Kullanıcı edinme mesajları, kayıt veya kimlik doğrulama sırasında gönderilir ve kullanıcının başarılı bir kayıt veya kimlik doğrulama yapmasına yardımcı olmayı amaçlar. Her sıra sayısının FaceAuthenticationManager.java dosyasından ilişkili bir mesajı vardır. İlgili yardım dizeleri sağlandığı sürece tedarikçiye özel mesajlar eklenebilir. Edinme mesajları kendi başlarına son durumlar değildir. HAL'ın, mevcut kayıt veya kimlik doğrulama işlemini tamamlamak için gerektiği kadar çok sayıda mesaj göndermesi beklenir. Bir edinme mesajı, ilerleme kaydedilemeyen bir son durumla sonuçlanırsa HAL, edinme mesajlarını bir hata mesajıyla takip etmelidir. Örneğin, resim çok karanlıktır ve ilerleme kaydedilemeyecek kadar karanlık kalır. Bu durumda, birkaç deneme yapıldıktan sonra ancak başka bir ilerleme kaydedilemediğinde UNABLE_TO_PROCESS göndermek makuldür.

Donanım

Cihazların Android 10'daki güçlü biyometri koşullarına uyması için yüz verilerinin bütünlüğünü ve nihai kimlik doğrulama karşılaştırmasını sağlamak üzere güvenli donanıma sahip olmaları gerekir. Android Uyumluluk Tanımı Belgesi (CDD), gereken güvenlik düzeyini ve kabul edilebilir sahtecilik kabul oranını (SAR) belirtir. Güvenli işleme ve tanıma için güvenilir yürütme ortamı (TEE) gerekir. Ayrıca, yüz kimlik doğrulamasına yönelik saldırıları önlemek için güvenli kamera donanımı gerekir. Örneğin, görüntü verileriyle ilişkili bellek sayfaları ayrıcalıklı olabilir ve yalnızca kamera donanımının güncelleyebilmesi için salt okunur olarak işaretlenebilir. İdeal olarak, TEE ve donanım dışında hiçbir sürecin erişimi olmamalıdır.

Yüz kimlik doğrulaması donanımı önemli ölçüde değişiklik gösterdiğinden, belirli cihaz mimarisine bağlı olarak yüz kimlik doğrulamayı etkinleştirmek için donanıma özel sürücüler geliştirilmesi gerekir. Bu nedenle, faced için referans uygulama yoktur.

Yöntemler

Aşağıdaki yöntemlerin tümü eşzamansızdır ve hemen çerçeveye dönmelidir. Bu işlemi yapmamanız durumunda sistem yavaşlar ve Watchdog sıfırlamaları gerçekleşebilir. Arayanın engellenmesini önlemek için birden fazla iş parçacığı içeren bir ileti kuyruğu kullanılması önerilir. Tüm GET istekleri, mümkün olduğunda bilgileri önbelleğe almalıdır. Böylece arayan, en kısa süre boyunca engellenir.

Yöntem Açıklama
setCallback() Tüm mesajları kendisine geri yönlendirmek için FaceService tarafından çağrılır.
setActiveUser() Tüm sonraki HAL işlemlerinin uygulandığı etkin kullanıcıyı ayarlar. Bu yöntem tekrar çağrılana kadar kimlik doğrulama her zaman bu kullanıcı için yapılır.
revokeChallenge() generateChallenge() tarafından oluşturulan sorguyu geçersiz kılarak güvenli işlemi tamamlar.
enroll() Kullanıcının yüzünü kaydeder.
cancel() Geçerli işlemi (ör. kaydetme, kimlik doğrulama, kaldırma veya numaralandırma) iptal eder ve faced öğesini boşta durma durumuna döndürür.
enumerate() Etkin kullanıcıyla ilişkili tüm yüz şablonlarını numaralandırır.
remove() Etkin kullanıcıyla ilişkili bir yüz şablonunu veya tüm yüz şablonlarını kaldırır.
authenticate() Etkin kullanıcının kimliğini doğrular.
userActivity() Bu yöntem yalnızca HAL kimlik doğrulama veya bekleme durumundayken kullanılmalıdır. HAL bu durumlardan birinde değilken bu yöntemin kullanılması OPERATION_NOT_SUPPORTED değerini döndürür. HAL kimlik doğrulaması yaparken bu yöntemin çağrılması, sistemin yüz arama süresini uzatabilir.
resetLockout() Çok fazla yüz reddedildiğinde, kilitleme durumuna (LOCKOUT veya LOCKOUT_PERMANENT) girmek için faced gerekir. Bu durumda, kalan sürenin çerçeveye gönderilmesi gerekir. Böylece çerçeve, bu süreyi kullanıcıya gösterebilir. setFeature() yönteminde olduğu gibi, bu yöntem de dahili durumu güvenli bir şekilde sıfırlamak için etkin bir donanım kimlik doğrulama jetonu (HAT) gerektirir. Yalnızca mevcut kullanıcı için kilitlemeyi sıfırlar.

Kalan üç yöntem de eşzamanlıdır ve çerçeveyi durdurmamak için en kısa süreyle engellenmelidir.

Yöntem Açıklama
generateChallenge() Güvenli bir işlemin başlangıcını belirtmek için kullanılan benzersiz ve kriptografik olarak güvenli bir rastgele jeton oluşturur.
setFeature() Mevcut kullanıcı için bir özelliği etkinleştirir veya devre dışı bırakır. Güvenlik nedeniyle, kullanıcının PIN/desen/şifresinin yukarıdaki zorluğa karşı kontrol edilmesi için HAT gerekir.
getFeature() Özelliğin geçerli etkinleştirme durumunu, varsayılan olarak veya yukarıdaki setFeature() çağrısıyla belirlendiği şekilde alır. Yüz kimliği geçersizse uygulama ILLEGAL_ARGUMENT değerini döndürmelidir.
getAuthenticatorId() Geçerli yüz grubuyla ilişkili bir tanımlayıcı döndürür. Bu tanımlayıcı, her yüz eklendiğinde değişmelidir.

Durum diyagramı

Çerçeve, faced öğesinin aşağıdaki durum şemasını izlemesini bekler.

Durum Diyagramı

Şekil 2. Yüzle kimlik doğrulama durum akışı.