キー構成証明を使用してハードウェア格納型キーペアを検証する

キー構成証明を活用すると、デバイスのハードウェア格納型キーストア内に、アプリで使用するキー が格納されるため、信頼性が向上します。以下のセクションでは、ハードウェア格納型キーのプロパティを検証する方法と、構成証明書の拡張データを解釈する方法について説明します。

始める前に: デバイスがハードウェア レベルのキー構成証明をサポートしていることを確認する

実稼働レベルの環境でデバイスのハードウェア格納型キーのプロパティを検証する前に、デバイスが ハードウェアレベルのキー構成証明をサポートしているか確認する必要があります。そのためには、Google 構成証明ルートキーによって署名されたルート証明書が構成証明書 チェーン内に含まれているか、attestationSecurityLevel要素が キー説明 データ構造内でTrustedEnvironmentセキュリティレベルまたは StrongBoxセキュリティレベルに設定されているかを確認する必要があります。

また、証明書チェーン内の署名を検証し、 証明書失効ステータスリストをチェックすることで、チェーン内のどのキーも失効していないことを確認することも重要です。すべてが有効な状態で、かつ、ルートが Google のルート鍵でない限り、構成証明を全面的に信頼しないようにしてください。

ハードウェア格納型キーペアを取得して検証する

キーの構成証明の際に、キーペアのエイリアスを指定し、その証明書チェーンを取得します。この証明書チェーンを使用することで、キーペアのプロパティを検証できます。

デバイスがハードウェアレベルのキー構成証明をサポートしている場合、このチェーン内のルート証明書 は、デバイスのハードウェア格納型キーストアに安全に プロビジョニングされている構成証明ルートキーを使用して署名されます。

キー構成証明を実装する手順は次のとおりです。

  1. KeyStore オブジェクトの getCertificateChain() メソッドを使用して、ハードウェア格納型キーストアに関連付けられた X.509 証明書チェーンへの参照を取得します。
  2. 検証用に信頼できる別のサーバーに証明書を送信します。

    注意: 同じデバイスで次の検証プロセスを行わないでください。そのデバイスの Android システムが侵害されている場合、信頼できないデータが検証プロセスで信頼される可能性があります。

  3. 使用しているツールセットに最適な X.509 証明書チェーン解析 / 検証ライブラリへの参照を取得します。公開ルート証明書が信頼できることおよび、各証明書がチェーン内の次の証明書に署名していることを確認します。

  4. 各証明書の失効ステータスを調べ、どの証明書も失効していないことを確認します。

  5. 必要に応じて、新しい証明書チェーンにのみ存在する証明書のプロビジョニング情報拡張データを検査します。

    使用しているツールセットに最適な CBOR パーサー ライブラリへの参照を取得します。 証明書のプロビジョニング情報拡張データを含むルートに最も近い証明書を探します。パーサーを使用して、その証明書から証明書のプロビジョニング 情報拡張データを抽出します。

    詳しくは、 プロビジョニング情報拡張機能のセクションをご覧ください。

  6. 使用しているツールセットに最適な ASN.1 パーサー ライブラリへの参照を取得します。 キー構成証明書の拡張データを含むルートに最も近い証明書を見つけます。証明書のプロビジョニング情報 拡張データが存在する場合、キー構成証明書 拡張データは直後の証明書に存在している必要があります。パーサーを使用して、その証明書からキー構成証明書拡張データを抽出します。

    注意:キー構成証明書の拡張データがチェーンのリーフ証明書にあるとは限りません。チェーン内の最初の拡張データのみが信頼できます。拡張データのそれ以降のインスタンスは、安全なハードウェアによって発行されたものではなく、チェーンを拡張しようとする攻撃者が、信頼できないキーの偽の証明書を作成しようとして発行した可能性があります。

    こちらのキー構成証明サンプルでは、Bouncy Castle の ASN.1 パーサーを使用して、構成証明書の拡張データを抽出しています。このサンプルは、独自のパーサーを作成する際のリファレンスとして利用できます。 リファレンスとして利用できます。

    詳しくは、 キー構成証明拡張データのスキーマのセクションをご覧ください。

  7. 前の手順で取得した拡張データの整合性を確認し、 ハードウェア格納型キーに含まれると想定される値のセットと比較します。

ルート証明書

構成証明の信頼性は、チェーンのルート証明書によって決まります。Google Play などの各種 Google アプリを利用するうえで必要とされるテストに合格し、Android 7.0(API レベル 24)以降を搭載している Android デバイスは、Google Hardware Attestation Root ルート証明書で署名された構成証明キーを使用しています。なお、Android 8.0(API レベル 26)までは構成証明は必須ではありませんでした。有効なルート証明書のセットは、 JSON 形式の配列としてダウンロードできます。

ルート証明書

キー構成証明書チェーンを検証する際は、次の 2 つのルート証明書を信頼アンカーとして使用する必要があります。

-----BEGIN CERTIFICATE-----
MIIFHDCCAwSgAwIBAgIJAPHBcqaZ6vUdMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMjIwMzIwMTgwNzQ4WhcNNDIwMzE1MTgw
NzQ4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQB8cMqTllHc8U+qCrOlg3H7
174lmaCsbo/bJ0C17JEgMLb4kvrqsXZs01U3mB/qABg/1t5Pd5AORHARs1hhqGIC
W/nKMav574f9rZN4PC2ZlufGXb7sIdJpGiO9ctRhiLuYuly10JccUZGEHpHSYM2G
tkgYbZba6lsCPYAAP83cyDV+1aOkTf1RCp/lM0PKvmxYN10RYsK631jrleGdcdkx
oSK//mSQbgcWnmAEZrzHoF1/0gso1HZgIn0YLzVhLSA/iXCX4QT2h3J5z3znluKG
1nv8NQdxei2DIIhASWfu804CA96cQKTTlaae2fweqXjdN1/v2nqOhngNyz1361mF
mr4XmaKH/ItTwOe72NI9ZcwS1lVaCvsIkTDCEXdm9rCNPAY10iTunIHFXRh+7KPz
lHGewCq/8TOohBRn0/NNfh7uRslOSZ/xKbN9tMBtw37Z8d2vvnXq/YWdsm1+JLVw
n6yYD/yacNJBlwpddla8eaVMjsF6nBnIgQOf9zKSe06nSTqvgwUHosgOECZJZ1Eu
zbH4yswbt02tKtKEFhx+v+OTge/06V+jGsqTWLsfrOCNLuA8H++z+pUENmpqnnHo
vaI47gC+TNpkgYGkkBT6B/m/U01BuOBBTzhIlMEZq9qkDWuM2cA5kW5V3FJUcfHn
w1IdYIg2Wxg7yHcQZemFQg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICIjCCAaigAwIBAgIRAISp0Cl7DrWK5/8OgN52BgUwCgYIKoZIzj0EAwMwUjEc
MBoGA1UEAwwTS2V5IEF0dGVzdGF0aW9uIENBMTEQMA4GA1UECwwHQW5kcm9pZDET
MBEGA1UECgwKR29vZ2xlIExMQzELMAkGA1UEBhMCVVMwHhcNMjUwNzE3MjIzMjE4
WhcNMzUwNzE1MjIzMjE4WjBSMRwwGgYDVQQDDBNLZXkgQXR0ZXN0YXRpb24gQ0Ex
MRAwDgYDVQQLDAdBbmRyb2lkMRMwEQYDVQQKDApHb29nbGUgTExDMQswCQYDVQQG
EwJVUzB2MBAGByqGSM49AgEGBSuBBAAiA2IABCPaI3FO3z5bBQo8cuiEas4HjqCt
G/mLFfRT0MsIssPBEEU5Cfbt6sH5yOAxqEi5QagpU1yX4HwnGb7OtBYpDTB57uH5
Eczm34A5FNijV3s0/f0UPl7zbJcTx6xwqMIRq6NCMEAwDwYDVR0TAQH/BAUwAwEB
/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFFIyuyz7RkOb3NaBqQ5lZuA0QepA
MAoGCCqGSM49BAMDA2gAMGUCMETfjPO/HwqReR2CS7p0ZWoD/LHs6hDi422opifH
EUaYLxwGlT9SLdjkVpz0UUOR5wIxAIoGyxGKRHVTpqpGRFiJtQEOOTp/+s1GcxeY
uR2zh/80lQyu9vAFCj6E4AXc+osmRg==
-----END CERTIFICATE-----
  
以前に発行されたルート証明書
-----BEGIN CERTIFICATE-----
MIIFYDCCA0igAwIBAgIJAOj6GWMU0voYMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTYwNTI2MTYyODUyWhcNMjYwNTI0MTYy
ODUyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
AGMCAwEAAaOBpjCBozAdBgNVHQ4EFgQUNmHhAHyIBQlRi0RsR/8aTMnqTxIwHwYD
VR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB/zAO
BgNVHQ8BAf8EBAMCAYYwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cHM6Ly9hbmRyb2lk
Lmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wDQYJKoZIhvcNAQELBQAD
ggIBACDIw41L3KlXG0aMiS//cqrG+EShHUGo8HNsw30W1kJtjn6UBwRM6jnmiwfB
Pb8VA91chb2vssAtX2zbTvqBJ9+LBPGCdw/E53Rbf86qhxKaiAHOjpvAy5Y3m00m
qC0w/Zwvju1twb4vhLaJ5NkUJYsUS7rmJKHHBnETLi8GFqiEsqTWpG/6ibYCv7rY
DBJDcR9W62BW9jfIoBQcxUCUJouMPH25lLNcDc1ssqvC2v7iUgI9LeoM1sNovqPm
QUiG9rHli1vXxzCyaMTjwftkJLkf6724DFhuKug2jITV0QkXvaJWF4nUaHOTNA4u
JU9WDvZLI1j83A+/xnAJUucIv/zGJ1AMH2boHqF8CY16LpsYgBt6tKxxWH00XcyD
CdW2KlBCeqbQPcsFmWyWugxdcekhYsAWyoSf818NUsZdBWBaR/OukXrNLfkQ79Iy
ZohZbvabO/X+MVT3rriAoKc8oE2Uws6DF+60PV7/WIPjNvXySdqspImSN78mflxD
qwLqRBYkA3I75qppLGG9rp7UCdRjxMl8ZDBld+7yvHVgt1cVzJx9xnyGCC23Uaic
MDSXYrB4I4WHXPGjxhZuCuPBLTdOLU8YRvMYdEvYebWHMpvwGCF6bAx3JBpIeOQ1
wDB5y0USicV3YgYGmi+NZfhA4URSh77Yd6uuJOJENRaNVTzk
-----END CERTIFICATE-----
  
-----BEGIN CERTIFICATE-----
MIIFHDCCAwSgAwIBAgIJANUP8luj8tazMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTkxMTIyMjAzNzU4WhcNMzQxMTE4MjAz
NzU4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBOMaBc8oumXb2voc7XCWnu
XKhBBK3e2KMGz39t7lA3XXRe2ZLLAkLM5y3J7tURkf5a1SutfdOyXAmeE6SRo83U
h6WszodmMkxK5GM4JGrnt4pBisu5igXEydaW7qq2CdC6DOGjG+mEkN8/TA6p3cno
L/sPyz6evdjLlSeJ8rFBH6xWyIZCbrcpYEJzXaUOEaxxXxgYz5/cTiVKN2M1G2ok
QBUIYSY6bjEL4aUN5cfo7ogP3UvliEo3Eo0YgwuzR2v0KR6C1cZqZJSTnghIC/vA
D32KdNQ+c3N+vl2OTsUVMC1GiWkngNx1OO1+kXW+YTnnTUOtOIswUP/Vqd5SYgAI
mMAfY8U9/iIgkQj6T2W6FsScy94IN9fFhE1UtzmLoBIuUFsVXJMTz+Jucth+IqoW
Fua9v1R93/k98p41pjtFX+H8DslVgfP097vju4KDlqN64xV1grw3ZLl4CiOe/A91
oeLm2UHOq6wn3esB4r2EIQKb6jTVGu5sYCcdWpXr0AUVqcABPdgL+H7qJguBw09o
jm6xNIrw2OocrDKsudk/okr/AwqEyPKw9WnMlQgLIKw1rODG2NvU9oR3GVGdMkUB
ZutL8VuFkERQGt6vQ2OCw0sV47VMkuYbacK/xyZFiRcrPJPb41zgbQj9XAEyLKCH
ex0SdDrx+tWUDqG8At2JHA==
-----END CERTIFICATE-----
  
-----BEGIN CERTIFICATE-----
MIIFHDCCAwSgAwIBAgIJAMNrfES5rhgxMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMjExMTE3MjMxMDQyWhcNMzYxMTEzMjMx
MDQyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBTNNZe5cuf8oiq+jV0itTG
zWVhSTjOBEk2FQvh11J3o3lna0o7rd8RFHnN00q4hi6TapFhh4qaw/iG6Xg+xOan
63niLWIC5GOPFgPeYXM9+nBb3zZzC8ABypYuCusWCmt6Tn3+Pjbz3MTVhRGXuT/T
QH4KGFY4PhvzAyXwdjTOCXID+aHud4RLcSySr0Fq/L+R8TWalvM1wJJPhyRjqRCJ
erGtfBagiALzvhnmY7U1qFcS0NCnKjoO7oFedKdWlZz0YAfu3aGCJd4KHT0MsGiL
Zez9WP81xYSrKMNEsDK+zK5fVzw6jA7cxmpXcARTnmAuGUeI7VVDhDzKeVOctf3a
0qQLwC+d0+xrETZ4r2fRGNw2YEs2W8Qj6oDcfPvq9JySe7pJ6wcHnl5EZ0lwc4xH
7Y4Dx9RA1JlfooLMw3tOdJZH0enxPXaydfAD3YifeZpFaUzicHeLzVJLt9dvGB0b
HQLE4+EqKFgOZv2EoP686DQqbVS1u+9k0p2xbMA105TBIk7npraa8VM0fnrRKi7w
lZKwdH+aNAyhbXRW9xsnODJ+g8eF452zvbiKKngEKirK5LGieoXBX7tZ9D1GNBH2
Ob3bKOwwIWdEFle/YF/h6zWgdeoaNGDqVBrLr2+0DtWoiB1aDEjLWl9FmyIUyUm7
mD/vFDkzF+wm7cyWpQpCVQ==
-----END CERTIFICATE-----
  

受け取った構成証明書チェーンのルート証明書にこの公開鍵が含まれ、 チェーン内のどの証明書も失効していない場合は、 次のことがわかります。

  1. キーは、Google が安全であると考えるハードウェアに格納されている。
  2. そのキーには、構成証明書に記載されているプロパティがある。

構成証明書チェーンが別のルート公開鍵を持っていた場合、Google は、そのハードウェアのセキュリティについて何も主張しません 。これは、キーが不正使用されているということではなく、キーがセキュアなハードウェア内にあることを証明書が証明できないだけです。必要に応じて、セキュリティの前提条件を調整します。

ルート証明書にこのページの公開鍵が含まれていない場合は、次の 2 つの原因が考えられます。

  • ほとんどの場合、デバイスには 7.0 より前の Android バージョンが搭載されていて、ハードウェア構成証明がサポートされていません。この場合 Android は、同じタイプの構成証明書を生成する構成証明書をソフトウェア レベルで実装していますが、この構成証明書は Android ソースコード内にハードコーディングされたキーで署名されています。この署名キーは秘密ではないため、構成証明書は、セキュアなハードウェアであることを装った攻撃者によって作成されたものの可能性があります。
  • 他の原因としては、デバイスが Google Play デバイスではないことが考えられます。その場合デバイス メーカーは、独自のルート証明書を自由に作成し、構成証明データの意味を定義できます。デバイス メーカーのマニュアルをご覧ください。なお、このような設定を行っているデバイス メーカーは、Google が知る範囲では存在しません。

ハードウェア構成証明ルート証明書のローテーション

Google は、Android キー構成証明用の新しいルート証明書を導入します 。この変更により、機密性の高いアプリケーションの構成証明プロセスのセキュリティと信頼性が向上します。Android キー構成証明(KeyMint)用に新しいルートキーが生成されました。新しいルートは ECDSA P-384 キーです。

ご対応のお願い

  • アプリが Android キー構成証明に依存している場合は、2026 年 3 月 31 日までに新しいルート証明書をトラスト ストアに追加してください。新しい証明書と古い証明書の両方を https://android.googleapis.com/attestation/root からダウンロードしてください。
  • リモートキー プロビジョニング(RKP)を使用するデバイスは、2026 年 2 月にこの新しい証明書をルートとする証明書を受け取り始めます。RKP 対応デバイスは、2026 年 4 月 10 日までに新しいルートのみを使用するようになります。
  • 新しいルート証明書と既存のルート証明書の両方を信頼するように、構成証明プロセスを更新してください。出荷時にプロビジョニングされたキーを使用する古いデバイスは、鍵のローテーションをサポートしていないため、引き続き古いルートを使用します。
  • 証明書拡張機能のスキーマ自体は変更されません。ルートのみが変更されます。
  • 新しいルートの人間が読める形式と機械が読める形式の両方が一般公開されます。

ベスト プラクティス

ランタイム時に信頼できるルートのエンドポイントにクエリを実行しないでください。この操作はセキュリティ リスクを生じさせます。 信頼のルートの変更は、正式なプロセスを通じて処理してください。

出荷時キーの段階的な廃止: リモートキー プロビジョニング(RKP)

Android 16 以降を搭載したデバイスでは、システムは RKP のみをサポートします。このポリシーでは、 出荷時キーを段階的に廃止します。これにより、構成証明キーのプロビジョニングと管理の方法が改善されます。Android 15 ポリシーでは RKP サポートは任意でした。 RKP では、システムがキーをデバイスに直接プログラミングしないため、キーの漏洩を防ぐことができます。 これらのキーをデバイスから削除することはできません。キーを失効させる必要がある場合は、失効の対象を 1 つのデバイスに絞ることができます。

構成証明検証ライブラリ

構成証明検証 Kotlin ライブラリを使用して、キー構成証明書チェーンを検証します。さらに、このライブラリには新しいルート証明書がすでに統合されています。別の検証ツールを使用している場合は、代わりに Kotlin ライブラリに移行することをおすすめします。 十分にテストされており、カスタム検証ツールでは見落としがちなエッジケースもカバーしています。

証明書失効ステータス リスト

構成証明キーは、誤操作や攻撃者による抽出の疑いなど、さまざまな理由で失効することがあります。したがって、構成証明書チェーン内の各証明書のステータスを、公式の証明書失効ステータス リスト(CRL)と照合する必要があります。このリストは Google によって管理され、https://android.googleapis.com/attestation/status で公開されています。HTTP レスポンスの Cache-Control ヘッダーによって更新を確認する頻度が決まるため、検証するすべての証明書に対してネットワーク リクエストを行う必要はありません。この URL から、通常の有効なステータスを持たない証明書の失効ステータスが記載された JSON ファイルが得られます。JSON ファイルの形式は、次の JSON スキーマ(Draft 07)定義に準拠しています。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "entries": {
      "description" : "Each entry represents the status of an attestation key. The dictionary-key is the certificate serial number in lowercase hex.",
      "type": "object",
      "propertyNames": {
        "pattern": "^[a-f1-9][a-f0-9]*$"
      },
      "additionalProperties": {
        "type": "object",
        "properties": {
          "status": {
            "description": "[REQUIRED] Current status of the key.",
            "type": "string",
            "enum": ["REVOKED", "SUSPENDED"]
          },
          "expires": {
            "description": "[OPTIONAL] UTC date when certificate expires in ISO8601 format (YYYY-MM-DD). Can be used to clear expired certificates from the status list.",
            "type": "string",
            "format": "date"
          },
          "reason": {
            "description": "[OPTIONAL] Reason for the current status.",
            "type": "string",
            "enum": ["UNSPECIFIED", "KEY_COMPROMISE", "CA_COMPROMISE", "SUPERSEDED", "SOFTWARE_FLAW"]
          },
          "comment": {
            "description": "[OPTIONAL] Free form comment about the key status.",
            "type": "string",
            "maxLength": 140
          }
        },
        "required": ["status"],
        "additionalProperties": false
      }
    }
  },
  "required": ["entries"],
  "additionalProperties": false
}

CRL の例:

{
  "entries": {
    "2c8cdddfd5e03bfc": {
      "status": "REVOKED",
      "expires": "2020-11-13",
      "reason": "KEY_COMPROMISE",
      "comment": "Key stored on unsecure system"
    },
    "c8966fcb2fbb0d7a": {
      "status": "SUSPENDED",
      "reason": "SOFTWARE_FLAW",
      "comment": "Bug in keystore causes this key malfunction b/555555"
    }
  }
}

証明書失効ポリシー

構成証明は、Android エコシステムにおける不正使用対策と信頼の基盤となります。デバイスの起動状態について、 暗号的に検証可能なステートメントをデバイス外のパーティに提供します。

Android 構成証明キーの証明書は、構成証明の有効性が重要であるため、キーが侵害された場合に失効します。このセクションでは、証明書が失効する際のポリシーについて説明します。 このポリシーは、今後変更され、追加のケースが列挙される可能性があります。

失効の対象となるもの

漏洩した構成証明キーは、常に証明書が失効する可能性があります。 漏洩は、次のような方法で検出できます。

  • 実際の構成証明データの分析。
  • ソーシャル メディアやその他の公開サイトでの構成証明キーの発見。
  • セキュリティ研究者からの直接レポート。

発見されると、構成証明書のシリアル番号が 失効リストに追加され、構成証明書が失効します。通常 、発見から数日以内に失効しますが、まれに時間がかかることがあります。たとえば、 漏洩した構成証明キーの証明書の失効は、失効の影響を受けるデバイスを 安全に再プロビジョニングできる場合は通常遅延します。失効のタイムラインでは、失効の影響の規模 も重要な要素となります。

キー構成証明拡張データのスキーマ

プロビジョニング情報拡張データのスキーマ