SPINS采用安全网络加密协议(Secure Network Encryption Protocol,SNEP)来提供数据机密性、数据完整性、数据新鲜度、数据认证,并采用μTESLA提供广播认证。
1)符号
使用如下符号描述SPINS及其加密操作:
(1)A、B表示主体,比如通信结点。
(2)NA表示A产生的一个随机数,一个随机数就是一个不可预测的比特串,通常用于实现新鲜度。
(3)χAB表示A、B共享的主密钥即对称密钥,主密钥的表示符号没有方向性,即χAB=χBA。
(4)KAB和KBA表示A、B共享的加密密钥,A和B根据通信方向和主密钥来推导加密密钥,即KAB=FχAB(1),KBA=FχAB(3),其中F表示伪随机函数(Pseudo Random Function,PRF)。
(5)和表示A、B共享的消息认证码密钥。A和B根据通信方向和主密钥来推导消息认证码密钥,即(2),(4),其中F表示伪随机函数。
(6){M}KAB表示使用加密密钥KAB加密的消息M。
(7){M}〈KAB·IV〉表示使用密钥KAB和初始向量IV上加密的消息M,IV是指使用的加密方式,比如加密分组链(Cipher Block Chaining,CBC)、输出反馈方式(Output Feedback Mode,OFM)等计算方式。
(8)MAC,M)表示使用密钥计算消息M的消息认证码。
一个安全信道就是一个能提供数据机密性、数据完整性、数据新鲜度、数据认证的信息。
2)SNEP
SNEP具有许多独特的优点。SNEP通信开销低,每条消息只增加8字节。像许多加密协议一样,SNEP采用了一个计数器,在两个端点维持状态,而不需要发送计数器值。SNEP实现语义安全,这是一个很强的安全特性,能够防止偷听者从加密消息中推导出消息内容。同样,其简单而高效的协议也能提供数据认证、重放保护、弱消息新鲜度。
数据机密性是最基本的安全语义之一,几乎每个安全协议都包含了数据机密性。通过加密能够实现简单的机密性,但是纯加密是不够的。另一个重要的安全特性是语义安全,语义安全确保即使偷听者了解同一个明文的若干个密码编码,仍然不能得到这个明文的任何信息。例如,即使攻击者获得一个加密的0比特和一个加密的1比特,但是攻击者仍然不知道一个新加密比特是0还是1比特。安全语义的基本实现技术就是随机化,即在使用链式加密函数如DES-CBC加密消息前,在消息前面插入一个随机比特串。这样能够防止攻击者在知道采用相同密钥的明文-密文对的条件下推导出加密消息的明文。
但是,在无线信道上发送随机数据需要较多能量,所以SPIN采用另一种没有额外传输开销的加密机制来实现安全语义,即采用两个端点共享两个计数器,每个通信方向一个计数器,作为CTR的分组密码。管理计数器的传统方法是将计数器值与每条消息一起发送。但是由于采用了传感器,通信双方可以共享计数器,每当通信一个分组后就递增计数器值,所以发送消息时不用发送计数器值,从而节省了能量。
为了实现通信双方的数据认证和数据完整性,通常采用消息认证码。对于不同的加密原语,不能重复使用相同的加密密钥,以防止原语之间的交互,原语交互有可能引入安全弱点。因此,SPIN推导加密操作和消息认证码操作的独立密钥。两个通信结点A和B共享一个主密钥χAB,并且可以使用伪随机函数F推导出每个通信方向的独立加密密钥和消息认证码密钥,即加密密钥KAB=FχAB(1),KBA=FχAB(3),=FχAB(2),=FχAB(4)。
SNEP就是由这些机制有机地组成的。加密数据的格式为E={D}〈K,C〉,D表示数据,K表示加密密钥,C表示计数器。消息认证码为M=MAC(K′,C E)。A发送给B的完整消息如下:
SNEP具有如下特点:
(1)语义安全:因为每通信完一条消息后递增计数器值,所以同一条消息的每次加密均不同,计数器值足够长,在结点存活期间不会重复。
(2)数据认证:假如一条消息通过消息认证码来验证,那么接收结点就能知道本条消息是哪个合法发送结点发送来的。
(3)重放保护:利用消息认证码中的计数器值能够预防过时消息的重放,假如在消息认证码中没有使用计数器,对手就很容易重放消息。
(4)弱新鲜度:假如一条消息通过了认证,那么接收结点知道本条消息必定是在其前一条正确接收消息之后发送的,从而强化了消息排序,得到了弱新鲜度。
(5)通信开销低:每个通信端点都维护计数器状态,不必随着每条消息发送计数器状态,假如未通过消息认证码验证,那么接收结点可以按照固定小整数递增计数器值的规则,从消息丢失中恢复过来。如果仍然未能通过消息认证码验证,那么通信双方就要执行计数器交换协议。
非加密SNEP只强化结点B范围内的消息发送顺序,因而只提供了弱数据新鲜度,不能对结点A绝对保证结点B是响应结点A中的一个事件产生的消息。
结点A通过NA,即一个随机数,要求其长度满足不可能穷尽所有可能的搜索的随机数,来实现结点B的响应的强数据新鲜度。结点A随机产生NA,并将其与请求消息RA一同发送给结点B。实现强新鲜度的最简单方法就是结点B按照认证协议将其随机数与响应消息RB一同返回给结点A。但是,在计算消息认证码的过程中间接使用随机数,优化了强新鲜度的实现过程,不需要返回随机数。提供结点B的响应的强新鲜度的完整SNEP协议如下:
假如通过了消息认证码验证,那么结点A知道结点B的响应是在结点A发送完请求之后产生的。假如需要数据机密性和数据认证,那么第一条消息也可以使用非加密SNEP,如式(5-2)所示。
为了实现短小SNEP消息,假定通信结点A和B相互知道对方的计数器值CA和CB,因此不需要在每条加密消息中都增加计数器值。但是在实际中,消息可能丢失,共享计数器状态可能变得不一致。因此,需要采用计数器交换协议实现计数器状态的同步。为了引导计数器初始值,使用如下的计数器值交换协议:
计数器值不是秘密数据,因此不需要对计数器值加密。但是,计数器值交换协议需要强新鲜度,所以通信双方都使用其计数器值作为随机数,并假定计数器值交换协议绝不会对同一个计数器值运行两次,因此必要时可以递增计数器值。消息认证码密钥K′AB和K′BA间接将本消息约束为通信结点A和B,并且确保本消息的通信方向,因此消息认证码不必包含A或者B的名称。
结点A若是知道结点B的计数器值CB不再是同步的,就可以使用NA请求结点B的当前计数器,以确保应答的强新鲜度。
为了预防拒绝服务攻击,即攻击者连续发送虚假消息,欺骗结点执行计数器同步,结点可以利用其发送的各条加密消息来发送计数器值。另一种计数器状态同步DoS攻击的检测方法是在消息中增加一个新的、与计数器无关的较短消息认证码。
3)μTESLA
TESLA协议提供高效的广播认证。但是,TESLA不是为传感器网络这种有限计算环境设计的,理由如下:
(1)TESLA采用了数字签名认证来初始化分组,对于传感器结点,数字签名的计算开销太高,即使将数字签名程序代码安装到存储器中也是一个挑战。
(2)标准TESLA的每个分组约有24B的开销。对于连接工作站的网络,这个开销是无关紧要的,但是传感器结点发送的是极短消息,每条消息大约只有30B,暴露每个分组前一个间隔的TESLA密钥完全不可能。由于有64bit密钥以及消息认证码,所以TESLA的有关部分占了一个分组长度的50%以上。
(3)单向密钥系列不适用于传感器结点的存储器,所以TESLA不适用于无线传感器结点的广播数据认证。
μTESLA可以解决TESLA应用于WSN中面临的如下问题和不足:
(1)TESLA采用数字签名认证来初始化分组,这种方法对于WSN结点来说代价太高,而μTESLA只采用对称机制。
(2)暴露每个分组的密钥需要太多的发送能量和接收能量,而μTESLA在每个时段暴露一次密钥。
(3)在WSN结点中存储单向密钥系列的代价很高,μTESLA限制了待认证结点的数量。
广播认证需要非对称机制,否则任何有安全风险的结点都能够伪造发送结点发送的消息。但是,非对称加密机制存在很高的计算、通信、存储开销,因此不能用于资源很有限的WSN装置。μTESLA可以克服这个问题,它延迟了对称密钥的暴露时间,由此引入了非对称性,得到了一个高效的广播认证方案。
μTESLA要求中心结点和WSN结点之间实现松散时间同步,每个结点都知道最大同步误差的上限。为了发送一个待认证分组,中心结点利用一个当时是秘密的密钥来计算该分组的消息认证码。一个结点接收到一个分组后,根据其松散同步时钟、最大同步误差以及密钥暴露的时间表就能够验证该分组的消息认证码密钥是否还未被暴露。由于对接收结点确保了只有中心结点知道该消息的认证码密钥,所以可以对接收结点保证该分组在传输途中不会被对手所篡改。结点将该分组存储在缓存器中。到达密钥暴露时刻,中心结点给所有接收结点广播验证密钥。一个结点在接收到暴露密钥后,就能够验证密钥的正确性了。假如密钥验证正确,那么结点就可以使用该密钥来认证其缓存器中存储的那个分组。
每个消息认证码密钥就是一个密钥链中的一个密钥,是通过公共单向函数F产生的。为了产生单向密钥链,发送结点随机选择该序列中最后的一个密钥Kn,对其反复进行单向函数F运算,计算出所有其他密钥Ki=F(Ki+1)。每个结点都按照安全的、认证的方式,运用了SNEP安全模块,所以易于实现时间同步和重新得到单向密钥链中待认证的密钥。
例如,图5-4所示为μTESLA单向密钥链导出、时间间隔、发送结点广播的若干分组。单向密钥链中的每个密钥都对应一个时间间隔,在一个时间间隔内发送的所有分组都采用同一个密钥进行认证。发送结点每隔两个时间间隔就暴露其用来计算消息认证码的密钥。假定接收结点实现了松散时间同步,并且知道K0即该单向密钥链的第一个密钥。在时间间隔1发送的分组P1和P2包含一个消息认证码和密钥K1。在时间间隔2发送的分组P3包含一个消息认证码和密钥K2。至此,接收结点还不能认证任何分组。假定分组P4、P5、P6全部会丢失,暴露密钥K1的分组也会丢失,因此接收结点仍然不能认证分组P1、P2或者P3。中心结点在时间间隔4广播密钥K2,结点通过验证K0=F[F(K2)]来认证密钥K2。结点推导K1=F(K2),所以能够使用密钥K1认证分组P1、P2,使用密钥K2认证分组P3。
图5-4 μTESLA单向密钥链
密钥暴露与分组广播无关,但是受时间间隔约束。在μTESLA中,发送结点在一个特殊分组中周期性地广播当前密钥。
4)μTESLA详细描述(www.xing528.com)
μTESLA包含多个阶段:发送结点建立阶段、待认证分组广播阶段、新接收结点引导阶段、广播分组认证阶段和结点广播通过认证的分组阶段。
(1)发送结点建立阶段
发送结点首先产生一个密钥链,即单向密钥链。为了产生长度为n的单向密钥链,发送结点随机选择最后一个密钥Kn,并连续进行单向函数F运算,产生剩余密钥Kj=F(Kj+1)。
由于F是单向函数,所以任何人都能够做前向计算,比如已知Kj+1就能够计算出K0,K1,…,Kj,但是由于生成函数是单向的,所以任何人都不能进行后向计算,比如已知K0,K1,…,Kj,不能计算出Kj+1。
(2)待认证分组广播阶段
时间被划分成均匀的时间间隔,发送结点使单向密钥链中的每个密钥都关联一个时间间隔。在时间间隔i内,发送结点采用该间隔的密钥Ki计算该间隔上各个分组的消息认证码。
在时间间隔(i+δ)内,发送结点暴露密钥Ki。一般要求密钥暴露时延大于发送结点与任意接收结点之间的往返传输时延,因此密钥暴露时延是若干个时间间隔的10倍。
(3)新接收结点引导阶段
在单向密钥链中,密钥是自行认证的。接收结点使用一个已认证的密钥可以很容易且高效地认证其余的密钥。例如,接收结点接收到单向密钥链中的密钥Ki,则容易认证Ki+1,验证Ki=F(Ki+1)。为了引导μTESLA,每个接收结点都必须将其中一个密钥作为整个单向密钥链的第一个密钥。其他要求包括发送结点和接收结点的松散时间同步,接收结点要知道单向密钥链中各个密钥的暴露时间表。采用强新鲜度机制和点对点认证能够建立松散时间同步和待认证密钥链的第一个密钥。接收结点M通过请求消息给发送结点S发送NM。发送结点S应答的消息包含其当前时间TS在前一个时间间隔i使用的密钥Ki即该单向密钥链的第一个密钥、时间间隔i的起始时间Ti、一个时间间隔的长度Tint、暴露时延δ,其中Ti、Tint是对暴露时间表的描述。
因为不要求数据机密性,所以发送结点不必加密该数据。消息认证码使用该结点与中心结点共享的密钥认证该数据,NM允许该结点验证新鲜度。这里没有采用TESLA的数字签名技术,而是采用结点到中心结点的待认证信道来引导待认证广播。
(4)广播分组认证阶段
接收结点接收到包含该消息认证码的分组后,必须确保该分组不是对手的哄骗分组。对手已经知道了一个时间间隔的暴露密钥,并且知道如何使用这个密钥来计算这个消息认证码,所以能够伪造这个分组。接收结点必须确保这个分组是安全的,这意味着发送结点还没有暴露用于计算输入分组的这个消息认证码的密钥。发送结点和接收结点必须实现松散时间同步,接收结点必须知道密钥暴露时间表。假如输入分组是安全的,那么接收结点存储这个分组,一旦其对应密钥被暴露,就能够验证该分组。假如输入分组不是安全的,即该分组经历了异常长的时延,那么该分组很可能已经被对手篡改过了,因此接收结点要丢掉该分组。
接收结点一旦接收到一个新密钥Ki,则认证该密钥,即进行少数几次单向函数F运算Kv=Fi-v(Ki),检查Ki是否与其最近所知的可信密钥匹配。假如两个密钥匹配,那么新密钥Ki是可信密钥,接收结点可以认证在时间间隔v至i上发送的所有分组。接收结点还要用Ki替换已存储的Kv。
(5)结点广播通过认证的分组阶段
假如一个结点广播了一个已通过认证的数据,则会产生新的挑战,其原因包括:结点的存储器容量有限,不能存储单向密钥链的各个密钥;根据初始生成的密钥Kn重复计算每个密钥的计算开销很高;一个结点可能不会与其所有相邻结点共享同一个密钥,因此发送该密钥链中已通过认证的第一个密钥涉及代价甚高的点对点密钥协议;结点将已暴露的密钥广播给所有接收结点的代价甚高,会耗尽其已有的电池能量。有两种方法可以解决这个问题:一是结点通过中心结点来广播其数据,结点按照认证方式采用SNEP将其数据发送给中心结点,中心结点接收到该数据后再广播该数据;二是结点广播其数据,中心结点保存单向密钥链,按需给广播结点发送密钥。为了节省广播结点的能量,中心结点也广播暴露了的密钥,同时(或者)执行新接收结点的初始引导规程。
5)SPINS实现
可以采用Smart Dust传感器平台来实现SPINS,其配置如表5-1所示。其中8KB只读程序存储器用于存储TinyOS、SPINS以及传感器网络应用的程序代码。
表5-1 Smart Dust传感器平台的配置
(1)分组密码
传感器网络的计算能力和存储能力要求只能使用对称密钥的块加密算法。一种比较合适的算法是RC5算法。RC5算法简单高效,不需要很大的表来支持。最重要的就是该算法是可定制的加密算法,可定制的参数包括:分组大小(32/64/128bit可选)、密钥大小(0~2 040位)和加密轮数(0~255轮)。对于要求不同、结点能力不同的应用可以选择不同的定制参数,非常方便灵活。该分组算法的基本运算单元包括加法、异或和32位循环移位。RC5算法的加密过程是数据相关的,加上三种算法混合运算,有很强的抗差分攻击和线性攻击的能力。不过对于8位处理器来说,32位循环移位的开销会比较大。RC5算法有几种运行模式:如果使用CBC方式,其加解密过程不一样,需要两段代码完成;如果使用计数器(CounTeR,CTR)模式,其加解密过程相同,节省代码空间,而且同样保留CBC模式所拥有的语义安全特性。所以可以选择CTR模式实现RC5算法。但是,RC5算法采用了32位的数据循环操作,而Smart Dust传感器平台只支持8bit单比特循环操作。尽管能够成功表达RC5算法,但是RC5的公共库太大而不能安装到Smart Dust传感器平台上,因此从RC5的公共库中选择了一部分安装,将代码量减小了40%。
(2)加密函数
为了节省代码存储空间,加密、解密都采用相同函数。分组密码的CTR模式具有这种特性,如图5-5(a)所示。CTR模式采用的是流密码,因此密文的长度正好等于明文的长度,而不等于分组密码长度的整数倍。WSN特别需要这个特性,消息发送和接收会消耗很多能量,消息越长,数据被损坏的概率就越高。CTR模式要求计数器操作正确,重复使用计数器值会严重影响安全性。CTR模式提供语义安全。由于密码填充是根据不同计数器产生的,所以不同时间发送的相同明文会采用不同的密码加密。对于不知道密钥的攻击者,这些消息似乎是两个不相关的随机串。由于发送结点和接收结点共享一个计数器,所以消息中不必包含计数器值。假如两个结点的计数器不同步,那么这两个结点可以运用SNEP和强新鲜度直接发送计数器值,重新实现同步。
(3)新鲜度
CTR加密自动提供弱新鲜度。由于发送结点在每条消息之后递增计数器值,所以接收结点通过检验所收消息是否具有单调递增计数器值就可验证弱新鲜度。对于要求强新鲜度的应用,发送结点随机生成一个NM,即一个不可预测的64位数值,并将这个NM添加到发送给接收结点的请求消息中。接收结点产生响应消息,并且在其消息认证码中包含这个NM。假如响应的消息认证码通过了验证,那么发送结点就知道这个响应是在其发送请求消息之后产生的,从而实现了强新鲜度。
(4)随机数的生成
结点有其专有的传感器、无线接收机以及时间安排过程,因此可以据此推导随机数。为了使能量需求最低,可以采用消息认证码函数作为伪随机数生成器(Pseudo-Random Number Generator,PRG),同时采用伪随机数生成密钥Xrand。维持一个计数器C,每生成一个伪随机分组后就将C的值加1。可以计算出第C个伪随机输出分组为MAC(Xrand,C)。假如C发生卷绕,虽然这实际上不可能发生,因为结点在此之前会先耗尽其能量,那么可以根据主密钥和当前PRG密钥,采用消息认证码函数作为伪随机函数(Pseudo-Random Function,PRF),就能推导出一个新的PRG密钥,即Xrand=MAC(X,Xrand)。
图5-5 SPINS实现
(5)消息认证
在这里需要安全的消息认证码。因为要求重复使用分组密码,所以采用CBC-MAC。CBC-MAC的计算方框图如图5-5(b)所示。
采用以下权威方法可以实现消息认证和消息完整性。假定有一条消息M、一个加密密钥K、一个消息认证码密钥K′,那么可以使用结构{M}K,MAC(K′,{M}K)。这个结构能够防止结点解密错误密文,而解密错误密文可能存在安全风险。
对每个分组分别计算消息认证码,这种实现方法非常适合用于避免WSN环境中的有损通信,而且消息认证码可以用于检验消息的认证和完整性,因此不需要诸如CRC之类的机制。
(6)密钥设置
SPINS密钥的建立依赖于主密钥,开始时由中心结点和一个传感器结点共享主密钥。
将结点A和中心结点S共享的主密钥称为共享密钥XAS,其他密钥都是从初始主密钥推导出来的。图5-5(c)给出了SPINS的密钥推导规程。可以采用PRF推导密钥:FK(x)=MAC(K,x),F是PRF。因此,可重复使用的分组密码更多。由于消息认证码的加密特性,所以F必须是一个良好的伪随机函数。按照这种方法推导出来的所有密钥都是独立计算出来的。即使攻击者能够攻克其中一个密钥,利用这个密钥的信息也无法帮助攻击者找到主密钥和其他密钥。假如检测出一个密钥已经不安全了,那么通信双方就可以重新推导出一个新密钥,而无须发送任何秘密信息。
6)SPINS性能评估
(1)代码长度
如表5-2所示为在TinyOS中安全模块的3种实现的代码长度。最小版实现约占Smart Dust传感器平台程序存储器容量的20%。最小版实现和最快版实现之间的差异在于变量循环函数的实现不同。μTESLA协议的代码额外占用了574B。加密库和SPINS协议总共约占2KB的程序存储器容量,这对于大多数WSN应用而言是可以接受的。
表5-2 安全模块的代码长度列表(单位:B)
(2)时间性能
如表5-3所示为安全模块的时间性能。从表5-3中可以看出,密钥建立的时耗相对较大,约4ms。最快版完成加密一条16B的消息和计算其消息认证码的总时耗不足2.5 ms,而最小版的时耗不足3.5ms。因为Smart Dust传感器平台上结点的通信速率为10Kb/s,所以对于发送的每条消息都可以执行完密钥建立、加密以及一个消息认证码的计算。
表5-3 安全模块的时间性能
各个安全模块的RAM占用量分别是:RC5占用80B,μTESLA占用120B,加密/消息认证码占用20B。
(3)能耗
按照30B分组来计算能耗。如表5-4所示为SNEP协议的计算与通信的能量开销。其中,发送能耗明显高于计算能耗。由于采用了流密码进行加密,所以加密消息的长度等于明文的长度,并给每条消息增加了8B的消息认证码开销。由于消息认证码具有完整性保证,所以不需要占2B的CRC,因此净开销为6B,发送这6B的能耗是发送一个30B分组总能耗的20%。
采用μTESLA进行消息广播的能耗等于每条消息的认证能耗。此外,μTESLA要求进行周期性的密钥暴露,但是这些消息与路由更新组合在了一起。假如WSN必需路由信标,那么μTESLA密钥的暴露几乎没有能耗,这是因为发送与接收的能耗明显高于计算能耗。假如路由信标不是WSN必需的,并且能够间接建立Ad Hoc多跳网络,那么密钥暴露的开销是每个时间间隔发送一条消息,而与网内流量模式无关。
表5-4 给WSN增加安全协议后的能耗
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。