任塨晔
(西安电子工程研究所 西安 710100)
移动自组织网络(Mobile Ad hoc Networks)[1-3]是一种无需基础设施的网络。在自组网中,节点通过自组织方式组建并管理网络,网内节点兼具主机和路由器的功能,并可自由移动。这种无需固定基础设施的网络形态在车载自组网、应急救灾、传感器网络等领域有着广泛的应用。
为保证自组网内节点间信息传输的安全性,新节点加入自组网时需进行身份认证。与具有基础设施的有线网络不同,自组网中缺乏固定的、可信的权威实体来鉴别新节点的身份。随着各种形态的自组网的广泛应用,针对自组网身份认证的研究成为热点。文献[4]将基于公钥密码体制的认证机制分为三类:集中式、分布式和自组织式。在集中式的认证机制中,证书中心(Certificate Authority,CA)负责证书的颁发、更新和撤销,并且负责验证新入网节点的身份。由于需要固定的CA,集中式的认证机制主要用于有线网络。分布式认证机制采用门限密码技术,用多个实体共同行使CA的功能。自组织式认证机制采用证书链代替CA的功能,基于认证双方的证书库实现认证功能。文献[5]提出了一种自组织的公钥管理方式,各节点可生成自己的公钥和私钥,无需CA实体。文献[6]提出了一种分布式的认证方式,其中多个邻居节点共同验证新节点的身份,避免了单点失效的问题。文献[7]设计了一种自组织网络的节点认证和密钥分发协议,通过引入可信管控平台保障节点公钥的有效性。文献[8]提出了基于安全域的身份认证方法,采用实时协商随机数和复杂函数计算相结合的方式完成自组网节点的身份验证。文献[9]提出了一种基于轻量级可移交CA的移动自组网认证体系,在不使用门限机制的情况下具备一定的容侵能力。文献[10]提出了一种基于身份的匿名认证方案,能够实现车辆与路边单元以及车辆之间的身份认证。文献[11]设计了一种基于Diffie-Hellman协议的随机密钥图结构,在空间自组织网络中实现了区域自治的身份认证。
在多数自组网认证协议的研究中,自组网内的某个节点或某些节点行使CA的功能。节点的移动和动态加入退出使得CA需频繁在节点间转移,从而增大了认证时延。此外,CA节点的自组织选举也是需考虑的问题。由于自组网中没有固定的节点执行CA的功能,攻击者容易冒充CA破坏自组网认证体系。不同于一般的无线网络,自组网通常由特定的组织机构管理,属于同一组织的节点在特定场景下组建自组网。在上述场景中,同一组织的节点可离线从CA获得证书,在进行身份验证只需验证证书的有效性和证书与身份的匹配。在线的身份认证无需CA参与。
基于对自组网认证协议的研究现状分析和自组网的特性,本文提出一种自组网中基于离线证书的双向认证协议。在该协议中,自组网内没有节点执行CA的功能,证书颁发以离线方式执行。通过三个认证包的交互,认证双方相互验证对方证书并且基于对方提供的证书执行“挑战/应答”方式的身份认证。 已被认证的节点自动形成一个可信集, 可信集内的任一节点都可代表该网络与网外节点执行认证流程。新入网节点的公钥通过安全方式在网内广播,其他节点收到新入网节点的公钥即可认为该节点已加入可信集,从而无需再与其执行认证流程。本文设计的自组网认证协议符合自组网无中心、扁平化的特性,可推广到其他具有相似特性的网络。
本文第1节介绍离线证书颁发机制;第2节详述基于离线证书的双向认证协议,并且给出了认证双方的状态机描述;第3节介绍基于可信集的分布式认证机制;第4节分析所提认证协议的安全性;第5节总结全文。
自组网中不存在固定的CA实体,节点证书的颁发和验证无法以安全的方式在线执行。针对这一问题,本文设计了离线的证书颁发机制,每个节点保存自己的证书,在需要认证时通过交互证书实现双向认证。
节点在启用前向CA申请证书。节点向CA发送自己的身份信息和公钥,CA向节点发送生成的证书。节点与CA之间的数据传输以有线、安全的方式进行。证书的结构包含三部分:身份信息、公钥和数字签名,分别记为Id、PK和DS。数字签名由CA产生。CA首先基于哈希算法计算身份信息与公钥两部分的消息摘要,再用自己的私钥加密生成数字签名,该过程可记为DS=SKCA(Hash(Id+PK)),其中Hash(·)表示哈希算法,SKCA表示CA的私钥,对应的公钥记为PKCA,SKCA(·)表示私钥加密过程。每个节点本地保存CA颁发的证书。CA的公钥公开,所有节点可通过CA的公钥验证证书的有效性。证书的颁发是一次性的,节点的认证过程不再涉及CA,因此该过程被称为离线证书颁发机制。
网内节点和网外节点通过三个认证包的交互相互验证对方的身份。网内节点作为认证的发起方,网外节点作为认证的响应方,它们之间的认证包的交互如图1所示。该过程可分为四个步骤:
图1 认证双方的包交互流程
1)当认证发起方(以下用A表示)收到认证响应方(以下用B表示)的入网申请后,它向认证响应方发送认证包1。认证包1包含认证序号、A生成的挑战序列tA和加密后的证书E(CA),其格式如图2所示。认证序号用于区分不同的认证会话。为提升抵抗重放攻击的能力,认证发起方在短时间内不能使用重复的挑战序列。A采用对称加密算法加密证书CA得到E(CA)。假设所有合法节点都维护相同的对称密钥库,认证包1的包头记录加密证书所用的对称密钥索引,B可基于该索引得到解密密钥。
图2 认证包1的格式
2)B收到认证包1后,解密E(CA)获得A的证书CA。B通过CA的公钥验证CA,并提取A的公钥PKA。B生成另一挑战序列tB,用PKA加密tB得到PKA(tB)。此外,B用自己的私钥SKB加密tA得到SKB(tA)。B将PKA(tB)、SKB(tA)和加密后的证书E(CB)组成认证包2,并发送给A。认证包2的格式如图3所示。
图3 认证包2的格式
3)A收到认证包2后,解密获得B的证书CB。A通过CA的公钥验证CB,并提取B的公钥PKB。A用PKB解密SKB(tA),获得dA=PKB(SKB(tA))。如果dA与tA相等,则表明B的公钥与私钥匹配,从而A能够验证B的合法身份。此外,A用自己的私钥SKA解密PKA(tB),得到dB=SKA(PKA(tB))。A通过认证包3将dB发送给B,其格式如图4所示。
图4 认证包3的格式
4)B收到认证包3后,比较dB与tB。如果dB与tB相等,表明A的公钥与私钥匹配,从而B能够验证A的合法身份。至此,A和B相互验证了对方的身份,即可相互通信。
认证发起方和认证响应方在认证过程中需维持各自的认证状态机,从而决定在特定事件发生时执行的动作。以下分别描述认证双方的状态机。
认证发起方A是已被认证的网内节点,它可能同时维持与多个网外节点的认证状态。对于特定认证响应方B,A维持的认证状态机如图5所示。
图5 认证发起方的认证状态机
当A收到B的入网申请后,随即建立对应的状态机。当A发送认证包1后,启动定时器TA2(表示A等待认证包2的定时器),等待接收认证包2。如果定时器归零前未收到有效的认证包2并且尝试次数未达到最大门限,则A重新发送认证包1,并且递增认证序号。如果A收到的B发送的认证包2的序号与A本地保存的序号一致,则认为该认证包2有效,否则该认证包2无效。当A收到有效的认证包2时,执行如图6所示的处理流程以验证B的证书及身份。图6中①、②、③三个步骤是验证B的身份的关键步骤,下面分别讨论。
图6 认证发起方收到认证包2时的处理流程图
① A验证B的证书的步骤如下。A首先应用相同的哈希算法计算得到B的证书中身份信息和公钥两部分的哈希值,记为H1=Hash(IdB+PKB)。A再用CA的公钥解密B的证书中的数字签名,得到H2=PKCA(DSB)。A比较H1和H2,如果H1与H2相等,则证书验证成功。如果H1与H2不相等,则证书验证失败。这里A仅仅验证了B的证书的有效性,并未验证B的身份与B的证书是否匹配。
② A从B的证书中获得B的公钥PKB,执行公钥解密流程dA=PKB(SKB(tA))。如果dA与tA相等,表明从B的证书中获得的公钥与加密tA所使用的私钥匹配。由于A已验证了B的证书,从而A可确定认证包2就是合法节点B发送的,A成功验证了B的身份。如果dA与tA不相等,表明从B的证书中获得的公钥与加密tA所使用的私钥不匹配,该认证包2可能是其他节点冒充B发送的,A无法验证B的身份。
③ A用自己的私钥SKA执行私钥解密流程dB=SKA(PKA(tB))。A将dB发送给B,用于B验证A的身份。
认证响应方B是等待认证的网外节点。当它发送入网申请给网内节点A之后,即建立如图7所示的认证状态机。认证响应方至多只能维持一个认证状态机。
图7 认证响应方的认证状态机
当B向A发送入网申请后,等待接收认证包1。当B收到A发送的认证包1时,执行如图8所示的处理流程。如果B成功验证了A的证书,B构造并发送认证包2给A,等待接收认证包3。B收到有效的认证包3时,比较dB与tB是否相等。如果相等,B成功验证了A的身份。当B收到认证包3时,需确定该包是A发送的并且其中的序号与本地保存的序号一致。如果满足上述条件,B判定该认证包3有效。
在自组网中,每个节点可能与多个网内节点通信。如果在通信前都执行双向认证协议,则开销过大,并且多跳传输也增加了信息被窃听或被篡改的风险。为了降低认证开销同时保证安全性,本文设计了一种基于可信集的分布式认证机制。已经相互认证的在网节点自动形成一个可信集,集合内节点在通信前无需再次执行认证过程,只需获得对方的公钥即可。
可信集是一个节点的集合,集合内的节点满足三个条件:
1)节点的证书有效;
2)节点的公钥与私钥匹配;
3)节点处于在网状态。
如第2节所述,对于参与认证的双方节点,当它们的认证状态机进入“认证成功”状态时,即表示它们确认对方节点满足上述三个条件。
基于可信集的定义,当两个未入网的节点A和B执行双向认证协议并且认证成功时,它们自动组成一个可信集。当B与另外的未入网节点C执行双向认证协议并且认证成功时,C自动进入该可信集。虽然A和C并没有执行认证流程,但是它们都属于合法节点,因此不必再进行认证流程。随着可信集内的节点与未入网节点的相互认证,可信集逐渐扩大,如图9所示。
在基于可信集的分布式认证机制中,每个集合内节点可代表该集合与集合外节点相互认证,吸纳新的节点入网。每当一个集合内节点完成对网外节点的身份认证时,它需将新入网节点的公钥通过加密方式发送给集合内的其他节点。如图9所示,A在完成对G的身份认证后将G的公钥发送给可信集内的其他节点。公钥的分发需满足三个要求:机密性、完整性和可溯源性。当集合内其他节点通过安全方式收到G的公钥后,可确认G已入网并且身份已被认证,它们即可与G进行通信。此外,A也向G发送它保存的集合内节点的公钥。
本文提出的双向认证协议的安全性与所使用的公钥加密算法、哈希算法和伪随机数生成算法有关。本协议使用对称加密算法加密证书,其目的是保护证书内的身份信息。由于双向认证协议可验证公钥与私钥的匹配性,即使证书以明文传输,仍可确保协议的安全性。本节在假设上述算法未被破解的前提下在以下三种场景中分析所提双向认证协议的安全性。
非法节点C冒充合法节点诱骗合法节点B入网。由于C是非法节点,它没有有效的证书,或者它冒用合法节点A的证书来冒充A。下面分情况讨论。
1)非法节点C没有有效证书:按照第2节所述的协议流程,C需向B发送已加密的C的证书。由于C的证书未经过CA签名,B验证C的证书失败,B的认证过程终止。
2)非法节点C冒用合法节点A的证书:C将A的证书发送给B,B成功验证了A的证书,并用其中包含的A的公钥PKA加密tB得到PKA(tB)。C收到B发送的认证包2后,需向B发送解密得到的dB。由于C不知道A的私钥SKA,因此它无法还原正确的挑战序列dB。C将错误的dB发送给B,B判定dB与tB不相等,B的认证过程终止。当然,C随机生成的dB会以极小的概率等于tB。为降低这种可能性,挑战序列的长度可适当增长。
当非法节点C作为认证响应方试图与合法节点A认证时,同样存在两种情况。
1)非法节点C没有有效证书:当C收到A发送的认证包1后,需回复加密的证书。由于C的证书未经过CA签名,A无法验证C的证书,A的认证过程终止。
2)非法节点C冒用合法节点B的证书:C将B的证书发送给A,但是C不知道B的私钥,它加密tA所使用的私钥与B的证书中包含的公钥不匹配。假设C用私钥SKC加密tA得到SKC(tA)。A用B的公钥PKB解密SKC(tA),得到的dA与tA不相等,A无法验证C的身份,A的认证过程终止。
非法节点C窃听并保存合法节点A(作为认证发起方)和B(作为认证响应方)之间的认证包交互,它可发起两种重放攻击,如下所述。
1)非法节点作为认证发起方的重放攻击
非法节点C将保存的认证包1发送给合法节点D。D构造并回复认证包2给C。D生成的挑战序列tD几乎不可能与C保存的认证包3中的挑战序列dB(该挑战序列由B生成和加密,并由A解密)相同。C将保存的认证包3发送给D,D检验其中的dB与tD不相等,D的认证过程终止。
2)非法节点作为认证响应方的重放攻击
假设C冒充B向A发起入网申请。A向C发送认证包1,C以保存的认证包2回复。因为A与B认证时生成的tA和A与C认证时生成的tA几乎不可能相等,C回复了错误的dA,A对C的认证过程终止。
针对传统自组网认证协议依赖在线CA的问题,基于自组网无中心、扁平化的特性,本文提出了一种自组网中基于离线证书的双向认证协议。在该协议中,没有节点在线执行CA的功能,因此无需考虑CA的选举和转移的问题。安全性分析表明,该协议可实现网内节点和网外节点的双向认证,可识别非法入侵和身份冒充,并可抵御重放攻击。此外,基于可信集的分布式认证机制能够降低自组网内的认证开销。本文设计的基于离线证书的双向认证协议对公钥加密算法、哈希算法和伪随机数生成算法无特别要求,可根据实际应用需求和设备特性选用合适的算法。