先简单聊点众所周知的,什么是双因素认证?
借用百科的描述:
双因素认证是一种采用时间同步技术的系统,采用了基于时间、事件和密钥三变量而产生的一次性密码来代替传统的静态密码。每个动态密码卡都有一个唯一的密钥,该密钥同时存放在服务器端,每次认证时动态密码卡与服务器分别根据同样的密钥,同样的随机参数(时间、事件)和同样的算法计算了认证的动态密码,从而确保密码的一致性,从而实现了用户的认证。因每次认证时的随机参数不同,所以每次产生的动态密码也不同。由于每次计算时参数的随机性保证了每次密码的不可预测性,从而在最基本的密码认证这一环节保证了系统的安全性。解决因口令欺诈而导致的重大损失,防止恶意入侵者或人为破坏,解决由口令泄密导致的入侵问题。
事实上这个并不完全正确,准确来讲这个太过于片面,不够全面,“双因素”顾名思义就是在原来“用户名+静态秘密”的基础上增加一种因素,用以判断用户身份,以确保是用户本人登录,目前我知道的就有:动态密码、扫码、消息推送、邮件认证、指纹、人脸、虹膜、声音、U盘证书等,所以说动态密码是双因素认证其中的一种,只是目前应用的最广泛而已。
双因素身份的核心在于“身份判定”!所以简单讲能在用户名+静态密码的基础上,增加一种判定身份的因素,都可以称之为双因素认证。
分别聊下上面提到的几种双因素认证方式:
首先是动态密码:
动态密码是目前使用最广泛的双因素认证方式,我们在登录各类网站或者APP时,通常情况下都需要短信验证码,用以判断是本人操作,这在C端个人用户中是最普遍、也是最有效的方式。但是在B端企业用户中,很少采用短信验证码!一是短信验证码完全依赖运营商信号,及时性差,再者手机短信有被劫持的风险,安全级别低。
企业使用动态密码一般会选用以下几种令牌形式:
-
硬件令牌
-
APP令牌
-
微信小程序令牌
-
钉钉令牌
-
PC令牌
-
微信公众号令牌
虽然同为动态密码令牌,但认证逻辑和流程并不相同,其中手机验证码和微信公众号令牌认证原理较为相似:用户端向认证服务器申请动态密码,认证服务器生成动态密码,并通过短信网关或者微信公众号服务端以短信验证码或微信公众号消息的形式发送到用户端,大致登录流程如下(短信为例):