发明名称 一种可自愈并带头节点撤销的密钥分发方法
摘要 本发明涉及一种可自愈并带头节点撤销的密钥分发方法,采用的预分发的方式,在传感器节点撒布在具体区域之前就预置了秘密信息,然后利用秘密信息计算群组会话期密钥;当有消息丢失或者错过某些会话期时,节点仍然可以根据前后会话期的自愈秘密信息恢复丢失的会话密钥,而无需基站或者头节点为其重传广播消息,为网络节省了大量的通信和能量开销。另外,如果网络中负责组密钥分发的头节点被攻陷,敌人可能利用它来分发错误的会话密钥,进而使整个网络的通信不再安全,这种情况下网络中的其他节点可以根据某些已有规则监控头节点的行为并协同起来对其进行撤销,这也为网络中节点的正常运行提供了节点间相互监督的机制,还保障了网络中密钥信息的安全性。
申请公布号 CN101951602A 申请公布日期 2011.01.19
申请号 CN201010504839.0 申请日期 2010.10.13
申请人 上海电力学院 发明人 温蜜;雷景生;袁仲雄;叶文珺;陈克非;郑燕飞
分类号 H04W12/04(2009.01)I;H04W84/18(2009.01)I 主分类号 H04W12/04(2009.01)I
代理机构 上海申汇专利代理有限公司 31001 代理人 吴宝根
主权项 1.一种可自愈并带头节点撤销的密钥分发方法,其特征在于,假设N = {N<sub>1</sub>,N<sub>2</sub>,……,N<sub>n</sub>}是一个组中所有参与节点的初始集合,并且假设被撤销的节点是不能再次加入网络的,即被撤销节点具有单调性, F<sub>q</sub>是一个有限域,其中q是一个大素数,所有的数学操作都在F<sub>q</sub>中进行,设H和H’是{0,1}→F<sub>q</sub>上的带密钥哈希函数,n,t是系统参数,方法具体步骤包括如下:1)秘密信息的生成和节点初始化:在初始阶段,网络中的传感器节点根据它们的部署位置或者功能被分为了若干个群组,对每一个群组比如组<i>l</i>,基站随机的选择一个屏蔽多项式<i>h</i><sub><i>l</i></sub><i>(x,y,z)∈F</i><sub><i>q</i></sub><i>(x,y,z)</i>,<img file="2010105048390100001DEST_PATH_IMAGE002.GIF" wi="421" he="31" />组<i>l</i>中的节点<i>N</i><sub><i>i</i></sub>将被存入私有秘密<i>S</i><sub><i>i</i></sub><i> = h</i><sub><i>l</i></sub><i>(i, y, z)</i>,同时,基站将随机地选择组<i>l</i>中一个节点<i>N</i><sub><i>g</i></sub>作为群组的头节点,并被存入组秘密信息<i>G</i><sub><i>g,l</i></sub>, <img file="2010105048390100001DEST_PATH_IMAGE004.GIF" wi="449" he="31" />------A接下来, 头节点N<sub>g</sub>随机选择一个素数作为密钥种子<i>K</i><sub><i>0</i></sub><i>∈F</i><sub><i>q</i></sub>来生成群组的会话密钥并且秘密保存起来,然后,头节点N<sub>g</sub> 随机选择一个初始随机数<i>s</i><sub><i>0</i></sub><i>∈F</i><sub><i>q</i></sub> 也同样秘密保存起来,N<sub>g</sub>再用单向哈希函数H为群组的第j个会话期计算<i>s</i><sub><i>j</i></sub> (<i>j≥1</i>):<img file="2010105048390100001DEST_PATH_IMAGE006.GIF" wi="169" he="29" />-------B<i>H </i><sup><i>j </i></sup>(.) 表示j次哈希运算,<i>s</i><sub><i>0</i></sub>是单向哈希链的种子密钥,<i>s</i><sub><i>j</i></sub> 将被秘密地发送给组<i>l</i> 中未被取消的节点;2)秘密信息广播:在群组的第j个会话期, 头节点N<sub>g</sub>先产生一个随机数<img file="2010105048390100001DEST_PATH_IMAGE008.GIF" wi="20" he="26" />作为第j次会话的自愈秘密信息,然后,头节点用另一个单向哈希函数H’()计算群组在第j个会话周期的会话密钥<img file="2010105048390100001DEST_PATH_IMAGE010.GIF" wi="24" he="26" />, 这里<img file="2010105048390100001DEST_PATH_IMAGE012.GIF" wi="139" he="30" />------C,设在第j个会话周期开始时,基站和头节点都已经知道了恶意节点集合<img file="2010105048390100001DEST_PATH_IMAGE014.GIF" wi="192" he="28" />,<img file="2010105048390100001DEST_PATH_IMAGE016.GIF" wi="85" he="30" />,<img file="2010105048390100001DEST_PATH_IMAGE018.GIF" wi="100" he="25" />,<i> s</i><sub><i>max</i></sub> 是 系统预先设定的最大会话周期数,接着,头节点广播如下消息:<img file="2010105048390100001DEST_PATH_IMAGE020.GIF" wi="517" he="29" />-------D这里撤销多项式<img file="2010105048390100001DEST_PATH_IMAGE022.GIF" wi="218" he="27" />;3)在第j个会话中,组会话密钥和自愈密钥的恢复合法性的验证:当一个未被撤销的节点<i>N</i><sub><i>i</i></sub>接收到消息<i>B</i><sub><i>j</i></sub>后,它将根据等式D计算<i>A</i><sub><i>j</i></sub><i>(x)</i>和<img file="2010105048390100001DEST_PATH_IMAGE024.GIF" wi="66" he="25" />在点i处的值,从而得出群组<i>l</i>在第<i>j</i>个会话中的组密钥:<img file="2010105048390100001DEST_PATH_IMAGE026.GIF" wi="229" he="28" />, where<img file="2010105048390100001DEST_PATH_IMAGE028.GIF" wi="68" he="28" />------E接着,节点<i>N</i><sub><i>i</i></sub> 用等式D计算出的<img file="370266DEST_PATH_IMAGE010.GIF" wi="24" he="26" />解密消息<img file="2010105048390100001DEST_PATH_IMAGE030.GIF" wi="206" he="31" />,从而得到自愈秘密信息<img file="2010105048390100001DEST_PATH_IMAGE032.GIF" wi="93" he="31" />;4)自愈性的验证:假设节点<i>N</i><sub><i>i</i></sub><i>∈N</i> 是在第j1个会话期加入群组的,并且在第j2 (<i>j1 &lt; j2 </i>)个会话期被群组取消,节点<i>N</i><sub><i>i</i></sub> 接收到广播的会话秘密信息<i>B</i><sub><i>j1</i></sub> (1≤j1 ) 和<i>B</i><sub><i>j2</i></sub> (1≤ j1 &lt; j2 ), 但是丢失了第j个会话期的广播消息<i>B</i><sub><i>j</i></sub> (j1 &lt; j &lt; j2 ),当接收到广播消息 <i>B</i><sub><i>j1</i></sub>和<i>B</i><sub><i>j2</i></sub>后, 节点<i>N</i><sub><i>i</i></sub> 可以用等式D计算出相应的会话期密钥<i>K</i><sub><i>j1</i></sub>和<i>K</i><sub><i>j2</i></sub>; 然后,节点<i>N</i><sub><i>i</i></sub> 用<i>K</i><sub><i>j2</i></sub>解密消息<img file="2010105048390100001DEST_PATH_IMAGE034.GIF" wi="234" he="28" />,从而得到第j1个会话期到第j2个会话期之间的自愈秘密信息<img file="DEST_PATH_IMAGE036.GIF" wi="125" he="29" />;最后,节点<i>N</i><sub><i>i</i></sub>可以用等式B按如下的格式恢复所有丢失的群组会话密钥:<img file="DEST_PATH_IMAGE038.GIF" wi="145" he="26" />,<img file="DEST_PATH_IMAGE040.GIF" wi="153" he="26" />, …,<img file="DEST_PATH_IMAGE042.GIF" wi="157" he="26" />;5)新节点的加入:当一个新成员在第j个会话期加入到群组以后,它就不允许得到之前会话期中群组的会话密钥,现在将一个标识为N<sub>v</sub>∈<i>N</i> 的节点加入到第j个会话期中时,群组的管理者如头节点,将为节点N<sub>v</sub>存入消息<i>S</i><sub><i>v</i></sub><i>=</i>{<i> s</i><sub><i>j</i></sub><i> ,h</i><sub><i>l</i></sub><i>(v, g, z) </i>};6)普通节点及头节点的撤销<b>:</b>a) 普通节点的撤销:当一个被撤销的节<i>N</i><sub><i>i’</i></sub> 接收到广播信息时,即对于任何一个节点 <i>N</i><sub><i>i’</i></sub><i>∈R</i><sub><i>j</i></sub><i> , A</i><sub><i>j</i></sub><i>(i’) = 0</i>,从等式C我们可以看出被撤销的节点是计算不出组密钥的;b) 头节点的撤销:一旦一个节点N<sub>u</sub> 检测到它所在组的头节点GH被攻陷或工作失常,并且它是跟节点N<sub>g</sub>同期部署进入网络的而且也愿意取代节点N<sub>g</sub>而成为组<i>l</i>新的头节点,它会发起一轮撤销过程,于是广播如下消息: Be-msg = {u, group header error type, group id <i>l</i>},当组l中的其它节点接收到这些广播消息后,如果某个节点N<sub>i</sub> 也觉察到头节点N<sub>g</sub>可能被攻陷并且愿意选择节点N<sub>u</sub>为新的头节点,那么它将发送消息<i>msg(i, u)</i> = <i>h</i><sub><i>l</i></sub><i>(i, u, s</i><sub><i>max</i></sub><i> + 1)</i> 给节点N<sub>u</sub>,这里 <i>s</i><sub><i>max</i></sub> 是系统预先设定的最大会话周期数并且是公开的参数;否则,节点N<sub>i</sub> 则会丢弃节点N<sub>u</sub>的广播消息而不做任何回应.当节点N<sub>u</sub>接收到其邻居节点的回复消息后,它会检查消息的发送者是否已被撤销,如果节点N<sub>u</sub>成功地得到了<i>2t</i> 个未被撤销节点的信任并接收到相依回复消息,那么它将可计算出 <i>h</i><sub><i>l</i></sub><i>(x, u, s</i><sub><i>max</i></sub><i>+1)</i>,再结合部署时基站发给节点N<sub>u</sub>的私密信息<i>S</i><sub><i>u</i></sub><i> = h</i><sub><i>l</i></sub><i>(u, y, z)</i>, 它将派生出下列多项式:<img file="DEST_PATH_IMAGE044.GIF" wi="336" he="49" /><img file="DEST_PATH_IMAGE046.GIF" wi="309" he="29" />------F于是,节点N<sub>u</sub>将之前的头节点N<sub>g</sub>加入到被撤销节点集合中得<img file="DEST_PATH_IMAGE048.GIF" wi="113" he="27" />,并随机选择一个密钥生成种子<img file="DEST_PATH_IMAGE050.GIF" wi="54" he="28" />和<img file="DEST_PATH_IMAGE052.GIF" wi="49" he="28" />为其所在组的下一个会话周期的密钥生成做准备,接下来, 节点N<sub>u</sub>可以根据步骤2)开始为后续网络中群组的安全通信提供密钥的生成和自愈维护。
地址 200090 上海市杨浦区平凉路2103号