perancangan dan implementasi kriptosistem data...
TRANSCRIPT
1. Pendahuluan
Adanya perkembangan teknologi yang sangat pesat pada masa sekarang,
membuat manusia membutuhkan suatu sistem informasi untuk mempermudah
mengakses, mengirim, atau bertukar informasi pada suatu instansi ataupun
perusahaan yang sesuai dengan kebutuhan. Kemajuan sistem informasi memiliki
banyak keuntungan tetapi juga rawan dari hal yang negatif seperti pencurian
informasi. Misalnya pada sebuah perusahaan, beberapa informasi yang sifatnya
rahasia dan hanya boleh diketahui oleh orang-orang tertentu dalam sebuah
perusahaan tersebut seperti informasi tentang cara membuat produk yang sedang
dikembangkan. Seandainya data yang berisi informasi tersebut jatuh kepada pihak
lawan bisnis, maka perusahaan akan mengalami kerugian.
Untuk mengantisipasi hal yang tidak diinginkan seperti pencurian informasi,
maka dibutuhkan suatu sistem untuk mengamankan suatu informasi. Keamanan
informasi yang terkomputasi merupakan suatu masalah yang amat penting bagi
sebuah perusahan, lembaga, perguruan tinggi maupun individu. Sistem untuk
mengamankan informasi pada masalah ini dapat memanfaat kriptografi. “Menurut
Bruce Schneier, kriptografi adalah ilmu dan seni untuk menjaga keamanan
pesan”[1].
Algoritma kriptografi modern dapat dibagi menjadi dua algoritma kunci
yaitu algoritma kunci simetris dan algoritma asimetris. Algoritma simetris adalah
algoritma yang menggunakan kunci enkripsi dan dekripsi yang sama. Sedangkan
algoritma asimetris adalah algoritma yang menggunakan kunci enkripsi dan
dekripsi yang berbeda. Adapula algoritma yang beroperasi dalam mode bit dapat
dibagi menjadi dua, yaitu stream chiper (cipher aliran) dan block cipher (cipher
blok). Stream cipher adalah algoritma yang melakukan operasi dalam bentuk bit
tunggal. Sedangkan block cipher adalah algoritma yang melakukan operasi dalam
bentuk blok bit. Stream cipher dan block cipher adalah algoritma yang digunakan
pada algoritma kunci simetris. Saat ini sudah banyak aplikasi enkripsi yang
menggunakan algoritma kunci simetris. Salah satu algoritma dengan kunci
simetris adalah DES (Data Encryption Standards). DES merupakan algoritma
enkripsi standart yang dikeluarkan oleh National Institute of Standards and
Technology (NIST).
NIST mengadakan Advanced Encryption Standard (AES) sebagai standart
baru. Salah satu kandidat AES adalah algoritma twofish dibuat oleh Bruce
Schneier. Twofish memenuhi semua kriteria yang dibutuhkan NIST, yaitu 128-bit
block, 128 bit, 192 bit dan 256 bit kunci. Beberapa kelebihan twofish yaitu twofish
adalah cipher blok 128 bit yang menerima kunci dengan panjang variabel 256 bits,
twofish tidak mengandung kunci lemah, dan twofish telah didesain dari awal
dengan menekankan pada kinerjanya. Twofish sangat efisien diimplementasikan
pada beragam platform, yaitu CPU 32 bit, smart card 8 bit, dan perangkat keras
VLSI. Hasilnya merupakan algoritma yang sangat fleksibel yang dapat
diimplementasikan secara efisien dalam beragam aplikasi kriptografi [2].
Berdasarkan latar belakang tersebut, akan dilakukan penelitian mengenai
algoritma kriptografi Twofish, dengan mengambil judul penelitian “Perancangan
dan Implementasi Kriptosistem Data Menggunakan Algoritma Twofish”, yang
akan membahas mengenai proses enkripsi dan dekripsi pada data teks dan data
gambar dengan menggunakan algoritma Twofish.
2. Tinjauan Pustaka
Penelitian terdahulu tentang “Studi Enkripsi dan Dekripsi file dengan
menggunakan Algoritma Twofish”. Berdasarkan pembahasan dari penelitian yang
dilakukan sebelumnya menyebutkan, bahwa Algoritma Twofish dapat
diimplementasikan untuk enkripsi dan dekripsi data, dengan menguji data .Doc,
.Pdf, .JPG, PPT, dan MP3. File yang dienkripsikan menjadi karakter yang acak
sehingga menjadi file yang rusak [3].
Terdapat juga penelitian sebelumnya yang dilakukan yaitu “Studi dan
Implementasi Enkripsi Pengiriman Pesan Suara Menggunakan Algoritma
Twofish”. Dalam penelitian yang dilakukan, peneliti menyimpulkan 3 hal yaitu
algoritma Twofish merupakan algoritma yang dapat diterapkan untuk enkripsi
aliran pesan suara dengan cukup baik setelah mengalami modifikasi pada mode
operasinya. Kualitas suara setelah mengalami kompresi dan enkripsi tetap
memiliki kualitas yang cukup baik. Delay yang dihasilkan meskipun tetap terasa,
dapat dianggap tidak terlalu menggangu karena di bawah 250 milidetik dan suara
yang dihasilkan dapat didengar tanpa terputus-putus [4].
Berdasarkan penelitian yang pernah dilakukan tentang algoritma twofish,
maka akan dilakukan penelitian tentang penerapan algoritma twofish pada enkripsi
dan dekripsi semua jenis data file, dengan panjang kunci 128 bit, serta hasil
enkripsi berbentuk hexadecimal. Kriptosistem dengan Twofish akan dianalisis
dengan melihat proses yang terjadi, terkait kunci yang digunakan, proses enkripsi
dan dekripsi, pada data file. Selanjutnya akan dilihat perbandingan antara waktu
proses enkripsi dan dekripsi, ukuran file setelah kedua proses tersebut
diimplementasikan, serta perbandingan nilai heksadesimal antara file asli, file
hasil enkripsi, dan file hasil dekripsi Penelitian yang dilakukan diharapkan dapat
bermanfaat dalam memberikan keamanan suatu data dan informasi yang dimiliki,
berupa penyandian data dan informasi menjadi sesuatu yang tidak terbaca oleh
pihak yang tidak berhak; juga bermanfaat dalam memberikan tambahan informasi
terkait kunci, proses enkripsi dan dekripsi yang terjadi pada algoritma twofish.
Algoritma Twofish Berdasarkan Schneier, dkk. (1998), twofish merupakan salah satu peserta
AES yang telah memenuhi kriteria National Institute of Standard and Technology
(NIST), dimana kriteria itu antara lain adalah blok sebesar 128 bit, dapat
menggunakan key sepanjang 128 bit, 192 bit, dan 256 bit, efisien untuk
diimplementasikan ke dalam berbagai spesifikasi komputer, memiliki variasi
dalam performa yang disebabkan oleh adanya key schedule, dan lain-lain.
Twofish menggunakan struktur Feistel 16-round dengan whitening tambahan
dalam input dan output. Satu-satunya elemen yang bukan Feistel adalah rotasi 1
(satu) bit. Rotasi tersebut dapat dipindahkan ke fungsi F untuk menciptakan output
berjalan. Plaintext dipecah menjadi empat buah word 32-bit. Pada whitening input,
keempat word itu di XOR-kan dengan empat key word, dan diikuti dengan keenam
belas round. Dalam tiap round, dua word di kiri, digunakan sebagai input fungsi g
(Salah satunya dirotasikan dengan 8 bit terlebih dahulu). Algoritma Twofish
menggunakan struktur jaringan Feistel. Jaringan Feistel yang digunakan oleh
Twofish terdiri atas 16 perulangan. Fungsi f pada algoritma twofish terdiri dari
beberapa tahap yaitu : Fungsi g, yang terdiri dari 4 s-box dan matriks MDS;
Pseudo-Hadamard Transformatio; Penambahan hasil PHT dengan kunci.
Unsur Pembangun Algoritma Twofish
Unsur pembangun twofish terdiri dari feistel network (jaringan feistel), s-boxes,
matriks MDS, transformasi pseudo-hadamard (PHT), whitening, dan key
schedule (penjadwalan kunci). Penjabaran dari unsur-unsur pembangun twofish,
dijelaskan sebagai berikut:
Feistel Network (Jaringan Feistel)
Schneier (1998) menjelaskan bahwa “sebuah Fietsel Network adalah metode
umum untuk mentransformasi suatu fungsi menjadi bentuk permutasi. Bagian
paling fundamental dari Jaringan Fietsel adalah fungsi F: sebuah pemetaan key-
dependent dari suatu input string menjadi output string. Dalam Twofish dilakukan
Fietsel Network sebanyak 16 kali.” Pada twofish, jaringan feistel terdiri dari Input
Whitening, S-boxes, Transformasi Pseudo Hadamard (PHT), dan Output
Whitening.
S-Boxes “Sebuah S-box adalah operasi subsitusi table-driven non linear yang digunakan
dalam block cipher. S-boxes bervariasi antara setiap ukuran input dan ukuran
output-nya, dan bisa diciptakan secara random atau dengan algoritma. Twofish
menggunakan empat bijective, key-dependent dan 8-by-8-bit S-boxes. S-boxes ini
dibuat menggunakan dua permutasi 8-by-8-bit dan material key.” (Schneier dkk,
1998).
Matrik MDS
Code Maximum Distance Separable (MDS) melalui sebuah pemetaan linear dari
elemen field a ke elemen field b, menghasilkan campuran dari vector a+b elemen,
dengan properti jumlah minimum angka tidak nol dalam vector tidak nol paling
kurang b+1. Dengan kata lain “Distance” adalah jumlah elemen yang berbeda
antara dua vector yang berbeda yang dihasilkan oleh MDS paling kurang b+1.
Pemetaan MDS bisa direpresentasikan oleh matriks MDS yang terdiri dari a x b
elemen (Schneier dkk, 1998: 5).
Transformasi Pseudo-Hadamard (PHT)
Transformasi Pseudo-Hadamard (PHT) adalah operasi sederhana yang bekerja
dengan cepat dalam software. Diberikan dua input, a dan b, dan PHT 32 bit
didefinisikan sebagai :
A0 = a + b mod 232
B0 = a + 2b mod 232
Twofish menggunakan PHT 32 bit untuk melakukan mixing terhadap output-nya
dari dua buah fungsi g 32 bit parallel. PHT ini dapat dieksekusi dalam dua opcode
di atas kebanyakan microprocessor modern, termasuk keluarga Pentium.
(Schneier dkk, 1998).
Whitening
Schneier (1998:5) menjabarkan bahwa “whitening merupakan teknik meng-XOR-
kan key material sebelum ronde pertama dan sesudah ronde terakhir. Dalam
serangan terhadap Twofish, terbukti bahwa whitening secara substansial
meningkatkan kesulitan menyerang cipher, dengan jalan menyembunyikan input
spesifik untuk awal dan akhir ronde dari Twofish.”
Key Schedule (Penjadwalan Kunci)
“Key schedule adalah suatu cara dimana bit-bit key diubah menjadi key-key bulat
yang dapat digunakan oleh cipher. Twofish memerlukan material key yang sangat
banyak, dan memiliki key schedule yang rumit” (Schneier dkk, 1998:5). Jadi
secara singkat, key schedule (penjadwalan kunci) adalah proses pengacakan kunci
untuk melakukan proses enkripsi sehingga tingkat kerumitannya menjadi tinggi.
Fungsi F
Fungsi F adalah permutasi yang bergantung pada kunci dengan nilai 64 bit.
Fungsi ini menerima 3 (tiga) argumen, dua buah 32 bit R0 dan R1, dan nomor
putaran untuk menentukan subkunci mana yang dipakai. R0 akan diserahkan ke
fungsi g yang akan mengembalikan T0. R1 akan digeser sejauh 8 bit, yang
kemudian diberikan juga ke fungsi g yang akan mengembalikan T1. Hasil T0 dan
T1 kemudian dikombinasikan ulang menggunakan transformasi pseudo-
Hadamard, yang kemudian ditambahkan dengan dua buah 32 bit dari kunci.
T0 = g(R0)
T1 = g(shiftLeft(R1,8))
F0 = (T0+T1+K2r+8) mod 232
F1 = (T0+2T1+K2r+9) mod 232
F0 dan F1 adalah hasil dari F, yang masing-masing sepanjang 32 bit. Hasil
keluaran ini nantinya akan dipertukarkan dan dimasukkan kembali ke putaran
selanjutnya.
Fungsi G
Fungsi g merupakan jantung dari keseluruhan algoritma twofish. 32 bit masukan X
dari fungsi F dipecah menjadi 4 buah yang masing-masing sepanjang 8 bit. Setiap
8 bit kemudian diproses dengan kotak S yang bersesuaian. Setiap kotak S bersifat
bijektif, yaitu menerima 8 bit dan mengeluarkan 8 bit pula. 4 buah 8 bit hasil
keluaran, kemudian dikalikan dengan matriks Most Distance Separable (MDS)
4x4. Hasil pengalian kemudian diartikan sebagai 32 bit, yang merupakan keluaran
dari fungsi g, yang kemudian akan dikembalikan ke fungsi f.
Algoritma Twofish terdiri dari 3 (tiga) tahapan proses, yaitu penjadwalan
kunci, proses enkripsi, dan proses dekripsi. Langkah-langkah dalam proses
penjadwalan kunci pada algoritma twofish, adalah sebagai berikut :
1. Sebelum melalui tahapan enkripsi, maka harus melalui penjadwalan kunci.
Panjang kunci yang didefinisikan twofish sepanjang 128 bit, 192 bit, dan
256 bit. Apabila input kunci yang dimasukkan kurang dari ketentuan
tersebut, maka akan ditambahkan zero byte sampai panjang kunci
memenuhi ketentuan tersebut.
2. Setelah itu, kunci dibagi menjadi vektor Me, Mo, dan S. Vektor Me dan
Mo digunakan pada fungsi h sebagai list, sedangkan vektor S digunakan
untuk tahap enkripsi pada fungsi g.
3. Memasukkan masing-masing word kunci Kj yang diekspansi, yaitu 2i dan
2i+1 ke dalam fungsi h, yaitu melalui permutasi q0 dan q1 dilanjutkan
dengan matrik MDS.
4. Hasil dari word 2i melalui proses PHT, sedangkan word 2i+1 sebelum
melalui proses PHT dilakukan rotasi ke kiri sejauh 8 bit. Maka hasil dari
proses tersebut menjadi kunci yang sudah terjadwal.
Gambar 1. Diagram Fungsi h (Schneier, 1998 : 9)
Langkah-langkah dalam proses enkripsi pada algoritma twofish, adalah sebagai
berikut :
1. Input plaintext sebesar 128 bit akan dibagi menjadi empat word yaitu P0,
P1, P2, dan P3, yang masing-masing sebesar 32 bit. P0 dan P1 akan menjadi
bagian kiri, sedangkan P2 dan P3 akan menjadi bagian kanan.
2. Plaintext akan melalui proses input whitening (Gambar 2) yaitu input akan
di-XOR dengan empat word kunci yang telah terjadwal yaitu K0, K1, K2,
dan K3. Secara formalnya adalah sebagai berikut : Ro,i = Pi xor Ki
i = 0, …, 3
Gambar 2. Proses Whitening
3. Proses berikutnya, input akan melalui proses pada fungsi F yang meliputi di
dalamnya adalah fungsi g, dan dilanjutkan dengan PHT (pseudo hadamard
transform), dan dilakukan penambahan hasil PHT dengan kunci. Proses
fungsi F tersebut dilakukan secara bertahap. R0 dan R1 yang merupakan hasil
whitening akan menjadi input untuk fungsi F.
4. R0 dan R1 akan dimasukkan ke dalam fungsi g yang merupakan bagian awal
dari fungsi F. Untuk R1, sebelum dimasukkan ke dalam fungsi g akan dirotasi
ke kiri sejauh 8 bit. R0 dan R1 melalui S-box, dan selanjutnya akan dikalikan
dengan matriks MDS. Hasil dari fungsi g ini masing-masing menjadi T0 dan
T1.
5. T0 dan T1 akan melalui proses PHT yang merupakan penggabungan T0 dan
T1 dimana T0 + T1 dan T0 + 2T1. Setelah itu hasil dari PHT tersebut masing-
masing akan ditambahkan dengan kunci yang sudah terjadwal yaitu K2r+8
dan K2r+9. Hasil dari fungsi F adalah F0 dan F1, maka dengan demikian
fungsi F (Gambar 3) telah terpenuhi.
Gambar 3 Fungsi F
6. Setelah itu, F0 dan F1 masing-masing di-XOR dengan R2 dan R3. Hasil dari R2
XOR F0 dirotasi ke kanan sejauh 1 bit. Sedangkan R3 XOR F1, sebelumnya R3
dirotasi ke kiri sejauh 1 bit.
7. Setelah itu, akan dilakukan iterasi sebanyak 16 kali. Setiap iterasi sama
dengan proses sebelumnya.
8. Hasil dari swap blok terakhir (Gambar 4) adalah penukaran bagian kanan dan
kiri yang di-undo.
9. Hasil dari 16 round enkripsi akan melalui output whitening, yaitu proses
peng-XOR-an 16 round enkripsi dengan K4, K5, K6, dan K7.
Gambar 4. Swap Blok Terakhir dan Output Whitening
Langkah-langkah dalam proses dekripsi pada algoritma twofish, sama dengan
proses enkripsi, tetapi hanya arahnya saja yang berlawanan. Proses yang dilalui
secara berurutan yaitu : output whitening, swap blok trakhir, 16 iterasi dekripsi, dan
input whitening. Input untuk proses dekripsi adalah ciphertext dan kunci, untuk
memperoleh plaintext. Kunci untuk dekripsi sama dengan dengan kunci enkripsi,
karena algoritma twofish merupakan algoritma kriptografi dengan kunci bersifat
simetris.
3. Metode dan Perancangan Sistem
Prototype Model adalah metode pengembangan perangkat lunak yang
banyak digunakan. Metode ini memungkinkan adanya interaksi antara
pengembang sistem dengan pengguna sistem nantinya, sehingga dapat mengatasi
ketidakserasian antara pengembang dan pengguna. Bagan mengenai prototype
model dapat dilihat pada Gambar 5.
Gambar 5 Bagan Prototype Model [6]
Tahap-tahap dalam Prototype Model adalah sebagai berikut:
1. Listen to Costumer; Pada tahap ini dilakukan analisis terhadap permasalahan
yang ada, yaitu mendapatkan data dan literatur yang terkait dengan proses
enkripsi dan dekripsi terhadap data file, menggunakan algoritma twofish;
melalui dokumen dan referensi yang ada.
2. Build; Selanjutnya setelah memperoleh data dan mengetahui proses enkripsi
dan dekripsi dengan twofish, langkah berikutnya adalah membuat
perancangan proses enkripsi dan dekripsi dengan menggunakan Data Flow
Diagram (DFD) dan flowchart. Proses enkripsi dan dekripsi diterapkan pada
semua data file. Kunci yang digunakan sesuai dengan ketentuan algoritma
twofish yaitu 128 bit, dengan penyesuaian pada masukan panjang data kunci
yang bersifat fleksibel. Modifikasi juga dilakukan untuk hasil enkripsi yaitu
berupa heksadesimal. Pada proses pembentukan kunci, begitu juga pesan
yang akan dienkripsi, jika tidak sesuai dengan ketentuan algoritma twofish,
maka akan dilakukan penyesuaian. Penyesuaian dilakukan karena algoritma
twofish merupakan algoritma yang berjenis block cipher. Pada algoritma
twofish penyesuaian panjang data kunci menggunakan padding yaitu
penambahan bit 0, sedangkan dalam penelitian ini penyesuaian untuk panjang
data kunci dilakukan melalui proses pengulangan kunci, ide ini didasarkan
pada konsep substitusi berulang pada algoritma vigenere cipher. Sedangkan
penyesuaian untuk panjang data plaintext, dilakukan melalui proses padding,
yaitu penambahan bit 0, pada block yang tidak mencapai 16 byte. Pada tahap
ini juga, dilakukan perancangan user interface.
3. Costumer Test
Pada Tahap ini dilakukan pengujian sistem, yaitu menjalankan proses
implementasi sistem, dengan menguji data file, yaitu data .doc, .pdf, .jpeg,
.png, dan .mp3. Pada tahap ini juga akan diuji apakah hasil yang diberikan
oleh kriptosistem sudah sesuai dengan konsep kriptografi dan algoritma
twofish, menguji waktu proses yang digunakan, serta perubahan ukuran file,
setelah proses enkripsi dan dekripsi dijalankan.
Perancangan Sistem
Perancangan sistem merupakan gambaran, dan perancangan dari sistem yang akan
dibuat. Pada bagian ini, tool yang digunakan adalah Data Flow Diagram (DFD).
DFD digunakan untuk menggambarkan hubungan sistem dengan lingkungan,
mulai dari proses masukan hingga menjadi keluaran.
Data Flow Diagram (DFD)
Diagram konteks atau DFD level 0 dipakai untuk menggambarkan interaksi dan
aliran data yang berlangsung antara entitas di luar sistem dengan sistem itu
sendiri. Bagan diagram konteks dari aplikasi ini terlihat pada Gambar 6.
Gambar 6 Diagram Konteks
Diagram konteks sistem pada Gambar 6, dapat dijelaskan sebagai berikut.
User memasukkan plaintext untuk dilakukan proses enkripsi. Sistem akan
memberikan plain yang telah dienkripsi dan kunci hasil enkripsi. User
memasukkan cipher hasil enkripsi dan kunci ke dalam sistem, dan sistem akan
memberikan output berupa plain hasil dekripsi. Proses yang ada pada diagram
konteks kemudian diuraikan dalam bentuk yang lebih luas, yaitu DFD level 1.
Dalam DFD level 1, diuraikan secara bertingkat dimana peringkat yang lebih
tinggi mendeskripsikan secara lebih rinci apa yang dilakukan masing-masing
proses.
Gambar 7 Diagram DFD Level 1
Gambar 7 menunjukkan DFD level 1 dari sistem, yang dapat dijelaskan
sebagai berikut. Pada level 1 dari sistem ini terdapat dua proses, proses enkripsi
dan proses dekripsi. Pada proses enkripsi, User memasukkan plain ke dalam
sistem, dan sistem akan memberikan output berupa data yang telah dienkripsi, dan
kunci yang digunakan saat proses enkripsi. Pada proses dekripsi, user
memasukkan cipher yang merupakan hasil enkripsi yang akan didekripsi, beserta
kunci ke dalam sistem, dan sistem akan memberikan output berupa data yang
telah didekripsi kepada user.
Proses enkripsi dan dekripsi dengan algoritma Twofish
Pada penelitian ini, kunci yang digunakan adalah kunci dengan panjang
128 bit. Aplikasi yang dikembangkan pada penelitian ini, memberikan
fleksibilitas penggunaan teori dalam aplikasi, berupa proteksi/error trapping
terhadap panjang data yang dimasukkan sebagai kunci. Jika data yang dimasukkan
dalam isian kunci, tidak dalam panjang 128 bit, maka akan dilakukan penyesuaian
untuk mencapai 128 bit, sehingga tidak muncul error pada proses pembuatan
kunci. Hal berikutnya yang dimodifikasi dalam penelitian ini adalah pada hasil
enkripsi (ciphertext) dari algoritma twofish. Ciphertext yang dihasilkan oleh
algoritma Twofish, berbentuk array of byte, yaitu data berupa karakter-karakter
yang tidak dapat dicetak, misalnya karakter white space. Dengan alasan inilah
sehingga dilakukan proses mengubah nilai tiap elemen tersebut menjadi karakter
hexadecimal.
Langkah-langkah proses penjadwalan kunci ke dalam 128 bit kunci (16
byte, dimana 1 karakter 1 byte) di dalam sistem, adalah sebagai berikut:
1. Simpan kunci dalam variabel byte array. -> byte[ ] kunci.
2. Buat 1(satu) variable array penampung dengan panjang 16 byte. -> byte[16]
buffer.
3. Inisialisasi variable index i dan j, dengan nilai masing-masing adalah 0.
4. Lakukan perulangan selama nilai i kurang dari panjang kunci
Salin nilai kunci ke-i ke dalam buffer ke-j ( buffer[j] := kunci[i])
Increment nilai variable index i dan j sebesar 1. (i:=i+1, j:=j+1)
Jika panjang j sama dengan panjang kunci, reset nilai j menjadi 0,
dengan maksud supaya pembacaan kunci dimulai dari depan lagi.
Karena ketika nilai j = panjang kunci, berarti pembacaan sudah sampai
di belakang.
5. Ulangi langkah 4 sampai i bernilai 16
6. Output buffer
Proses penjadwalan kunci dalam bentuk flowchart, ditunjukkan pada
Gambar 8.
Gambar 8 Flowchart Proses Pembentukan Kunci
Kriptosistem yang dibangun, berfungsi untuk melakukan proses enkripsi-
dekripsi pada semua data file, sesuai dengan ketentuan algoritma twofish.
Langkah-langkah yang dikerjakan dalam proses enkripsi, adalah sebagai berikut :
(1) Memulai proses enkripsi (plaintext) dengan ukuran block 128 bit; (2)
Memasukkan kunci yang akan digunakan dalam proses; (3) Jika panjang kunci
yang dimasukkan kurang dari 128 bit maka akan dilakukan penyesuaian panjang
kunci, untuk mencapai 128 bit; (4) Memasukkan file yang akan dienkripsi; (5)
Jika plaintext berukuran 128 bit maka tidak terjadi proses padding; (6) Jika
plaintext berukuran lebih dari 128 bit, maka proses padding akan dilakukan; (7)
Langkah selanjutnya yaitu proses enkripsi 1 (satu) block, jika data belum habis
dibaca maka akan berulang, namun jika data habis dibaca maka sistem akan
menampilkan hasil enkripsi; dan (7) Selesai. Proses enkripsi dalam bentuk
flowchart, ditunjukkan pada Gambar 9.
Gambar 9. Flowchart Proses Enkripsi
Langkah-langkah yang dikerjakan dalam proses dekripsi, adalah sebagai
berikut : (1) Memulai proses dekripsi (ciphertext) dengan ukuran block 128 bit;
(2) Memasukkan kunci yang akan digunakan dalam proses; (3) Jika panjang kunci
yang dimasukkan kurang dari 128 bit, maka akan dilakukan penyesuaian panjang
kunci, untuk mencapai 128 bit; (4) Memasukkan file yang akan didekripsi; (5)
Membaca 1 (satu) block (16 byte cipher data); (6) Langkah selanjutnya yaitu
proses dekripsi 1 (satu) block, jika data belum habis dibaca, maka akan berulang;
(7) Menghapus padding; (8) Sistem menampilkan hasil dekripsi; dan (9) Selesai.
Proses dekripsi dalam bentuk flowchart, ditunjukkan pada Gambar 10.
Gambar 10 Flowchart Proses Dekripsi
4. Pembahasan dan Pengujian
Penerapan Algoritma Twofish (128 bit key length)
Twofish merupakan algoritma kriptografi dengan mode operasi ECB
(Electronic Code Book), yang berarti sebuah blok pada plaintext dienkripsi ke
dalam sebuah blok ciphertext dengan panjang blok yang sama, atau dapat
dikatakan bahwa proses enkripsi dilakukan block per block. 1 (satu) block
berukuran 16 byte. Jika plaintext tidak memenuhi 16 byte, maka dilakukan proses
padding. Proses padding adalah proses penambahan byte-byte dummy berupa
karakter NULL pada byte-byte sisa yang masih kosong pada blok terakhir
private void kunciTextKeyReleased(java.awt.event.KeyEvent evt) {
String expand = Utility.expandKey(this.kunciText.getText(), 1
16);
this.jTextField1.setText(expand);
byte[] values = expand.getBytes();
String cetak = Utility.printBytes(values);
this.byteKunciText.setText(cetak);
}
private void
generateButtonActionPerformed(java.awt.event.ActionEvent evt) {
Object key = null;
try {
byte[] byteKey = getKey();
key = Twofish_Algorithm.makeKey(byteKey); 2
int[] subKeys = (int[]) ((Object[]) key)[1];
Object[][] data = new Object[subKeys.length][3];
Object[] column = {"index", "SubKey (int decimal)",
"SubKey (hexadecimal)"};
for (int i = 0; i < subKeys.length; i++) {
data[i] = new Object[]{i, subKeys[i],
Utility.intToString(subKeys[i])};
}
this.jTable1.setModel(new DefaultTableModel(data,
column));
} catch (InvalidKeyException ex) {
Logger.getLogger(StepKeyFrame.class.getName()).log(Level.SEVERE,
null, ex);
}
}
plaintext, sehingga ukurannya menjadi sama dengan ukuran blok penyandian.
Ukuran plaintext yang akan disandikan sebagian besar tidak merupakan kelipatan
ukuran blok penyandian. Hal ini mengakibatkan blok terakhir mungkin akan
memiliki ukuran yang lebih kecil dari blok penyandian. Karena pada Block Cipher
mengharuskan blok yang akan disandikan memiliki panjang yang tetap, maka
pada blok terakhir tersebut harus ditambahkan byte-byte tertentu sehingga
ukurannya menjadi sama dengan ukuran blok penyandian.
Dalam penelitian yang dilakukan, Padding menggunakan nilai 0 byte,
karena mewakili istilah “tidak ada arti”. Padding diletakkan di bagian belakang
data yang akan dienkripsi. Pemilihan padding menggunakan pseudocode berikut.
if L mod 16 = 0 padding = 0
else = padding = 16 – ( L mod 16)
dimana: 16: konstanta, 16 byte per block sesuai ketentuan Twofish, dan L panjang
data.
Pembentukan Kunci
Perintah yang digunakan dalam proses pembentukan kunci dan
fleksibilitas kunci, terlihat pada Kode Program 1. Kode Program 1 Kode Program untuk Proses Pembentukan Kunci
Pada Kode Program 1, perintah pada bagian ke-1 menunjukkan proses
penyesuaian panjang kunci yang dibangun. Selanjutnya, proses pembangkitan kunci
yang ada pada sistem, terlihat pada perintah bagian ke-2.
Implementasi Proses Enkripsi dan Dekripsi Pada Data
Proses enkripsi adalah proses untuk mengacak data sehingga tidak dapat
dibaca oleh pihak yang tidak memiliki hak untuk mengakses data tersebut. Proses
enkripsi bertujuan untuk mengamankan data maupun informasi yang bersifat
rahasia. Halaman untuk Proses Enkripsi ditunjukkan pada Gambar 11.
Gambar 11 Proses Enkripsi Data
Kode Program yang digunakan dalam proses enkripsi terlihat pada Kode
Program 2.
Kode Program 2 Kode Program untuk Proses Enkripsi
public byte[] encrypt(byte[] message, String key) {
mulai = Calendar.getInstance();
StringBuilder builder = new StringBuilder();
Twofish_Algorithm ta = new Twofish_Algorithm();
int keySize = 16;
String expandedKey = expandKey(key, keySize);
builder.append("Panjang Kunci: " 1
+ expandedKey.length() + " bytes\n");
try {
Object sessionKey = ta.makeKey
(expandedKey.getBytes()); 2
byte[] paddedMessage = padMessage(message);
builder.append("Panjang Plain Data: " + 3
paddedMessage.length + " bytes\n");
int tambahan = paddedMessage.length - message.length;
message = paddedMessage;
List<Byte> listResult = new ArrayList<Byte>();
startProgressBar(message.length * 3);
for (int i = 0; i < message.length; i += 16) {
byte[] block = new byte[16];
System.arraycopy(message, i, block, 0,
block.length); 4
byte[] result = ta.blockEncrypt(block, 0, sessionKey);
for (int j = 0; j < result.length; j++) {
listResult.add(result[j]);
}
public byte[] decrypt() {
Calendar mulai = Calendar.getInstance();
StringBuilder builder = new StringBuilder();
Twofish_Algorithm ta = new Twofish_Algorithm();
int keySize = 16;
String expandedKey = expandKey(this.dKeyText.getText(), 1
keySize);
builder.append("Panjang Kunci: "
+ expandedKey.length() + " bytes\n");
try {
RandomAccessFile r = new
RandomAccessFile(cipherUrlTextField.getText(), "r");
byte[] message = new byte[(int) r.length()];
r.read(message);
builder.append("Panjang cipher Data: " 2
+ r.length() + " bytes\n");
int tambahan = (int) message[0];
Object sessionKey = ta.makeKey(expandedKey.getBytes());
3
List<Byte> listResult = new ArrayList<Byte>();
for (int i = 1; i < message.length; i += 16) {
byte[] block = new byte[16];
System.arraycopy(message, i, block, 0, block.length);
byte[]result = ta.blockDecrypt(block,0,sessionKey); 4
for (int j = 0; j < result.length; j++) {
listResult.add(result[j]);
}
}
Pada Kode Program 2, perintah pada bagian ke-1 menunjukkan pembuatan
informasi mengenai panjang kunci yang dimasukkan untuk dilakukan proses
enkripsi. Perintah pada bagian ke-2 menunjukkan penjadwalan kunci. Selanjutnya,
sistem akan mengambil dan membaca plain data yang sudah dipilih sebelumnya,
untuk menjalankan proses enkripsi seperti terlihat pada perintah bagian ke-3.
Selanjutnya pada perintah bagian ke-4 menunjukkan proses enkripsi per blok. Kode Program 3 Kode Program untuk Proses Dekripsi
Perintah yang digunakan dalam proses dekripsi terlihat pada Kode
Program 3, dengan penjelasan sebagai berikut, perintah pada bagian ke-1
menunjukkan pembuatan informasi mengenai panjang kunci yang dimasukkan
untuk dilakukan proses dekripsi. Selanjutnya, sistem akan mengambil dan
membaca cipher data yang sudah dipilih sebelumnya, untuk dijalankan proses
enkripsi seperti terlihat pada perintah bagian ke-2. Perintah bagian ke-3
menunjukkan penjadwalan kunci. Selanjutnya pada perintah bagian ke-4
menunjukkan proses dekripsi per block, 1 block 16 byte.
Halaman untuk proses dekripsi ditunjukkan pada Gambar 12.
Gambar 12 Proses Dekripsi Data
Pengujian Pada Proses Enkripsi dan Dekripsi Terhadap Data
Tabel 3 Tabel Pengamatan Ukuran Data Pada Proses
Enkripsi dan Dekripsi NO Nama Data Ukuran Data Asli
(Bytes)
Ukuran Data Hasil Enkripsi (Bytes) Ukuran Data Hasil
Dekripsi (Bytes)
1 k2i.jpg 103,166 103,169 103,166
2 Bab 1.docx 25,761 25,776 25,761
3 672008110.pptx 422,306 422,320 422,306
4 papertwofish.pdf 228,570 228,576 228,570
5 TwofishAppHexa.rar 131,905 131,920 131,905
Gambar 13 Grafik Pengujian Dengan Panjang File Berbeda
0
50
100
150
200
250
300
350
400
450
uku
ran
gam
bar
file yang diuji
Gambar Asli
Enkripsi
Dekripsi
Berdasarkan hasil pengujian pada Tabel 3, menunjukkan bahwa ukuran file
asli dengan ukuran file yang telah dienkripsi mengalami perbedaan, dimana ukuran
file yang telah dienkripsi lebih besar daripada file asli. Tabel 3 juga menunjukkan
bahwa file asli dengan file hasil dekripsi memiliki ukuran byte yang sama. Tabel 4 Tabel Pengamatan Waktu Proses Enkripsi dan Dekripsi
Terhadap Data
No. Data Ukuran Data Asli
(Bytes) Lamanya Proses Enkripsi (Detik)
Lamanya Proses Dekripsi
(Detik)
1 k2i.jpg 103,166 0.06300000000192085 0.06999999999807915
2 Bab 1.docx 25,761 0.03200000000651926 0.04700000000593718
3 672008110.pptx 422,306 0.1869999999908032 0.20300000000861473
4 Papertwofish.pdf 228,570 0.10899999999674037 0.12899999999674037
5 TwofishAppHexa.rar 131,920 0.07799999999406282 0.07800000000861473
Berdasarkan hasil pengujian pada Tabel 4, menunjukkan bahwa semakin
besar ukuran data, maka waktu yang digunakan akan semakin lama. Tabel 4 juga
menunjukkan bahwa waktu yang digunakan pada proses dekripsi data lebih lama
dibandingkan waktu yang digunakan pada proses enkripsi data, disebabkan karena
ukuran data yang telah dienkripsi lebih besar daripada data asli, Sehingga dapat
dilihat dengan jelas bahwa waktu yang digunakan dalam proses dekripsi lebih
besar daripada waktu yang digunakan pada proses enkripsi.
Waktu proses dipengaruhi oleh ukuran data, dimana semakin besar ukuran
data, maka waktu yang dibutuhkan dalam proses enkripsi dan dekripsi juga
semakin lama. Proses enkripsi data diawali dengan tahapan-tahapan sebagai
berikut: (1) mengambil data yang akan dienkripsi dari lokasi penyimpanan, (2)
memasukkan kunci pada text area yang disediakan, (3) melakukan proses enkripsi
terhadap data yang akan dienkripsi, dan (4) menyimpan hasil enkripsi terhadap
data yang diproses. Proses dekripsi data diawali dengan tahapan-tahapan sebagai
berikut: (1) mengambil data yang terenkripsi dari lokasi penyimpanan, (2)
memasukkan kunci yang sama dengan kunci yang digunakan pada proses
enkripsi, (3) melakukan proses dekripsi terhadap data terenkripsi, menyimpan
hasil dekripsi terhadap data yang diproses. Berdasarkan perbandingan tahapan
proses enkripsi dan dekripsi, dapat disimpulkan bahwa waktu yang dibutuhkan
untuk proses dekripsi lebih lama dibandingkan dengan waktu yang dibutuhkan
untuk proses enkripsi.
Pengujian Compare Data Files
Pengujian Compare data files merupakan proses untuk membandingkan
data file plaintext, file hasil enkripsi, dan file hasil dekripsi, dimana dengan
compare data files, user dapat menemukan perbedaan bytes yang ada antara data
yang dibandingkan. Gambar 17 merupakan tampilan dari compare data files yang
telah dibangun pada sistem.
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)
{ try { BufferedImage img1 = ImageIO.read(new
File(this.jTextField1.getText())); 1
BufferedImage img2 = ImageIO.read(new
File(this.jTextField2.getText()));
int[] pixels1 = new int[img1.getWidth() * img1.getHeight()];
int[] pixels2 = new int[img2.getWidth() * img2.getHeight()];
PixelGrabber grabber1 = new PixelGrabber(img1, 0, 0,
img1.getWidth(), img1.getHeight(), pixels1, 0, img1.getWidth());
PixelGrabber grabber2 = new PixelGrabber(img2, 0, 0,
img2.getWidth(), img2.getHeight(), pixels2, 0, img2.getWidth());
grabber1.grabPixels(); grabber2.grabPixels(); int counter = 0;
//Math.abs(pixels1.length - pixels2.length); for (int i = 0; i <
pixels1.length; i++) {
if (i == pixels2.length) { break;
} if (pixels1[i] != pixels2[i]) {
counter++; } }
String kesimpulan = "Differ by " + counter + " 2
pixels\n\r";
this.jTextArea1.setText(kesimpulan);
} catch (Exception ex) {
Logger.getLogger(CompareDialog.class.getName()).log(Level.SEVERE,
null, ex); } try{ int byteDifferent = CompareByte(new
File(this.jTextField1.getText()), new
File(this.jTextField2.getText()));
String k = "Differ by " + byteDifferent + " bytes"; 3
this.jTextArea1.append("\n\r" + k); }catch(Exception ex){
}
}
Gambar 17 Form Hasil Compare Data Files
Gambar 17 menunjukkan sub menu compare images yang tersedia pada
menu tools. Pada form compare data files ini terdapat 4 (empat) tombol sebagai
berikut : (1) Tombol open pada data file 1 berfungsi untuk menampilkan data file
asli (data file yang belum dienkripsi oleh sistem yang dibangun); (2) Tombol open
pada data file 2 berfungsi untuk menampilkan file yang telah didekripsi oleh
sistem; (3) Tombol detect berfungsi untuk memulai proses compare data files;
dan (4) Tombol close berfungsi untuk keluar dari sub menu compare. Gambar 17
juga menunjukkan hasil compare data files yang telah dijalankan, serta
menunjukkan bahwa tidak ada perbedaan antara data file asli dengan data file hasil
dekripsi. Kode Program 4 Kode Program untuk Compare Data Files
Perintah yang digunakan dalam proses compare images terlihat pada Kode
Program 4, yang dijelaskan sebagai berikut. Perintah pada bagian ke-1
menunjukkan proses untuk memasukkan file yang akan dibandingkan.
Selanjutnya, sistem akan menampilkan hasil perbandingan pixels dari data yang
dibanding, seperti terlihat pada perintah bagian ke-2. Perintah bagian ke-3, sistem
menampilkan hasil perbandingan bytes dari data yang dibanding.
Perbandingan terhadap isi file dilakukan untuk melihat perbedaan byte
yang terdapat pada data file plaintext, data file hasil enkripsi, dan data file hasil
dekripsi. Hasil Perbandingan bisa dilihat pada Gambar 14, Gambar 15, dan
Gambar 16.
(a) Isi File Asli (b) Isi File Hasil (c) Isi File Hasil
Enkripsi Dekripsi
Gambar 14. Perbandingan Isi Data File Image UKSW
(a) Isi File Asli .rar (b) Isi File Hasil (c) Isi File Hasil
Enkripsi Dekripsi
Gambar 15 Perbandingan Isi File twofishapphexa.rar
Berdasarkan hasil pengamatan isi image, file pptx, dan rar pada Gambar
14, dan Gambar 15, maka secara visual dapat dikatakan data asli sama dengan
data hasil dekripsi.
Analisis Hasil Modifikasi Algoritma Twofish
Analisis terhadap modifikasi yang dilakukan dalam penelitian ini, adalah
sebagai berikut : (1) Kunci dalam penelitian ini bersifat asimetrik, karena kunci
pada proses enkripsi berbeda dengan kunci pada proses dekripsi; dimana kunci
pada proses dekripsi ditambahkan dengan angka yang menunjukkan jumlah
padding; hal ini dapat menambah tingkat kesulitan dalam memecahkan
kriptosistem yang dibangun; dan (2) Hasil enkripsi yang direpresentasikan dalam
hexadecimal, menyebabkan tiap karakter hasil enkripsi tersebut akan terdiri dari 2
(dua) digit; Contoh nilai ascii/byte 97, maka nilai dalam hexa adalah 16; nilai byte
92, maka nilai dalam hexa adalah 52.
5. Simpulan
Berdasarkan hasil pembuatan, pembahasan, dan pengujian aplikasi data
dapat dibuat menjadi data yang tidak terbaca dengan menggunakan algoritma
twofish, sehingga kriptosistem yang dibangun dapat memenuhi prinsip kriptografi.
Data yang besar ukurannya akan lebih lama proses enkripsinya jika dibandingkan
dengan data yang berukuran kecil. Panjang plaintext mempengaruhi hasil dari
panjang ciphertext. Panjang kunci yang berbeda tidak akan mempengaruhi
panjang ciphertext satu dengan yang lainnya. Waktu yang dibutuhkan untuk
proses dekripsi lebih lama dibandingkan dengan waktu yang dibutuhkan untuk
proses enkripsi. Saran untuk pengembangan aplikasi ke depan adalah menerapkan
algoritma Twofish pada file database
6. Daftar Pustaka [1] Ariyus, Dony, 2008, Pengantar Ilmu Kriptografi, Yogyakarta: Penerbit
ANDI.
[2] Munir, Rinaldi, 2006, Kriptografi, Bandung: Penerbit Informatika.
[3] Tumanggor, Seti, 2009, Studi Enkripsi dan Dekripsi File dengan
menggunakan algoritma twofish. Jurnal Tahun 2009 (Diakses tanggal 04
februari 2012).
[4] Ratih, 2007, Studi dan Implementasi Enkripsi pengiriman pesan suara
menggunakan algoritma twofish. Jurnal Teknik Informatika, Tahun 2007
(Diakses tanggal 04 februari 2012).
[5] http://www.schneier.com/twofish.html (Diakses tanggal 04 februari 2012).
[6] Pressman, Roger S., 2001, Software Engineering a Practitioner’s
Approach, New York : McGraw-Hill Higher Education.