OTP详解,OTP、HOTP、TOTP区别以及Node平台OTP包轻体验

前言

最近上班过程中,谷歌到了一个概念OTP,看到它的全称之后,我发现它是一个我们日常生活中已经离不开的东西:(One-Time-Password),顾名思义,一次性密码。恐怕最常见的可能就是我们动态登录账号的时候选择短信(SSM)验证账号。这个验证码就属于OTP。虽然目前工作中没有用到OTP,但是我还是决定了解一下这个概念,说不定以后什么时候就用到了。

OTP概念

首先我们要知道的是,OTP是MFA(Multi-Factor-Authentication)的一个实现模型。先简单了解一下MFA的概念,MFA概括来说就是用户需要提供2种或2种以上的凭证去验证真实身份。相比仅凭账号密码,MFA提供了更加安全的资源保护。下面列举一些MFA的例子:

  1. 用户安全问题
  2. 密码
  3. OTPs
  4. 软件安全码、keys
  5. 指纹、人脸识别、声纹及其他生物特征
  6. 用户行为足迹分析

其实把资源安全的责任附加到用户身上(如上述的1、2等),并不是十分可靠,用户承担了记忆的责任。因此我认为OTP是一个比较负责任的MFA做法。
接下来介绍OTP。
OTP是应用主、网站提供给用户,需要用户接收并且输入的一次性密码,一旦用户使用过之后,再次登录应用或者页面则需要接受另一个新的密码。OTP的形式可以为短信、手机应用等等。
生成OTPs的标准算法有很多,例如SHA-1,它们都有一个共同点:有一个seed和一个moving factor,seed是绑定在账户上的静态值,从账户创建开始即保持不变,moving factor则在每一次OTP请求中改变。根据这个动态因子的不同,OTP又被分为两种:HOTPTOTP

HOTP

HOTP中,H指代 Hash-based Message Authentication Code,另一种不那么专业的解释方法为:HOTP是一种事件驱动的OTP,它的moving factor基于一个计数器。
HOTP每一次请求,都会让计数器递增,而生成的OTP在下一次计数前保持有效。OTP生成器和服务器会同步监测到用户的有效访问行为。HOTP的一个例子为Yubikey。

你可能感兴趣的:(front-end,javascript,node.js,前端,安全)