Genel Bakış
Yüz kimlik doğrulaması, kullanıcıların yalnızca cihazlarının ön kısmına bakarak cihazlarının kilidini açmasına olanak tanır. Android 10, desteklenen donanımlarda yüz kimlik doğrulaması sırasında güvenliği ve gizliliği koruyarak kamera çerçevelerini güvenli bir şekilde işleyebilen yeni bir yüz kimlik doğrulama yığını için destek ekler. Android 10 ayrıca çevrimiçi bankacılık veya diğer hizmetler gibi işlemler için uygulama entegrasyonunu mümkün kılan güvenlikle uyumlu uygulamalara yönelik kolay bir yol sağlar.
Android yüz kimlik doğrulama yığını, Android 10'daki yeni bir uygulamadır. Yeni uygulama, IBiometricsFace.hal
, IBiometricsFaceClientCallback.hal
ve types.hal
arayüzlerini sunar.
Mimari
BiometricPrompt API, yüz, parmak ve iris dahil olmak üzere tüm biyometrik kimlik doğrulamayı içerir. Face HAL aşağıdaki bileşenlerle etkileşime girer.
![Biyometrik yığın](https://source.android.com/static/docs/security/images/biometricStack.png?authuser=5&hl=tr)
Yüz Yöneticisi
FaceManager
, FaceService
ile bağlantıyı sürdüren özel bir arayüzdür. Keyguard tarafından özel bir kullanıcı arayüzü ile yüz kimlik doğrulamasına erişmek için kullanılır. Uygulamaların FaceManager'a erişimi yoktur ve bunun yerine BiometricPrompt
kullanması gerekir.
Yüz Hizmeti
Bu, yüz kimlik doğrulama donanımına erişimi yöneten çerçeve uygulamasıdır. Temel kayıt ve kimlik doğrulama durumu makinelerinin yanı sıra diğer çeşitli yardımcıları (örneğin numaralandırma) içerir. Kararlılık ve güvenlik endişeleri nedeniyle bu süreçte hiçbir satıcı kodunun çalıştırılmasına izin verilmez. Tüm satıcı kodlarına Face 1.0 HIDL arayüzü aracılığıyla erişilir.
yüzlü
Bu, FaceService
tarafından kullanılan Face 1.0 HIDL arayüzünü uygulayan bir Linux yürütülebilir dosyasıdır. FaceService
bulabilmesi için kendisini IBiometricsFace@1.0 olarak kaydeder.
Uygulama
Yüz HIDL
Face HIDL'yi uygulamak için IBiometricsFace.hal
tüm yöntemlerini satıcıya özel bir kitaplıkta uygulamanız gerekir.
Hata mesajları
Hata mesajları bir geri arama ile gönderilir ve gönderildikten sonra durum makinesini boş duruma döndürür. Çoğu iletide, kullanıcıyı hata konusunda bilgilendirmek için kullanıcıya yönelik bir dize bulunur, ancak tüm hatalar kullanıcıya yönelik bu dizeye sahip değildir. Hata mesajları hakkında daha fazla bilgi için types.hal
bakın. Tüm hata mesajları bir terminal durumunu temsil eder; bu, çerçevenin, bir hata mesajı gönderildikten sonra HAL'in boşta durumuna döndüğünü varsaydığı anlamına gelir.
Edinme mesajları
Edinme mesajları kayıt veya kimlik doğrulama sırasında iletilir ve kullanıcıyı başarılı bir kayıt veya kimlik doğrulamaya doğru yönlendirmeyi amaçlar. Her sıranın FaceAuthenticationManager.java
dosyasından ilişkili bir mesajı vardır. İlgili yardım dizeleri sağlandığı sürece satıcıya özel mesajlar eklenebilir. Edinme mesajları kendi başlarına nihai durumlar değildir; HAL'ın mevcut kaydı veya kimlik doğrulamayı tamamlamak için gereken sayıda bunlardan göndermesi beklenir. Bir edinme mesajı hiçbir ilerlemenin yapılamayacağı bir terminal durumuyla sonuçlanırsa, HAL, edinme mesajlarını bir hata mesajıyla takip etmelidir; örneğin görüntünün çok karanlık olduğu ve ilerleme kaydedilemeyecek kadar karanlık kaldığı durumlar. Bu durumda, birkaç deneme yapıldıktan sonra UNABLE_TO_PROCESS
göndermek mantıklıdır ancak daha fazla ilerleme kaydedilemez.
Donanım
Cihazların Android 10'un güçlü biyometrik gerekliliklerine uyması için, yüz verilerinin bütünlüğünü ve nihai kimlik doğrulama karşılaştırmasını sağlayacak güvenli donanıma sahip olmaları gerekir. Android Uyumluluk Tanımı Belgesi (CDD), gereken güvenlik düzeyini ve gereken kabul edilebilir sahtekarlık kabul oranını (SAR) özetlemektedir. Güvenli işleme ve tanıma için güvenilir bir yürütme ortamı (TEE) gereklidir. Ayrıca yüz kimlik doğrulamasında enjeksiyon saldırılarını önlemek için güvenli kamera donanımı gereklidir. Örneğin, görüntü verileri için ilgili bellek sayfaları ayrıcalıklı hale getirilebilir ve salt okunur olarak işaretlenebilir, böylece yalnızca kamera donanımı bunları güncelleyebilir. İdeal olarak TEE ve donanım dışında hiçbir işlemin erişimi olmamalıdır.
Yüz kimlik doğrulama donanımı önemli ölçüde farklılık gösterdiğinden, belirli aygıt mimarisine bağlı olarak yüz kimlik doğrulamasını etkinleştirmek için donanıma özgü sürücülerin geliştirilmesi gerekir. Bu nedenle, faced
için referans bir uygulama yoktur.
Yöntemler
Aşağıdaki yöntemlerin tümü eşzamansızdır ve hemen çerçeveye geri dönmelidir. Bunu yapmamak, sistemin yavaşlamasına ve olası Watchdog sıfırlamalarına neden olur. Arayanın engellenmesini önlemek için birden fazla diziden oluşan bir mesaj kuyruğunun olması önerilir. Tüm GET istekleri, arayanın minimum süre boyunca engellenmesi için mümkün olan yerlerde bilgileri önbelleğe almalıdır.
Yöntem | Tanım |
---|---|
setCallback() | Tüm mesajları kendisine geri döndürmek için FaceService tarafından çağrıldı. |
setActiveUser() | Sonraki tüm HAL işlemlerinin uygulanacağı etkin kullanıcıyı ayarlar. Kimlik doğrulama, bu yöntem yeniden çağrılana kadar her zaman bu kullanıcı içindir. |
revokeChallenge() | generateChallenge() tarafından oluşturulan sorgulamayı geçersiz kılarak güvenli işlemi bitirir. |
enroll() | Bir kullanıcının yüzünü kaydeder. |
cancel() | Geçerli işlemi iptal eder (örneğin, kaydolma, kimlik doğrulama, kaldırma veya numaralandırma) ve yüz faced boş duruma geri döner. |
enumerate() | Etkin kullanıcıyla ilişkili tüm yüz şablonlarını numaralandırır. |
remove() | Bir yüz şablonunu veya etkin kullanıcıyla ilişkili 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 olmadığında bu yöntemin kullanılması OPERATION_NOT_SUPPORTED değerini döndürür. HAL zaten kimlik doğrulaması yaparken bu yöntemin çağrılması, sistemin bir yüz arama süresini uzatabilir. |
resetLockout() | Çok fazla yüz reddedildiğinde, faced kilitleme durumuna girmesi gerekir ( LOCKOUT veya LOCKOUT_PERMANENT ). Bunu yaptığında, kalan süreyi kullanıcıya gösterebilmesi için çerçeveye göndermesi gerekir. setFeature() 'da 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 belirteci (HAT) gerektirir. Yalnızca geçerli kullanıcı için kilitlemeyi sıfırlar. |
Kalan üç yöntemin tümü eşzamanlıdır ve çerçevenin durmasını önlemek için minimum süre boyunca bloke edilmelidir.
Yöntem | Tanım |
---|---|
generateChallenge() | Güvenli bir işlemin başlangıcını belirtmek için kullanılan benzersiz ve kriptografik olarak güvenli bir rastgele belirteç oluşturur. |
setFeature() | Geçerli kullanıcı için bir özelliği etkinleştirir veya devre dışı bırakır. Güvenlik nedeniyle bu, kullanıcının pin/desen/şifresini yukarıdaki sorgulamaya göre kontrol edecek bir HAT gerektirir. |
getFeature() | Varsayılanın veya yukarıdaki setFeature() çağrısının belirttiği şekilde, özelliğin geçerli etkinleştirme durumunu alır. Yüz kimliği geçersizse uygulamanın ILLEGAL_ARGUMENT döndürmesi gerekir |
getAuthenticatorId() | Geçerli yüz kümesiyle ilişkili bir tanımlayıcıyı döndürür. Bir yüz eklendiğinde bu tanımlayıcının değişmesi gerekir |
Durum diyagramı
Çerçeve, aşağıdaki durum diyagramını takip etmeyi faced
.
![Durum diyagramı](https://source.android.com/static/docs/security/images/faceAuthStateFlow.png?authuser=5&hl=tr)