کیاستور (Keystore) مکانی امنتر برای ایجاد، ذخیره و استفاده از کلیدهای رمزنگاری به روشی کنترلشده فراهم میکند. هنگامی که ذخیرهسازی کلید با پشتیبانی سختافزاری در دسترس و مورد استفاده قرار میگیرد، محتوای کلید در برابر استخراج از دستگاه ایمنتر است و کیمینت (که قبلاً کیمستر (Keymaster) نام داشت) محدودیتهایی را اعمال میکند که دور زدن آنها دشوار است.
با این حال، این تنها در صورتی صادق است که کلیدهای Keystore در حافظهی پشتیبانیشده توسط سختافزار قرار داشته باشند. در Keymaster 1، هیچ راهی برای برنامهها یا سرورهای راه دور وجود نداشت که بتوانند به طور قابل اعتمادی تأیید کنند که آیا این مورد وجود دارد یا خیر. سرویس Keystore، لایه انتزاعی سختافزاری Keymaster (HAL) موجود را بارگذاری میکرد و هر آنچه HAL در مورد پشتیبانی سختافزاری کلیدها میگفت را باور میکرد.
برای رفع این مشکل، قابلیت تصدیق کلید در اندروید ۷.۰ (Keymaster 2) و قابلیت تصدیق شناسه در اندروید ۸.۰ (Keymaster 3) معرفی شدند.
هدف از تصدیق کلید، ارائه روشی برای تعیین دقیق این است که آیا یک جفت کلید نامتقارن دارای پشتیبانی سختافزاری است یا خیر، ویژگیهای کلید چیست و چه محدودیتهایی برای استفاده از آن اعمال میشود.
تأیید شناسه به دستگاه اجازه میدهد تا مدرکی دال بر شناسههای سختافزاری خود، مانند شماره سریال یا IMEI، ارائه دهد.
گواهی کلیدی
برای پشتیبانی از گواهی کلید، اندروید ۷.۰ مجموعهای از برچسبها، نوعها و متدها را به HAL معرفی کرد.
برچسبها
-  
Tag::ATTESTATION_CHALLENGE -  
Tag::INCLUDE_UNIQUE_ID -  
Tag::RESET_SINCE_ID_ROTATION 
نوع
کلیدساز ۲ و پایینتر
typedef struct {
    keymaster_blob_t* entries;
    size_t entry_count;
} keymaster_cert_chain_t;
 روش AttestKey
کلیدساز ۳
    attestKey(vec<uint8_t> keyToAttest, vec<KeyParameter> attestParams)
        generates(ErrorCode error, vec<vec<uint8_t>> certChain);کلیدساز ۲ و پایینتر
keymaster_error_t (*attest_key)(const struct keymaster2_device* dev,
        const keymaster_key_blob_t* key_to_attest,
        const keymaster_key_param_set_t* attest_params,
        keymaster_cert_chain_t* cert_chain);
-  
devساختار دستگاه Keymaster است. -  
keyToAttestقطعه کلید برگردانده شده ازgenerateKeyاست که گواهی برای آن ایجاد شده است. -  
attestParamsفهرستی از پارامترهای لازم برای تصدیق است. این شاملTag::ATTESTATION_CHALLENGEو احتمالاًTag::RESET_SINCE_ID_ROTATIONو همچنینTag::APPLICATION_IDوTag::APPLICATION_DATAمیشود. دو مورد آخر در صورتی که در طول تولید کلید مشخص شده باشند، برای رمزگشایی key blob ضروری هستند. -  
certChainپارامتر خروجی است که آرایهای از گواهیها را برمیگرداند. ورودی ۰ گواهی گواهی است، به این معنی که کلید را ازkeyToAttestگواهی میکند و شامل پسوند گواهی است. 
 متد attestKey یک عملیات کلید عمومی روی کلید تایید شده در نظر گرفته میشود، زیرا میتواند در هر زمانی فراخوانی شود و نیازی به رعایت محدودیتهای مجوز ندارد. به عنوان مثال، اگر کلید تایید شده برای استفاده نیاز به احراز هویت کاربر داشته باشد، میتوان بدون احراز هویت کاربر، یک تاییدیه ایجاد کرد.
گواهی تأیید
گواهی تأیید، یک گواهی استاندارد X.509 است، با یک افزونه تأیید اختیاری که شامل توضیحی از کلید تأیید شده است. گواهی با یک کلید تأیید گواهی شده امضا شده است. کلید تأیید ممکن است از الگوریتمی متفاوت از کلید مورد تأیید استفاده کند.
گواهی تأیید شامل فیلدهای جدول زیر است و نمیتواند شامل هیچ فیلد اضافی باشد. برخی از فیلدها مقدار فیلد ثابتی را مشخص میکنند. آزمونهای CTS تأیید میکنند که محتوای گواهی دقیقاً مطابق تعریف است.
توالی گواهی
| نام فیلد (به RFC 5280 مراجعه کنید) | ارزش | 
|---|---|
| گواهی tbs | توالی گواهی TBSC | 
| الگوریتم امضا |  شناسه الگوریتم مورد استفاده برای امضای کلید: ECDSA برای کلیدهای EC، RSA برای کلیدهای RSA.  | 
| مقدار امضا | رشته بیتی، امضا روی tbsCertificate کدگذاری شده توسط ASN.1 DER محاسبه شده است. | 
توالی گواهی TBSC
| نام فیلد (به RFC 5280 مراجعه کنید) | ارزش | 
|---|---|
 version | عدد صحیح ۲ (به معنی گواهی نسخه ۳) | 
 serialNumber | عدد صحیح ۱ (مقدار ثابت: در همه گواهیها یکسان است) | 
 signature | شناسه الگوریتم مورد استفاده برای امضای کلید: ECDSA برای کلیدهای EC، RSA برای کلیدهای RSA. | 
 issuer | همانند فیلد موضوع کلید تأیید دستهای. | 
 validity |  توالی دو تاریخ، شامل مقادیر Tag::ACTIVE_DATETIME و Tag::USAGE_EXPIRE_DATETIME . این مقادیر از اول ژانویه ۱۹۷۰ به میلیثانیه هستند. برای نمایش صحیح تاریخ در گواهیها به RFC 5280 مراجعه کنید.اگر Tag::ACTIVE_DATETIME وجود ندارد، از مقدار Tag::CREATION_DATETIME استفاده کنید. اگر Tag::USAGE_EXPIRE_DATETIME وجود ندارد، از تاریخ انقضای گواهی کلید تایید دستهای استفاده کنید. | 
 subject | CN = "کلید ذخیره کلید اندروید" (مقدار ثابت: در همه گواهیها یکسان است) | 
 subjectPublicKeyInfo | SubjectPublicKeyInfo حاوی کلید عمومی تأیید شده. | 
 extensions/Key Usage |  امضای دیجیتال: اگر کلید هدفی داشته باشد، تنظیم میشود. KeyPurpose::SIGN یا KeyPurpose::VERIFY . تمام بیتهای دیگر تنظیم نشدهاند. | 
 extensions/CRL Distribution Points | ارزش نامشخص | 
 extensions/"attestation" | شناسه OID برابر با ۱.۳.۶.۱.۴.۱.۱۱۱۲۹.۲.۱.۱۷ است؛ محتوا در بخش افزونه گواهی در زیر تعریف شده است. همانند تمام افزونههای گواهی X.۵۰۹، محتوا به صورت یک OCTET_STRING نمایش داده میشود که حاوی یک کدگذاری DER از توالی گواهی است. | 
تمدید گواهینامه
 افزونهی attestation دارای OID 1.3.6.1.4.1.11129.2.1.17 است که حاوی اطلاعاتی در مورد جفت کلید مورد گواهی و وضعیت دستگاه در زمان تولید کلید است.
انواع برچسب Keymaster/KeyMint که در مشخصات رابط AIDL تعریف شدهاند، به صورت زیر به انواع ASN.1 ترجمه میشوند:
| نوع KeyMint یا Keymaster | نوع ASN.1 | یادداشتها | 
|---|---|---|
 ENUM |  INTEGER | |
 ENUM_REP |  SET of INTEGER | |
 UINT |  INTEGER | |
 UINT_REP |  SET of INTEGER | |
 ULONG |  INTEGER | |
 ULONG_REP |  SET of INTEGER | |
 DATE |  INTEGER | میلیثانیه از ۱ ژانویه ۱۹۷۰، ساعت ۰۰:۰۰:۰۰ به وقت گرینویچ. | 
 BOOL |  NULL | حضور در برچسب به معنای درست و غیبت به معنای نادرست است. | 
 BIGNUM | هیچ تگی این نوع را ندارد، بنابراین هیچ نگاشتی تعریف نشده است. | |
 BYTES |  OCTET_STRING | 
طرحواره
محتوای افزونهی گواهیدهی توسط طرح ASN.1 زیر توصیف میشود:
نسخه ۴۰۰
KeyDescription ::= SEQUENCE {
    attestationVersion           INTEGER, # Value 400
    attestationSecurityLevel     SecurityLevel,
    keyMintVersion               INTEGER, # Value 400
    keyMintSecurityLevel         SecurityLevel,
    attestationChallenge         OCTET_STRING,
    uniqueId                     OCTET_STRING,
    softwareEnforced             AuthorizationList,
    hardwareEnforced             AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
    Software                     (0),
    TrustedEnvironment           (1),
    StrongBox                    (2),
}
AuthorizationList ::= SEQUENCE {
    purpose                      [1] EXPLICIT SET OF INTEGER OPTIONAL,
    algorithm                    [2] EXPLICIT INTEGER OPTIONAL,
    keySize                      [3] EXPLICIT INTEGER OPTIONAL,
    blockMode                    [4] EXPLICIT SET OF INTEGER OPTIONAL,
    digest                       [5] EXPLICIT SET OF INTEGER OPTIONAL,
    padding                      [6] EXPLICIT SET OF INTEGER OPTIONAL,
    callerNonce                  [7] EXPLICIT NULL OPTIONAL,
    minMacLength                 [8] EXPLICIT INTEGER OPTIONAL,
    ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
    rsaPublicExponent          [200] EXPLICIT INTEGER OPTIONAL,
    mgfDigest                  [203] EXPLICIT SET OF INTEGER OPTIONAL,
    rollbackResistance         [303] EXPLICIT NULL OPTIONAL,
    earlyBootOnly              [305] EXPLICIT NULL OPTIONAL,
    activeDateTime             [400] EXPLICIT INTEGER OPTIONAL,
    originationExpireDateTime  [401] EXPLICIT INTEGER OPTIONAL,
    usageExpireDateTime        [402] EXPLICIT INTEGER OPTIONAL,
    usageCountLimit            [405] EXPLICIT INTEGER OPTIONAL,
    userSecureId               [502] EXPLICIT INTEGER OPTIONAL,
    noAuthRequired             [503] EXPLICIT NULL OPTIONAL,
    userAuthType               [504] EXPLICIT INTEGER OPTIONAL,
    authTimeout                [505] EXPLICIT INTEGER OPTIONAL,
    allowWhileOnBody           [506] EXPLICIT NULL OPTIONAL,
    trustedUserPresenceReq     [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationReq     [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceReq          [509] EXPLICIT NULL OPTIONAL,
    creationDateTime           [701] EXPLICIT INTEGER OPTIONAL,
    origin                     [702] EXPLICIT INTEGER OPTIONAL,
    rootOfTrust                [704] EXPLICIT RootOfTrust OPTIONAL,
    osVersion                  [705] EXPLICIT INTEGER OPTIONAL,
    osPatchLevel               [706] EXPLICIT INTEGER OPTIONAL,
    attestationApplicationId   [709] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdBrand         [710] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdDevice        [711] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdProduct       [712] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdSerial        [713] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdImei          [714] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdMeid          [715] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdManufacturer  [716] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdModel         [717] EXPLICIT OCTET_STRING OPTIONAL,
    vendorPatchLevel           [718] EXPLICIT INTEGER OPTIONAL,
    bootPatchLevel             [719] EXPLICIT INTEGER OPTIONAL,
    deviceUniqueAttestation    [720] EXPLICIT NULL OPTIONAL,
    attestationIdSecondImei    [723] EXPLICIT OCTET_STRING OPTIONAL,
    moduleHash                 [724] EXPLICIT OCTET_STRING OPTIONAL,
}
Modules ::= SET OF Module
Module ::= SEQUENCE {
    packageName                OCTET_STRING,
    version                    INTEGER,
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey            OCTET_STRING,
    deviceLocked               BOOLEAN,
    verifiedBootState          VerifiedBootState,
    verifiedBootHash           OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
    Verified                   (0),
    SelfSigned                 (1),
    Unverified                 (2),
    Failed                     (3),
}
نسخه ۳۰۰
KeyDescription ::= SEQUENCE {
    attestationVersion           INTEGER, # Value 300
    attestationSecurityLevel     SecurityLevel,
    keyMintVersion               INTEGER, # Value 300
    keymintSecurityLevel         SecurityLevel,
    attestationChallenge         OCTET_STRING,
    uniqueId                     OCTET_STRING,
    softwareEnforced             AuthorizationList,
    hardwareEnforced             AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
    Software                     (0),
    TrustedEnvironment           (1),
    StrongBox                    (2),
}
AuthorizationList ::= SEQUENCE {
    purpose                      [1] EXPLICIT SET OF INTEGER OPTIONAL,
    algorithm                    [2] EXPLICIT INTEGER OPTIONAL,
    keySize                      [3] EXPLICIT INTEGER OPTIONAL,
    blockMode                    [4] EXPLICIT SET OF INTEGER OPTIONAL,
    digest                       [5] EXPLICIT SET OF INTEGER OPTIONAL,
    padding                      [6] EXPLICIT SET OF INTEGER OPTIONAL,
    callerNonce                  [7] EXPLICIT NULL OPTIONAL,
    minMacLength                 [8] EXPLICIT INTEGER OPTIONAL,
    ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
    rsaPublicExponent          [200] EXPLICIT INTEGER OPTIONAL,
    mgfDigest                  [203] EXPLICIT SET OF INTEGER OPTIONAL,
    rollbackResistance         [303] EXPLICIT NULL OPTIONAL,
    earlyBootOnly              [305] EXPLICIT NULL OPTIONAL,
    activeDateTime             [400] EXPLICIT INTEGER OPTIONAL,
    originationExpireDateTime  [401] EXPLICIT INTEGER OPTIONAL,
    usageExpireDateTime        [402] EXPLICIT INTEGER OPTIONAL,
    usageCountLimit            [405] EXPLICIT INTEGER OPTIONAL,
    userSecureId               [502] EXPLICIT INTEGER OPTIONAL,
    noAuthRequired             [503] EXPLICIT NULL OPTIONAL,
    userAuthType               [504] EXPLICIT INTEGER OPTIONAL,
    authTimeout                [505] EXPLICIT INTEGER OPTIONAL,
    allowWhileOnBody           [506] EXPLICIT NULL OPTIONAL,
    trustedUserPresenceReq     [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationReq     [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceReq          [509] EXPLICIT NULL OPTIONAL,
    creationDateTime           [701] EXPLICIT INTEGER OPTIONAL,
    origin                     [702] EXPLICIT INTEGER OPTIONAL,
    rootOfTrust                [704] EXPLICIT RootOfTrust OPTIONAL,
    osVersion                  [705] EXPLICIT INTEGER OPTIONAL,
    osPatchLevel               [706] EXPLICIT INTEGER OPTIONAL,
    attestationApplicationId   [709] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdBrand         [710] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdDevice        [711] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdProduct       [712] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdSerial        [713] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdImei          [714] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdMeid          [715] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdManufacturer  [716] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdModel         [717] EXPLICIT OCTET_STRING OPTIONAL,
    vendorPatchLevel           [718] EXPLICIT INTEGER OPTIONAL,
    bootPatchLevel             [719] EXPLICIT INTEGER OPTIONAL,
    deviceUniqueAttestation    [720] EXPLICIT NULL OPTIONAL,
    attestationIdSecondImei    [723] EXPLICIT OCTET_STRING OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey            OCTET_STRING,
    deviceLocked               BOOLEAN,
    verifiedBootState          VerifiedBootState,
    verifiedBootHash           OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
    Verified                   (0),
    SelfSigned                 (1),
    Unverified                 (2),
    Failed                     (3),
}
نسخه ۲۰۰
KeyDescription ::= SEQUENCE {
    attestationVersion           INTEGER, # Value 200
    attestationSecurityLevel     SecurityLevel,
    keyMintVersion               INTEGER, # Value 200
    keymintSecurityLevel         SecurityLevel,
    attestationChallenge         OCTET_STRING,
    uniqueId                     OCTET_STRING,
    softwareEnforced             AuthorizationList,
    hardwareEnforced             AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
    Software                     (0),
    TrustedEnvironment           (1),
    StrongBox                    (2),
}
AuthorizationList ::= SEQUENCE {
    purpose                      [1] EXPLICIT SET OF INTEGER OPTIONAL,
    algorithm                    [2] EXPLICIT INTEGER OPTIONAL,
    keySize                      [3] EXPLICIT INTEGER OPTIONAL,
    digest                       [5] EXPLICIT SET OF INTEGER OPTIONAL,
    padding                      [6] EXPLICIT SET OF INTEGER OPTIONAL,
    ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
    rsaPublicExponent          [200] EXPLICIT INTEGER OPTIONAL,
    mgfDigest                  [203] EXPLICIT SET OF INTEGER OPTIONAL,
    rollbackResistance         [303] EXPLICIT NULL OPTIONAL,
    earlyBootOnly              [305] EXPLICIT NULL OPTIONAL,
    activeDateTime             [400] EXPLICIT INTEGER OPTIONAL,
    originationExpireDateTime  [401] EXPLICIT INTEGER OPTIONAL,
    usageExpireDateTime        [402] EXPLICIT INTEGER OPTIONAL,
    usageCountLimit            [405] EXPLICIT INTEGER OPTIONAL,
    noAuthRequired             [503] EXPLICIT NULL OPTIONAL,
    userAuthType               [504] EXPLICIT INTEGER OPTIONAL,
    authTimeout                [505] EXPLICIT INTEGER OPTIONAL,
    allowWhileOnBody           [506] EXPLICIT NULL OPTIONAL,
    trustedUserPresenceReq     [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationReq     [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceReq          [509] EXPLICIT NULL OPTIONAL,
    creationDateTime           [701] EXPLICIT INTEGER OPTIONAL,
    origin                     [702] EXPLICIT INTEGER OPTIONAL,
    rootOfTrust                [704] EXPLICIT RootOfTrust OPTIONAL,
    osVersion                  [705] EXPLICIT INTEGER OPTIONAL,
    osPatchLevel               [706] EXPLICIT INTEGER OPTIONAL,
    attestationApplicationId   [709] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdBrand         [710] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdDevice        [711] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdProduct       [712] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdSerial        [713] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdImei          [714] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdMeid          [715] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdManufacturer  [716] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdModel         [717] EXPLICIT OCTET_STRING OPTIONAL,
    vendorPatchLevel           [718] EXPLICIT INTEGER OPTIONAL,
    bootPatchLevel             [719] EXPLICIT INTEGER OPTIONAL,
    deviceUniqueAttestation    [720] EXPLICIT NULL OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey            OCTET_STRING,
    deviceLocked               BOOLEAN,
    verifiedBootState          VerifiedBootState,
    verifiedBootHash           OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
    Verified                   (0),
    SelfSigned                 (1),
    Unverified                 (2),
    Failed                     (3),
}
نسخه ۱۰۰
KeyDescription ::= SEQUENCE {
    attestationVersion           INTEGER, # Value 100
    attestationSecurityLevel     SecurityLevel,
    keyMintVersion               INTEGER, # Value 100
    keymintSecurityLevel         SecurityLevel,
    attestationChallenge         OCTET_STRING,
    uniqueId                     OCTET_STRING,
    softwareEnforced             AuthorizationList,
    hardwareEnforced             AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
    Software                     (0),
    TrustedEnvironment           (1),
    StrongBox                    (2),
}
AuthorizationList ::= SEQUENCE {
    purpose                      [1] EXPLICIT SET OF INTEGER OPTIONAL,
    algorithm                    [2] EXPLICIT INTEGER OPTIONAL,
    keySize                      [3] EXPLICIT INTEGER OPTIONAL,
    digest                       [5] EXPLICIT SET OF INTEGER OPTIONAL,
    padding                      [6] EXPLICIT SET OF INTEGER OPTIONAL,
    ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
    rsaPublicExponent          [200] EXPLICIT INTEGER OPTIONAL,
    mgfDigest                  [203] EXPLICIT SET OF INTEGER OPTIONAL,
    rollbackResistance         [303] EXPLICIT NULL OPTIONAL,
    earlyBootOnly              [305] EXPLICIT NULL OPTIONAL,
    activeDateTime             [400] EXPLICIT INTEGER OPTIONAL,
    originationExpireDateTime  [401] EXPLICIT INTEGER OPTIONAL,
    usageExpireDateTime        [402] EXPLICIT INTEGER OPTIONAL,
    usageCountLimit            [405] EXPLICIT INTEGER OPTIONAL,
    noAuthRequired             [503] EXPLICIT NULL OPTIONAL,
    userAuthType               [504] EXPLICIT INTEGER OPTIONAL,
    authTimeout                [505] EXPLICIT INTEGER OPTIONAL,
    allowWhileOnBody           [506] EXPLICIT NULL OPTIONAL,
    trustedUserPresenceReq     [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationReq     [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceReq          [509] EXPLICIT NULL OPTIONAL,
    creationDateTime           [701] EXPLICIT INTEGER OPTIONAL,
    origin                     [702] EXPLICIT INTEGER OPTIONAL,
    rootOfTrust                [704] EXPLICIT RootOfTrust OPTIONAL,
    osVersion                  [705] EXPLICIT INTEGER OPTIONAL,
    osPatchLevel               [706] EXPLICIT INTEGER OPTIONAL,
    attestationApplicationId   [709] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdBrand         [710] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdDevice        [711] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdProduct       [712] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdSerial        [713] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdImei          [714] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdMeid          [715] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdManufacturer  [716] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdModel         [717] EXPLICIT OCTET_STRING OPTIONAL,
    vendorPatchLevel           [718] EXPLICIT INTEGER OPTIONAL,
    bootPatchLevel             [719] EXPLICIT INTEGER OPTIONAL,
    deviceUniqueAttestation    [720] EXPLICIT NULL OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey            OCTET_STRING,
    deviceLocked               BOOLEAN,
    verifiedBootState          VerifiedBootState,
    verifiedBootHash           OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
    Verified                   (0),
    SelfSigned                 (1),
    Unverified                 (2),
    Failed                     (3),
}
نسخه ۴
KeyDescription ::= SEQUENCE {
    attestationVersion           INTEGER, # Value 4
    attestationSecurityLevel     SecurityLevel,
    keymasterVersion             INTEGER, # Value 41
    keymasterSecurityLevel       SecurityLevel,
    attestationChallenge         OCTET_STRING,
    uniqueId                     OCTET_STRING,
    softwareEnforced             AuthorizationList,
    hardwareEnforced             AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
    Software                     (0),
    TrustedEnvironment           (1),
    StrongBox                    (2),
}
AuthorizationList ::= SEQUENCE {
    purpose                      [1] EXPLICIT SET OF INTEGER OPTIONAL,
    algorithm                    [2] EXPLICIT INTEGER OPTIONAL,
    keySize                      [3] EXPLICIT INTEGER OPTIONAL,
    blockMode                    [4] EXPLICIT SET OF INTEGER OPTIONAL,
    digest                       [5] EXPLICIT SET OF INTEGER OPTIONAL,
    padding                      [6] EXPLICIT SET OF INTEGER OPTIONAL,
    callerNonce                  [7] EXPLICIT NULL OPTIONAL,
    minMacLength                 [8] EXPLICIT INTEGER OPTIONAL,
    ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
    rsaPublicExponent          [200] EXPLICIT INTEGER OPTIONAL,
    rollbackResistance         [303] EXPLICIT NULL OPTIONAL,
    activeDateTime             [400] EXPLICIT INTEGER OPTIONAL,
    originationExpireDateTime  [401] EXPLICIT INTEGER OPTIONAL,
    usageExpireDateTime        [402] EXPLICIT INTEGER OPTIONAL,
    userSecureId               [502] EXPLICIT INTEGER OPTIONAL,
    noAuthRequired             [503] EXPLICIT NULL OPTIONAL,
    userAuthType               [504] EXPLICIT INTEGER OPTIONAL,
    authTimeout                [505] EXPLICIT INTEGER OPTIONAL,
    allowWhileOnBody           [506] EXPLICIT NULL OPTIONAL,
    trustedUserPresenceReq     [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationReq     [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceReq          [509] EXPLICIT NULL OPTIONAL,
    creationDateTime           [701] EXPLICIT INTEGER OPTIONAL,
    origin                     [702] EXPLICIT INTEGER OPTIONAL,
    rootOfTrust                [704] EXPLICIT RootOfTrust OPTIONAL,
    osVersion                  [705] EXPLICIT INTEGER OPTIONAL,
    osPatchLevel               [706] EXPLICIT INTEGER OPTIONAL,
    attestationApplicationId   [709] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdBrand         [710] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdDevice        [711] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdProduct       [712] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdSerial        [713] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdImei          [714] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdMeid          [715] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdManufacturer  [716] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdModel         [717] EXPLICIT OCTET_STRING OPTIONAL,
    vendorPatchLevel           [718] EXPLICIT INTEGER OPTIONAL,
    bootPatchLevel             [719] EXPLICIT INTEGER OPTIONAL,
    deviceUniqueAttestation    [720] EXPLICIT NULL OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey            OCTET_STRING,
    deviceLocked               BOOLEAN,
    verifiedBootState          VerifiedBootState,
    verifiedBootHash           OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
    Verified                   (0),
    SelfSigned                 (1),
    Unverified                 (2),
    Failed                     (3),
}
نسخه ۳
KeyDescription ::= SEQUENCE {
    attestationVersion           INTEGER, # Value 3
    attestationSecurityLevel     SecurityLevel,
    keymasterVersion             INTEGER, # Value 4
    keymasterSecurityLevel       SecurityLevel,
    attestationChallenge         OCTET_STRING,
    uniqueId                     OCTET_STRING,
    softwareEnforced             AuthorizationList,
    hardwareEnforced             AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
    Software                     (0),
    TrustedEnvironment           (1),
    StrongBox                    (2),
}
AuthorizationList ::= SEQUENCE {
    purpose                      [1] EXPLICIT SET OF INTEGER OPTIONAL,
    algorithm                    [2] EXPLICIT INTEGER OPTIONAL,
    keySize                      [3] EXPLICIT INTEGER OPTIONAL,
    blockMode                    [4] EXPLICIT SET OF INTEGER OPTIONAL,
    digest                       [5] EXPLICIT SET OF INTEGER OPTIONAL,
    padding                      [6] EXPLICIT SET OF INTEGER OPTIONAL,
    callerNonce                  [7] EXPLICIT NULL OPTIONAL,
    minMacLength                 [8] EXPLICIT INTEGER OPTIONAL,
    ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
    rsaPublicExponent          [200] EXPLICIT INTEGER OPTIONAL,
    rollbackResistance         [303] EXPLICIT NULL OPTIONAL,
    activeDateTime             [400] EXPLICIT INTEGER OPTIONAL,
    originationExpireDateTime  [401] EXPLICIT INTEGER OPTIONAL,
    usageExpireDateTime        [402] EXPLICIT INTEGER OPTIONAL,
    userSecureId               [502] EXPLICIT INTEGER OPTIONAL,
    noAuthRequired             [503] EXPLICIT NULL OPTIONAL,
    userAuthType               [504] EXPLICIT INTEGER OPTIONAL,
    authTimeout                [505] EXPLICIT INTEGER OPTIONAL,
    allowWhileOnBody           [506] EXPLICIT NULL OPTIONAL,
    trustedUserPresenceReq     [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationReq     [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceReq          [509] EXPLICIT NULL OPTIONAL,
    creationDateTime           [701] EXPLICIT INTEGER OPTIONAL,
    origin                     [702] EXPLICIT INTEGER OPTIONAL,
    rootOfTrust                [704] EXPLICIT RootOfTrust OPTIONAL,
    osVersion                  [705] EXPLICIT INTEGER OPTIONAL,
    osPatchLevel               [706] EXPLICIT INTEGER OPTIONAL,
    attestationApplicationId   [709] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdBrand         [710] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdDevice        [711] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdProduct       [712] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdSerial        [713] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdImei          [714] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdMeid          [715] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdManufacturer  [716] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdModel         [717] EXPLICIT OCTET_STRING OPTIONAL,
    vendorPatchLevel           [718] EXPLICIT INTEGER OPTIONAL,
    bootPatchLevel             [719] EXPLICIT INTEGER OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey            OCTET_STRING,
    deviceLocked               BOOLEAN,
    verifiedBootState          VerifiedBootState,
    verifiedBootHash           OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
    Verified                   (0),
    SelfSigned                 (1),
    Unverified                 (2),
    Failed                     (3),
}
نسخه ۲
KeyDescription ::= SEQUENCE {
    attestationVersion           INTEGER, # Value 2
    attestationSecurityLevel     SecurityLevel,
    keymasterVersion             INTEGER, # Value 3
    keymasterSecurityLevel       SecurityLevel,
    attestationChallenge         OCTET_STRING,
    uniqueId                     OCTET_STRING,
    softwareEnforced             AuthorizationList,
    hardwareEnforced             AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
    Software                     (0),
    TrustedEnvironment           (1),
}
AuthorizationList ::= SEQUENCE {
    purpose                      [1] EXPLICIT SET OF INTEGER OPTIONAL,
    algorithm                    [2] EXPLICIT INTEGER OPTIONAL,
    keySize                      [3] EXPLICIT INTEGER OPTIONAL,
    digest                       [5] EXPLICIT SET OF INTEGER OPTIONAL,
    padding                      [6] EXPLICIT SET OF INTEGER OPTIONAL,
    ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
    rsaPublicExponent          [200] EXPLICIT INTEGER OPTIONAL,
    activeDateTime             [400] EXPLICIT INTEGER OPTIONAL,
    originationExpireDateTime  [401] EXPLICIT INTEGER OPTIONAL,
    usageExpireDateTime        [402] EXPLICIT INTEGER OPTIONAL,
    noAuthRequired             [503] EXPLICIT NULL OPTIONAL,
    userAuthType               [504] EXPLICIT INTEGER OPTIONAL,
    authTimeout                [505] EXPLICIT INTEGER OPTIONAL,
    allowWhileOnBody           [506] EXPLICIT NULL OPTIONAL,
    allApplications            [600] EXPLICIT NULL OPTIONAL,
    creationDateTime           [701] EXPLICIT INTEGER OPTIONAL,
    origin                     [702] EXPLICIT INTEGER OPTIONAL,
    rollbackResistant          [703] EXPLICIT NULL OPTIONAL,
    rootOfTrust                [704] EXPLICIT RootOfTrust OPTIONAL,
    osVersion                  [705] EXPLICIT INTEGER OPTIONAL,
    osPatchLevel               [706] EXPLICIT INTEGER OPTIONAL,
    attestationApplicationId   [709] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdBrand         [710] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdDevice        [711] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdProduct       [712] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdSerial        [713] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdImei          [714] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdMeid          [715] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdManufacturer  [716] EXPLICIT OCTET_STRING OPTIONAL,
    attestationIdModel         [717] EXPLICIT OCTET_STRING OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey           OCTET_STRING,
    deviceLocked              BOOLEAN,
    verifiedBootState         VerifiedBootState,
}
VerifiedBootState ::= ENUMERATED {
    Verified                  (0),
    SelfSigned                (1),
    Unverified                (2),
    Failed                    (3),
}
نسخه ۱
KeyDescription ::= SEQUENCE {
    attestationVersion           INTEGER, # Value 1
    attestationSecurityLevel     SecurityLevel,
    keymasterVersion             INTEGER, # Value 2
    keymasterSecurityLevel       SecurityLevel,
    attestationChallenge         OCTET_STRING,
    uniqueId                     OCTET_STRING,
    softwareEnforced             AuthorizationList,
    hardwareEnforced             AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
    Software                     (0),
    TrustedEnvironment           (1),
}
AuthorizationList ::= SEQUENCE {
    purpose                      [1] EXPLICIT SET OF INTEGER OPTIONAL,
    algorithm                    [2] EXPLICIT INTEGER OPTIONAL,
    keySize                      [3] EXPLICIT INTEGER OPTIONAL,
    digest                       [5] EXPLICIT SET OF INTEGER OPTIONAL,
    padding                      [6] EXPLICIT SET OF INTEGER OPTIONAL,
    ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
    rsaPublicExponent          [200] EXPLICIT INTEGER OPTIONAL,
    activeDateTime             [400] EXPLICIT INTEGER OPTIONAL,
    originationExpireDateTime  [401] EXPLICIT INTEGER OPTIONAL,
    usageExpireDateTime        [402] EXPLICIT INTEGER OPTIONAL,
    noAuthRequired             [503] EXPLICIT NULL OPTIONAL,
    userAuthType               [504] EXPLICIT INTEGER OPTIONAL,
    authTimeout                [505] EXPLICIT INTEGER OPTIONAL,
    allowWhileOnBody           [506] EXPLICIT NULL OPTIONAL,
    allApplications            [600] EXPLICIT NULL OPTIONAL,
    creationDateTime           [701] EXPLICIT INTEGER OPTIONAL,
    origin                     [702] EXPLICIT INTEGER OPTIONAL,
    rollbackResistant          [703] EXPLICIT NULL OPTIONAL,
    rootOfTrust                [704] EXPLICIT RootOfTrust OPTIONAL,
    osVersion                  [705] EXPLICIT INTEGER OPTIONAL,
    osPatchLevel               [706] EXPLICIT INTEGER OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey            OCTET_STRING,
    deviceLocked               BOOLEAN,
    verifiedBootState          VerifiedBootState,
}
VerifiedBootState ::= ENUMERATED {
    Verified                   (0),
    SelfSigned                 (1),
    Unverified                 (2),
    Failed                     (3),
}
فیلدهای توضیحات کلید
-  
attestationVersion -  نسخه طرحواره ASN.1.
ارزش نسخه KeyMint یا Keymaster ۱ نسخه ۲.۰ کیمستر ۲ نسخه ۳.۰ کیمستر ۳ نسخه ۴.۰ کیمستر ۴ نسخه ۴.۱ کیمستر ۱۰۰ نسخه ۱.۰ کیمینت ۲۰۰ نسخه ۲.۰ کیمینت ۳۰۰ نسخه ۳.۰ کیمینت ۴۰۰ نسخه ۴.۰ کیمینت  -  
attestationSecurityLevel سطح امنیتی مکانی که کلید گواهیشده در آن ذخیره شده است.
-  
keymasterVersion/keyMintVersion -  نسخه پیادهسازی KeyMint یا Keymaster HAL.
ارزش نسخه KeyMint یا Keymaster ۲ نسخه ۲.۰ کیمستر ۳ نسخه ۳.۰ کیمستر ۴ نسخه ۴.۰ کیمستر ۴۱ نسخه ۴.۱ کیمستر ۱۰۰ نسخه ۱.۰ کیمینت ۲۰۰ نسخه ۲.۰ کیمینت ۳۰۰ نسخه ۳.۰ کیمینت ۴۰۰ نسخه ۴.۰ کیمینت  -  
keymasterSecurityLevel/keyMintSecurityLevel - سطح امنیتی پیادهسازی KeyMint یا Keymaster.
 -  
attestationChallenge - چالشی که در زمان تولید کلید ارائه میشود.
 -  
uniqueId - یک شناسه دستگاه حساس به حریم خصوصی که برنامههای سیستم میتوانند در زمان تولید کلید درخواست کنند. اگر شناسه منحصر به فرد درخواست نشود، این فیلد خالی است. برای جزئیات بیشتر، به بخش شناسه منحصر به فرد مراجعه کنید.
 -  
softwareEnforced -  فهرست مجوزهای KeyMint یا Keymaster که توسط سیستم اندروید اعمال میشود. این اطلاعات توسط کد موجود در پلتفرم جمعآوری یا تولید میشوند. تا زمانی که دستگاه سیستم عاملی را اجرا میکند که با مدل امنیتی پلتفرم اندروید مطابقت دارد (یعنی بوت لودر دستگاه قفل شده و وضعیت بوت 
verifiedBootState،Verifiedباشد)، میتوان به آن اعتماد کرد. -  
hardwareEnforced - فهرست مجوزهای KeyMint یا Keymaster که توسط محیط اجرای مطمئن (TEE) یا StrongBox دستگاه اعمال میشود. این اطلاعات توسط کد موجود در سختافزار امن جمعآوری یا تولید میشود و توسط پلتفرم کنترل نمیشود. به عنوان مثال، اطلاعات میتوانند از طریق بوت لودر یا از طریق یک کانال ارتباطی امن که شامل اعتماد به پلتفرم نمیشود، دریافت شوند.
 
مقادیر SecurityLevel
 مقدار SecurityLevel نشان میدهد که یک عنصر مرتبط با Keystore (برای مثال، جفت کلید و گواهی) تا چه حد در برابر حملات مقاوم است.
| ارزش | معنی | 
|---|---|
 Software |  تا زمانی که سیستم اندروید دستگاه با مدل امنیتی پلتفرم اندروید مطابقت داشته باشد (یعنی بوت لودر دستگاه قفل شده و verifiedBootState ) Verified باشد)، ایمن است. | 
 TrustedEnvironment | تا زمانی که TEE به خطر نیفتد، ایمن است. الزامات جداسازی برای TEEها در بخشهای 9.11 [C-1-1] تا [C-1-4] از سند تعریف سازگاری اندروید تعریف شدهاند. TEEها در برابر نفوذ از راه دور بسیار مقاوم و در برابر نفوذ از طریق حمله مستقیم سختافزاری نسبتاً مقاوم هستند. | 
 StrongBox | تا زمانی که StrongBox به خطر نیفتد، امن است. StrongBox در یک عنصر امن مشابه یک ماژول امنیتی سختافزاری پیادهسازی شده است. الزامات پیادهسازی برای StrongBox در بخش 9.11.2 از سند تعریف سازگاری اندروید تعریف شده است. StrongBox در برابر نفوذ از راه دور و نفوذ از طریق حمله مستقیم سختافزاری (به عنوان مثال، دستکاری فیزیکی و حملات کانال جانبی) بسیار مقاوم است. | 
فیلدهای لیست مجوز
 هر فیلد مربوط به یک برچسب مجوز Keymaster/KeyMint از مشخصات رابط AIDL است. این مشخصات منبع حقیقت در مورد برچسبهای مجوز است: معنی آنها، قالب محتوای آنها، اینکه آیا انتظار میرود در فیلدهای softwareEnforced یا hardwareEnforced در شیء KeyDescription ظاهر شوند، اینکه آیا با سایر برچسبها ناسازگار هستند و غیره. همه فیلدهای AuthorizationList اختیاری هستند.
 هر فیلد دارای یک برچسب مختص به زمینه EXPLICIT برابر با شماره برچسب KeyMint یا Keymaster است که امکان نمایش فشردهتر دادهها در AuthorizationList را فراهم میکند. بنابراین، تجزیهکننده ASN.1 باید نوع داده مورد انتظار برای هر برچسب مختص به زمینه را بداند. برای مثال، Tag::USER_AUTH_TYPE به صورت ENUM | 504 تعریف شده است. در طرحواره توسعه گواهی، فیلد purpose در AuthorizationList به صورت userAuthType [504] EXPLICIT INTEGER OPTIONAL مشخص شده است. بنابراین، کدگذاری ASN.1 آن به جای برچسب کلاس UNIVERSAL برای نوع ASN.1 INTEGER که 10 است، حاوی برچسب مختص به زمینه 504 خواهد بود.
-  
purpose -  مربوط به تگ مجوز 
Tag::PURPOSEاست که از مقدار شناسه تگ ۱ استفاده میکند. -  
algorithm مربوط به تگ مجوز
Tag::ALGORITHMاست که از مقدار شناسه تگ ۲ استفاده میکند.در یک شیء Attestation
AuthorizationList، مقدار الگوریتم همیشهRSAیاECاست.-  
keySize -  مربوط به تگ مجوز 
Tag::KEY_SIZEاست که از مقدار شناسه تگ ۳ استفاده میکند. -  
blockMode -  مربوط به تگ مجوز 
Tag::BLOCK_MODEاست که از مقدار شناسه تگ ۴ استفاده میکند. -  
digest -  مربوط به تگ مجوز 
Tag::DIGESTاست که از مقدار شناسه تگ ۵ استفاده میکند. -  
padding -  مربوط به تگ مجوز 
Tag::PADDINGاست که از مقدار شناسه تگ ۶ استفاده میکند. -  
callerNonce -  مربوط به تگ مجوز 
Tag::CALLER_NONCEاست که از مقدار شناسه تگ ۷ استفاده میکند. -  
minMacLength -  مربوط به تگ مجوز 
Tag::MIN_MAC_LENGTHاست که از مقدار شناسه تگ ۸ استفاده میکند. -  
ecCurve مربوط به تگ مجوز
Tag::EC_CURVEاست که از مقدار شناسه تگ ۱۰ استفاده میکند.مجموعهای از پارامترهای مورد استفاده برای تولید یک جفت کلید منحنی بیضوی (EC)، که از ECDSA برای امضا و تأیید، در مخزن کلید سیستم اندروید استفاده میکند.
-  
rsaPublicExponent -  مربوط به تگ مجوز 
Tag::RSA_PUBLIC_EXPONENTاست که از مقدار شناسه تگ ۲۰۰ استفاده میکند. -  
mgfDigest فقط در نسخه گواهی کلید >= 100 ارائه شود.
مربوط به تگ مجوزTag::RSA_OAEP_MGF_DIGESTدر KeyMint است که از شناسه تگ با مقدار ۲۰۳ استفاده میکند.-  
rollbackResistance فقط در نسخه گواهی کلید >= 3 ارائه شود.
مربوط به تگ مجوز
Tag::ROLLBACK_RESISTANCEاست که از مقدار شناسه تگ 303 استفاده میکند.-  
earlyBootOnly فقط در نسخه گواهی کلید >= 4 ارائه شود.
مربوط به تگ مجوز
Tag::EARLY_BOOT_ONLYاست که از مقدار شناسه تگ ۳۰۵ استفاده میکند.-  
activeDateTime -  مربوط به تگ مجوز 
Tag::ACTIVE_DATETIMEاست که از مقدار شناسه تگ ۴۰۰ استفاده میکند. -  
originationExpireDateTime -  مربوط به تگ مجوز 
Tag::ORIGINATION_EXPIRE_DATETIMEاست که از مقدار شناسه تگ ۴۰۱ استفاده میکند. -  
usageExpireDateTime -  مربوط به تگ مجوز 
Tag::USAGE_EXPIRE_DATETIMEاست که از مقدار شناسه تگ ۴۰۲ استفاده میکند. -  
usageCountLimit -  مربوط به تگ مجوز 
Tag::USAGE_COUNT_LIMITاست که از مقدار شناسه تگ ۴۰۵ استفاده میکند. -  
userSecureId -  مربوط به تگ مجوز 
Tag::USER_SECURE_IDاست که از مقدار شناسه تگ ۵۰۲ استفاده میکند. -  
noAuthRequired مربوط به تگ مجوز
Tag::NO_AUTH_REQUIREDاست که از مقدار شناسه تگ ۵۰۳ استفاده میکند.-  
userAuthType -  مربوط به تگ مجوز 
Tag::USER_AUTH_TYPEاست که از مقدار شناسه تگ ۵۰۴ استفاده میکند. -  
authTimeout -  مربوط به تگ مجوز 
Tag::AUTH_TIMEOUTاست که از مقدار شناسه تگ ۵۰۵ استفاده میکند. -  
allowWhileOnBody مربوط به تگ مجوز
Tag::ALLOW_WHILE_ON_BODYاست که از مقدار شناسه تگ ۵۰۶ استفاده میکند.اگر کاربر هنوز دستگاه را روی بدن خود داشته باشد، پس از پایان مهلت احراز هویت، امکان استفاده از کلید را فراهم میکند. توجه داشته باشید که یک حسگر ایمن روی بدن تعیین میکند که آیا دستگاه روی بدن کاربر پوشیده شده است یا خیر.
-  
trustedUserPresenceReq فقط در نسخه گواهی کلید >= 3 ارائه شود.
مربوط به
Tag::TRUSTED_USER_PRESENCE_REQUIREDاست که از مقدار شناسه برچسب ۵۰۷ استفاده میکند.مشخص میکند که این کلید فقط در صورتی قابل استفاده است که کاربر مدرک حضور فیزیکی ارائه داده باشد. چندین مثال شامل موارد زیر است:
- برای یک کلید StrongBox، یک دکمه سختافزاری که به یک پین روی دستگاه StrongBox متصل شده است.
 - برای یک کلید TEE، احراز هویت اثر انگشت تا زمانی که TEE کنترل انحصاری اسکنر را داشته باشد و فرآیند تطبیق اثر انگشت را انجام دهد، اثبات حضور را ارائه میدهد.
 
-  
trustedConfirmationReq فقط در نسخه گواهی کلید >= 3 ارائه شود.
مربوط به
Tag::TRUSTED_CONFIRMATION_REQUIREDاست که از مقدار شناسه برچسب ۵۰۸ استفاده میکند.مشخص میکند که کلید فقط در صورتی قابل استفاده است که کاربر با استفاده از یک توکن تأیید، تأیید دادههایی که قرار است امضا شوند را ارائه دهد. برای اطلاعات بیشتر در مورد نحوه دریافت تأیید کاربر، به تأیید محافظتشده اندروید مراجعه کنید.
نکته: این برچسب فقط برای کلیدهایی که از هدف
SIGNاستفاده میکنند، قابل استفاده است.-  
unlockedDeviceReq فقط در نسخه گواهی کلید >= 3 ارائه شود.
مربوط به
Tag::UNLOCKED_DEVICE_REQUIREDاست که از مقدار شناسه برچسب ۵۰۹ استفاده میکند.-  
creationDateTime -  مربوط به تگ مجوز 
Tag::CREATION_DATETIMEاست که از مقدار شناسه تگ ۷۰۱ استفاده میکند. -  
origin مربوط به تگ مجوز
Tag::ORIGINاست که از مقدار شناسه تگ ۷۰۲ استفاده میکند.-  
rootOfTrust مربوط به تگ مجوز
Tag::ROOT_OF_TRUSTاست که از مقدار شناسه تگ ۷۰۴ استفاده میکند.برای جزئیات بیشتر، به بخش توصیف ساختار داده RootOfTrust مراجعه کنید.
-  
osVersion مربوط به تگ مجوز
Tag::OS_VERSIONاست که از مقدار شناسه تگ ۷۰۵ استفاده میکند.نسخه سیستم عامل اندروید مرتبط با Keymaster که به صورت یک عدد صحیح شش رقمی مشخص میشود. برای مثال، نسخه ۸.۱.۰ به صورت ۰۸۰۱۰۰ نمایش داده میشود.
فقط Keymaster نسخه ۱.۰ یا بالاتر این مقدار را در لیست مجوزها قرار میدهد.
-  
osPatchLevel مربوط به برچسب مجوز
Tag::PATCHLEVELاست که از مقدار شناسه برچسب ۷۰۶ استفاده میکند.ماه و سال مرتبط با وصله امنیتی که در Keymaster استفاده میشود، که به صورت یک عدد صحیح شش رقمی مشخص شده است. به عنوان مثال، وصله آگوست ۲۰۱۸ به صورت ۲۰۱۸۰۸ نمایش داده میشود.
فقط Keymaster نسخه ۱.۰ یا بالاتر این مقدار را در لیست مجوزها قرار میدهد.
-  
attestationApplicationId فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_APPLICATION_IDاست که از مقدار شناسه برچسب ۷۰۹ استفاده میکند.برای جزئیات بیشتر، به بخش توصیف ساختار دادهی AttestationApplicationId مراجعه کنید.
-  
attestationIdBrand فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_ID_BRANDاست که از مقدار شناسه برچسب ۷۱۰ استفاده میکند.-  
attestationIdDevice فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_ID_DEVICEاست که از مقدار شناسه برچسب ۷۱۱ استفاده میکند.-  
attestationIdProduct فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_ID_PRODUCTاست که از مقدار شناسه برچسب ۷۱۲ استفاده میکند.-  
attestationIdSerial فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_ID_SERIALاست که از مقدار شناسه برچسب ۷۱۳ استفاده میکند.-  
attestationIdImei فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_ID_IMEIاست که از مقدار شناسه برچسب ۷۱۴ استفاده میکند.-  
attestationIdMeid فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_ID_MEIDاست که از مقدار شناسه برچسب ۷۱۵ استفاده میکند.-  
attestationIdManufacturer فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به
Tag::ATTESTATION_ID_MANUFACTURERاست که از مقدار شناسه برچسب ۷۱۶ استفاده میکند.-  
attestationIdModel فقط در نسخههای گواهی کلید >= ۲ ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_ID_MODELاست که از مقدار شناسه برچسب ۷۱۷ استفاده میکند.-  
vendorPatchLevel فقط در نسخههای گواهی کلید >= 3 ارائه میشود.
مربوط به برچسب مجوز
Tag::VENDOR_PATCHLEVELاست که از مقدار شناسه برچسب ۷۱۸ استفاده میکند.سطح وصله امنیتی تصویر فروشنده را که باید برای استفاده از این کلید روی دستگاه نصب شود، مشخص میکند. مقدار به شکل YYYYMMDD ظاهر میشود که نشان دهنده تاریخ وصله امنیتی فروشنده است. برای مثال، اگر کلیدی در دستگاه اندرویدی با نصب وصله امنیتی ۱ آگوست ۲۰۱۸ فروشنده ایجاد شود، این مقدار ۲۰۱۸۰۸۰۱ خواهد بود.
-  
bootPatchLevel فقط در نسخههای گواهی کلید >= 3 ارائه میشود.
مربوط به برچسب مجوز
Tag::BOOT_PATCHLEVELاست که از مقدار شناسه برچسب ۷۱۹ استفاده میکند.سطح وصله امنیتی تصویر هسته را که باید برای استفاده از این کلید روی دستگاه نصب شود، مشخص میکند. مقدار به شکل YYYYMMDD ظاهر میشود که نشان دهنده تاریخ وصله امنیتی سیستم است. به عنوان مثال، اگر کلیدی در دستگاه اندرویدی با وصله امنیتی ۵ آگوست ۲۰۱۸ سیستم ایجاد شود، این مقدار ۲۰۱۸۰۸۰۵ خواهد بود.
-  
deviceUniqueAttestation فقط در نسخههای گواهی کلید >= 4 ارائه میشود.
مربوط به
Tag::DEVICE_UNIQUE_ATTESTATIONاست که از مقدار شناسه برچسب ۷۲۰ استفاده میکند.-  
attestationIdSecondImei فقط در نسخههای گواهی کلید >= 300 ارائه میشود.
مربوط به برچسب مجوز
Tag::ATTESTATION_ID_SECOND_IMEIاست که از مقدار شناسه برچسب ۷۲۳ استفاده میکند.-  
moduleHash فقط در نسخههای گواهی کلید >= ۴۰۰ ارائه میشود.
مربوط به تگ مجوز
Tag::MODULE_HASHاست که از مقدار شناسه تگ ۷۲۴ استفاده میکند.
فیلدهای RootOfTrust
-  
verifiedBootKey - یک هش امن از کلید عمومی که برای تأیید صحت و اعتبار تمام کدهایی که هنگام بوت شدن دستگاه به عنوان بخشی از Verified Boot اجرا میشوند، استفاده میشود. SHA-256 توصیه میشود.
 -  
deviceLocked -  آیا بوت لودر دستگاه قفل شده است یا خیر. 
trueبه این معنی است که دستگاه یک ایمیج امضا شده را بوت کرده است که با موفقیت توسط Verified Boot تأیید شده است. -  
verifiedBootState - وضعیت بوت تأیید شده دستگاه.
 -  
verifiedBootHash - خلاصهای از تمام دادههای محافظتشده توسط Verified Boot . برای دستگاههایی که از پیادهسازی مرجع Android Verified Boot استفاده میکنند، این فیلد حاوی خلاصه VBMeta است.
 
مقادیر تأیید شدهی BootState
| ارزش | وضعیت بوت مربوطه | معنی | 
|---|---|---|
 Verified |  GREEN |  یک زنجیره کامل اعتماد از یک ریشه اعتماد محافظتشده توسط سختافزار تا بوتلودر و تمام پارتیشنهای تأییدشده توسط Verified Boot امتداد مییابد. در این حالت، فیلد verifiedBootKey حاوی هش ریشه اعتماد تعبیهشده است که همان گواهی تعبیهشده در ROM دستگاه توسط سازنده دستگاه در کارخانه است. | 
 SelfSigned |  YELLOW |  همانند حالت Verified است، با این تفاوت که تأیید با استفاده از ریشه اعتمادی که توسط کاربر پیکربندی شده است، به جای ریشه اعتمادی که توسط سازنده در کارخانه تعبیه شده است، انجام شده است. در این حالت، فیلد verifiedBootKey حاوی هش کلید عمومی پیکربندی شده توسط کاربر است. | 
 Unverified |  ORANGE |  بوت لودر دستگاه قفلگشایی شده است، بنابراین نمیتوان زنجیره اعتمادی ایجاد کرد. دستگاه را میتوان آزادانه تغییر داد، بنابراین یکپارچگی دستگاه باید توسط کاربر خارج از باند تأیید شود. در این حالت، فیلد verifiedBootKey حاوی ۳۲ بایت صفر است. | 
 Failed |  RED |  تأیید دستگاه ناموفق بود. در این حالت، هیچ تضمینی در مورد محتوای سایر فیلدهای RootOfTrust وجود ندارد.  | 
شناسه برنامه گواهی
 این فیلد، باور پلتفرم اندروید را در مورد اینکه کدام برنامهها مجاز به استفاده از کلید مخفی تحت گواهی هستند، منعکس میکند. این فیلد میتواند شامل چندین بسته باشد، اگر و تنها اگر چندین بسته، UID یکسانی داشته باشند. فیلد AttestationApplicationId در AuthorizationList از نوع OCTET_STRING است و طبق طرح ASN.1 زیر قالببندی شده است: 
AttestationApplicationId ::= SEQUENCE {
    package_infos  SET OF AttestationPackageInfo,
    signature_digests  SET OF OCTET_STRING,
}
AttestationPackageInfo ::= SEQUENCE {
    package_name  OCTET_STRING,
    version  INTEGER,
}package_infos-  مجموعهای از اشیاء 
AttestationPackageInfoکه هر کدام نام و شماره نسخه یک بسته را ارائه میدهند. -  
signature_digests مجموعهای از خلاصههای SHA-256 از گواهیهای امضای برنامه. یک برنامه میتواند چندین زنجیره گواهی کلید امضا داشته باشد. برای هر کدام، گواهی "leaf" خلاصه شده و در فیلد
signature_digestsقرار میگیرد. نام فیلد گمراهکننده است، زیرا دادههای خلاصه شده گواهیهای امضای برنامه هستند، نه امضاهای برنامه، زیرا برای کلاسSignatureکه توسط فراخوانیgetPackageInfo()برگردانده میشود، نامگذاری شده است. قطعه کد زیر یک مجموعه مثال را نشان میدهد:{SHA256(PackageInfo.signature[0]), SHA256(PackageInfo.signature[1]), ...}
افزونهی اطلاعات تأمینکننده
 افزونهی اطلاعات تأمینکننده دارای OID 1.3.6.1.4.1.11129.2.1.30 است. این افزونه اطلاعاتی را که توسط سرور تأمینکننده در مورد دستگاه شناخته شده است، ارائه میدهد.
طرحواره
مقدار افزونه شامل دادههای نمایش مختصر شیء دودویی (CBOR) است که با این طرحواره زبان تعریف مختصر دادهها (CDDL) مطابقت دارد:
  {
        1 : int,       ; certificates issued
        4 : string,    ; validated attested entity (STRONG_BOX/TEE)
  }
نقشه بدون نسخه است و ممکن است فیلدهای اختیاری جدیدی اضافه شود.
-  
certs_issued تعداد تقریبی گواهیهای صادر شده برای دستگاه در 30 روز گذشته. اگر این مقدار چند برابر بیشتر از میانگین باشد، میتواند به عنوان نشانهای برای سوءاستفاده احتمالی مورد استفاده قرار گیرد.
-  
validated_attested_entity موجودیت گواهیشدهی اعتبارسنجیشده، رشتهای است که نوع دستگاهی را که توسط سرور تأمینکننده برای گواهی شدن تأیید شده است، توصیف میکند. برای مثال،
STRONG_BOXیاTEE.
کلیدهای تأیید
دو کلید، یکی RSA و یکی ECDSA، و زنجیرههای گواهی مربوطه، به طور ایمن در دستگاه تعبیه شدهاند.
اندروید ۱۲ قابلیت تأمین کلید از راه دور (Remote Key Provisioning) را معرفی کرد و اندروید ۱۵ از همه دستگاهها میخواهد که آن را پیادهسازی کنند. تأمین کلید از راه دور، گواهیهای تأیید ECDSA P256 را برای هر برنامه در اختیار دستگاههای موجود در محل قرار میدهد. این گواهیها نسبت به گواهیهای تأمینشده توسط کارخانه، عمر کوتاهتری دارند.
شناسه منحصر به فرد
شناسه منحصر به فرد یک مقدار ۱۲۸ بیتی است که دستگاه را شناسایی میکند، اما فقط برای مدت زمان محدودی. این مقدار با فرمول زیر محاسبه میشود:
HMAC_SHA256(T || C || R, HBK)
کجا:
-  
T«مقدار شمارنده زمانی» است که با تقسیم مقدارTag::CREATION_DATETIMEبر ۲۵۹۲۰۰۰۰۰۰ و حذف باقیمانده محاسبه میشود.Tهر ۳۰ روز یکبار تغییر میکند (۲۵۹۲۰۰۰۰۰۰ = ۳۰ * ۲۴ * ۶۰ * ۶۰ * ۱۰۰۰). -  
CمقدارTag::APPLICATION_IDاست. -  اگر 
Tag::RESET_SINCE_ID_ROTATIONدر پارامتر attest_params در فراخوانی attest_key وجود داشته باشد،Rبرابر با ۱ است، و اگر برچسب وجود نداشته باشد، برابر با ۰ است. -  
HBKیک راز منحصر به فرد وابسته به سختافزار است که برای محیط اجرای قابل اعتماد (Trusted Execution Environment) شناخته شده است و هرگز توسط آن فاش نشده است. این راز حاوی حداقل ۱۲۸ بیت آنتروپی است و برای هر دستگاه منحصر به فرد است (با توجه به ۱۲۸ بیت آنتروپی، منحصر به فرد بودن احتمالی قابل قبول است). HBK باید از طریق HMAC یا AES_CMAC از مواد کلید ترکیبی استخراج شود. 
خروجی HMAC_SHA256 را به ۱۲۸ بیت کوتاه کنید.
چندین IMEI
اندروید ۱۴ پشتیبانی از چندین IMEI را در رکورد Android Key Attestation اضافه میکند. تولیدکنندگان اصلی تجهیزات (OEM) میتوانند این ویژگی را با اضافه کردن یک برچسب KeyMint برای IMEI دوم پیادهسازی کنند. داشتن چندین رادیوی سلولی برای دستگاهها به طور فزایندهای رایج شده است و تولیدکنندگان اصلی تجهیزات اکنون میتوانند از دستگاههایی با دو IMEI پشتیبانی کنند.
تولیدکنندگان اصلی تجهیزات (OEM) موظفند در صورت وجود IMEI ثانویه در دستگاههای خود، آن را برای پیادهسازی (یا پیادهسازیهای) KeyMint آماده کنند تا آن پیادهسازیها بتوانند آن را به همان روشی که IMEI اول را تأیید میکنند، تأیید کنند.
تأیید هویت
اندروید ۸.۰ شامل پشتیبانی اختیاری برای تأیید هویت برای دستگاههایی با Keymaster 3 است. تأیید هویت به دستگاه اجازه میدهد تا مدرکی برای شناسههای سختافزاری خود، مانند شماره سریال یا IMEI، ارائه دهد. اگرچه یک ویژگی اختیاری است، اکیداً توصیه میشود که تمام پیادهسازیهای Keymaster 3 از آن پشتیبانی کنند زیرا توانایی اثبات هویت دستگاه، موارد استفاده مانند پیکربندی از راه دور بدون تماس واقعی را ایمنتر میکند (زیرا طرف از راه دور میتواند مطمئن باشد که با دستگاه درست صحبت میکند، نه دستگاهی که هویت آن را جعل میکند).
گواهی شناسه با ایجاد کپیهایی از شناسههای سختافزاری دستگاه کار میکند که فقط TEE میتواند قبل از خروج دستگاه از کارخانه به آنها دسترسی داشته باشد. کاربر میتواند بوتلودر دستگاه را باز کند و نرمافزار سیستم و شناسههای گزارش شده توسط چارچوبهای اندروید را تغییر دهد. کپیهای شناسههای نگهداری شده توسط TEE را نمیتوان از این طریق دستکاری کرد، و تضمین میکند که گواهی شناسه دستگاه فقط شناسههای سختافزاری اصلی دستگاه را تأیید میکند و در نتیجه تلاشهای جعل را خنثی میکند.
سطح اصلی API برای گواهی شناسه بر روی مکانیزم گواهی کلید موجود که با Keymaster 2 معرفی شد، ساخته شده است. هنگام درخواست گواهی گواهی برای کلیدی که در اختیار Keymaster است، تماسگیرنده میتواند درخواست کند که شناسههای سختافزاری دستگاه در فراداده گواهی گواهی گنجانده شوند. اگر کلید در TEE نگهداری شود، گواهی به یک ریشه اعتماد شناختهشده زنجیر میشود. گیرنده چنین گواهی میتواند تأیید کند که گواهی و محتویات آن، از جمله شناسههای سختافزاری، توسط TEE نوشته شده است. هنگامی که از TEE خواسته میشود شناسههای سختافزاری را در گواهی گواهی بگنجاند، TEE فقط شناسههای موجود در انبار خود را، همانطور که در کارخانه قرار گرفتهاند، گواهی میدهد.
خواص ذخیره سازی
حافظهای که شناسههای دستگاه را در خود نگه میدارد، باید این ویژگیها را داشته باشد:
- مقادیر بهدستآمده از شناسههای اصلی دستگاه، قبل از خروج دستگاه از کارخانه، در حافظه کپی میشوند.
 -  متد 
destroyAttestationIds()میتواند این کپی از دادههای مشتقشده از شناسه را بهطور دائم از بین ببرد. تخریب دائمی به این معنی است که دادهها بهطور کامل حذف میشوند، بهطوری که نه تنظیم مجدد کارخانه و نه هیچ روش دیگری که روی دستگاه انجام میشود، نمیتواند آن را بازیابی کند. این امر بهویژه برای دستگاههایی که کاربر قفل بوتلودر را باز کرده و نرمافزار سیستم را تغییر داده و شناسههای برگرداندهشده توسط چارچوبهای اندروید را اصلاح کرده است، اهمیت دارد. - مراکز RMA باید توانایی تولید کپیهای جدید از دادههای مشتقشده از شناسه سختافزاری را داشته باشند. به این ترتیب، دستگاهی که از RMA عبور میکند میتواند دوباره گواهی شناسه را انجام دهد. مکانیسم مورد استفاده مراکز RMA باید محافظت شود تا کاربران نتوانند خودشان آن را فراخوانی کنند، زیرا این امر به آنها اجازه میدهد گواهی شناسههای جعلی را دریافت کنند.
 - هیچ کدی غیر از برنامهی مورد اعتماد Keymaster در TEE قادر به خواندن دادههای مشتقشده از شناسهی نگهداریشده در حافظه نیست.
 - فضای ذخیرهسازی در برابر دستکاری مقاوم است: اگر محتوای فضای ذخیرهسازی تغییر کرده باشد، TEE با آن مانند زمانی که کپیهای محتوا از بین رفتهاند رفتار میکند و تمام تلاشهای تأیید هویت را رد میکند. این کار با امضا یا MAC کردن فضای ذخیرهسازی همانطور که در زیر توضیح داده شده است، پیادهسازی میشود.
 - این ذخیرهسازی، شناسههای اصلی را در خود نگه نمیدارد. از آنجا که تأیید شناسه با چالشی همراه است، فراخوانیکننده همیشه شناسههایی را که باید تأیید شوند، ارائه میدهد. TEE فقط باید تأیید کند که این شناسهها با مقادیری که در ابتدا داشتهاند، مطابقت دارند. ذخیرهسازی هشهای امن از مقادیر اصلی به جای خود مقادیر، این تأیید را امکانپذیر میکند.
 
ساخت و ساز
برای ایجاد پیادهسازی که ویژگیهای ذکر شده در بالا را داشته باشد، مقادیر مشتق شده از شناسه را در ساختار S زیر ذخیره کنید. کپیهای دیگری از مقادیر شناسه را ذخیره نکنید، به جز مکانهای عادی در سیستم که صاحب دستگاه میتواند با روت کردن آنها را تغییر دهد:
S = D || HMAC(HBK, D)
کجا:
-  
D = HMAC(HBK, ID 1 ) || HMAC(HBK, ID 2 ) || ... || HMAC(HBK, ID n ) -  
HMACساختار HMAC با یک هش امن مناسب است (توصیه میشود از SHA-256 استفاده شود) -  
HBKیک کلید سختافزاری است که برای هیچ هدف دیگری استفاده نمیشود. -  
ID 1 ...ID nمقادیر اصلی ID هستند؛ ارتباط یک مقدار خاص با یک شاخص خاص وابسته به پیادهسازی است، زیرا دستگاههای مختلف تعداد شناسههای متفاوتی دارند. -  
||نشان دهنده الحاق است 
از آنجا که خروجیهای HMAC اندازه ثابتی دارند، برای یافتن هشهای شناسه منفرد یا HMAC مربوط به D، نیازی به هدر یا ساختار دیگری نیست. علاوه بر بررسی مقادیر ارائه شده برای انجام گواهی، پیادهسازیها باید S را با استخراج D از S، محاسبه HMAC(HBK, D) و مقایسه آن با مقدار موجود در S اعتبارسنجی کنند تا تأیید شود که هیچ شناسه منفردی تغییر/خراب نشده است. همچنین، پیادهسازیها باید از مقایسههای زمان ثابت برای همه عناصر شناسه منفرد و اعتبارسنجی S استفاده کنند. زمان مقایسه باید صرف نظر از تعداد شناسههای ارائه شده و تطابق صحیح هر بخش از آزمون، ثابت باشد.
شناسههای سختافزاری
گواهی شناسایی از شناسههای سختافزاری زیر پشتیبانی میکند:
-  نام تجاری، همانطور که توسط 
Build.BRANDدر اندروید برگردانده میشود -  نام دستگاه، همانطور که توسط 
Build.DEVICEدر اندروید برگردانده میشود -  نام محصول، همانطور که توسط 
Build.PRODUCTدر اندروید برگردانده میشود -  نام سازنده، همانطور که توسط 
Build.MANUFACTURERدر اندروید برگردانده میشود -  نام مدل، همانطور که توسط 
Build.MODELدر اندروید برگردانده میشود - شماره سریال
 - IMEI همه رادیوها
 - شناسههای MEID همه رادیوها
 
برای پشتیبانی از گواهی شناسه دستگاه، دستگاه این شناسهها را گواهی میکند. همه دستگاههایی که اندروید را اجرا میکنند، شش مورد اول را دارند و برای عملکرد این ویژگی ضروری هستند. اگر دستگاه دارای هرگونه رادیوی تلفن همراه یکپارچه باشد، دستگاه باید از گواهی IMEI و/یا MEID رادیوها نیز پشتیبانی کند.
تأیید شناسه با انجام یک تأیید کلید و گنجاندن شناسههای دستگاه برای تأیید در درخواست، درخواست میشود. شناسهها به صورت زیر برچسبگذاری میشوند:
-  
ATTESTATION_ID_BRAND -  
ATTESTATION_ID_DEVICE -  
ATTESTATION_ID_PRODUCT -  
ATTESTATION_ID_MANUFACTURER -  
ATTESTATION_ID_MODEL -  
ATTESTATION_ID_SERIAL -  
ATTESTATION_ID_IMEI -  
ATTESTATION_ID_MEID 
شناسهای که باید گواهی شود، یک رشته بایت کدگذاری شده با UTF-8 است. این قالب برای شناسههای عددی نیز اعمال میشود. هر شناسهای که باید گواهی شود، به صورت یک رشته کدگذاری شده با UTF-8 بیان میشود.
 اگر دستگاه از تأیید شناسه پشتیبانی نکند (یا قبلاً تابع destroyAttestationIds() فراخوانی شده باشد و دستگاه دیگر نتواند شناسههای خود را تأیید کند)، هرگونه درخواست تأیید کلید که شامل یک یا چند مورد از این برچسبها باشد، با ErrorCode::CANNOT_ATTEST_IDS مواجه میشود.
 اگر دستگاه از گواهی شناسه پشتیبانی کند و یک یا چند مورد از برچسبهای فوق در درخواست گواهی کلید گنجانده شده باشند، TEE تأیید میکند که شناسه ارائه شده با هر یک از برچسبها با کپی شناسههای سختافزاری آن مطابقت دارد. اگر یک یا چند شناسه مطابقت نداشته باشند، کل گواهی با ErrorCode::CANNOT_ATTEST_IDS رد میشود. معتبر است که یک برچسب چندین بار ارائه شود. این میتواند مفید باشد، به عنوان مثال، هنگام تأیید IMEIها: یک دستگاه میتواند چندین رادیو با چندین IMEI داشته باشد. یک درخواست گواهی در صورتی معتبر است که مقدار ارائه شده با هر ATTESTATION_ID_IMEI با یکی از رادیوهای دستگاه مطابقت داشته باشد. همین امر در مورد سایر برچسبها نیز صدق میکند.
اگر گواهی موفقیتآمیز باشد، شناسههای گواهیشده با استفاده از طرحوارهی بالا به افزونهی گواهی (OID 1.3.6.1.4.1.11129.2.1.17) گواهی گواهی صادرشده اضافه میشوند. تغییرات نسبت به طرحوارهی گواهی Keymaster 2 پررنگ شده و توضیحاتی در مورد آنها ارائه شده است.
رابط برنامهنویسی جاوا
این بخش صرفاً جهت اطلاعرسانی است. مجریان اصلی نه API جاوا را پیادهسازی میکنند و نه از آن استفاده میکنند. این بخش برای کمک به مجریان در درک نحوه استفاده از این ویژگی توسط برنامهها ارائه شده است. اجزای سیستم ممکن است از آن به طور متفاوتی استفاده کنند، به همین دلیل بسیار مهم است که این بخش به عنوان یک بخش عادی تلقی نشود.