TEA, a Tiny Encryption Algorithm (Descryption and Application)

By v318

Abstraksi

Oleh: Fitria Sekarwulan Risdhafany

NPM: 0605100679

 

Dalam paper ini akan dijelaskan mengenai deskripsi algoritma TEA (Tiny Encription Algorithm) yang merupakan algoritma penyandian Block Cipher yang berbasis pada feistel network. Disertakan pula source code-nya dalam Bahasa C dan flowchart dari aplikasi algoritma penyandian TEA.

Keywords : Tiny Encryption Algorithm, Aplikasi Algoritma Sandi Modern, Bahasa C

 

A. DESKRIPSI ALGORITMA TEA (TINY ENCRYPTION ALGORITHM)

Tiny Encription Algorithm (TEA) merupakan suatu algoritma sandi yang diciptakan oleh David Wheeler dan Roger 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.

System 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.

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 sruktur 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. Struktur penyandian TEA dapat dilihat pada gambar 1.1

 

tea.jpg

Gambar 1.1. Algoritma TEA

 

tea-1-round.jpg

Gambar 1.2. Satu cycle TEA (dua round).

Proses diawali dengan input-bit teks terang sebanyak 64-bit. Kemudian 64-bit teks terang tersebut dibagi menjadi dua bagian, yaitu sisi kiri (L0) sebanyak 32-bit dan sisi kanan (R0) sebanyak 32-bit. Setiap bagian teks terang 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. Kemudian 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. Kemudian 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.

Struktur dari penyandian dengan algoritma untuk satu cycle (dua round) dapat dilihat pada gambar 1.2. berikut adalah 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

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

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

Pada algoritma TEA, 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

Dalam proses dekripsi sama halnya seperti pada proses penyandian yang berbasis feistel cipher lainnya. Yaitu pada prinsipnya adalah sama pada saat proses enkripsi. Namun hal yang berbeda adalah penggunaan teks sandi sebagai input dan kunci yang digunakan urutannya dibalik. Pada 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].

Pada rumus enkripsi diketahui :

L0 = L0 + f ( R0 , k[0], k[1], sum )

R0 = R0 + f ( L0, k[2], k[3], sum )

Sehingga untuk proses dekripsi digunakan rumus :

L0 = L0 + f ( R0 , k[1], k[0], sum )

R0 = R0 + f ( L0, k[3], k[2], sum )

 

B. Source code and Application in C language

Encryption code

#include <stdio.h>

main()
{
/* deklarasi */
unsigned long v[2],v0,v1, sum=0, i; /* set up */
unsigned long delta=0×9e3779b9; /* a key schedule constant */
unsigned long k[4],k0,k1,k2,k3,k4; /* tempat penyimpanan key */

/* input kunci */
printf(“TEA ENCRYPTION by FITRIA SEKARWULAN RISDHAFANY\n\n”)
printf(“kunci k[0-3] masing-masing panjangnya 32 bit/8 karakter hexadecimal\n”);
printf(“masukkan kunci k0=”); scanf(“%lx”,&k[0]);
printf(“masukkan kunci k1=”); scanf(“%lx”,&k[1]);
printf(“masukkan kunci k2=”); scanf(“%lx”,&k[2]);
printf(“masukkan kunci k3=”); scanf(“%lx”,&k[3]);

/* input teks terang */
printf(“\nkunci v[0-1] masing-masing panjangnya 32 bit/8 karakter hexadecimal\n”);
printf(“masukkan plain text=”); scanf(“%lx”,&v[0]);
printf(“masukkan plain text=”); scanf(“%lx”,&v[1]);

/* proses */
v0=v[0]; v1=v[1];
k0=k[0]; k1=k[1]; k2=k[2]; k3=k[3];

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;

/* output */
printf(“\n\nTeks sandi= %lx %lx”,v[0],v[1]);

getch();
}

 

Decryption Code

#include <stdio.h>

main()
{
/* deklarasi */
unsigned long v[2],v0,v1, sum= 0xC6EF3720, i; /* set up */
unsigned long delta=0×9e3779b9; /* a key schedule constant */
unsigned long k[4],k0,k1,k2,k3,k4; /* tempat penyimpanan key */

/* input kunci */
printf(“TEA DECRYPTION by FITRIA SEKARWULAN RISDHAFANY\n\n”)
printf(“kunci k[0-3] masing-masing panjangnya 32 bit/8 karakter hexadecimal\n”);
printf(“masukkan kunci k0=”); scanf(“%lx”,&k[0]);
printf(“masukkan kunci k1=”); scanf(“%lx”,&k[1]);
printf(“masukkan kunci k2=”); scanf(“%lx”,&k[2]);
printf(“masukkan kunci k3=”); scanf(“%lx”,&k[3]);

/* input teks terang */
printf(“\nkunci v[0-1] masing-masing panjangnya 32 bit/8 karakter hexadecimal\n”);
printf(“masukkan teks sandi=”); scanf(“%lx”,&v[0]);
printf(“masukkan teks sandi=”); scanf(“%lx”,&v[1]);

/* proses */
v0=v[0]; v1=v[1];
k0=k[0]; k1=k[1]; k2=k[2]; k3=k[3];

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;
}
v[0]=v0; v[1]=v1;

/* output */
printf(“\n\nPlain text= %lx %lx”,v[0],v[1]);

getch();
}


15 Tanggapan ke “TEA, a Tiny Encryption Algorithm (Descryption and Application)”

  1. mudmen Berkata:

    hae cantik ajari aku ngedit blog donk,……?

  2. ayu pustika Berkata:

    implementasinya udah bagus, kunci dan teks terangnya dibagi jadi beberapa variable! sukses terus ya!

  3. Rani S Berkata:

    makasih bgt ya mba!! =)

  4. ratih Berkata:

    mba tolong bantu aku bikin program ini ya mba,please!!!!

  5. nikko Berkata:

    tuh coment ga pernah dibales neng?? salam kenal dari mahasiswa UGM… maturnuwun programme yo mba!

  6. fitria Berkata:

    buat mudmen: kalau mau tahu teknik ngedit blog biar cantik, bisa bertanya pada wordpress langsung.OK!

    buat ayu pustika: kayanya saya kenal deh.. hehe… thanks pujiannya =)

    buat rani: sama-sama… semoga bermanfaat ya!

    buat ratih: source codenya sudah saya berikan, kalau ada kendala silahkan tanya saja. pasti saya bantu ko! (“,)

    buat nikko: salam kenal juga ya… tapi aku ga bisa bahasa jawa. hehe…

  7. zzz_axis Berkata:

    tertarik dengan reverse engineering ga?? supaya aplikasinya lebih aman, coba deh gunakan teknik untuk reverse engineering!

    coba aja ikutan study di http://www.sroer.org

  8. fitria Berkata:

    makasih ya atas masukannya..
    nanti coba saya kunjungi websitenya..

  9. crying_man Berkata:

    coba bikin yang XTEA dan XXTEA sekalian dong mba… hehehehehe…

  10. fitria Berkata:

    wah tar deh saya coba…
    yang ini aja pusingnya bukan main…
    soalnya saya kan baru belajar…
    terima kasih ya…

  11. madhon Berkata:

    wah, kita pikir tea nya teh rupanya tea yang bikin mumet. yah lebih baik nge tea dulu ah.

  12. andik Berkata:

    Jeng Fitria, bisa nggak metode TEA ini dipakai di PHP, kalo ada tolong share ya, soalnya aku lagi nyari proses enkripsi dan dekripsi pake TEA di PHP, pliss ya…
    thx sebelumnya.

  13. v3 Berkata:

    bisa aja pake metode TEA pada php..
    bwt ngatasin error transfer pake mode ofb aja..
    tapi saran saya lebih baik menggunakan steram cipher aja..

  14. Zakaria Berkata:

    Fit, lam kenal ya. aku kan baru belajar tentang kriptograpi. tapi bukan TEA, melainkan XTEA menggunakan PHP. tapi aku ga ngrti penjelasan a lgoritmanya,bagaimana urutan awal sebuah file sampai bisa menjadi enkrip file. kamu bisa bantu aku ga?tolong ya. abis nya bahasanya aneh2, ada enchiperlong, str2long, len, dll.

  15. fighter_G Berkata:

    assalamualaikum n salam kenal….:)
    mbak artikelnya t copas ea..
    gmbarnya qk g bisa d copas napa mbak..?
    klo da artikel yg okZ ttg kriptografi n antek-anteknya tlng dunk d share ma aq..
    q gi belajr ttg kriptografi nie..
    tlng ea mbak..d0nt 4get ..0c..
    salam ukhuwah..:)

Tinggalkan Balasan