6LoWPAN网络密钥建立方法

文档序号:7886702阅读:215来源:国知局
专利名称:6LoWPAN网络密钥建立方法
技术领域
本发明涉及计算机网络领域,尤其涉及一种6LoWPAN网络密钥建立方法。
背景技术
随着物联网的兴起,结合了 IPv6和无线传感器网络(WSN)的6LoWPAN技术得到很大的发展。6LoWPAN网络由三种节点组成边缘路由器、内部路由器和普通节点。通过RPL路由协议,所有路由器构造成一个以边缘路由器为根节点的有向无环图(DAG)。每个路由器都有一个Rank值(一般为正整数),且在DAG中,子节点的Rank值一般比父节点的Rank 值大。通过邻居协议,每个普通节点都会选择一个默认路由器,两者类似于DAG中的父子关系,普通节点也可以看作是DAG的一部分。普通节点向网络中的远端节点发送信息时,通过默认路由器进行转发。密钥建立作为保障上述节点之间安全通信的一个基本方法,提供了通信的机密性、完整性和认证等安全服务。在传统的WSN中,尽管已经对密钥建立进行了很多的研究,但是由于传感器网络结构和通信机制的多样性,使得相应的密钥建立方法与具体的网络结构和通信机制相关, 不具有通用性,不适合直接应用于6LoWPAN中。BLoffPAN从网络结构、路由协议、邻居协议等都有相关标准(主要由IETF制定),所以6LoWPAN网络中的密钥建立方法,需要与现有的网络结构和通信机制相结合。目前一些研究人员对6LoWPAN安全问题的研究考虑如何把互联网中的安全机制移植到6LoWPAN网络中,如轻量级的IPkc、SSL技术。现有轻量级IPSec和SSL的研究主要针对节点与互联网上的设备之间实现安全通信,并没有涉及到6LoWPAN网络内部节点之间的安全通信。从现有的研究情况中可以看出轻量级msec和SSL不太适合节点之间的密钥建立,因为采用了公钥算法,计算量大,比较耗时,导致通信时间相对较长。

发明内容
本发明的目的是提供一种6LoWPAN网络密钥建立方法,计算量小,节省通信时间。根据本发明的一个方面,提供一种6LoWPAN网络密钥建立方法,包括步骤1、内部路由器节点Rx接收到第一个来自路由器节点Ru的DIO消息后,向节点Ru发送消息请求得到组密钥,该消息为Rx — Ru :k+{f(k+A ι) I IkiKGO其中,k为Rx的Rank值,也表示为Rank(Rx), K1为初始密钥,||表示串接, {f(k+Ai) I IkiKGO表示根据aes加密算法用f(k)加密f(k+Ai) ^p K1串接后的数据;并且,f (k) =F (f (k-1) I I salt (k))其中,k > 1,salt(k)表示进行第k次Hash计算所用的加盐值,
6F (f (k-1) I I salt (k))表示对 f (k-1) I I salt (k)进行 Hash 函数值计算;步骤2、Ru收到消息后,根据消息中的k值计算f(k)禾Pf(k+Al);步骤3、Ru使用f(k)解密{f(k+Al) I K1KGO信息,然后把解密出的f(k+Δ1)与自己计算的值进行比较,如果相等,则Ru对Rx认证通过,否则认证不通过;步骤4、如果Rx认证通过,则Ru把K1作为与Rx之间的对密钥进行保存,并且向Rx 回应消息Ru — Rx {KGI I f (Rank (u)) | | salt (Rank (u) +1) | | Rank (u) | | IIu} K1其中,salt (Rank (U)+1)表示进行第Rank (U)+1次Hash计算所用的加盐值;步骤5、Rx收到回应消息后,通过K1解密整个消息,得到Ru的接口标识IIu,然后和数据包源地址中的接口标识进行对比实现对Ru的认证;步骤6、如果Ru认证通过,Rx得到组密钥Ke,并把Ru作为自己的父节点、存储两者之间的对密钥K1 ;Rx得到的其它信息包括Rank(U)、f (Rank(u))和salt (Rank(u)+1)。可选的,在步骤6后还包括步骤7、Rx收到来自邻居节点Ru和Rv的DIO消息后,用组密钥Ke解密该消息,并按照RPL路由协议根据DIO中的Rank值重新选择父节点;步骤8、如果Rx选择的父节点仍然是Ru,则Rx先依据Ru的Rank (U)值,按照RPL 协议计算Rank(X),然后根据所述f (Rank(U))和salt (Rank(u)+1)计算出f (Rank(χ))和 salt(Rank(χ)+1);步骤9、如果选择的父节点是Rv,则Rx使用多播地址发送对密钥建立消息,消息中包含的信息为IIv+RankOO,IIv指明要建立对密钥的父节点接口标识,Rank (χ)指明用于响应消息加密的密钥f(Rank(x)),多播消息使用组密钥生成消息验证码MAC,并用组密钥进行加密Rx — * :MAC+{IIv| |Rank(x)}KG步骤10、邻居节点收到对密钥建立消息后,根据组密钥对消息验证码MAC进行验证,验证通过后解密该消息,然后根据IIv的值判断是否是和自己建立对密钥;步骤11、对于Rv来说,根据IIv的值判断Rx是与自己建立对密钥,随机生成对密钥KP,然后回应消息,用f (RankOO)进行加密Rv — Rx {f (Rank (ν)) | | salt (Rank (ν) +1) | | KP} f (Rank (χ))步骤12、Rx收到响应消息后,通过f (Rank (χ))解密出其中的信息,把Rv作为自己的父节点,保存两者之间的对密钥KP,然后根据f (Rank(V))和salt (Rank (ν)+1)重新计算自己拥有 f (Rank (χ))和 salt (Rank (χ) +1)。可选的,计算{f(k+Ai)I IkiKGO 包括步骤1A、随机生成一个长字节数据串作为Hash函数计算的初始数据,并确定常量整数Δ1的值;步骤1Β、根据内部路由器节点部署在树状结构的层次深度,估算一个Rank值k ;步骤1C、计算 f(k)禾口 f(k+A 1);和步骤1D、随机生成一个初始密钥K1,然后根据AES加密算法用f (k)加密f (k+ Δ 1) 和&串接后的数据,生成加密后的数据{f(k+Al) I |KI}f(k)0可选的,在步骤12后还包括
步骤13、普通节点Hy发送消息,包括RS、k和{f(k+Al) | K1I f(k)Hy — * :RS+k+ {f (k+ Δ 1) | | K1I f (k)步骤14、邻居路由器Rn收到消息后,计算f (k)和f (k+Δ 1);步骤15、使用f(k)解密{f(k+Al) I K1I f(k)信息,然后把解密出的f (k+Δ 1)与自己计算的值进行比较,如果相等,则1 对Hy认证通过,否则认证不通过;步骤16、认证通过后,1 把K1作为两者之间的对密钥进行保存,然后回应路由通告消息,并使用K1对关键信息进行加密Rn — Hy RA+{Rank (η) | |f(Rank(n)) | | salt (Rank (η)+1) | |KG| | IInlK1 ;步骤17、Hy收到消息后,把1 作为默认路由器;通过K1解密消息,得到ΙΙη,然后和数据包中的接口标识进行对比实现对foi的认证;保存组密钥Ke,在Rank(II)上增加一个数值计算Rank (y),然后在f (Rank (η))和salt (Rank (η) +1)的基础上计算出f (Rank (y))和 salt (Rank (y)+l) ;KX作为与1 之间的对密钥进行保存。可选的,在步骤17后还包括步骤18、普通节点A选择随机整数m,使得m > Rank (A),然后向普通节点B发送 HELLO消息和m值;A — B :HELL0+m步骤19、普通节点B收到HELLO消息后,判断m和Rank⑶的大小;如果m彡Rank (B),则普通节点B生成两者的会话密钥Kab,然后向普通节点A发送密钥消息,内容为{KAB}f(m),Kab用f(m)加密B —A:{KAB}f(m)如果m < Rank⑶,则普通节点B选择随机整数η使得m < η (例如差值小于10不要太大),然后向普通节点A发送HELLO消息和值η B — A :HELL0+n步骤20、普通节点A接收到消息后,如果是密钥消息,通过计算f(m)解密出会话密钥Kab ;如果是HELLO消息,则生成两者的会话密钥Kab,然后向B发送密钥消息,内容为{KAB} f(n),KABffi f(n)加密A —B :{KAB}f(n)步骤21、普通节点B收到密钥消息后,通过计算f (η)解密出会话密钥。可选的,在步骤17后还包括步骤22、Hy在使用NS+AR0消息向1 进行地址注册时,使用两者之间的对密钥K1 生成消息验证码MAC Hy — Rn NS,ARO,MAC步骤23、Rn收到注册消息后,使用对密钥和MAC对消息进行认证;如果认证不成功,则地址注册失败,Rn不会为Hy建立任何缓存项信息,从而当Hy 向网络中发送数据包时丢弃数据包、不进行转发;如果成功,1 会为Hy建立缓存项信息,从而当Hy向网络中发送的数据包时由1 进行转发。可选的,步骤2进一步包括步骤 2A、如果 Rank (u) < k,计算 f (Rank (u) +i),直到 Rank (u) +i = k ;
步骤2B、如果Rank (u) > k,则Ru通过消息把k值发送给自己的父节点Re让其计算Hash值,所述消息包括k和Rx的接口标识IIx Ru —Re:k+IIx;步骤2C、父节点Re计算完成后回应消息给Ru,该消息经过两者之间的对密钥Kup 加密Re — Ru {IIx f (k) | salt (k+1)} Kup ;步骤2D、如果 Rank (u) = k,则 f (k) = f (Rank (u))。根据本发明的另一个方面,提供一种6LoWPAN中基于多次Hash的密钥建立方法, 包括步骤1、普通节点Hy发送消息,包括RS、k和{f(k+Al) | K1I f(k)Hy — * :RS+k+ {f (k+ Δ 1) | | K1I f (k)其中,k为Hy的Rank值,也表示为Rank(Hy) ,K1为初始密钥,||表示串接, {f(k+Ai) I IkiKGO表示根据aes加密算法用f(k)加密f(k+Ai) ^p K1串接后的数据;并且, f (k) = F(f (k-1) I I salt (k)),其中,k > 1,salt(k)表示进行第k次Hash计算所用的加盐值, F(f(k-1) I salt (k))表示对 f (k-1) I salt (k)进行 Hash 函数值计算;步骤2、邻居路由器1 收到消息后,计算f (k)和f (k+Δ 1);步骤3、foi使用f(k)解密{f(k+Al) I K1I f(k)信息,然后把解密出的f (k+Δ 1)与自己计算的值进行比较,如果相等,则1 对Hy认证通过,否则认证不通过;步骤4、认证通过后,1 把!^作为两者之间的对密钥进行保存,然后回应路由通告消息,使用K1对关键信息进行加密Rn — Hy RA+{Rank (η) | |f(Rank(n)) | | salt (Rank (η)+1) | |KG| | IIniK1 ;步骤5、Hy收到消息后,把1 作为默认路由器;通过K1解密消息,得到ΙΙη,然后和数据包中的接口标识进行对比实现对foi的认证;保存组密钥Ke,在Rank(II)上增加一个数值计算Rank (y),然后在f (Rank (η))和salt (Rank (η) +1)的基础上计算出f (Rank (y))和 salt (Rank (y)+l) ;KX作为与1 之间的对密钥进行保存。可选的,在步骤5后还包括步骤6、普通节点A选择随机整数m,使得m > Rank(A),然后向普通节点B发送 HELLO消息和m值;A — B :HELL0+m 步骤7、普通节点B收到HELLO消息后,判断m和Rank⑶的大小;如果m彡Rank⑶,则普通节点B生成两者的会话密钥Kab,然后向普通节点A发送密钥消息,内容为{KAB}f(m),Kab用f(m)加密B — A {KAB} f (m)如果m < Rank⑶,则普通节点B选择随机整数η使得m < η (例如差值小于10不要太大),然后向普通节点A发送HELLO消息和值η B — A :HELL0+n步骤8、普通节点A接收到消息后,如果是密钥消息,通过计算f(m)解密出会话密钥Kab ;如果是HELLO消息,则生成两者的会话密钥Kab,然后向B发送密钥消息,内容为{KAB} f(n),KABffi f(n)加密A —B :{KAB}f(n)步骤9、B收到密钥消息后,通过计算f(n)解密出会话密钥。可选的,在步骤5后还包括步骤10、Hy在使用NS+AR0消息向1 进行地址注册时,使用两者之间的对密钥KI 生成消息验证码MAC Hy — Rn :NS,ARO,MAC步骤11、1 收到注册消息后,使用对密钥和MAC对消息进行认证;如果认证不成功,则地址注册失败,Rn不会为Hy建立任何缓存项信息,从而当Hy 向网络中发送数据包时丢弃数据包、不进行转发;如果成功,1 会为Hy建立缓存项信息,从而当Hy向网络中发送的数据包时由1 进行转发。与现有技术相比,本发明的优点在于(1)多次Hash的密钥建立方法计算量小;(2)利用Hash函数计算的不可逆性,并且通过迭代的方式计算多次Hash值,保证了 Hash函数计算的安全强度;(3)内部路由器和普通节点在入网时都进行了双向认证,可以抵御恶意节点的攻
击ο


图1是现有技术中6LoWPAN中通过RPL路由协议和邻居协议构造的有向无环图 (DAG)的示意图;图2是本发明一个实施例中提供的6LoWPAN中基于多次Hash的密钥建立方法流程图;图3是本发明一个实施例中路由器Rx经过双向认证后加入到网络并得到组密钥的过程示意图;其中,方框的内容表示在通信之前,节点已经拥有的信息;图4是本发明一个实施例中路由器Rx与新的父节点Rv建立组密钥的过程示意图;其中,方框的内容表示在通信之前,节点已经拥有的信息;图5是本发明一个实施例中普通节点Hy经过双向认证加入到网络的过程示意图; 其中,方框的内容表示在通信之前,节点已经拥有的信息;图6是本发明一个实施例中普通节点A和B建立会话密钥的过程示意图;其中,方框的内容表示在通信之前,节点已经拥有的信息。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本文中,Hash对应的中文术语为“散列”,是指把任意长度的输入通过散列算法变换成固定长度的输出。6LoWPAN网络如图1所示,整个网络包含一个边缘路由器,若干(彡0)内部路由器和若干1)普通节点,边缘路由器、内部路由器和普通节点统称为节点,普通节点为计算终端;路由器通过RPL路由协议构造成以边缘路由器为根节点的有向无环图(DAG),普通节点通过邻居协议选择一个默认路由器连接到网络中。其中,顶端的是边缘路由器,灰圈表示内部路由器,白圈表示普通节点,实线表示DAG中通过认证后建立起的父子连接,虚线表示待认证建立的连接。其中,组密钥用于网络中所有节点间多播地址消息安全通信;对密钥在路由结构有向无环图中具有父子关系节点之间建立,用于安全传送路由信息以及普通节点和路由器之间的通信认证,对密钥可以只用于单跳安全通信;会话密钥用于任意两个普通节点之间进行安全通信,数据可以通过单跳或者多跳转发。一般情况下,节点间发送组播消息时用组密钥加密,路由器之间发送消息时使用对密钥,而普通节点之间通信使用会话密钥。发明人经过研究发现,在6LoWPAN网络中的RPL路由协议和邻居协议的通信机制基础上,可以基于多次Hash计算建立组密钥、对密钥和会话密钥。基于上述分析,本发明一个实施例中,提供一种6LoWPAN中基于多次Hash的密钥建立方法。如图2所示,该方法包括Sl 1、节点初始化;S12、内部路由器加入网络并获得组密钥;S13、内部路由器与父节点建立对密钥;S14、普通节点加入网络;和S15、普通节点之间建立会话密钥。上述步骤中,如果网络中只包含边缘路由器和普通节点,则普通节点直接和边缘路由器建立连接,步骤S12和S13可以省略;如果还包括路由器节点,则需要在进行完S12 和S13之后,再进行S14和S15步骤。下面将详细描述每一个步骤的内容。步骤Sll (节点初始化)对于路由器节点和普通节点,根据每个节点的大概部署位置,估算一个Rank值k; k值可以根据节点部署在树状结构的层次深度计算,每个节点估算的k可以都不相同,k可以不连续,如值为9,15等。随机生成一个初始密,K1,然后计算f(k+Al),将f(k+Al)和1^串接,两者串接后根据AES算法用f(k)加密(后续加密如无说明也采用AES算法),生成加密后的数据{f(k+Al) I |KI}f(k)其中,Δ 1为常量整数,且Δ 1 > 1,I I表示串接,{f(k+Δ 1) I |KI}f(k)表示用f(k) 加密{f(k+Al) IIK1I ;f(k)为k次Hash计算的值,计算方式为f(k) =F (f (k-1) I I salt (k)) (1)其中,k > 1,salt(k)表示进行第k次Hash计算所用的加盐值, F(f(k-1) I salt (k))表示对f (k-1) I salt (k)进行Hash函数值计算,Hash函数可以采用 MD5或SHA-I算法。公式(1)的含义为在第k-Ι次Hash计算值f (k_l)的基础上通过一次F (χ)函数计算,就可以得到f(k)。公式(1)是一个迭代公式,先计算出先前的Hash值才能够计算出
11后续的值。在公式中引入参数salt (k),可以增强安全性,防止攻击者只知道f(k-l)后就计算出第k次及后续所有的Hash值。对于salt (k)的选择,可以选择一个固定的值,每次计算都使用该值。但这种方式安全性不是最高,如果攻击者获得了这个固定的值,仍可以计算后续的Hash值。根据本发明的一个实施例,salt(k)的值采用动态变化的值,为/89(A-2),表示取 f (k-2)中的第8和9两个字节,这样实际的计算公式为如下f(k)^F(f(k-l)\\f,\k-2)), k>2 (2)动态变化的salt(k)值不限定于上述方式产生的值,其它方式比如选取f(k_2)或 f (k-3)的第1和第4个字节亦可。在实际计算时,对于f(l),随机选择一个长字节数据串(例如长度至少16字节), 用Hash函数计算值,对于f (2)的计算,salt (2)取0值,即f (2) =F(f(l) | 00),对于后续的f(k),采用公式⑴或(2)计算即可。根据本发明的一个实施例,Sll可以包括如下步骤SllU随机生成一个长字节数据串作为Hash函数计算的初始数据,并确定常量整数Δ 1的值(例如选择大于1且小于10的数);S112、随机生成一个组密钥Ke(例如长度为16字节),为边缘路由器设定Rank 值为Rank(E)(例如,至少是大于2的整数),按照上述公式(1)计算出f (Rank(E))和 salt (Rank (E)+1)的值例如/89(彻《^(五)-1),并且将 Kg、f (Rank (E))和//(i^iCE) -1)写入到边缘路由器中;S113、根据内部路由器和普通节点部署在树状结构的层次深度,估算一个Rank值 k,按照上述公式(1)计算出f(k)和f(k+Al);Sl 14、随机生成一个初始密钥K1 (例如长度为16字节),然后根据AES加密算法用 f (k)加密f (k+ Δ 1)和K1串接后的数据,生成加密后的数据{f (k+ Δ 1) I IK1I f (k),并且将k、 K1和{f(k+Ai) I IkiKQO写入到内部路由器和普通节点中。步骤S12(内部路由器加入网络并获得组密钥)一般情况下,从边缘路由器开始,每个路由器节点逐层加入到网络。每个已经入网的路由器定时的发送用组密钥加密和认证的多播地址DIO消息,新入网节点通过DIO消息选择父节点入网。初始状态时因为没有任何节点加入网络,新入网节点就选择边缘路由器作为父节点。边缘路由器对与它一跳远的节点入网认证过程与下面说明的一般情况是相同的。下面以节点Rx来说明。已入网路由器Ru和Rv (见图1)定时发送DIO消息,两者拥有的相关信息分别为 (Rank (u)、f (Rank (u))、fs9 (Rank(u) - 1))和(Rank (ν)、f (Rank (ν))、// (Rank(v) -1))。步骤S12的通信过程如图3所示,具体包括如下步骤S121、路由器节点Rx接收到第一个来自Ru的DIO消息后,由于没有组密钥,不能解密得到DIO消息中的具体信息,所以,Rx向Ru发送RequeSt_Gr0up_Key消息(包括k和 {f (k+ Δ 1) I IK1I f (k)),请求得到组密钥Rx — Ru :k+{f(k+A 1) I IkiKGOS122、Ru收到消息后,根据消息中的k值和自己的Rank(U)值计算出f(k)。具体计算过程如下
12
(1)如果 Rank(u) < k,计算 f (Rank (u)+i),直到 Rank (u)+i = k ;(2)如果Rank (u) > k,则Ru通过Requestjijfash消息把k值发送给自己的父节点Re让其计算Hash值,所述消息包括k和Rx的接口标识IIx Ru —Re:k+IIx父节点Re收到消息后,也根据此计算过程计算第k次Hash值f (k)。计算完成后回应Response_K_Hash消息给Ru,发送的消息经过两者之间的对密钥Kup (该对密钥已经在 Ru加入网络时,在Ru与其父节点Re之间建立完成)加密Re — Ru {IIx f (k) | salt (k+1)} Kup其中,salt (k+1)表示进行第k+1次Hash计算所用的salt值,例如值为。(3)如果 Rank (u) = k,则 f (k) = f (Rank (u))。经过上述计算过程,Ru得到f (k)和f (k+Δ 1)值。接着使用f(k)解密{f(k+Al) I K1KGO信息,然后把解密出的f (k+Δ 1)与自己计算的值进行比较,如果相等,则Ru对Rx认证通过,否则认证不通过。这里进行相等判断主要是为了防止恶意节点进入到网络中。恶意节点不是用户部署的节点,而是攻击者部署到网络中的节点,便于攻击网络。攻击者由于不知道f (k+Δ 1)的计算值,所以在这种情况下会出现f (k+Δ 1)不等的情况。如果认证通过,则Ru把!^作为与Rx之间的对密钥进行保存,并且向Rx回应 Response_Group_Key 消息Ru — Rx {KG |f (Rank (u)) | | salt (Rank (u)+1) | Rank (u) | IIujK1其中,salt (Rank (u)+1)表示进行第Rank (U)+1次Hash计算所用的salt值,例如可以为//(ito^(w)-l) ,Response_Group_Key 消息为Ru ^ Rx {K0 (I f(Rank(u)) || fs9(Rank(u)-\) || Rank[u) || IIu}K1S123、Rx收到回应消息后,通过K1解密整个消息,得到IIu,然后和数据包源地址中的接口标识进行对比实现对Ru的认证。认证通过后,Rx得到组密钥Ke,并把Ru暂时作为自己的父节点存储两者之间的对密钥K1, Rx得到的其它信息包括Rank(U)、f (Rank(U)) 和/8>_)-1)。S124、Rx等待接收新的DIO消息,以选择更优的父节点。步骤S13(路由器与父节点建立对密钥)Rx得到组密钥后,对邻居节点后续发送的用组密钥加密的DIO消息,能够进行处理,并且选择更优的父节点。父节点选定后,通过消息与其建立对密钥。步骤S13整个通信过程如图4所示,具体包括如下步骤S131、Rx收到由Ru和Rv发出的新的DIO消息后,用组密钥解密该消息,根据DIO 中的Rank值重新选择父节点(选择方法根据RPL路由协议)。如果选择的父节点仍然是Ru,则Rx先依据Ru的Rank (u)值,按照RPL协议中的计算方法得到Rank(X),而且由于父子关系有Rank(U) < Rank(X),然后根据先前保存的 f (Rank(u))和//CRo^(M)-I)利用公式(2)计算出 f (Rank(χ))和。如果选择的父节点是Rv,则使用多播地址发送对密钥建立消息RequeSt_ Pairwise_Key,消息中包含的信息为IIV+Rank(X),IIv指明要建立对密钥的父节点接口标识,Rank (χ)指明用于响应消息加密的密钥f (Rank(X)),多播消息使用组密钥生成消息验
13证码MAC,并用组密钥进行加密Rx — * :MAC+{IIv| |Rank(x)}KGS132、邻居节点收到对密钥建立消息后,根据组密钥对消息验证码MAC进行验证, 验证通过后解密该消息,然后根据IIv的值判断是否是和自己建立对密钥。对于Ru来说,不是和自己建立对密钥,删除先前已经与Rx建立的对密钥。对于Rv来说,与自己建立对密钥,随机生成对密钥KP,然后回应Response Pairwise_Key 消息,用 f (Rank(χ))进行加密Rv — Rx {f(Rank(v)) || // (Rank(v) — 1) || Ip } f(Rank(x))S133、Rx收到响应消息后,通过f (Rank(χ))解密出其中的信息,把Rv作为自己的父节点,保存两者之间的对密钥ΚΡ。最后Rx根据f (Rank(ν))利用公式( 重新计算自己拥有 f (Rank (χ))和//(Rank(x) -1)。S134、Rx继续接收其它节点发送的DIO消息,如果发现比Rv更优(计算方法由RPL 路由协议规定),则把它作为新的父节点通过上述过程与其建立对密钥;如果不比Rv更优, 则仍然保留Rv作为自己的父节点。步骤S14(普通节点加入网络)普通节点加入网络使用6LoWPAN邻居协议,节点通过发送RS (路由请求)消息来查找默认路由器,通过发送消息进行双向认证后加入到网络中,图5显示了其通信过程。在 BLoffPAN网络中,普通节点本身不计算Rank值,但可以在默认路由器的Rank值上增加一个常值作为普通节点的Rank值,具体计算方法如下,[ΠΝ]8表示取普通节点N的接口标识的最后一个字节Rank (N) = Rank (R)+ [IIN]8mod 128其中,N表示普通节点,R表示默认路由器,RankO表示上述节点拥有的Rank值。步骤S14整个通信过程如图5所示,具体包括如下步骤S141、普通节点Hy启动后发送消息(包括RS、k和{f(k+Al) | K1I f(k))Hy — * :RS+k+ {f (k+ Δ 1) | | Kj f (k)S142、邻居路由器1 收到消息后,根据S122中的计算过程得到f(k)和f(k+Al), 然后对Hy认证,方法和对路由器的认证一样。认证通过后,1 把K1作为两者之间的对密钥进行保存,然后回应RA(路由通告)消息,使用了 K1对关键信息进行加密Rn^ Hy RA + {Rank(n) 11 f(Rank(n)) 11 /89 (Rank(n) -1) 11 Ig 11 IIn}KIS143、Hy收到消息后,把1 作为默认路由器。通过K1解密消息,得到ΙΙη,然后和数据包中的接口标识进行对比实现对1 的认证。认证通过后,Hy使用公式( 计算出 Rank(y)值,然后在f (Rank(η))和/89(彻从(《)-1)的基础上计算出自己的f(Rank(y)),保存组密钥Ke,K1作为与1 之间的对密钥进行保存。S144、Hy在使用NS+AR0 (邻居请求+地址注册选项)消息向1 进行地址注册时, 使用两者之间的对密钥KI生成消息验证码(MAC)Hy — Rn NS,ARO,MACS145、Rn收到注册消息后,使用对密钥和MAC对消息进行认证。如果认证不成功,则地址注册失败,Rn不会为Hy建立任何缓存项信息。当Hy向网络中发送数据包时,如果1 中没有Hy的缓存项信息,则丢弃数据包,不进行转发。通过这种方式可以防止攻击者向网络中发送大量无用信息,以消耗节点的资源。如果成功,1 会为Hy建立缓存项信息,这样Hy向网络中发送的数据包时,1 才会进行转发。制聚S15 (少嚇立射舌·)例如,普通节点A和B之间要建立会话密钥,通过两个节点的直接通信来完成。A 和B在入网后拥有的信息分别为(Rank (A),f (Rank (A)),/89 (Rank(A) -1))和(Rank⑶, f (Rank (B)),fl (Rank(B) -1))。步骤S15的工作是在A和B之间协商出一个都能计算出的f(k)值,从而用f(k) 加密以保证会话密钥的安全。如图6所示,步骤S15具体包括S151、A选择随机整数m,使得m > Rank (A)(例如差值小于10,差值越大计算量越大),然后向B发送HELLO消息和m值A —B:HELL0+mS152、B收到HELLO消息后,判断n^PRank(B)的大小。如果m彡Rank(B),则B生成两者的会话密钥Kab,然后向A发送密钥消息,内容为 {‘^⑷,‘用^!!!)加密B —A:{KAB}f(m)如果m < Rank⑶,则B选择随机整数η使得m < η (例如差值小于10不要太大), 然后向A发送HELLO消息和值η B —A:HELL0+nS153、A收到消息后,如果是密钥消息,通过计算f(m)解密出会话密钥。如果是 HELLO消息,则生成两者的会话密钥Kab,然后向B发送密钥消息,内容为{KAB}f(n),Kab用 f(n)加密A —B :{KAB}f(n)S154、B收到密钥消息后,通过计算f (η)解密出会话密钥。上述建立密钥的方法使用Hash算法,计算量小,节点入网时进行双向认证不需要第三方认证中心的参与,通信量少,而且可抵御恶意节点攻击。各种密钥直接是两点之间安全通信进行建立,不需要第三方节点进行密钥分发,多种密钥的建立保证了不同类型通信的安全。基于上述特点,该方法能够适用于6LoWPAN这种节点资源受限的环境,而且还能满足6LoWPAN网络的移动特性。上述建立密钥的方法可以用于6LoWPAN中多播地址消息安全通信,单跳和多跳的安全通信。上述方法的优点在于(1)利用了 Hash函数计算的不可逆性,并且通过迭代的方式计算多次Hash值,保证了 Hash函数计算的安全强度;每个节点的Hash计算次数都不同, 根据其Rank值动态确定的,即进行Rank次Hash计算;(2)路由器和普通节点在入网时都进行了双向认证,可以抵御恶意节点的攻击;C3)各个路由器之间建立起对密钥后,路由信息就可以在网络中安全的传送,保证了网络的路由安全;路由器和普通节点在进行组播通信时,通过组密钥可以实现对组播消息的加密和认证;两个普通节点要进行通信时,通过会话密钥来保障信息的安全;(4)普通节点要向网络中发送消息时,默认路由器使用两者之间的对密钥认证后,才会把数据包转发出去,这样就可以防止攻击者向网络发送大量无用的信息;(5)此外,该方法还适用于节点移动的场景。
应该注意到并理解,在不脱离后附的权利要求所要求的本发明的精神和范围的情况下,能够对上述详细描述的本发明做出各种修改和改进。因此,要求保护的技术方案的范围不受所给出的任何特定示范教导的限制。
权利要求
1.一种6LoWPAN网络密钥建立方法,包括步骤1、内部路由器节点Rx接收到第一个来自路由器节点Ru的DIO消息后,向节点Ru 发送消息请求得到组密钥,该消息为 Rx — Ru :k+ {f (k+ Δ 1) | | K1I f (k)其中,k为Rx的Rank值,也表示为Rank(Rx),K1为初始密钥,| |表示串接, {f(k+AD I IkiKGO表示根据aes加密算法用f(k)加密f(k+Ai) ^p K1串接后的数据;并且,f (k) = F(f (k-1) I I salt (k))其中,k> 1,salt(k)表示进行第k次Hash计算所用的加盐值,F(f (k-1) |salt(k)) 表示对f (k-1) I I salt (k)进行Hash函数值计算;步骤2、Ru收到消息后,根据消息中的k值计算f(k)和f(k+Al); 步骤3、Ru使用f(k)解密{f(k+Al) I K1I f(k)信息,然后把解密出的f(k+Δ1)与自己计算的值进行比较,如果相等,则Ru对Rx认证通过,否则认证不通过;步骤4、如果Rx认证通过,则Ru把K1作为与Rx之间的对密钥进行保存,并且向Rx回应消息Ru — Rx {KGI If(Rank(u))| |salt(Rank(u)+1)| |Rank(u)| |IIu}K1 其中,salt (Rank (U)+1)表示进行第Rank (U)+1次Hash计算所用的加盐值; 步骤5、Rx收到回应消息后,通过K1解密整个消息,得到Ru的接口标识IIu,然后和数据包源地址中的接口标识进行对比实现对Ru的认证;步骤6、如果Ru认证通过,Rx得到组密钥Ke,并把Ru作为自己的父节点、存储两者之间的对密钥K1 ;Rx得到的其它信息包括Rank (u)、f (Rank (u))和salt (Rank (u) +1)。
2.根据权利要求1所述的密钥建立方法,在步骤6后还包括步骤7、Rx收到来自邻居节点Ru和Rv的DIO消息后,用组密钥Ke解密该消息,并按照 RPL路由协议根据DIO中的Rank值重新选择父节点;步骤8、如果Rx选择的父节点仍然是Ru,则Rx先依据Ru的Rank(U)值,按照RPL协议计算 Rank (χ),然后根据所述 f (Rank (u))和 salt (Rank (u) +1)计算出 f (Rank (χ))和 salt(Rank(χ)+1);步骤9、如果选择的父节点是Rv,则Rx使用多播地址发送对密钥建立消息,消息中包含的信息为IIv+RankOO,IIv指明要建立对密钥的父节点接口标识,Rank (χ)指明用于响应消息加密的密钥f(Rank(X)),多播消息使用组密钥生成消息验证码MAC,并用组密钥进行加密Rx — * :MAC+{IIv I Rank(χ)}Kg步骤10、邻居节点收到对密钥建立消息后,根据组密钥对消息验证码MAC进行验证,验证通过后解密该消息,然后根据IIv的值判断是否是和自己建立对密钥;步骤11、对于Rv来说,根据IIv的值判断Rx是与自己建立对密钥,随机生成对密钥KP, 然后回应消息,用f (RankOO)进行加密Rv — Rx {f (Rank (ν)) | | salt (Rank (ν) +1) | | KP} f (Rank (χ))步骤12、Rx收到响应消息后,通过f (Rank (χ))解密出其中的信息,把Rv作为自己的父节点,保存两者之间的对密钥KP,然后根据f (Rank(V))和salt (Rank (ν)+1)重新计算自己拥有 f (Rank (χ))和 salt (Rank (χ) +1)。
3.根据权利要求1所述的密钥建立方法,其中,计算{f(k+Al)I IKJfQO包括 步骤1A、随机生成一个长字节数据串作为Hash函数计算的初始数据,并确定常量整数Δ 1的值;步骤1Β、根据内部路由器节点部署在树状结构的层次深度,估算一个Rank值k; 步骤1C、计算f (k)和f (k+Δ 1);和步骤1D、随机生成一个初始密钥K1,然后根据AES加密算法用f(k)加密f(k+Al)和 K1串接后的数据,生成加密后的数据{f(k+Al) I |KI}f(k)0
4.根据权利要求2所述的密钥建立方法,在步骤12后还包括 步骤13、普通节点Hy发送消息,包括RS、k和{f(k+Al) | |KI}f(k) Hy — * :RS+k+ {f (k+ Δ 1) | | K1I f (k)步骤14、邻居路由器1 收到消息后,计算f(k)和f(k+A 1);步骤15、使用f(k)解密{f(k+Al) I K1KGO信息,然后把解密出的f (k+Δ 1)与自己计算的值进行比较,如果相等,则1 对Hy认证通过,否则认证不通过;步骤16、认证通过后,Iir^EK1作为两者之间的对密钥进行保存,然后回应路由通告消息,并使用K1对关键信息进行加密Rn —Hy :RA+{Rank (η) | f (Rank (η)) | | salt (Rank (η)+1) | Kg IInjK1 ; 步骤17、Hy收到消息后,把1 作为默认路由器;通过K1解密消息,得到ΙΙη,然后和数据包中的接口标识进行对比实现对1 的认证;保存组密钥Ke,在Rank(Ii)上增加一个数值计算Rank(y),然后在f (Rank(η))和salt (Rank(η)+1)的基础上计算出f(Rank(y))和 salt (Rank (y)+l) ;KX作为与1 之间的对密钥进行保存。
5.根据权利要求4所述的密钥建立方法,在步骤17后还包括步骤18、普通节点A选择随机整数m,使得m > Rank (A),然后向普通节点B发送HELLO 消息和m值;A — B :HELL0+m步骤19、普通节点B收到HELLO消息后,判断m和Rank(B)的大小; 如果m ^ Rank (B),则普通节点B生成两者的会话密钥Kab,然后向普通节点A发送密钥消息,内容为{KAB}f(m),Kab用f(m)加密 B —A:{KAB}f(m)如果m < Rank (B),则普通节点B选择随机整数η使得m < η (例如差值小于10不要太大),然后向普通节点A发送HELLO消息和值η B — A :HELL0+n步骤20、普通节点A接收到消息后,如果是密钥消息,通过计算f(m)解密出会话密钥 Kab ;如果是HELLO消息,则生成两者的会话密钥Kab,然后向B发送密钥消息,内容为{KAB} f(n),KABffi f(n)加密 A-B :{KAB}f(n)步骤21、普通节点B收到密钥消息后,通过计算f (η)解密出会话密钥。
6.根据权利要求4所述的密钥建立方法,在步骤17后还包括步骤22、Hy在使用NS+AR0消息向1 进行地址注册时,使用两者之间的对密钥K1生成消息验证码MAC Hy — Rn :NS,ARO, MAC步骤23、Rn收到注册消息后,使用对密钥和MAC对消息进行认证; 如果认证不成功,则地址注册失败,1 不会为Hy建立任何缓存项信息,从而当Hy向网络中发送数据包时丢弃数据包、不进行转发;如果成功,1 会为Hy建立缓存项信息,从而当Hy向网络中发送的数据包时由1 进行转发。
7.根据权利要求1所述的密钥建立方法,步骤2进一步包括步骤 2A、如果 Rank (u) < k,计算 f (Rank (u) +i),直到 Rank (u) +i = k ; 步骤2B、如果Rank(U) > k,则Ru通过消息把k值发送给自己的父节点Re让其计算 Hash值,所述消息包括k和Rx的接口标识IIx Ru — Re :k+IIx ;步骤2C、父节点Re计算完成后回应消息给Ru,该消息经过两者之间的对密钥Kup加密Re — Ru :{IIx f (k) | salt (k+1)} Kup ;步骤 2D、如果 Rank(u) = k,则 f(k) = f(Rank(u))。
8.一种6LoWPAN中基于多次Hash的密钥建立方法,包括步骤1、普通节点Hy发送消息,包括RS、k和{f(k+Al) | |KI}f(k) Hy — * :RS+k+ {f (k+ Δ 1) | | K1I f (k)其中,k为Hy的Rank值,也表示为Rank(Hy),K1为初始密钥,| |表示串接, {f(k+AD I IkiKGO表示根据aes加密算法用f(k)加密f(k+Ai) ^p K1串接后的数据;并且,f(k) = F(f(k-1) I I salt (k)),其中,k> 1,salt(k)表示进行第k次Hash计算所用的加盐值,F(f(k-l) |salt(k)) 表示对f (k-1) I I salt (k)进行Hash函数值计算;步骤2、邻居路由器1 收到消息后,计算f(k)和f(k+A 1);步骤3、Rn使用f(k)解密{f(k+Al) I K1KGO信息,然后把解密出的f(k+Al)与自己计算的值进行比较,如果相等,则1 对Hy认证通过,否则认证不通过;步骤4、认证通过后,Rn把K1作为两者之间的对密钥进行保存,然后回应路由通告消息,使用K1对关键信息进行加密Rn —Hy :RA+{Rank (η) | f (Rank (η)) | | salt (Rank (η)+1) | Kg IInjK1 ; 步骤5、Hy收到消息后,把1 作为默认路由器;通过K1解密消息,得到ΙΙη,然后和数据包中的接口标识进行对比实现对1 的认证;保存组密钥Ke,在Rank(Ii)上增加一个数值计算Rank(y),然后在f (Rank(η))和salt (Rank(η)+1)的基础上计算出f(Rank(y))和 salt (Rank (y)+l) ;KX作为与1 之间的对密钥进行保存。
9.根据权利要求8所述的密钥建立方法,在步骤5后还包括步骤6、普通节点A选择随机整数m,使得m > Rank (A),然后向普通节点B发送HELLO 消息和m值;A — B :HELL0+m步骤7、普通节点B收到HELLO消息后,判断m和Rank (B)的大小;如果m ^ Rank (B),则普通节点B生成两者的会话密钥Kab,然后向普通节点A发送密钥消息,内容为{KAB}f(m),Kab用f(m)加密 B —A:{KAB}f(m)如果m < Rank (B),则普通节点B选择随机整数η使得m < η (例如差值小于10不要太大),然后向普通节点A发送HELLO消息和值η B — A :HELL0+n步骤8、普通节点A接收到消息后,如果是密钥消息,通过计算f(m)解密出会话密钥 Kab ;如果是HELLO消息,则生成两者的会话密钥Kab,然后向B发送密钥消息,内容为{KAB} f(n),KABffi f(n)加密 A-B :{KAB}f(n)步骤9、B收到密钥消息后,通过计算f (η)解密出会话密钥。
10.根据权利要求8所述的密钥建立方法,在步骤5后还包括 步骤10、Hy在使用NS+AR0消息向1 进行地址注册时,使用两者之间的对密钥K1生成消息验证码MAC Hy — Rn :NS,ARO, MAC步骤11、1 收到注册消息后,使用对密钥和MAC对消息进行认证; 如果认证不成功,则地址注册失败,1 不会为Hy建立任何缓存项信息,从而当Hy向网络中发送数据包时丢弃数据包、不进行转发;如果成功,1 会为Hy建立缓存项信息,从而当Hy向网络中发送的数据包时由1 进行转发。
全文摘要
本发明提供一种6LoWPAN网络密钥建立方法,包括步骤1、内部路由器节点Rx接收到第一个来自路由器节点Ru的DIO消息后,向节点Ru发送消息请求得到组密钥;步骤2、Ru收到消息后,根据消息中的k值计算f(k)和f(k+Δ1);步骤3、Ru使用f(k)解密{f(k+Δ1)||KI}f(k)信息,然后把解密出的f(k+Δ1)与自己计算的值进行比较,如果相等,则Ru对Rx认证通过,否则认证不通过;步骤4、如果Rx认证通过,则Ru把KI作为与Rx之间的对密钥进行保存,并且向Rx回应消息;步骤5、Rx收到回应消息后,通过KI解密整个消息,得到Ru的接口标识IIu,然后和数据包源地址中的接口标识进行对比实现对Ru的认证;步骤6、如果Ru认证通过,Rx得到组密钥KG,并把Ru作为自己的父节点、存储两者之间的对密钥KI。上述利用多次Hash的密钥建立方法计算量小。
文档编号H04W12/04GK102448062SQ20121000352
公开日2012年5月9日 申请日期2012年1月6日 优先权日2012年1月6日
发明者刘钦明, 史红周, 杨德兴 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1