parmak izi HIDL

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 Arayüzü Tanımlama Dili'ni (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 (bir kullanıcı parmak izi sensörüne dokunduğunda ekran da uyanabilir). Üst düzey parmak izi eşleştirme akışı aşağıdaki adımları içerir:

  1. Kullanıcı parmağını parmak izi sensörüne 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ürecinde doğrudan bir uygulama ile 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.
  • Fingerprint HAL , IBiometricsFingerprint HIDL arabiriminin bir C/C++ uygulamasıdır. Bu, cihaza özel donanımla iletişim kuran satıcıya özel 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 doğrulaması için üst düzey veri akışı

Satıcıya özel 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 bellekten geçirilmemelidir. Bu tür tüm biyometrik verilerin TEE gibi güvenli donanımlarda saklanması gerekir. Köklendirme, biyometrik verilerden ödün vermemelidir .

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 izi ile etkileşim
Şekil 2. Parmak izi arka plan programının parmak izi satıcısına özel kitaplık ile 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ı bir aygıttan kaldırıldığında kaldırılmasını sağlamak için tasarlanmıştır:

  • Ham parmak izi verilerine veya türevlerine (örneğin şablonlar) asla sensör sürücüsünün veya TEE'nin dışından erişilemez. Donanım bir TEE'yi destekliyorsa, donanım erişimi TEE ile sınırlandırılmalı ve bir SELinux ilkesiyle korunmalıdır. Seri Çevre Birimi 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 alma, kayıt ve tanıma TEE içinde gerçekleşmelidir.
  • Dosya sisteminin kendisi şifrelenmiş olsa bile, dosya sisteminde yalnızca parmak izi verilerinin şifrelenmiş biçimi saklanabilir.
  • Parmak izi şablonları, özel, cihaza özel bir anahtarla imzalanmalıdır. Gelişmiş Şifreleme Standardı (AES) için, en azından mutlak dosya sistemi yolu, grup ve parmak kimliği ile bir şablon imzalanmalıdır, öyle ki, şablon dosyalar başka bir cihazda veya onları kaydeden kullanıcı dışında herhangi biri için çalışamaz. aynı cihaz. Örneğin, aynı cihazda 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ı şablonu verilerini silmenin bir yolunu sağlamalıdır. Parmak izi şablon dosyalarının şifrelenmiş olarak saklanması ve sağlanan yolda saklanması şiddetle önerilir. TEE depolama gereksinimleri nedeniyle bu mümkün değilse, kullanıcı kaldırıldığında verilerin kaldırılmasını sağlamak için uygulayıcının kanca eklemesi gerekir.

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 durumu makinesi boş duruma döner.
preEnroll() Parmak izi kaydının başladığını belirtmek için benzersiz bir belirteç oluşturur. Önceden bir kimlik doğrulaması yapıldığından emin olmak için, örneğin bir parola kullanarak enroll işlevine bir belirteç sağlar. Kurcalamayı önlemek için belirteç, cihaz kimlik bilgisi onaylandıktan sonra paketlenir. Belirtecin hala geçerli olduğunu doğrulamak için kayıt sırasında kontrol edilmelidir.
getAuthenticatorId() Geçerli parmak izi kümesiyle ilişkili bir belirteç döndürür.
cancel() Bekleyen kayıt veya kimlik doğrulama işlemlerini iptal eder. HAL durumu makinesi boş duruma 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 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 bildirimler alan bir kullanıcı işlevini kaydeder. HAL durumu makinesi meşgul durumundaysa, HAL meşgul durumundan ayrılana 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.

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