デバイスの状態は、ソフトウェアがデバイスにどの程度自由にフラッシュでき、検証を適用できるかを示します。デバイスの状態には LOCKED
と UNLOCKED
があります。LOCKED
のデバイスでは新しいソフトウェアをデバイスにフラッシュできませんが、UNLOCKED
のデバイスでは変更が可能です。
デバイスの電源がオンになると、ブートローダーはまずデバイスが LOCKED
と UNLOCKED
のどちらであるかを確認します。デバイスが UNLOCKED
の場合、ブートローダーはユーザーに警告を表示します。その後、読み込まれた OS がルート オブ トラストにより署名されていなくても、起動を実行します。
デバイスが LOCKED
の場合、ブートローダーはブートの検証の手順に従ってデバイスのソフトウェアを検証します。LOCKED
デバイスは、読み込まれた OS がルート オブ トラストにより適切に署名されている場合のみ起動します。詳細については、起動フローをご覧ください。
デバイスの状態の変更
デバイスの状態を変更するには、fastboot flashing [unlock | lock]
コマンドを使用します。ユーザーデータを保護するため、どの状態遷移でもデータ パーティションがワイプされ、データの削除前にユーザーに確認が求められます。
ユーザーが中古の開発用デバイスを購入する場合、UNLOCKED
から LOCKED
への遷移が予想されます。デバイスがロックされていれば、警告が表示されていない限り、デバイスのメーカーにより設定された状態であることがわかります。デベロッパーが開発目的でデバイス上での検証を無効にする場合、LOCKED
から UNLOCKED
への遷移が予想されます。
ルート オブ トラスト
ルート オブ トラストは、デバイスに保存されている Android のコピーに署名するための暗号鍵です。ルート オブ トラストの非公開部分はデバイスのメーカーにしかわからないもので、Android のすべての配布用バージョンに署名するために使用します。ルート オブ トラストの公開部分はデバイスに埋め込まれ、改変できないような場所(通常は読み取り専用のストレージ)に保存されます。
Android が読み込まれると、ブートローダーはルート オブ トラストを使用して信頼性を検証します。このプロセスの詳細については、ブートの検証をご覧ください。デバイスには複数のブートローダーが存在することもあり、そのため複数の暗号鍵を使用できます。
ユーザー設定可能なルート オブ トラスト
ユーザーは必要に応じてルート オブ トラスト(公開鍵など)を設定できます。組み込みのルート オブ トラストに加えて、このユーザー設定可能な確認付きブートのルート オブ トラストを使用できる場合があり、Google Pixel デバイスでは使用できます。
ユーザー設定可能なルート オブ トラストを実装する場合、次のように行う必要があります。
- ユーザー設定可能なルート オブ トラストを設定またはクリアするには、物理的な確認が必要です。
- ユーザー設定可能なルート オブ トラストは、エンドユーザーのみが設定できます。出荷時や、エンドユーザーがデバイスを入手する前の中間点で設定することはできません。
- ユーザー設定可能なルート オブ トラストは、改ざん検出可能なストレージに保存されます。改ざん検出可能とは、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