大家好,我是大白,刑天舞干戚,猛志固常在。优质的帖子也在尽力中提供,也希望各位道友多多支持,让我引劫渡劫成功哈哈哈。
大白队口号就是:砸锅卖铁我最行,拼死拼活就要赢!!!!!!!!!!!!
今天不做技术分享,分享的是动态令牌原理技术OTP、TOTP和HOTP 原理区别,因为昨天发布了SSL VPN的动态令牌对接腾讯短信网关进行配置辅助认证的实施分享后,好多私信虽然知道了关于深信服SSL VPN动态令牌的基本配置,但是不清楚动态令牌到底有什么?为什么叫动态令牌?同样我也根据上贴的承诺,答应给大家发一下动态令牌的讲解跟总结。
其实网站上的讲解都有好多,那我主要是针对我个人的理解以及相关资料做一下讲解跟总结。
好的废话不多说,今天讲解技术原理之动态令牌 OTP、TOTP和HOTP 原理区别,通过叙述就可以知道,动态令牌包括OTP、TOTP、HOTP大概这三种基本原理方式,但是这个动态令牌还有一个容易被忽略的兄弟2AF。
先说一下这位兄弟2AF,什么是2AF?为什么叫2AF?
2FA,全称 Two Factor Authentication,中文名叫双重因素认证,双重因素认证,即认证需要用到两重因素。比如,你在银行 ATM 取钱的时候既要你的银行卡,也需要只有你才知道的六位数口令,这便是双重因素认证。2FA是基于时间、历史长度、实物(信用卡、SMS手机、令牌、指纹)等自然变量结合一定的加密算法组合出一组动态密码,一般每60秒刷新一次。不容易被获取和破解,相对安全。
常见的手机验证码为例,它也是属于 2FA 的一种方式,比如,当你在进行敏感操作时,首先你需要知道你的用户名,然后需要下发一条手机验证码到你的手机上,目的是为了验证你对手机的所有权,这也是属于双重因素认证的一种方式。
所谓双因素认证就是,通过你所知道再加上你所能拥有的,这二个要素基于时间、事件和密钥三变量组合到一起而产生的一次性密码发挥身份认证系统。
一般来说,三种不同类型的证据,可以证明一个人的身份。
秘密信息:只有该用户知道、其他人不知道的某种信息,比如密码。
个人物品:该用户的私人物品,比如钥匙等等。
生理特征:该用户的遗传特征,比如指纹、相貌、虹膜等等。
比如你注册国外的网站GitHub,你就可以选择使用手机令牌,使用到的技术叫做 TOTP(Time-based One-time Password,中文名:基于时间的一次性口令),简单来说就是,当你将你的账户和验证软件绑定之后,在一定时间内,验证软件会生成一串数字(一般是六位数),你将这串数字输入到目标网站,即可完成认证。
GitHub设置动态令牌认证的方式
Github官网然后登录自己的Github账号。再右上角点击头像,在下拉菜单上找到 Setting这个选项,然后点击它。
然后再点击左侧栏的Developer settings选项。
验证账号信息:
进行设置动态令牌权限昵称时限等:(NOTE 验证token的标题(别名),你可以起一个好记的名称。Expiration:验证token有效期限(必填项)。默认30天。Select scopes:选择要授予此令牌token的范围或权限。 要使用token从命令行访问仓库,请选择repo。 要使用token从命令行删除仓库,请选择delete_repo。 其他根据需要进行勾选。最后,点击Generate token按钮。)
创建完成:生成令牌TOKENS然后进行绑定验证使用就可以了
好的那么由案例引出了TOTP,但是我们不得不提到的就是OTP、HTOP 。
OTP是什么?
OTP串计算公式:
OTP(K,C) = Truncate(HMAC-SHA-1(K,C))
K表示秘钥串,C是一个数字,表示随机数;HMAC-SHA-1表示使用SHA-1做HMAC;Truncate是一个函数,就是怎么截取加密后的串,并取加密后串的哪些字段组成一个数字。
HMAC(Hash-based Message Authentication Code,中文名:基于哈希的消息认证码,这个算法主要是用于验证消息的合法性,与常见的哈希算法的唯一区别是,在计算哈希摘要时,还需要额外提供一串密钥,俗称加盐(salt 或 nonce)。通俗点讲:就是使用一串只有你自己或者对方才知道的密钥,那么可以生成一串独一无二的哈希值。
在2AF两步验证中使用的密码是(One-Time Password 简称OTP,中文名:一次性密码),也称为动态口令。是使用密码技术实现的在客户端和服务器之间通过共享密钥的一种强认证技术,是增强目前静态口令认证的一种非常方便技术手段,是一种重要的两步验证认证技术。
OTP 是 One-Time Password的简写,表示一次性密码。分为以下两种也就是HOTP跟TOTP:
HOTP (HMAC-Based One-Time Password Algorithm)
HOTP 是基于 HMAC 算法生成的一次性密码,也称事件同步的动态密码。
C作为一个参数,获取动态密码与OTP的区别就是新增C作为随机数参与进去。
HMAC在 HOTP 的应用中,这串密钥只有客户端和服务端双方才知道,被计算摘要的消息要求双方都能知道并保持相同,一般是一个自增计数器,比如:0, 1, 2, 3, 4。被计算出的一次性口令每使用一次,这个计数器就加一,由于密钥只有双方才知道,故双方都可以计算出一样的一次性口令,而第三方不知道这串密钥的,无法计算出一样的口令。
HOTP 存在一个缺点在离线状态下,客户端正常是无法跟服务端同步计数器的,因为离线状态下客户端和服务端无法通信,原有的解决思路有两个:一个是让服务端一并计算计数器前后的验证码值;一个是,向用户展示服务端当前计数器的值,然后用户手动同步客户端的计数器。
但是无论如何,怎么来看HTOP的离线验证问题并不尽如人意。
而TOTP也是为了更好的适应这个环境方式,得到了修改版的HOTP---TOTP。
TOTP只是将其中的参数C变成了由时间戳产生的数字。
TOTP 算的上是 HOTP 的改良版,使用时间替换掉 HOTP 的事件计数器 C,也称时间同步的动态密码
由上图可知TOTP主要是通过,一个共享密钥(也被称作种子),一个是计数器(或者时间因子,或者叫做时间戳),经过特定的算法计算出结果。如果这两个元素全都一致,服务器端和客户端会计算出相同的结果,从而实现认证功能。
所以2AF是一个整体的流程,OTP是HOTP、TOTP的原本,HOTP基于了HMAC的动态随机数接入,而TOTP是通过时间戳或者说是计数器的介入。
动态令牌的相关项目产品:
OTP:
https://github.com/gitchs/gootp
HOTP:
阿里巴巴的 身份宝
Google的 身份验证器(google-authenticator)
TOTP:
https://github.com/google/google-authenticator
以上就是本次的技术原理之动态令牌 OTP、TOTP和HOTP 原理区别分享,感谢大佬们的参阅,此贴先到这里后续会带上更加实用的帖子,感谢大家!
励志分享超清壁纸语句~~:
读书对于智慧,也像体操对于身体一样。——爱迪生
好的今天就到这里,老样子,感谢各位大神的参阅,孩子为了挣豆子不容易,孩子家里穷没豆子吃饭了!!! |