Parmak izi sensörlü cihazlarda, kullanıcılar bir veya daha fazla parmak izi kaydedebilir ve bu parmak izlerini cihazın kilidini açmak ve diğer görevleri gerçekleştirmek için kullanabilir. Android, satıcıya özel bir kitaplığa ve parmak izi donanımına (örneğin, bir parmak izi sensörü) bağlanmak için Parmak İzi Donanım Arabirimi Tanımlama Dili'ni (HIDL) kullanır.
Fingerprint HIDL'yi uygulamak için satıcıya özel bir kitaplıkta IBiometricsFingerprint.hal
uygulamanız gerekir.
Parmak izi eşleştirme
Bir cihazın parmak izi sensörü genellikle boştadır. Ancak, authenticate
veya enroll
çağrısına yanıt olarak, parmak izi sensörü bir dokunuşu dinler (ekran, bir kullanıcı parmak izi sensörüne dokunduğunda da uyanabilir). Üst düzey parmak izi eşleştirme akışı aşağıdaki adımları içerir:
- Kullanıcı parmağını parmak izi sensörüne yerleştirir.
- Satıcıya özgü kitaplık, geçerli kayıtlı parmak izi şablonları kümesinde bir parmak izi eşleşmesi olup olmadığını belirler.
- Eşleşen sonuçlar
FingerprintService
iletilir.
Bu akış, cihazda zaten bir parmak izinin kayıtlı olduğunu, yani satıcıya özel kitaplığın parmak izi için bir şablon kaydettiğini varsayar. Daha fazla ayrıntı için bkz. Kimlik Doğrulama .
Mimari
Parmak İzi HAL, aşağıdaki bileşenlerle etkileşime girer.
-
BiometricManager
bir uygulama sürecinde doğrudan bir uygulama ile etkileşime girer. Her uygulamanın birIBiometricsFingerprint.hal
örneği vardır -
FingerprintService
, parmak izi HAL ile iletişimi yöneten sistem sürecinde çalışır. - Fingerprint HAL, IBiometricsFingerprint HIDL arayüzünün bir C/C++ uygulamasıdır. Bu, cihaza özgü donanımla iletişim kuran satıcıya özgü kitaplığı içerir.
- Keystore API ve Keymaster bileşenleri, Güvenilir Yürütme Ortamı (TEE) gibi güvenli bir ortamda güvenli anahtar depolaması için donanım destekli şifreleme sağlar.

Satıcıya özgü bir HAL uygulaması, bir TEE'nin gerektirdiği iletişim protokolünü kullanmalıdır. Ham görüntüler ve işlenmiş parmak izi özellikleri güvenilmeyen bellekte geçirilmemelidir. Tüm bu biyometrik verilerin TEE gibi güvenli donanımlarda saklanması gerekir. Köklendirme, biyometrik verileri tehlikeye atmamalıdır .
FingerprintService
ve fingerprintd
parmak izlerini kaydetmek ve diğer işlemleri gerçekleştirmek için Parmak İzi HAL aracılığıyla satıcıya özel kitaplığa çağrılar yapar.

Uygulama yönergeleri
Aşağıdaki Parmak İzi HAL yönergeleri, bir kullanıcı bir cihazdan çıkarıldığında parmak izi verilerinin sızdırılmamasını ve silinmemesini sağlamak için tasarlanmıştır:
- Ham parmak izi verilerine veya türevlerine (örneğin şablonlar) asla sensör sürücüsü veya TEE dışından erişilemez. Donanım bir TEE'yi destekliyorsa, donanım erişimi TEE ile sınırlandırılmalı ve bir SELinux ilkesi tarafından korunmalıdır. Seri Çevre Birim Arayüzü (SPI) kanalına yalnızca TEE tarafından erişilebilir olmalıdır ve tüm cihaz dosyalarında açık bir SELinux politikası bulunmalıdır.
- Parmak izi alma, kaydetme ve tanıma TEE içinde gerçekleşmelidir.
- Dosya sisteminin kendisi şifrelenmiş olsa bile, parmak izi verilerinin yalnızca şifrelenmiş biçimi dosya sisteminde saklanabilir.
- Parmak izi şablonları özel, cihaza özgü bir anahtarla imzalanmalıdır. Gelişmiş Şifreleme Standardı (AES) için, en azından bir şablonun mutlak dosya sistemi yolu, grup ve parmak kimliği ile imzalanması gerekir; böylece şablon dosyaları başka bir aygıtta veya onları kaydeden kullanıcı dışındaki herhangi biri için çalışamaz aynı cihaz. Örneğin, aynı cihazdaki farklı bir kullanıcıdan veya başka bir cihazdan parmak izi verilerinin kopyalanması çalışmamalıdır.
- Uygulamalar,
setActiveGroup()
işlevi tarafından sağlanan dosya sistemi yolunu kullanmalı veya kullanıcı kaldırıldığında tüm kullanıcı şablon verilerini silmenin bir yolunu sağlamalıdır. Parmak izi şablon dosyalarının şifrelenmiş olarak saklanması ve sağlanan yolda saklanması kesinlikle önerilir. Bu, TEE depolama gereklilikleri nedeniyle mümkün değilse, uygulayıcı, kullanıcı kaldırıldığında verilerin kaldırılmasını sağlamak için kancalar eklemelidir.
Parmak izi yöntemleri
Fingerprint HIDL arabirimi, IBiometricsFingerprint.hal
içinde aşağıdaki ana yöntemleri içerir.
Yöntem | Tanım |
---|---|
enroll() | Bir parmak izi şablonunun toplanmasını ve saklanmasını başlatmak için HAL durum makinesini değiştirir. Kayıt tamamlandığında veya bir zaman aşımından sonra HAL durum makinesi boşta durumuna döner. |
preEnroll() | Parmak izi kaydının başladığını belirtmek için benzersiz bir belirteç oluşturur. Örneğin bir parola kullanarak önceden kimlik doğrulama yapıldığından emin olmak için enroll işlevine bir belirteç sağlar. Kurcalamayı önlemek için, cihaz kimlik bilgisi onaylandıktan sonra belirteç sarılır. Belirteç, hala geçerli olduğunu doğrulamak için kayıt sırasında kontrol edilmelidir. |
getAuthenticatorId() | Geçerli parmak izi seti ile ilişkili bir jeton döndürür. |
cancel() | Bekleyen kayıt veya doğrulama işlemlerini iptal eder. HAL durum makinesi boşta durumuna döndürülür. |
enumerate() | Bilinen tüm parmak izi şablonlarını numaralandırmak için senkronize çağrı. |
remove() | Bir parmak izi şablonunu siler. |
setActiveGroup() | Bir HAL işlemini, bir grup tanımlayıcısı (GID) tarafından tanımlanan, belirli bir gruba ait olan bir dizi parmak iziyle sınırlar. |
authenticate() | Parmak iziyle ilgili bir işlemin kimliğini doğrular (işlem kimliğiyle tanımlanır). |
setNotify() | HAL'den bildirim alan bir kullanıcı işlevini kaydeder. HAL durum makinesi meşgul durumdaysa, HAL meşgul durumundan çıkana kadar işlev engellenir. |
postEnroll() | Kayıt işlemini tamamlar ve preEnroll() tarafından oluşturulan sorgulamayı geçersiz kılar. Bu, daha fazla parmak eklenemeyeceğini belirtmek için çok parmaklı kayıt oturumunun sonunda çağrılmalıdır. |
Bunlar hakkında daha fazla ayrıntı için, IBiometricsFingerprint.hal
yorumlara bakın.