You are on page 1of 15

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 Dalam perkembangannya, dibutuhkan suatu


algoritma kriptografi simetri yang menjadi
Pengiriman dan penyimpanan pesan melalui
standar nasional di Amerika Serikat. Pada tahun
media elektronik sudah banyak dilakukan.
1977 IBM mendaftarkan algoritmanya dan
Terkadang pengiriman dan penyimpanan pesan
dijadikan standar algoritma kriptografi kunci
melalui media elektronik perlu dirahasiakan
simetri setelah disetujui oleh National Bureau of
untuk menjamin keamanan dan keutuhan data
Standard (NBS) dan setelah penilaian kekuatan
yang dikirimkan. Oleh sebab itu maka
olrh National Security Agency (NSA) Amerika
dibutuhkan sebuah metode panyandian pesan.
Serikat.
Ilmu sekaligus seni untuk menjaga keamanan
pesan disebut kriptografi.
Algoritma DES terbukti menjadi algoritma
enkripsi yang aman di dunia selama puluhan
Secara umum dalam kriptografi terdapat 2 proses
tahun. Namun, panjang kunci DES yang hanya
utama yaitu proses menyandikan plainteks
56 bit dianggap terlalu pendek pada tahun 1990-
(pesan yang dapat dibaca) menjadi cipherteks
an. Penggunaan DES dianggap sudah tidak aman
(pesan yang tidak dapat dibaca/sudah
lagi seiring dengan berkembangnya perangkat
disandikan) yang disebut proses enkripsi
keras dan meluasnya penggunaan jaringan
(encryption) dan proses mengembalikan
komputer terdistribusi sehingga kunci DES dapat
cipherteks menjadi plainteks disebut proses
dipecahkan hanya dalam beberapa hari.
dekripsi (decryption).
Oleh karena itu maka diperlukan algoritma baru
Dalam kriptografi modern algoritma yang
sebagai standar enkripsi kriptografi simetri.
digunakan tidak lagi rahasia, yang dirahasiakan
Untuk menghindari kontraversi mengenai
hanyalah kunci untuk melakukan enkripsi pesan.
standar baru tersebut, seperti pada pembuatan
Berdasarkan jenis kuncinya terdapat 2 jenis
DES (NSA dicurigai memiliki ”pintu belakang”
algoritma kriptografi yaitu algoritma simetri
untuk mengungkap cipherteks hasil DES tanpa
(konvensional) dan algoritma asimetri (kunci
kunci), maka NIST (National Institute of
publik).
Standards and Technology) mengadakan
sayembara terbuka untuk membuat standar
algoritma kriptografi yang baru sebagai 2.1 Cipher Blok
pengganti DES yang kelak akan diberi nama
Pada cipher blok, rangkaian bit-bit plainteks
Advanced Encryption Standard (AES).
dibagi menjadi blok-blok bit dengan panjang
Persyaratan yang diajukan oleh NIST mengenai
sama [3]. Enkripsi dilakukan terhadap blok bit
algoritma baru tersebut adalah :
plainteks menggunakan bit-bit kunci (yang
ukurannya sama dengan blok plainteks).
1. Algoritma termasuk dalam algoritma
Algoritma enkripsi menghasilkan blok cipherteks
kriptografi simetri berbasis chiper blok
yang berukuran sama dengan blok plainteks.
2. Rancangan algoritma harus publik
Dekripsi dilakukan dengan cara yang serupa
(tidak boleh dirahasiakan)
seperti enkripsi.
3. Panjang kunci fleksibel : 128, 192, dan
256 bit
Misalkan blok plainteks (P) yang berukuran m
4. Ukuran blok yang dienkripsi 128 bit
bit dinyatakan sebagai vektor
5. Algoritma dapat diimplementasikan
baik sebagai software maupun
P = (p1, p2, ..., pm)
hardware.
yang dalam hal ini pi adalah bit 0 atau bit 1 untuk
Pada sayembara ini diperoleh 5 finalis dari 15
i = 1, 2, …, m, dan blok cipherteks (C) adalah
proposal algoritma yang masuk. Kelima finalis
itu adalah Rijndael, Serpent, Twofish, RC6, dan
C = (c1, c2, ..., cm)
MARS. Pada Oktober tahun 2000 ditetapkan
Rijndeal sebagai pemenang sayembara tersebut.
yang dalam hal ini ci adalah bit 0 atau bit 1 untuk
Rijndeal tentu saja memiliki berbagai
i = 1, 2, …, m.
keunggulan sehingga dapat menjadi pemenang
sayembara, tetapi tentu saja Rijndeal juga
Bila plainteks dibagi menjadi n buah blok,
memiliki beberapa kekurangan yang mungkin
barisan blok-blok plainteks dinyatakan sebagai
dimiliki oleh algoritma yang lain. Oleh sebab itu,
pada makalah ini penulis akan membahas
(P1, P2, …, Pn)
mengenai perbandingan Rijndeal sebagai
pemenang sayembara dengan Twofish yang
Untuk setiap blok plainteks Pi, bit-bit
merupakan salah satu finalis sayembara tersebut.
penyusunnya dapat dinyatakan sebagai vektor
2. Algoritma Simetri
Pi = (pi1, pi2, ..., pim)
Algoritma kriptografi (cipher) simetri yang
beroperasi dalam mode bit dapat dikelompokkan Enkripsi dengan kunci K dinyatakan dengan
dalam dua kategori yaitu : persamaan

1. Cipher aliran (stream cipher) Ek(P) = C,


Algoritma kriptografi yang beroperasi
dalam bentuk bit tunggal. Rangkaian bit sedangkan dekripsi dengan kunci K dinyatakan
dienkripsikan bit per bit. dengan persamaan

2. Cipher blok (block chiper) Dk(C) = P


Algoritma kriptografi yang beroperasi
dalam bentuk blok it. Rangkaian bit Skema enkripsi dan dekripsi dengan cipher blok
dibagi menjadi blok-blok bit yang dapat dilihat pada gambar.
panjangnya sudah ditentukan
sebelumnya.
Gambar 1 Skema Enkripsi dan Dekripsi dengan Cipher Blok

2.2 Prinsip Dasar Algoritma Cipher Block plainteks atau kunci akan menyebabkan
sebanyak mungkin pengaruh pada cipherteks.
Dalam pembuatan algoritma Chiper block
Sebagai contoh, perubahan kecil yang terjadi
terdapat beberapa prinsip yang biasa digunakan.
pada plainteks sebanyak satu atau dua bit akan
9 prinsip yang biasanya diperhatikan dalam
menghasilkan perubahan pada cipherteks yang
pembuatan algoritma chiper block adalah :
tidak dapat diprediksi jumlahnya.
1. Confusion dari Shanon
Sama seperti prinsip confusion dari Shanon
2. Diffusion dari Shanon
prinsip ini menyembunyikan hubungan statistik
3. Chiper berulang (iterative chiper)
antara plainteks, sipherteks, dan kunci sehingga
4. Jaringan feistel (feistel network)
membuat kriptanalis menjadi kesulitan dalam
5. Kunci lemah (weak key)
memecahkan kode.
6. Kotak-S (S-Box)
7. Kotak-P (P-Box)
Prinsip diffusion dari shanon ini biasanya
8. Ekspansi
dilakukan secara berulang-ulang pada sebuah
9. Kompresi
blok tunggal dengan kombinasi yang berbeda-
beda untuk mendapatkan tingkat keamanan yang
2.2.1 Confusion dari Shanon
lebih tinggi.
Prinsip ini menyembunyikan hubungan apapun
yang ada antara plainteks, cipherteks, dan kunci.
Sebagai contoh, pada cipher substitusi seperti 2.2.3 Chiper berulang (iterative chiper)
caesar ciper, hubungan antara cipherteks dan
plainteks mudah diketahui, karena satu huruf Chiper berulang pada prinsipnya adalah fungsi
yang sama pada plainteks diganti dengan satu transformasi sederhana yang mengubah plainteks
huruf yang sama pada cipherteksnya. menjadi cipherteks yang dilakukan secara
berulang-ulang sebanyak sejumlah kali. Pada
Prinsip confusion akan membuat kriptanalis setiap putaran digunakan upa-kunci (subkey) atau
kesulitan dalam mencari pola-pola statistik yang kunci putaran (round key) yang dikombinasikan
muncul pada cipherteks. Confusion yang baik dengan plainteks.
adalah membuat hubungan statistik antara
plainteks, cipherteks, dan kunci menjadi sangat Secara formal, cipher berulang dinyatakan
rumit. sebagai berikut :

Biasanya untuk mendapatkan keamanan yang Ci = f(Ci-1, Ki)


baik, prinsip confusion dilakukan secara
berulang-ulang pada sebuah blok tunggal yang dalam hal ini,
dengan kombinasi yang berbeda-beda. i = 1, 2, ..., r
(r adalah jumlah putaran)
2.2.2 Diffusion dari Shanon Ki = upa-kunci (subkey)
Prinsip diffusion dari Shanon menerangkan pada putaran ke-i
bahwa perubahan yang terjadi pada satu bit
f = fungsi transformasi Jaringan Feistel banyak dipakai pada algoritma
(didalamnya terdapat fungsi kriptografi karena model ini bersifat reversible
substitusi, permutasi, dan/atau untuk proses enkripsi dan dekripsi. Sifat
ekspansi, kompresi) reversible ini membuat kita tidak perlu membuat
algoritma baru unruk mendekripsi cipherteks
Plainteks dinyatakan dengan C0 dan cipherteks menjadi plainteks. Karena operator XOR
dinyatakan dengan Cr. mengkombinasikan setengah bagian kiri dengan
hasil dari fungsi transformasi f, maka kesamaan
2.2.4 Jaringan Feistel (Feistel Network) berikut pasti benar:
Jaringan Feistel (Feistel Network) ditemukan
oleh Hirst Feistel pada tahun 1970. Kebanyakan Li – 1 ⊕ f(Ri – 1, Ki) ⊕ f(Ri – 1, Ki) = Li – 1
algoritma blok cipher menggunakan model
jaringan feistel untuk mengenkripsikan pesan. 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 2.2.5 Kunci Lemah (weak key)
dua bagian, kiri (L) dan kanan (R). Masing- Kunci lemah adalah kunci yang menyebabkan
masing bagian memiliki panjang n/2. (n tidak adanya perbedaan antara enkripsi dan
harus bilangan genap) dekripsi. Dekripsi terhadap cipherteks tetap
menghasilkan plainteks semula, namun enkripsi
2. Definisikan cipher blok berulang dimana dua kali berturut-turut terhadap plainteks akan
hasil dari putaran ke-i ditentukan dari hasil menghasilkan kembali plainteksnya.
putaran sebelumnya (lihat Gambar 1), yaitu
Misalkan KL adalah kunci lemah, E adalah fungsi
Li = Ri+1 enkripsi, D adalah fungsi dekripsi, P adalah
plainteks, dan C adalah cipherteks, maka
Ri = Li – 1 ⊕ f(Ri – 1, Ki) persamaan berikut menunjukan fenomena kunci
lemah:
dalam hal ini,
i = 1, 2, ..., r EKL(P) = C
(r adalah jumlah putaran)
Ki = upa-kunci (subkey) DKL(C) = EKL(C ) = P
pada putaran ke-i
f = fungsi transformasi Cipher blok yang bagus tidak mempunyai kunci
(didalamnya terdapat fungsi lemah. Meskipun demikian, algoritma yang
substitusi, permutasi, dan/atau mempunyai sedikit kunci lemah seperti DES
ekspansi, kompresi) tidak begitu masalah, karena jumlah kunci lemah
itu relatif sangat kecil dibandingkan jumlah
Li - 1 Ri −1 kunci keseluruhan.

2.2.6 Kotak-S (S-Box)


f Ki
Kotak-S adalah matriks yang berisi substitusi
⊕ sederhana yang memetakan satu atau lebih bit
Li Ri
dengan satu atau lebih bit yang lain.
Gambar 2 Skema Jaringan Feistel Pada kebanyakan algoritma cipher blok, kotak-S
memetakan m bit masukan menjadi n bit
Plainteks adalah gabungan L dan R awal, atau keluaran, sehingga kotak-S tersebut dinamakan
secara formal dinyatakan dengan (L0, R0),
kotak m × n S-box.
sedangkan cipherteks didapatkan dari L dan R
hasil dari putaran terakhir setelah terlebih
Kotak-S merupakan satu-satunya langkah
dauhulu dipertukarkan, atau secara formal
nirlanjar di dalam algoritma, karena operasinya
dinyatakan sebagai (Rr, Lr).
adalah look-up table. Masukan dari operasi look-
up table dijadikan sebagai indeks kotak-S, dan plainteks diproses dalam kotak ini. Sedangkan
keluarannya adalah entry di dalam kotak-S. angka yang terdapat pada kotak adalah angka-
angka dari 1 sampai jumlah bit masukan.
Perancangan kotak-S menjadi isu penting karena
kotak-S harus dirancang sedemikian sehingga Cara kerja kotak-P pada prinsipnya sama dengan
kekuatan kriptografinya bagus dan mudah permutasi biasa. Bit pada urutan angka dalam
diimplementasikan. kotak akan dipindahkan ke posisi dimana angka
tersebut ditempatkan.
Ada empat cara (pendekatan) yang dapat
digunakan dalam mengisi kotak-S: 2.2.8 Ekspansi

1. Dipilih secara acak Teknik ini memperbanyak jumlah bit pada blok
Untuk kotak-S yang kecil, cara pengisian plainteks berdasarkan aturan tertentu, misalnya
secara acak tidak aman, namun untuk kotak- dari 32 bit menjadi 48 bit. Dalam praktek, aturan
S yang besar cara ini cukup bagus. eskpansi dinyatakan dengan tabel.

2. Dipilih secara acak lalu diuji 2.2.7 Kompresi


Sama seperti cara nomor 1, namun nilai acak
yang dibangkitkan diuji apakah memenuhi Teknik ini kebalikan dari ekspansi, di mana
sifat tertentu. jumlah bit pada blok plainteks diciutkan
berdasarkan aturan tertentu. Dalam praktek,
3. Dibuat oleh orang (man-made) aturan kompresi dinyatakan dengan tabel.
Entry di dalam kotak-S dibangkitkan dengan
teknik yang lebih intuitif. 3. Algoritma Rijndael

4. Dihitung secara matematis (math-made) 3.1 Panjang Kunci dan Ukuran Blok Rijndael
Entry di dalam kotak-S dibangkitkan
berdasarkan prinsip matematika yang Rijndael mendukung panjang kunci 128 bit
terbukti aman dari serangan kriptanalis. sampai 256 bit dengan step 32 bit. Panjang kunci
dan ukuran blok dapat dipilih secara independen.
Karena AES menetapkan bahwa ukuran blok
2.2.7 Kotak-P (P-Box)
harus 128 bit, dan panjang kunci harus 128, 192,
Kotak-P adalah matriks yang berisi transformasi dan 256 bit, maka dikenal AES-128, AES-192,
sederhana yang mengacak posisi bit dari suatu AES-256. Setiap blok dienkripsi dalam sejumlah
blok plainteks. 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 Ukuran Blok Jumlah Putaran


Varian AES
(Nk words) (Nb words) (Nr)
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14
Catatan: 1 word = 32 bit

Secara de-fakto, hanya ada dua varian AES, yaitu terdapat 2128 ≈ 3,4 x 1038 kemungkinan kunci.
AES-128 dan AES-256, karena akan sangat Jika digunakan sebuah mesin dengan semilyar
jarang pengguna menggunakan kunci yang prosesor paralel, masing-masing dapat
panjangnya 192 bit. menghitung sebuah kunci setiap satu pico detik,
Karena AES mempunyai panjang kunci paling maka akan dibutuhkan waktu 1010 tahun untuk
sedikit 128 bit, maka AES tahan terhadap mencoba seluruh kemungkinan kunci.
serangan exhaustive key search dengan teknologi
saat ini. Dengan panjang kunci 128-bit, maka
3.2 Algoritma Rijndael Tabel substitusi dapat dilihat pada
tabel 2, sedangkan ilustrasi ByteSub
Seperti pada DES, Rijndael menggunakan dapat dilihat pada gambar.
substitusi dan permutasi, dan sejumlah putaran.
Untuk setiap putarannya, Rijndael menggunakan b. ShiftRow: pergeseran baris-baris
kunci yang berbeda. Kunci setiap putaran disebut array state secara wrapping. Ilustarsi
round key. Tetapi tidak seperti DES yang ShiftRow dapat dilihat pada gambar.
berorientasi bit, Rijndael beroperasi dalam
orientasi byte sehingga memungkinkan untuk c. MixColumn: mengacak data di
implementasi algoritma yang efisien ke dalam masing-masing kolom array state.
software dan hardware [1]. Ilustarsi MixColumn dapat dilihat
Garis besar algoritma Rijndael yang beroperasi pada gambar.
blok 128-bit dengan kunci 128-bit adalah sebagai
berikut: d. AddRoundKey: melakukan XOR
antara state sekarang dengan round
1. AddRoundKey: melakukan XOR antara key. Ilustarsi AddRoundKey dapat
state awal (plainteks) dengan cipher key. dilihat pada gambar.
Tahap ini disebut juga initial round.
3. Final round: proses untuk putaran
2. Putaran sebanyak Nr – 1 kali. Proses yang terakhir:
dilakukan pada setiap putaran adalah: a. ByteSub.
b. ShiftRow.
a. ByteSub: substitusi byte dengan c. AddRoundKey.
menggunakan tabel substitusi (S-box).

Gambar 3 Diagram Proses Enkripsi AES


Diagram proses enkripsi AES dapat dilihat pada CopyPlaintextToState(state,plain
gambar. text)).

Algoritma Rijndael mempunyai 3 parameter Operasi enkripsi/dekripsi dilakukan terhadap


sebagai berikut: array S, dan keluarannya ditampung didadlam
1. Plainteks : array yang berukuran 16 array out. Skema penyalinan array masukan in
byte, yang berisi data masukan. ke array S :
S[r, c] 7 in[r + 4c]
2. Cipherteks : array yang berukuran 16
untuk 0 # r < 4 dan 0 # c < Nb
byte, yang berisi hasil enkripsi.
Skema penyalinan array S ke array keluaran out:
3. key : array yang berukuran 16
byte, yang berisi kunci ciphering (disebut out[r+4c] 7 S[r,c]
juga cipher key). untuk 0 # r < 4 dan 0 # c < Nb

Dengan 16 byte, maka baik blok data dan kunci 3.3 Transformasi SubBytes()
yang berukuran 128-bit dapat disimpan di dalam
ketiga array tersebut (128 = 16 x 8). Transformasi SubBytes() memetakan setiap byte
dari array state dengan menggunakan tabel
Selama kalkulasi plainteks menjadi cipherteks, substitusi S-Box. Tidak seperti DES yang
status sekarang dari data disimpan di dalam mempunyai S-Box berbeda pada setiap putaran,
array of byte dua dimensi, state, yang AES hanya mempunyai satu buah S-Box.
berukuran NROWS x NCOLS. Elemen array
state diacu sebagai S[r,c], dengan 0 ≤ r < 4 Cara pensubstitusian adalah sebagai berikut :
dan 0 ≤ c < Nc (Nc adalah panjang blok dibagi untuk setiap byte pada array state, misalkan S[r,
32). Pada AES, Nc = 128/32 = 4. c] = xy, yang dalam hal ini xy adalah digit
heksadesimal dari nilai S[r, c], maka nilai
Pada awal enkripsi, 16-byte data masukan, in0, substitusinya, yang dinyatakan dengan S’[r, c],
in1, ..., in15 disalin ke dalam array state adalah elemen di dalam S-Box yang merupakan
(direalisasikan oleh fungsi 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
3.4 Transformasi ShiftRow() MixColumn() AES

Transformasi ShiftRow() melakukan pergeseran


secara wrapping (siklik) pada 3 baris terakhir 3.6 Transformasi AddRoundKey()
dari array state. Jumlah pergeseran bergantung
pada nilai baris (r). Baris r= 1 digeser sejauh 1 Transformasi ini melakukan operasi XOR
byte, baris r = 2 digeser sejauh 2 byte, dan baris r terhadap sebuah round key dengan array state,
= 3 digeser sejauh 3 byte. Baris r = 0 tidak dan hasilnya disimpan dalam array state.
digeser.

Gambar 6 Ilustrasi Transformasi ShiftRow()

3.5 Transformasi MixColumns()

Transformasi MixColumns() mengalikan setiap Gambar 8 Ilustrasi Transformasi


kolom dari array state dengan polinom a(x) mod AddRoundKey() AES
(x4 + 1). MixColumns memberikan difusi pada
cipher. Setiap kolom diperlakukan sebagai
polinom 4-duku pada GF(28). Polinom a(x) yang 3.6 Ekspansi Kunci
ditetapkan adalah : Ekspansi kunci dibutuhkan utuk memenuhi
kebutuhan subkey yang dapat mencapai ribuan
a(x) = {03}x3 + {01}x2 + {01}x + {02} bit untuk melakukan enkripsi, sementara kunci
enkripsi yang disediakan hanya 128 hingga 256
Transformasi ini dinyatakan sebagai perkalian bit. Total subkey yang diperlukan AES adalah
matriks : Nb(Nr + 1) word. Jadi bila menggunakan AES –
128 yang berjumlah 128 bit, diekspan hingga
menjadi 1408 bit, melalui proses yang disebut
S’0,c 02 03 01 01 S0,c dengan key schedule.
S’1,c = 01 02 03 01 S1,c
S’2,c 01 01 02 03 S2,c Subkey sebanyak ini diperlukan karena setiap
S’3,c 03 01 01 02 S3,c ronde membutuhkan Nb word ditambah satu
word subkey untuk diawal. Key-schedule
S’(x) = a(x) ⊕ s(x) menghasilkan array linear word[wi] sebesar 4-
S’0,c = ({02}•S0,c) ⊕ ({03}• S1,c) ⊕S2,c ⊕ S3,c byte, dimana i memiliki nilai 0d” i<Nb(Nr + 1).
S’1,c = S0,c ⊕ ({02}• S1,c) ⊕ ({03}•S2,c) ⊕ S3,c
Proses ekspansi kunci ditunjukkan dengan for(i = Nk; i < Nb * (Nr + 1);
pseudocode berikut : i++)
{
KeyExpansion(byte Key[4*Nk] word temp = W[i - 1];
W[Nb*(Nr+1)]) if (i % Nk == 0)
{ temp =
for(i = 0; i < Nk; i++) SubByte(RotByte(temp)) ^
W[i] = Rcon[i / Nk];
(Key[4*i],Key[4*i+1],Key[4*i+2 W[i] = W[i - Nk] ^ temp;
] }
Key[4*i+3]); }

Gambar 9 Ilustrasi ekspansi cipherkey menjadi roundkey

4. Algoritma Twofish 4. Tidak memiliki operasi yang dapat


mengurangi efisiensi jika digunakan
4.1 Tujuan desain Twofish
pada mikroprosesor 8-bit, 16-bit, 32-bit
maupun 64 bit.
Algoritma Twofish didesain untuk memenuhi
5. Memiliki berbagai variasi performansi
kriteria yang ditetapkan oleh NIST untuk
dari key schedule
sayembara penentuan standar algoritma. Kriteria
tersebut diantaranya adalah :
4.2 Blok pembangun algoritma Twofish
1. Menggunakan 128-bit enkripsi dengan
Secara garis besar algoritma twofish dibangun
metode blok cipher.
dari beberapa algoritma utama, algoritma-
2. Panjang kunci 128 bits, 192 bits, dan
algoritma tersebut diambil dari prinsip
256 bits.
pembangunan algoritma cipher blok. Ada 6
3. Tidak memiliki kunci lemah
peinsip yang digunakan yaitu :
4. Efisien baik jika digunakan di Intel
Pentium Pro maunum perangkat lunak
1. Feistel Network
ataupun keras lainnya
2. S-boxes
5. Memiliki desain yang fleksibel
3. MDS Matrices
sehingga dapat digunakan untuk stream
4. Pseudo-Hadamard Transforms
chiper, hash function, dan MAC.
5. Whitening
6. Design yang sederhana.
6. Key Schedule
Kriteria tambahan yang dimiliki oleh algoritma
4.3 Feistel Network
Twofish adalah :
1. Dapat menerima kunci lebih dari 256
Feistel network adalah metoda umum yang
bits
digunakan untuk mentransformasikan fungsi
2. Untuk versi dengan optimasi penuh
(biasanya disebut fungsi f) secara permutasi.
proses enkripsi data dapat dilakukan
Metode ini ditemukan oleh Horst Feistel saat
kurang dari 500 clock cycle per blok
mendesain algoritma Lucifer. Metode ini mulai
pada Pentium, Pentium Pro, dan
populer setelah digunakan dalam algoritma DES.
Pentium II.
Algortima lain yang menggunakan jaringan
3. Untuk pemrosesan 32 blok dengan 128
feistel adalah FEAL, GOST, Khufu and Khafre,
but kunci dapat memakan waktu yang
LOKI, CAST-128, Blowfish, dan RC5.
lebih sedikit.
Bagian terpenting dari jaringan Feistel adalah dapt dilihat bahwa tidak ada pemetaan yang
fungsi f. Fungsi f sendiri merupakan kunci yang mendapatkan jarak yang lebih besar jarak dari
berkaitan dengan proses pemetaan string input minimun antara dua vektor distinc, selain jarak
menjadi string output. Fungsi f selalu tidak linier. 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
dimana : elemen b. Kode Reed-Solomon (RS) error-
n : ukuran blok dari jaringan feistel correcting diketahui sebagai MDS. Kondisi yang
F : fungsi yang menerima lebih baik dari matriks a dan b untuk dijadikan
input n = 2 bit dari blok dan N bit MDS adalah bahwa semua submatriks bujur
dari kunci dan menghasilkan output sangkar dihasilkan dengan mengabaikan baris
dari panjang n=2bit. dan kolom yang tidak singular.

Pada setiap putaran, blok source merupakan Serge Vaudenay pertama kali mengajukan
input dari f dan output dari f di-xor kan dengan matriks MDS sebagai elemen dari desain cipher.
blok target setelah keduanya ditukar posisikan Shark and Square menggunakan matriks MDS,
untuk putaran berikutnya yang dilihat pertama kali pada konstruksi
matriks MDS digunakan digunakan pada cipher
Ide ini adalah untuk mendapatkan fungsi f yang Manta 3 yang tidak dipublikasikan.
kemungkinan merupakan algortima enkripsi
yang lemah jika dikerjakan satu kali, akan Twofish menggunakan matriks MDS tunggal
menjadi algoritma enkripsi yang kuat jika 4x4.
dikerjakan secara berulang kali .
4.6 Pseudo-Hadamard Transforms
4.4 S-Boxes
Pseudo-Hadamard transform (PHT) adalah
S-Box adalah tabel substitusi untuk operasi penggabungan sederhana yang berjalan secara
algoritma yang yang tidak linear yang digunakan cepat pada perangkat lunak.
pada kebanyakan block cipher. S-Box memiliki
berbagai fariasi dalam ukuran input maupun Ada dua input yaitu a dan b dari 32-bit PHT
ukuran output dan dapat digunakan baik secara yang terdefinisi sebagai :
acak maupun secara algoritmik.
a0 = a + b mod 2 32
S-Box pertama kali digunakan dalam algoritma b0 = a + 2b mod 2 32
Lucifer, kemudian DES dan selanjutnya pada
kebanyakan algoritma enkripsi yang SAFER menggunakan 8-bit PHTs secara
menggunakan metode blok cipher. extensive untuk proses diffusion. Twofish
menggunakan 32-bit PHT untuk mengacak
Dalam algoritma Twofish s-box yang digunakan output dari dua paralel 32-bit fungsi g. PHT ini
adalah 8 x 8 bit s-box. Twofish memiliki 4 kunci dapat dieksekusi dalam dua opcode pada
yang berbeda. S-box yang digunakan pada kebanyakan mikroprosesor modern, termasuk
algoritma twofish dibangun dengan melakukan keluarga Pentium.
8x8 bit permutasi dengan kunci tertentu.
4.7 Whitening
4.5 MDS Matrices
Whitening, adalah teknik untuk meng-exor kan
Kode maximum distance separable (MDS) material kunci sebelum putaran pertama dan
dalam sebuah field adalah pemetaan linear dari setelah putaran terakhir. Whitening digunakan
field elemen A ke field element B, menghasilkan oleh Merkle dalam Khufu/Khafre, dan secara
vektor komposit dari elemen A + B, dengan independen ditemukan oleh Rivest untuk DES-
properti yang memiliki nilai minimum dari X. Dalam tulisannya, Rivest menyatakan bahwa
elemen bukan nol pada vektor bukan nol whitening meningkatkan keamanan algoritma
setidaknya B + 1. Contohnya jumlah elemen dari keysearch attacks sebagai peringatan pada
antara jarak dua vektor dihasilkan dengan cipher.Dalam serangan pada putaran varian
memetakan paling tidak B + 1. Secara mudah Twofish yang disederhanakan ditemukan bahwa
whitening meningkatkan keamanan untuk
menahan serangan terhadap cipher secara 4.8 Key Schedule
subtansial. Proses whitening akan
menyembunyikan input yang spesifik pada Key schedule adalah schedule yang mengatur
putaran pertama dan terakhir dari fungsi f perubahan key bits menjadi round key yang dapat
terhadap serangan yang dilakukan oleh attacker. digunakan oleh cipher. Twofish membutuhkan
banyak material key dan memiliki key schedule
Twofish melakukan xors 128 bits dari subkey yang lengkap. Untuk mmfasilitasi analisis, key
sebelum putaran pertama Feistel, dan melakukan schedule menggunakan primitif yang sama
xor dengan 128 bit lainnya setelah putaran feistel seperti pada fungsi yang mengalami
terakhir. Subkey ini dikalkulasikan dengan cara pengulangan.
yang sama dengan round sub key tetapi
dilakukan pada tempat yang lain pada chiper.

Gambar 10 Ilustrasi Algoritma Twofish


4.9 Algoritma Twofish dirotasikan satu bit ke kanan. Word keempat
dirotasikan kekiri sebanyak 1 bit dan kemudian
Twofish menggunakan 16 putaran struktur feistel di-xor kan dengan output kedua dari word f.
dengan penambahan whitening dari input dan Terakhir, kedua potongan ditukarkan. Maka,
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. Untuk r= 0, … , 15 dan karena ROR dan ROL
Hal ini dilakukan pada ke enambelas iterasi. adalah fungsi yang merotasikan argumen
Pada setiap iterasi, dua words yang berada pada pertama (32-bit word) di sebelah kiri atau kanan
sebelah kiri digunakan sebagai input pada fungsi dengan jumlah bit yang diindikasikan dengan
g. (Salah satunya dirotasikan dengan 8 bit argumen kedua.
pertama). Fungsi g mengandung 4 byte-wide key
yang tergantung pada S-Boxes diikuti dengan Tahap whitening output tidak melakukan
tahap pengacakan berdasarkan matriks MDS. penukaran pada putaran terakhir dan meng-xor
kan data words dengan 4 words dari kunci yang
Hasil dari kedua fungsi g dikombinasikan diperluas.
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 Keempat words dari cipherteks kemudian ditulis
sebagai 16 bytes c0, … , c15 dengan
pertama, yang lainnya dirotasikan ke kanan
secara afterwards). Potongan kiri dan menggunakan konversi little-endian sama
kanankemudian ditukarkan dengan iterasi dengan yang digunakan pada plainteks.
selanjutnya.

Setelah semua interasi, penukaran iterasi terakhir


disimpan dan keempat words di-xor kan dengan
empat kunci lagi untuk memproduksi chiperteks. 4.9.1 Fungsi f
Secara lebih formal, ke 16 bytes dari plainteks
p0,…, p15 adalah potongan pertama yang Fungsi f adalah permutasi yang bergantung pada
dipecah menjadi 4 words. kunci untuk nilai 64-bit. Mendapatkan 3
are _rst split into 4 words P0,…, P3 dari 32 bit argumen, dua input words R0 dan R1, dan jumlah
masin-masing menggunakan konvensi little- putaran r digunakan untuk memilih subkeys yang
endian. 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 Dimana (F0, F1) adalah hasil dari F. Fungsi F’
untuk fungsi f, yang juga menggunakan nomer juga didefinisikan untuk digunakan dalam
iterasi sebagai input. Word ketiga di-xor kan analisis. F’ identik dengan fungsi F, kecuali
dengan output pertama dari f dan kemudian
bahwa F’ tidak mengandung blok kunci pada Twofish mendefinisikan key dengan panjang N =
bagian output. (PHT tetap dijalankan) 128, N = 192, dan N = 256. Kunci dengan
panjang dibawah 256 bit dapat digunakan
4.9.2 Fungsi g dengan melakukan padding dengan nol sampai
panjang kunci terbesar selanjutnya.
Fungsi g adalah inti dari algoritma twofish. Word
X sebagai input dibagi menjadi 4 byte. Setiap Didefinisikan k = N/64. Kunci M mengandung
byte menjalankan key-dependent S-box nya 8k bytes m0, … , m8k-1. Setiap byte dikonversikan
masing-masing. Setiap S-Box bijektif, pertama kali dengan 2k words untuk setiap 32
mengambil 8 bit dari input, dan menghasilkan bits.
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 dan kemudian dengan vektor dua word dengan
sebagai 32-bit word yang merupakan hasil dari g 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
Dimana si adalah key-dependent –boxes dan Z kemudian diinterpretasikan sebagai 32-bit word.
adalah hasil dari g. Untuk dapat memudahkan Words ini membuat vektor ketiga.
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 :

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
w(x) =x8+x6+x3+x2+1
heksadesimal menggunakan korespondensi
diatas.
adalah primitif polinomial lain derajat 8 diatas
GF(2). Pemetaan antara nilai byte dan elemen
4.9.3 Key schedule
dari GF(28) menggunakan definisi yang sama
dengan yang digunakan untuk perkalian matriks
Key schedule menghasilkan 40 words dari hasil
MDS. Dengan menggunakan pemetaan ini,
perluasan kunci K0,, … , K39, dan keempat key-
diberikan RS matriks sebagai berikut :
dependent S-Box digunakan dalam fungsi g.
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 7. Kedua algoritma memiliki keyschedule yang
schedule. terdefinisi.

5. Perbandingan Rijndael dan Twofish Selain persamaan tentu saja terdapat beberapa
perbedaan antara kedua algoritma yang dibahas.
5.1 Dilihat dari prinsip perancangan Perbedaan tersebut diantaranya adalah :
Dilihat dari 9 prinsip dalam pembuatan algoritma 1. Algoritma Rijndael tidak menggunakan
Chiper block yang telah disebutkan sebelumnya, jaringan feistel dalam algoritmanya sehingga
terdapat beberapa persamaan dan perbedaan algoritma tampak lebih sederhana
antara perancangan algoritma Rijndael dan
Twofish. 2. Algoritma twofish menggunakan prinsip
MDS Matrices dan Pseudo-Hadamard
Persamaan diantara algoritma Rijndael dan Transforms sedangkan Rijndael
Twofish : menggunakan mixcolums.
1. Baik algoritma Rijndael maupun algoritma 5.2 Dilihat dari kecepatan, keamanan, dan
Twofish menggunakan prinsip Confusion kesederhanaan
dan Diffusion dari Shanon. Kedua algoritma
telah berhasil manyembunyikan hubungan Perbandingan antara algoritma Rijndael dan
apapun yang ada antara plainteks, twofish dilihat dari segi kecepatan, keamanan
cipherteks, dan kunci. Untuk kedua dan kesederhanaan kode dapat dilihat pada tabel
algoritma, perubahan pada 1 bit plainteks berikut :
juga menyebabkan banyak pengaruh pada
cipherteks.
Speed Speed Safety Simplicity
Cipher
(32) (8) Factor (Code Size)
2. Prinsip Chiper berulang (iterative chiper)
Rijndael 18 20 1.11 98 KB
yang pada prinsipnya mengulangi proses
Twofish 16 18 2.67 104KB
enkripsi beberapa kali dengan kunci yang
berbeda dilakuan baik pada algoritma
Twofish maupun pada Algoritma Rijndael. Dari tabel tersebut maka dapat disimpulkan
bahwa algoritma Rijndael unggul dalam hal
3. Kedua algoritma memiliki Kotak-S. kecepatan dan kesederhanaan kode, tetapi dalam
Meskipun demikian algoritma Rijndael hal tingkat keamanan algoritma Twofish jauh
hanya memiliki satu kotak-S sedangkan lebih unggul dibandingkan algoritma Rijndael.
algoritma Twofish memiliki banyak kotak s
yang dibangkitkan secara otomatis. 6. Kesimpulan

4. Kedua algoritma tidak memanfaatkan Kesimpulan yang dapat dimbil dari studi
prinsip P-Box dalam merancang algoritma perbandingan antara algoritma Rijndael dan
untuk transformasi. Akan tetapi algoritma twofish diantaranya adalah :
menggunakan metode lain yaitu dengan
fungsi tertentu untuk melakukan 1. Kedua algoritma memanfaatkan prinsip
transformasi dan permutasi. prinsip Confusion dan Diffusion dari
Shanon.
5. Kedua algoritma tidak melakukan proses 2. Baik pada algoritma Rijndael maupun
ekspansi maupun kompresi. Pada algoritma Twofish, dilakukan prinsip cipher
Twofish hanya terdapat padding untuk kunci berulang dan keduanya memiliki S-Box
yang kurang dari 256. 3. Kedua algoritma tidak memanfaatkan
prinsip P-Box dan sebagai gantinya
menggunakan metode lain untuk proses
transformasi.
4. Pada kedua algoritma tidak terdapat [7] Schneier, Bruce. (1998). Two_fish: A 128-
proses ekspansi maupun kompresi. Bit Block Cipher,
5. Kedua algoritma tidak memiliki weak http://www.schneier.com/paper-twofish-
key. paper.pdf.
6. Kedua algoritma memiliki keyschedule. Tanggal Akses : 27 September 2006 pukul
7. Pada algoritma Rijndael dikenal istilah 08:00.
mixcolums.
8. Pada algoritma twofish dikenal istilah [8] Schneier, Bruce. (1999). New Result on the
MDS Matrices dan Pseudo-Hadamard Twofish Encryption Algorithm,
Transforms http://www.tropsoft.com/strongenc/twofish.
9. Algoritma Rijndael tidak menggunakan pdf.
jaringan feistel sedangkan algoritma Tanggal Akses : 8 Oktober 2006 pukul
twofish menggunakan jaringan feistel. 16:30.
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.

You might also like