动态密码卡TOTP算法
TOTP NET实现:http://googleauthcsharp.codeplex.com/
引用:http://www.cnblogs.com/wangxin201492/p/5030943.html
1. OTP
OTP(One-Time Password)
译为一次性密码,也称动态口令。是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常方便技术手段,是一种重要的双因素认证技术。
1.1 OTP的认证原理
动态口令的基本认证原理是在认证双方共享密钥,也称种子密钥,并使用的同一个种子密钥对某一个事件计数、或时间值、或者是异步挑战数进行密码算法计算,使用的算法有对称算法
、HASH
、HMAC
,之后比较计算值是否一致进行认证。可以做到一次一个动态口令,使用后作废,口令长度通常为6-8个数字,使用方便,与通常的静态口令认证方式类似.
1.3 OTP的实现方式
- 时间同步(
TOTP
) - 事件同步(
HOTP
) - 挑战/应答(
OCRA
)
2. HOTP
HOTP(HMAC-base On-Time Password)
译为基于HMAC的一次性密码,也称事件同步的动态密码。
2.1 HOTP的工作原理
$$ HTOP(K,C) = Truncate(HMAC-SHA-1(K,C))$$
客户端和服务器事先协商好一个密钥K
,用于一次性密码的生成过程。此外,客户端和服务器各有一个计数器C
,并且事先将计数值同步。而Truncate
是为了获得一个符合HTOP
要求的值。
3 TOTP
TOTP(Time-base One-Time Password)
译为基于时间的一次性密码,也称时间同步的动态密码.
3.1 TOTP的工作原理
$$TOTP = Truncate(HMAC-SHA-1(K,T))$$
TOTP
是HOTP
的一个变种,将HOTP
中的计数器C
替换为依托时间的参数T
,T是由当前时间(CurrentUnixTime
、初始时间(T0)、步长(X)决定的。即:
$$ T = (Current Unix time - T0) / X $$
CurrentUnixTime
:当前的Unix时间。T0
: 开始计步初始化时间,默认为0X
: 步长,默认情况下为30s
3.2 TOTP的要求
- 客户端和服务器必须能够彼此知道或者推算出对方的Unix Time
- 客户端和服务器端必须共享一个密钥
- 算法必须使用HOTP作为其关键实现环节
- 客户端和服务器端必须使用相同的步长X
- 每一个客户端必须拥有不同的密钥
- 密钥的生成必须足够随机
- 密钥必须储存在防篡改的设备上,而且不能在不安全的情况下被访问或使用。
- 对该算法中T的实现必须大于
int32
,因为它在2038年将超出上限。 - T0和X的协商必须在之前的步骤中就已经做好了。
3.3 安全性考虑
3.3.1 安全性分析
该算法的安全性和健壮性完全依赖于其关键实现环节HOTP
。
安全性分析的结果是:在所有的测试中,该算法的结果均匀的、独立的分布。这个分析显示,最好的攻击和破解TOTP(HOTP)
的方法是暴力破解。而在算法要求环节,要求key必须有足够的随机性。
3.3.2 时延兼容
在同一个步长内,动态密码生成的结果是一样的。当一个验证系统获得这个动态密码的时候,它并不知道动态密码的生产者是在哪个步长内产生的密码。由于网络的原因,客户端生成密码的时间和服务器接受密码的时间可能差距会很大,很有可能使得这2个时间不在同一个步长内。当一个动态密码产生在一个步长的结尾,服务器收到的密码很有可能在下一个步长的开始。
验证系统应该设置一个策略允许动态密码的传输时延,不应该只验证当前步长的动态密码,还应该验证之前几个步长的动态密码。但越大的传输时延窗口设置,就会带来越大的风险被攻击,我们推荐最多设置一个时延窗口来兼容传输延时。
3.3.3 步长设置
步长大小的设置,直接影响安全性和可用性:
- 一个越大的步长,就会导致一个越大的窗口被攻击。当一个动态密码被生成而且在其有效期内暴露在第三方环境下,那么第三方系统就可以在该动态密码无效前使用这个密码。
- 我们推荐默认的步长时间是
30s
,这个默认值是在权衡了安全性和可用性的基础上提出的。 - 下一个动态密码肯定会在下一个步长生成,用户必须等待当前步长的结束。这个等待时间的理想值会随着步长的设置而增大。一个太长的窗口设置不使用网络用户登录这种场景,用户可能等不了一个步长的时间,就放弃登录
转载于:https://www.cnblogs.com/Horne/p/6945862.html
动态密码卡TOTP算法相关推荐
- 动态密码算法介绍与实现
动态密码,亦称一次性密码(One Time Password, 简称 OTP),是一种高效简单又比较安全的密码生成算法,在我们的生活以及工作中随处可见,身为开发者,也或多或少在自己的业务系统中集成了二 ...
- 【IoT】加密与安全:动态密码 OTP 算法详解
动态密码,亦称一次性密码(One Time Password, 简称 OTP),是一种高效简单又比较安全的密码生成算法,在我们的生活以及工作中随处可见. 1.动态密码背景介绍 动态密码是指随着某一事件 ...
- 动态密码算法介绍与实现 1
动态密码,亦称一次性密码(One Time Password, 简称 OTP),是一种高效简单又比较安全的密码生成算法,在我们的生活以及工作中随处可见,身为开发者,也或多或少在自己的业务系统中集成了二 ...
- 【TOTP】基于时间的动态密码及其工程实践
探究了常见的动态密码的实现方式及其底层原理,并基于java做出了工程实践. 文章目录 A.来源于一个现象的好奇 B.2FA C.TOTP 1.什么是TOTP 2.原理详解(基于java-totp项目分 ...
- MCGS 根据时间实现动态密码进行登陆
简介 通过脚本对时间计算,实现动态密码,输入密码与动态密码进行校验,如果密码错误,提示密码错误请重新登陆. 建立三个画面 登陆界面 按钮组件,用于密码输入完成,确定登陆.输入框组件,输入密码. 密码错 ...
- 通达OA 办公系统(Office Anywhere)动态密码配置使用详解
为了增强软件系统的安全性,通达科技总部引进海月通信公司自主研发的动态密码系统,内置于通达OA系统中,给用户提供"通达OA静态密码+海月动态密码"和"通达OA+动态密码&q ...
- java利用TOTP算法动态生成一次性密码
一.HOTP HOTP 算法,全称是"An HMAC-Based One-Time Password Algorithm",是一种基于事件计数的一次性密码生成算法,详细的算法介 ...
- 【IoT】加密与安全:动态密码图解:HOTP 与 TOTP 算法
1.简介 本文根据 RFC4226 和 RFC6238 文档,详细的介绍 HOTP 和 TOTP 算法的原理和实现. 两步验证已经被广泛应用于各种互联网应用当中,用来提供安全性. 对于如何使用两步验证 ...
- java 手机动态口令_动态密码TOTP的Java实现
一.HOTP HOTP 算法,全称是"An HMAC-Based One-Time Password Algorithm",是一种基于事件计数的一次性密码生成算法,详细的算法介绍可 ...
最新文章
- anaconda python 版本对应关系
- Python 回溯算法
- mysql通过字段凝视查找字段名称
- Spring Security源码解析(二)——引入
- 使用分析函数进行行列转换
- 电子书下载:Ultra-Fast ASP.NET 4.5 2nd
- git/ssh捋不清的几个问题
- jqGrid colModel 参数(来自中文手册)
- 一键加速去不掉加锁的_老旧油渍去不掉?这几款清洁神器帮你轻松搞定油污难题...
- Linux 线程绑核(以后研究)
- dns服务与配置管理,一机多站
- 【ThreeJS基础教程-高级几何体篇】2.5 加载GLTF/GLB格式文件,Draco压缩文件的获取与加载
- 解这道考研题要用克莱默法则的公式吗?
- 基于VHDL利用PS2键盘控制的电子密码锁设计
- uniapp开发微信小程序,多行文本换行,动态改变文字区域宽度
- WhatsApp中的小标记是什么意思?
- FPGA—多路选择器(简单逻辑组合电路)
- 基于QT实现的alpha-beta剪枝算法搜索的象棋人机博弈游戏
- Mol Cell Proteomics. |陈洁| 整合鸟枪法蛋白质组学中鉴定和定量的错误率
- 红米k30支持html,红米k30支持多大的快充