ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Google Attestation Key

Google Attestation Key

1 简介

因为最近要用到这个,所以简单写写。

定义:

Attestation Key是Android Key Attestation 的信任根,用来给设备TEE/StrongBox里的认证证书链做信任背书,让后端服务器可信地确认:这个密钥真的跑在安全硬件里,不是软件模拟、不是被导出的密钥。

作用其实也不难:

它提供证据,证明某个密钥受可信的 Android 安全硬件保护,并报告设备当时的安全状态。其实就相当于鉴权的时候增加了机器。后续鉴权就是用户名/密码+设备标志。

这里的设备标志可以是App 自己代码生成 RSA 私钥,存在自己沙盒。然后生成公钥每次和鉴权信息一起发送。也可以再进一步,在 Keystore(TEE)生成密钥 → 私钥拿不出来,同时能附带 Attestation 证书给服务器,服务器信任这个签名是安全硬件发出的。

目前国内的服务基本上不会需要这个Google Attestation证书,就算国外,也很少,只有很少一部分Passkey,海外银行、支付 App,政府电子身份 App可能会用到。

整个完整流程如下:

  1. App 调用 API,请求 Keystore生成一把 EC/RSA 密钥,并且指定:isStrongBoxBacked=true/ 要求硬件保护、开启 attestation
  2. 指令送到 TEE/StrongBox,在安全硬件内部生成公私钥
  3. 公钥可以正常拿出来;私钥永远留在硬件里,无法导出
  4. 同时 TEE 用本地的 Attestation Key 签名一份证明(Attestation 证书链),告诉外面:这把密钥确实是在我这个安全硬件里生成的,属性是 XXX(不可导出、需要生物认证等)
  5. 证书链给到 App,App 上传给后端;后端用 Google 根公钥校验这条证书链,采信这份证明。

所以说白了,就是设备生产的时候,预置一个key就行了。这个key叫做Attestation Key。只是在安卓的key还是不少,比如widevine drm,attestation,ifaa,soter key。比起我以前做Linux,真的是天壤之别。

现在是出厂的时候要预置这个,如果没有会导致CTS出错。对于一般ODM商,就是看看如何写进去。

整个流程就是准备安全存储环境 → 导入证明私钥及证书链 → 验证并完成预置。

2 启动RPMB

这一步是准备安全存储环境。

高通RPMB(Replay Protected Memory Block,重放保护内存块)是一种专用于存储敏感数据的安全存储区域,通常用于存储如认证密钥、加密密钥和其他安全性相关的数据。RPMB的主要特点是其重放保护功能,确保数据的完整性和安全性。一般要用trustzone或者tee访问。

参考下面高通的文档,大概是以下的步骤。首先,版本要是userdebug版本。然后用以下命令开启。

adb root adb shell qseecom_sample_client smple64 v 15 1 或者qseecom_sample_client v samp 14 1 或者qseecom_sample_client -gk -d /path/to/device_firmware

这里完成RPMB之后重启。

3 烧写KEY

adb root adb push keybox.xml /data/ adb shell cd /data/ LD_LIBRARY_PATH=/vendor/lib/hw KmInstallKeybox keybox.xml device_ID true(这里的device_ID就是xml里面的device_ID)

搞定。。。

KmInstallKeybox是高通的工具,大部分操作其实都给封装了。参数是:

  • keybox.xml:待导入的证明密钥和证书链文件。
  • device_ID:选择 XML 中对应的DeviceID条目,不是默认填写手机序列号或 IMEI。
  • true:同时预置设备标识信息,用于设备 ID 证明,并非“启用 Google 认证”的开关。

从开发的角度来看,还是挺简单的。但是从产线的角度来看,手动步骤还是比较多的。。。。

不过在Android 15 开始引入RKP(Remote Key Provisioning)远程密钥分发。Android 16 起新设备不再烧录工厂attestation key,改成上线时向 Google 实时申领 attestation 密钥,不再依赖出厂固化密钥,根信任体系依然是 Google 维护Android De。

好吧,当成历史文件看就好。。。

谷歌文档:https://source.android.com/docs/security/features/keystore/attestation?hl=zh-cn

参考:

Android Attestation key导入步骤(Qualcomm Platform)-CSDN博客

Key attestation-Google的密钥认证-腾讯云开发者社区-腾讯云

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进