一种基于对称密钥池的HTTP-Digest类AKA身份认证系统和方法与流程

文档序号:15593879发布日期:2018-10-02 19:16阅读:538来源:国知局

本发明涉及安全通信技术领域,具体涉及一种端到端的鉴权和密钥协商的算法,即通信双方如何进行双向的身份认证和从对称密钥池中取出相同密钥的机制。



背景技术:

鉴权,即身份认证是实现信息安全的基本技术,系统通过审查用户的身份来确认该用户是否具有对某种资源的访问和使用权限,同样也可以进行系统与系统间的身份认证。

移动通信的安全问题正面临着严峻的挑战,也越来越多的受到关注。作为相对独立的安全体系,用户端和服务器之间的通信必须时刻处于安全保护之中,所有的用户端在使用网络核心控制平台的服务之前都必须进行鉴权。如何保证用户端安全的接入网络,完成与服务器之间的双向身份认证有着十分重要的现实意义。随着量子计算机的发展,经典非对称加密算法将不再安全,无论是认证还是加解密领域,对称密钥算法将大行其道。比如目前在移动通信领域比较常用的基于对称密钥算法的服务器法之一的aka机制。基于认证和密钥协商(aka)的接入认证机制是由ietf制定,被3gpp采用并广泛应用的鉴权机制。aka机制在身份认证的同时并进行了密钥的协商,为后续通信的加密提供了密钥保障。

作为安全性升级的方案,对称密钥池的方式将是一种保证密钥安全的重要方案乃至主流方案。同时可以对对称密钥池中的全部或部分内容进行加密存储,加密密钥可以存储到对称密钥池宿主的安全隔离装置中。后续对对称密钥池进行密钥操作时,需要由安全隔离装置解密后使用。有关对称密钥池可参见公开号为cn105337726a,发明名称为“基于量子密码的端对端手持设备加密方法及系统”的发明专利文献,公开了一种基于量子密码的端对端手持设备加密方法,其量子通信的两台密钥分发设备之间,通过qkd形成了一对对称密钥池,用于qkd双方的用户进行量子加密通信。

又例如公开号为cn106452740a,发明名称为“一种量子通信服务站、量子密钥管理装置以及密钥配置网络和方法”的发明专利文献,公开了一种量子通信服务站、量子密钥管理装置,两者之间共享同样的量子随机数密钥数据块,该数据块对也可以理解为一对对称密钥池,用于双方的用户进行量子随机数密钥的加密通信。

公开号为cn106357649a,发明名称为“用户身份认证系统和方法”的专利文献,公开了一种对称密钥体制的身份认证方法。该发明基于移动量子密钥存储设备,采用量子真随机数发生器产生的真随机数作为密钥种子,在身份认证时有限多次使用,兼顾了密钥生成量和安全性问题。并且包含了关于量子通信的异地身份认证技术。

现有技术存在的问题:

1.公开号为cn106357649a的专利文献虽然使用了量子密钥卡作为对称密钥池,但是其身份认证是单向的,存在较大的安全隐患。并且该发明中使用的密钥是不区分通信模式的,过于单一,在密钥泄露的情况下,会造成所有的消息都会被破解。

2.现有的使用aka机制的httpdigest身份认证方法使用的密钥及协商的密钥都非常有限,安全性能不高。用于密钥协商所使用的随机数rand在通信中是暴露的,在一定程度上会对加密通信的安全产生威胁。



技术实现要素:

本发明提供一种基于对称密钥池实现的身份认证系统和方法,保证了密钥协商所使用的密钥种子不外泄,且密钥池足够庞大,难以预测,更加保证了密钥生成的安全性。

一种基于对称密钥池的http-digest类aka身份认证方法,实施在用户端,包括:

向服务器发起注册请求,且该注册请求的nonce字段中带有第一随机数;

接收来自服务器的401unauthorized提问消息,该401unauthorized提问消息是服务器响应于所述注册请求而生成,所述401unauthorized提问消息的nonce字段中包括消息认证码、amf以及用于生成协商密钥的第二随机数,且该第二随机数采用密文形式,用于加密第二随机数的匿名密钥是由服务器利用所述第一随机数生成;

利用第一随机数以及消息认证码依次对所述401unauthorized提问消息进行验证,且在验证通过后生成应答消息;将所述应答消息发送至服务器,以及接收来自服务器对所述应答消息的注册结果,所述注册结果为200ok消息或403forbidden消息。

本发明基于认证和密钥协商(aka)的接入认证机制基于“挑战/应答”模式实现对服务器与用户端的相互身份认证和会话密钥的分发,由携带aka参数的sip消息在用户端和服务器之间进行交互,按照aka机制进行传输和协商,从而实现用户端和服务器之间的双向认证,并协商出后续通信所需的安全性密钥对。

基于对称密钥池的设计的意义在于保证了密钥协商所使用的密钥种子不外泄,且密钥池足够庞大,难以预测,更加保证了密钥生成的安全性。

注册过程既包括相互认证,也包括了对后续加密通信所采用密钥的协商,即所述协商密钥,协商密钥包括消息加密密钥ck(即保密性密钥)和消息认证密钥ik(即完整性密钥)。

所述第一随机数以及第二随机数优选为量子真随机数发生器生成的量子随机数,既可以预先生成并存储以供调用,也可以是在认证过程中依照需要而生成。

用户端和服务器既可以自身设置有量子真随机数发生器,可以采用匹配量子密钥卡或其他外置的硬件形式,或通过向量子网络服务站请求获得。

相对于现有的单向认证方式,本发明中实现了注册对象双方的相互认证,鉴权密钥的可更新进一步提高了认证过程中鉴权密钥的安全性,同时可以在注册过程中进行鉴权密钥的更新,减少了不必要的通信步骤,降低了设备的通信压力。

本发明中还根据aka通信密钥的限制进行了改进,从原来根据随机数计算密钥的方式改成了取密钥种子计算密钥的方式,并且密钥种子不对外暴露,并且原aka机制中用于生成保密性密钥和完整性密钥的随机数在401unauthorized提问消息中被加密了,降低了密钥被破解的风险。

本发明采用第一随机数代替经典aka的注册机制中的sqn,简化了繁琐的消息新鲜度校验步骤。同时避免了sqn重同步的一个漏洞,当遇到重放提问时,sqn会不断进行重同步,这样会加大通信负荷。除此之外,经典aka服务器与服务器之间是通过经典网络传输消息的,在当前网络环境下,并不是安全的,而本发明中采用的是qkd网络保证了在广域网络中通信的安全。

相应的,本发明还提供一种基于对称密钥池的http-digest类aka身份认证方法,实施在服务器,包括:

接收来自用户端的注册请求,且该注册请求的nonce字段中带有第一随机数;

响应于所述注册请求生成401unauthorized提问消息并发送至用户端,所述401unauthorized提问消息的nonce字段中包括消息认证码、amf以及用于生成协商密钥的第二随机数,且该第二随机数采用密文形式,用于加密第二随机数的匿名密钥是利用所述第一随机数生成;

接收来自用户端的应答消息,该应答消息为用户端对所述401unauthorized提问消息进行验证,且在验证通过后生成;

对所述应答消息进行认证得到注册结果,再将注册结果发送给用户端,所述注册结果为200ok消息或403forbidden消息。

相应的,本发明还提供一种基于对称密钥池的http-digest类aka身份认证方法,实施在用户端与服务器之间,包括:

用户端向服务器发起注册请求,且该注册请求的nonce字段中带有第一随机数;

服务器响应于所述注册请求生成401unauthorized提问消息并发送至用户端,所述401unauthorized提问消息的nonce字段中包括消息认证码、amf以及用于生成协商密钥的第二随机数,且该第二随机数采用密文形式,用于加密第二随机数的匿名密钥是利用所述第一随机数生成;

用户端接收来自服务器的401unauthorized提问消息,利用第一随机数以及消息认证码依次对所述401unauthorized提问消息进行验证,验证通过后生成应答消息发送至服务器;

服务器接收来自用户端的应答消息并进行认证得到注册结果,再将注册结果发送给用户端,所述注册结果为200ok消息或403forbidden消息;

用户端接收来自服务器的注册结果。

相应的,本发明还提供一种基于对称密钥池的http-digest类aka身份认证系统,包括用户端,在用户端设置有处理器以及存储器,存储器中配置有如下指令模块供处理器调用运行:

第一模块,用于向服务器发起注册请求,且该注册请求的nonce字段中带有第一随机数;

第二模块,用于接收来自服务器的401unauthorized提问消息,该401unauthorized提问消息是服务器响应于所述注册请求而生成,所述401unauthorized提问消息的nonce字段中包括消息认证码、amf以及用于生成协商密钥的第二随机数,且该第二随机数采用密文形式,用于加密第二随机数的匿名密钥是由服务器利用所述第一随机数生成;

第三模块,用于利用第一随机数以及消息认证码依次对所述401unauthorized提问消息进行验证,且在验证通过后生成应答消息;

第四模块,用于将所述应答消息发送至服务器,以及接收来自服务器对所述应答消息的注册结果,所述注册结果为200ok消息或403forbidden消息。

相应的,本发明还提供一种基于对称密钥池的http-digest类aka身份认证系统,包括服务器,在服务器设置有处理器以及存储器,存储器中配置有如下指令模块供处理器调用运行:

第五模块,用于接收来自用户端的注册请求,且该注册请求的nonce字段中带有第一随机数;

第六模块,用于响应于所述注册请求生成401unauthorized提问消息并发送至用户端,所述401unauthorized提问消息的nonce字段中包括消息认证码、amf以及用于生成协商密钥的第二随机数,且该第二随机数采用密文形式,用于加密第二随机数的匿名密钥是利用所述第一随机数生成;

第七模块,用于接收来自用户端的应答消息,该应答消息为用户端对所述401unauthorized提问消息进行验证,且在验证通过后生成;

第八模块,用于对所述应答消息进行认证得到注册结果,再将注册结果发送给用户端,所述注册结果为200ok消息或403forbidden消息。

本发明还提供一种基于对称密钥池的http-digest类aka身份认证系统,包括本发明所述的用户端和服务器。

作为优选,参与身份认证的双方配置有对称密钥池以及相应的鉴权密钥,通过所述第二随机数以及鉴权密钥对密钥池内指定的密钥种子进行运算,得到所述协商密钥;且所述鉴权密钥按预定的生存周期进行更新。

鉴权密钥的更新时机为:

用户端在发起注册请求前判定鉴权密钥是否处在生存周期内,若超出生存周期则在发起注册请求时一并发起鉴权密钥更新请求;或

参与身份认证的双方在使用鉴权密钥时,判定鉴权密钥是否处在生存周期内,若超出生存周期则发起鉴权密钥更新请求;或

参与身份认证的双方定期检查鉴权密钥是否处在生存周期内,若超出生存周期则发起鉴权密钥更新请求。

在鉴权密钥的更新时,发起鉴权密钥更新请求的一方为主动方,另一方为被动方,至少在被动方中,存储有上一次使用的鉴权密钥,以及当前使用的鉴权密钥,更新时依次向前覆盖。

这样可以在处理注册异常时,调用上一次使用的鉴权密钥,以恢复注册流程。

在本发明中可以在注册过程中进行鉴权密钥的更新,减少了不必要的通信步骤,降低了设备的通信压力。

所述注册请求带有用户端以及服务器的身份识别码以及所述第一随机数;服务器响应于所述注册请求生成401unauthorized提问消息前,先基于身份识别码进行匹配识别以及定位对称密钥池,而后生成包含有所述消息认证码、amf以及第二随机数的认证向量。

amf在现有技术的基础上增加了时间戳、后续加密通信时采用的消息加密密钥以及消息认证密钥的生存周期、后续加密通信时消息加密算法id和消息认证算法id。

本发明在401unauthorized提问消息中用于生成协商密钥的第二随机数采用密文形式,即通过匿名密钥加密。

所述匿名密钥是服务器通过鉴权密钥和第一随机数通过运算得到。

所述401unauthorized提问消息中包含有所述第一随机数以及网络认证令牌,所述网络认证令牌中包含amf、消息认证码、以及通过匿名密钥加密的所述第二随机数;

用户端接收来自服务器的401unauthorized提问消息后,通过对比401unauthorized提问消息中的第一随机数以及本地的第一随机数,对401unauthorized提问消息进行第一次验证;

用户端还通过对比401unauthorized提问消息中的消息认证码以及本地生成的消息认证码对401unauthorized提问消息进行第二次验证。

作为优选,所述应答消息的response字段中包含认证应答,该认证应答为用户端利用第二随机数以及当前使用的鉴权密钥计算得到;

服务器针对所述认证应答与在本地生成的相应的认证应答进行对比,得到注册结果,再将注册结果发送给用户端。

作为优选,所述认证应答中还包括协商密钥。

由于用户端和服务器在交互注册请求和401unauthorized提问消息后,已经完成了协商密钥生成方式以及用法,为了进一步提高安全性和复杂程度,用户端生成应答消息时可利用协商密钥参与认证应答的生成。

本发明采用双向认证,进一步提高了安全性,并利用第一随机数代替经典aka的注册机制中的sqn,简化了繁琐的消息校验步骤,原aka机制中用于生成保密性密钥和完整性密钥的随机数在401unauthorized提问消息中采用密文方式,降低了密钥被破解的风险。

附图说明

图1a为用户端的部分数据结构示意图;

图1b为服务器的部分数据结构示意图;

图2为实施例1的流程示意图;

图3为实施例2的流程示意图;

具体实施方式

系统说明

本实施例的身份认证的过程是在用户端和服务器之间实现的。本发明中各个参数的符号只是为了方便说明,并不对本发明构成任何特殊限制。

如图1a和图1b所示,用户端和服务器的身份识别码分别为id=ida和id=idb,同时记录了对方的身份识别码pid,即用户端的pid含有idb;服务器的pid含有ida。用户端和服务器持有相对应的密钥池、各类算法和鉴权密钥数组。鉴权密钥组长度为2,第一个为前一个鉴权密钥,第二个为现使用的鉴权密钥。每个密钥的符号表达详见图1a和图1b。除此之外,用户端和服务器中均有相应的算法来支撑整个注册过程。本实施例中,用户端和服务器的安全隔离装置中分别存储有相同的密钥池。本实施例中注册后最终协商的密钥为消息加密密钥ck(即保密性密钥)和消息认证密钥ik(即完整性密钥)。

实施例1

流程说明

本实施例的注册流程示意图请参考图2,包括:

步骤1:用户端发起注册请求

用户端根据需要,向服务器发起注册请求,主要的头域和字段的内容如下:

registersip:home.mobile.bizsip/2.0

authenticate:digest

username="jon.dough@home.mobile.biz",

realm="home.mobile.biz",

nonce="",

uri="sip:home.mobile.biz",

response="",

……

“response”和“nonce”域的值在初始注册请求消息中都设置为空。此请求中含有用户端的身份识别码ida和服务器的身份识别码idb以及用户端生成的一个随机数rand1,有本次消息识别符的作用。

随机数rand1优选为量子真随机数发生器生成的量子随机数,以提高安全性,既可以预先生成并存储以供调用,也可以是依照发起注册请求的需要而生成。

步骤2:服务器接收确认请求,生成提问消息

2.1、服务器识别消息,找到对应的鉴权密钥组:服务器接收到来自用户端的注册请求后,解析请求消息中的用户端的身份识别符ida’、服务器的身份识别符idb’和随机数rand1。服务器验证idb’与己方身份识别码进行对比,相匹配后根据ida’找到相应的鉴权密钥组,取出第二个鉴权密钥kb2(即现使用的鉴权密钥)。

2.2、服务器生成认证向量:服务器通过量子真随机数发生器生成一个不可预测的随机数rand2。随机数rand2优选为采用量子真随机数发生器生成的量子随机数,以提高安全性。随机数rand2既可以预先生成并存储以供调用,也可以是依照生成认证向量的需要而生成。

服务器还将产生一个参数amf,该amf在现有aka技术中的amf基础上,增加了后续数据加密使用的消息加密算法id和消息认证算法id,以及时间戳和ck和ik的生存周期。

设用作保密性密钥ck的密钥种子(即随机数)为n1,其指针地址为pc,长度为lc;

用作完整性密钥ik的密钥种子(即随机数)为n2,指针地址为pi,长度为li。

n1和n2分别取自对应用户端的密钥池。设密钥池总量为pa。ck和ik可以直接为n1和n2,也可以通过指定的密钥生成算法分别计算n1和n2得到。

为表达简洁,在以下公式中将kb2简化成k。具体的计算公式如下(⊕表示按位异或,||表示串接):

计算消息认证码(mac):mac=f1(k,rand1||rand2||amf);

计算期望的认证应答(xres):xres=f2(k,rand2);

计算ck的指针地址(pc):pc=f3(k,rand2,pa);

计算ik的指针地址(pi):pi=f4(k,rand2,pa);

计算匿名密钥(ak):ak=f5(k,rand1);

网络认证令牌(autn):autn=rand2⊕ak||amf||mac;

认证向量(av):av=rand1||xres||ck||ik||autn;

(注:算法f1和f2为消息认证算法,f3和f4为特定的指针地址算法,f5为指定的匿名密钥生成算法。)

本发明中生成认证向量时可以一次产生n个,n的大小视情况而定,例如依照用户端的数量等。

2.3、服务器发送提问消息:服务器将认证向量av中的xres、ck和ik剔除并保留下来,将剔除了xres、ck和ik的认证向量av包含在401unauthorized提问消息的www-authenticate头域中向用户端提问。在nonce字段中填入认证向量av中的rand1和autn参数串接后进行base64编码后的字符串,在algorithm字段放入值“akav1-md5”,表示使用的是3gppaka认证机制。

401应答主要的头域和字段的内容如下:

sip/2.0401unauthorized

www-authenticate:digest

realm="roamingusers@mobile.biz",

nonce="cjpk9mrqnut25erkajm09utl9nm09utl9nmz5ox25pzz==",

algorithm=akav1-md5,

……

步骤3:包含认证应答res的register

3.1、用户端解析服务器的提问消息:用户端接收到来自服务器的401应答消息后,从“nonce”中解析出rand1和autn。为便于区分用户端本地的rand1,从提问消息中解析出的rand1以下记为rand1’。

接下来用户端将rand1’和rand1进行比较,如果相同,则进行下一步;如果不相同,说明此消息并非本次业务的提问消息。

用户端将autn拆分成rand2⊕ak、amf和mac。用户端从鉴权密钥组中取出ka2,和rand1’作为参数输入,利用与f5对应的f5’算法计算得到ak。用户端将rand2⊕ak和ak异或得到rand2。

3.2、用户端验证提问消息:用户端将rand1’、rand2和amf串接在一起,用密钥ka2和与f1对应的f1’算法计算得到xmac。将xmac和解析消息得到的mac进行比较,如果不相同,则服务器身份认证失败,用户端将向服务器发送不携带response字段的register消息,以此通知网络提问无效。失败原因可能是消息被篡改或者服务器为非法身份等。如果一致,那么用户端认证服务器身份成功。

3.3、用户端生成应答消息:在mac通过校验后,用户端利用rand2和ka2按照上述同样的方法计算得到保密性密钥ck和完整性密钥ik的指针地址pc’和pi’。根据指针地址和长度从对称密钥池中取出相应随机数n1’和n2’,再将n1’和n2’通过密钥生成算法和密钥ka2计算得到保密性密钥ck和完整性密钥ik。

以此密钥生成的方法可以生成密钥ck和ik所需的参数均不对外暴露,提高了ck和ik的安全性。ck和ik的生存周期在amf中得到以及下面数据的加密的算法也从amf中解析。

用户端将rand2用ka2和消息认证算法进行计算得到认证应答res。计算方式与2.2中的认证应答(xres)同理。

3.4、用户端返回应答消息:用户端在发往服务器的第二个register请求中返回挑战应答res,进行base64编码后的字符串放入response字段中。主要的头域和字段的内容如下:

registersip:home.mobile.bizsip/2.0

authorization:digest

username="jon.dough@mobile.biz",

realm="roamingusers@mobile.biz",

nonce="cjpk9mrqnut25erkajm09utl9nm09utl9nmz5ox25pzz==",

uri="sip:home.mobile.biz",

response="6629fae49393a05397450978507c4ef1",

……

步骤4:身份认证完成

4.1、服务器认证应答消息:服务器接收到用户端的应答消息后,对应答消息进行解析并从认证头域authorization中取出相应的参数:如果authorization头域中的response字段为空,再检查重同步参数字段auts是否为空:如果auts参数不为空,说明检查出了rand1认证失败,服务器使用这个重同步参数auts重新请求认证数据,当下载认证数据成功后,再用新的认证向量重新提问。如果auts参数也为空,说明提问无效,服务器将选择下一个认证向量,重新用401消息进行提问。若用完了所有的认证向量,仍然无法完成认证,则认为本次认证失败,放弃本次认证过程,并发送403forbidden消息通知用户端。

如果authorization头域中的response字段不为空,则取出其中的认证应答res参数,并将其和保留的认证应答xres相比较。如果一致,则服务器就认为用户端回答提问正确,认证用户端身份成功,同时向用户端发送200ok消息;如果不一致,就认为用户端回答提问错误,认证用户端身份失败,那么服务器应该发送403forbidden应答消息给用户端,通知认证失败,并且放弃本次认证过程。

4.2、服务器返回注册结果:服务器将注册结果返回到用户端,如果是成功的,则保留本次注册生成的ck和ik;如果是失败的,则清除本次注册生成的ck和ik。

步骤5:用户端接收验证注册结果

用户端接收验证注册结果:用户端接收到服务器的返回消息来判断本次身份认证是否成功。如果失败,则进行重新发起注册请求;如果成功,则接下来的消息传输均可进行加解密。

鉴权密钥的更新

鉴权密钥的更新方法与上述服务器法中ck和ik的生成方法相似。即:使用f3或f4来生成鉴权密钥的地址,进而得到鉴权密钥。

在第一次时,默认采用密钥池开头的随机数作为鉴权密钥。进行鉴权密钥更新时,将现使用的鉴权密钥覆盖前一次的鉴权密钥组,将同步的鉴权密钥组覆盖现使用的密钥组。

服务器更新是在步骤4中认证用户端身份成功后进行;

用户端更新是在步骤5中接收到服务器的返回消息并判断本次身份认证成功后进行。

注册与鉴权密钥更新组合

当鉴权密钥的更新需要与注册绑定时,用户端即用户端可以在步骤1的注册请求中声明,例如在注册请求中设置识别符。鉴权密钥更新的方式请参考本实施例的“鉴权密钥的更新”。

注册异常的处理

主动服务器与被动服务器之间的收发的消息可能是注册请求、401unauthorized提问消息、应答消息或者注册结果。

结合图2,注册请求、401unauthorized提问消息、应答消息、注册结果分别简称消息①~消息④。

如果消息传输过程中发生用户端和服务器之间轻度丢包,通过各自的信令重发机制,一般情况下不影响消息的收发。例如用户端向服务器发送注册请求后收不到来自服务器的提问消息,会重新生成唯一识别符打包请求消息并发送给服务器,直到达到请求的最大发送次数;服务器发送提问消息后收不到应答消息,同样会重新发送到最大发送次数。

如果注册过程中发生用户端和服务器之间重度丢包甚至断网的情况,则注册过程终止,等下应用层下一次注册的请求。各类异常情况的处理如下:

情况1、如果过程只进行注册和密钥协商,那么无论消息①、②、③、④任何一个丢失都不会对密钥池及鉴权密钥组造成影响。唯一的影响就是注册失败以及密钥协商失败,可根据应用层的请求重新进行注册。

情况2、如果是鉴权密钥的更新,消息①、②的丢包对鉴权密钥组的同步不影响。当消息③、④丢包后,用户端无法收到来自服务器的返回消息,则说明本次鉴权密钥的更新失败。用户端会再次进行发起请求,并声明上一次鉴权密钥更新失败。服务器收到更新请求后,根据上一次更新是否收到消息③来判定使用鉴权密钥组中的第一个或第二个密钥来计算认证向量。

如果上一次更新收到消息③,则意味着服务器已经完成更新,但用户端没有更新,则服务器使用鉴权密钥组中的第一个密钥来计算认证向量。

如果上一次更新没有收到消息③,则意味着服务器和用户端都没有更新,则服务器使用鉴权密钥组中的第二个密钥来计算认证向量。

情况3、如果是注册和鉴权密钥更新组合使用时,处理方式可以参考情况2中的异常处理。

实施例2

流程说明

本实施例的注册流程示意图请参考图3。与实施例1的区别点在于认证应答的生成方式。包括:

步骤1:用户端发起注册请求

用户端根据需要,向服务器发起注册请求,主要的头域和字段的内容如下:

registersip:home.mobile.bizsip/2.0

authenticate:digest

username="jon.dough@home.mobile.biz",

realm="home.mobile.biz",

nonce="",

uri="sip:home.mobile.biz",

response="",

……

“response”和“nonce”域的值在初始注册请求消息中都设置为空。此请求中含有用户端的身份识别码ida和服务器的身份识别码idb以及用户端生成的一个随机数rand1,有本次消息识别符的作用。

随机数rand1优选为量子真随机数发生器生成的量子随机数,以提高安全性,既可以预先生成并存储以供调用,也可以是依照发起注册请求的需要而生成。

步骤2:服务器接收确认请求,生成提问消息

2.1、服务器识别消息,找到对应的鉴权密钥组:服务器接收到来自用户端的注册请求后,解析请求消息中的注册请求主动方的身份识别符ida’、注册请求被动方的身份识别符idb’和随机数rand1。服务器验证idb’与己方身份识别码进行对比,相匹配后根据ida’找到相应的鉴权密钥组,取出第二个鉴权密钥kb2(即现使用的鉴权密钥)。

2.2、服务器生成认证向量:服务器通过量子真随机数发生器生成一个不可预测的随机数rand2。随机数rand2优选为采用量子真随机数发生器生成的量子随机数,以提高安全性。随机数rand2既可以预先生成并存储以供调用,也可以是依照生成认证向量的需要而生成。

服务器还将产生一个参数amf,该amf在现有aka技术中的amf基础上,增加了后续数据加密使用的消息加密算法id和消息认证算法id,以及时间戳和ck和ik的生存周期。

设用作保密性密钥ck的密钥种子(即随机数)为n1,其指针地址为pc,长度为lc;

用作完整性密钥ik的密钥种子(即随机数)为n2,指针地址为pi,长度为li。

n1和n2分别取自对应用户端的密钥池。设密钥池总量为pa。ck和ik可以直接为n1和n2,也可以通过指定的密钥生成算法分别计算n1和n2得到。

为表达简洁,在以下公式中将kb2简化成k。具体的计算公式如下(⊕表示按位异或,||表示串接):

计算消息认证码(mac):mac=f1(k,rand1||rand2||amf);

计算期望的认证应答(xres):xres=f2(k,rand2);

计算ck的指针地址(pc):pc=f3(k,rand2,pa);

计算ik的指针地址(pi):pi=f4(k,rand2,pa);

计算匿名密钥(ak):ak=f5(k,rand1);

网络认证令牌(autn):autn=rand2⊕ak||amf||mac;

认证向量(av):av=rand1||xres||ck||ik||autn;

(注:算法f1和f2为消息认证算法,f3和f4为特定的指针地址算法,f5为指定的匿名密钥生成算法。)

本发明中生成认证向量时可以一次产生n个,n的大小视情况而定,例如依照用户端的数量等。

2.3、服务器发送提问消息:服务器将认证向量av中的xres、ck和ik剔除并保留下来,使用prf计算xpassword=prf(xres||ik||ck,“http-digest-akav2-password”)。prf为伪随机函数,用来构造akav2的密码和相关的会话密钥ik’和ck’。

本发明中,prf使用kd(secret,data)的格式出现,指示一个加密的digest算法(kd)使用密钥(“secret”)对数据(“data”)执行。如果算法是akav2-md5,那么prf就是hmac_md5。将剔除了xres、ck和ik的认证向量av包含在401unauthorized提问消息的www-authenticate头域中向用户端提问。在nonce字段中填入认证向量av中的rand1和autn参数串接后进行base64编码后的字符串,在algorithm字段放入值“akav2-md5”,表示使用的是3gppaka认证机制。401应答主要的头域和字段的内容如下:

sip/2.0401unauthorized

www-authenticate:digest

realm="roamingusers@mobile.biz",

nonce="cjpk9mrqnut25erkajm09utl9nm09utl9nmz5ox25pzz==",

algorithm=akav2-md5,

……

步骤3:包含认证应答password的register

3.1、用户端解析服务器的提问消息:用户端接收到来自服务器的提问消息后,从“nonce”中解析出rand1和autn。为便于区分用户端本地的rand1,从提问消息中解析出的rand1以下记为rand1’。

接下来用户端将rand1’和rand1进行比较,如果相同,则进行下一步;如果不相同,说明此消息并非本次业务的提问消息。

用户端将autn拆分成rand2⊕ak、amf和mac。用户端从鉴权密钥组中取出ka2,和rand1’作为参数输入,利用与f5对应的f5’算法计算得到ak。用户端将rand2⊕ak和ak异或得到rand2。

3.2、用户端验证提问消息:用户端将rand1’、rand2和amf串接在一起,用密钥ka2和与f1对应的f1’算法计算得到xmac。将xmac和解析消息得到的mac进行比较,如果不相同,则用户端认证服务器身份失败,用户端将向服务器发送不携带response字段的

register消息,以此通知网络提问无效。失败原因可能是消息被篡改或者服务器为非法身份等。如果一致,那么用户端认证服务器身份成功。

3.3、用户端生成应答消息:在mac通过校验后,用户端利用rand2和ka2计算得到保密性密钥ck和完整性密钥ik的指针地址pc’和pi’。根据指针地址和长度从对称密钥池中取出相应随机数n1’和n2’,再将n1’和n2’通过密钥生成算法和密钥ka2计算得到保密性密钥ck和完整性密钥ik。

以此密钥生成的方法可以生成密钥ck和ik所需的参数均不对外暴露,提高了ck和ik的安全性。ck和ik的生存周期在amf中得到以及下面数据的加密的算法也从amf中解析。

用户端将rand2用ka2和消息认证算法进行计算得到消息认证码res。使用伪随机函数prf计算password=prf(res||ik||ck,“http-digest-akav2-password”)。计算方式与2.3中的认证应答(xpassword)同理。

3.4、用户端返回应答消息:用户端在发往服务器的第二个register请求中返回认证挑战应答password,进行base64编码后的字符串放入response字段中。主要的头域和字段的内容如下:

registersip:home.mobile.bizsip/2.0

authorization:digest

username="jon.dough@mobile.biz",

realm="roamingusers@mobile.biz",

nonce="cjpk9mrqnut25erkajm09utl9nm09utl9nmz5ox25pzz==",

uri="sip:home.mobile.biz",

response="6629fae49393a05397450978507c4ef1",

……

步骤4:身份认证完成

4.1、服务器认证应答消息:服务器接收到用户端的应答消息后,对应答消息进行解析并从认证头域authorization中取出相应的参数:如果authorization头域中的response字段为空,再检查重同步参数字段auts是否为空:如果auts参数不为空,说明检查出了rand1认证失败,服务器使用这个重同步参数auts重新请求认证数据,当下载认证数据成功后,再用新的认证向量重新提问。如果auts参数也为空,说明提问无效,服务器将选择下一个认证向量,重新用401消息进行提问。若用完了所有的认证向量,仍然无法完成认证,则认为本次认证失败,放弃本次认证过程,并发送403forbidden消息通知用户端。

如果authorization头域中的response字段不为空,则取出其中的认证应答password参数,并将其和保留的认证应答xpassword相比较。如果一致,则服务器就认为用户端回答提问正确,认证用户端身份成功,同时向用户端回送200ok消息;如果不一致,就认为用户端回答提问错误,认证用户端身份失败,那么服务器应该发送403forbidden应答消息给用户端,通知认证失败,并且放弃本次认证过程。

4.2、服务器返回注册结果:服务器将认证结果返回到用户端,如果是成功的,则保留本次注册生成的ck和ik;如果是失败的,则清除本次注册生成的ck和ik。

步骤5:用户端接收验证注册结果

用户端接收验证注册结果:用户端接收到服务器的返回消息来判断本次身份认证是否成功。如果失败,则进行重新发起注册请求;如果成功,则接下来的消息传输均可进行加解密。

鉴权密钥的更新

鉴权密钥的更新方法可参考实施例1中的鉴权密钥更新方法。

注册与鉴权密钥更新组合方法

本组合方法可以参考实施例1的做法。鉴权密钥更新的方式请参考本实施例的“鉴权密钥的更新”。

注册异常的处理

异常处理情况可参考实施例1中的处理。

以上公开的仅为本发明的实施例,但是本发明并非局限于此,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。显然这些改动和变型均应属于本发明要求的保护范围保护内。此外,尽管本说明书中使用了一些特定的术语,但这些术语只是为了方便说明,并不对本发明构成任何特殊限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1