发明名称 一种基于时间和事件的一次性口令生成和验证方法
摘要 一种生成和验证一次性口令的方法,该方法可在一个口令中整合时间和事件因素,提高一次性口令的安全性,并降低服务器验证一次性口令时的运算开销。首先,向令牌和认证数据库写入初始信息;其次,令牌生成一次性口令,先计算共享密钥和计数器的摘要值,将摘要值截短后为一次性口令的后两位。将此摘要值和时间再进行一次摘要,将后一次摘要值截短后为一次性口令的前两位;最后,服务器验证一次性口令,先逐个计算共享密钥和窗口内的计数器的摘要值,截短后与收到一次性口令的后两位比较,确定计算器的值,否则返回,认证失败,然后逐个计算计数器对应的摘要值与窗口期内时间的摘要值,截短后与收到一次性口令的前四位比较,向用户返回认证结果。
申请公布号 CN102045349A 申请公布日期 2011.05.04
申请号 CN201010572216.7 申请日期 2010.12.03
申请人 北京航空航天大学 发明人 刘建伟;孙钰;郑志明;修春娣;毛剑;尚涛
分类号 H04L29/06(2006.01)I;H04L9/08(2006.01)I 主分类号 H04L29/06(2006.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 一种基于时间和事件的一次性口令生成和验证方法,其特征在于:它是依次按下述三个阶段进行,其步骤如下: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];其中i∈[0,n‑1];步骤9:服务器将n个OTP[4‑5]i与收到的OTP的后两位比较,如果存在I∈[0,n‑1],使OTP[4‑5]l与收到OTP的后两位相等,则将Counterl+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的前四位相等,则像客户端返回认证成功,否则向客户端返回认证失败。客户端根据返回的结果提示用户。
地址 100191 北京市海淀区学院路37号北航电子信息工程学院