发新话题
打印

[加密与解密] [原创]TEA加密及简单相关分析[已开源了代码]

[原创]TEA加密及简单相关分析[已开源了代码]

软件作者:dyforc
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

TEA算法文档: tea.zip (58.36 KB)

V1.2
标准的32轮次Tiny Encryption Algorithm实现,纯C编写速度不错,支持管道,ECB和CBC模式,带Checksum功能。

V1.3 (2009.11.3更新)
Changelog:
1.修改随机数产生算法,更接近完全随机
2.增加-r, 产生随机数
3.增加-R, 产生伪随机数,跟输入的密钥有关,可重现,其实就是CTR模式。

V1.3.2(2009.12.26)
Changelog:
1. Improved random number generation
2. Accessible interface.

程序截图 V1.2:


V1.3截图



加密测试与分析:
1.伪随机数概率分析
先测试系统自带的随机数生成函数rand()(WIN32下使用的rand(), linux下使用的random(), state256)。

统计test的字节频率为:


统计TEA CFB伪随机数:

对test字节频率分析:


可以看出TEA CTR伪随机随机性远好于C库的随机数生成函数。

现在测试加密数据的概率统计,与DES进行比较:
先创建一个约1.3M的全0字节文件:


用DES加密得到b:

字节频率分析如下:

tea加密block生成c:

对c的字节频率统计如下:


可以看到由des和tea加密的结构都字符频率分布均衡。

1.2版tea程序(WIN32 + Linux)
tea.zip (16.55 KB)

1.3版tea程序(WIN32)
tea.rar (8.58 KB)

1.3.2(WIN32)
tea.zip (9.48 KB)

DES程序(WIN32, Eric Young的代码中整理编译)
des.rar (14.08 KB)

经测试tea.exe加解密速度均快于des.exe

[ 本帖最后由 dyforc 于 2009-12-26 15:59 编辑 ]
本帖最近评分记录
  • 认真的雪 威望 +30 感谢您对邪恶八进制技术论坛的指导 ... 2009-11-17 17:40

TOP

    哥们,放码出来吧。。。bin不好

TOP

对啊,开源开源!!!

TOP

tea-1.3源代码

文章作者:
dyforc现在放出tea-1.3源代码,如果有什么建议和发现了bug希望能通知我(发到tzlloch@gmail.com) 谢谢!

tea-1.3.zip (12.51 KB)

TOP

TEA:Tiny Encryption Algorithm
人如其名,纯c的话,加密和解码代码好像就在20行的数量上下,速度肯定比des快多了。
当然安全性也比des差了

TOP

回复 6楼 kindred 的帖子

那不一定TEA是128bit的key, DES是56bit, TEA是用XOR和ADD混合实现非线性变换的,而且是32轮DES是16轮。
TEA虽然实现简单,但是已经证实可以很好的抵抗已知的密码分析。

TOP

引用:
原帖由 dyforc 于 2009-11-20 23:40 发表
那不一定TEA是128bit的key, DES是56bit, TEA是用XOR和ADD混合实现非线性变换的,而且是32轮DES是16轮。
TEA虽然实现简单,但是已经证实可以很好的抵抗已知的密码分析。 ...
但是已经证实可以很好的抵抗已知的密码分析:只能抵抗一部分吧。具体是什么攻击能够攻破它,我记不得了。
不过你想一想,如果tea比des快,效果也不比des差,那为什么des成了事实的工业标准?

TOP

回复 9楼 kindred 的帖子

DES是现代密码学的里程碑,直到现在没有有效的破译方法,但是密钥空间明显不够,可以暴力破解了,现在业界的标准有很多一般用AES, DES也很少使用了,DES的变形如3DES用得也很广,不仅仅是TEA,任何一个经受过时间考研的现代密码算法都是能够很好抵抗已知的所有密码分析的,TEA是其中比较年轻的一个,具体希望你能参考一些密码技术资料,当然我说的不对你也可以指正。

TOP

源代码Windows下装MinGW后用mingw32-make来编译, Linux下直接make就可以了

TOP

//Tiny Encryption Algorithm
//标准32轮TEA,它是存在攻击的。建议使用TEA的升级版本XXTEA
//注意,v是64bit,k是128bit,切勿用错。

void tea_encrypt(unsigned long* v, unsigned long* k)
{
     unsigned long v0=v[0], v1=v[1], sum=0, i;           
     unsigned long delta=0×9e3779b9;                    
     unsigned long k0=k[0], k1=k[1], k2=k[2], k3=k[3];   
     for (i=0; i < 32; i++)
    {                           
         sum += delta;
         v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
         v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
     }
     v[0]=v0; v[1]=v1;
}

void tea_decrypt(unsigned long* v, unsigned long* k)
{     
     unsigned long v0=v[0], v1=v[1], sum=0xC6EF3720, i;
     unsigned long delta=0×9e3779b9;                          
     unsigned long k0=k[0], k1=k[1], k2=k[2], k3=k[3];     
     for(i=0; i<32; i++)
     {                              
         v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
         v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
         sum -= delta;                 
     }
     v[0]=v0; v[1]=v1;
}



Tiny Encryption Algorithm 的C实现太短小了,太容易理解了。


然而,当你使用它时,你要注意,已经有它的攻击算法了。

TOP

短小精悍简直。。。。

TOP

发新话题