CN102045349B - 一种基于时间和事件的一次性口令生成和验证方法 - Google Patents
一种基于时间和事件的一次性口令生成和验证方法 Download PDFInfo
- Publication number
- CN102045349B CN102045349B CN2010105722167A CN201010572216A CN102045349B CN 102045349 B CN102045349 B CN 102045349B CN 2010105722167 A CN2010105722167 A CN 2010105722167A CN 201010572216 A CN201010572216 A CN 201010572216A CN 102045349 B CN102045349 B CN 102045349B
- Authority
- CN
- China
- Prior art keywords
- time
- counter
- otp
- digest
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 238000012795 verification Methods 0.000 claims description 8
- 230000008676 import Effects 0.000 claims description 4
- 230000000875 corresponding effect Effects 0.000 description 4
- 238000012856 packing Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
一种生成和验证一次性口令的方法,该方法可在一个口令中整合时间和事件因素,提高一次性口令的安全性,并降低服务器验证一次性口令时的运算开销。首先,向令牌和认证数据库写入初始信息;其次,令牌生成一次性口令,先计算共享密钥和计数器的摘要值,将摘要值截短后为一次性口令的后两位。将此摘要值和时间再进行一次摘要,将后一次摘要值截短后为一次性口令的前两位;最后,服务器验证一次性口令,先逐个计算共享密钥和窗口内的计数器的摘要值,截短后与收到一次性口令的后两位比较,确定计算器的值,否则返回,认证失败,然后逐个计算计数器对应的摘要值与窗口期内时间的摘要值,截短后与收到一次性口令的前四位比较,向用户返回认证结果。
Description
(一)技术领域
本发明属于身份认证领域,特别涉及基于时间和事件的一次性口令生成和验证方法。
(二)背景技术
在传统的口令认证机制中,用户的口令多数以明文形式在网上传输并且固定不变。这使得攻击者可以通过窃听得到这些可重用的口令达到入侵系统的目的。一次性口令系统允许用户每次登录时使用不同的口令,很好地防止了口令重用攻击,增强了系统的安全性。
一次性口令认证(OTP)系统是为了防止黑客通过一次成功的口令窃取而永久地获得系统访问权而设计的一种认证技术.它规定用户每次登录时使不同的口令,限制了同一口令的生存周期。
OTP的主要思路是:在登录过程中加入不确定因素,使每次登录过程中传送的信息都不相同,以提高登录过程安全性。不确定因子选择与口令生成这些不确定因子选择方式大致有以下几种:
基于时间的方法以用户登录时间作为随机因素。这种方式对双方的时间准确度要求较高,一般采取以分钟为时间单位的折中办法。一般产品对时间误差的容忍可达±1分钟。这种方法的主要缺陷是在窗口期内,一个OTP可反复使用。如果系统容忍±1分钟,则在三分钟内,非法用户可通过截获的OTP登录。
基于事件的方法以计数器值为随机因素,生成单向的前后相关序列作为系统的挑战信息,以节省用户每次输入挑战信息的麻烦。但当用户的挑战序列与服务器产生偏差后,需要重新同步。这种方法的主要缺陷是无法防止非法用户记录令牌生成的一组OTP后,在任意时间都可以登录系统。
本发明涉及SHA-1摘要算法,Radius协议。
摘要算法是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。摘要算法主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的固定长度的编码,这些编码值叫做摘要值.也可以说,摘要算法就是找到一种数据内容和数据存放地址之间的映射关系。SHA-1就是一种将任意长度的消息压缩到160bit的消息摘要的函数。
RADIUS:Remote Authentication Dial In User Service,远程用户拨号认证系统由RFC2865,RFC2866定义,是目前应用最广泛的AAA协议。RADIUS是一种C/S结构的协议,它的客户端最初就是NAS(Net Access Server)服务器,现在任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。RADIUS协议认证机制灵活,可以采用PAP、CHAP或者Unix登录认证等多种方式。RADIUS是一种可扩展的协议,它进行的全部工作都是基于Attribute-Length-Value的向量进行的。RADIUS也支持厂商扩充厂家专有属性。
(三)发明内容
(1)发明目的
本发明涉及一种生成和验证一次性口令的新方法。一次性口令主要用于安全登录,本发明涉及的生成方法可在一个口令中加入时间和事件两个随机因素,提高一次性口令的安全性,并降低服务器验证一次性口令时的运算开销。
(2)技术方案
为了达到上述目的,本发明的技术方案如下:
用户通过令牌生成一次性口令,将生成的口令输入认证客户端,客户端将一次性口令发送至认证服务器,服务器验证收到的口令,回传验证结果至认证客户端。用户、令牌、认证客户端、认证服务器各部分之间的相互关系如附图1所示。本发明所述的一种基于时间和事件的一次性口令生成和验证方法,依次按下述三个阶段进行,其详细步骤详述如下:
1.初始化阶段:
系统管理员为用户生成共享密钥Key。管理员先将用户ID、共享密钥(key)、计数器(Counter)初始值写入认证服务器的数据库中,然后将共享密钥和计数器初始值写入令牌中并将令牌分发给对应的用户。为了提高系统的可用性,服务器将计数器的窗口设为为n,即服务器认为从数据库记录的Counter到Counter+(n-1)都是合法的计数器值。对时间的窗口设为m,即服务器认为在服务器本地时间time前后m分钟内的时间值都是合法的。
2.一次性口令生成阶段:
步骤1:令牌根据共享密钥Key和当前计数器值Counter,并计算出Digest1=h(Key||Counter),h()为一摘要函数,||为串接运算,即将Key和Counter的二进制值收尾相接,Digest1为步骤1计算出的摘要值。计算器Counter值加1。
步骤2:将Digest1截短,作为OTP的后两位,记为OTP[4-5]。
步骤3:令牌从板载的时间芯片中获得当前时间,以分钟为单位取整,记为Time,让后计算Digest2=h(Digest1||Time)。
步骤4:将Digest2截短,作为OTP的前四位,记为OTP[0-3]。
步骤5:令牌将步骤4生成的OTP[0-3]和步骤2生成的OTP[4-5]拼接,构成完整的六位OTP。认证客户端用户输入的将用户名和OTP安全的发送至服务器接受验证,并等待认证结果。
3.一次性口令验证阶段:
步骤6:服务器收到客户端传来的用户名和OTP后,根据用户名检索认证数据库得到此用户计数器的值Counter0。
步骤7:服务器认根据计数器窗口值计算Counter0到Countern-1=Counter0+(n-1),分别计算对应的摘要值n个摘要值:Digest1i=h(Key||Counteri),其中i∈[0,n-1],Counteri=Counter0+i,摘要算法与步骤1中的摘要算法相同。
步骤8:服务器将n个Digest1i逐个截短,截短算法与步骤2的截短算法相同,得到OTP[4-5]i,其中j∈[0,n-1]。
步骤9:服务器将n个OTP[4-5]i与收到的OTP的后两位比较,如果存在I∈[0,n-1],使OTP[4-5]l与收到OTP的后两位相等,则将Counter1+1写入数据库后进入步骤10,否则向客户端返回认证失败。若有多个I满足上述条件,则请求用户再次输入OTP值。从步骤1重新开始。
步骤10:设服务器时间为Times,服务器逐个计算Digest1l与时间窗口Times-m,Times-m+1,...,Times,Times+1,...Times+m,共计2m+1个时间值的摘要值Digest2j=h(Digest1||Timej),其中j∈[-m,m],Timej=Times+k。
步骤11:服务器将2m+1个Digest2j逐个截短,截短算法与步骤4的截短算法相同,得到OTP[0-3]i,其中j∈[-m,m]。
步骤12:服务器将2m+1个OTP[0-3]j与收到的OTP的前四位比较,如果存在」∈[-m,m],使OTP[0-3]」与收到OTP的前四位相等,则像客户端返回认证成功,否则向客户端返回认证失败。客户端根据返回的结果提示用户。
(3)优点及功效:
本发明涉及一种生成和验证一次性口令的新方法。
本发明涉及的生成方法可在一个口令中整合时间和事件因素,既能防止非法用户抄录下一组一次性口令在任意时间使用,又能防止在时间窗口期内非法用户使用同一口令登录,克服了单纯基于时间或事件的方法的缺点,提高一次性口令的安全性。
服务器为了提高系统的可用性,会对计数器和时间设置窗口,位于窗口内的值均是合法值,设计数器和时间的窗口长度分别为M和N,总共有M*N个可能的OTP值,对应2*M*N次摘要计算,计算2*M*N次摘要会给服务器带来巨大的运算开销。
本发明涉及的验证方法只需M+N次摘要运算,便可完成认证,将运算复杂度从O(n2)降低到O(n),明显降低了服务器运算开销,降低了认证延迟,调高了服务器的吞吐量。
本发明申请书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
(四)附图说明
图1本发明所述整体结构图
图2本发明所述初始化流程流程框图
图3本发明所述生成一次性口令的流程框图
图4本发明所述验证一次性口令的流程框图
图5本发明一次性口令生成和验证的流程框图
图中符号说明如下:
||:串接运算,即将||运算符的左右项首尾相接
Digestn:第n个摘要值
Countern:窗口期内的第n个计数器值
Timen:窗口期内的第n个时间值
OTP[n-m]_k:第k个一次性口令的第n到第m位
h():杂凑运算符,如h(a)指求a的摘要值。
(五)具体实施方式
由于本发明主要是阐述方法实现的思想,具体实现可根据具体的实施环境(网络环境,硬件类型等),采用最合适的实现方法,下面在介绍本发明的技术方案的具体实施方式时会采用一些具体的方法(如具体的杂凑函数,传送协议等),但实际的实现并不限于所述的方法。
本发明所述的一种一次性口令的生成、验证方法,如图1所示包括五个部分:用户,令牌,认证客户端,认证服务器,认证数据库。在向用户分发令牌前先进入初始化阶段,将初始信息写入令牌和认证数据库。之后用户通过令牌按照本发明所述的生成方法计算一次性口令,并将用户名和一次性口令输入认证客户端,客户端通过Radius协议将用户名和一次性口令打包发送至认证服务器,服务器根据用户名查询数据库,读取用户ID对应的计数器值,按照本发明所述的验证方法验证收到的口令,将验证结果按照radius协议打包验证结果,回传至认证客户端。下面将结合附图直观的说明基于时间和事件的一次性口令的生成和验证过程。
下面将结合附图直观的说明如何生成并验证本发明所述的一次性口令,附图2为初始化流程;附图3为令牌生成一次性口令的流程;附图4为服务器验证一次性口令的流程。
本发明一种基于时间和事件的一次性口令生成和验证方法,流程框图见图5所示,它依次按下述三个阶段进行,其具体实施过程如下。
1.初始化阶段:
系统管理员使用随机数发生器生成共享密钥Key。管理员先将用户ID、共享密钥(key)、计数器(Counter)初始值写入认证数据库中,然后将共享密钥和计数器初始值写入令牌中并将令牌分发给对应的用户。为了提高系统的可用性,服务器将计数器的窗口设为为5,即服务器认为从数据库记录的Counter到Counter+4,共5各值都是合法的计数器值。对时间的窗口设为1,即服务器认为在服务器本地时间time前后1分钟内的时间值都是合法的。
2.一次性口令生成阶段:
步骤1:令牌根据共享密钥Key和当前计数器值Counter,并计算出Digest1=h(Key||Counter),h()选为SHA-1摘要函数,||为串接运算,即将Key和Counter的二进制值收尾相接,Digest1为步骤1计算出的摘要值。计算器Counter值加1。
步骤2:将Digest1截短,作为OTP的后两位。因步骤1的摘要算法为SHA-1,则Digest1为160bit,取出第0、20、40、60、80、100、120、140、160bit供8个二进制数拼接成一个8bit的二进制数,转化为十六进制后,正好为两位,记为OTP[4-5]。
步骤3:令牌从板载的时间芯片中获得当前时间,以分钟为单位取整,记为Time,让后计算Digest2=h(Digest1||Time)。同样选择SHA-1作为摘要算法。
步骤4:将Digest2截短,作为OTP的前四位。因步骤3的摘要算法为SHA-1,则Digest2为160bit,取出第0、10、20、30、...、140、150、160bit供16个二进制数拼接成一个16bit的二进制数,转化为十六进制后,正好为四位,记为OTP[0-3]。
步骤5:将步骤4生成的OTP[0-3]和步骤2生成的OTP[4-5]拼接,构成完整的六位OTP。用户将用户名和OTP输入认证客户端,客户端通过radius协议将用户名和OTP打包发送至认证服务器接受验证,并等待认证结果。
3.一次性口令验证阶段:
步骤6:服务器收到客户端传来的用户名和OTP后,根据用户名检索认证数据库得到此用户计数器的值Counter0。
步骤7:服务器认根据计数器窗口值计算Counter0到Counter4=Counter0+4,分别计算窗口内的5个计数器值对应的摘要值5个摘要值:Digest1i=h(Key||Counteri),其中i∈[0,4],Counteri=Counter0+i,摘要算法与步骤1中的摘要算法相同,均为SHA-1。
步骤8:服务器将5个Digest1i逐个截短,截短算法与步骤2的截短算法相同,得到OTP[4-5]i,其中i∈[0,4]。
步骤9:服务器将5个OTP[4-5]i与收到的OTP的后两位比较,如果存在I∈[0,4],使OTP[4-5]l与收到OTP的后两位相等,则将Counterl+1写入数据库后进入步骤10,否则向客户端返回认证失败。若有多个I满足上述条件,则请求用户再次输入OTP值。从步骤1重新开始。
步骤10:设服务器时间为Times,服务器逐个计算Digest1l与时间窗口Times-1,Times,Times+1。共计3个时间值的摘要值Digest2j=h(Digest1||Timej),其中j∈[-1,1],Timej=Times+k。本步骤同样选择SHA-1为摘要算法。
步骤11:服务器将3个Digest2j逐个截短,截短算法与步骤4的截短算法相同,得到OTP[0-3]i,其中j∈[-1,1]。
步骤12:服务器将3个OTP[0-3]j与收到的OTP的前四位比较,如果存在」∈[-1,1],使OTP[0-3]」与收到OTP的前四位相等,则向客户端返回认证成功,否则向客户端返回认证失败。客户端根据返回的结果提示用户。
Claims (1)
1.一种基于时间和事件的一次性口令生成和验证方法,其特征在于:它是依次按下述三个阶段进行,其步骤如下:
(1).初始化阶段:
系统管理员为用户生成共享密钥Key,管理员先将用户ID、共享密钥、计数器初始值写入认证服务器的数据库中,然后将共享密钥和计数器初始值写入令牌中并将令牌分发给对应的用户;为了提高系统的可用性,服务器将计数器的窗口设为n,即服务器认为从数据库记录的Counter到Counter+(n-1)都是合法的计数器值;对时间的窗口设为m,即服务器认为在服务器本地时间time前后m分钟内的时间值都是合法的;
(2).一次性口令生成阶段:
步骤1:令牌根据共享密钥Key和当前计数器值Counter,并计算出Digest1=h(Key||Counter),h()为一摘要函数,||为串接运算,即将Key和Counter的二进制值首尾相接,Digest1为步骤1计算出的摘要值;计数器Counter值加1;
步骤2:将Digest1截短,作为OTP的后两位,记为OTP[4-5];
步骤3:令牌从板载的时间芯片中获得当前时间,以分钟为单位取整,记为Time,然后计算Digest2=h(Digest1||Time);
步骤4:将Digest2截短,作为OTP的前四位,记为OTP[0-3];
步骤5:令牌将步骤4生成的OTP[0-3]和步骤2生成的OTP[4-5]拼接,构成完整的六位OTP;认证客户端将用户输入的用户名和OTP安全的发送至服务器接 受验证,并等待认证结果;
(3).一次性口令验证阶段:
步骤6:服务器收到客户端传来的用户名和OTP后,根据用户名检索认证数据库得到此用户计数器的值Counter0;
步骤7:服务器根据计数器窗口值计算Counter0到Countern-1=Counter0+(n-1),分别计算对应的摘要值n个摘要值:Digest1i=h(Key||Counteri),其中i∈[0,n-1],Counteri=Counter0+i,摘要算法与步骤1中的摘要算法相同;
步骤8:服务器将n个Digest1i逐个截短,截短算法与步骤2的截短算法相同,得到OTP[4-5]i,其中i∈[0,n-1];
步骤9:服务器将n个OTP[4-5]i与收到的OTP的后两位比较,如果存在I∈[0,n-1],使OTP[4-5]I与收到OTP的后两位相等,则将CounterI+1写入数据库后进入步骤10,否则向客户端返回认证失败;若有多个I满足上述条件,则请求用户再次输入OTP值;从步骤1重新开始;
步骤10:设服务器时间为Times,服务器逐个计算Digest1I与时间窗口Times-m,Times-m+1,...,Times,Times+1,...Times+m,共计2m+1个时间值的摘要值Digest2j=h(Digest1I||Timej),其中j∈[-m,m],Timej=Times+k;
步骤11:服务器将2m+1个Digest2j逐个截短,截短算法与步骤4的截短算法相同,得到OTP[0-3]j,其中j∈[-m,m];
步骤12:服务器将2m+1个OTP[0-3]j与收到的OTP的前四位比较,如果存在J∈[-m,m],使OTP[0-3]J与收到OTP的前四位相等,则向客户端返回认证成功,否则向客户端返回认证失败;客户端根据返回的结果提示用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105722167A CN102045349B (zh) | 2010-12-03 | 2010-12-03 | 一种基于时间和事件的一次性口令生成和验证方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105722167A CN102045349B (zh) | 2010-12-03 | 2010-12-03 | 一种基于时间和事件的一次性口令生成和验证方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102045349A CN102045349A (zh) | 2011-05-04 |
CN102045349B true CN102045349B (zh) | 2012-08-08 |
Family
ID=43911120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105722167A Active CN102045349B (zh) | 2010-12-03 | 2010-12-03 | 一种基于时间和事件的一次性口令生成和验证方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102045349B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102364888B (zh) * | 2011-09-30 | 2015-01-07 | 深圳市文鼎创数据科技有限公司 | 动态令牌密钥因子的设置方法、系统、终端及验证服务器 |
CN106790138A (zh) * | 2016-12-28 | 2017-05-31 | 山东浪潮云服务信息科技有限公司 | 一种政务云应用用户登录双因子验证的方法 |
CN108259419B (zh) * | 2016-12-29 | 2021-05-11 | 中国电信股份有限公司 | 一种基于时间窗口的认证方法、装置以及认证系统 |
CN106790274A (zh) * | 2017-02-20 | 2017-05-31 | 中国科学院信息工程研究所 | 一种一次性密码登录无线局域网的方法 |
CN110474766B (zh) * | 2019-07-30 | 2022-06-17 | 河南兄弟科技发展有限公司 | 随机密码生成方法、装置以及身份验证方法 |
CN112055008B (zh) * | 2020-08-31 | 2022-10-14 | 广州市百果园信息技术有限公司 | 一种身份验证方法、装置、计算机设备和存储介质 |
CN114584328B (zh) * | 2022-05-09 | 2022-08-02 | 武汉四通信息服务有限公司 | Api接口的访问方法、计算机设备及计算机存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006095875A1 (ja) * | 2005-03-10 | 2006-09-14 | Nippon Telegraph And Telephone Corporation | ネットワークシステム、ストレージ装置へのアクセス制御方法、管理サーバ、ストレージ装置、ログイン制御方法、ネットワークブートシステムおよび単位記憶ユニットのアクセス方法 |
CN101582762B (zh) * | 2009-04-02 | 2011-07-13 | 北京飞天诚信科技有限公司 | 基于动态口令进行身份认证的方法和系统 |
-
2010
- 2010-12-03 CN CN2010105722167A patent/CN102045349B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN102045349A (zh) | 2011-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102045349B (zh) | 一种基于时间和事件的一次性口令生成和验证方法 | |
CN109101572B (zh) | 基于区块链的存证方法、装置及服务器、存储介质 | |
CN109981689B (zh) | 物联网场景下跨域逻辑强隔离与安全访问控制方法及装置 | |
WO2020258831A1 (zh) | 用于区块链系统中的主节点切换处理的方法及装置 | |
CN111294352B (zh) | 云端与边缘节点之间的数据安全认证方法 | |
EP2959631B1 (en) | Verification system and method with extra security for lower-entropy input records | |
JP5650348B2 (ja) | 移動中のデータをセキュア化するためのシステムおよび方法 | |
WO2019051429A1 (en) | SYSTEMS AND METHODS FOR PROVIDING IMMUABLE RECORDINGS | |
US10878108B1 (en) | Delegated private set intersection, and applications thereof | |
EP4191498A1 (en) | Data communication method and apparatus, computer device, and storage medium | |
CN101344903A (zh) | 基于tpm的多实例动态远程证明方法 | |
Fernando et al. | SciBlock: A blockchain-based tamper-proof non-repudiable storage for scientific workflow provenance | |
CN112529573A (zh) | 一种组合式区块链门限签名方法及系统 | |
CN101789939B (zh) | 一种有效的可信OpenSSH的实现方法 | |
CN111065097A (zh) | 移动互联网中基于共享密钥的通道保护方法及系统 | |
Mishra et al. | MPoWS: Merged proof of ownership and storage for block level deduplication in cloud storage | |
Ren et al. | Prifr: Privacy-preserving large-scale file retrieval system via blockchain for encrypted cloud data | |
CN112926983A (zh) | 一种基于区块链的存证交易加密系统及方法 | |
US11146594B2 (en) | Security incident blockchain | |
Kabir et al. | A blockchain-based approach to secure cloud connected IoT devices | |
Kumar et al. | Hash based approach for providing privacy and integrity in cloud data storage using digital signatures | |
CN113849556A (zh) | 基于区块链分布式数据库的共享机制 | |
Xi | An improved OTP authentication system and its application in mobile commerce | |
Al-Ameri et al. | A Blockchain-Based Secure Mutual Authentication System for E-Government Services | |
Su et al. | A Cluster-based User Authentication Protocol for Internet of Medical Things Deployment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |