Sabtu, 23 Januari 2010

Metode Enskripsi 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 X(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:
1.     Pertama-tama inisialisasi P-array dan kemudian empat S-box secara berurutan dengan string yang tetap. String ini terdiri digit hexadesimal dari pi.
2.     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.
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 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

1 komentar:

  1. Slm Hormat, ada program penyimpan data rahasia, support berbagai macam file, kunci enkripsi (password) dapat mencapai 256 karakter (2048 bit), program ini menggunakan algoritma enkripsi PR (buatan indonesia), GRATIS untuk penggunaan pribadi (personal). Dan ada juga file library DLL algoritma enkripsi PR dan contoh kode program pemakaian fungsi-fungsi librari algoritma enkripsi PR dalam bahasa delphi, file librari ini dapat juga diterapkan pada berbagai bahasa pemrograman lainnya, yang dapat mengakses librari DLL. Dan dapat juga mengevaluasi dan menganalisis keamanan dari algoritma enkripsi PR ini, Dapat didownload di http://www.ciauldownload.blogspot.com , terima kasih

    BalasHapus