生体認証要素を使用することにより、Android プラットフォームでの安全な認証が可能になります。
Android フレームワークには、顔と指紋による生体認証が含まれており、Android は、他の形式(虹彩など)の生体認証をサポートするようにカスタマイズできます。BiometricPrompt
クラスを対象とするためには、すべての生体認証の実装はセキュリティ仕様に準拠し、高いレーティングである必要があります。生体認証システムは、Imposter Accept Rate(IAR)と Spoof Accept Rate(SAR)で測定されます。
生体認証セキュリティの仕様について詳しくは、生体認証を用いたロック解除のセキュリティ測定をご覧ください。
ソース
Android 10
- デベロッパーが生体認証の利用可否をクエリできる
BiometricManager
クラスを導入しています。 BiometricPrompt
向けに指紋認証と顔認証を統合しています。
Android 9
BiometricPrompt
向けにのみ指紋認証を統合しています。- FingerprintManager クラスは非推奨です。バンドルアプリとシステムアプリでこのクラスを使用する場合は、代わりに
BiometricPrompt
とBiometricManager
を使用するよう更新します。 BiometricPromptBoundKeysTest
を使用してBiometricPrompt
をテストするよう、FingerprintManager
CTS 検証ツールのテストが更新されています。
実装
ユーザーとデベロッパーがシームレスな生体認証を使用できるよう、生体認証スタックを BiometricPrompt
に統合します。顔、指紋、虹彩といったモダリティのために BiometricPrompt
が有効になっているデバイスの場合、強度に関する要件に準拠する必要があります。強度に関する要件を満たさない場合は、このクラスを実装できません。
生体認証スタックを BiometricPrompt
と BiometricManager
と統合するには、以下を確認してください。
- <Modality>Service が
BiometricService
と正しく接続され、authenticate()
メソッドを接続することを確認します。一般的なモダリティ(指紋と顔)は、スーパークラスから拡張されます。 サポートされていないモダリティを統合する場合は、指紋または顔の例と、生体認証システムに関する CDD のガイドラインに準拠するようにしてください。 - SystemUI で新しいモダリティが適切にサポートされていることを確認してください。
指紋と顔のデフォルトの
BiometricPrompt
ユーザー インターフェースがあります。 - 追加される生体認証システム向けに、
KEYGUARD_DISABLE_*
フラグを使用するようフレームワークを更新してください。 BiometricPrompt
/BiometricManager
に統合した各モダリティに対し、デバイスが CTS と CtsVerifier テストに合格することを確認します。たとえば、指紋と顔の両方を使用する場合、それぞれのテストに合格する必要があります。

HAL 実装のガイドライン
生体認証データが漏洩することのないよう、ユーザーがデバイスから削除される際にデータも削除されるよう、生体認証に関する HAL のガイドラインを遵守するようにします。
- 未処理の生体認証データや派生物(テンプレートなど)に、センサー ドライバや安全な隔離環境(TEE やセキュア エレメントなど)以外からはアクセスできないようにしてください。
- ハードウェアがサポートされている場合は、安全な隔離環境へのハードウェア アクセスを制限し、SELinux ポリシーで保護します。通信チャネル(SPI、I2C など)は、すべてのデバイス ファイルに SELinux ポリシーが明示的に設定されている安全な隔離環境に対してのみアクセス可能にします。
- データ侵害やその他の攻撃から守るため、生体認証の取得、登録、認識は安全な隔離環境内で行われる必要があります。この要件は、強固な生体認証にのみ適用されます。
- ファイル システム自体が暗号化されている場合でも、暗号化された形式の生体認証データまたは派生物のみをファイル システムに保存します。
- リプレイ攻撃から保護するには、デバイス固有の秘密鍵で生体認証テンプレートに署名します。Advanced Encryption Standard(AES)の場合、少なくとも絶対ファイル システム パス、グループ、生体認証 ID を持つテンプレートに署名する必要があります。このテンプレート ファイルは、他のデバイスでは使用できないものであるか、同じデバイスに登録したユーザーのみが使用できるものであることが前提となります。 たとえば、同じデバイス上の別のユーザーによる生体認証データのコピー、または別のデバイスからの生体認証データのコピーを禁止します。
set_active_group()
関数の使用により提供されるファイル システム パスを使用するか、ユーザーが削除されたときにすべてのユーザー テンプレート データを消去する別の方法を提供します。生体認証のテンプレート ファイルは、指定されたパスに暗号化された状態で保存することを強くおすすめします。ストレージ要件として安全な隔離環境が必要なためこれが不可能な場合は、ユーザーを削除したときまたはデバイスをワイプするときに、フックを追加してデータを確実に削除します。
カスタマイズ
デバイスが複数の生体認証をサポートしている場合、ユーザーが設定でデフォルトを指定できるようにします。BiometricPrompt
を実装する際は、ユーザーが明示的にオーバーライドする場合を除いて強固な生体認証をデフォルトにする必要があり、生体認証に関連するリスクを説明する警告メッセージを表示します(例: 「自分自身の写真を使ってデバイスのロック解除が可能です」)。
検証
生体認証を実装するには、以下のテストに合格する必要があります。
- CTS BiometricManager
- CTS BiometricPrompt (基本。検証ツールによってテストの詳細が異なります)
- CtsVerifier BiometricPromptBoundKeysTest: デバイスがサポートする各モダリティに合格する必要があります
- CtsVerifier BiometricTest: デバイスがサポートする各モダリティで合格する必要があります
また、デバイスが AOSP HIDL(fingerprint@2.1、face1.0)を持つ生体認証をサポートしている場合、関連する VTS テスト(fingerprint、face)に合格する必要があります。