56730749 STUDI DAN PERBANDINGAN ALGORITMA RIJNDEAL DAN TWO FISH

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 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


Li

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

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.

Ki

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.
2.

Cipherteks : array yang berukuran 16
byte, yang berisi hasil enkripsi.

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

3.

key
: array yang berukuran 16
byte, yang berisi kunci ciphering (disebut
juga cipher key).

Skema penyalinan array S ke array keluaran out:
out[r+4c] 7 S[r,c]
untuk 0 # r < 4 dan 0 # c < Nb

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

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 {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.

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.

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

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.

dengan
diatas GF (2). Elemen field
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.