OTP概念及实现原理简析-程序员宅基地

技术标签: 数据加密集成服务  安全  加密机  身份认证  

越来越多的信息系统基于安全的考虑加入了多因素认证的功能,实现多因素认证有多种方案,OTP就是其中一种实现相对简单便捷的方案。本文概要介绍了OTP的概念、原理和实现步骤。

一、什么是OTP

OTP:One Time Password,又称一次性口令、一次性密码、动态密码、单次有效密码。

OTP基于专门的算法每隔一定的时间间隔生成一个不可预测的随机数字组合。

OTP的密码有效期仅在一次会话或者交易过程中,因此不容易受到重放攻击。

OTP一般分为计次使用和计时使用两种,计次使用的OTP产出后,可在不限时间内使用;

计时使用的OTP则可设置密码有效时间,从30秒到两分钟不等,而OTP在进行认证之后即废弃不用,下次认证必须使用新的密码,降低了不经授权访问限制资源可能性。

获取一次性密码的方法一般有以下几种:

1、手机短信:这种方式非常普及,可用于信息系统登录,交易时二次验证,信息系统密码遗失时的找回验证等,因为手机的普及,这种方式非常普及,但对于中间人攻击抵抗性低。

2、手机令牌:手机上的APP,软件生成动态密码,用户在信息系统中输入后在服务端完成验证。也可以直接通过与服务端的交互更便捷完成验证过程。这种方式如果移动设备有系统漏洞,存在密钥泄露风险。更换手机时,也需要完成令牌的转移或在新手机上重新生成令牌。

3、硬件令牌:在网银业务中比较普遍,比如银行的U盾,在设定的大额交易场景下,需要使用硬件令牌生成动态口令完成身份确认。由于单独的硬件需要电池,存在寿命问题,令牌遗失一般也需要去营业网点注销后再重新申领。

4、纸张:某些系统采用预打印方式提供一次性密码,比较少见。

二、HOTP与TOTP的差异

HOTP:HMAC-based One-Time Password ,基于 HMAC 算法加密的一次性密码。事件同步,通过某一特定的事件次序及相同的种子值作为输入,通过 HASH 算法运算出一致的密码。

TOTP:Time-based One-Time Password写,基于时间戳算法的一次性密码。 时间同步,基于客户端的动态口令和动态口令验证服务器的时间比对,一般每 60 秒产生一个新口令,要求客户端和服务器能够十分精确的保持正确的时钟,客户端和服务端基于时间计算的动态口令才能一致。

OTP 基本原理计算 OTP 串的公式: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 位转成字符串返回。

HOTP 只是将其中的参数 C 变成了随机数,一般规定 HOTP 的散列函数使用 SHA2,即:基于 SHA-256 or SHA-512 [SHA2] 的散列函数做事件同步验证;

TOTP 只是将其中的参数 C 变成了由时间戳产生的数字:

C = (T - T0) / X; T 表示当前 Unix 时间戳:T0 一般取值为 0,也就是 1970 年 1 月 1 日。X 表示时间步数,也就是说多长时间产生一个动态密码,这个时间间隔就是时间步数 X,系统默认是 30 秒;

三、OTP认证原理

下图展示了OTP认证的过程:

Step1:在服务器端:,将用户账号与令牌种子建立关联。

Step2:当用户登录时,输入账号和动态令牌口令并将其提交至服务器,对比校验完成认证过程。

在实际的业务部署中,为了用户使用的便捷性,可以采用消息推送确认的方式,只需要用户的手机令牌处于运行状态,即可免去输入认证码的过程。

四、OTP的实现

根据以上的介绍,一个信息系统要集成OTP的认证方式,需要完成以下的工作:

1、开发手机令牌

2、开发认证的服务端,服务端需要完成令牌种子生成、令牌种子分发、动态口令生成等功能。

3、在OTP认证的服务端需要将业务系统的用户与分发的令牌建立关联,这样才能完成最终的登录验证。

上海安当技术有限公司致力于开发身份认证、数据加密类产品,依托集中化、跨平台的密钥管理系统,专注于为金融、政府、企业等客户提供更加安全,便捷的身份认证管理和数据加密解决方案。公司主要产品及服务简称为4S:身份认证服务平台(Authentication Service Platform),密钥管理平台(Key Safe Platform),硬件加密机(Hardware Security Module),数据加密集成服务(Data Security Integration)。

发布于 3 分钟前

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_61703951/article/details/121247117

智能推荐

大数据运维实战第十二课 Hadoop 分布式资源管理器 Yarn、MR 运行机制剖析_yarn rmadmin-程序员宅基地

文章浏览阅读776次,点赞2次,收藏4次。本课时主要讲解了分布式资源管理器 Yarn、MR 运行机制,以及 Yarn 相关的 shell 命令,对于 Yarn 资源运行机制的了解有助于对 Hadoop 集群进行调优和故障排查,这部分内容非常重要,要求我们能熟练掌握。......_yarn rmadmin

IDEA-Tomcat-源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示_idea源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。-程序员宅基地

文章浏览阅读6.4w次,点赞36次,收藏104次。IDEA-Tomcat-源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示1起因2经过3说白了1起因在学习springMVC的过程中,写了一个demo需要部署到本地Tomcat上来运行(直接使用IDEA配置本地tomcat,不用再手动发war包到tomcat目录下)。因为之前用SpringBoot项目比较多(集成了Tomcat,不需要额外部署设置;也不需要额外配好多xml),所以这部分可以说是从0学起,踩了好多坑。出现上面“源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源_idea源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

CAPL通用函数整理---记录_capl控件-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏45次。ltoa | 整型转字符串,第三个参数选择转换出来的进制类型,2:二进制,10:十进制,16:十六进制 | long z = 255;|_gcvt |浮点数转字符串 | char s1[15];|_atoi64 | 64字节的字符串转为整形 | int i64 = _atoi64("4564616546516");| diagSendResponse | 用于发送诊断响应给诊断仪,仅用于ECU仿真节点时|_capl控件

【数据结构/C语言版】【栈】链式存储_operandtype在数据结构-程序员宅基地

文章浏览阅读72次。链式#include<iostream>using namespace std;#define SElemType char#define Status inttypedef char OperandType;typedef struct SNode { SElemType data; SNode* next;}SNode, * LinkStack;Status InitStack(LinkStack& S){ S = (LinkStack)malloc(_operandtype在数据结构

力扣——快乐数(JavaScript)_js实现快乐数-程序员宅基地

文章浏览阅读45次。力扣编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true;不是,则返回 false。_js实现快乐数

[技美]反编竞品shader过程_unity shader反编译-程序员宅基地

文章浏览阅读5.9k次,点赞6次,收藏41次。Renderdoc下载地址:https://renderdoc.org/Renderdoc截帧教程:https://zhuanlan.zhihu.com/p/80704313GPA下载地址:https://software.intel.com/content/www/us/en/develop/tools/graphics-performance-analyzers.htmlGPA截帧教程:https://zhuanlan.zhihu.com/p/68741433竞品游戏模型破解流程:htt_unity shader反编译

随便推点

ka电器表示什么意思_电器上的KA是指的什么电流?-程序员宅基地

文章浏览阅读7.1k次。展开全部电器62616964757a686964616fe58685e5aeb931333431363039上的KA是指的电流继电器电流。电气中的符号“K”它首先是代表开关,然后是接触器,继电器,KA(电流继电器),KT(时间继电器),KF(频率继电器),KP(压力继电器),KS(信号继电器),KE(接地继电器),KM(接触器),KC(控制继电器,驱动器)。继电器具有控制系统(又称输入回路)和被控..._高温柜ka表示

3天掌握Flask开发项目系列博客之二,操作数据库_flask 数据库开发-程序员宅基地

文章浏览阅读1.9w次,点赞2次,收藏2次。flask 操作数据库,写入一条数据当 flask 基本环境运行起来之后,就要考虑数据入库相关内容了,本篇博客会将 flask 与 mysql 实现对接,完成一个入库操作。首先依旧是安装模块,flask 就是这点比较好,可扩展性特别强。pip install flask-sqlalchemy pymysql其中 flask-sqlalchemy 是一套ORM框架,在它的帮助下,可以让我们像操作数据对象一样操作数据库表数据。除了这些以外,你还要在电脑上安装 MySQL 数据库,最好在安装一个 na_flask 数据库开发

MongoDB实验——MongoDB shell操作-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏14次。MongoDB shell操作_mongodb shell

Kubernetes 中使用 SpringBoot Admin 监控&调试 SpringBoot 应用_springbootadmin kubernetes-程序员宅基地

文章浏览阅读1.9k次。文章目录一、SrpingBoot Admin 介绍二、SrpingCloud Kubernetes 介绍三、创建 SpringBoot Admin 应用Maven 引入相关依赖配置 application 文件启动类四、将 SpringBoot 应用构建 Docker 镜像执行 Maven 打包Dockerfile 文件编译 Docker 镜像五、部署应用到 Kubernetes准备应用 yam..._springbootadmin kubernetes

python常用字符串拼接方法_python字符串连接输出字符串-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏5次。在Python中,字符串是一种基本数据类型,用于表示一段文本。一种常见的字符串拼接方法是使用字符串格式化。使用格式化字符串语法,可以在字符串中包含占位符,并使用类似于。主要通过字符串中的花括号{},来识别替换字段,从而完成字符串的格式化。这些方法都可以用来拼接字符串,您可以根据自己的需要选择使用哪种方法。b、d、o、x 分别是二进制、十进制、八进制、十六进制。号后面带填充的字符,只能是一个字符,不指定则默认是用。来拼接字符串,这样可以比较快的拼接字符串。分别是居中、左对齐、右对齐,后面带宽度,_python字符串连接输出字符串

Python-Django毕业设计安卓基于Android的救灾互助APP(程序+LW)_android 开发 搭建app离线目录页面的帮助功能-程序员宅基地

文章浏览阅读114次。管理员通过登录进入基于Android的救灾互助APP后台可查看个人中心、求助者管理、捐赠者管理、求助类型管理、求助信息管理、爱心捐赠管理、自救知识管理、在线留言管理、交流论坛、系统管理等内容,如图5-15所示。求助信息,捐赠者可在求助信息页面查看标题名称、封面、求助类型、发布日期、求助账号、求助姓名、具体地址、审核状态、审核回复等内容,还可进行留言或捐赠等操作,如图5-5所示。_android 开发 搭建app离线目录页面的帮助功能

推荐文章

热门文章

相关标签