首页
社区
课程
招聘
[原创]Android TEE 密钥认证证书数据结构学习笔记
发表于: 2026-1-13 12:58 9466

[原创]Android TEE 密钥认证证书数据结构学习笔记

2026-1-13 12:58
9466

本人正在找工作,邮箱:liuxingzuo@outlook.com

af9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6D9P5s2A6Q4x3X3c8B7K9h3q4F1k6r3q4F1i4K6u0r3b7h3&6V1M7X3!0A6k6q4c8W2k6f1y4W2M7Y4c8b7j5i4u0K6k6b7`.`. (C++解析 + 010Editor模板)

TEE(Trusted Execution Environment,可信执行环境)密钥认证证书是 Android 设备用于证明密钥安全性的数字证书。它基于 X.509 标准,但包含了 Android Keymaster 特有的扩展信息,用于验证:

TBSCertificate 是证书的核心部分,包含所有需要签名的信息:

每个扩展包含三个部分:

认证记录是 TEE 证书的核心数据,采用 SEQUENCE 结构:

授权列表是一个 SEQUENCE,包含多个 Keymaster 标签。每个标签使用 Context 标签号标识,格式为:

信任根是设备安全的基础,包含:

ASN.1(Abstract Syntax Notation One)是一种数据编码标准,用于定义和编码数据结构。

每个 ASN.1 标签包含:

类别(高 2 位):

构造标志(第 6 位):

标签号(低 5 位):

ASN.1 长度有两种格式:

示例

当标签号 >= 31 时,使用多字节编码:

示例:标签号 701

Keymaster 标签用于标识密钥属性和认证信息,分为以下几类:

Keymaster 标签在 ASN.1 中使用 Context 标签编码:

X.509 Certificate (根证书)
├── TBSCertificate (待签名证书)
│   ├── Version (证书版本)
│   ├── Serial Number (序列号)
│   ├── Signature Algorithm (签名算法)
│   ├── Issuer (颁发者)
│   ├── Validity (有效期)
│   ├── Subject (主题)
│   ├── Subject Public Key Info (公钥信息)
│   └── Extensions [3] (扩展)
│       └── TEE Attestation Extension (TEE认证扩展)
│           ├── OID: 1.3.6.1.4.1.11129.2.1.17
│           └── Attestation Record (认证记录)
│               ├── Attestation Version (认证版本)
│               ├── Security Level (安全级别)
│               ├── Keymaster Version (Keymaster版本)
│               ├── Keymaster Security Level (Keymaster安全级别)
│               ├── Attestation Challenge (认证挑战)
│               ├── Unique ID (可选,设备唯一ID)
│               ├── Software Enforced (软件强制属性)
│               └── TEE Enforced (TEE强制属性)
│                   └── Authorization List (授权列表)
│                       ├── Context[701]: Creation DateTime (创建时间)
│                       ├── Context[704]: Root of Trust (信任根)
│                       ├── Context[705]: OS Version (系统版本)
│                       ├── Context[706]: OS Patch Level (系统补丁级别)
│                       ├── Context[718]: Vendor Patch Level (厂商补丁级别)
│                       ├── Context[719]: Boot Patch Level (启动补丁级别)
│                       └── Context[709]: Attestation Application ID (认证应用ID)
├── Signature Algorithm (签名算法)
└── Signature Value (签名值)
X.509 Certificate (根证书)
├── TBSCertificate (待签名证书)
│   ├── Version (证书版本)
│   ├── Serial Number (序列号)
│   ├── Signature Algorithm (签名算法)
│   ├── Issuer (颁发者)
│   ├── Validity (有效期)
│   ├── Subject (主题)
│   ├── Subject Public Key Info (公钥信息)
│   └── Extensions [3] (扩展)
│       └── TEE Attestation Extension (TEE认证扩展)
│           ├── OID: 1.3.6.1.4.1.11129.2.1.17
│           └── Attestation Record (认证记录)
│               ├── Attestation Version (认证版本)
│               ├── Security Level (安全级别)
│               ├── Keymaster Version (Keymaster版本)
│               ├── Keymaster Security Level (Keymaster安全级别)
│               ├── Attestation Challenge (认证挑战)
│               ├── Unique ID (可选,设备唯一ID)
│               ├── Software Enforced (软件强制属性)
│               └── TEE Enforced (TEE强制属性)
│                   └── Authorization List (授权列表)
│                       ├── Context[701]: Creation DateTime (创建时间)
│                       ├── Context[704]: Root of Trust (信任根)
│                       ├── Context[705]: OS Version (系统版本)
│                       ├── Context[706]: OS Patch Level (系统补丁级别)
│                       ├── Context[718]: Vendor Patch Level (厂商补丁级别)
│                       ├── Context[719]: Boot Patch Level (启动补丁级别)
│                       └── Context[709]: Attestation Application ID (认证应用ID)
├── Signature Algorithm (签名算法)
└── Signature Value (签名值)
Extension ::= SEQUENCE {
    extnID      OBJECT IDENTIFIER,  -- 扩展OID
    critical    BOOLEAN DEFAULT FALSE,  -- 关键标志(可选)
    extnValue    OCTET STRING  -- 扩展值
}
Extension ::= SEQUENCE {
    extnID      OBJECT IDENTIFIER,  -- 扩展OID
    critical    BOOLEAN DEFAULT FALSE,  -- 关键标志(可选)
    extnValue    OCTET STRING  -- 扩展值
}
[CONTEXT tag_number] CONSTRUCTED {
    -- 标签内容
}
[CONTEXT tag_number] CONSTRUCTED {
    -- 标签内容
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey    OCTET STRING,  -- 已验证启动密钥(SHA-256
    deviceLocked       BOOLEAN,       -- 设备锁定状态(0xFF=锁定)
    verifiedBootState  ENUMERATED,    -- 启动验证状态
    verifiedBootHash   OCTET STRING OPTIONAL  -- 启动镜像哈希(可选)
}
RootOfTrust ::= SEQUENCE {
    verifiedBootKey    OCTET STRING,  -- 已验证启动密钥(SHA-256
    deviceLocked       BOOLEAN,       -- 设备锁定状态(0xFF=锁定)
    verifiedBootState  ENUMERATED,    -- 启动验证状态
    verifiedBootHash   OCTET STRING OPTIONAL  -- 启动镜像哈希(可选)
}
AttestationApplicationId ::= SEQUENCE {
    packageInfos    SET OF AttestationPackageInfo,
    signatureDigests SET OF OCTET STRING
}
 
AttestationPackageInfo ::= SEQUENCE {
    packageName  OCTET STRING,  -- 应用包名(UTF-8
    version      INTEGER        -- 版本号(versionCode)
}
AttestationApplicationId ::= SEQUENCE {
    packageInfos    SET OF AttestationPackageInfo,
    signatureDigests SET OF OCTET STRING
}
 
AttestationPackageInfo ::= SEQUENCE {
    packageName  OCTET STRING,  -- 应用包名(UTF-8
    version      INTEGER        -- 版本号(versionCode)
}
标签字节 = [类别(2位)][构造标志(1位)][标签号(5位)]
标签字节 = [类别(2位)][构造标志(1位)][标签号(5位)]
长度字节 = 0xxxxxxx(直接编码长度值)
长度字节 = 0xxxxxxx(直接编码长度值)
第一个字节 = 1xxxxxxx(低7位表示后续长度字节数)
后续字节 = 实际长度值(大端序)
第一个字节 = 1xxxxxxx(低7位表示后续长度字节数)
后续字节 = 实际长度值(大端序)
标签值 类型 说明
0x01 BOOLEAN 布尔值
0x02 INTEGER 整数
0x03 BIT STRING 位串
0x04 OCTET STRING 字节串
0x05 NULL 空值
0x06 OBJECT IDENTIFIER 对象标识符
0x0A ENUMERATED 枚举值
0x0C UTF8String UTF-8 字符串
0x13 PrintableString 可打印字符串
0x16 IA5String IA5 字符串
0x17 UTCTime UTC 时间
0x18 GeneralizedTime 通用时间
0x30 SEQUENCE 有序序列
0x31 SET 无序集合
0xA0-0xBF Context[0-31] 上下文标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
X.509 Certificate (根证书)
├── TBSCertificate (待签名证书)
│   ├── Version (证书版本)
│   ├── Serial Number (序列号)
│   ├── Signature Algorithm (签名算法)
│   ├── Issuer (颁发者)
│   ├── Validity (有效期)
│   ├── Subject (主题)
│   ├── Subject Public Key Info (公钥信息)
│   └── Extensions [3] (扩展)
│       └── TEE Attestation Extension (TEE认证扩展)
│           ├── OID: 1.3.6.1.4.1.11129.2.1.17
│           └── Attestation Record (认证记录)
│               ├── Attestation Version (认证版本)
│               ├── Security Level (安全级别)
│               ├── Keymaster Version (Keymaster版本)
│               ├── Keymaster Security Level (Keymaster安全级别)
│               ├── Attestation Challenge (认证挑战)
│               ├── Unique ID (可选,设备唯一ID)
│               ├── Software Enforced (软件强制属性)
│               └── TEE Enforced (TEE强制属性)
│                   └── Authorization List (授权列表)
│                       ├── Context[701]: Creation DateTime (创建时间)
│                       ├── Context[704]: Root of Trust (信任根)
│                       ├── Context[705]: OS Version (系统版本)
│                       ├── Context[706]: OS Patch Level (系统补丁级别)
│                       ├── Context[718]: Vendor Patch Level (厂商补丁级别)
│                       ├── Context[719]: Boot Patch Level (启动补丁级别)
│                       └── Context[709]: Attestation Application ID (认证应用ID)
├── Signature Algorithm (签名算法)
└── Signature Value (签名值)
1
2
3
4
5
Extension ::= SEQUENCE {
    extnID      OBJECT IDENTIFIER,  -- 扩展OID
    critical    BOOLEAN DEFAULT FALSE,  -- 关键标志(可选)
    extnValue    OCTET STRING  -- 扩展值
}
1
2
3
[CONTEXT tag_number] CONSTRUCTED {
    -- 标签内容
}
1
2
3
4
5
6
RootOfTrust ::= SEQUENCE {
    verifiedBootKey    OCTET STRING,  -- 已验证启动密钥(SHA-256
    deviceLocked       BOOLEAN,       -- 设备锁定状态(0xFF=锁定)
    verifiedBootState  ENUMERATED,    -- 启动验证状态
    verifiedBootHash   OCTET STRING OPTIONAL  -- 启动镜像哈希(可选)
}
1
2
3
4
5
6
7
8
9
AttestationApplicationId ::= SEQUENCE {
    packageInfos    SET OF AttestationPackageInfo,
    signatureDigests SET OF OCTET STRING
}
 
AttestationPackageInfo ::= SEQUENCE {
    packageName  OCTET STRING,  -- 应用包名(UTF-8
    version      INTEGER        -- 版本号(versionCode)
}
1
标签字节 = [类别(2位)][构造标志(1位)][标签号(5位)]
1
长度字节 = 0xxxxxxx(直接编码长度值)
1
2
第一个字节 = 1xxxxxxx(低7位表示后续长度字节数)
后续字节 = 实际长度值(大端序)
标签值 类型 说明
0x01 BOOLEAN 布尔值
0x02 INTEGER 整数
0x03 BIT STRING 位串
0x04 OCTET STRING 字节串
0x05 NULL 空值
0x06 OBJECT IDENTIFIER 对象标识符
0x0A ENUMERATED 枚举值
0x0C UTF8String UTF-8 字符串
0x13 PrintableString 可打印字符串
0x16 IA5String IA5 字符串
0x17 UTCTime UTC 时间
0x18 GeneralizedTime 通用时间
0x30 SEQUENCE 有序序列
0x31 SET 无序集合
0xA0-0xBF Context[0-31] 上下文标签
  • 密钥的生成环境(软件/TEE/StrongBox)
  • 设备的启动验证状态
  • 系统版本和安全补丁级别
  • 密钥的使用限制和属性
  • 设备的硬件安全特性
  • 位置:Context[0],可选字段
  • :0=v1, 1=v2, 2=v3
  • 说明:TEE 证书通常为 v3,支持扩展
  • 类型:INTEGER
  • 说明:证书颁发者分配的唯一序列号,用于标识证书
  • 类型:SEQUENCE
  • 内容:算法 OID + 参数
  • 常见算法:SHA256withRSA, SHA512withRSA, ECDSA
  • 类型:SEQUENCE of RelativeDistinguishedName
  • 说明:证书颁发者的可分辨名称(DN)
  • 示例:CN=Android, O=Android, C=US
  • 类型:SEQUENCE
  • 内容
    • notBefore:证书生效时间(UTC 或 GeneralizedTime)
    • notAfter:证书过期时间
  • notBefore:证书生效时间(UTC 或 GeneralizedTime)
  • notAfter:证书过期时间
  • 类型:SEQUENCE of RelativeDistinguishedName
  • 说明:证书持有者的可分辨名称
  • 注意:TEE 证书中,Subject 通常与 Issuer 相同(自签名)
  • 类型:SEQUENCE
  • 内容
    • Algorithm:公钥算法标识符(RSA/EC)
    • SubjectPublicKey:公钥值(BIT STRING)
  • Algorithm:公钥算法标识符(RSA/EC)
  • SubjectPublicKey:公钥值(BIT STRING)
  • 位置:Context[3](标签 0xA3)
  • 类型:SEQUENCE of Extension
  • 说明:包含 TEE 认证扩展和其他标准扩展
  • OID1.3.6.1.4.1.11129.2.1.17
  • 编码2B 06 01 04 01 D6 79 02 01 11
  • Critical:通常为 TRUE(0xFF)
  • extnValue:包含完整的 Attestation Record(OCTET STRING 包装)
  • 类型:INTEGER
    • 100:Keymaster v1
    • 200:Keymaster v2
    • 300:Keymaster v3
    • 400:Keymaster v4
  • 100:Keymaster v1
  • 200:Keymaster v2
  • 300:Keymaster v3
  • 400:Keymaster v4
  • 类型:ENUMERATED
    • 0:Software(软件级别)
    • 1:TEE(可信执行环境)
    • 2:StrongBox(独立硬件安全模块)
  • 0:Software(软件级别)
  • 1:TEE(可信执行环境)
  • 2:StrongBox(独立硬件安全模块)
  • 类型:INTEGER
  • 说明:Keymaster HAL 版本号(如 4 表示 Keymaster 4.0)
  • 类型:ENUMERATED
  • 说明:与 Attestation Security Level 相同,表示 Keymaster 实现的安全级别
  • 类型:OCTET STRING
  • 说明:客户端提供的随机数(nonce),用于防止重放攻击
  • 长度:通常 16-32 字节
  • 类型:OCTET STRING
  • 说明:设备的唯一标识符,用于设备识别
  • 类型:AUTHORIZATION_LIST(SEQUENCE)
  • 说明:由 Android 系统强制执行的密钥属性
  • 内容:各种 Keymaster 标签,如密钥用途、算法等
  • 类型:AUTHORIZATION_LIST(SEQUENCE)
  • 说明:由 TEE 环境强制执行的密钥属性,包含设备安全状态信息
  • 关键内容
    • Root of Trust(信任根)
    • OS Version(系统版本)
    • Patch Levels(补丁级别)
    • Creation DateTime(创建时间)
    • Attestation Application ID(认证应用ID)
  • Root of Trust(信任根)
  • OS Version(系统版本)
  • Patch Levels(补丁级别)
  • Creation DateTime(创建时间)
  • Attestation Application ID(认证应用ID)
  • 标签号 < 31:单字节编码,格式为 0xA0 | tag_number
  • 标签号 >= 31:多字节编码(扩展标签号)
    • 第一个字节:0xBF(Context 类别,扩展标志)
    • 后续字节:标签号的高 7 位编码(BER 编码)
  • 第一个字节:0xBF(Context 类别,扩展标志)
  • 后续字节:标签号的高 7 位编码(BER 编码)
  • 701BF 85 3D(创建时间)
  • 704BF 85 40(信任根)
  • 705BF 85 41(系统版本)
  • 706BF 85 42(系统补丁级别)
  • 718BF 85 66(厂商补丁级别)
  • 719BF 85 67(启动补丁级别)
  • 709BF 85 45(认证应用ID)
  • verifiedBootKey:启动验证密钥的 SHA-256 哈希值,用于验证启动镜像完整性
  • deviceLocked
    • 0xFF:设备已锁定(安全状态)
    • 0x00:设备未锁定(可能不安全)
  • verifiedBootState
    • 0:Verified(已验证)
    • 1:Self-Signed(自签名)
    • 2:Unverified(未验证)
    • 3:Failed(验证失败)
  • 0xFF:设备已锁定(安全状态)
  • 0x00:设备未锁定(可能不安全)
  • 0:Verified(已验证)
  • 1:Self-Signed(自签名)
  • 2:Unverified(未验证)
  • 3:Failed(验证失败)
  • 标签:Context[705]
  • 类型:INTEGER
  • 编码规则OS_VERSION = (major * 10000) + (minor * 100) + patch
  • 示例
    • 130000 → Android 13.0.0
    • 120000 → Android 12.0.0
  • 130000 → Android 13.0.0
  • 120000 → Android 12.0.0
  • 标签:Context[706]
  • 类型:INTEGER
  • 格式:YYYYMM(6 位数字)
  • 示例202305 → 2023年5月
  • 标签:Context[718]
  • 类型:INTEGER
  • 格式:YYYYMMDD(8 位数字)
  • 示例20230515 → 2023年5月15日
  • 标签:Context[719]
  • 类型:INTEGER
  • 格式:YYYYMMDD(8 位数字)
  • 说明:启动镜像的安全补丁级别
  • 标签:Context[701]
  • 类型:INTEGER
  • 格式:毫秒级 Unix 时间戳
  • 说明:密钥创建时间,可用于推断设备重置时间
  • 示例0x019B8C644101 → 2023-05-15 10:30:00.001 UTC
  • 标签:Context[709] 或 Application[99]
  • 类型:SEQUENCE
  • 结构
  • packageInfos:应用包信息集合
    • packageName:应用包名(如 com.example.app
    • version:应用版本代码(versionCode)
  • signatureDigests:APK 签名证书的 SHA-256 摘要集合
    • 用于验证应用身份和完整性
    • TEE 侧不可伪造
  • packageName:应用包名(如 com.example.app
  • version:应用版本代码(versionCode)
  • 用于验证应用身份和完整性
  • TEE 侧不可伪造
  • Application[99] PRIMITIVE:直接包含编码数据
  • Context[709] CONSTRUCTED:包含 OCTET STRING,其内容为 AttestationApplicationId
  • 类别(高 2 位):

    • 00:Universal(通用)
    • 01:Application(应用)
    • 10:Context(上下文)
    • 11:Private(私有)
  • 构造标志(第 6 位):

    • 0:Primitive(基本类型)
    • 1:Constructed(构造类型)
  • 标签号(低 5 位):

    • 0-30:单字节编码
    • 31+:多字节扩展编码
  • 00:Universal(通用)
  • 01:Application(应用)
  • 10:Context(上下文)
  • 11:Private(私有)
  • 0:Primitive(基本类型)
  • 1:Constructed(构造类型)
  • 0-30:单字节编码
  • 31+:多字节扩展编码
  • 长度 5:05
  • 长度 200:81 C8(1 字节长度,值为 200)
  • 长度 1000:82 03 E8(2 字节长度,值为 1000)
  • 每个字节的最高位:1 表示还有后续字节,0 表示最后一个字节
  • 低 7 位:标签号的一部分
  • 701 = 0x02BD = 0000 0010 1011 1101
  • 编码:BF 85 3D
    • BF = 1011 1111(Context 类别,扩展标志)
    • 85 = 1000 0101(还有后续字节,值为 5)
    • 3D = 0011 1101(最后一个字节,值为 61)
    • 计算:5 << 7 | 61 = 640 + 61 = 701
  • BF = 1011 1111(Context 类别,扩展标志)
  • 85 = 1000 0101(还有后续字节,值为 5)
  • 3D = 0011 1101(最后一个字节,值为 61)
  • 计算:5 << 7 | 61 = 640 + 61 = 701
  • KM_TAG_PURPOSE (1):密钥用途(加密/签名/验证等)
  • KM_TAG_ALGORITHM (2):加密算法(RSA/EC/AES等)
  • KM_TAG_KEY_SIZE (3):密钥大小(位数)
  • KM_TAG_DIGEST (5):摘要算法(SHA256/SHA512等)
  • KM_TAG_PADDING (6):填充模式(PKCS7/OAEP/PSS等)
  • KM_TAG_EC_CURVE (10):椭圆曲线类型(P-256/P-384等)
  • KM_TAG_ORIGIN (702):密钥来源(生成/导入/派生)
  • KM_TAG_ROOT_OF_TRUST (704):信任根
  • KM_TAG_OS_VERSION (705):操作系统版本号
  • KM_TAG_OS_PATCHLEVEL (706):系统安全补丁级别
  • KM_TAG_VENDOR_PATCHLEVEL (718):厂商补丁级别
  • KM_TAG_BOOT_PATCHLEVEL (719):启动镜像补丁级别
  • KM_TAG_ATTESTATION_ID_BRAND (710):设备品牌
  • KM_TAG_ATTESTATION_ID_DEVICE (711):设备型号代码
  • KM_TAG_ATTESTATION_ID_PRODUCT (712):产品名称
  • KM_TAG_ATTESTATION_ID_SERIAL (713):设备序列号
  • KM_TAG_ATTESTATION_ID_IMEI (714):IMEI号
  • KM_TAG_ATTESTATION_ID_MANUFACTURER (716):制造商名称
  • KM_TAG_ATTESTATION_ID_MODEL (717):设备型号名称
  • KM_TAG_ATTESTATION_APPLICATION_ID (709):认证应用ID
  • 标签号 < 310xA0 | tag_number
  • 标签号 >= 31:扩展标签号编码(如上述 701、705 等)
  • 证书使用设备私钥签名,确保内容不可篡改
  • 客户端使用设备公钥验证签名
  • 验证启动密钥确保启动镜像完整性
  • 设备锁定状态确保密钥安全存储
  • 系统版本和补丁级别用于评估设备安全性
  • 防止使用过时或不安全的系统版本
  • Attestation Application ID 确保密钥只能被指定应用使用
  • 签名摘要防止应用被篡改
  • 应用请求密钥认证,获取包含设备安全状态的证书
  • 服务器验证证书,评估设备安全性
  • 通过 Root of Trust 验证设备启动状态
  • 通过补丁级别验证系统安全性
  • 通过 Attestation Application ID 将密钥绑定到特定应用
  • 防止密钥被其他应用滥用
  • 根据设备安全状态决定是否允许操作
  • 根据系统版本和补丁级别评估风险
  • 验证 Challenge 匹配
  • 验证应用 ID 匹配
  • 验证设备安全状态
  • 验证系统版本和补丁级别
  1. 密钥来源验证:证明密钥是在安全环境中生成的
  2. 设备完整性验证:验证设备启动状态和系统版本
  3. 安全策略执行:确保密钥使用符合安全要求
  4. 防篡改保护:通过数字签名确保证书内容不可伪造
  1. 证书生成:TEE 环境根据密钥属性和设备状态生成认证记录
  2. 扩展嵌入:将认证记录作为 X.509 扩展嵌入证书
  3. 签名:使用设备私钥对证书进行签名
  4. 验证:客户端验证证书签名和扩展内容
  1. 读取扩展 SEQUENCE
  2. 查找 TEE OID(通过字节匹配)
  3. 定位到扩展值 OCTET STRING
  4. 解析内部的 Attestation Record
  1. SET OF 顺序:SET 是无序集合,packageInfos 和 signatureDigests 的顺序不保证
  2. 外层包装:可能被 OCTET STRING 包装
  3. 标签形式
    • Application[99] PRIMITIVE:直接包含编码数据
    • Context[709] CONSTRUCTED:包含 OCTET STRING,其内容为 AttestationApplicationId
  1. 第一个字节:0x1F(表示扩展标签号)
  2. 后续字节:标签号的 BER 编码
    • 每个字节的最高位:1 表示还有后续字节,0 表示最后一个字节
    • 低 7 位:标签号的一部分
  1. 证书解析:解析 X.509 证书结构
  2. 扩展提取:提取 TEE 认证扩展
  3. 记录解析:解析认证记录内容
  4. 签名验证:验证证书数字签名
  5. 内容验证
    • 验证 Challenge 匹配
    • 验证应用 ID 匹配
    • 验证设备安全状态
    • 验证系统版本和补丁级别
  6. 决策:根据验证结果决定是否允许操作
  1. 层次结构:TEE 证书是标准的 X.509 证书,包含 TEE 特有的扩展
  2. 编码格式:使用 ASN.1 DER 编码,需要理解标签和长度编码规则
  3. 标签系统:Keymaster 标签使用 Context 标签编码,标签号 >= 31 需要扩展编码
  4. 安全信息:信任根、系统版本、补丁级别等关键信息在 TEE Enforced 授权列表中
  5. 应用绑定:Attestation Application ID 将密钥绑定到特定应用
  1. 理解 ASN.1:掌握 ASN.1 编码规则是解析证书的基础
  2. 实践解析:使用 010 Editor 或类似工具实际解析证书文件
  3. 对比分析:对比不同设备的证书,理解字段差异
  4. 安全评估:理解各字段的安全含义,能够评估设备安全性
  • 密钥的生成环境(软件/TEE/StrongBox)
  • 设备的启动验证状态
  • 系统版本和安全补丁级别
  • 密钥的使用限制和属性
  • 设备的硬件安全特性
  • 密钥来源验证:证明密钥是在安全环境中生成的
  • 设备完整性验证:验证设备启动状态和系统版本
  • 安全策略执行:确保密钥使用符合安全要求
  • 防篡改保护:通过数字签名确保证书内容不可伪造
  • 证书生成:TEE 环境根据密钥属性和设备状态生成认证记录
  • 扩展嵌入:将认证记录作为 X.509 扩展嵌入证书
  • 签名:使用设备私钥对证书进行签名
  • 验证:客户端验证证书签名和扩展内容
  • 位置:Context[0],可选字段
  • :0=v1, 1=v2, 2=v3
  • 说明:TEE 证书通常为 v3,支持扩展
  • 类型:INTEGER
  • 说明:证书颁发者分配的唯一序列号,用于标识证书
  • 类型:SEQUENCE
  • 内容:算法 OID + 参数
  • 常见算法:SHA256withRSA, SHA512withRSA, ECDSA
  • 类型:SEQUENCE of RelativeDistinguishedName
  • 说明:证书颁发者的可分辨名称(DN)
  • 示例:CN=Android, O=Android, C=US
  • 类型:SEQUENCE
  • 内容
    • notBefore:证书生效时间(UTC 或 GeneralizedTime)
    • notAfter:证书过期时间
  • notBefore:证书生效时间(UTC 或 GeneralizedTime)

  • 传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

    最后于 2026-1-15 12:51 被简单的简单编辑 ,原因:
    收藏
    免费 9
    支持
    分享
    最新回复 (4)
    雪    币: 5732
    活跃值: (9797)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    2
    可以的
    2026-1-13 13:27
    0
    雪    币: 2
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    3
    大牛也得自己找工作???
    2026-1-13 14:02
    0
    雪    币: 9700
    活跃值: (7515)
    能力值: ( LV8,RANK:130 )
    在线值:
    发帖
    回帖
    粉丝
    4
    Hawcett 大牛也得自己找工作???

    最后于 2026-1-13 14:50 被简单的简单编辑 ,原因:
    2026-1-13 14:15
    0
    雪    币: 640
    活跃值: (3032)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    5
    一加能不能root后使用原生微信指纹支付第三方模块不放心
    5天前
    0
    游客
    登录 | 注册 方可回帖
    返回