STUDI DAN PERBANDINGAN ALGORITMA RIJNDEAL DAN TWO FISH Pocut Viqarunnisa – NIM : 13503106 Program Studi Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung E-mail :
[email protected]
Abstrak Makalah ini membahas mengenai studi dan perbandingan antara algoritma Twofish dan Rijndeal sebagai algoritma enkripsi kriptografi simetri dengan berbasis cipher block. Meskipun kedua algoritma ini memiliki basis yang sama yaitu blok cipher , namun keduanya memiliki metode yang berbeda dalam menyandikan data. Oleh sebab itu, kedua algoritma memiliki berbagai kelebihan dan kekurangan masing-masing dilihat dari prinsip dasar perancangan algoritma berbasis cipher blok. Hal ini menyebabkan perbedaan dalam tingkat fleksibilitas, kemangkusan, keamanan algoritma, dan kebutuhan memori. Meskipun dalam sayembara yang diadakan oleh National Institute of Standards and Technology (NIST), Rijndael menjadi pemenang, tetapi tetap saja algoritma Twofish memiliki keunggulan dibandingkan dengan Rijndael. Algoritma Rijndael unggul dalam hal kecepatan dan kesederhanaan kode, tetapi dalam hal tingkat keamanan algoritma Twofish jauh lebih unggul dibandingkan algoritma Rijndael. Kata kunci: Rijndael, Twofish, cipher block, National Institute of Standards and Technology (NIST), Advanced Encryption Standard (AES), enkripsi, dekripsi. 1. Pendahuluan Pengiriman dan penyimpanan pesan melalui media elektronik sudah banyak dilakukan. Terkadang pengiriman dan penyimpanan pesan melalui media elektronik perlu dirahasiakan untuk menjamin keamanan dan keutuhan data yang dikirimkan. Oleh sebab itu maka dibutuhkan sebuah metode panyandian pesan. Ilmu sekaligus seni untuk menjaga keamanan pesan disebut kriptografi. Secara umum dalam kriptografi terdapat 2 proses utama yaitu proses menyandikan plainteks (pesan yang dapat dibaca) menjadi cipherteks (pesan yang tidak dapat dibaca/sudah disandikan) yang disebut proses enkripsi (encryption) dan proses mengembalikan cipherteks menjadi plainteks disebut proses dekripsi (decryption). Dalam kriptografi modern algoritma yang digunakan tidak lagi rahasia, yang dirahasiakan hanyalah kunci untuk melakukan enkripsi pesan. Berdasarkan jenis kuncinya terdapat 2 jenis algoritma kriptografi yaitu algoritma simetri (konvensional) dan algoritma asimetri (kunci publik).
Dalam perkembangannya, dibutuhkan suatu algoritma kriptografi simetri yang menjadi standar nasional di Amerika Serikat. Pada tahun 1977 IBM mendaftarkan algoritmanya dan dijadikan standar algoritma kriptografi kunci simetri setelah disetujui oleh National Bureau of Standard (NBS) dan setelah penilaian kekuatan olrh National Security Agency (NSA) Amerika Serikat. Algoritma DES terbukti menjadi algoritma enkripsi yang aman di dunia selama puluhan tahun. Namun, panjang kunci DES yang hanya 56 bit dianggap terlalu pendek pada tahun 1990an. Penggunaan DES dianggap sudah tidak aman lagi seiring dengan berkembangnya perangkat keras dan meluasnya penggunaan jaringan komputer terdistribusi sehingga kunci DES dapat dipecahkan hanya dalam beberapa hari. Oleh karena itu maka diperlukan algoritma baru sebagai standar enkripsi kriptografi simetri. Untuk menghindari kontraversi mengenai standar baru tersebut, seperti pada pembuatan DES (NSA dicurigai memiliki ”pintu belakang” untuk mengungkap cipherteks hasil DES tanpa kunci), maka NIST (National Institute of Standards and Technology) mengadakan
sayembara terbuka untuk membuat standar algoritma kriptografi yang baru sebagai pengganti DES yang kelak akan diberi nama Advanced Encryption Standard (AES). Persyaratan yang diajukan oleh NIST mengenai algoritma baru tersebut adalah : 1. 2. 3. 4. 5.
Algoritma termasuk dalam algoritma kriptografi simetri berbasis chiper blok Rancangan algoritma harus publik (tidak boleh dirahasiakan) Panjang kunci fleksibel : 128, 192, dan 256 bit Ukuran blok yang dienkripsi 128 bit Algoritma dapat diimplementasikan baik sebagai software maupun hardware.
Pada sayembara ini diperoleh 5 finalis dari 15 proposal algoritma yang masuk. Kelima finalis itu adalah Rijndael, Serpent, Twofish, RC6, dan MARS. Pada Oktober tahun 2000 ditetapkan Rijndeal sebagai pemenang sayembara tersebut. Rijndeal tentu saja memiliki berbagai keunggulan sehingga dapat menjadi pemenang sayembara, tetapi tentu saja Rijndeal juga memiliki beberapa kekurangan yang mungkin dimiliki oleh algoritma yang lain. Oleh sebab itu, pada makalah ini penulis akan membahas mengenai perbandingan Rijndeal sebagai pemenang sayembara dengan Twofish yang merupakan salah satu finalis sayembara tersebut. 2. Algoritma Simetri Algoritma kriptografi (cipher) simetri yang beroperasi dalam mode bit dapat dikelompokkan dalam dua kategori yaitu : 1.
2.
Cipher aliran (stream cipher) Algoritma kriptografi yang beroperasi dalam bentuk bit tunggal. Rangkaian bit dienkripsikan bit per bit. Cipher blok (block chiper) Algoritma kriptografi yang beroperasi dalam bentuk blok it. Rangkaian bit dibagi menjadi blok-blok bit yang panjangnya sudah ditentukan sebelumnya.
2.1 Cipher Blok Pada cipher blok, rangkaian bit-bit plainteks dibagi menjadi blok-blok bit dengan panjang sama [3]. Enkripsi dilakukan terhadap blok bit plainteks menggunakan bit-bit kunci (yang ukurannya sama dengan blok plainteks). Algoritma enkripsi menghasilkan blok cipherteks yang berukuran sama dengan blok plainteks. Dekripsi dilakukan dengan cara yang serupa seperti enkripsi. Misalkan blok plainteks (P) yang berukuran m bit dinyatakan sebagai vektor P = (p1, p2, ..., pm) yang dalam hal ini pi adalah bit 0 atau bit 1 untuk i = 1, 2, …, m, dan blok cipherteks (C) adalah C = (c1, c2, ..., cm) yang dalam hal ini ci adalah bit 0 atau bit 1 untuk i = 1, 2, …, m. Bila plainteks dibagi menjadi n buah blok, barisan blok-blok plainteks dinyatakan sebagai (P1, P2, …, Pn) Untuk setiap blok plainteks Pi, bit-bit penyusunnya dapat dinyatakan sebagai vektor Pi = (pi1, pi2, ..., pim) Enkripsi dengan kunci K dinyatakan dengan persamaan Ek(P) = C, sedangkan dekripsi dengan kunci K dinyatakan dengan persamaan Dk(C) = P Skema enkripsi dan dekripsi dengan cipher blok dapat dilihat pada gambar.
Gambar 1 Skema Enkripsi dan Dekripsi dengan Cipher Blok 2.2 Prinsip Dasar Algoritma Cipher Block Dalam pembuatan algoritma Chiper block terdapat beberapa prinsip yang biasa digunakan. 9 prinsip yang biasanya diperhatikan dalam pembuatan algoritma chiper block adalah : 1. 2. 3. 4. 5. 6. 7. 8. 9.
Confusion dari Shanon Diffusion dari Shanon Chiper berulang (iterative chiper) Jaringan feistel (feistel network) Kunci lemah (weak key) Kotak-S (S-Box) Kotak-P (P-Box) Ekspansi Kompresi
2.2.1 Confusion dari Shanon Prinsip ini menyembunyikan hubungan apapun yang ada antara plainteks, cipherteks, dan kunci. Sebagai contoh, pada cipher substitusi seperti caesar ciper, hubungan antara cipherteks dan plainteks mudah diketahui, karena satu huruf yang sama pada plainteks diganti dengan satu huruf yang sama pada cipherteksnya. Prinsip confusion akan membuat kriptanalis kesulitan dalam mencari pola-pola statistik yang muncul pada cipherteks. Confusion yang baik adalah membuat hubungan statistik antara plainteks, cipherteks, dan kunci menjadi sangat rumit. Biasanya untuk mendapatkan keamanan yang baik, prinsip confusion dilakukan secara berulang-ulang pada sebuah blok tunggal dengan kombinasi yang berbeda-beda. 2.2.2 Diffusion dari Shanon Prinsip diffusion dari Shanon menerangkan bahwa perubahan yang terjadi pada satu bit
plainteks atau kunci akan menyebabkan sebanyak mungkin pengaruh pada cipherteks. Sebagai contoh, perubahan kecil yang terjadi pada plainteks sebanyak satu atau dua bit akan menghasilkan perubahan pada cipherteks yang tidak dapat diprediksi jumlahnya. Sama seperti prinsip confusion dari Shanon prinsip ini menyembunyikan hubungan statistik antara plainteks, sipherteks, dan kunci sehingga membuat kriptanalis menjadi kesulitan dalam memecahkan kode. Prinsip diffusion dari shanon ini biasanya dilakukan secara berulang-ulang pada sebuah blok tunggal dengan kombinasi yang berbedabeda untuk mendapatkan tingkat keamanan yang lebih tinggi.
2.2.3 Chiper berulang (iterative chiper) Chiper berulang pada prinsipnya adalah fungsi transformasi sederhana yang mengubah plainteks menjadi cipherteks yang dilakukan secara berulang-ulang sebanyak sejumlah kali. Pada setiap putaran digunakan upa-kunci (subkey) atau kunci putaran (round key) yang dikombinasikan dengan plainteks. Secara formal, cipher berulang dinyatakan sebagai berikut : Ci = f(Ci-1, Ki) yang dalam hal ini, i = 1, 2, ..., r (r adalah jumlah putaran) Ki = upa-kunci (subkey) pada putaran ke-i
f
= fungsi transformasi (didalamnya terdapat fungsi substitusi, permutasi, dan/atau ekspansi, kompresi)
Plainteks dinyatakan dengan C0 dan cipherteks dinyatakan dengan Cr. 2.2.4 Jaringan Feistel (Feistel Network) Jaringan Feistel (Feistel Network) ditemukan oleh Hirst Feistel pada tahun 1970. Kebanyakan algoritma blok cipher menggunakan model jaringan feistel untuk mengenkripsikan pesan.
Jaringan Feistel banyak dipakai pada algoritma kriptografi karena model ini bersifat reversible untuk proses enkripsi dan dekripsi. Sifat reversible ini membuat kita tidak perlu membuat algoritma baru unruk mendekripsi cipherteks menjadi plainteks. Karena operator XOR mengkombinasikan setengah bagian kiri dengan hasil dari fungsi transformasi f, maka kesamaan berikut pasti benar: Li – 1 ⊕ f(Ri – 1, Ki) ⊕ f(Ri – 1, Ki) = Li – 1 Sifat reversible tidak bergantung pada fungsi f sehingga fungsi f dapat dibuat serumit mungkin.
Model jaringan feistel adalah sebagai berikut : 1.
Bagi blok yang panjangnya n bit menjadi dua bagian, kiri (L) dan kanan (R). Masingmasing bagian memiliki panjang n/2. (n harus bilangan genap)
2.
Definisikan cipher blok berulang dimana hasil dari putaran ke-i ditentukan dari hasil putaran sebelumnya (lihat Gambar 1), yaitu
Misalkan KL adalah kunci lemah, E adalah fungsi enkripsi, D adalah fungsi dekripsi, P adalah plainteks, dan C adalah cipherteks, maka persamaan berikut menunjukan fenomena kunci lemah:
Li = Ri+1 Ri = Li – 1 ⊕ f(Ri – 1, Ki) dalam hal ini, i = 1, 2, ..., r (r adalah jumlah putaran) Ki = upa-kunci (subkey) pada putaran ke-i f = fungsi transformasi (didalamnya terdapat fungsi substitusi, permutasi, dan/atau ekspansi, kompresi) Li - 1
EKL(P) = C DKL(C) = EKL(C ) = P Cipher blok yang bagus tidak mempunyai kunci lemah. Meskipun demikian, algoritma yang mempunyai sedikit kunci lemah seperti DES tidak begitu masalah, karena jumlah kunci lemah itu relatif sangat kecil dibandingkan jumlah kunci keseluruhan.
Ri −1
f
Ki
⊕ Li
2.2.5 Kunci Lemah (weak key) Kunci lemah adalah kunci yang menyebabkan tidak adanya perbedaan antara enkripsi dan dekripsi. Dekripsi terhadap cipherteks tetap menghasilkan plainteks semula, namun enkripsi dua kali berturut-turut terhadap plainteks akan menghasilkan kembali plainteksnya.
Ri
Gambar 2 Skema Jaringan Feistel Plainteks adalah gabungan L dan R awal, atau secara formal dinyatakan dengan (L0, R0), sedangkan cipherteks didapatkan dari L dan R hasil dari putaran terakhir setelah terlebih dauhulu dipertukarkan, atau secara formal dinyatakan sebagai (Rr, Lr).
2.2.6 Kotak-S (S-Box) Kotak-S adalah matriks yang berisi substitusi sederhana yang memetakan satu atau lebih bit dengan satu atau lebih bit yang lain. Pada kebanyakan algoritma cipher blok, kotak-S memetakan m bit masukan menjadi n bit keluaran, sehingga kotak-S tersebut dinamakan kotak m × n S-box. Kotak-S merupakan satu-satunya langkah nirlanjar di dalam algoritma, karena operasinya adalah look-up table. Masukan dari operasi look-
up table dijadikan sebagai indeks kotak-S, dan keluarannya adalah entry di dalam kotak-S. Perancangan kotak-S menjadi isu penting karena kotak-S harus dirancang sedemikian sehingga kekuatan kriptografinya bagus dan mudah diimplementasikan. Ada empat cara (pendekatan) yang dapat digunakan dalam mengisi kotak-S:
plainteks diproses dalam kotak ini. Sedangkan angka yang terdapat pada kotak adalah angkaangka dari 1 sampai jumlah bit masukan. Cara kerja kotak-P pada prinsipnya sama dengan permutasi biasa. Bit pada urutan angka dalam kotak akan dipindahkan ke posisi dimana angka tersebut ditempatkan. 2.2.8 Ekspansi
1.
Dipilih secara acak Untuk kotak-S yang kecil, cara pengisian secara acak tidak aman, namun untuk kotakS yang besar cara ini cukup bagus.
Teknik ini memperbanyak jumlah bit pada blok plainteks berdasarkan aturan tertentu, misalnya dari 32 bit menjadi 48 bit. Dalam praktek, aturan eskpansi dinyatakan dengan tabel.
2.
Dipilih secara acak lalu diuji Sama seperti cara nomor 1, namun nilai acak yang dibangkitkan diuji apakah memenuhi sifat tertentu.
2.2.7 Kompresi
3.
4.
Dibuat oleh orang (man-made) Entry di dalam kotak-S dibangkitkan dengan teknik yang lebih intuitif. Dihitung secara matematis (math-made) Entry di dalam kotak-S dibangkitkan berdasarkan prinsip matematika yang terbukti aman dari serangan kriptanalis.
2.2.7 Kotak-P (P-Box) Kotak-P adalah matriks yang berisi transformasi sederhana yang mengacak posisi bit dari suatu blok plainteks.
Teknik ini kebalikan dari ekspansi, di mana jumlah bit pada blok plainteks diciutkan berdasarkan aturan tertentu. Dalam praktek, aturan kompresi dinyatakan dengan tabel. 3. Algoritma Rijndael 3.1 Panjang Kunci dan Ukuran Blok Rijndael Rijndael mendukung panjang kunci 128 bit sampai 256 bit dengan step 32 bit. Panjang kunci dan ukuran blok dapat dipilih secara independen. Karena AES menetapkan bahwa ukuran blok harus 128 bit, dan panjang kunci harus 128, 192, dan 256 bit, maka dikenal AES-128, AES-192, AES-256. Setiap blok dienkripsi dalam sejumlah putaran tertentu bergantung pada panjang kuncinya.
Panjang kotak-P ditentukan oleh banyaknya keluaran yang ingin dihasilkan setelah blok Tabel 1 Jumlah Putaran Setiap Blok pada AES Panjang Kunci (Nk words) AES-128 4 AES-192 6 AES-256 8 Catatan: 1 word = 32 bit Varian AES
Secara de-fakto, hanya ada dua varian AES, yaitu AES-128 dan AES-256, karena akan sangat jarang pengguna menggunakan kunci yang panjangnya 192 bit. Karena AES mempunyai panjang kunci paling sedikit 128 bit, maka AES tahan terhadap serangan exhaustive key search dengan teknologi saat ini. Dengan panjang kunci 128-bit, maka
Ukuran Blok (Nb words) 4 4 4
Jumlah Putaran (Nr) 10 12 14
terdapat 2128 ≈ 3,4 x 1038 kemungkinan kunci. Jika digunakan sebuah mesin dengan semilyar prosesor paralel, masing-masing dapat menghitung sebuah kunci setiap satu pico detik, maka akan dibutuhkan waktu 1010 tahun untuk mencoba seluruh kemungkinan kunci.
Tabel substitusi dapat dilihat pada tabel 2, sedangkan ilustrasi ByteSub dapat dilihat pada gambar.
3.2 Algoritma Rijndael Seperti pada DES, Rijndael menggunakan substitusi dan permutasi, dan sejumlah putaran. Untuk setiap putarannya, Rijndael menggunakan kunci yang berbeda. Kunci setiap putaran disebut round key. Tetapi tidak seperti DES yang berorientasi bit, Rijndael beroperasi dalam orientasi byte sehingga memungkinkan untuk implementasi algoritma yang efisien ke dalam software dan hardware [1]. Garis besar algoritma Rijndael yang beroperasi blok 128-bit dengan kunci 128-bit adalah sebagai berikut: 1.
AddRoundKey: melakukan XOR antara state awal (plainteks) dengan cipher key. Tahap ini disebut juga initial round.
2.
Putaran sebanyak Nr – 1 kali. Proses yang dilakukan pada setiap putaran adalah:
b.
c. MixColumn: mengacak data di masing-masing kolom array state. Ilustarsi MixColumn dapat dilihat pada gambar. d.
3.
a.
ByteSub: substitusi byte dengan menggunakan tabel substitusi (S-box).
ShiftRow: pergeseran baris-baris array state secara wrapping. Ilustarsi ShiftRow dapat dilihat pada gambar.
AddRoundKey: melakukan XOR antara state sekarang dengan round key. Ilustarsi AddRoundKey dapat dilihat pada gambar.
Final round: proses terakhir: a. ByteSub. b. ShiftRow. c. AddRoundKey.
Gambar 3 Diagram Proses Enkripsi AES
untuk
putaran
Diagram proses enkripsi AES dapat dilihat pada gambar.
CopyPlaintextToState(state,plain text)).
Algoritma Rijndael mempunyai 3 parameter sebagai berikut: 1. Plainteks : array yang berukuran 16 byte, yang berisi data masukan.
Operasi enkripsi/dekripsi dilakukan terhadap array S, dan keluarannya ditampung didadlam array out. Skema penyalinan array masukan in ke array S : S[r, c] 7 in[r + 4c] untuk 0 # r < 4 dan 0 # c < Nb
2.
Cipherteks : array yang berukuran 16 byte, yang berisi hasil enkripsi.
3.
key : array yang berukuran 16 byte, yang berisi kunci ciphering (disebut juga cipher key).
Dengan 16 byte, maka baik blok data dan kunci yang berukuran 128-bit dapat disimpan di dalam ketiga array tersebut (128 = 16 x 8). Selama kalkulasi plainteks menjadi cipherteks, status sekarang dari data disimpan di dalam array of byte dua dimensi, state, yang berukuran NROWS x NCOLS. Elemen array state diacu sebagai S[r,c], dengan 0 ≤ r < 4 dan 0 ≤ c < Nc (Nc adalah panjang blok dibagi 32). Pada AES, Nc = 128/32 = 4. Pada awal enkripsi, 16-byte data masukan, in0, in1, ..., in15 disalin ke dalam array state (direalisasikan oleh fungsi
Skema penyalinan array S ke array keluaran out: out[r+4c] 7 S[r,c] untuk 0 # r < 4 dan 0 # c < Nb 3.3 Transformasi SubBytes() Transformasi SubBytes() memetakan setiap byte dari array state dengan menggunakan tabel substitusi S-Box. Tidak seperti DES yang mempunyai S-Box berbeda pada setiap putaran, AES hanya mempunyai satu buah S-Box. Cara pensubstitusian adalah sebagai berikut : untuk setiap byte pada array state, misalkan S[r, c] = xy, yang dalam hal ini xy adalah digit heksadesimal dari nilai S[r, c], maka nilai substitusinya, yang dinyatakan dengan S’[r, c], adalah elemen di dalam S-Box yang merupakan perpotongan baris x dengan kolom y.
Gambar 4 Tabel S-BOX
S’2,c = S0,c ⊕ S1,c⊕ ({02}•S1,c) ⊕ ({03}•S3,c) S’3,c = ({03}•S0,c) ⊕ S0,c⊕S1,c ⊕ ({02}•S3,c)
Gambar 5 Ilustrasi Transformasi SubByte() Gambar 7 Ilustrasi Transformasi MixColumn() AES
3.4 Transformasi ShiftRow() Transformasi ShiftRow() melakukan pergeseran secara wrapping (siklik) pada 3 baris terakhir dari array state. Jumlah pergeseran bergantung pada nilai baris (r). Baris r= 1 digeser sejauh 1 byte, baris r = 2 digeser sejauh 2 byte, dan baris r = 3 digeser sejauh 3 byte. Baris r = 0 tidak digeser.
3.6 Transformasi AddRoundKey() Transformasi ini melakukan operasi XOR terhadap sebuah round key dengan array state, dan hasilnya disimpan dalam array state.
Gambar 6 Ilustrasi Transformasi ShiftRow()
3.5 Transformasi MixColumns() Transformasi MixColumns() mengalikan setiap kolom dari array state dengan polinom a(x) mod (x4 + 1). MixColumns memberikan difusi pada cipher. Setiap kolom diperlakukan sebagai polinom 4-duku pada GF(28). Polinom a(x) yang ditetapkan adalah : a(x) = {03}x3 + {01}x2 + {01}x + {02} Transformasi ini dinyatakan sebagai perkalian matriks : S’0,c S’1,c S’2,c S’3,c
=
02 01 01 03
03 02 01 01
01 03 02 01
01 01 03 02
S0,c S1,c S2,c S3,c
S’(x) = a(x) ⊕ s(x) S’0,c = ({02}•S0,c) ⊕ ({03}• S1,c) ⊕S2,c ⊕ S3,c S’1,c = S0,c ⊕ ({02}• S1,c) ⊕ ({03}•S2,c) ⊕ S3,c
Gambar 8 Ilustrasi Transformasi AddRoundKey() AES
3.6 Ekspansi Kunci Ekspansi kunci dibutuhkan utuk memenuhi kebutuhan subkey yang dapat mencapai ribuan bit untuk melakukan enkripsi, sementara kunci enkripsi yang disediakan hanya 128 hingga 256 bit. Total subkey yang diperlukan AES adalah Nb(Nr + 1) word. Jadi bila menggunakan AES – 128 yang berjumlah 128 bit, diekspan hingga menjadi 1408 bit, melalui proses yang disebut dengan key schedule. Subkey sebanyak ini diperlukan karena setiap ronde membutuhkan Nb word ditambah satu word subkey untuk diawal. Key-schedule menghasilkan array linear word[wi] sebesar 4byte, dimana i memiliki nilai 0d” i
Proses ekspansi kunci ditunjukkan dengan pseudocode berikut : KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)]) { for(i = 0; i < Nk; i++) W[i] = (Key[4*i],Key[4*i+1],Key[4*i+2 ] Key[4*i+3]);
for(i = Nk; i < Nb * (Nr + 1); i++) { temp = W[i - 1]; if (i % Nk == 0) temp = SubByte(RotByte(temp)) ^ Rcon[i / Nk]; W[i] = W[i - Nk] ^ temp; } }
Gambar 9 Ilustrasi ekspansi cipherkey menjadi roundkey
4. Algoritma Twofish
4.
4.1 Tujuan desain Twofish Algoritma Twofish didesain untuk memenuhi kriteria yang ditetapkan oleh NIST untuk sayembara penentuan standar algoritma. Kriteria tersebut diantaranya adalah : 1. 2. 3. 4. 5. 6.
Menggunakan 128-bit enkripsi dengan metode blok cipher. Panjang kunci 128 bits, 192 bits, dan 256 bits. Tidak memiliki kunci lemah Efisien baik jika digunakan di Intel Pentium Pro maunum perangkat lunak ataupun keras lainnya Memiliki desain yang fleksibel sehingga dapat digunakan untuk stream chiper, hash function, dan MAC. Design yang sederhana.
Kriteria tambahan yang dimiliki oleh algoritma Twofish adalah : 1. Dapat menerima kunci lebih dari 256 bits 2. Untuk versi dengan optimasi penuh proses enkripsi data dapat dilakukan kurang dari 500 clock cycle per blok pada Pentium, Pentium Pro, dan Pentium II. 3. Untuk pemrosesan 32 blok dengan 128 but kunci dapat memakan waktu yang lebih sedikit.
5.
Tidak memiliki operasi yang dapat mengurangi efisiensi jika digunakan pada mikroprosesor 8-bit, 16-bit, 32-bit maupun 64 bit. Memiliki berbagai variasi performansi dari key schedule
4.2 Blok pembangun algoritma Twofish Secara garis besar algoritma twofish dibangun dari beberapa algoritma utama, algoritmaalgoritma tersebut diambil dari prinsip pembangunan algoritma cipher blok. Ada 6 peinsip yang digunakan yaitu : 1. 2. 3. 4. 5. 6.
Feistel Network S-boxes MDS Matrices Pseudo-Hadamard Transforms Whitening Key Schedule
4.3 Feistel Network Feistel network adalah metoda umum yang digunakan untuk mentransformasikan fungsi (biasanya disebut fungsi f) secara permutasi. Metode ini ditemukan oleh Horst Feistel saat mendesain algoritma Lucifer. Metode ini mulai populer setelah digunakan dalam algoritma DES. Algortima lain yang menggunakan jaringan feistel adalah FEAL, GOST, Khufu and Khafre, LOKI, CAST-128, Blowfish, dan RC5.
Bagian terpenting dari jaringan Feistel adalah fungsi f. Fungsi f sendiri merupakan kunci yang berkaitan dengan proses pemetaan string input menjadi string output. Fungsi f selalu tidak linier.
dapt dilihat bahwa tidak ada pemetaan yang mendapatkan jarak yang lebih besar jarak dari minimun antara dua vektor distinc, selain jarak maksimum dari term dua term yang terpisah.
F : {0,1}n/2 x {0,1}N -> {0,1}n/2
Pemetaan MDS dapat direpresentasikan dengan matriks MDS yang mengandung elemen a dan elemen b. Kode Reed-Solomon (RS) errorcorrecting diketahui sebagai MDS. Kondisi yang lebih baik dari matriks a dan b untuk dijadikan MDS adalah bahwa semua submatriks bujur sangkar dihasilkan dengan mengabaikan baris dan kolom yang tidak singular.
dimana : n : ukuran blok dari jaringan feistel F : fungsi yang menerima input n = 2 bit dari blok dan N bit dari kunci dan menghasilkan output dari panjang n=2bit. Pada setiap putaran, blok source merupakan input dari f dan output dari f di-xor kan dengan blok target setelah keduanya ditukar posisikan untuk putaran berikutnya Ide ini adalah untuk mendapatkan fungsi f yang kemungkinan merupakan algortima enkripsi yang lemah jika dikerjakan satu kali, akan menjadi algoritma enkripsi yang kuat jika dikerjakan secara berulang kali .
Serge Vaudenay pertama kali mengajukan matriks MDS sebagai elemen dari desain cipher. Shark and Square menggunakan matriks MDS, yang dilihat pertama kali pada konstruksi matriks MDS digunakan digunakan pada cipher Manta 3 yang tidak dipublikasikan. Twofish menggunakan matriks MDS tunggal 4x4. 4.6 Pseudo-Hadamard Transforms
4.4 S-Boxes S-Box adalah tabel substitusi untuk operasi algoritma yang yang tidak linear yang digunakan pada kebanyakan block cipher. S-Box memiliki berbagai fariasi dalam ukuran input maupun ukuran output dan dapat digunakan baik secara acak maupun secara algoritmik. S-Box pertama kali digunakan dalam algoritma Lucifer, kemudian DES dan selanjutnya pada kebanyakan algoritma enkripsi yang menggunakan metode blok cipher. Dalam algoritma Twofish s-box yang digunakan adalah 8 x 8 bit s-box. Twofish memiliki 4 kunci yang berbeda. S-box yang digunakan pada algoritma twofish dibangun dengan melakukan 8x8 bit permutasi dengan kunci tertentu.
Pseudo-Hadamard transform (PHT) adalah penggabungan sederhana yang berjalan secara cepat pada perangkat lunak. Ada dua input yaitu a dan b dari 32-bit PHT yang terdefinisi sebagai : a0 = a + b mod 2 32 b0 = a + 2b mod 2 32 SAFER menggunakan 8-bit PHTs secara extensive untuk proses diffusion. Twofish menggunakan 32-bit PHT untuk mengacak output dari dua paralel 32-bit fungsi g. PHT ini dapat dieksekusi dalam dua opcode pada kebanyakan mikroprosesor modern, termasuk keluarga Pentium. 4.7 Whitening
4.5 MDS Matrices Kode maximum distance separable (MDS) dalam sebuah field adalah pemetaan linear dari field elemen A ke field element B, menghasilkan vektor komposit dari elemen A + B, dengan properti yang memiliki nilai minimum dari elemen bukan nol pada vektor bukan nol setidaknya B + 1. Contohnya jumlah elemen antara jarak dua vektor dihasilkan dengan memetakan paling tidak B + 1. Secara mudah
Whitening, adalah teknik untuk meng-exor kan material kunci sebelum putaran pertama dan setelah putaran terakhir. Whitening digunakan oleh Merkle dalam Khufu/Khafre, dan secara independen ditemukan oleh Rivest untuk DESX. Dalam tulisannya, Rivest menyatakan bahwa whitening meningkatkan keamanan algoritma dari keysearch attacks sebagai peringatan pada cipher.Dalam serangan pada putaran varian Twofish yang disederhanakan ditemukan bahwa
whitening meningkatkan keamanan untuk menahan serangan terhadap cipher secara subtansial. Proses whitening akan menyembunyikan input yang spesifik pada putaran pertama dan terakhir dari fungsi f terhadap serangan yang dilakukan oleh attacker. Twofish melakukan xors 128 bits dari subkey sebelum putaran pertama Feistel, dan melakukan xor dengan 128 bit lainnya setelah putaran feistel terakhir. Subkey ini dikalkulasikan dengan cara yang sama dengan round sub key tetapi dilakukan pada tempat yang lain pada chiper.
4.8 Key Schedule Key schedule adalah schedule yang mengatur perubahan key bits menjadi round key yang dapat digunakan oleh cipher. Twofish membutuhkan banyak material key dan memiliki key schedule yang lengkap. Untuk mmfasilitasi analisis, key schedule menggunakan primitif yang sama seperti pada fungsi yang mengalami pengulangan.
Gambar 10 Ilustrasi Algoritma Twofish
4.9 Algoritma Twofish Twofish menggunakan 16 putaran struktur feistel dengan penambahan whitening dari input dan output. Satu-satunya elemen non-feistel adalah rotasi satu bit. Rotasi dapat dipindahkan pada fungsi f untuk membuat struktur yang murni feistel tapi membutuhkan tambahan rotasi dari words tepat setelah proses whitening output. Plainteks dibagi menjadi empat 32-bit words. Pada langkah whitening input, masing-masing plainteks di-xor kan dengan keempat kata kunci. Hal ini dilakukan pada ke enambelas iterasi. Pada setiap iterasi, dua words yang berada pada sebelah kiri digunakan sebagai input pada fungsi g. (Salah satunya dirotasikan dengan 8 bit pertama). Fungsi g mengandung 4 byte-wide key yang tergantung pada S-Boxes diikuti dengan tahap pengacakan berdasarkan matriks MDS. Hasil dari kedua fungsi g dikombinasikan dengan menggunakan Pseudo-Hadamard Transform (PHT), dan kedua kata kunci ditambahkan. Kedua hasil ini kemudian dixorkan dengan words pada sebelah kanan (salah satu yang dirotasikan ke sebelah kiri dengan 1 bit pertama, yang lainnya dirotasikan ke kanan secara afterwards). Potongan kiri dan kanankemudian ditukarkan dengan iterasi selanjutnya. Setelah semua interasi, penukaran iterasi terakhir disimpan dan keempat words di-xor kan dengan empat kunci lagi untuk memproduksi chiperteks. Secara lebih formal, ke 16 bytes dari plainteks p0,…, p15 adalah potongan pertama yang dipecah menjadi 4 words. are _rst split into 4 words P0,…, P3 dari 32 bit masin-masing menggunakan konvensi littleendian.
Pada tahap whitening input, words di-xorkan dengan 4 words dari kunci yang telah diperluas.
Pada setiap iterasi pada ke enam belas putaran, dua words pertama digunakan sebagai input untuk fungsi f, yang juga menggunakan nomer iterasi sebagai input. Word ketiga di-xor kan dengan output pertama dari f dan kemudian
dirotasikan satu bit ke kanan. Word keempat dirotasikan kekiri sebanyak 1 bit dan kemudian di-xor kan dengan output kedua dari word f. Terakhir, kedua potongan ditukarkan. Maka,
Untuk r= 0, … , 15 dan karena ROR dan ROL adalah fungsi yang merotasikan argumen pertama (32-bit word) di sebelah kiri atau kanan dengan jumlah bit yang diindikasikan dengan argumen kedua. Tahap whitening output tidak melakukan penukaran pada putaran terakhir dan meng-xor kan data words dengan 4 words dari kunci yang diperluas.
Keempat words dari cipherteks kemudian ditulis sebagai 16 bytes c0, … , c15 dengan menggunakan konversi little-endian sama dengan yang digunakan pada plainteks.
4.9.1 Fungsi f Fungsi f adalah permutasi yang bergantung pada kunci untuk nilai 64-bit. Mendapatkan 3 argumen, dua input words R0 dan R1, dan jumlah putaran r digunakan untuk memilih subkeys yang sesuai. R0 dilewatkan melalui fungsi g, yang mengandung T0 . R1 dirotasikan 8 bit ke kiri dan kemudian dilewatkan pada fungsi g yang mengandung T1. Hasilnya T0 dan T1 kemudian dikombinasikan dalam PHT dan kedua words dari kunci yang diperluas ditambahkan.
Dimana (F0, F1) adalah hasil dari F. Fungsi F’ juga didefinisikan untuk digunakan dalam analisis. F’ identik dengan fungsi F, kecuali
bahwa F’ tidak mengandung blok kunci pada bagian output. (PHT tetap dijalankan) 4.9.2 Fungsi g Fungsi g adalah inti dari algoritma twofish. Word X sebagai input dibagi menjadi 4 byte. Setiap byte menjalankan key-dependent S-box nya masing-masing. Setiap S-Box bijektif, mengambil 8 bit dari input, dan menghasilkan vektor dengan panjang 4 diatas GF(28), dan mengalikannya dengan 4 x 4 matriks MDS (menggunakan field GF(28) untuk melakukan komputasi). Vektor hasil diinterpretasikan sebagai 32-bit word yang merupakan hasil dari g
Dimana si adalah key-dependent –boxes dan Z adalah hasil dari g. Untuk dapat memudahkan pendefinisian maka perlu dispesifikasikan hubungan antara nilai byte dan elemen field dari GF(28). Representasi GF(28) sebagai GF(2)[x]/v(x) dimana v(x) = x8+x6+x5+x3+1 adalah primitif polinomial dengan derajat 8
Twofish mendefinisikan key dengan panjang N = 128, N = 192, dan N = 256. Kunci dengan panjang dibawah 256 bit dapat digunakan dengan melakukan padding dengan nol sampai panjang kunci terbesar selanjutnya. Didefinisikan k = N/64. Kunci M mengandung 8k bytes m0, … , m8k-1. Setiap byte dikonversikan pertama kali dengan 2k words untuk setiap 32 bits.
dan kemudian dengan vektor dua word dengan panjang k.
Vektor word ketiga dengan panjang k juga dibagi dengan kunci. Diselesaikan dengan mengambil kunci bytes sebanyak delapan delapan, menginterpretasikannya sebagai vektor diatas GF(28) dan mengalikannya dengan matriks 4 x 8 didapat dari kode RS. Setiap hasil dari 4 bytes kemudian diinterpretasikan sebagai 32-bit word. Words ini membuat vektor ketiga.
diatas GF (2). Elemen field dengan didefinisikan dengan nilai byte . Hal ini merupakan inti dari pemetaan natural; penambahan pada GF(28) berkorespondensi dengan xor dari byte. Matriks MDS didefinisikan sebagai : Untuk i = 0, ... , k -1 dan S = (Sk – 1, Sk – 2, ... , S0) S berisi words dalam urutan yang terbalik. Untuk pengalian matriks RS, GF(28) direpresentasikan oleh GF(2)[x]/w(x), dimana Dimana elemen telah ditulis sebagai nilai byte heksadesimal menggunakan korespondensi diatas. 4.9.3 Key schedule Key schedule menghasilkan 40 words dari hasil perluasan kunci K0,, … , K39, dan keempat keydependent S-Box digunakan dalam fungsi g.
w(x) =x8+x6+x3+x2+1 adalah primitif polinomial lain derajat 8 diatas GF(2). Pemetaan antara nilai byte dan elemen dari GF(28) menggunakan definisi yang sama dengan yang digunakan untuk perkalian matriks MDS. Dengan menggunakan pemetaan ini, diberikan RS matriks sebagai berikut :
6.
Kedua algoritma tidak memiliki weak key. Ini kemungkinan besar disebabkan katena kedua algoritma melakukan pemrosesan data sebelum terjadi pengulangan cipher.
Ketiga vektor Me, M0, dan S dari basis key schedule.
7.
Kedua algoritma memiliki keyschedule yang terdefinisi.
5. Perbandingan Rijndael dan Twofish
Selain persamaan tentu saja terdapat beberapa perbedaan antara kedua algoritma yang dibahas. Perbedaan tersebut diantaranya adalah :
5.1 Dilihat dari prinsip perancangan Dilihat dari 9 prinsip dalam pembuatan algoritma Chiper block yang telah disebutkan sebelumnya, terdapat beberapa persamaan dan perbedaan antara perancangan algoritma Rijndael dan Twofish. Persamaan diantara algoritma Rijndael dan Twofish : 1.
Baik algoritma Rijndael maupun algoritma Twofish menggunakan prinsip Confusion dan Diffusion dari Shanon. Kedua algoritma telah berhasil manyembunyikan hubungan apapun yang ada antara plainteks, cipherteks, dan kunci. Untuk kedua algoritma, perubahan pada 1 bit plainteks juga menyebabkan banyak pengaruh pada cipherteks.
1.
Algoritma Rijndael tidak menggunakan jaringan feistel dalam algoritmanya sehingga algoritma tampak lebih sederhana
2.
Algoritma twofish menggunakan prinsip MDS Matrices dan Pseudo-Hadamard Transforms sedangkan Rijndael menggunakan mixcolums.
5.2 Dilihat dari kecepatan, keamanan, dan kesederhanaan Perbandingan antara algoritma Rijndael dan twofish dilihat dari segi kecepatan, keamanan dan kesederhanaan kode dapat dilihat pada tabel berikut : Cipher
2.
3.
4.
5.
Prinsip Chiper berulang (iterative chiper) yang pada prinsipnya mengulangi proses enkripsi beberapa kali dengan kunci yang berbeda dilakuan baik pada algoritma Twofish maupun pada Algoritma Rijndael. Kedua algoritma memiliki Kotak-S. Meskipun demikian algoritma Rijndael hanya memiliki satu kotak-S sedangkan algoritma Twofish memiliki banyak kotak s yang dibangkitkan secara otomatis. Kedua algoritma tidak memanfaatkan prinsip P-Box dalam merancang algoritma untuk transformasi. Akan tetapi menggunakan metode lain yaitu dengan fungsi tertentu untuk melakukan transformasi dan permutasi. Kedua algoritma tidak melakukan proses ekspansi maupun kompresi. Pada algoritma Twofish hanya terdapat padding untuk kunci yang kurang dari 256.
Rijndael Twofish
Speed (32) 18 16
Speed (8) 20 18
Safety Factor 1.11 2.67
Simplicity (Code Size) 98 KB 104KB
Dari tabel tersebut maka dapat disimpulkan bahwa algoritma Rijndael unggul dalam hal kecepatan dan kesederhanaan kode, tetapi dalam hal tingkat keamanan algoritma Twofish jauh lebih unggul dibandingkan algoritma Rijndael. 6. Kesimpulan Kesimpulan yang dapat dimbil dari studi perbandingan antara algoritma Rijndael dan algoritma twofish diantaranya adalah : 1. 2. 3.
Kedua algoritma memanfaatkan prinsip prinsip Confusion dan Diffusion dari Shanon. Baik pada algoritma Rijndael maupun Twofish, dilakukan prinsip cipher berulang dan keduanya memiliki S-Box Kedua algoritma tidak memanfaatkan prinsip P-Box dan sebagai gantinya menggunakan metode lain untuk proses transformasi.
4.
Pada kedua algoritma tidak terdapat proses ekspansi maupun kompresi. 5. Kedua algoritma tidak memiliki weak key. 6. Kedua algoritma memiliki keyschedule. 7. Pada algoritma Rijndael dikenal istilah mixcolums. 8. Pada algoritma twofish dikenal istilah MDS Matrices dan Pseudo-Hadamard Transforms 9. Algoritma Rijndael tidak menggunakan jaringan feistel sedangkan algoritma twofish menggunakan jaringan feistel. 10. Algortima Rijndael unggul dibandingkan dengan algoritma Twofish jika dilihat dari segi kecepatan dan kesederhanaan algoritma. 11. Dalam hal tingkat keamanan data algoritma Twofish jauh lebih unggul jika dibandingkan dengan algoritma Rijndael. DAFTAR PUSTAKA [1] Daemen, Joan and Vincent Rijmen. (1999). New Result on the Twofish Encryption Algorithm, http://www.tropsoft.com/strongenc/rijndael. pdf. Tanggal Akses : 8 Oktober 2006 pukul 16:30. [2] Evand, David. Two Fish on the Rijndael http://www.cs.virginia.edu/~evans/cs588/lec tures/ Tanggal Akses : 27 September 2006 pukul 08:00 [3] http://en.wikipedia.org/wiki/Advanced_Encr yption_Standard Tanggal Akses : 8 Oktober 2006 pukul 16.30 [4] http://en.wikipedia.org/wiki/Twofish Tanggal Akses : 8 Oktober 2006 pukul 16.30 [5] Kurniawan, Yusuf. (2004). Kriptografi keamanan Internet dan Jaringan Komunikasi. Penerbit Informatika. [6] Munir, Rinaldi. (2004). Bahan Kuliah IF5054 Kriptografi. Departemen Teknik Informatika. Institut Teknologi Bandung.
[7] Schneier, Bruce. (1998). Two_fish: A 128Bit Block Cipher, http://www.schneier.com/paper-twofishpaper.pdf. Tanggal Akses : 27 September 2006 pukul 08:00. [8] Schneier, Bruce. (1999). New Result on the Twofish Encryption Algorithm, http://www.tropsoft.com/strongenc/twofish. pdf. Tanggal Akses : 8 Oktober 2006 pukul 16:30.