Tuesday, December 19, 2017

Fast Data Encipherment Algorithm (FEAL)

A.    Pendahuluan
Dikutip oleh Andara Livia (2010), Fast Data Encipherment Algorithm atau yang lebih dikenal dengan FEAL merupakan sebuah enskripsi tipe simetris block ciphers. Algoritma ini diciptakan sebagai bentuk alternatif dari Data Encryption Standard (DES) serta diprogram agar mampu bekerja lebih cepat pada software. FEAL memiliki peranan penting dalam pengembangan teknik kriptanalis, seperti kriptanalis liner dan diferesnsial.  Pada 1987, FEAL pertama kali dikenalkan oleh Shimizu dan Miyaguchi dari NTT. Chipers ini bersifat rentan terhadap berbagai macam kriptanalis, namun dapat berfungsi sebagai katalis pada pertemuan kriptanalis diferensial dan linear.
FEAL, seperti halnya DES juga berlandaskan pada algoritma Fiestal. Dalam perkembangannya, terdapat beberapa perbaikan untuk FEAL walaupun secara keseluruhan merupakan cipher Fiestal. FEAL menggunakan basis putaran kunci yang sama yang bekerja pada blok 64-bit. FEAL-N menempatkan bit blok plaintext dengan memanfaatkan kunci rahasia 64-bit. FEAL menggunakan N putaran cipher Fiestal dengan fungsi f yang lebih sederhana. Hal ini lalu dijumlahkan dengan desain awal dan akhir dari FEAL dengan melakukan XOR secara sebagian dari dua data yang sama halnya dengan mengaplikaskan subkey dengan sebagaian data.
Menurut Shimizu & Miyaguchi (1435) yang dikutip oleh S. Tjiharjadi & M.C Wijaya (2009), FEAL memiliki panjan blok sebesar 64-bit yang dibagi menjadi 32 + 32 blok serta menyandang iterasi sebanyak 8 ronde seperti yang terlihat pada gambar:
Gambar Diagram Alir Algoritma FEAL (S. Tjiharjadi & M.C Wijaya, 2009).

B.     Penggunaan Algoritma
D.M Nasution menerapkan Algoritma FEAL dalam pembuatan aplikasi Perancanagan dan Implementasi Enkripsi dan Dekripsi SMS dengan Menggunakan Algoritma FEAL (2012) sebagai pengamanan pesan yang berlandaskan J2ME. Aplikasi yang ia buat dianalisis sesuai dengan kecepatan proses enkripsi dan dekripsi pesan. Selain itu, ia juga menggunakan memori untuk mengukur proses enkripsi dan dekripsi pesan. Dalam menganalisis aplikanya, ia menggunakan metode Avalache effect sebagai tolak ukur keamanan.
Hasil perancangannya menunjukkan bahwa waktu yang dibutuhkan FEAL untuk proses enkripsi dengan panjang 8 karakter dan perbedaan perputaran FEAL 4, FEAL 8, FEAL 16, FEAL 32 memeiliki nilai rata-rata 3,935, 4.96%, 5.6%, dan 7.4% secara berurutan. Pada proses dekripsi dengan panjang 8 karakter dengan perbedaan putaran FEAL 4, FEAL 8, FEAL 16 dan FEAL 32 mencapai nilai rata-rata 2.9%, 3.7%, 4.3% serta 6.16%. Sedangkan memori yang digunakan sebagai proses enkripsi dengan panjang 8 karakter, 24 karakter dan 120 karakter mencapai 518 byte, 1164 byte serta 3516 byte secara berurutan. Dalam proses dekripsi, ia memperoleh hasil yang sama dengan proses enkripsi. Selain itu, algoritma ini menunjukkan tingkat keamanan yang baik dengan adanya hasil Avalanche Effect pada FEAL 32 yang bernilai 51.5625%.

C.    Cara Menghitung Algoritma
Diagram alir (Shoji Miyaguchi, 1998:637).
Table 1 (Andara Livia, 2010).
Andara Livia (2010), berikut proses enkripsi pada algortima FEAL-4 sesuai dengan diagram alir pada gambar diatas:
1.       Algoritma ini menerima input berupa 64-bit plaintext M = m1…m 64 dan 64-bit kunci K = k1… k 64.
2.       Sedangkan keluarannya adalah 64-bit block ciphertext C = c1 ... c64
3.       Definisikan ML = m1 … m32 dan MR = m33 … m 64.
4.       Lakukan XOR initial subkey: (L0, R0)←(ML, MR) (K4, K5).
5.       R0 ←R0L0
6.       Untuk i = 1 hingga i = 4, lakukan: Li ←Ri-1 Ri ←Li-1 f(Ri-1, Ki-1)
Gunakan Table 1 untuk f(A, Y) dengan A = Ri-1=(A0, A1, A2, A3) dan Y = Ki-1=(Y0, Y1)
Pada fungsi f tersebut terdapat dua byte-oriented data substitusi S0 dan S1
S0 (X1, X2) = Rot2 ((X1 + X2) mod 256)
S1 (X1, X2) = Rot2 ((X1 + X2 + 1) mod 256)
Dimana X1 dan X2 merupakan block dari b-bit serta Rot2(T) adalah hasil dari a 2-bit perputaran kiri dalam block 8-bit, T.
Contoh: missal X1 = 00010011, X2 = 11110010 kemudian
                  T = (X1 + X2 + 1) mod 256= 00000110
                  S1 (X1, X2) = Rot2(T)= 00011000
7.       Ls ← LsRs 
8.       Lakukan XOR final subkey.
Sedangkan untuk mendekripsikan ciphertext menjadi plaintext, digunakan cara yang sama seperti halnya mengenkripsikan plaintext menjadi ciphertext. Berikut langkah-langkahnya:
1.      Algoritma ini menerima input berupa 64-bit chipertext M = m1…m 64 dan 64-bit kunci K = k1… k 64.
2.      Sedangkan keluarannya adalah 64-bit block plaintext C = c1 ... c64
3.      Definisikan ML = m1 … m32 dan MR = m33 … m 64.
4.      LO ←LOR0. 
5.      Sama halnya dengan proses enkripsi lakukan (kebalikan), untuk i = 1 hingga i = 4,
6.      Rs ← RsLs
7.      Ls ← LsKey ke 4
8.      Rs ← RsKey ke 5
9.      Lakukan XOR final subkey

D.    Contoh Perhitungan FEAL-4
1.      Enkripsi plaintext 123456789abcdef7 dengan kunci 0xc63f1a1a, 0xe768bb42, 0x948c886f, 0x924370ca, 0x62bffac2, 0x5581fc95, menjadi chipper text. Setelah plaintext di enkripsi, rubah kembali (dekripsi) ke plaintext semula.
Diketahui:
Plaintext -> 123456789abcdef7
kunci -> 0xc63f1a1a, 0xe768bb42, 0x948c886f, 0x924370ca, 0x62bffac2, 0x5581fc95
Hasil:
            Chipertext -> 8351776E461394F0
            Plaintext -> 123456789ABCDEF7
2.      Enkripsi plaintext 123456789abcdef7abcdef1234567897 dengan kunci 0xc63f1a1a, 0xe768bb42, 0x948c886f, 0x924370ca, 0x62bffac2, 0x5581fc95, menjadi chipper text. Setelah plaintext di enkripsi, rubah kembali (dekripsi) ke plaintext semula.
Diketahui:
Plaintext -> 123456789abcdef7abcdef1234567897
Kunci -> 0xc63f1a1a, 0xe768bb42, 0x948c886f, 0x924370ca, 0x62bffac2, 0x5581fc95
Hasil:
            Chipertext -> 8351776E461394F01355E589F6B2E010
            Plaintext -> 123456789abcdef7abcdef1234567897
3.      Enkripsi plaintext 123456789abcdef7 dengan kunci 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, menjadi chipper text. Setelah plaintext di enkripsi, rubah kembali (dekripsi) ke plaintext semula.
Diketahui:
Plaintext -> 123456789abcdef7
kunci -> 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
Hasil:
            Chipertext -> 14F8E38D6FAD8E6C
            Plaintext -> 123456789ABCDEF7
4.      Enkripsi plaintext 123456789abcdef7abcdef1234567897 dengan kunci 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, menjadi chipper text. Setelah plaintext di enkripsi, rubah kembali (dekripsi) ke plaintext semula.
Diketahui:
Plaintext -> 123456789abcdef7abcdef1234567897
kunci -> 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
Hasil:
            Chipertext -> 14F8E38D6FAD8E6C1EACDF290FD20124
            Plaintext -> 123456789abcdef7abcdef1234567897


E.     Implementasi
Hal yang perlu di import
Import java.util.arrays agar file dapat mengelola array, kemudian import java.lang.Byte agar file dapat mengelola byte. Setelah itu import java.util.scanner agar file dapat menerima input secara otomatis. Import javax.xml.bind.DataTypeConverter untuk konversi tipe data. Project ini digunakan untuk merubah string hex ke byte array.
Main

Pada main program terdapat variable byte[] data yang digunakan untuk menampung data 8 byte. Kemudian terdapat int key[] yang berfungsi untuk menyimpan key. Scanner input deklarasi variable input agar bisa digunakan untuk input data ke program secara dinamis. int n digunakan sebagai variable penyimpan pilihan menu byte yang dipilih ketika program dijalankan. Variable s dan hasil digunakan untuk menampung string, s digunakn sebagai penampung inputan sedangkan hasil digunakan untuk menampung chipertext. s = input.next(), deklarasi untuk input data string. if(s.length() != jumlah data) digunakan untuk mengecek panjang data apakah sesuai dengan jumlah data yang ditentukan atau tidak, jika tidak maka program akan berhenti berjalan. jika bener , program akan melanjutkan ke proses selanjutnya. hitung(parameter 1, parameter 2, parameter 3,  parameter 4) untuk memangil fungsi hitung dengan 4 parameter, parameter 1 digunakan untuk menampung string inputan, parameter 2, digunakan untuk berapa banyak jumlah perulangan, parameter 3 digunakan untuk key, parameter ke 4 untuk mententukan apakah proses enkrip atau dekrip yang akan dijalankan.



Fungsi Hitung

Fungsi Enkrip
Fungsi enkrip ini menerima 8 data byte serta key array. Pada baris code ke 60 sisi kiri blok diambil dari 4 byte pertama di xor dengan key index ke 4, kemudian untuk sisi blok kanan didapat dari nilai blok kiri xor dengan byte ke 5 sampai 8 xor dengan key 5 setelah itu pada baris code 62 sampai 67 dilakukan iterasi, Untuk i = 1 hingga i = 4, Li ←Ri-1 Ri ←Li-1 f(Ri-1, Ki-1). Setelah iterasi selesai Ls ← LsRs , kemudian dilakukan proses XOR final subkey.
Fungsi Dekrip

Fungsi dekrip ini hampir sama dengan funsi enkrip, namun juga memiliki perbedaan yang tertulis dibawah:
LO ←LOR0.
Rs ← RsLs
Ls ← LsKey ke 4
Rs ← RsKey ke 5 
            Fungsi f(A,Y)
Pada fungsi f tersebut  y1,y2,y0,y3 data tersebut sesuai dengan table 1.
S0 dan S1 menambahkan 1 bit d {0,1} menjadi 8-bit argument x dan y, dengan mengabaikan carry dari bit teratas, kemudian hasilnya digeser ke kiri sebanyak 2-bit (ROT2).
Fungsi pack dan upack
Fungsi pack digunakan untuk merubah 4 byte ke 32 bit, sedangkan unpack merubah data 32 bit menjadi 4 byte.

F.     Hasil Pengujian
Panjang Data
8 byte
16 byte
32 byte
64 byte
128 byte
256 byte
Enkripsi
4,823 ms
4,573 ms
10,039 ms
4,278 ms
9,367 ms
11,858 ms
Dekripsi
0,303 ms
0,376 ms
0.949 ms
0,337 ms
2,668 ms
1,521 ms
Troughput Enkripsi
0,602ms
0,285 ms
0,313 ms
0,066 ms
0,073 ms
0,043 ms
Troughput Deskripsi
0,037 ms
0,023 ms
0,029 ms
0,005 ms
0,020 ms
0,005 ms

Dari hasil pengujian diatas dapat dimpulkan semakin banyak data yang diolah maka akan semakin banyak waktu yang dibutuhkan untuk enkrip atau dekrip. Sedangkan untuk perbandingan waktu enkrip dan dekrip, proses enkripsi lebih lama dari pada proses dekripsi.


Daftar Pustaka
Livia Andara (2010). Perbandingan International Data Encryption Algorithm (IDEA) dan The Fast Data Enchipherment Algorithm (FEAL). Bandung: Institut Teknologi Bandung.

Nasution, M.Dina. (2012). Perancanagan dan Implementasi Enkripsi dan Dekripsi SMS dengan Menggunakan Algoritma FEAL.Bandung: Universitas Telkom.


Tjiharjadi, S & Wijaya C. M. (2009). Pengamanan Data menggunakan Metode Enkripsi Simetri dengan Algoritma FEAL. Yogyakarta: Seminar Nasional Aplikasi Teknologi Informasi. 

No comments:

5 Tahapan Manajemen Layanan TI menurut ITIL

Apa itu Information Technology Infrastructure Library ( ITIL ) ? ITIL adalah kerangka umum yang menggambarkan Best Practice dalam...