产品层面的安全校验的本质是:身份验证——即,用一切简单可行的手段证明你极大概率是账户拥有人。
(注意,证明你是账户拥有者,不仅是在支付的时候,在任何操作的时候都需要,包括像找回密码等)
围绕着这个本质,具体的方法就有很多,比方说,要求你展示有且只有A拥有的信息,来证明你是A,既可操作成本低,又能有效证明。又或者,检测你的设备信息,只要是同一设备,那么你的操作亦是部分可信。又或者,任何一次资金操作都会信息提醒账户所有者等等……
系统地组织一些这些方法,就可以组成四大部分:
多个不相关维度校验 + 单个维度的复杂规则 + 威胁检测 + 特殊规则
① 多个不相关维度校验
在密码已死的时代(大量密码相同、撞库等等),密码再要求“含有大小写字母和数字,且12位以上”,又长又复杂,意义也不大。也就是说,单个维度的复杂度已经不足以支持现在的安全需求。这还没提及,长密码下牺牲了多少用户体验方面的考虑。
所以更优的解法应该是多个维度进行校验。每一个单独的维度对“你是账户拥有人”进行一次校验。就像一个简单的数学题,如果一个维度的风险是30%,新增两个维度的风险分别也都是30%。那最终的风险是多少呢? 2.7%——比起在单个维度不断强化要更优吧。
这也是为什么,谷歌二步验证能兴起的原因。在此前,我们尝试增加的维度是,邮箱验证 + 短信验证,但都分别暴露出来一定的风险。相对之下,谷歌验证是最安全的。(谷歌验证是由时间算法生成,不需要联网,这就是最安全的原因。)
不管怎么样的,结论就是,在简单的一个账户密码的维度上,还必须有其他维度,最后,风险才能降得最低。
这也是我们必须设计的,多个维度进行校验。
当然,需要注意的是:维度之间是不能相关,否则就没有意义了。就好比,校验完身份证号又校验手机号,两个维度其实是部分相关的。
② 单个维度校验的复杂规则
除了多个维度去设计校验,还可以极致增大安全性的做法是,在单个维度上,不断设计复杂规则。
比方说,在六位密码校验的这个维度中,在密码输入上,只能连续错3次,否则就会封锁账户。——不信你试试微信支付错三次会发生什么事?
又比方说,在短信验证这个维度中,可以设计短信验证的有效时间,可以设计输入错误三次显示图片验证码之类的。
单个维度校验下的规则也是必须的。越了解暴力破解的方式,能设计得越好。
③ 威胁检测
威胁检测,事实上属于比较特别的多维度校验。常常是用户无法感知(这也是问题之一,常常用户无法感知自己被保护而担心,但其实有非常严密的威胁检测)。
举一个经典的例子,为什么微信简单的六位支付密码能保证安全?六位密码的组合可能性并不多,加之多半用户选择的都是相同的密码。但是事实上,微信在这方面用的很好。怎么做的呢?
简单来说,我们看到的是一层校验,但是事实上,微信背后这个风险校验逻辑是非常完善,他会对我们的平时的消费习惯进行分析、消费地点进行分析,又,对同一设备进行分析,以及微信登录(得先登录再支付)上又有严格,好友验证,异地验证等等。
这些多个隐形维度检测,业内统测为威胁检测。
有许多地方其实已经呼吁过停止使用,短信验证码。但是考虑到易用性,绝大多数公司都不愿放弃,所以更多把目光转向了威胁检测。
④ 特殊规则
这实际上,属于“其他”分类,任何时候作归类总结的时候,都避免不了的一个“其他”分类……
这里就是一些比较特殊,尽管特殊,但是却不一样低频。比方说,像消费后的信息提醒。不过也有一些比较低频使用——冻结账户之类。
特殊规则,我们也可以尝试去设计。
网友评论