• Tidak ada hasil yang ditemukan

56730749 STUDI DAN PERBANDINGAN ALGORITMA RIJNDEAL DAN TWO FISH

N/A
N/A
Protected

Academic year: 2018

Membagikan "56730749 STUDI DAN PERBANDINGAN ALGORITMA RIJNDEAL DAN TWO FISH"

Copied!
15
0
0

Teks penuh

(1)

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

(2)

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

(3)

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)

(4)

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

(5)

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

(6)

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.

(7)

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

Skema penyalinan array S ke array keluaran out:

out[r+4c]

7

S[r,c] untuk 0 #r < 4 dan 0 #c < Nb

3.3 Transformasi SubBytes()

Transformasi SubBytes() memetakan setiap byte

dari array state dengan menggunakan tabel

substitusi S-Box. Tidak seperti DES yang

mempunyai S-Box berbeda pada setiap putaran,

AES hanya mempunyai satu buah S-Box.

Cara pensubstitusian adalah sebagai berikut : untuk setiap byte pada array state, misalkan S[r, c] = xy, yang dalam hal ini xy adalah digit

heksadesimal dari nilai S[r, c], maka nilai

substitusinya, yang dinyatakan dengan S’[r, c],

adalah elemen di dalam S-Box yang merupakan

perpotongan baris x dengan kolom y.

(8)

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,cS1,c⊕ ({02}•S1,c) ⊕ ({03}•S3,c)

S’3,c = ({03}•S0,c) ⊕ S0,cS1,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).

(9)

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

(10)

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

(11)

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.

(12)

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’

(13)

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

(14)

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

(15)

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.

Gambar

Gambar 1 Skema Enkripsi dan Dekripsi dengan  Cipher Blok
Tabel 1 Jumlah Putaran Setiap Blok pada  AES
Gambar 3 Diagram Proses Enkripsi AES
Gambar 4 Tabel S-BOX
+4

Referensi

Dokumen terkait

Dengan pengaturan Motor, Sensor infra merah, serta Switch dengan menggunakan mikrokontroller, diharapkan Robot Pemadam yang akan dibuat dapat bergerak sesuai dengan mekanis dan

Makalah Tugas Perencanaan Unit Pengolahan Pangan dengan Judul “Perencanaan Usaha Pengolahan Jelly Drink Jeruk “Oranje” dengan Kapasitas Produksi 500 Botol @250 mL

Berdasarkan analisis data yang dilakukan untuk menjawab permasalahan dan rumusan masalah, maka dapat ditarik kesimpulan dari hasil penelitian yang dikemukakan

Kebijakan puritanisme oleh sultan Aurangzeb dan pengislaman orang-orang Hindu secara paksa demi menjadikan tanah India sebagai negara Islam, dengan menyerang berbagai praktek

Kompetensi pedagogik dosen FKIP Unidar Ambon dikatakan berkategori baik dengan indikator bahwa dosen selalu menyusun program pengajaran sebelum mengajar, selalu

Di dalam ketiga aturan tersebut tidak ada suatu ketentuan yang mengatur secara tegas tentang kedudukan hukum anak yang dilahirkan melalui proses bayi tabung yang spermanya

Berdasarkan latar belakang di atas, yang menjadi tujuan dalam penelitian ini adalah untuk Mengetahui Hubungan Antara Penanaman Nilai Kedisiplinan Terhadap Hasil Belajar PKn

Bertujuan menganalisis implementasi, relevansi Pendidikan Kewarganegaraan dalam mendukung nilai karakter religius, serta menganalisis kendala dan upaya dalam