Parmak izi HIDL

Parmak izi sensörü olan cihazlarda kullanıcılar bir veya daha fazla parmak izi kaydedebilir ve bu parmak izlerini kullanarak cihazın kilidini açıp diğer işlemleri 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 Arabirimi Tanım Dilini (HIDL) kullanır.

Fingerprint HIDL'yi uygulamak için IBiometricsFingerprint.hal'yi tedarikçiye özel bir kitaplıkta uygulamanız gerekir.

Parmak izi eşleştirme

Cihazların parmak izi sensörü genellikle boştadır. Ancak authenticate veya enroll'a yapılan bir çağrıya yanıt olarak parmak izi sensörü dokunmayı dinler (kullanıcı parmak izi sensörüne dokunduğunda ekran da uyanabilir). Parmak izi eşleştirme sürecinin genel akışı aşağıdaki adımları içerir:

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

Bu akışta, cihazda parmak izi kaydının zaten yapıldığı, yani tedarikçiye özel kitaplığın parmak izi için bir şablon kaydettiği varsayılır. Daha fazla bilgi için Kimlik doğrulama başlıklı makaleyi inceleyin.

Mimari

Parmak izi HAL'si aşağıdaki bileşenlerle etkileşime girer.

  • BiometricManager Bir uygulama sürecinde doğrudan bir uygulamayla etkileşime girer. Her uygulamanın IBiometricsFingerprint.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 C/C++ uygulamasıdır. Bu, cihaza özgü donanımla iletişim kuran satıcıya özgü kitaplığı içerir.
  • Keystore API ve KeyMint (eski adıyla Keymaster) bileşenleri, güvenilir yürütme ortamı (TEE) gibi güvenli bir ortamda anahtarların güvenli bir şekilde depolanması için donanım destekli kriptografi sağlar.
Parmak iziyle kimlik doğrulama için veri akışı
1. şekil. Parmak iziyle kimlik doğrulama için üst düzey veri akışı

Tedarikçiye özel bir HAL uygulaması, TEE tarafından gerekli kılınan 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 tüm biyometrik veriler, TEE gibi güvenli donanımda saklanmalıdır. Root erişimi, biyometrik verilerin güvenliğinin ihlal edilmesine neden olmamalıdır.

FingerprintService ve fingerprintd, parmak izi kaydetmek ve diğer işlemleri gerçekleştirmek için parmak izi HAL üzerinden satıcıya özel kitaplığa çağrı yapar.

Interaction with fingerprintd
Şekil 2. Parmak izi daemon'unun parmak izi tedarikçisine özel kitaplıkla etkileşimi

Uygulama yönergeleri

Aşağıdaki Parmak İzi HAL yönergeleri, parmak izi verilerinin sızdırılmaması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) hiçbir zaman sensör sürücüsünün ya da TEE'nin dışından erişilememelidir. Donanım TEE'yi destekliyorsa donanım erişimi TEE ile sınırlanmalı ve bir SELinux ilkesiyle korunmalıdır. Seri Çevre Birimi Arayüzü (SPI) kanalı yalnızca TEE tarafından erişilebilir olmalı ve tüm cihaz dosyalarında açık bir SELinux politikası bulunmalıdır.
  • Parmak izi edinme, kaydetme ve tanıma işlemleri TEE içinde yapılmalıdır.
  • Parmak izi verilerinin yalnızca şifrelenmiş biçimi dosya sisteminde depolanabilir (dosya sisteminin kendisi şifrelenmiş de olsa).
  • Parmak izi şablonları, cihaza özel bir özel anahtarla imzalanmalıdır. Gelişmiş Şifreleme Standardı (AES) için şablon dosyalarının başka bir cihazda veya aynı cihaza kaydettiren kullanıcı dışında herhangi biri tarafından kullanılamaması amacıyla şablonun en azından mutlak dosya sistemi yolu, grup ve parmak kimliği ile imzalanması gerekir. Ö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ı veya kullanıcı kaldırıldığında tüm kullanıcı şablonu verilerini silmenin bir yolunu sağlamalıdır. Parmak izi şablon dosyalarının şifrelenmiş olarak saklanması ve belirtilen yolda depolanması önemle tavsiye edilir. TEE depolama gereksinimleri nedeniyle bu 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 arayüzü, IBiometricsFingerprint.hal içinde aşağıdaki başlıca yöntemleri içerir.

Yöntem Açıklama
enroll() Parmak izi şablonunun toplanması ve depolanması için HAL durum makinesini değiştirir. Kayıt tamamlandığında veya zaman aşımından sonra HAL durum makinesi boşta duruma geri döner.
preEnroll() Parmak izi kaydının başlangıcını belirtmek için benzersiz bir jeton oluşturur. Önceden kimlik doğrulama yapıldığından emin olmak için enroll işlevine jeton sağlar (örneğin, şifre kullanılarak). Kurcalamayı önlemek için cihaz kimliği onaylandıktan sonra jeton sarmalanır. Jetonun hâlâ geçerli olduğunu doğrulamak için kayıt sırasında kontrol edilmesi gerekir.
getAuthenticatorId() Geçerli parmak izi grubuyla ilişkilendirilmiş bir jeton döndürür.
cancel() Beklemede olan kaydolma veya kimlik doğrulama işlemlerini iptal eder. HAL durum makinesi boşta duruma döndürülür.
enumerate() Bilinen tüm parmak izi şablonlarını numaralandırmak için senkron ç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 iziyle kısıtlar.
authenticate() Parmak iziyle ilgili bir işlemi (işlem kimliğiyle tanımlanır) doğrular.
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 oluşturulan preEnroll() sorgusunu geçersiz kılar. Bu işlev, parmak ekleme oturumunun sonunda başka parmak eklenemeyeceğini belirtmek için çağrılmalıdır.

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