最近晚上有空闲时间,分析了下腾讯Soter的原理和开源代码。
开源代码:https://github.com/Tencent/soter
ATTK:设备根密钥,在设备出厂前在TEE中生成,公钥通过安全通道传输到腾讯TAM服务器,私钥存储在RPMB
ASK:App Secure Key,应用密钥,在应用启动时生成,每个应用生成一个
AuthKey:Authentication Key,业务密钥,应用内每个业务生成一对
1、生成ASK
通过Android keystore机制,在TEE中生成ASK公私钥对,公钥结构体使用ATTK签名后导出并上传,私钥加密存储在文件系统中
2、生成AuthKey
与ASK流程基本上一致,在TEE内生成公私钥对,公钥结构体使用ASK签名后导出并上传,私钥加密存储在文件系统中,使用时需要认证生物特征进行授权
3、认证流程
应用通过用户指纹授权后,将请求的挑战因子(challenge)作为签名对象,通过keystore调用指定的AuthKey私钥进行签名,组装的JSON签名结果中包含了挑战因子、用户使用的手指(fid)、其他设备信息及签名值。其中,指纹验证的fid在TEE中自动读取并被组装到报文中,黑客是无法伪造。