Algortima Blowfish


Blowfish alias “OpenPGP.Cipher.4” merupakan enkripsi yang termasuk dalam golongan Symmetric Cryptosystem , metoda enkripsinya menyerupai dengan DES (DES-like Cipher) diciptakan oleh seorang Cryptanalyst berjulukan Bruce Schneier Presiden perusahaan Counterpane Internet Security, Inc (Perusahaan konsultan perihal kriptografi dan keamanan Komputer) dan dipublikasikan tahun 1994. Dibuat untuk dipakai pada komputer yang mempunyai microposesor besar (32-bit keatas dengan cache data yang besar). Blowfish dikembangkan untuk memenuhi kriteria desain yang cepat dalam implementasinya dimana pada keadaan optimal sanggup mencapai 26 clock cycle per byte, kompak dimana sanggup berjalan pada memori kurang dari 5 KB, sederhana dalam algoritmanya sehingga gampang diketahui kesalahannya, dan keamanan yang variabel dimana panjang kunci bervariasi (minimum 32 bit, maksimum 448 bit, Multiple 8 bit, default 128 bit).Blowfish dioptimasikan untuk aneka macam aplikasi dimana kunci tidak sering berubah, menyerupai pada jaringan komunikasi atau enkripsi file secara otomatis. Dalam pengimplementasiannya dalam komputer bermicroprosesor 32-bit dengan cache data yang besar (Pentium dan Power PC) Blowfish terbukti jauh lebih cepat dari DES. Tetapi Blowfish tidak cocok dengan aplikasi dengan perubahan kunci yang sering atau sebagai fungsi hast satu arah menyerupai pada aplikasi packet switching. Blowfish pun tidak sanggup dipakai pada aplikasi kartu arif (smart card) alasannya yaitu memerlukan memori yang besar. Blowfish termasuk dalam enkripsi block Cipher 64-bit dangan panjang kunci yang bervariasi antara 32-bit hingga 448-bit.Algoritma Blowfish terdiri atas dua bab :

Key-Expansion
Berfungsi merubah kunci (Minimum 32-bit, Maksimum 448-bit) menjadi beberapa array subkunci (subkey) dengan total 4168 byte.

Enkripsi Data
Terdiri dari iterasi fungsi sederhana (Feistel Network) sebanyak 16 kali putaran. Setiap putaran terdiri dari permutasi kunci-dependent dan substitusi kunci- dan data-dependent. Semua operasi yaitu penambahan (addition) dan XOR pada variabel 32-bit. Operasi pelengkap lainnya hanyalah empat penelusuran tabel (table lookup) array berindeks untuk setiap putaran.

Algoritma Blowfish
Blowfish memakai subkunci yang besar. Kunci tersebut harus dihitung sebelum enkripsi atau dekripsi data. Blowfish yaitu algoritma yang menerapkan jaringan Feistel (Feistel Network) yang terdiri dari 16 putaran. Input yaitu elemen 64-bit,X.Untuk alur algoritma enkripsi dengan metoda Blowfish dijelaskan sebagai berikut :
  • Bentuk inisial P-array sebanyak 18 buah (P1,P2,…………..P18) masing-msing bernilai 32-bit. Array P terdiri dari delapan belas kunci 32-bit subkunci : P1,P2,…….,P18
  • Bentuk S-box sebanyak 4 buah masing-masing bernilai 32-bit yang mempunyai masukan 256.
    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
  • Plaintext yang akan dienkripsi diasumsikan sebagai masukan, Plaintext tersebut diambil sebanyak 64-bit, dan apabila kurang dari 64-bit maka kita tambahkan bitnya, supaya dalam operasi nanti sesuai dengan datanya.
  • Hasil pengambilan tadi dibagi 2, 32-bit pertama disebut XL, 32-bit yang kedua disebut XR.
  • Selanjutnya lakukan operasi XL = XL xor Pi dan XR = F(XL) xor XR
  • Hasil dari operrasi diatas ditukar XL menjadi XR dan XR menjadi XL.
  • Lakukan sebanyak 16 kali, perulangan yang ke-16 lakukan lagi proses penukaran XL dan XR.
  •  Pada proses ke-17 lakukan operasi untuk XR = XR xor P17 dan XL = XL xor P18.
  •  Proses terakhir satukan kembali XL dan XR sehingga menjadi 64-bit kembali.
Subkunci dihitung memakai algoritma Blowfish, metodanya yaitu sebagai berikut :
  • Pertama-tama inilialisasi P-array dan lalu empat S-box secara berurutan dengan string yang tetap. String ini terdiri atas 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 hingga seluruh P-array di XOR dengan bit kunci.
  • Enkrip semua string nol dengan algoritma Blowfish dengan memakai subkunci menyerupai 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, lalu seluruh keempat S-box berurutan, dengan keluaran yang berubah secara kontiyu dari algoritma Blowfish.
Total yang dibutuhkan yaitu 521 iterasi untuk menghasilkan semua subkunci yang dibutuhkan. Aplikasi lalu sanggup menyimpan subkunci ini dan tidak membutuhkan langkah-langkah proses penurunan berulang kali, kecuali kunci yang dipakai berubah.

Untuk deskripsi sama persis dengan enkripsi, kecuali pada P-array (P1,P2,……..,P18) dipakai dengan urutan terbalik atau di inverskan.

Keamanan Blowfish

Sampai dikala ini algoritma Blowfish belum ditemukan kelemahan yang berarti hanya adanya weak key dimana dua entri dari S-box mempunyai nilai yang sama. Belum ada cara untuk mengecek weak key sebelum melaksanakan key expansion, tetapi hal ini tidak kuat terhadap hasil enkripsi. Hasil enkripsi dengan algoritma Blowfish sangat mustahil dan tidak mudah untuk di terjemahkan tanpa dukungan kunci. Sampai sekarang belum ada Cryptanalysis yang sanggup membongkar pesan tanpa kunci yang enkripsi oleh Blowfish. Agar kondusif dari pembongkaran pesan maka dalam algoritmanya harus memakai 16 putaran semoga pesan tersebut tidak sanggup dibongkar. Algoritma Blowfish pun sanggup digabungkan dengan algoritma-algoritma enkripsi yang lain dalam pengkripsian sebuah pesan untuk lebih menjamin isi dari pesan tersebut.

Aplikasi

Berikut merupakan referensi source code Blowfish Algorithm Download