最近公司在做一个电子签约的APP,用到指纹登录和指纹签约,我们集成的是FIDO,完成了第一期,现在准备开第二期项目了,前期准备时,领导让我查一下腾讯的SOTER,总结一下平台功能和用到的技术等,这是第一篇博客,就来总结一下SOTER吧!
SOTER的本意是希腊神话中的神祗,象征着安全。现如今,生物识别作为一个新兴的认证方式,从好莱坞大片的银幕中正款款走出,进入人们的日常生活。从应用场景上来说,从之前单纯的人脸或者指纹解锁,到如今指纹支付以及授权通过各大app普及开来;而从系统层面,作为一向习惯于将设备接口能力开放出去Google,也在2015年2015年5月的Google I/O大会发布的Android M(正式版为Android 6.0)中提供了官方的指纹接口以及针对指纹的增强版本密钥管理机制。
腾讯通过自身强大的影响力,和各大手机、芯片以及TrustZone厂商合作,在自家应用——微信上成功实现了安全的指纹支付认证流程。同时,作为一家有责任感的公司,腾讯在微信指纹支付全流程之上,将流程抽象为一套完备的生物识别标准——SOTER。
作为一项标准的SOTER,与厂商合作,在系统原有的接口能力之上提供安全加固。SOTER具有以下优点:
1. 第三方应用不需要深入安全域,通过调用业务无关的安全域(TEE,即独立于手机操作系统的安全区域,root或越狱无法访问到)应用程序(TA),降低开发难度和适配成本;
2. 对于Android来说,在指纹方面,适配Android 6.0FingerprintManager以及KeyStore接口以做到接口统一,同时对于Android不安全情况进行加固;
3. 对于第三方应用,给到应用方自由度,可以对验证结果进行二次确认;
4. 即使外部环境不可信,依然可以安全授权。
TEE(Trusted Execution Environment)是独立于手机操作系统的一块独立运行的安全区域。SOTER标准中,所有的密钥生成、数据签名处理、指纹验证、敏感数据传输等敏感操作均在TEE中进行。不仅如此,SOTER使用的设备根密钥由厂商在产线上烧入,从根本上解决了根密钥不可信的问题,并以此根密钥为信任链根,派生密钥,从而完成。与微信合作的所有手机厂商将均带有硬件TEE,并且通过腾讯安全平台和微信支付安全团队验收,符合SOTER标准。
设备根密钥(Attestation Key,以下简称ATTK)是SOTER方案的核心密钥。对于Android设备而言,ATTK由厂商在设备出厂之前在生产线上烧入。ATTK具有以下特点:
RSA-2048格式密钥,目前没有有效破解方法
设备根密钥在设备内部生成,任何机构或者个人没有办法获取密钥的私钥
Android设备中,私钥存储在设备TEE中安全区域(RPMB),目前没有有效方式进行破解
对于Android设备而言,公钥在设备出厂之前由厂商通过安全且被认证的双向HTTPS接口发送至SOTER设备密钥管理服务器(以下简称TAM),保证上传数据不会被篡改。
每一台设备的ATTK均不相同,保证了即使某一台设备发生泄漏,也不会影响到其他设备
设备根密钥的安全性是SOTER安全性的保障,微信团队将会对支持的设备进行充分的安全监控,保证设备安全。
具体步骤:
1. 根密钥提供商在设备出厂之前请求到设备,要求生成设备根密钥
2. 设备在密钥生成TA内生成根密钥,并将该密钥私钥存储在安全存储区域,公钥导出到根密钥提供商
3. 根密钥提供商将根密钥公钥通过后台可信接口(以微信为例,即微信公众号接口)传输至密钥公提供商,鉴权通过则存储
4. 对于第2-n级密钥,则客户端(设备)主动请求到密钥生成TA,请求生成该级别密钥
5. 密钥生成完毕之后,将私钥存储在安全存储区域
6. 密钥公钥导出至设备,同时从安全区域中导出的有该公钥使用上一级别的密钥的签名。将密钥公钥和签名传输至密钥公钥提供商(或应用程序后台),验签通过,则将该密钥公钥存储
其中,设备根密钥的密钥公钥提供商为TAM,其他级别密钥的密钥提供商为应用程序后台,由应用自行存储。微信团队将提供统一的后台API供应用程序后台获取某台设备的ATTK公钥。
除了刚刚介绍的ATTK之外,App Secure Key (ASK)为应用二级密钥,建议在应用启动时即生成,每一个应用生成一个;Authentication Key(Auth Key)是业务密钥,建议应用内每一个业务(如支付业务和登陆业务)均生成一对。同时,Auth Key的使用需要用户通过生物信息(如指纹)进行授权。
用户使用生物信息授权并签名
除了已经在使用的微信支付之外,SOTER有很多其他的应用场景:
实现生物识别解锁或生物识别登陆,用户不再需要输入繁琐密码,还能实现多账号快速切换;
替代交易密码,将原本繁琐的在线交易流程简化,间接提高成功率。
增加了一种认证方式之后,可以作为正常密码鉴权的补充,替代传统的短信验证码,提高了用户体验的同时,减少了大量短信成本。
目前,SOTER支持两种方式进行实现:
第三方应用通过参考sample代码或者嵌入微信封装好的sdk实现全套SOTER流程;
公众号应用通过调用提供的jsapi接口直接进行生物识别可信验证。