Parmak İzi HIDL

Parmak izi sensörü bulunan cihazlarda kullanıcılar bir veya daha fazla parmak izi kaydedebilir ve bu parmak izlerini kullanarak cihazın kilidini açabilir ve diğer görevleri gerçekleştirebilir. Android, tedarikçiye özel bir kitaplığa ve parmak izi donanımına (ör. parmak izi sensörü) bağlanmak için Parmak İzi Donanım Arayüzü Tanımlama Dili'ni (HIDL) kullanır.

Parmak izi HIDL'yi uygulamak için IBiometricsFingerprint.hal satıcıya özel bir kitaplığa uygulamanız gerekir.

Parmak izi eşleştirme

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 dokunma algılar (kullanıcı parmak izi sensörüne dokunduğunda ekran da uyanabilir). Parmak izi eşleştirmenin üst düzey akışı aşağıdaki adımları içerir:

  1. Kullanıcı parmak izi sensörüne bir parmak yerleştirir.
  2. Tedarikçiye özel kitaplık, mevcut kayıtlı parmak izi şablonları grubunda parmak izi eşleşmesi olup olmadığını belirler.
  3. Eşleşen sonuçlar FingerprintService parametresine iletilir.

Bu akışta, cihaza zaten bir parmak izinin kaydedilmiş olduğu varsayılır. Yani tedarikçiye özgü kitaplıkta parmak izi için bir şablon kaydedilmiş olmalıdır. Daha fazla bilgi için Kimlik doğrulama başlıklı makaleyi inceleyin.

Mimari

Parmak izi HAL'i aşağıdaki bileşenlerle etkileşim kurar.

  • BiometricManager, bir uygulama sürecinde doğrudan bir uygulamayla etkileşime geçer. Her uygulamanın bir IBiometricsFingerprint.hal örneği vardır.
  • FingerprintService, parmak izi HAL ile iletişimi yöneten sistem işleminde çalışır.
  • Fingerprint HAL, IBiometricsFingerprint HIDL arayüzünün C/C++ uygulamasıdır. Bu, cihaza özgü donanımla iletişim kuran satıcıya özgü kitaplığı içerir.
  • Anahtar Deposu API'si ve Anahtar Yöneticisi bileşenleri, Güvenilir Yürütme Ortamı (TEE) gibi güvenli bir ortamda güvenli anahtar depolama için donanım destekli kriptografi sağlar.
Parmak izi kimlik doğrulaması için veri akışı
Şekil 1. Parmak izi kimlik doğrulaması için üst düzey veri akışı

Tedarikçiye özgü HAL uygulaması, TEE tarafından gerekli olan iletişim protokolünü kullanmalıdır. Ham görüntüler ve işlenmiş parmak izi özellikleri, güvenilmeyen belleğe aktarılmamalıdır. Bu tür biyometrik verilerin tümü TEE gibi güvenli donanımlarda depolanmalıdır. Root erişimi, biyometrik verilerin güvenliğini ihlal etmemelidir.

FingerprintService ve fingerprintd, parmak izlerini kaydettirmek ve diğer işlemleri gerçekleştirmek için Fingerprint HAL aracılığıyla tedarikçiye özel kitaplığa çağrı yapar.

fingerprintd ile etkileşim
Şekil 2. Parmak izi hizmetlisinin parmak izi tedarikçiye özgü kitaplıkla etkileşimi

Uygulama yönergeleri

Aşağıdaki Parmak İzi HAL yönergeleri, parmak izi verilerinin sızmamasını ve bir kullanıcı cihazdan kaldırıldığında kaldırılmasını sağlamak için tasarlanmıştır:

  • Ham parmak izi verilerine veya türevlerine (ör. şablonlar) asla sensör sürücüsünün veya TEE'nin dışından erişilemez. Donanım bir TEE destekliyorsa donanım erişimi TEE ile sınırlanmalı ve bir SELinux politikasıyla korunmalıdır. Seri Çevresel Arayüz (SPI) kanalına yalnızca TEE'nin erişebilmesi ve tüm cihaz dosyalarında açık bir SELinux politikası bulunması gerekir.
  • Parmak izi edinme, kaydetme ve tanıma işlemi TEE'de yapılmalıdır.
  • Parmak izi verilerinin sadece şifrelenmiş biçimi dosya sisteminde depolanabilir (dosya sisteminin kendisi şifrelenmiş de olsa).
  • Parmak izi şablonları, cihaza özgü özel bir anahtarla imzalanmalıdır. Gelişmiş Şifreleme Standardı (AES) için şablonlar en azından mutlak dosya sistemi yolu, grup ve parmak kimliğiyle imzalanmalıdır. Böylece şablon dosyaları başka bir cihazda veya bunları aynı cihaza kaydeden kullanıcı dışındaki kişiler tarafından kullanılamaz. Örneğin, parmak izi verilerinin aynı cihazda başka bir kullanıcıdan veya başka bir cihazdan kopyalanması durumunda çalışmaması gerekmektedir.
  • Uygulamalar, setActiveGroup() işlevi tarafından sağlanan dosya sistemi yolunu kullanmalıdır veya kullanıcı kaldırıldığında tüm kullanıcı şablonu verilerini silme yöntemi sağlamalıdır. Parmak izi şablon dosyalarının, sağlanan yolda şifrelenmiş olarak depolanması önemle tavsiye edilir. Bu, TEE depolama alanı gereksinimleri nedeniyle mümkün değilse uygulayıcı, kullanıcı kaldırıldığında verilerin kaldırılmasını sağlamak için kanca eklemelidir.

Parmak izi yöntemleri

Parmak izi HIDL arayüzü, IBiometricsFingerprint.hal içinde aşağıdaki ana yöntemleri içerir.

Yöntem Açıklama
enroll() Bir parmak izi şablonunun toplanmasını ve depolanmasını başlatmak için HAL durum makinesini değiştirir. Kayıt tamamlandığında veya zaman aşımı oluştuğunda HAL durum makinesi boş duruma döner.
preEnroll() Parmak izi kaydının başlangıcını belirtmek için benzersiz bir jeton oluşturur. Önceden kimlik doğrulamasının (ör. şifre kullanılarak) yapıldığından emin olmak için enroll işlevine bir jeton sağlar. Değiştirme işlemlerini önlemek için cihaz kimlik bilgisi onaylandıktan sonra jeton sarmalanır. Jetonun hâlâ geçerli olup olmadığını doğrulamak için kayıt sırasında kontrol edilmesi gerekir.
getAuthenticatorId() Geçerli parmak izi kümesiyle ilişkili bir jeton döndürür.
cancel() Beklemedeki kayıt veya kimlik doğrulama işlemlerini iptal eder. HAL durum makinesi boş duruma döndürülür.
enumerate() Bilinen tüm parmak izi şablonlarını listelemek için senkronize çağrı.
remove() Parmak izi şablonunu siler.
setActiveGroup() Bir HAL işlemini, grup tanımlayıcısı (GID) ile tanımlanan belirli bir gruba ait bir dizi parmak izi ile kısıtlar.
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şlevi kaydeder. HAL durum makinesi meşgul durumdaysa HAL meşgul durumdan çıkana kadar işlev engellenir.
postEnroll() Kayıt işlemini tamamlar ve preEnroll() tarafından oluşturulan Daha fazla parmak eklenemeyeceğini belirtmek için bu işlev, birden fazla parmak kaydı oturumunun sonunda çağrılmalıdır.

Bu konularla ilgili daha fazla bilgi için IBiometricsFingerprint.hal bölümündeki yorumlara bakın.