81、无线传感器网络中HC - 128和Rabbit加密方案的比较分析

无线传感器网络中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的加密解决方案,保障传感器网络的安全和稳定运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值