• Tidak ada hasil yang ditemukan

BAB II LANDASAN TEORI

2.5. Algoritma Blowfish

Blowfish merupakan metode yang mirip dengan DES (DES-like cipher) dan diciptakan oleh Bruce Schneier pada tahun 1993 yang ditujukan untuk mikroposesor besar (32 bits ke atas dengan cache data yang besar).

Blowfish menggantikan DES dengan ukuran 64 bits blok dengan panjang kunci yang variabel yaitu sampai 448 bytes (Scheneier, 1994). Walupun sama dengan DES dalam hal ukuran bloknya, yaitu 64 bits, tetapi Blowfish memiliki kunci variabel 8 bits, dari 40 sampai dengan 448 bits (56 bytes). Selama proses inisialisasi, dengan mengabaikan panjang data, suatu kunci akan bekerja penuh pada struktur internal dari 4.168 bytes. Nilai setup mahal, karena memiliki sel iterasi dari enkripsi untuk menghasilkan suatu penjadwalan kunci. Tapi kunci itu sendiri tidak berpengaruh pada kinerja Blowfish itu sendiri. Dengan kata lain, kecepatan pada kunci 448 bit adalah sama dengan kunci 56 bit. Hal ini memungkinkan kunci untuk disimpan dalam media penyimpanan yang benar-benar aman, dan dibutuhkan suatu protokol khusus dalam kinerjanya. Inisialisasi kunci dapat dihindari dengan menspesifikasikan kunci secara langsung setelah kunci tersebut terbentuk (tentunya dengan menyimpan kunci 4168 bytes dari paling banyak 56 bytes harus disimpan).

Struktur secara keseluruhan tidak jauh berbeda dengan DES. Array subkunci delapan belas 32-bit subkunci (DES enam belas 48-bit subkunci). Ada 4 S-boxes, yang masing-masing panjangnya 256 entry (DES 4 S-boxes dengan 64

entry). Perbedaan mendasar adalah, pada Blowfish secara dinamis membentuk

Dalam Blowfish, semua data adalah rangkaian angka 32 dan 8 bits, yang dirancang untuk bisa bekerja pada sistem dengan jumlah dan pertukaran bit eksternal yang minimal. Hal ini menjadikan Blowfish sebagai algoritma kriptografi yang cepat. Blowfish dianggap algoritma yang paling kuat dan diterima saat ini. Algoritma ini bisa dimasuki lusinan produk-produk bebas dan terbatas. Belum ada kesalahan yang cukup berarti dari algoritma ini. Dengan pengurangan putaran (standarnya adalah 16 putaran), secara harafiah 1 kunci dari214 sangatlah lemah (Vav, 1996). Kelemahan ini memungkinkan pihak-pihak penyerang mengetahui apakah suatu kunci lemah tersebut terpakai atau tidak, tetapi tidak akan diketahui kunci tersebut secara spesifik(and it also allows some other more

abstract attacks). Kunci lemah muncul karena secara dinamis Blowfish

membentuk S-boxes yang pada beberapa kasus Blowfish akan menghasilkan beberapa perilaku buruk ketika beberapa nilaiS-boxes digandakan. Tidak ada cara untuk mengetahui kunci mana yang lemah, selain dilakukan suatu iterasi dan kemudian melihat nilai dari S-boxes untuk dapat mengetahuinya. Hingga saat ini, belum ditemukan kunci lemah pada proses dengan 16 putaran penuh.

Blowfish dioptimasikan untuk aplikasi dimana kunci tidak sering

berubah, seperti jalur komunikasi atau enkripsi file otomatis. Blowfish jauh lebih cepat dari DES bila diimplementasikan pada 32 bits mikroprosesor dengan cache data yang besar, seperti Pentium dan Power PC, Blowfish tidak cocok untuk aplikasi seperti packet switching, dengan perubahan kunci yang sering, atau sebagai fungsi hash satu arah. Kebutuhan memorinya yang besar tidak memungkinkan untuk aplikasi kartu pintar (smart card).

2.5.2 Cara Kerja

Blowfish merupakan blok cipher 64-bits dengan panjang kunci variabel. Algoritma ini terdiri dari dua bagian: key expansion dan enkripsi data. Key expansion merubah kunci yang dapat mencapai 448 bits menjadi beberapa array subkunci (subkey) dengan total 4168 bytes.

Enkripsi data terdiri dari iterasi fungsi sederhana sebanyak 16 kali. Setiap putaran terdiri dari permutasi kunci-dependent dan substitusi kunci dan

data-dependent. Semua operasi adalah penambahan dan XOR pada variable 32-bits.

Tambahan operasi lainnya hanyalah empat penelusuran tabel (table lookup) array berindeks untuk setiap putaran.

Blowfish menggunakan subkunci yang besar. Kunci ini harus dihitung sebelum enkripsi atau dekripsi data.

Array P terdiri dari delapan belas 32-bits subkunci: P1, P2, . . . , P18

Empat 32-bits S-box masing-masing mempunyai 256 entri: S1, 0, S1, 1, . . . , S1, 255

S2, 0, S1, 1, . . . , S2, 255 S3, 0, S1, 1, . . . , S3, 255 S4, 0, S1, 1, . . . , S4, 255

Blowfish merupakan algoritma yang menerapkan jaringan Feistel (Feistel network) yang terdiri dari 16 putaran. Inputnya adalah X, elemen 64 bits.

Algoritma untuk mengenkrip:

Langkah 0 : bagi X menjadi dua 32-bits: XL XR Langkah 1 : untuk i = 1 sampai 16

XL = XL xor Pi XR = F(XL) xor XR tukar XL dan XR

Langkah 2 : tukar XL dan XR (batalkan penukaran terakhir) Langkah 3 : XR = XR xor P17

Langkah 4 : XL = XL xor P18

Langkah 5 : kombinasikan kembali XL dan XR

Fungsi F adalah: bagi XL menjadi empat bagian 8-bits: a, b, c dan d F(XL) = ((S1, a + S2, b mod 232) xor S3, c) + S4,c mod 232

Dekripsi sama persis dengan enkripsi, kecuali P1, P2, . . . , P18 digunakan pada urutan yang terbalik.

Subkunci dihitung dengan menggunakan algoritma Blowfish, metodenya adalah sebagai berikut:

1. Pertama-tama inisialisasi P-array dan kemudian empat S-box secara berurutan dengan string yang tetap. String ini terdiri digit heksadesimal dari Pi.

2. XOR P1 dengan 32 bits pertama kunci, XOR P2 dengan 32 bits kedua dari kunci dan seterusnya untuk setiap bit dari kunci (sampai P18). Ulangi terhadap bit kunci sampai seluruh P-array di XOR dengan bit kunci.

3. Enkrip semua string nol dengan algoritma Blowfish dengan menggunakan subkunci seperti dijelaskan pada langkah (1) dan (2).

4. Ganti P1 dan P2 dengan keluaran dari langkah (3).

5. Enkrip keluaran dari langkah (3) dengan algoritma Blowfish dengan subkunci yang sudah dimodifikasi.

6. Ganti P3 dan P4 dengan keluaran dari langkah (5).

7. Lanjutkan proses tersebut, ganti seluruh elemen dari P-array, dan kemudian keempat S-box secara berurutan, dengan keluaran yang berubah secara kontinyu dari algoritma Blowfish.

Total diperlukan 521 iterasi untuk menghasilkan semua subkunci yang dibutuhkan. Aplikasi kemudian dapat menyimpan subkunci ini dan tidak dibutuhkan langkah-langkah proses penurunan ini berulang kali, kecuali kunci yang digunakan berubah.

2.5.3 Keamanan Blowfish

Tidak ada kelemahan yang berarti dari algoritma Blowfish yang dapat ditemukan sampai saat ini, kecuali ada weak key, dimana dua entri dari S-box mempunyai nilai yang sama. Tidak ada cara untuk mencek weak key sebelum melakukan key expansion. Bila dikuatirkan hal ini dapat mengurangi keamanannya maka dapat dibuat rutin untuk mengecek entri S-box, walaupun hal ini tidak perlu.

Sampai saat ini tidak ada cryptoanalysis yang berhasil terhadap Blowfish, akan tetapi untuk amannya, jangan menggunakan Blowfish dengan kurang dari 16 putaran (round).

Dokumen terkait