parmak izi HIDL

Parmak izi sensörüne sahip cihazlarda kullanıcılar bir veya daha fazla parmak izini 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, parmak izi sensörü) bağlanmak için Parmak İzi Donanımı Arayüzü Tanımlama Dilini (HIDL) kullanır.

Fingerprint HIDL'yi uygulamak için IBiometricsFingerprint.hal satıcıya özel bir kitaplıkta 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 (kullanıcı parmak izi sensörüne dokunduğunda da ekran uyanabilir). Yüksek düzeyde parmak izi eşleştirme akışı aşağıdaki adımları içerir:

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

Bu akış, cihaza zaten bir parmak izinin kaydedildiğini, 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ürecindeki bir uygulamayla doğrudan etkileşime girer. Her uygulamanın bir IBiometricsFingerprint.hal örneği vardır
  • FingerprintService , parmak izi HAL ile iletişimi yöneten sistem sürecinde çalışır.
  • Parmak İzi HAL, IBiometricsFingerprint HIDL arayüzünün bir C/C++ uygulamasıdır. Bu, aygıta ö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.
Parmak izi kimlik doğrulaması için veri akışı
Şekil 1. Parmak izi kimlik doğrulaması için üst düzey veri akışı

Satıcıya özel bir HAL uygulamasının, TEE'nin gerektirdiği iletişim protokolünü kullanması gerekir. Ham görüntüler ve işlenmiş parmak izi özellikleri güvenilmeyen belleğe aktarılmamalıdır. Bu tür biyometrik verilerin tamamının TEE gibi güvenli bir donanımda 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 Fingerprint HAL aracılığıyla satıcıya özel kitaplığa çağrı yapar.

Parmak iziyle etkileşim
Şekil 2. Parmak izi arka plan programının parmak izi satıcısına özel kitaplıkla etkileşimi

Uygulama yönergeleri

Aşağıdaki Parmak İzi HAL yönergeleri, kullanıcı 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 şablonlara) hiçbir zaman sensör sürücüsünün veya TEE'nin dışından erişilememelidir. Donanım bir TEE'yi destekliyorsa donanım erişimi TEE ile sınırlı olmalı ve bir SELinux politikasıyla korunmalıdır. Seri Çevresel Arayüz (SPI) kanalına yalnızca TEE tarafından erişilebilir olmalı ve tüm cihaz dosyalarında açık bir SELinux politikası bulunmalıdır.
  • Parmak izi edinimi, kaydı ve tanınması TEE içerisinde 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 özel bir anahtarla imzalanmalıdır. Gelişmiş Şifreleme Standardı (AES) için, şablon dosyalarının başka bir cihazda veya bunları sisteme kaydeden kullanıcı dışında herhangi biri tarafından çalıştırılamaması için en azından bir şablonun mutlak dosya sistemi yolu, grubu ve parmak kimliğiyle imzalanması gerekir. aynı cihaz. Örneğin, parmak izi verilerinin farklı bir kullanıcıdan aynı cihaza veya başka bir cihazdan kopyalanması çalışmamalıdır.
  • Uygulamalar ya setActiveGroup() işlevi tarafından sağlanan dosya sistemi yolunu kullanmalı ya da 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 sağlanan yolda saklanması önemle tavsiye edilir. TEE depolama gereksinimleri nedeniyle bu mümkün değilse, uygulayıcının, kullanıcı kaldırıldığında verilerin kaldırılmasını sağlamak için kancalar eklemesi gerekir.

Parmak izi yöntemleri

Parmak İzi HIDL arayüzü IBiometricsFingerprint.hal 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 durumu makinesini değiştirir. Kayıt tamamlandığında veya zaman aşımından sonra HAL durumundaki makine boş durumuna geri döner.
preEnroll() Parmak izi kaydının başladığını belirtmek için benzersiz bir belirteç oluşturur. Örneğin bir parola kullanılarak önceden kimlik doğrulama yapıldığından emin olmak için enroll işlevine bir belirteç sağlar. Kurcalamayı önlemek için, cihazın kimlik bilgisi onaylandıktan sonra jeton sarılır. Belirtecin hala geçerli olduğunu doğrulamak için kayıt sırasında kontrol edilmesi gerekir.
getAuthenticatorId() Geçerli parmak izi kümesiyle ilişkili bir belirteci döndürür.
cancel() Bekleyen kayıt veya kimlik doğrulama işlemlerini iptal eder. HAL durumu makinesi boş duruma geri döner.
enumerate() Bilinen tüm parmak izi şablonlarının numaralandırılması 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 kısıtlar.
authenticate() Parmak iziyle ilgili bir işlemin kimliğini doğrular (bir işlem kimliğiyle tanımlanır).
setNotify() HAL'den bildirim alan bir kullanıcı işlevini kaydeder. HAL durumundaki makine meşgul durumdaysa, HAL meşgul durumundan çıkana kadar işlev engellenir.
postEnroll() Kayıt işlemini bitirir ve preEnroll() tarafından oluşturulan sorgulamayı geçersiz kılar. Bu, birden fazla parmakla kayıt oturumunun sonunda, daha fazla parmak eklenemeyeceğini belirtmek için çağrılmalıdır.

Bunlarla ilgili daha fazla ayrıntı için IBiometricsFingerprint.hal yorumlara bakın.