动态密码卡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,这个默认值是在权衡了安全性和可用性的基础上提出的。 - 下一个动态密码肯定会在下一个步长生成,用户必须等待当前步长的结束。这个等待时间的理想值会随着步长的设置而增大。一个太长的窗口设置不使用网络用户登录这种场景,用户可能等不了一个步长的时间,就放弃登录
动态密码卡TOTP算法的更多相关文章
- 黄聪:OTP动态密码_Java代码实现
OTP认知 动态口令(OTP,One-Time Password)又称一次性密码,是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常 ...
- TOTP算法实现二步验证
概念 TOTP算法(Time-based One-time Password algorithm)是一种从共享密钥和当前时间计算一次性密码的算法. 它已被采纳为Internet工程任务组标准RFC 6 ...
- 不存数据库生成验证码(totp算法)
以前做验证式的方法都是new Random().Next(10000,99999) 生成随机数了以后存到数据库中的用户表中,用户输入验证码了再查询用户表做比较的,网友说这种做法太LOW B了,应该用T ...
- 毕业设计预习:SM3密码杂凑算法基础学习
SM3密码杂凑算法基础学习 术语与定义 1 比特串bit string 由0和1组成的二进制数字序列. 2 大端big-endian 数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位.数 ...
- PHP密码散列算法的学习
不知道大家有没有看过 Laravel 的源码.在 Laravel 源码中,对于用户密码的加密,使用的是 password_hash() 这个函数.这个函数是属于 PHP 密码散列算法扩展中所包含的函数 ...
- TOTP算法 基于时间的一次性密码
/** Copyright (c) 2011 IETF Trust and the persons identified as authors of the code. All rights rese ...
- CCF 第六次计算机职业认证 第四题 收货 stl动态存储和fleury算法的综合应用
问题描述 为了增加公司收入,F公司新开设了物流业务.由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道.然而,F公司现在只安排了小明一个人负责所有街道的服 ...
- DevExpress 中根据数据库字典动态生成卡式菜单 z
第三方的Devexpress套件因为要使用权限机制控制不同用户进入系统显示菜单所以要配合字典数据动态生成.在WEB中这种问题灰常的轻松在winform里就稍微有点不同为了用DEV实现卡式菜单有组的概念 ...
- 动态时间规整-DTW算法
作者:桂. 时间:2017-05-31 16:17:29 链接:http://www.cnblogs.com/xingshansi/p/6924911.html 前言 动态时间规整(Dynamic ...
随机推荐
- Windows 服务器开通防火墙后,IISFTP和Serv U开通的FTP账号不能登录
应广大服务器客户要求一至反应Windows 服务器开通防火墙后,IISFTP和Serv U开通的FTP账号不能登录,出现列表超时的情况,特提供以下解决方案: 1. IIS FTP用户解决方法: 在防火 ...
- [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒
前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...
- 语音直播是否真能让国内网红向“Creator”转变?
2016年,“直播”.“网红”成为了互联网领域最热门的关键词,一时间整个国内市场涌现出了数百家直播平台,而一些视频网站.新闻客户端.社交平台.电商平台等也纷纷推出直播功能.不仅仅只是创业者们像发了疯似 ...
- Python之线程池
版本一: #!/usr/bin/env python # -*- coding:utf-8 -*- import Queue import threading class ThreadPool(obj ...
- python实现curl功能
之前写过一篇文章关于python CURL模块的,在这里我们从urllib来实现同样的功能.具体代码如下: import urllib import urllib2 import json #发起请求 ...
- Java Socket网络编程常见异常(转)
1.java.net.SocketTimeoutException 这个异常比较常见,socket超时.一般有2个地方会抛出这个,一个是connect的时候,这个超时参数由connect(Socket ...
- 线程与并发系列一:Lock、Monitor、UserSpinLock
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- Unity 5.4 测试版本新特性---因吹丝停
原文:http://blogs.unity3d.com/2016/03/15/enhanced-visuals-better-performance-and-more-the-unity-5-4-pu ...
- GTD中定位篇
一:为什么要定位? 每天我们的大脑涌现很多想法和要处理很多事情,如果我们没有一套流模式处理这些想法和事情,我们大脑将会处于混战忙碌中,很快就被淹没. 定位的目的: 就是有一套流模式有序的分界我们想法和 ...
- 简单好用的sshfs -- 通过ssh映射远程路径(转)
最近习惯性访问N个Linux机器,在不同机器间跳来跳去,很是麻烦,最终,找到了sshfs,可以把远程目录直接映射到本地,无需修改远程机器的设置,仅要求有ssh连接的权限(ssh都没有的话,还能干啥?! ...