27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main yerine android-latest-release kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
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:
Tedarikçiye özel kitaplık, kayıtlı parmak izi şablonlarının mevcut kümesinde parmak izi eşleşmesi olup olmadığını belirler.
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.
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.
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 ş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.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-27 UTC."],[],[],null,["# Fingerprint HIDL\n\nOn devices with a fingerprint sensor, users can enroll one or more\nfingerprints and use those fingerprints to unlock the device and perform other\ntasks. Android uses the Fingerprint Hardware Interface Definition Language\n(HIDL) to connect to a vendor-specific library and fingerprint hardware (for\nexample, a fingerprint sensor).\n\nTo implement the Fingerprint HIDL, you must implement [`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal)\nin a vendor-specific library.\n\nFingerprint matching\n--------------------\n\nThe fingerprint sensor of a device is generally idle. However, in response to\na call to `authenticate` or `enroll`, the\nfingerprint sensor listens for a touch (the screen might also wake when a user\ntouches the fingerprint sensor). The high-level flow of fingerprint matching\nincludes the following steps:\n\n1. User places a finger on the fingerprint sensor.\n2. The vendor-specific library determines if there is a fingerprint match in the current set of enrolled fingerprint templates.\n3. Matching results are passed to `FingerprintService`.\n\nThis flow assumes that a fingerprint has already been enrolled on the device, that is,\nthe vendor-specific library has enrolled a template for the fingerprint. For more\ndetails, see [Authentication](/docs/security/features/authentication).\n| **Note:** The more fingerprint templates stored on a device, the more time required for fingerprint matching.\n\nArchitecture\n------------\n\nThe Fingerprint HAL interacts with the following components.\n\n- `BiometricManager` interacts directly with an app in an app process. Each app has an instance of `IBiometricsFingerprint.hal`\n- `FingerprintService` operates in the system process, which handles communication with fingerprint HAL.\n- **Fingerprint HAL** is a C/C++ implementation of the IBiometricsFingerprint HIDL interface. This contains the vendor-specific library that communicates with the device-specific hardware.\n- **Keystore API and KeyMint (previously Keymaster)** components provide hardware-backed cryptography for secure key storage in a secure environment, such as the Trusted Execution Environment (TEE).\n\n**Figure 1.** High-level data flow for fingerprint authentication\n\nA vendor-specific HAL implementation must use the communication protocol\nrequired by a TEE. Raw images and processed fingerprint features must not\nbe passed in untrusted memory. All such biometric data needs to be stored\nin the secure hardware such as the TEE. Rooting **must not**\nbe able to compromise biometric data.\n\n`FingerprintService` and `fingerprintd` make calls through the Fingerprint HAL to\nthe vendor-specific library to enroll fingerprints and perform other\noperations.\n**Figure 2.** Interaction of the fingerprint daemon with the fingerprint vendor-specific library\n\nImplementation guidelines\n-------------------------\n\nThe following Fingerprint HAL guidelines are designed to ensure that\nfingerprint data is **not leaked** and is **removed**\nwhen a user is removed from a device:\n\n- Raw fingerprint data or derivatives (for example, templates) must never be accessible from outside the sensor driver or TEE. If the hardware supports a TEE, hardware access must be limited to the TEE and protected by an SELinux policy. The Serial Peripheral Interface (SPI) channel must be accessible only to the TEE and there must be an explicit SELinux policy on all device files.\n- Fingerprint acquisition, enrollment, and recognition must occur inside the TEE.\n- Only the encrypted form of the fingerprint data can be stored on the file system, even if the file system itself is encrypted.\n- Fingerprint templates must be signed with a private, device-specific key. For Advanced Encryption Standard (AES), at a minimum a template must be signed with the absolute file-system path, group, and finger ID such that template files are inoperable on another device or for anyone other than the user that enrolled them on the same device. For example, copying fingerprint data from a different user on the same device or from another device must not work.\n- Implementations must either use the file-system path provided by the `setActiveGroup()` function or provide a way to erase all user template data when the user is removed. It's strongly recommended that fingerprint template files be stored as encrypted and stored in the path provided. If this is infeasible due to TEE storage requirements, the implementer must add hooks to ensure removal of the data when the user is removed.\n\nFingerprint methods\n-------------------\n\nThe Fingerprint HIDL interface contains the following major methods in\n[`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal).\n\n| Method | Description |\n|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `enroll()` | Switches the HAL state machine to start the collection and storage of a fingerprint template. When enrollment is complete, or after a timeout, the HAL state machine returns to the idle state. |\n| `preEnroll()` | Generates a unique token to indicate the start of a fingerprint enrollment. Provides a token to the `enroll` function to ensure there was prior authentication, for example, using a password. To prevent tampering, the token is wrapped after the device credential is confirmed. The token must be checked during enrollment to verify that it's still valid. |\n| `getAuthenticatorId()` | Returns a token associated with the current fingerprint set. |\n| `cancel()` | Cancels pending enroll or authenticate operations. The HAL state machine is returned to the idle state. |\n| `enumerate()` | Synchronous call for enumerating all known fingerprint templates. |\n| `remove()` | Deletes a fingerprint template. |\n| `setActiveGroup()` | Restricts a HAL operation to a set of fingerprints that belong to a specified group, identified by a group identifier (GID). |\n| `authenticate()` | Authenticates a fingerprint-related operation (identified by an operation ID). |\n| `setNotify()` | Registers a user function that receives notifications from the HAL. If the HAL state machine is in a busy state, the function is blocked until the HAL leaves the busy state. |\n| `postEnroll()` | Finishes the enroll operation and invalidates the `preEnroll()` generated challenge. This must be called at the end of a multifinger enrollment session to indicate that no more fingers may be added. |\n\nFor more details on these, refer to the comments in [`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal)."]]