无线传感器网络中HC - 128和Rabbit加密方案的比较分析
1. 引言
无线传感器网络(WSN)在普适计算领域是一个新兴的研究方向,广泛应用于各个领域。它由大量微小的传感器节点组成,这些节点需要进行感知、计算和通信等操作,但它们的内存和计算资源都非常有限。
在军事、国土安全、医疗保健和工业自动化等传感器网络应用中,安全至关重要。然而,增强安全强度会带来计算、通信和管理开销的增加,这可能会影响网络的可扩展性、服务可用性和鲁棒性。因此,设计一个合适的端到端安全架构是确保WSN在普适应用中可用性的关键挑战。
从2004年11月到2008年4月,欧盟ECRYPT网络开展了eSTREAM项目,旨在寻找“可能适合广泛采用的新流密码”。经过多个阶段的努力,该项目确定了几种适用于硬件和软件应用的算法。
2. 相关工作
- Meiser等人 :在内存资源受限的小型嵌入式8位微控制器上实现了Dragon、HC - 128、LEX、Salsa20、Salsa20/12和Sosemanuk等流密码。除Salsa20外,其他流密码在密钥流生成速度上都比AES快。在内存方面,Salsa20、Salsa20/12和LEX的实现几乎和AES一样紧凑,而Dragon和Sosemanuk需要更多的内存资源,对于内存受限的嵌入式应用可能不是最优选择。Salsa20/12是内存受限的8位嵌入式微控制器上AES密码的唯一有前途的替代方案。
- Eisenbarth等人 :对近期发表的轻量级密码学实现进行了调查,并与该领域的最新成果进行了比较。该调查涵盖了对称和非对称密码的硬件和软件实现。
- Fournel等人 :在专用传感器平台上研究了包括DRAGON、HC - 256、HC - 128等多种流密码的实现。虽然他们没有对这些密码在WSN受限环境中的使用给出建议,但发现SNOW v2.0在传统平台和高度受限环境中都具有较快的速度。
- Lim等人 :通过在真实传感器测试床上实现Dragon流密码,证明了基于软件的密码学构建块在传感器网络中的可行性。他们的方案使用消息认证码(Dragon MAC)来实现双方认证、数据完整性和保密性。
3. 算法描述
eStream项目将流密码分为两类:Profile 1和Profile 2。Profile 1适用于对吞吐量有高要求的软件应用,Profile 2适用于资源受限的硬件应用,如存储、门数或功耗有限的情况。
| 算法名称 | 算法类型 | 作者 | 创建日期 | 建议环境 | 知识产权 | 速度 | 有效密钥长度 | 初始化向量 | 内部状态 |
|---|---|---|---|---|---|---|---|---|---|
| HC - 128 | 同步流密码 | Hongjun Wu | 2004年前 | SW | 免费使用 | 3.05 - 3.6周期/字节 | 128位 | 128位 | 32768位 |
| Rabbit | 同步流密码 | Martin Boesgaard等 | 2003年2月 | SW, HW | 专利保护,但非商业用途免费 | 3.7 - 9.7周期/字节 | 128位 | 64位 | 512位 |
3.1 HC - 128
HC流密码有HC - 128和HC - 256两种变体,密钥长度分别为128位和256位。HC - 128基于两个各有512个32位条目的秘密表和六个非线性反馈函数进行操作,使用移位和旋转运算符在每一步生成一个32位输出。
以下是HC - 128算法的详细信息:
- 初始化操作参数 :
- + :按位加法
- - :按位减法
- ⊕ :按位异或
- || :连接
- >> :右移运算符
- << :左移运算符
- >>> :右旋转运算符
- <<< :左旋转运算符
- P :包含512个32位元素的表
- Q :包含512个32位元素的表
- K :128位密钥
- IV :128位初始化向量
- s :密钥流
- 函数 :
- f1(x) = (x >>> 7) ⊕ (x >>> 18) ⊕ (x >> 3)
- f2(x) = (x >>> 17) ⊕ (x >>> 19) ⊕ (x >> 10)
- g1(x; y; z) = ((x >>> 10) ⊕ (z >>> 23)) + (y >>> 8)
- g2(x; y; z) = ((x <<< 10) ⊕ (z <<< 23)) + (y <<< 8)
- h1(x) = Q[x0] + Q[256 + x2]
- h2(x) = P[x0] + P[256 + x2]
- 过程 :
1. 密钥和IV设置 :
- 设 K = K0 || K1 || K2 || K3 和 IV = IV0 || IV1 || IV2 || IV3 ,每个 Ki 和 IVi 为32位数字。令 Ki+4 = Ki , IVi+4 = IVi (0 < i < 4)。将密钥和IV扩展为数组 Wi (0 < i < 1279):
- Wi = Ki (0 ≤ i ≤ 7)
- Wi = IVi - 8 (8 ≤ i ≤ 15)
- Wi = f2(Wi - 2) + Wi - 7 + f1(Wi - 15) + Wi - 16 + i (16 ≤ i ≤ 1279)
- 用数组 W 更新表 P 和 Q :
- P[i] = Wi + 256 (0 ≤ i ≤ 511)
- Q[i] = Wi + 768 (0 ≤ i ≤ 511)
- 运行密码1024步,用输出替换表元素:
- 对于i = 0到511, P[i] = (P[i] + g1(P[i - 3]; P[i - 10]; P[i - 511])) ⊕ h1( P[i - 12] )
- 对于i = 0到511, Q[i] = (Q[i] + g2(Q[i - 3];Q[i - 10];Q[i - 511])) ⊕ h2(Q[i - 12] )
2. 密钥流生成 :
i = 0;
repeat until enough keystream bits are generated
{
j = i mod 512;
if (i mod 1024) < 512
{
P[j] = P[j] + g1(P[j - 3]; P[j - 10]; P[j - 511]);
si = h1( P[j - 12] ) ⊕ P[j];
}
else
{
Q[j] = Q[j] + g2(Q[j - 3];Q[j - 10];Q[j - 511]);
si = h2(Q[j - 12] ) ⊕ Q[j];
}
i = i + 1;
}
end-repeat
3.2 Rabbit
Rabbit是专门为硬件环境设计的轻量级算法,它使用128位秘密密钥和64位IV,通过内部状态位生成128位伪随机位。内部状态由八个32位状态变量、八个32位计数器和一个计数器进位位组成,使用八个耦合的非线性函数更新状态变量。
以下是Rabbit算法的详细信息:
- 初始化操作参数 :
- ⊕ :按位异或
- & :按位与
- >> :右移运算符
- << :左移运算符
- >>> :右旋转运算符
- <<< :左旋转运算符
- || :连接
- xj,i :子系统j在迭代i时的状态变量
- cj,i :子系统j在迭代i时的计数器变量
- Фj,i :迭代j和i之间存储的计数器进位
- 函数 :
- 下一状态函数 :
- x0,i+1 = g0,i + (g7,i<<<16) + (g6,i<<<16)
- x1,i+1 = g1,i + (g0,i<<<8) + g7,i
- x2,i+1 = g2,i + (g1,i<<<16) + (g0,i<<<16)
- x3,i+1 = g3,i + (g2,i<<<8) + g1,i
- x4,i+1 = g4,i + (g3,i<<<16) + (g2,i<<<16)
- x5,i+1 = g5,i + (g4,i<<<8) + g3,i
- x6,i+1 = g6,i + (g5,i<<<16) + (g4,i<<<16)
- x7,i+1 = g7,i + (g6,i<<<8) + g5,i
- gj,i = ((xj,i + cj,i+1)2⊕((xj,i + cj,i+1)2 >> 32)) mod 232
- 计数器进位位 :
- Фj,i+1 = 1 if c0,i + a0 + Ф7,i ≥232 ^ j = 0
- Фj,i+1 = 1 if cj,i + aj + Фj - 1,i+1 ≥ 232 ^ j > 0
- Фj,i+1 = 0 otherwise
- 计数器系统 :
- c0,i+1 = c0,i + a0 + Ф7,i mod 232
- c1,i+1 = c1,i + a1 + Ф0,i+1 mod 232
- c2,i+1 = c2,i + a2 + Ф1,i+1 mod 232
- c3,i+1 = c3,i + a3 + Ф2,i+1 mod 232
- c4,i+1 = c4,i + a4 + Ф3,i+1 mod 232
- c5,i+1 = c5,i + a5 + Ф4,i+1 mod 232
- c6,i+1 = c6,i + a6 + Ф5,i+1 mod 232
- c7,i+1 = c7,i + a7 + Ф6,i+1 mod 232
- 常量 :
- a0 = 0x4D34D34D
- a1 = 0xD34D34D3
- a2 = 0x34D34D34
- a3 = 0x4D34D34D
- a4 = 0xD34D34D3
- a5 = 0x34D34D34
- a6 = 0x4D34D34D
- a7 = 0xD34D34D3
- 过程 :
1. 密钥和IV设置 :
- 将 K[127..0] 分为: k0 = K[15..0] , k1 = K[31..16] ,…, k7 = K[127..112]
- 初始化状态变量:
for i = 0 to 4, do
xj,i = k(j + 1 mod 8) || kj for j even
xj,i = k(j + 5 mod 8) || k(j + 4 mod 8) for j odd
- 初始化计数器变量:
for i = 0 to 4, do
cj,i = k(j + 4 mod 8) || k(j + 5 mod 8) for j even
cj,i = kj || k(j + 1 mod 8) for j odd
- 重新初始化计数器变量:
cj,4 = cj,4 ⊕ x(j + 4 mod 8);4
- 将`IV [63...0]`异或到计数器状态的所有256位上:
for i = 4 to 0, do
c0,i = c0,i ⊕ IV [31..0]
c1,i = c1,i ⊕ (IV [63..48] || IV [31..16])
c2,i = c2,i ⊕ IV [63..32]
c3,i = c3,i ⊕ (IV [47..32] || IV [15..0])
c4,i = c4,i ⊕ IV [31..0]
c5,i = c5,i ⊕ (IV [63..48] || IV [31..16])
c6,i = c6,i ⊕ IV [63..32]
c7,i = c7,i ⊕ (IV [47..32] || IV [15..0])
2. **密钥流生成**:
在迭代i时,生成128位密钥流块 si :
si[15..0] = x0,i[15..0] ⊕ x5,i[31..16]
si[31..16] = x0,i[31..16] ⊕ x3,i[15..0]
si[47..32] = x2,i[15..0] ⊕ x7,i[31..16]
si[63..48] = x2,i[31..16] ⊕ x5,i[15..0]
si[79..64] = x4,i[15..0] ⊕ x1,i[31..16]
si[95..80] = x4,i[31..16] ⊕ x7,i[15..0]
si[111..96] = x6,i[15..0] ⊕ x3,i[31..16]
si[127..112] = x6,i[31..16] ⊕ x1,i[15..0]
WSN特定实现的开发环境以TinyOS为指定应用编程平台。TinyOS是一个开源开发环境,包括编程语言和模型(NesC)以及一组服务。它是一个事件驱动的操作系统,适用于无线嵌入式系统中的网络应用,内存占用小(400字节的数据和指令内存),支持多种硬件平台。虽然已有很多关于HC - 128和Rabbit在C平台上的实现,但还没有针对WSN的NesC实现。本文首次报告了基于NesC的HC - 128和Rabbit实现,这些实现基于eSTREAM项目网站上的官方C实现,并在TinyOS发布的TestTinyViz项目中进行了测试,结果表明这两个实现都能通过各自的测试用例。
以下是HC - 128和Rabbit的函数信息:
| 结构/函数名称 | 参数 | 描述 |
| — | — | — |
| struct ECRYPT_ctx | uint32_t T[1024] , uint32_t X[16] , uint32_t Y[16] , uint32_t counter1024 , uint32_t key[8] , uint32_t iv[8] , uint32_t keysize , uint32_t ivsize | HC - 128加密参数 |
| key_setup() | struct ECRYPT_ctx , const char *key , uint32_t keysize , uint32_t ivsize | 根据密钥参数执行密钥设置过程 |
| iv_setup() | struct ECRYPT_ctx , const char *iv | 根据IV输入执行IV设置过程 |
| cipher() | struct ECRYPT_ctx , const char *input , const char *output , uint32_t msglen | 使用加密参数对输入明文进行加密,输出密文 |
| 结构/函数名称 | 参数 | 描述 |
|---|---|---|
| struct t_instance | uint32_t x[8] , uint32_t c[8] , uint32_t carry | Rabbit加密参数 |
| next_state() | struct t_instance | 初始化状态变量、计数器变量和计数器进位位 |
| key_setup() | struct t_instance , const char *p_key | 根据密钥输入执行密钥设置过程 |
| iv_setup() | struct t_instance , const char *p_iv , size_t iv_size | 根据IV输入执行IV设置过程 |
| cipher() | struct t_instance , const char *p_plaintext , const char *p_ciphertext , size_t data_size | 使用状态变量和计数器变量对输入明文进行加密,输出密文 |
4. 分析与评估
4.1 功耗分析
典型的传感器节点依靠2节AA电池在部署环境中生存和运行,其在不受控环境中的寿命主要取决于传感、计算和通信三个阶段的功耗。在资源受限的环境中选择加密机制时,必须考虑其功耗效率,以延长传感器的使用寿命。
通过对HC - 128和Rabbit实现的功耗特性进行观察和比较,发现HC - 128在功耗效率方面优于Rabbit。
4.2 内存消耗分析
对HC - 128和Rabbit在micaz平台上的内存特性进行了分析。典型的micaz节点有128 KB的指令内存、4 KB的数据RAM和512 KB的闪存内存。比较结果表明,HC - 128比Rabbit需要更多的内存,这是因为HC - 128依赖于两个各有512个32位条目的秘密表。
| 流密码 | RAM(字节) | ROM(字节) |
|---|---|---|
| HC - 128 | - | - |
| Rabbit | - | - |
4.3 时间消耗分析
在实时应用中,时间效率是一个重要因素。对于HC - 128和Rabbit,主要关注的是加密和解密过程的速度,而不考虑消息传播的时间。比较结果显示,HC - 128完成初始化、设置密钥和IV以及加密明文需要48 µs,而Rabbit只需要39 µs。
| 流密码 | 时间(µs) |
|---|---|
| HC - 128 | 48 |
| Rabbit | 39 |
5. 结论
研究探讨了HC - 128和Rabbit这两种流密码在无线传感器网络中的适用性,并基于NesC进行了实现。通过对功耗、时间和内存消耗等性能指标的评估,发现虽然HC - 128只是一个软件型流密码,但在传感器网络领域,其性能与既适用于硬件又适用于软件的Rabbit流密码相当。
综上所述,在选择适合WSN的流密码时,需要根据具体的应用场景和资源限制来综合考虑HC - 128和Rabbit的优缺点。如果对功耗要求较高,HC - 128可能是更好的选择;如果对时间和内存要求较高,Rabbit可能更合适。未来的研究可以进一步探索如何优化这两种密码在WSN中的性能,以满足不断增长的安全需求。
无线传感器网络中HC - 128和Rabbit加密方案的比较分析
6. 实际应用考量
在实际的无线传感器网络应用中,除了功耗、内存和时间消耗这些性能指标外,还有其他一些因素需要考虑。
- 安全性 :虽然HC - 128和Rabbit都通过了eSTREAM项目的筛选,但在不同的应用场景下,对安全性的要求可能不同。例如,在军事和国家安全领域,对加密算法的安全性要求极高,需要更深入地评估算法的抗攻击能力。
- 兼容性 :传感器网络中的设备可能来自不同的制造商,使用不同的操作系统和硬件平台。因此,加密算法的兼容性也是一个重要因素。HC - 128和Rabbit的NesC实现需要能够在各种WSN设备上稳定运行。
- 可扩展性 :随着传感器网络的发展,节点数量和数据量可能会不断增加。加密算法需要具备良好的可扩展性,以适应网络规模的变化。
7. 优化建议
为了提高HC - 128和Rabbit在无线传感器网络中的性能,可以考虑以下优化建议:
- 算法优化 :对算法的代码进行优化,减少不必要的计算和内存访问。例如,可以通过优化非线性函数的计算方式,提高算法的执行效率。
- 硬件加速 :对于对性能要求较高的应用,可以考虑使用硬件加速技术。例如,设计专用的硬件电路来实现加密算法,以提高加密和解密的速度。
- 资源管理 :合理管理传感器节点的资源,避免资源的浪费。例如,可以根据传感器节点的负载情况,动态调整加密算法的使用频率。
8. 总结与展望
通过对HC - 128和Rabbit这两种流密码在无线传感器网络中的性能分析,我们可以得出以下结论:
- HC - 128在功耗方面表现较好,但内存消耗较大,时间消耗也相对较长。
- Rabbit在时间和内存消耗方面具有优势,但功耗相对较高。
在实际应用中,需要根据具体的需求和资源限制来选择合适的加密算法。未来的研究可以进一步探索如何结合这两种算法的优点,开发出更适合无线传感器网络的加密方案。
以下是一个简单的mermaid流程图,展示了选择加密算法的决策过程:
graph TD;
A[开始] --> B{对功耗要求高吗?};
B -- 是 --> C(选择HC - 128);
B -- 否 --> D{对时间和内存要求高吗?};
D -- 是 --> E(选择Rabbit);
D -- 否 --> F(根据其他因素综合考虑);
C --> G[结束];
E --> G;
F --> G;
同时,为了更直观地比较HC - 128和Rabbit的性能,我们可以将之前的分析结果整理成一个综合表格:
| 性能指标 | HC - 128 | Rabbit |
|---|---|---|
| 功耗效率 | 优 | 一般 |
| 内存消耗 | 高 | 低 |
| 时间消耗 | 长 | 短 |
| 安全性 | 符合标准 | 符合标准 |
| 兼容性 | 需测试 | 需测试 |
| 可扩展性 | 待评估 | 待评估 |
总之,无线传感器网络的安全加密是一个复杂的问题,需要综合考虑多个因素。HC - 128和Rabbit作为两种有潜力的流密码,在不同的场景下都有其优势和劣势。通过不断的研究和优化,我们有望找到更适合WSN的加密解决方案,保障传感器网络的安全和稳定运行。
超级会员免费看

被折叠的 条评论
为什么被折叠?



