| |
Metoda
Enkripsi Blowfish
Oleh:
Budi Sukmawan
Blowfish merupakan metoda enkripsi yang mirip dengan DES
(DES-like cipher) dan diciptakan oleh Bruce Schneier
yang ditujukan untuk mikroposesor besar (32 bit ke atas dengan cache data
yang besar). Blowfish dikembangkan untuk memenuhi kriteria disain sebagai
berikut:
-
Cepat, pada implementasi yang optimal
Blowfish dapat mencapai kecepatan 26 clock cycle per byte.
-
Kompak, Blowfish dapat berjalan pada
memori kurang dari 5 KB.
-
Sederhana, Blowfish hanya menggunakan
operasi yang simpel: penambahan (addition), XOR, dan penelusuran
tabel (table lookup) pada operand 32 bit. Desainnya mudah
untuk dianalisa yang membuatnya resisten terhadap kesalahan implementasi.
-
Keamanan yang variabel, panjang kunci
Blowfish dapat bervariasi dan dapat mencapai 448 bit (56 byte).
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 bit
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).
Deskripsi dari Blowfish
Blowfish merupakan blok cipher 64-bit dengan
panjang kunci variabel. Algoritma ini terdiri dari dua bagian: key expansion
dan enkripsi data. Key expansion merubah kunci yang dapat mencapai 448
bit menjadi beberapa array subkunci (subkey) dengan total 4168 byte.
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-bit. 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-bit
subkunci:
P1,P2, . . . ,P18
Empat 32-bit S-box masing-masing mempunyai 256
entri:
S1,0, S1,1, . . . , S1,255
S2,0, S2,1, . . . , S2,255
S3,0, S3,1, . . . , S3,255
S4,0, S4,1, . . . , S4,255
Metoda selengkapnya untuk menghitung subkunci
ini akan dijelaskan pada bagian bawah.
Blowfish merupakan algoritma yang menerapkan jaringan
Feistel (Feistel network) yang terdiri dari 16 putaran. Input merupakan
elemen 64 bit, X. Untuk mengenkrip:
Bagi X menjadi dua 32-bit: XL,
XR
untuk i = 1 sampai 16
XL = XL
xor Pi
XR = F(XL)
xor XR
Tukar XL dan XR
Tukar XL dan XR
(batalkan penukaran terakhir)
XR = XR
xor P17
XL = XL
xor P18
Kombinasikan kembali XL
dan XR
Fungsi F adalah sebagai berikut:
Bagi XL, menjadi
empat bagian 8-bit: 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 menggunakan algoritma
Blowfish, metodanya adalah sebagai berikut:
-
Pertama-tama inisialisasi P-array dan
kemudian empat S-box secara berurutan dengan string yang tetap. String ini
terdiri digit hexadesimal dari pi.
-
XOR P1 dengan 32 bit pertama
kunci, XOR P2 dengan 32 bit 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.
-
Enkrip semua string nol dengan algoritma
Blowfish dengan menggunakan subkunci seperti dijelaskan pada langkah (1) dan
(2).
-
Ganti P1 dan P2 dengan keluaran dari
langkah (3)
-
Enkrip keluaran dari langkah (3) dengan
algoritma Blowfish dengan subkunci yang sudah dimodifikasi.
-
Ganti P3 dan P4
dengan keluaran dari langkah (5).
-
Lanjutkan proses tersebut, ganti seluruh
elemen dari P-array, dan kemudian seluruh keempat S-box 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.
Keamanan dari Blowfish
Tidak ada kelemahan yang berarti dari
algoritma Blowfish yang dapat ditemukan sampai saat ini, kecuali adanya 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 cryptanalysis
yang berhasil tehadap Blowfish, untuk amannya jangan menggunakan Blowfish dengan
kurang dari 16 putaran (round).
Aplikasi
Untuk mengaplikasikan metoda ini penulis
membuat rutin dengan menggunakan Delphi yang dapat dilihat pada unit Blowfish.pas
dan tabel inisialisasi bf_init.inc. Untuk
mengecek kebenaran implementasi dari algortima ini penulis juga melengkapinya
dengan prosedur self test yang dapat dilihat hasilnya dengan menjalankan program BFTest.dpr.
Saat ini banyak sekali aplikasi security
yang menggunakan Blowfish sebagai metoda enkripsinya, untuk melihat aplikasi apa
saja yang sudah menggunakan metoda ini dapat dilihat websitenya di Counterpane.
Pustaka
-
A. Menezes, P. van Oorschot and S. Vanstone, Handbook
of Applied Cryptography, CRC Press, 1996.
-
B. Schneier, Applied Cryptography - Protocol, Algorithm, and Source Code in C, second
edition, John Willey & Sons, 1996.
Copyright (c) 2000 - Budi Sukmawan
20 April 2000

|
|