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
←R0⊕L0
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
← Ls⊕Rs
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
←LO⊕R0.
5. Sama
halnya dengan proses enkripsi lakukan (kebalikan), untuk i = 1 hingga i = 4,
6. Rs
← Rs⊕Ls
7. Ls
← Ls⊕Key
ke 4
8. Rs
← Rs⊕Key
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 ← Ls⊕Rs
, kemudian dilakukan proses XOR final subkey.
Fungsi Dekrip
Fungsi dekrip ini hampir sama dengan funsi enkrip, namun
juga memiliki perbedaan yang tertulis dibawah:
LO ←LO⊕R0.
Rs ← Rs⊕Ls
Ls ← Ls⊕Key ke 4
Rs ← Rs⊕Key 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:
Post a Comment