在安全學領域,TEA(Tiny Encryption Algorithm)是一種分組加密算法,它的實現非常簡單,通常只需要很精短的幾行代碼。TEA 算法最初是由劍橋計算機實驗室的 David Wheeler 和 Roger Needham 在 1994 年設計的。
TEA算法使用64位的明文分組和128位的密鑰,它使用Feistel分組加密框架,需要進行 64 輪疊代,儘管作者認為 32 輪已經足夠了。該算法使用了一個神秘常數δ作為倍數,它來源於黃金比率,以保證每一輪加密都不相同。但δ的精確值似乎並不重要,這裡 TEA 把它定義為 δ=「(√5 - 1)231」(也就是程式中的 0×9E3779B9)。
之後 TEA 算法被發現存在缺陷,作為回應,設計者提出了一個 TEA 的升級版本——XTEA(有時也被稱為“tean”)。XTEA 跟 TEA 使用了相同的簡單運算,但它採用了截然不同的順序,為了阻止密鑰表攻擊,四個子密鑰(在加密過程中,原 128 位的密鑰被拆分為 4 個 32 位的子密鑰)採用了一種不太正規的方式進行混合,但速度更慢了。
基本介紹
- 中文名:tea算法
- 外文名:Tiny Encryption Algorithm
- 性質:分組加密算法
- 時間:1994 年
void encrypt(uint32_t*v,uint32_t*k) { uint32_t v0 = v[0], v1 = v[1], sum = 0, i; /*setup*/ uint32_t delta = 0x9e3779b9; /*akeyscheduleconstant*/ uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /*cachekey*/ for(i=0;i<32;i++) { /*basiccyclestart*/ sum += delta; v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); } /*endcycle*/ v[0] = v0; v[1] = v1;}void decrypt(uint32_t*v,uint32_t*k) { uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i; /*setup*/ uint32_t delta = 0x9e3779b9; /*akeyscheduleconstant*/ uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /*cachekey*/ for(i = 0; i < 32; i++) { /*basiccyclestart*/ v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); sum -= delta; } /*endcycle*/ v[0] = v0; v[1] = v1;}