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 : if13106@students.if.itb.ac.id
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 1990-an. 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
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. Algoritma termasuk dalam algoritma
kriptografi simetri berbasis chiper blok
2. Rancangan algoritma harus publik
(tidak boleh dirahasiakan)
3. Panjang kunci fleksibel : 128, 192, dan 256 bit
4. Ukuran blok yang dienkripsi 128 bit
5. 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. Cipher aliran (stream cipher)
Algoritma kriptografi yang beroperasi dalam bentuk bit tunggal. Rangkaian bit dienkripsikan bit per bit.
2. 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)
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
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. Confusion dari Shanon 2. Diffusion dari Shanon
3. Chiper berulang (iterative chiper) 4. Jaringan feistel (feistel network) 5. Kunci lemah (weak key) 6. Kotak-S (S-Box) 7. Kotak-P (P-Box)
8. Ekspansi
9. 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 berbeda-beda 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)
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.
Model jaringan feistel adalah sebagai berikut :
1. Bagi blok yang panjangnya n bit menjadi
dua bagian, kiri (L) dan kanan (R).
Masing-masing 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
Li = Ri+1 f = fungsi transformasi
(didalamnya terdapat fungsi substitusi, permutasi, dan/atau
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).
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.
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.
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:
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.
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 × nS-box.
Kotak-S merupakan satu-satunya langkah
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:
1. Dipilih secara acak
Untuk kotak-S yang kecil, cara pengisian secara acak tidak aman, namun untuk kotak-S yang besar cara ini cukup bagus.
2. Dipilih secara acak lalu diuji
Sama seperti cara nomor 1, namun nilai acak yang dibangkitkan diuji apakah memenuhi sifat tertentu.
3. Dibuat oleh orang (man-made)
Entry di dalam kotak-S dibangkitkan dengan teknik yang lebih intuitif.
4. 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.
Panjang kotak-P ditentukan oleh banyaknya keluaran yang ingin dihasilkan setelah blok
plainteks diproses dalam kotak ini. Sedangkan angka yang terdapat pada kotak adalah angka-angka 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
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.2.7 Kompresi
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.
Tabel 1 Jumlah Putaran Setiap Blok pada AES
Varian AES Panjang Kunci (Nk words)
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
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
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:
a. ByteSub: substitusi byte dengan menggunakan tabel substitusi (S-box).
Tabel substitusi dapat dilihat pada tabel 2, sedangkan ilustrasi ByteSub
dapat dilihat pada gambar.
b. ShiftRow: pergeseran baris-baris
array state secara wrapping. Ilustarsi
ShiftRow dapat dilihat pada gambar.
c. MixColumn: mengacak data di
masing-masing kolom array state.
Ilustarsi MixColumn dapat dilihat
pada gambar.
d. AddRoundKey: melakukan XOR
antara state sekarang dengan round
key. Ilustarsi AddRoundKey dapat
dilihat pada gambar.
3. Final round: proses untuk putaran terakhir:
a. ByteSub. b. ShiftRow. c. AddRoundKey.
Diagram proses enkripsi AES dapat dilihat pada gambar.
Algoritma Rijndael mempunyai 3 parameter
sebagai berikut:
1. Plainteks : array yang berukuran 16
byte, yang berisi data masukan.
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
CopyPlaintextToState(state,plain
text)).
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 < NbSkema penyalinan array S ke array keluaran out:
out[r+4c]
7
S[r,c] untuk 0 #r < 4 dan 0 #c < Nb3.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 5 Ilustrasi Transformasi SubByte()
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.
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’(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
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 7 Ilustrasi Transformasi
MixColumn() AES
3.6 Transformasi AddRoundKey()
Transformasi ini melakukan operasi XOR terhadap sebuah round key dengan array state, dan hasilnya disimpan dalam array state.
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
4-byte, dimana i memiliki nilai 0d” i<Nb(Nr + 1).
Proses ekspansi kunci ditunjukkan dengan
pseudocode berikut :
KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)])
Gambar 9 Ilustrasi ekspansi cipherkey menjadi roundkey
4. Algoritma Twofish
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. Menggunakan 128-bit enkripsi dengan
metode blok cipher.
2. Panjang kunci 128 bits, 192 bits, dan
256 bits.
3. Tidak memiliki kunci lemah
4. Efisien baik jika digunakan di Intel
Pentium Pro maunum perangkat lunak ataupun keras lainnya
5. Memiliki desain yang fleksibel
sehingga dapat digunakan untuk stream chiper, hash function, dan MAC.
6. 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.
4. Tidak memiliki operasi yang dapat
mengurangi efisiensi jika digunakan pada mikroprosesor 8-bit, 16-bit, 32-bit maupun 64 bit.
5. Memiliki berbagai variasi performansi
dari key schedule
4.2 Blok pembangun algoritma Twofish
Secara garis besar algoritma twofish dibangun dari beberapa algoritma utama, algoritma-algoritma tersebut diambil dari prinsip
pembangunan algoritma cipher blok. Ada 6
peinsip yang digunakan yaitu :
1. Feistel Network 2. S-boxes 3. MDS Matrices
4. Pseudo-Hadamard Transforms
5. Whitening 6. Key Schedule
4.3 Feistel Network
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.
F : {0,1}n/2 x {0,1}N -> {0,1}n/2
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 .
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.
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
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.
Pemetaan MDS dapat direpresentasikan dengan matriks MDS yang mengandung elemen a dan
elemen b. Kode Reed-Solomon (RS)
error-correcting 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.
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
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
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 DES-X. Dalam tulisannya, Rivest menyatakan bahwa
whitening meningkatkan keamanan algoritma dari keysearch attacks sebagai peringatan pada cipher.Dalam serangan pada putaran varian
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.
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 di-xorkan 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
little-endian.
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 wordsR0 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’
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
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 :
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 key-dependent S-Box digunakan dalam fungsi g.
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.
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
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
Ketiga vektor Me, M0, dan S dari basis key schedule.
5. Perbandingan Rijndael dan Twofish
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.
2. 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.
3. 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.
4. 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.
5. Kedua algoritma tidak melakukan proses
ekspansi maupun kompresi. Pada algoritma
Twofish hanya terdapat padding untuk kunci yang kurang dari 256.
6. Kedua algoritma tidak memiliki weak key.
Ini kemungkinan besar disebabkan katena kedua algoritma melakukan pemrosesan data sebelum terjadi pengulangan cipher.
7. Kedua algoritma memiliki keyschedule yang terdefinisi.
Selain persamaan tentu saja terdapat beberapa perbedaan antara kedua algoritma yang dibahas. Perbedaan tersebut diantaranya adalah :
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 :
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. Kedua algoritma memanfaatkan prinsip
prinsip Confusion dan Diffusion dari Shanon.
2. Baik pada algoritma Rijndael maupun
Twofish, dilakukan prinsip cipher
berulang dan keduanya memiliki S-Box
3. Kedua algoritma tidak memanfaatkan
prinsip P-Box dan sebagai gantinya
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
128-Bit Block Cipher,
http://www.schneier.com/paper-twofish-paper.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.