Twofish

Twofish merupakan algoritme penyandian blok kunci simetris dengan ukuran blok 128 bit dan ukuran kunci hingga 256 bit. Algoritme ini termasuk lima finalis kontes AES, tetapi tidak terpilih sebagai standar. Algoritme ini berkaitan dengan penyandian Blowfish. Tujuan dari perancangan Twofish yang selaras dengan kriteria NIST untuk AES adalah untuk membuat suatu algoritme kriptografi yang efisien dan portabel. Rancangan yang fleksibel dapat menerima panjang kunci tambahan sehingga dapat diterapkan pada berbagai platform dan aplikasi serta cocok untuk penyandian aliran, fungsi hash, dan MAC. Rancangan yang sederhana memudahkan proses analisis dan implementasi algoritme. Pada tahun 2000-an, pada berbagai platform, Twofish sedikit lebih lambat daripada Rijndael untuk kunci 128 bit, tetapi lebih cepat untuk kunci 256 bit. Namun, setelah pemilihan AES, Twofish semakin lebih lambat daripada Rijndael pada prosesor yang mendukung set instruksi AES. Algoritme Twofish menggunakan struktur jaringan Feistel dengan 16 putaran dan tambahan teknik pemutihan terhadap masukan dan keluaran. Teknik pemutihan sendiri adalah teknik melakukan operasi XOR terhadap materi kunci sebelum putaran pertama dan sesudah putaran akhir. Elemen di luar jaringan Feistel normal yang terdapat dalam algoritme Twofish adalah rotasi 1 bit. Proses rotasi ini dapat dipindahkan ke dalam fungsi Feistel (F) untuk membentuk struktur jaringan Feistel yang murni, tetapi hal ini membutuhkan tambahan rotasi kata sebelum langkah pemutihan keluaran. Penyandian Twofish belum dipatenkan dan acuan implementasinya telah dipublikasikan di bawah domain publik. Hasilnya, algoritme Twofish dibebaskan kepada siapa pun untuk dipakai tanpa batasan tertentu. Ia termasuk ke dalam penyandian yang dimasukkan dalam standar OpenPGP. Namun, Twofish masih kalah tenar daripada Blowfish yang telah tersedia lebih lama.