微信指纹锁原理及安全性分析

在2015年10月推出了腾讯 SOTER解决方案,并且在2017年8月4日,腾讯SOTER解决方案宣布正式开源,git地址如下:github.com/Tencent/sot… 。微信使用的指纹锁、指纹支付,都是基于SOTER解决方案,微信推出的指纹方案一定能保证安全吗?这里通过逆向对微信指纹锁原理和安全性做一个简单分析。

1.微信指纹锁业务流程逻辑

通过对微信指纹锁的逆向分析之后得出微信指纹锁的业务流程图如下:

  • 微信指纹解锁业务流程图(开启指纹锁):

在开启指纹锁阶段会先校验是否已经存在系统指纹,若没有则需先录入系统指纹,否则需要用户输入密码进行身份认证,

身份认证通过后会将该系统指纹fid(每个指纹的识别码),发送给tee,并且存储在tee中,同时存入微信的本地数据库作为备份。

  • 微信指纹解锁业务流程图(校验指纹):

校验指纹阶段分为两个阶段的校验,由于直接调用系统接口获得的返回数据不可信,所以微信设计了本地二次校验。二次校验需要tee返回特定格式的内容,所以需要和不同厂商做适配,在开启指纹锁阶段微信将fid值同时存入了本地数据库和tee,在进行校验时若指纹匹配成功则返回之前存储的fid和用内置私钥签名后的指纹信息等,

指纹锁的本地二次校验主要是对fid进行二次校验,将tee返回的fid值和数据库中的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.支付宝钱包指纹锁

钱包也打算上指纹锁,但是由于钱包支持离线支付,若参照微信的设计模式,存在被绕过而影响资金安全的可能性,不过相较于无指纹锁的情况对安全性有明显提高,解决方案可以在文案中告知用户“指纹锁也不是万能的之类”。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值