Android R環境におけるFingerprintBoundKeysTestのエラー解析と解決策

Android R (API Level 30) 環境でCTS Verifierのセキュリティテストを実行した際、FingerprintBoundKeysTestにてクラッシュが発生するケースがあります。エラーログを確認すると、対称鍵の生成時に InvalidAlgorithmParameterException がスローされており、その原因として「生体認証が少なくとも1つ登録されていない必要がある」というシステムチェックに失敗していることが示されています。

E AndroidRuntime: java.lang.RuntimeException: Failed to create a symmetric key
E AndroidRuntime: Caused by: java.security.InvalidAlgorithmParameterException: java.lang.IllegalStateException: At least one biometric must be enrolled to create keys requiring user authentication for every use
E AndroidRuntime:    at android.security.keystore.KeymasterUtils.addUserAuthArgs(KeymasterUtils.java:174)

この現象は、ユーザー認証を要求する鍵を作成するプロセスにおいて、システムが有効な生体認証センサーを検出できない場合に発生します。具体的には、KeymasterUtils 内部の処理にて、利用可能な生体認証のSID(Secure ID)をリスト化しようとする際、対象が存在しないと IllegalStateException をスローする仕様になっています。

問題の特定のため、フレームワークの挙動をトレースすると、以下の依存関係が見えてきます。

  1. 鍵生成時、KeymasterUtilsBiometricManager を介して認証IDのリストを取得します。
  2. BiometricService および AuthService は、config_biometric_sensors というリソース配列を読み込み、デバイスで利用可能なセンサー構成を判断します。
  3. デフォルトのAOSP設定ではこの配列が空であるため、システムは生体認証機能が未構成とみなし、鍵生成リクエストを拒否します。

つまり、デバイス上で指紋センサーが物理的に存在していても、ソフトウェア設定が正しく行われていない場合に本エラーが発生します。

修正方法

この問題を解決するには、デバイス固有のオーバーレイ設定を使用して、生体認証センサーの構成を明示的にシステムに通知する必要があります。対象となるファイルは config.xml です。

以下のように、ベンダー固有のリソースオーバーレイ内で config_biometric_sensors 配列を定義してください。通常、指紋認証モジュールには「ID:0」、「モダリティ:2(Fingerprint)」、「強度:15(Strong)」を割り当てます。

<!-- device/[vendor]/[model]/overlay/frameworks/base/core/res/res/values/config.xml -->
<resources>
    <!-- 生体認証センサーのリスト: ID:Modality:Strength -->
    <!-- 例: ID0, Fingerprint (2), Strong (15) -->
    <string-array name="config_biometric_sensors" translatable="false">
        <item>0:2:15</item>
    </string-array>
</resources>

この設定を追加してイメージをビルドし直すことで、AuthService がセンサー構成を正しく認識し、CTS Verifierのテストが正常に完了するようになります。

タグ: Android R CTS Verifier BiometricAuth Keystore Framework

7月6日 21:26 投稿