为了加密消息和产生消息认证码(MAC),SNEP采用了轻量级版本的RC5。使用了分离的密钥,加密用Kencr;产生消息认证码(MAC)的是Kmac;产生随机数的是Krand。所有的密钥都是由初始的主密钥自举的(Bootstrapped),这个主密钥是由基站和节点共享的。一个伪随机函数F用来派生出密钥。由于FK(X)=MAC(K,X)是引导密钥的函数,并且消息认证码(MAC)有很强的单向性,所以密钥是计算上独立产生的。这意味着如果有一个密钥被损坏,双方不用传送任何机密信息,就能派生出一个新的密钥。
SNEP另外一个重要特点是,它是由发送方A和接收方B共同维护的计数器(Counter)。每一次成功的传输之后,A和B双方将计数器累加,这将确保新鲜性和语义安全。对加密来说,计数器的值是一个输入。因此,即使相同的明文传输了两次,每次传输中的密文也是不同的。这为数据机密性提供了语义安全。
在SNEP里,A方为了发送数据片段D,发送以下消息给B方:
A→B:∈,M
其中,∈是加密数据片段,例如;M是消息认证码(MAC),例如;c是计数器的值。
注意:计数器的值c和加密消息∈首先连接到一起,即c∈,并被传给消息认证码(MAC)生成函数。得到的消息认证码(MAC)和加密消息∈一起传输。这提供了数据机密性和认证。因为加密和生成消息认证码(MAC)时,均用到计数器的值c,这也提供了语义安全。计数器还确保了新鲜性。然而,应用在普通SNEP里的计数器只能保证弱新鲜性,例如,它能确保相同的消息不被多个节点重放。而强新鲜性,通过发送一个新鲜数(Nonce)η,即一个不可预测的随机数,挑战发送方。为做到这一点,需要做到:(www.xing528.com)
1)节点A随机产生一个新鲜数ηA,把它和请求消息ρA一起发送。
A→B:ηA,ρA
2)节点B返回应答消息ρB和经消息认证码(MAC)计算后的ρB和新鲜值ηA。
如果消息认证码(MAC)验证是正确的,节点A知道当它发出请求时,节点B生成响应。如果需要数据机密和认证,第一个消息也能用普通SNEP。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。