首页
社区
课程
招聘
[求助]Related-Key Cryptanalysis of TEA
2010-4-17 22:14 8991

[求助]Related-Key Cryptanalysis of TEA

2010-4-17 22:14
8991
前段时间看一个CM,才知道了TEA对称加密算法。他以实现简单,强度也不错著称
   而他现在已经有XXTEA版本了,据说是因为TEA存在攻击
   搜索针对TEA的攻击,中文资料没有找到。好不容易找到一篇英文的,看了一个来礼拜了,还是一头雾水(英语水平差,数学功底也不好),把他拿出来,希望大牛们给解释解释(知道多少说多少,每人一点点就明了了!)
  
   他用到的有 differential related-key cryptanalysis 和 the rotational related-key attack的思想,但是我对这两种方法完全不了解。同时还提到了Birthday paradox(生日悖论)

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (12)
雪    币: 115
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
GoodGavin 3 2010-4-19 11:24
2
0
rockinuk版主说了,我就先把TEA相关的东西贴出来,方便大家研究吧。

    TEA是the Tiny Encryption Algorithm 的缩写,属于分组、对称加密算法,他有XTEA、Block TEA、XXTEA等改进算法,它们以实现简单且有相当的强度著称。
  TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。该算法使用 128 位的密钥为 64 位的信息块进行加密,它需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。(这段来自baidu)

TEA算法的C实现如下:
tea_encrypt是加密函数
tea_decrypt是解密函数
他的入口参数有两个,v和k,
其中:
  v是要被加密或者被解密的块,要求64bit
  k是密钥,要求128bit
另外函数还有两个常量 sum和delta
  delta就是上面描述的黄金分割比例0x9e3779b9,
  sum在加密时的初始值为0,解密时用的值是加密结束的计算出的sum值0xC6EF3720(delta固定,他也固定)
  (经过测试delta任意选择,依然可以解密,只是解密的sum需要时加密结束时计算出的sum值)
//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;
}


这个算法也就用了加减法和移位抑或运算,且只有寥寥几行代码,个人感觉用他进行密码学算法研究入门是个不错的选择!(其中的数学原理我说不清楚,抱歉)
雪    币: 21
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一鸿 2010-4-20 23:44
3
0
down first。I will read it when I have time.
雪    币: 115
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
GoodGavin 3 2010-4-21 08:28
4
0
终于有兄弟光顾了!!!
和Related-Key Cryptanalysis of TEA 相关的内容也就四五页的样子(在最后面),如果有些基础的话,看起来会比较容易的,只是其中有些东西估计是中文我也不一定十分明白,虽然对这transl.google.com看了一遍,还是不怎么明白。
雪    币: 2071
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 4 2010-4-21 08:43
5
0
你研究到攻击去了?
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2010-4-21 08:45
6
0
以下幾帖都是跟 TEA 有關,請您先閱讀看看。
最重要的事是,您自己要先瞭解 TEA (的算法),然後一起討論才會有進展。
等您瞭解後,我再撥空解釋那兩種 attack 的方法。

===== preview ===
【求助】爆破XTEA的KEY

【求助】关于XTEA算法的密钥问题

【求助】tea算法的问题

【求助】求助,这个应该是什么算法?【解决 】

【求助】大家帮忙看看这是固定的算法吗?

【分享】各类应用密码学CrackMe,慢慢的会补全破文。
雪    币: 115
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
GoodGavin 3 2010-4-21 11:19
7
0
看了个CM让我感觉这个算法挺有趣的。所以想多知道点,就查了点资料!可惜看不大懂!

就是因为他我才知道了TEA
http://bbs.pediy.com/showthread.php?t=110505
雪    币: 115
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
GoodGavin 3 2010-4-21 14:01
8
0
这几篇我都看过了,业余时间我再去仔细看看!

还有我找了点关于TEA算法的东西,放在二楼,大家可以去看看。TEA基本的东西我觉得也就这些了吧?
(还应该有他的数学原理,但是我不会推导)
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
deepwhite 2010-4-21 15:55
9
0
TEA, a Tiny Encryption Algorithm
这个应该是David J. Wheeler和Roger M. Needham两个人提出TEA加密的论文吧。

Encode Routine, written in the C language, for encoding with key k[0] - k[3]128bit). Data in v[0] and v[1](64bit).

void code(long* v, long* k) {
unsigned long y=v[O] ,z=v[l], sum=O, /* set up */
delta=Ox9e3779b9, /* a key schedule constant */
n=32 ;
while (n-->O) { /* basic cycle start */
sum += delta ;
y += ((z<<4)+k[0]) ^ (z+sum) ^ ((z>>5)+k[1]) ;
z += ((y<<4)+k[2]) ^ (y+sum) ^ ((y>>5)+k[3]) ;
} /* end cycle */
v[O]=y ; v[1]=z ; }

Decode Routine
void decode(long* v,long* k)
unsigned long n=32, sum, y=v[O], z=v[l],
delta=0x9e3779b9 ;
sum=delta<<S ;
/* start cycle */
while (n-->0) {
z-= ((y<<4)+k[2]) ^ (y+sum) ^ ((y>>S)+k[3]) ;
y-= ((z<<4)+k[0]) ^ (z+sum) ^ ((z>>S)+k[1]) ;
sure-:delta ; }
/* end cycle */
v[0]:y ; v[1]=z ; }

其中delta = ((5^0.5)-1)*2^31 = 0x9e3779b9

Basics of the routine
It is a Feistel type routine although addition and subtraction are used as the
reversible operators rather than XOR. The routine relies on the alternate use of
XOR and ADD to provide nonlinearity. A dual shift causes all bits of the key
and data to be mixed repeatedly.
The number of rounds before a single bit change of the data or key has spread
very close to 32 is at most six, so that sixteen cycles may suffice and we suggest
32.
The key is set at 128 bits as this is enough to prevent simple search techniques
being effective.

This type of algorithm can replace DES in software, and is short enough to
write into almost any program on any computer.感觉作者当时想用这个取代DES
上传的附件:
雪    币: 115
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
GoodGavin 3 2010-4-25 11:53
10
0
rockinuk 版主最近很忙吧? 有时间的话先根据您的理解简单说说吧,然后我再去看看那文章,脑子了对这两种方法没有概念,看那个英文的实在是看不明白!
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2010-4-25 22:13
11
0
是的,這幾天去長沙開會,不在家,上網有點不便。
請問 http://bbs.pediy.com/showpost.php?p=792704&postcount=1http://www.springerlink.com/content/m12307125l34l151/ ,這兩篇論文有沒有一樣? 因為 file zise 大小不同。
若一樣,我擇一解說內容;若不一樣,我以 springerlink 為主。
雪    币: 115
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
GoodGavin 3 2010-4-26 09:45
12
0
rockinuk 版主,springerlink的要$25.00 啊,我看了预览的第一页,和我给的那个的第一页相同!
雪    币: 115
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
GoodGavin 3 2010-5-8 00:31
13
0
rockinuk大哥,还没时间说么?很期待啊!自己确实看不懂了,感觉还有很多人在关注,最近一个CM不是也用了这个算法的变种算法么?(虽然我没跟动,没看大懂)
游客
登录 | 注册 方可回帖
返回