双因子认证解决方案

什么叫双因子认证?

通俗的讲,一般的认证方式都是用户名/密码的方式,也就是只有密码这一个因子来作认证,双因子无非是增加一个因子,增强认证的安全性。

常见解决方案

  • 短信方式
  • 邮件方式
  • 电话语音方式
  • TOTP解决方案

前三种方案,其实都大同小异。Server端通过某种算法生成一段随机密码,通过短信、邮件或者电话的方式传递给用户,用户把随机密码作为登录的凭证传递给Server,Server验证通过之后,就完成了一次双因子认证。但是短信和电话语音对于运营公司是有一定的成本的,除此之外有些非互联网的应用可能并不通公网,这种情况下,TOTP不失为一种好的双因子认证的解决方案。

什么是TOTP?

是Time-based One-Time Password的简写,表示基于时间戳算法的一次性密码。

如果大家玩过梦幻西游的话,那么对将军令应该不陌生,这个就是基于TOTP的一个产物。

OTP

介绍TOTP之前,先介绍下OTP

One-Time Password的简写,表示一次性密码。

OTP(K,C) = Truncate(HMAC-SHA-1(K,C))

其中,K代表密钥串;C是一个数字,表示随机数;HMAC-SHA-1表示用SHA-1做HMAC;

Truncate是一个函数,用于截取加密后的串,并取加密后串的一些字段组成一个数字。

对HMAC-SHA-1方式加密来说,Truncate实现如下:

  • HMAC-SHA-1加密后的长度得到一个20字节的密串;
  • 取这个20字节的密串的最后一个字节,取这字节的低4位,作为截取加密串的下标偏移量;
  • 按照下标偏移量开始,获取4个字节,以大端(把高位字节放在低位地址)的方式组成一个整数;
  • 截取这个整数的后6位或者8位转成字符串返回。
 public static String generateOTP(S

你可能感兴趣的:(java)