组密钥管理中的d叉树数据结构设计

  • 格式:pdf
  • 大小:159.39 KB
  • 文档页数:3

CN43—1258/TP ISSN 1007—13OX 计算机工程与科学 

COMPUTER ENGINEERING&SCIENCE 2006年第28卷第1O期 

Vo1.28,No.10,2006 

文章编号:1007—130X(2006)10-0013—03 

组密钥管理中的d叉树数据结构设计 

Design of d——ary Tree Structures 

for Group Key Management 

陆正福 ,何英 LU Zheng-fu ,HE Yin (1.云南大学数学系,云南昆明650091:2.昆明学院计算机系,云南昆明650031) (1.Department of Mathematics,Yunnan University,Kunming 650091; 

2.Department of Computer Science,Kunming College,Kunming 650031,China) 

摘要:cf叉树数据结构与算法在互联网多播安全的层次化组密钥管理的实现中是极其重要的。我们设计了适用于 

层次化组密钥管理的cf叉树数据结构表示与算法,并给出了相应的存储结构中随机定位所需要的数学性质。 Abstract:The d—arc tree structures are paramount in the implementation of hierarchical group key management for the Internet multicasting security ̄In this paper,we describe the d—arc tree structure representation and algorithms,and pres— 

ent the mathematical properties for the random location in the corresponding memory structures. 

关键词:多播安全;组密钥;d叉树;算法设计;密钥图;密钥树 Key wolds:multicasting security;group key;d—arc tree;algorithm design;key graph;key tree 中图分类号:TP309 文献标识码:A 

1 引言 

互联网多播安全,包括IP多播安全、应用层多播安全 

等,都会涉及三个不同于单播安全的问题:组密钥管理、多 播源认证和多播水印协议。后两者都涉及前者,并以前者 

为基础,因此组密钥管理是关键的基础问题。已有很多学 者研究了其中的问题和方法『1 ],我们在文献[3]中给出了 

IP多播安全中代表性的方案及其分类框架,其中多级分层 密钥类别的组密钥管理是受到重视的一类方法,IETF的 RFC2627文档中给出的LKHE 就属于此类别。从数据结 

构与算法的角度看,该类方法的实现通常会涉及到树形数 据结构及其相关的算法。 

在一个集中式的密钥管理方案中,如果多播组的规模 

大且动态性高(例如大规模动态视频会议),则密钥服务器 将成为性能瓶颈。因此,如何给出分层密钥类别的组密钥 

管理的数据结构及其算法,已成为组密钥服务器(GKS)实 现的一个关键问题。 文献[4,5]研究了大规模动态多播组的批量密钥更新 问题与算法,提出了将密钥更新分解为两个阶段:第一个阶 

段为内部更新阶段,主要是标记应该更新的密钥,这在树形 数据结构中表现为从叶子开始向根逐节点移动的操作;第 二个阶段为外部更新阶段,主要是利用辅助密钥乃至专用 

密钥完成组密钥的更新,该阶段要实际完成密钥的生成并 更新密钥的多播传输,涉及密钥树的自底向上、自左向右的 

分层遍历。我们将上述组密钥服务器研制实践中遇到的数 据结构与算法加以抽象,得到如下描述: (1)各类密钥及其之间的关系反映为cf叉树(研究表 明『2],d的最优取值一般应满足cf≥3)。 

(2)组密钥管理反映为该d叉树上的操作:①逆向定 

位,从叶子开始沿着通往根部的路径往根部移动;②逆向 分层遍历,从底层开始逐层更新(即自底向上、自左向右的 

分层遍历)。 树形数据结构是一种重要的应用广泛的非线性数据结 

构,在数据结构、图形学等领域的基础文献中都普遍给出了 

树的链式存储结构,其操作一般是从根部开始的。如果套 搬这些结构和算法,则逆向定位和逆向分层遍历等操作都 

将是低效的。 

÷ 收稿日期:2005-01—21;修订日期:2005—06—02 基金项目:云南省自然科学基金资助项目(2O02FO012M);云南大学理工科校级科研重点项目(2003Z010C) 作者简介:陆正福(1965一),男,安徽桐城人,副教授,研究方向为协议工程、信息安全、网络计算等;何英,讲师,研究方向为网络管 理。 通讯地址:650091云南省昆明市云南大学数学系Tel;(0871)5031190;E-mail;zhflu@ynu.eau.cn Address:Department of Mathematics,Yunnan University,Kunming,Yunnan 650091,P.R China 

13 维普资讯 http://www.cqvip.com 本文从研制高性能组密钥服务器的需求出发,研究上 文所抽象出的d叉树数据结构与算法。其主要的设计思 

想表现为:算法设计的性能需求优先于空间因素的考虑,因 此在有关的数据结构和算法设计方面以适当的空间代价换 取时间。 

2问题抽象与逻辑设计 

本节根据图论和数据结构的一般术语,对有待研究的 

数据结构和算法进行问题抽象和逻辑设计。按照数据结构 中的通常表现方法,我们将分层的密钥体系表达为倒立的 

有根树,根节点在上部,叶节点在下部。根节点代表组密钥 (为全体用户所共享,属于会话密钥SK范畴),叶节点代表 用户的专用密钥(各个用户所独占),中间的分支节点代表 

辅助密钥(某用户子集所共享,辅助组密钥的更新,属于密 钥加密密钥KEK的范畴)。如图1所示,这是一棵3叉树。 

第0层 

第l层 

第2层 

图1层次化的密钥树 

图1是一棵满3叉树,但节点分成两种情形:实节点 (以灰黑色填充的圆圈表示)、虚节点(以无填充的圆圈表 

示)。对于叶节点而言,如果它对应一个用户,则它是实节 

点,否则是一个虚节点。对于非叶子节点而言,如果它的所 有子节点都是虚节点,则其自身是虚节点,否则是实节点。 

2.1树中的节点设计 

设树高为h,根节点编为第0层,自上往下,顺序增加 层的编号,最底层编为^一1层。于是可将树中的节点设计 

为: 

I (H,D l K l R l F l 

其中,H为节点的层编号:0,1,2,…,h一1;I为节点的 

层内编号:0,1,…,d 一1,z表示节点处于第z层,z一0,1, 

2,…,h一1;K为指向密钥的指示量(如指针、下标、记录号、 关键字等,可依设计而定);R为整型量,记录密钥更新次 

数;F为整型量,记录该节点的子节点的实节点个数,F=0 

表示本节点为虚节点。节点虚实的定义具有递归性。对于 叶节点而言,F=0表示虚节点,F一1表示实节点。对于叶 

节点的父节点而言,F一0表示虚节点,否则(F一1,2,…, d)它是实节点。依此,可以向树的上方类推。 

从上述的节点设计可以看出:(1)没有使用节点间的指 

针(表示节点间的相对链接关系),而是使用了(H,D这样 

的编号(直接表示节点的位置);(2)该树是一棵满d又树。 

我们采用了标识节点虚实的做法,使得该树可以容纳d 一 1个节点。至于节点虚实的调整和变化是本文后继相关算 

法中涉及的操作。 

2.2树中的操作 

本节将在3.1节数据描述的基础上给出其上的操作。 

从文献[4]可以抽象出如下几类操作: 

14 (1)初始化叶节点。 操作结果为: 

其中,K的指向为空,表示为*。 

(2)N达操作:将某个叶子节点的标记F置为1,表示 

用户到达。若F一1,则K指向密钥。我们将经过到达操 作的节点称为到达节点。操作结果为: 

(^一1,D l K 1 0 

(3)离开操作:将某个实叶子节点的标记F置为0,表 示一个用户离开,我们将经过离开操作的节点称为离开节 

点。操作结果为: 

I(^一1,D I * l 0 1 0 I 

(4)配对操作:将某个已有的实叶子结点的K字段更 换为新的值,相应的节点称为配对节点,表示一个老用户离 

开,并且一个新用户到达,新用户使用了老用户的位置。 

(^一1,D I K~ 

(5)确定离开节点到根节点的路径上的每一个节点,并 

使得它们的标记R为d。 

I !垡: I I I 三: 

计算F的值,若F=0,则标记R=0。 

O I O 

(6)确定到达节点到根节点的路径上的每一个节点,并 使得它们的标记R加1,计算F的值。 

l !旦:! I l 墨±± I 三: l 

(7)确定配对节点到根节点路径上的每一个节点,并使 

得它们的标记R加1,F的值保持不变。 

I ! :! I I 垦±± I 兰 I 

(8)自底向上、从左到右的遍历操作,对应于整棵树的 

初始化和外部更新。 

3存储设计 

3.1存储结构的选择 

根据第3节抽象出来的节点和操作,操作(1)、(2)、 

(3)、(4)是易于做到的,但操作(5)、(6)、(7)、(8)都涉及到 树中自底向上的操作,甚至自左至右的操作。考虑到算法 

的效率、时间和空间的取舍等,我们将上述逻辑意义上的树 结构和算法结合程序设计语言中的支持机制,设计了三类 

存储结构和算法,即: 

(1)C/C++语言的二维数组; (2)Java语言的二维数组; 

(3)c/c++语言的指针数组和一维数组。 

第一类结构易于理解,但空间浪费大;第二类结构的第 

二维可以不等长,没有空间浪费;第三类结构利用了c/c+ 

+语言的指针数组和一维数组,实现不等长的二维数组,没 有空间浪费。不论采用哪种结构,都涉及随机存取的问题, 

必须保证算法的效率。所以,上述三种存储结构不包括链 

式结构。

 维普资讯 http://www.cqvip.com