Twofish vs Rijndael
-
Upload
jaenudin-fawwaz -
Category
Documents
-
view
61 -
download
0
description
Transcript of Twofish vs Rijndael
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Analisa dan Perbandingan Algoritma Twofish dan Rijndael
Willy Setiawan - 13508043
Program Studi Teknik Informatika
Sekolah Teknik Elektro dan Informatika
Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia
Abstrak— Kriptografi merupakan ilmu yang mempelajari
tentang bagaimana cara membuat suatu pesan hanya bisa
dibaca oleh pihak yang berwenang untuk membacanya.
Dalam makalah ini , akan dibahas mengenai perbedaan dari
dua buah algoritma kriptografi yang terkenal, yaitu
algoritma Twofish dan algoritma Rijndael. Kedua algoritma
ini adalah algoritma yang berpartisipasi dalam lomba untuk
menetapkan standard AES (Advanced Encryption Standard)
yang diselenggarakan oleh NIST(National Institute of
Standards and Technology). Algoritma Twofish berhasil
masuk sebagai finalis, sedangkan algoritma Rijndael berhasil
menjadi juara. Dalam makalah ini , perbedaan yang dibahas
akan dilihat dari rancangan algoritma enkripsi yang dipakai
dan waktu eksekusi ketika melakukan enkripsi suatu
kalimat. Dari hasil percobaan yang akan dilakukan, dapat
diperoleh perbandingan tentang algoritma mana yang lebih
baik.
Kata Kunci—cipher block , Advanced Encryption
Standard, Rijndael, Twofish, perbandingan
I. PENDAHULUAN
Pada jaman sekarang, penyebaran informasi sangatlah
mudah. Banyak sekali alat-alat pendukung agar seseorang
berbagi informasi dengan orang lain. Orang tak perlu
harus saling bertemu untuk mendapatkan informasi yang
dia inginkan dari orang tersebut. Walau terlihat praktis
sekali, banyak juga tindakan tak bertanggung jawab dari
orang-orang yang ingin mencuri informasi yang tak
seharusnya mereka dapat. Karena itu, berkembanglah ilmu
untuk dapat memastikan bahwa hanya pihak yang berhak
mendapatkan informasi tersebut yang bisa mengetahuinya
saja.
Kriptografi adalah ilmu mengenai tulisan rahasia
dengan tujuan menyembunyikan arti pesan. Selain
pengertian tersebut, terdapat pula pengertian kriptografi
sebagai ilmu yang mempelajari teknik-teknik matematika
yang berhubungan dengan aspek keamanan informasi
seperti kerahasiaan data, keabsahan data, integritas data,
serta autentikasi data.Penggunaan dari kriptografi
sangatlah luas. Di dunia dimana informasi-informasi
sudah dalam bentuk digital, ilmu kriptografi pun juga
berkembang sampai bagaimana menyembunyikan pesan
pada komputer digital. Banyak metode yang digunakan
untuk melakukan enkripsi pesan pada komputer digital,
tetapi yang terkenal adalah dengan metode block cipher.
Metode block cipher adalah metode pengenkripsian
pesan sesuai panjang blok yang ditentukan.Block cipher
berbeda dengan pendahulunya,yaitu stream cipher. Jika
pada stream cipher, bit dienkripsi secara individual.
Sedangkan, pada block cipher, proses enkripsi dilakukan
dengan mengenkripsi seluruh blok plainteks beberapa bit
dengan kunci yang sama. Hal ini menyatakan bahwa
enkripsi dari bit plainteks bergantung pada bit plainteks
yang lain dalam blok yang sama. Terdapat banyak
algoritma yang menggunakan metode block cipher ini dan
dijadikan sebagai standard dalam melakukan enkripsi
data.
AES ,yang merupakan kependekan dari Advanced
Encryption Standard adalah standard baru yang dipakai
dalam melakukan enkripsi data digital pada jaman
sekarang ini.AES menggantikan pendahulunya,yaitu DES
karena sudah dianggap terlalu tua. Algoritma yang
menjadi standard bagi AES ditentukan melalui kompetisi
yang diadakan oleh National Institute of Standards and
Technology (NIST). Pada kompetisi tersebut, finalis yang
terpilih adalah algoritma Twofish , Rijndael, MARS ,
RC6,dan Serpent. Yang akan menjadi topic pembahasan
adalah algoritma Twofish dan Rijndael.
II. PEMBAHASAN
A. Stream Cipher
Stream cipher melakukan enkripsi tiap bit. Hal ini
dicapai dengan menambahkan bit dari sebuah key stream
ke bit plainteks.Ada stream yang bersifat sinkron dimana
key stream bergantung hanya kepada kunci, dan yang
tidak sinkron dimana key stream juga bergantung pada
cipherteks
Gambar 1. Skema Stream Cipher
Jika terdapat titik - titik pada gambar 1, maka stream
cipher yang ada merupakan yang bersifat tidak sinkron.
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Operasi yang dilakukan untuk enkripsi ataupun dekripsi
dengan menggunakan stream cipher biasanya adalah
operasi XOR secara bit. Untuk melakukan dekripsi,
cipherteks cukup di XOR kan dengan kunci yang sama
dengan kunci enkripsi. Kelebihan dari stream cipher
adalah pemrosesannya yang cepat, dikarenakan
pemrosesan yang dilakukan adalah pemrosesan tiap bit.
Salah satu teknik enkripsi dengan menggunakan stream
cipher adalah one-time pad.
One-time pad, atau yang disebut juga sebagai Vernam
cipher adalah enkripsi dengan membangkitkan string dari
bit secara random sebagai kunci. Keystream memiliki
panjang yang sama dengan pesan plainteks dan string bit
dikombinasikan dengan menggunakan operasi XOR untuk
menghasilkan cipherteks.
Contoh dari penggunaan stream cipher yang masih
sering dipakai adalah algoritma RC4.Algoritma ini adalah
algoritma yang sering dipakai pada protocol seperti
Secure Socket Layer (SSL) dan WEP yang digunakan
untuk melindungi jaringan wireless.
B. Block Cipher
Blok cipher adalah sebuah cipher dengan kunci simetrik
yang beroperasi pada kumpulan bit dengan panjang yang
tetap, yang dinamakan blok dengan transformasi yang
tidak bervariasi. Sebagai contoh, blok yang menerima
masukan plainteks sebesar 128 bit, akan memberikan blok
cipherteks sebesar 128 bit juga.
Jika ada pesan yang ukurannya lebih besar dari ukuran
blok, maka dilakukan pemecahan pesan menjadi beberapa
buah blok dan melakukan pemrosesan enkripsi atau
dekripsi tiap bloknya.Bagaimanapun juga, pada metode
ini semua blok dienkripsi dengan kunci yang sama, yang
mengurangi keamanan. Untuk mengatasi masalah ini,
berbagai mode operasi digunakan untuk meningkatkan
keamanan.
Gambar 2. Skema enkripsi block cipher
Gambar 3. Skema dekripsi block cipher
Terdapat 4 mode ketika melakukan pemrosesan secara
block cipher , yaitu Electronic Code Book (ECB), Cipher
Block Chaining (CBC), Cipher Feedback (CFB), dan
Output Feedback (OFB).
- Electronic Code Book
Pemrosesan dengan menggunakan mode Electronic
Code Book (ECB) menggunakan metode yang sama
dengan gambar 2 untuk melakukan enkripsi dan gambar 3
untuk melakukan dekripsi. Tiap blok plainteks yang
identik akan memberikan blok cipherteks yang identik
juga. Keuntungan dengan pemrosesan dengan ECB adalah
pemrosesan dengan algoritma ini dapat berbeda- beda tiap
bloknya. Sebagai contoh, jika blok pertama menggunakan
algoritma A, maka blok kedua dapat menggunakan
algoritma B, dan seterusnya. Kekurangan dari metode ini
adalah tiap plainteks pada blok tidak saling tergantung,
sehingga mudah untuk dianalisis frekuensi kemunculan
kata nya.
- Cipher Block Chaining
Pada pemrosesan dengan Cipher Block Chaining Mode
(CBC), setiap blok plainteks di XOR kan dengan
cipherteks sebelumnya. Sebuah Initialization vector
digunakan digunakan sebagai “seed” untuk pemrosesan.
Gambar 4. Skema pemrosesan dengan mode CBC
Pemrosesan dengan menggunakan mode CBC lebih aman,
karena memiliki ketergantungan antar blok. Blok
plainteks yang sama tidak memberikan blok cipherteks
yang sama,maka kriptanalisis akan menjadi lebih sulit.
Tetapi teknik ini memiliki beberapa kelemahan.
Kesalahan 1 bit pada blok plainteks akan merambat pada
blok cipherteks yang berkoresponden dan blok cipherteks
berikutnya. Tetapi, hal ini berkebalikan pada proses
dekripsi. Kesalahan satu bit pada blok cipherteks hanya
mempengaruhi blok plainteks yang berkoresponden dan
satu bit plainteks berikutnya (pada posisi bit yang
berkoresponden pula).
- Cipher Feedback (CFB)
Pada pemrosesan dengan mode CFB, blok cipherteks
sebelumnya di enkripsi dan output yang dihasilkan
dikombinasikan dengan blok plainteks dengan
menggunakan XOR untuk menghasilkan blok
cipherteks.Hal ini memungkinkan penggunaan kurang dari
1 blok data penuh. Sebuah initialization vector dipakai
sebagai “seed” pada proses.
Plainteks tidak dapat dimanipulasi secara langsung kecuali
dengan penghapusan blok dari awal atau akhir dari
cipherteks. Dengan mode CFB dan feedback penuh,
ketika 2 blok cipherteks identik, output dari operasi blok
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
cipher pada langkah selanjutnya juga identik.
Gambar 5. Skema enkripsi dengan mode CFB
- Output Feedback
Mode Output Feedback (OFB) mirip dengan mode
CFB. Yang membuatnya berbeda adalah jumlah yang ter
XOR tiap block plainteks dibangkitkan secara independen
baik dari plainteks maupun cipherteks. Diperlukan sebuah
initialization vector agar digunakan sebagai “seed” untuk
kumpulan block data dan tiap blok data diperoleh dari
enkripsi blok data sebelumnya.
Mode OFB memiliki keuntungan yang lebih dibandingkan
dengan mode CFB dalam hal kesalahan bit pada saat
transmisi tidak mempengaruhi pada saat dekripsi.
Gambar 6. Skema enkripsi dengan mode OFB
C. Algoritma Twofish
Twofish adalah algoritma kriptografi yang beroperasi
dalam mode block cipher. Twofish menjadi salah satu
finalis dalam kompetisi Advanced Encrytipon Standard
(AES) yang diadakan oleh National Institute of Standards
and Technology. (NIST). Twofish adalah block cipher
yang berukuran 128-bit yang dapat menerima kunci
dengan panjang mencapai 256 bit. Twofish menggunakan
jaringan Feistel sebanyak 16 kali dengan fungsi f di dalam
jaringan Feistel tersebut menggunakan S-box. Selain itu,
Twofish juga menggunakan transformasi pseudo
Hadamard , metode whitening, Maximum Distance
Separable (MDS), dan penjadwalan kunci.
Gambar 7. Skema algoritma Twofish
- Jaringan Feistel
Jaringan Feistel adalah metode umum dalam melakukan
transformasi fungsi menjadi permutasi. Skema ini
ditemukan oleh Horst Feistel pada desain algoritma
Lucifer,dan dipopulerkan oleh DES.
Pada Feistel cipher, fungsi perputaran mengandung juga
mengambil satu bagian dari data yang sedang dienkripsi,
memrosesnya ke dalam fungsi yang key dependent, dan
melakukan XOR hasilnya kepada bagian block lainnya.
Gambar 8. Jaringan Feistel
- Whitening
Whitening merupakan salah satu teknik untuk
mempersulit pencarian kunci pada cipher. Whitening
menggunakan material kunci untuk di XOR kan dengan
plainteks pada bagian sebelum memroses enkripsi dan
setelah di enkripsi. Proses dari whitening dapat dilihat
pada gambar 9.
Gambar 9. Proses Whitening
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Whitening yang digunakan pada Twofish dilakukan
dengan melakukan XOR terhadap 128 bit subkey pada
sebelum putaran pertama Feistel , dan 128 bit lainnya
setelah putaran Feistel terakhir.
- S- Box
S- box adalah sebuah tabel substitusi yang banyak
digunakan pada block cipher.S-box bervariasi dalam
ukuran masukan dan ukuran keluaran, dan dapat dibuat
secara random atau secara algoritmik. Twofish
menggunakan empat buah S-box berukuran 8x8 bit yang
berbeda dan bergantung kepada kunci. Tiap S-box
dibangun dengan menggunakan dua buah permutasi tetap
8x8 bit dan beberapa byte dari material kunci.
- Matriks MDS
Sebuah MDS adalah pemetaan linear dari elemen a ke
elemen b, menghasilkan vector gabungan dari elemen
a+b, dengan property nilai minimum dari elemen bukan
nol pada tiap vector bukan nol paling sedikit b+1. Matriks
MDS berguna untuk membangun block untuk cipher
karena menjamin beberapa tingkat difusi. Jika satu dari
elemen input berubah, setiap elemen output harus
berubah. Twofish menggunakan sebuah matriks MDS
berukuran 4x4 dengan GF(28).
- Transformasi Pseudo-Hadamard
Transformasi pseudo-Hadamard (PHT) adalah operasi
pencampuran sederhana. Jika diberikan 2 masukan a dan
b, maka PHT didefinisikan dengan :
a´ = a + b mod 232
b´ = a + 2b mod 232
Twofish menggunakan PHT 32 bit untuk
mencampurkan output dari fungsi g.
- Key Schedule
Key schedule atau penjadwalan kunci adalah
pengubahan bit kunci menjadi round key yang cipher
dapat gunakan. Twofish memerlukan banyak material
kunci, dan memiliki penjadwalan kunci yang rumit.Untuk
memfasilitasi analis, jadwal kunci menggunakan primitive
seperti pada round function.
Pada gambar 7 diperlihatkan mengenai gambaran
terhadap pemrosesan dengan Twofish. Byte plainteks
yang berjumlah 16 p0,p1,…, p15 dipisah menjadi 4 kata
P0,…,P3 yang masing masing berukuran 32 bit. Pada tahap
whitening, kata-kata tersebut di XOR kan dengan 4 kata
dari kunci yang diperlebar :
R0,I = Pi ⊕ Ki , i = 0,…,3
Tiap putaran, 2 kata pertama digunakan sebagai input
terhadap fungsi F, yang juga mengambil nomor putaran
sebagai masukan. Kata ketiga di XOR kan dengan
keluaran dari F dan dirotasi ke kanan 1 bit. Kata keempat
dirotasikan ke kiri 1 bit dan di XOR kan dengan kata
keluaran kedua dari F. Terakhir, kedua potongan ditukar.
(Fr,0,Fr,1) = F(Rr,0,Rr,1,r)
Rr+1,0 = ROR(Rr,2 ⊕ Fr,0,1)
Rr+1,1 = ROL(Rr,3,1) ⊕ Fr,1)
Rr+1,2 = Rr,0
Rr+1,3 = Rr,1
untuk r = 0,…,15 dan dimana ROR dan ROL adalah
fungsi untuk rotasi argument pertama ke kiri atau ke
kanan. Kemudian, tahap whitening output membatalkan
penukaran untuk putaran terakhir, dan melakukan XOR
terhadap data dengan menggunakan 4 kata dari kunci.
Ci = R16,(i+2) mod 4⊕Ki+4 i = 0,...,3
Empat kata dari cipherteks kemudian ditulis sebagai 16
byte, c0,…,c15.
- Fungsi F
Fungsi F adalah permutasi yang tergantung pada kunci
pada nilai 64 bit. Memerlukan 3 argumen : 2 kata
masukan R0 dan R1, dan nomor r digunakan untuk memilih
subkey yang benar. R0 dilewatkan melalui fungsi g,yang
menghasillkan T0. R1 dirotasi ke kiri 8 bit dan kemudian
dilakukan fungsi dan menghasilkan T1. Hasil T0 dan T1
dikombinasikan menggunakan PHT dan 2 kata dari kunci
ditambahkan
T0 = g(R0)
T1 = g(ROL(R1,8))
F0 = (T0 + T1 + K2r+8) mod 232
F1 = (T0 + 2T1 + K2r+9) mod 232
- Fungsi g
Masukan kata X dipisah menjadi 4 byte. Tiap byte
menjalani S-box yang bergantung kepada kunci. Tiap S-
box adalah permutasi 8-bit : membutuhkan masukan 8 bit
dan memberikan keluaran 8 bit. Empat hasil tersebut
diinterpretasikan sebagai komponen vector dengan
panjang 4 GF(28), dan dikalikan oleh matriks MDS 4x4.
- Penambahan Panjang Kunci
Twofish dapat menerima kunci dengan panjang
berapapun sampai 256 bit. Untuk ukuran kunci yang
kurang, dilakukan padding pada akhir dengan nilai 0.
Sebagai contoh, kunci dengan panjang 80-bit m0,…,m9
akan diperpanjang dengan pengaturan mi = 0 untuk I =
10,…,15, dan diperlakukan sebagai kunci 128-bit.
D. Algoritma Rijndael
Algoritma Rijndael ini adalah algoritma yang menjadi
standard enkripsi baru menggantikan DES, yaitu
Advanced Encryption Standard (AES). Algoritma ini
dapat menerima masukan berupa blok berukuran 128 bit,
dan kunci yang panjangnya bervariasi, diantara 128 , 192,
atau 256 bit. Metode yang digunakan untuk pemrosesan
terdiri dari :
- AddRoundKey
- Putaran sebanyak Nr-1 kali. Proses yang terjadi
pada tiap putaran adalah :
a. SubByte
b. ShiftRow
c. MixColumn
d. AddRoundKey
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
- Pada putaran terakhir :
a. SubByte
b. ShiftRow
c. AddRoundKey
Metode – metode tersebut dapat dibagi menjadi
beberapa layer , yaitu : key addition layer , byte
substitution layer, diffusion layer.
Gambar 10. Skema pemrosesan algoritma Rijndael
A0 A4 A8 A12
A1 A5 A9 A13
A2 A6 A10 A14
A3 A7 A11 A15
Tabel I. Matriks byte yang diproses pada algoritma
Rijndael
- Byte Substitution Layer
Layer penukaran byte menggunakan S-box yang
berukuran 16x16.
Gambar 11. S-box
Contoh penggunaannya : misalkan ingin mengubah hex
C2. Karena itu, cari C pada bagian X dan 2 pada bagian y
sehingga didapatkan nilai 25.
- Diffusion Layer
Pada AES, diffusion layer mengandung 2
sublayer,transformasi ShiftRow dan MixColumn.
Pada transformasi ShiftRow, baris pada matriks digeser
sesuai dengan nomor barisnya. Pada baris pertama tidak
mengalami pergeseran, pada baris kedua mengalami
pergeseran ke kiri sebanyak 1kali, pada baris ketiga
mengalami pergeseran ke kiri sebanyak 2 kali, pada baris
keempat mengalami pergeseran sebanyak 3 kali. Sebagai
perbandingan, dapat dilihat perbandingan antara Tabel I
dan Tabel II.
Tabel II. Matriks byte setelah shift row
Pada MixColumn, terjadi transformasi linear yang
menggabungkan tiap kolom pada state matriks. Karena
tiap byte masukan mempengaruhi byte keluaran, operasi
MixColumn merupakan elemen diffusi utama. Untuk
melakukan MixColumn ini diperlukan operasi Galois
Field (GF). Operasi yang dilakukan adalah GF(28).
=
02010103
03020101
01030201
01010302
3
2
1
0
C
C
C
C
15
10
5
0
A
A
A
A
- Key Addition Layer
Dua masukan untuk layer Key Addition adalah matrix
state yang berukuran 16 byte dan subkey yang juga
berukuran 16 byte (128 bit). Kedua input tersebut
dikombinasikan dengan menggunakan operasi XOR.
III. PERCOBAAN
Pada bab ini , akan dilakukan percobaan untuk
membandingkan algoritma mana yang memberikan hasil
yang lebih baik. Dalam hal ini, lebih baik dimaksudkan
kepada lebih baik dalam hal memori yang terpakai dan
waktu untuk melakukan enkripsi.
Lingkungan pada percobaan ini adalah menggunakan:
- Operating System : Windows XP
- Bahasa Pemrograman : Java
- Prosesor : AMD Athlon™ 64 X2 Dual Core
Processor 4600+
A. Rijndael
Yang akan dibahas pertama- tama adalah rijndael.
Untuk implementasinya, menggunakan package yang ada
pada Java yang digunakan untuk keamanan, yaitu Java
Cryptographic Extension dan juga menggunakan referensi
dari internet. Berikut adalah source code nya :
import gnu.crypto.cipher.Rijndael;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Array;
import java.security.InvalidKeyException;
public class Algo
{
public static String enkrip (String plainteks, String kunci)
throws InvalidKeyException, UnsupportedEncodingException
{
long awal = System.currentTimeMillis();
byte[] ki;
byte[] plain ;
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Rijndael rij = new Rijndael();
ki = kunci.getBytes();
byte[] hasil;
Object kobjek = rij.makeKey(ki, 16);
if (plainteks.length() % 16 != 0)
{
while (plainteks.length() % 16 != 0)
{
plainteks += " ";
}
}
plain = plainteks.getBytes("UTF8");
hasil = new byte[plainteks.length()];
for (int i = 0 ;i < Array.getLength(plain); i+= 16)
{
rij.encrypt(plain, i, hasil, i, kobjek, 16);
}
String shasil = new String(hasil);
long sisa = System.currentTimeMillis() - awal;
System.out.println("Waktu untuk melakukan eksekusi : " +
sisa +" milidetik");
return shasil;
}
public static void main(String argv[]) throws Exception {
String masukan = "fds,famsdnmlkfsdaflksd srfsjkdrhwaeih
sfkjsdahfkasl wierfhwirhewa krfhwifw krfhwlearhwaek
srfhewiarh fwearuiwe hrfiwae weuirohawer";
String kunci = "1234567812345678";
long awal = System.currentTimeMillis();
String hasil = enkrip(masukan,kunci);
long selisih = System.currentTimeMillis() - awal;
System.out.println("Masukan : "+masukan+ " \nKunci :
"+kunci+" memberikan hasil:");
System.out.println(hasil);
System.out.println("Memori yang digunakan : "+
(Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory()) +" byte");
}
}
Untuk pemrosesan dengan algoritma Rijndael pada
percobaan ini, diperlukan sebuah library dari gnu.crypto,
yang bisa diperoleh dari internet. gnu.crypto yang dipakai
adalah gnu.crypto versi 2.1.0. Dalam pemrograman,
dipakai alat bantu pemrograman yaitu Netbeans versi
6.9.1. Pada proses enkripsi, diambil parameter masukan
berupa 2 buah string. 1 string sebagai plainteks dan 1
string sebagai kunci.
String yang akan dijadikan bahan enkripsi adalah :
“fds,famsdnmlkfsdaflksd srfsjkdrhwaeih sfkjsdahfkasl
wierfhwirhewa krfhwifw krfhwlearhwaek srfhewiarh
fwearuiwe hrfiwae weuirohawer”. Sedangkan kunci yang
dipakai adalah “1234567812345678”. Hasil yang
diperoleh dapat dilihat pada gambar 12 :
Gambar 12. Tampilan hasil dengan menggunakan
algoritma Rijndael
Terlihat bahwa pemrosesan memakan waktu 0.016
detik dan memori yang digunakan adalah 385.488 byte.
B. Twofish
Pada pemrosesan dengan twofish, dibuat sebuah
program untuk melakukan enkripsi sebuah teks dengan
menggunakan algoritma Twofish. Pada pembuatannya,
diperlukan sebuah library gnu.crypto .Pada pembuatan
program ini, pengembangan dilakukan dengan
menggunakan gnu-crypto-2.1.0.
import gnu.crypto.cipher.Twofish;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Array;
import java.security.InvalidKeyException;
public class Algoritma
{
public static String enkrip (String plainteks, String kunci)
throws InvalidKeyException, UnsupportedEncodingException
{
long awal = System.currentTimeMillis();
byte[] ki;
byte[] plain ;
Twofish duaikan = new Twofish();
ki = kunci.getBytes();
byte[] hasil;
Object kobjek = duaikan.makeKey(ki, 16);
if (plainteks.length() % 16 != 0)
{
while (plainteks.length() % 16 != 0)
{
plainteks += " ";
}}
plain = plainteks.getBytes("UTF8");
hasil = new byte[plainteks.length()];
for (int i = 0 ;i < Array.getLength(plain); i+= 16)
{
duaikan.encrypt(plain, i, hasil, i, kobjek, 16);
}
String shasil = new String(hasil);
long sisa = System.currentTimeMillis() - awal;
float selisih = sisa/1000F;
System.out.println("Waktu untuk melakukan eksekusi : " +
selisih +" detik");
return shasil;
}
public static void main(String argv[]) throws Exception {
String masukan = "fds,famsdnmlkfsdaflksd srfsjkdrhwaeih
sfkjsdahfkasl wierfhwirhewa krfhwifw krfhwlearhwaek
srfhewiarh fwearuiwe hrfiwae weuirohawer”
String kunci = "1234567812345678";
long awal = System.currentTimeMillis();
String hasil = enkrip(masukan,kunci);
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
long selisih = System.currentTimeMillis() - awal;
System.out.println("Masukan : "+masukan+ " \nKunci :
"+kunci+" memberikan hasil:");
System.out.println(hasil);
System.out.println("Memori yang digunakan : "+
(Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory()) +" byte");
}
}
String yang akan dienkripsi adalah sama seperti pada
percobaan dengan menggunakan Rijndael, yaitu
“fds,famsdnmlkfsdaflksd srfsjkdrhwaeih sfkjsdahfkasl
wierfhwirhewa krfhwifw krfhwlearhwaek srfhewiarh
fwearuiwe hrfiwae weuirohawer” Kunci yang digunakan
adalah kumpulan angka, yaitu 1234567812345678. Pada
source program, terlihat bahwa dipakai sebuah fungsi
untuk melakukan enkripsi dengan menerima masukan
berupa 2 buah string, masing-masing berguna sebagai
plainteks dan kunci.
Hasil percobaan dapat dilihat pada gambar 13:
Gambar 13. Hasil percobaan dengan menggunakan
algoritma Twofish
Memori yang digunakan adalah 480.896 byte , sedangkan
waktu eksekusi adalah : 0.015 detik
IV.KESIMPULAN
Dari hasil percobaan, terlihat bahwa penggunaan
memori ketika menggunakan algoritma Twofish lebih
banyak dibandingkan ketika menggunakan algoritma
Rijndael, yaitu 480896 byte pada Twofish dan 385488
byte pada Rijndael dengan menggunakan kunci dan
plainteks yang sama. Sedangkan waktu eksekusi yang
dilakukan lebih cepat jika dilakukan dengan menggunakan
algoritma Twofish, yaitu 15 milidetik, sedangkan
algoritma Rijndael memerlukan waktu 16 milidetik.
Perbedaan pada waktu pemrosesan algoritma tidak terlalu
dipermasalahkan, tetapi pada perbedaan memori terlihat
bahwa Rijndael menggunakan memori yang lebih sedikit
dibandingkan dengan Twofish. Perbedaan itu cukup
terlihat ketika menggunakan mesin dengan memori
dengan ukuran yang rendah.
Sehingga, dapat disimpulkan bahwa Rijndael
merupakan algoritma yang lebih baik untuk digunakan
dalam melakukan enkripsi.
REFERENSI
Halaman website GNU-crypto : http://www.gnu.org/software/gnu-
crypto/ , diakses pada tanggal 19 Maret 2011
Schneier,Bruce,Kelsey,John,Whiting,Doug,Wagner,David,Hall,Chris,Fe
rguson,Niels (1999).The Twofish Encryption Algorithm: A 128-Bit
Block Cipher. United States : Wiley.
Paar,Christof, Pelzl,Jan (2010). Understanding Cryptography: A
Textbook for Students and Practitioners. New York : Springer.
Slide kuliah mengenai block cipher :
http://www.informatika.org/~rinaldi/Kriptografi/2010-
2011/Algoritma%20Kriptografi%20Modern_bag2%20(baru).ppt
Halaman website mengenai stream cipher :
http://www.rsa.com/rsalabs/node.asp?id=2174, diakses pada
tanggal 17 Maret 2011
Halaman website mengenai mode blok CBC,
http://www.rsa.com/rsalabs/node.asp?id=2171, diakses pada
tanggal 17 Maret 2011
Halaman website mengenai mode blok ECB,
http://www.rsa.com/rsalabs/node.asp?id=2170, diakses pada
tanggal 17 Maret 2011
Halaman website mengenai mode blok CFB,
http://www.rsa.com/rsalabs/node.asp?id=2172, diakses pada
tanggal 17 Maret 2011
Halaman website mengenai mode blok OFB,
http://www.rsa.com/rsalabs/node.asp?id=2173, diakses pada
tanggal 17 Maret 2011
PERNYATAAN
Dengan ini saya menyatakan bahwa makalah yang saya
tulis ini adalah tulisan saya sendiri, bukan saduran, atau
terjemahan dari makalah orang lain, dan bukan plagiasi.
Bandung, 22 Maret 2011
Willy Setiawan
13508043