Tiny Encription Algorithm (TEA) merupakan suatu algoritma sandi yang
diciptakan oleh David J. Wheeler
dan Roger M. Needham dari
Computer Laboratory, Cambridge University, England pada bulan November 1994.
Algoritma ini merupakan algoritma penyandian block cipher yang dirancang
untuk penggunaan memory yang seminimal mungkin dengan kecepatan proses yang
maksimal.
Sistem penyandian TEA menggunakan proses feistel network
dengan menambahkan fungsi matematik berupa penambahan dan pengurangan sebagai operator pembalik selain XOR. Hal
ini dimaksudkan untuk menciptakan sifat non-linearitas. Pergeseran dua arah (ke
kiri dan ke kanan) menyebabkan semua bit kunci dan data bercampur secara
berulang ulang.
∂ = (5 -1)
Gambar 1.1 TEA Cipher
|
Algoritma
Dan Cara Kerja
TEA memproses 64-bit input sekali waktu dan
menghasilkan 64-bit output. TEA menyimpan 64-bit input kedalam L0
dan R0 masing masing 32-bit, sedangkan 128-bit kunci disimpan
kedalam k[0], k[1], k[2], dan k[3] yang masing masing berisi 32-bit. Diharapkan
teknik ini cukup dapat mencegah penggunaan teknik exshautive search
secara efektif. Hasil outputnya akan disimpan dalam L16 dan R16.
Bilangan delta berasal dari golden number,
digunakan delta=(√5 -1)231. Suatu bilangan delta ganda yang berbeda
digunakan dalam setiap roundnya sehingga tidak ada bit dari perkalian yang
tidak berubah secara teratur. Berbeda dengan struktur feistel yang semula hanya mengoperasikan satu sisi yaitu sisi
sebelah kanan dengan sebuah fungsi F, pada algoritma TEA kedua sisi
dioperasikan dengan sebuah fungsi yang sama.
Proses diawali dengan input-bit teks sebanyak 64-bit,
kemudian 64-bit teks tersebut dibagi menjadi dua bagian, yaitu sisi kiri (L0)
sebanyak 32-bit dan sisi kanan (R0) sebanyak 32-bit. Setiap bagian
teks akan dioperasikan sendiri-sendiri. R0 (Z) akan digeser kekiri
sebanyak empat (4) kali dan ditambahkan dengan kunci k[0], sementara itu Z
ditambah dengan sum (delta) yang merupakan konstanta. Hasil penambahan ini
di-XOR-kan dengan penambahan sebelumnya. Langkah selanjutnya di-XOR-kan dengan
hasil penambahan antara Z yang digeser kekanan sebanyak lima (5) kali dengan
kunci k[1]. Hasil tersebut kemudian ditambahkan dengan L0 (Y) yang
akan menjadi R1.
Sisi sebelah kiri akan mengalami proses yang sama dengan sisi
sebelah kanan. L0 (Y) akan digeser kekiri sebanyak empat (4) kali
lalu ditambahkan dengan kunci k[2], sementara itu, Y ditambah dengan sum
(delta). Hasil penambahan ini di-XOR-kan dengan penambahan sebelumnya. Langkah
selanjutnya di-XOR-kan dengan hasil penambahan antara Y yang digeser ke kanan
sebanyak lima (5) kali dengan unci k[3]. Hasil tersebut kemudian ditambahkan
dengan R0 (Z) yang akan menjadi L1.
Langkah-langkah penyandian dengan algoritma TEA dalam satu cycle
(dua round) :
1.
Pergeseran (shift)
Blok
teks terang pada kedua sisi yang masing masing sebanyak 32-bit akan digeser
kekiri sebanyak empat (4) kali dan digeser ke kanan sebanyak lima (5) kali.
2.
Penambahan
Langkah
selanjutnya setelah digeser kekiri dan kekanan, maka Y dan Z yang telah digeser
akan ditambahkan dengan kunci k[0]-k[3]. Sedangkan Y dan Z awal akan
ditambahkan dengan sum (delta).
3.
Peng-XOR-an
Proses
selanjutnya setelah dioperasikan dengan penambahan pada masing-masing register
maka akan dilakukan peng-XOR-an dengan rumus untuk satu round adalah
sebagai berikut:
y = y +
(((z<<4)+k[0])^z+sum^((z>>5)+k[1]))
z = z +
(((y<<4)+k[2]^y+sum^((y>>5)+k[3]))
dalam
hal ini sum=sum+delta.
Hasil
penyandian dalam satu cycle satu blok teks terang 64-bit menjadi 64-bit
teks sandi adalah dengan menggabungkan Y dan Z. Untuk penyandian pada cycle berikutnya
Y dan Z ditukar posisinya, sehingga Y1 menjadi Z1 dan Z1
menjadi Y1 lalu dilanjutkan proses seperti langkah-langkah diatas sampai
dengan 16 cycle (32 round).
4. Key
Schedule
Algoritma
TEA menggunakan key schedule-nya sangat sederhana. Yaitu kunci k[0] dan
k[1] konstan digunakan untuk round ganjil sedangkan kunci k[2] dan k[3]
konstan digunakan untuk round genap.
5.
Dekripsi
Proses
dekripsi sama halnya seperti pada proses penyandian yang berbasis feistel
cipher lainnya. Yaitu pada prinsipnya adalah sama pada saat proses
enkripsi. Hal yang berbeda adalah penggunaan teks sandi sebagai input
dan kunci yang digunakan urutannya dibalik. Proses dekripsi semua round
ganjil menggunakan k[1] terlebih dahulu kemudian k[0], demikian juga dengan
semua round genap digunakan k[3] terlebih dahulu kemudian k[2].
Rumus
enkripsi diketahui :
L0 = L0 + f ( R0 , k[0], k[1], sum
)
R0 = R0 + f ( L0, k[2], k[3], sum
)
Proses dekripsi digunakan rumus :
L0 = L0 + f ( R0 , k[1], k[0], sum
)
R0 = R0 + f ( L0, k[3], k[2], sum
)
void code(long* v, long* k) {
unsigned long y=v[0],z=v[1], sum=0, /* set up */
delta=0x9e3779b9, /* a key schedule constant */
n=32 ;
while (n-->0) { /* 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[0]=y ; v[1]=z ; }
Aplikasi
Ada banyak
macam pengaplikasian TEA, berikut beberapa contoh :
* TEA dapat
diimplementasikan dalam PIC18F4550 dengan hasil yang memuaskan. Pada 4 MHz (1
mikrodetik per siklus) yang bekerja frekuensi, pelaksanaan menunjukkan 586 byte
/ s kecepatan.
* TEA dengan 16
cycles (32 round) sangat cocok digunakan untuk membangun system keamanan data
yang mengandalkan kecepatan proses yang optimal. TEA dengan 32 cycles (64
round) tingkat keamanan lebih tinggi.
* Pembangunan
Add-on pada Mozilla Thunderbird untuk enkripsi email