wys的个人博客

你有很多事放不下?做人要潇洒一点~

0%

信息安全概论(7)

7.1.2 tea基本介绍

1
2
3
4
5
6
7
8
9
void encipher(unsigned int v[2], unsigned int key[4]) {
unsigned int v0 = v[0], v1 = v[1],i,sum = 0,delta = 0x9E3779B9;
for(i=0;i < 32;i++){
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum >> 11) & 3]);
}
v[0] = v0;v[1] = v1;
}

TEA的特点

  • 简单、代码短、无密钥扩展、安全。
  • 理念:轮多转,可以让简单变安全。
  • 实现:CPU基本指令(移位、异或、位与、模加、模减)、占用内存也很小

7.2.1 tea算法设计

TEA的设计:

  1. $feistel$结构,用+-代替⊕(XOR)

  2. 轮函数F比较简单

  3. 轮多:32个循环,64轮。

    其中$\delta = \lfloor(\sqrt{5}-1)2^{31} \rfloor$,只要不为0就行。

TEA的解密函数

1
2
3
4
5
6
7
8
9
10
void decipher(unsigned int v[2], unsigned int key[4]) {
unsigned int i;
unsigned int v0 = v[0], v1 = v[1],,delta = 0x9E3779B9,sum = delta*num_rounds;
for(i=0;i < num_rounds;i++){
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum >> 11) & 3]);
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
}
v[0] = v0;v[1] = v1;
}