腾讯 soter 原理

JAVA herman 1878浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

TENCENT SOTER之所以能实现支付级别的指纹授权安全性,主要原因有三:

  • 所有关键数据存储与操作均根本依赖TEE
  • 厂商在设备出厂之前安全环境会专门生成TENCENT SOTER设备根密钥
  • 生物授权的实质是密钥签名,TEE级别保证“无授权,不签名”。

Soter 架构

Soter 架构图

TENCENT SOTER中,一共有三个级别的密钥:ATTK,App Secure Key(ASK)以及AuthKey。这些密钥都是RSA-2048的非对称密钥。

所有的密钥都由TEE(一个独立于Android系统的安全环境,这也是TENCENT SOTER能解决root下手机认证的关键所在)保护安全保存。这也就意味着除了数据所有者之外,没有人可以使用私钥。更重要的是,如果密钥是在TEE中生成的,所有人——包括微信、厂商等——都无法得到密钥私钥。一句话总结,TENCENT SOTER中所有非对称密钥均是在TEE内部生成的,即使设备被root,私钥也不会泄露。

除了密钥之外,TENCENT SOTER所有关键流程,如签名等,均在TEE中进行,这也保证了核心流程不会被恶意应用篡改。

工作流程

ATTK(设备密钥)私钥在设备出厂之前就已经在TEE中生成,公钥被被厂商安全得传输到腾讯的TAM服务器,私钥则在TEE中安全存储。

准备根密钥

第三方应用能且只能在TEE中生成唯一ASK(应用密钥)。一旦ASK被成功生成,私钥被存储在TEE中(或者更加准确地说,被TEE中安全密钥加密存储在手机sfs中,等同于存储在TEE中,即使手机被root了也是安全的)。公钥结构体(包含公钥信息以及其他辅助信息)导出的时候会自动带上ATTK对公钥数据的签名。应用开发者将公钥结构体以及ATTK对该结构体的签名通过微信开放平台接口(见接口文档)发送到TAM服务器认证公钥结构体合法性。如果合法,则第三方保存该结构体备用。 

准备应用密钥

对于每一个业务场景,你应该生成一对AuthKey(业务密钥)用于该场景指纹认证。AuthKey的生成过程与ASK类似——在TEE中生成,私钥在TEE中保存,公钥上传到服务器。不同的是,第三方应用应该自己检查AuthKey的合法性(实际上,我们真的不想知道你们的用户做了多少笔支付)。同时,生成AuthKey的时候,需要标记私钥只有在用户指纹授权之后才可以使用(正如Google在标准接口中定义的那样)。 

准备业务密钥

在认证之前,应用需要先向自己的服务器请求一个挑战因子(通常是一个随机串)作为用于签名的对象。用户指纹授权之后,你将可以导出一个JSON结果,其中包含了你刚刚请求的挑战因子、用户使用了哪个手指(fid)以及其他设备信息,和这个JSON结果对应AuthKey的签名。之后,将他们发送到自己的服务器,自己使用之前存储的AuthKey公钥验签就好。其中,fid也是在TEE中自动读取并连同结果一起被签名的,也就是说,黑客是无法伪造。 

认证或开通

以上,就是TENCENT SOTER的原理,欢迎留言讨论。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 腾讯 soter 原理