Loading AI tools
来自维基百科,自由的百科全书
在密碼學中,微型加密算法(Tiny Encryption Algorithm,TEA)是一種易於描述和執行的塊密碼,通常只需要很少的代碼就可實現。其設計者是劍橋大學計算機實驗室的大衛·惠勒與羅傑·尼達姆。這項技術最初於1994年提交給魯汶的快速軟件加密的研討會上,並在該研討會上演講中首次發表。[2]
![]() 兩輪Feistel結構(單周期)的TEA加密 | |
概述 | |
---|---|
設計者 | 大衛·惠勒,羅傑·尼達姆 |
首次發布 | 1994年 |
繼承算法 | XTEA |
密碼細節 | |
密鑰長度 | 128位 |
分組長度 | 64位 |
結構 | Feistel network |
重複回數 | variable; recommended 64 Feistel rounds (32 cycles) |
最佳公開破解 | |
TEA suffers from equivalent keys (Kelsey et al., 1996) and can be broken using a related-key attack requiring 223 chosen plaintexts and a time complexity of 232.[1] |
此項技術開源。
TEA操作處理在兩個32位無符號整型上(可能源於一個64位數據),並且使用一個128位的密鑰。
TEA的第三個版本XXTEA,發表於1998年,進一步提高了TEA算法的安全性。
此處引用C語言中加密和解密的改編例程,由大衛·惠勒同羅傑·尼達姆共同發表[2]:
#include <stdint.h>
void encrypt (uint32_t* v, uint32_t* k) {
uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
for (i=0; i < 32; i++) { /* basic cycle start */
sum += delta;
v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
} /* end cycle */
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; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
for (i=0; i<32; i++) { /* basic cycle start */
v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
sum -= delta;
} /* end cycle */
v[0]=v0; v[1]=v1;
}
請留意這個參考實現對多字節的處理。原稿中並未指定出如何從二進制或者其他內容中派生出這些得到的數字。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.