デバイスの状態

デバイスの状態は、ソフトウェアがデバイスにどの程度自由にフラッシュでき、検証を適用できるかを示します。デバイスの状態には LOCKEDUNLOCKED があります。LOCKED のデバイスでは新しいソフトウェアをデバイスにフラッシュできませんが、UNLOCKED のデバイスでは変更が可能です。

デバイスの電源がオンになると、ブートローダーはまずデバイスが LOCKEDUNLOCKED のどちらであるかを確認します。デバイスが UNLOCKED の場合、ブートローダーはユーザーに警告を表示します。その後、読み込まれた OS がルート オブ トラストにより署名されていなくても、起動を実行します。

デバイスが LOCKED の場合、ブートローダーはブートの検証の手順に従ってデバイスのソフトウェアを検証します。LOCKED デバイスは、読み込まれた OS がルート オブ トラストにより適切に署名されている場合のみ起動します。詳細については、起動フローをご覧ください。

デバイスの状態を変更する

デバイスの状態を変更するには、fastboot flashing [unlock | lock] コマンドを使用します。ユーザーデータを保護するため、どの状態遷移でもデータ パーティションがワイプされ、データの削除前にユーザーに確認が求められます。

ユーザーが中古の開発用デバイスを購入する場合、UNLOCKED から LOCKED への遷移が予想されます。デバイスがロックされていれば、警告が表示されていない限り、デバイスのメーカーにより設定された状態であることがわかります。LOCKED から UNLOCKED への遷移は、デベロッパーが開発目的のためデバイス上での検証を無効にする場合に発生します。

ルート オブ トラスト

ルート オブ トラストは、デバイスに保存されている Android のコピーに署名するための暗号鍵です。ルート オブ トラストの非公開部分はデバイスのメーカーにしかわからないもので、Android のすべての配布用バージョンに署名するために使用します。ルート オブ トラストの公開部分はデバイスに埋め込まれ、改変できないような場所(通常は読み取り専用のストレージ)に保存されます。

Android が読み込まれると、ブートローダーはルート オブ トラストを使用して信頼性を検証します。このプロセスの詳細については、ブートの検証をご覧ください。デバイスには複数のブートローダーが存在することもあり、そのため複数の暗号鍵を使用できます。

ユーザー設定可能なルート オブ トラスト

ユーザーは必要に応じてルート オブ トラスト(公開鍵など)を設定できます。デバイスは確認済みの起動のために、組み込みのルート オブ トラストではなく、このユーザー設定可能なルート オブ トラストを使用できます。これにより、ユーザーは確認済みの起動のセキュリティ向上を損なわずに Android のカスタム バージョンのインストールと使用ができます。

ユーザー設定可能なルート オブ トラストを実装する場合、次のように行う必要があります。

  • ユーザー設定可能なルート オブ トラストを設定またはクリアするには、物理的な確認が必要です。
  • ユーザー設定可能なルート オブ トラストは、エンドユーザーのみが設定できます。出荷時や、エンドユーザーがデバイスを入手する前の中間点で設定することはできません。
  • ユーザー設定可能なルート オブ トラストは、改ざん検出可能なストレージに保存されます。 改ざん検出可能とは、Android でデータの改ざん(上書きや変更など)があった場合に、それを検出できることを表します。
  • ユーザー設定可能なルート オブ トラストが設定されている場合、組み込みのルート オブ トラストまたはユーザー設定可能なルート オブ トラストで署名された Android のバージョンをデバイスで起動できます。
  • ユーザー設定可能なルート オブ トラストを使用してデバイスが起動するたびに、デバイスが Android のカスタム バージョンで読み込まれていることがユーザーに通知されます。たとえば、警告画面の場合については、カスタムキーが設定された LOCKED のデバイスをご覧ください。

ユーザー設定可能なルート オブ トラストを実装する方法のひとつとして、デバイスが UNLOCKED 状態の場合のみフラッシュまたはクリアできる仮想パーティションを使用することが挙げられます。Google Pixel 2 デバイスではこの方法が採用されていて、仮想パーティションは avb_custom_key と呼ばれています。このパーティションのデータの形式は、avbtool extract_public_key コマンドの出力です。以下に、ユーザー設定可能なルート オブ トラストを設定する方法の例を示します。

avbtool extract_public_key --key key.pem --output pkmd.bin
fastboot flash avb_custom_key pkmd.bin

ユーザー設定可能なルート オブ トラストは、次のコマンドでクリアできます。

fastboot erase avb_custom_key