page.title=Fingerprint HAL
@jd:body

<!--
    Copyright 2015 The Android Open Source Project

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->

<div id="qv-wrapper">
  <div id="qv">
    <h2>In this document</h2>
    <ol id="auto-toc">
    </ol>
  </div>
</div>

<h2 id=overview>Overview</h2>

<p>If a device has a fingerprint sensor, a user can enroll one or more
fingerprints and then use their fingerprints to unlock the device and perform
other tasks.</p>

<p>Android uses the Fingerprint Hardware Abstraction Layer (HAL) to connect to a
vendor-specific library and fingerprint hardware, e.g. a fingerprint sensor.</p>

<p>To implement the Fingerprint HAL, you must implement
<a href="#major_functions_in_the_fingerprint_hal">functions</a>
in <code>fingerprint.h</code> (<code>/hardware/libhardware/include/hardware/fingerprint.h</code>)
in a vendor-specific library; please see the comments in
the <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/fingerprint.h"><code>fingerprint.h</code></a> file.</p>

<h3 id=fingerprint_matching_flow>Fingerprint matching flow</h3>

<p>The following is a high-level flow for fingerprint matching. This flow assumes
that a fingerprint already has been enrolled on the device, i.e. the
vendor-specific library already has enrolled a template for the fingerprint.
Also see <a href="index.html">Authentication</a>.</p>

<p>The fingerprint sensor of a device generally is idle. But in response to a call
to the <code>authenticate</code> or <code>enroll</code> function, the fingerprint
sensor listens for a touch (and perhaps the screen
wakes up when a user touches the fingerprint sensor).</p>

<ol>
  <li>The user places a finger on the fingerprint sensor, and the vendor-specific
library determines if there is a match based on the current set of enrolled
templates.
  <li>The result of step 1 is passed to the Fingerprint HAL, which notifies
<code>fingerprintd</code> (the Fingerprint daemon) of a fingerprint authentication.
</ol>

<p>Note that as more templates are stored on a single device, the time needed for
matching is increased.</p>

<h2 id=architecture>Architecture</h2>

<p>The <strong>Fingerprint HAL</strong> interacts with the following components:</p>

<ul>
  <li><strong>FingerprintManager API</strong>. Interacts directly with an app in an app process.
  <ul>
    <li>Each app has an instance of FingerprintManager.
    <li>FingerprintManager is a wrapper that communicates with FingerprintService.
  </ul>
  <li><strong>FingerprintService</strong>. A singleton service that operates in the system
  process, which handles
communication with <code>fingerprintd</code>.
  <li><strong>fingerprintd (Fingerprint daemon)</strong>. A C/C++ implementation of the
  binder interface from FingerprintService. The
<code>fingerprintd</code> daemon operates in its own process and wraps the Fingerprint HAL
vendor-specific library.
  <li><strong>Fingerprint HAL vendor-specific library</strong>. A hardware vendor's
  implementation of the Fingerprint HAL. The
vendor-specific library communicates with the device-specific hardware.
  <li><strong>Keystore API and Keymaster</strong>. These components provide hardware-backed cryptography
  for secure key storage
  in a Trusted Execution Environment (TEE).
</ul>

<p>As shown in the following diagram, a vendor-specific HAL implementation needs
to use the communication protocol required by a TEE.</p>

<img src="../images/fingerprint-data-flow.png" alt="Data flow for fingerprint authentication" id="figure1" />

<p class="img-caption"><strong>Figure 1.</strong> High-level data flow for fingerprint authentication</p>

<p>Thus, raw images and processed fingerprint features must not be passed in
untrusted memory. All such biometric data needs to be secured within sensor
hardware or trusted memory. (Memory inside the TEE is considered as trusted
memory; memory outside the TEE is considered untrusted.)</p>

<p>Rooting must not compromise biometric data.</p>

<p>As shown in the following diagram, <code>fingerprintd</code> makes calls through the
Fingerprint HAL to the vendor-specific library to enroll fingerprints and
perform other operations.</p>

<img src="../images/fingerprint-daemon.png" alt="Interaction with fingerprintd" id="figure2" />
<p class="img-caption"><strong>Figure 2.</strong> Interaction of the
fingerprint daemon (<code>fingerprintd</code>) with the fingerprint vendor-specific library</p>

<h2 id=fingerprint_implementation_guidelines>Fingerprint implementation guidelines</h2>

<p>The guidelines in this section are intended to ensure the following:</p>

<ul>
  <li>Fingerprint data is not leaked
  <li>Fingerprint data is removed when a user is removed from a device
</ul>

<p>Here are the guidelines:</p>

<ol>
  <li>Raw fingerprint data or derivatives (e.g. templates) must never be accessible
from outside the sensor driver or Trusted Execution Environment (TEE). Hardware
access must be limited to the TEE, if the hardware supports it, and must be protected by
an SELinux policy. That is, 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.
  <li>Fingerprint acquisition, enrollment and recognition must occur inside the TEE.
  <li>Only the encrypted form of the fingerprint data can be stored on the file
system, even if the file system itself is encrypted.
  <li>Fingerprint templates must be signed with a private, device-specific key, for
example with AES, with at least 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
the fingerprint data from a different user on the same device, or from another
device, must not work.
  <li>Implementations must either use the file system path provided by the
  <code>set_active_group()</code> function or provide a way to erase all user template data when the user
is removed. It is strongly recommended that fingerprint template files
be stored as encrypted in the path provided. If this is infeasible due to TEE
storage requirements, then the implementer must add hooks to ensure removal of
the data when the user is removed.
</ol>

<h2 id=major_functions_in_the_fingerprint_hal>Major functions in the Fingerprint HAL</h2>

<p>Below are the major functions in the <code>/hardware/libhardware/include/hardware/fingerprint.h</code> file; see the detailed descriptions in that
file.</p>

<ul>
  <li><strong>enroll.</strong> Switches the HAL state machine to start the collection and storage of a
fingerprint template. As soon as enrollment is complete, or after a timeout,
the HAL state machine is returned to the idle state.
  <li><strong>pre_enroll.</strong> Generates a unique token to indicate the start of a fingerprint enrollment.
Provides a token to the <code>enroll</code> function to ensure there was prior authentication, e.g. using a password. The
token is wrapped and, for example, HMAC'd, once the device credential is
confirmed, to prevent tampering. The token must be checked during enrollment to
verify that the token is still valid.
  <li><strong>get_authenticator_id.</strong> Returns a token associated with the current fingerprint set.
  <li><strong>cancel.</strong> Cancels any pending enroll or authenticate operations. The HAL state machine
is returned to the idle state.
  <li><strong>enumerate.</strong> Synchronous call for enumerating all known fingerprint templates.
  <li><strong>remove.</strong> Deletes a fingerprint template.
  <li><strong>set_active_group.</strong> Restricts a HAL operation to a set of fingerprints that belong to a specified
group (identified by a group identifier, or GID).
  <li><strong>authenticate.</strong> Authenticates a fingerprint-related operation (identified by an operation ID).
  <li><strong>set_notify.</strong> Registers a user function that will get 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.
</ul>

