Blowfish memiliki 64-bit ukuran blok dan variabel panjang kunci dari 1 bit sampai 448 bit. Ini adalah 16-round Feistel cipher dan menggunakan besar key-dependent S-box. Hal ini mirip dengan struktur CAST-128, yang menggunakan fixed S-box.
Struktur Feistel dari Blowfish
Diagram ke kiri menunjukkan tindakan Blowfish. Setiap baris mewakili 32 bit. Algoritma terus dua array subkey: 18-entri P-array dan empat 256-entri S-box. S-box 8-bit menerima input dan menghasilkan 32-bit output. Satu entri dari array P-digunakan setiap putaran, dan setelah babak final, masing-masing setengah dari blok data XOR dengan salah satu dari dua yang tidak terpakai yang tersisa P-entri.
Diagram ke kanan atas menunjukkan itu Blowfish F-fungsi. Fungsi membagi input 32-bit menjadi empat delapan-bit, dan menggunakan perempat sebagai masukan untuk S-box. Keluaran ditambahkan modulo 2^32 dan XOR untuk menghasilkan output 32-bit akhir.
Dekripsi sama persis dengan enkripsi, kecuali bahwa P1, P2,..., P18 digunakan dalam urutan terbalik. Hal ini tidak begitu jelas karena xor adalah komutatif dan asosiatif. Sebuah kesalahan umum adalah dengan menggunakan urutan terbalik enkripsi sebagai algoritma dekripsi (yaitu XOR pertama p17 dan P18 ke blok ciphertext, kemudian menggunakan P-entri dalam urutan terbalik).
Blowfish adalah kunci jadwal dimulai dengan menginisialisasi P-array dan S-box dengan nilai-nilai yang berasal dari heksadesimal digit pi, yang tidak mengandung pola yang jelas. Sebuah 64-bit semua nol blok kemudian dienkripsi dengan algoritma seperti berdiri. Cipherteks yang dihasilkan menggantikan P1 dan P2. Cipherteks yang sama ini kemudian dienkripsi lagi dengan subkunci baru, dan P3 dan P4 digantikan oleh ciphertext yang baru. Ini terus berlanjut, mengganti seluruh P-array dan semua entri S-box. Dalam semua, algoritma enkripsi Blowfish akan berjalan 521 kali untuk menghasilkan semua subkunci-sekitar 4KB data diproses.
Karena P-array 576 bit panjang, dan byte kunci XOR melalui semua 576 bit selama inisialisasi, banyak implementasi dukungan ukuran kunci sampai dengan 576 bit. Meskipun ini tentu mungkin, 448 bit batas di sini untuk memastikan bahwa setiap sedikit setiap subkunci tergantung pada setiap bit dari kunci, sebagai empat nilai terakhir dari P-array-tidak mempengaruhi setiap bit ciphertext. Hal ini harus diambil dalam pertimbangan untuk implementasi dengan nomor yang berbeda dari putaran, sebagai meskipun untuk meningkatkan keamanan terhadap serangan, itu melemahkan keamanan dijamin oleh algoritma. Dan mengingat inisialisasi lambat cipher dengan setiap perubahan kunci, diberi perlindungan alami terhadap serangan brute force, yang tidak benar-benar membenarkan ukuran kunci lebih dari 448 bit.
Fungsi bulat (fungsi Feistel) dari Blowfish
Dikutip dari : http://www.i-bego.com/
Download Contoh Source Code
Struktur Feistel dari Blowfish
Diagram ke kiri menunjukkan tindakan Blowfish. Setiap baris mewakili 32 bit. Algoritma terus dua array subkey: 18-entri P-array dan empat 256-entri S-box. S-box 8-bit menerima input dan menghasilkan 32-bit output. Satu entri dari array P-digunakan setiap putaran, dan setelah babak final, masing-masing setengah dari blok data XOR dengan salah satu dari dua yang tidak terpakai yang tersisa P-entri.
Diagram ke kanan atas menunjukkan itu Blowfish F-fungsi. Fungsi membagi input 32-bit menjadi empat delapan-bit, dan menggunakan perempat sebagai masukan untuk S-box. Keluaran ditambahkan modulo 2^32 dan XOR untuk menghasilkan output 32-bit akhir.
Dekripsi sama persis dengan enkripsi, kecuali bahwa P1, P2,..., P18 digunakan dalam urutan terbalik. Hal ini tidak begitu jelas karena xor adalah komutatif dan asosiatif. Sebuah kesalahan umum adalah dengan menggunakan urutan terbalik enkripsi sebagai algoritma dekripsi (yaitu XOR pertama p17 dan P18 ke blok ciphertext, kemudian menggunakan P-entri dalam urutan terbalik).
Blowfish adalah kunci jadwal dimulai dengan menginisialisasi P-array dan S-box dengan nilai-nilai yang berasal dari heksadesimal digit pi, yang tidak mengandung pola yang jelas. Sebuah 64-bit semua nol blok kemudian dienkripsi dengan algoritma seperti berdiri. Cipherteks yang dihasilkan menggantikan P1 dan P2. Cipherteks yang sama ini kemudian dienkripsi lagi dengan subkunci baru, dan P3 dan P4 digantikan oleh ciphertext yang baru. Ini terus berlanjut, mengganti seluruh P-array dan semua entri S-box. Dalam semua, algoritma enkripsi Blowfish akan berjalan 521 kali untuk menghasilkan semua subkunci-sekitar 4KB data diproses.
Karena P-array 576 bit panjang, dan byte kunci XOR melalui semua 576 bit selama inisialisasi, banyak implementasi dukungan ukuran kunci sampai dengan 576 bit. Meskipun ini tentu mungkin, 448 bit batas di sini untuk memastikan bahwa setiap sedikit setiap subkunci tergantung pada setiap bit dari kunci, sebagai empat nilai terakhir dari P-array-tidak mempengaruhi setiap bit ciphertext. Hal ini harus diambil dalam pertimbangan untuk implementasi dengan nomor yang berbeda dari putaran, sebagai meskipun untuk meningkatkan keamanan terhadap serangan, itu melemahkan keamanan dijamin oleh algoritma. Dan mengingat inisialisasi lambat cipher dengan setiap perubahan kunci, diberi perlindungan alami terhadap serangan brute force, yang tidak benar-benar membenarkan ukuran kunci lebih dari 448 bit.
Fungsi bulat (fungsi Feistel) dari Blowfish
Dikutip dari : http://www.i-bego.com/
Download Contoh Source Code
2 komentar:
berdasarkan artikel Algorithma Blowfish, bisa menjadi rujukan link penelitian dibawah ini
http://repository.gunadarma.ac.id/bitstream/123456789/1291/1/20107625.pdf
terima kasih
Kami juga mempunyai artikel yang terkait dengan algoritma blowfish, bisa di download disini:
http://repository.gunadarma.ac.id&source=web&cd=1&cad=rja&ved=0CBwQFjAA&url=http%3A%2F%2Frepository.gunadarma.ac.id%2Fbitstream%2F123456789%2F2428%2F1%2F03-02-008-Implementasi%255BLedya%255D.pdf&ei=-beTUIXUDIHZrQfIvoGADw&usg=AFQjCNE52dbDw4tPZrpsgckQvrgE5RgW4A
semoga bermanfaat :D
Posting Komentar