在2015年10月推出了腾讯 SOTER解决方案,并且在2017年8月4日,腾讯SOTER解决方案宣布正式开源,git地址如下:github.com/Tencent/sot… 。微信使用的指纹锁、指纹支付,都是基于SOTER解决方案,微信推出的指纹方案一定能保证安全吗?这里通过逆向对微信指纹锁原理和安全性做一个简单分析。
1.微信指纹锁业务流程逻辑
通过对微信指纹锁的逆向分析之后得出微信指纹锁的业务流程图如下:
-
微信指纹解锁业务流程图(开启指纹锁):
在开启指纹锁阶段会先校验是否已经存在系统指纹,若没有则需先录入系统指纹,否则需要用户输入密码进行身份认证,
-
微信指纹解锁业务流程图(校验指纹):
校验指纹阶段分为两个阶段的校验,由于直接调用系统接口获得的返回数据不可信,所以微信设计了本地二次校验。二次校验需要tee返回特定格式的内容,所以需要和不同厂商做适配,在开启指纹锁阶段微信将fid值同时存入了本地数据库和tee,在进行校验时若指纹匹配成功则返回之前存储的fid和用内置私钥签名后的指纹信息等,
2.fid校验关键代码
其中关键点是fid的校验,下面从具体代码的角度来看看上面的fid比较逻辑:
微信验证fid的逻辑如下:
com.tencent.mm.plugin.walletlock.fingerprint.a.a:
Md函数参数即是从tee中返回的fid值,a.w函数从微信数据库中读取原始fid,当匹配成功后跳转到com.tencent.mm/.plugin.mall.ui.MallIndexUI,
日志信息如下:
如果匹配不成功则跳转到
com.tencent.mm/.plugin.wallet.pwd.ui.WalletLockCheckPwdUI
日志信息如下:
匹配不成功即跳转至重新输入密码的页面。
3.指纹锁安全性分析
微信指纹锁采用了本地二次校验的方式对android原始指纹认证接口进行了加强,由于二次校验中使用的fid对每个指纹而言都是固定值,
4.支付宝钱包指纹锁
钱包也打算上指纹锁,但是由于钱包支持离线支付,若参照微信的设计模式,存在被绕过而影响资金安全的可能性,不过相较于无指纹锁的情况对安全性有明显提高,解决方案可以在文案中告知用户“指纹锁也不是万能的之类”。