SEKILAS
Twofish merupakan 128-bit block sandi/cipher yang bisa menerima panjang varibel kunci/key sebesar 256 bit. Cipher tersebut berasal 16-round jaringan Feitsel dengan fungsi bijektif F yang dilanjutkan dengan empat key-dependent 8-by-b-bit S-boxes, satu fixed 4-by-4 maximum distance separable matrix over GF(28), satu pseudo-Hadamard transform, satu rotasi bitwise dan satu desain key schedule. Suatu implementasi Twofish yang dioptimalkan mengenksripsi pada Pentium Pro dengan 17,8 siklus clock per byte, dan pada smartcard akan mengenksripsi pada 1660 siklus clock per byte. Twofish dapat diimplemetsikan pada pada perangkat keras dengan 14000 gerbang. Design round function dan penjadwalan kunci mengakibatkan adanya trade off antara kecepatan, ukuran software, waktu setup key, jumlah gerbang dan memory.
Pada tahun 1972 dan 1974, National of Standart (yang sekarang bernama NIST) mengumumkan adanya standar enkripsi, yaitu DES yang sangat beralasan karena penggunaannya yang luas dan merupakan algoritma yang sangat sukses di dunia [NBS77].
Dalam proses perkembangannya ternyata key-key dalam DES dirasa terlalu pendek bagi keamanan komersial sehingga membuat gusar para kriptografer yang menginginkan proses algoritma yang “closed door” [DH79]. Akhirnya, NIST mengumumkan Advanced Encryption Standard (AES) pada tahun 1997 [NIST97a]. Salah satu kandidat AES adalah Twofish. Mengapa demikian? Karena Twofish memenuhi semua criteria yang dibutuhkan NIST, yaitu 128-bit block, 128 bit, 192 bit dan 256 bit key (kata kunci), efisien pada plaform manapun dan lain-lain, serta beberapa desain berat lainnya Twofish dapat melakukan:
- Melakukan enkripsi data pada 285 siklus per block di atas Pentium Pro setelah menjalankan key setup 12700 siklus clock.
- Melakukan enkripsi data pada 860 siklus per blok sdi atas Pentium Pro setelah menjalankan key setup 1250 siklus clock.
- Melakukan enkripsi data pada 26500 siklus per block di atas sebuah 6805 smart card setelah mejalankan key setup 1750 siklus clock.
TUJUAN DESAIN TWOFISH
Twofish dirancang untuk memenuhi criteria desain yang ditentukan oleh NIST sebagai kandidat AES [NIST97b]. Adapun criteria-kriteria yang ditetapkan oleh NIST untu kandidat AES adalah sebagai berikut:
- Blok cliper simetris 128-bit
- Panjang key-nya adalah 128 bit, 192 bit, dan 256 bit.
- Tidak ada key-key yang lemah.
- Memiliki efisiensi, baik pada Pentium Pro maupun pada software dan hardware dari platform yang berbeda.
- Memiliki rancangan yang flkeksibel, misalnya menerima panjang key tambahan, dapat diterapkan pada software dan hardware dari platform berbeda, cocok untuk stream chipper, fungsi hash dan MAC.
- Simple design, baik untuk memudahkan analisa dan implementasi.
Sebagai tambahannya, ditekankan criteria kinerja sebagai berikut:
- Mampu menerima panjang key diatas 256.
- Mengenkripsi data kurang dari 500 siklus clock per block di atas Pantium, Pentium Pro dan Pentium II, bagi algoritma yang dioptimasi secara penuh.
- Mampu melakukan set-up key 128-bit (untuk kecepatan enkripsi optimal) dalam waktu kurang dari yang diperlukan untuk mengenkripsi 32 blok di atas Pentium, Pentium Pro, dan Pentium II.
- Mengenkripsi data kurang dari 5000 siklus clock per blok di atas Pentium, Pentium Pro, dan Pentium II tanpa melakukan key setup terlebih dahulu.
- Tidak menggunakan operasi-operasi yang dapat mengurangi kinerja ketika dijalankan pada mekroproc\sesor 3-bit yang lain.
- Tidak menggunakan operasi-operasi yang mengurangi efisiensi ketika dijalankan di atas processor 8-bit atau 16-bit.
- Tidak menggunakan operasi-operasi yang mengurangi efisiensi ketika dijalankan di atas processor 64-bit, seperti Merced.
- Tidak melibatkan elemen apapun yang membuat tidak efisien dalam hal hardware.
- Memiliki bermacam kinerja yang mengacu pada key-schedule.
- Mengenkripsi data dalam waktu kurang dari 10 millidetik pada processor 8-bit.
- Dapat diimplementasikan di ats processor 8-bit dan dengan RAM 64 byte saja.
- Dapat diimplementasikan pada hardware yang menggunakan kurang dari 20000 gates.
Sementara itu, tujuan NIST dalam hubungannya dengan Twofish adalah sebagai berikut:
· Twofish 16-round tidak boleh memiliki chosen-plaintext attack yang memerlukan kurang dari 280 chosen-plaintext dan menggunakan waktu dari 2N dimana N adlah panjang key.
· Twofish 12-round tidak boleh memiliki suatu related-key attack yang memerlukan kurang dari 264 chosen-plaintext dan menggunakan waktu kurang dari 2N dimana N adalah panjang key.
Akhirnya, diputuskan tujuan fleksibel dalam kriptografi Twofish sebagai berikut:
- Memiliki varian dengan sebuah nomor variable dari setiap round.
- Memiliki key schedule yang dapat di-prekomputasikan untuk kecepatan maksimum dan penggunaan memori manimum.
- Cocok sebagai stream chipper, fungsi hash satu arah, MAC dan pseudo ramdom number generator, dengan menggunakan metode konstruksi yang dapat dimengerti.
- Memiliki varian famili-key untuk memungkinkan versi chipper yang berbeda dan non interoperable.
Dan twofish telah memenuhi semua criteria-kriteria diatas.
FIETSEL NETWORK
Sebuah Fietsel Network adalah metoda umum untuk mentransformasi suatu fungsi menjadi bentuk permutasi. Bagian paling fundamental dari Jaringan Fietsel adalah fungsi F: sebuah pemetaan key-dependent dari suatu input string menjadi output string. Dalam Twofish dilakukan Fietsel Network sebanyak 16 kali. Procedure Fietsel Network sebenarnya terdiri dari Input Whitening, S-boxes, Transformasi Pseudo Hadamard, Output dan Output Whitening.
S-BOXES
Sebuah S-box adalah operasi subsitusi table-driven non linear yang digunakan dalam block chipper. S-boxes bervariasi antara setiap ukuran input dan ukuran outputnya, dan bisa diciptakan secara random atau dengan algoritma.
Twofish menggunakan empat bijective, key-dependent dan 8-by-8-bit S-boxes. S-boxes ini dibuat menggunakan dua permutasi 8-by-8-bit dan material key.
MDS MATRIK
Code Maximum Distance Separable(MDS) melalui a adalah pemetaan linear dari elemen field a ke elemen field b, menghasilkan campuran dari vector a+ b elemen, dengan property jumlah minimum angka tidak nol dalam vector tidak nol paling kurang b+ 1 [MS77]. Dengan kata lain “Distance” adalah jumlah element yang berbeda antara dua vector yang berbeda yang dihasilkan oleh MDS paling kurang b+1. Pemetaan MDS bisa direpresentasikan oleh matriks MDS yang terdiri dari a x b element. Twofish menggunakan matriks MDS 4 x 4 tunggal.
TRANSFORMASI PSEUDO-HADAMARD
Transformasi Pseudo-Hadamard (PHT) adalah operasi sederhana yang bekerja dengan cepat dalam software. Diberikandua input, a dan b, dan PHT 32 bit didefinisikan sebagai :
A0 = a + b mod 232
B0 = a + 2b mod 232
SAFER [MAS94] manggunakan PHT 8 bit secara meluas untuk proses difusi. Sementara itu, Twofish menggunakan PHT 32 bit untuk melakukan mixing terhadap outputnya dari dua buah fungsi g 32 bit parallel. PHT ini dapat dieksekusi dalam dua opcode diatas kebanyakan microprocessor modern, termasuk keluarga Pentium [SKW98a].
WHITENING
Whitening merupakan teknik mengXORkan key material sebelum ronde pertama dan sesudah ronde terakhir. Dalam serangan terhadap Twofish, terbukti bahwa whitening secara substansial meningkatkan kesulitan menyerang chipper, dengan jalan menyembunyikan input spesifik untuk awal dan akhir ronde dari Twofish.
FUNGSI F
Pondasi dasar dari jaringan Feistel adalah fungsi F, yaitu suatu permutasi yang key-dependent terhadap nilai 64-bit. Fungsi F memerlukan tiga buah argument, dua input word R0 dan R1, dan bilangan bulat r yang digunakan untuk memilih subkey yang besesuaian. R0 dilewatkan fungsi g, yang menghasilkan T0. R1 dirotasikan dalam sebuah PHT dan dua word dari key yang di-expand kemudian ditambahkan kepadanya.
T0 = g(R0)
T1 = g(ROL(R1,8))
F0 = (T0 + T1 + K2r+8) mod 232
F1 = (T0 + T1 + K2r+9) mod 232
Dimana (F0, F1) merupakan hasil dari F, ROL adalah rotasi ke kiri terhadap R1 sejauh 8 bit.
Fungsi F selalu non linear dan kemungkinan non surjektif, yaitu bahwa tidak semua output yang dimungkinkan berada dalam ruang output dapat terjadi semua.
KEY SCHEDULE
Key schedule adalah suatu cara dimana bit-bit key diubah menjadi key-key bulat yang dapat digunakan oleh chipper. Twofish memerlukan material key yang sangat banyak, dan memiliki key schedule yang rumit. Untuk memudahkan analisis, key schedule menggunakan primitif yang sama dengan fungsi pembulatan biasa [SKW98a].
Key schedule harus menyediakan 40 word, yaitu key K0…K39 dan 4 key-dependent S-boxes yang digunakan dalam fungsi g. Twofish didefinisikan untuk panjang N = 128, N = 192, dan N = 256. Key yang lebih pendek dari 256 bit dapat dipergunakan dengan cara mengisinya dengan nilai nol samapai panjang kunci yang lebih besar berikutnya.
TWOFISH
Gambar 1 dibawah menunjukkan chipper Twofish. Twofish menggunakan struktur Feistel 16-round dengan whitening tambahan dalam input dan outputnya. Satu-satunya elemen yang bukan Feistel adalah rotasi 1 bit. Rotasi tersebut dapat dipindahkan ke fungsi F untuk menciptakan output berjalan.
Plaintext dipecah menjadi empat buah word 32-bit. Pada whitening input, keempat word itu di XOR-kan dengan empat key word. Dan diikuti dengan keenam belas round. Dalam tiap round, dua word di kiri digunakan sebagai input fungai g (Salah satunya dirotasikan dengan 8 bit terlebih dahulu).
H. KINERJA TWOFISH
Twofish telah didesain dari awal dengan menekankan pada kinerjanya. Twofish sangat efisien diimplementasikan pada beragam platform, yaitu CPU 32 bit, smart card 8 bit, dan perangkat keras VLSI. Yang lebih penting lagi, Twofish didesain untuk memungkinkan beberapa layer kinerja, tergantung pada kepentingan relatif terhadap kecepatan enkripsi, key setup, penggunaan memori, hardware gate count, dan parameter implementasi yang lain. Hasilnya merupakan algoritma yang sangat fleksibel yang dapat diimplementasikan secara efisien dalam beragam aplikasi kriptografi.
Sebagai contoh adalah kinerja Twofish pada mikroprosesor berukuran besar. Tabel 1 menunjukkan kinerja Twofish. Enkripsi dan dekripsi untuk pilihan key scheduling yang berbeda dan pada beberapa mikroprosesor modern dengan menggunakan bahasa pemrograman dan kompiler berbeda. Selisih waktu untuk enkripsi dan dekripsicenderung tipis, jadi yang ditampilkan dalam tabel tersebut hanyalah waktu enkripsi saja. Tidak diperlukan waktu untuk men-setup algoritmanya kecuali untuk key setup. Waktu untuk mengubah sebuah sama waktu yang digunakan untuk men-setup suatu key. Perkiraan ukuran total kode program (dalam byte) rutin untuk enkripsi, dekripsi dan key setup juga disertakan.
Semua data pewaktuan diberikan dalam clock cycles per block (CCPB), atau clock cycles untuk men-setup key secara keseluruhan. Sebagai contoh, pada Pentium Pro, suatu versi bahasa assembly yang dioptimalisasi penuh dapat melakukan enkripsi dan dekripsi terhadap data dalam 285 clock cycles per block, atau 17,8 clock cycles per byte, setelah melakukan suatu 12700-clock key setup (ekuivalen dengan mengenkripsi 45 blok). Dengan menggunakan prosesor Pentium Pro 200 MHz, kinerjanya mencapai dibawah 90 Megabit per detik.
Juga telah diimplementasikan empat macam pilihan keying yang berbeda. Terdapat beberapa pilihan keying yang mungkin, dimana masing-masing mempunyai perbedaan tipis dalam hal key setup.
Full Keying. Pilihan ini melakukan prekomputasi terhadap key. Dalam menggunakan pilihan ini, suatu komputasi dari g berisi empat buah tabel pencarian, dan tiga buah operasi XOR. Sementara itu, kecepatan enkripsi dan dekripsinya bernilai konstan tanpa menghiraukan ukuran key.
Partial Keying. Untuk aplikasi dimana sebagian kecil blok dienkripsi dengan key tunggal, tidak akan menjadi masalah dalam membangun key schedule yang lengkap. Pilihan ini melakukan prekomputasi terhadap empat S-boxes dalam tabel berukuran 8 x 8 bit, dan menggunakan empat buah tabel MDS 8 x 32 bit untuk melakukan perkalian MDS. Dan sekali lagi, kecepatan enkripsi dan dekripsinya tidak menghiraukan ukuran key.
Minimal Keying. Untuk aplikasi yang mengenkripsi sangat sedikit bagian dari blok dengan key tunggal, disini terdapat optimasi lebih jauh yang mungkin. Penggunaan pilihan Minimal Keying ini hanya memerlukan sebuah tabel 1 Kb untuk menamping S-boxes yang diprekomputasi secara parsial. Pentingnya byte key dari S yang diprekomputasi adalah layaknya mereka diperlukan dalam setiap round.
Zero Keying. Pilihan ini tidak melakukan prekomputasi terhadap S-boxes, dan juga tidak memerlukan tabel ekstra. Sebagai gantinya, setiap entri di komputasi secara melayang. Waktu key setup secara murni digunakan untuk melakukan komputasi terhadap nilai Ki dan S. Untuk suatu aplikasi yang tidak memiliki waktu key setup sama sekali, waktu yang digunakannya untuk mengenkripsi satu blok adalah penjumlahan dari waktu key setup dan waktu enkripsi zero keying.
Compiled. Pilihan ini hanya tersedia dalam bahasa Assembly, dimana konstanta subkey secara langsung diembedkan pada suatu salinan key-spesifik dari kode program, menghemat fetch memori dan memudahkan penggunaan Pentium LEA opcode untuk melakukan PHT dan penambahan subkey dalam satu clock. Namun, hamper seluruh waktu ekstra yang diperlukan hanya digunakan untuk melakukan copying kode dan tabel tidak mencerminkan fakta bahwa sebuah key tunggal telah diinisialisasi.
Total Waktu Enkripsi. Untuk message yang lebih pendek, kinerja merupakan penjunlahan dari key setup dan enkripsi. Untuk message yang sangat pendek, waktu key setup dapat mengalahkan kecepatan enkripsi. Tabel 2 menunjukkan kinerja Twofish pada Pentium Pro (versi bahasa assembly), key setup 128 bit dan enkripsi, untuk beragam panjangnya message.
CRYPTANALIS TERHADAP TWOFISH
Lebih dari seribu jam telah dilakukan cryptanalis terhadap twofish. Sebuah catatan penting dari attack yang berhasil dilakukan terhadapnya adalah sebagai berikut:
a. 5- round twofish dengan 2 22,5 pasangan plaintext terpilih dan 251 komputasi fungsi g
b. 10 round twofish dengan sebuah chosen key attack,memerlukan 232 palintext terpilih dan sekitar 232 chosen –plaintext yang adaptif dan sekitar 232 usaha.
Fakta bahawa twofish mampu menahan related key attack dengan baik merupakan fakta yang paling menarik dan beralasan karena related- key memberikan kepada attacker hampir semua kontrol terhadap input cipher. Cryptanalis konvensional memungkinkan suatu attacker mengontrol input plaintext dan ciphertext didalam cipher, yaitu key- schedule.
Berdasarkan hasil analisis ini, dapat diterka bahwa tidak lagi terdapat attack yang efisien terhadap twofish selain brute force., yaitu attack yang paling efisien untuk melawan twofish dengan key 128 bit harus memiliki kompleksitas 2128, sementara untuk twofish dengankey 192 bit harus menggunakan attack dengan kompleksitas 2192 dan untuk twofish dengan key 256 bit harus menggunakan attack dengan kompleksitas 2 256.
Salah satu attack yang dibahas disini adalah adalah Partial Key Guessing Attack. Sebuah key Schedule yang bagus harus memiliki property dimana ketika attacker menebak beberapa subset dari bit- bit key, attacker tidak memahami tentang urutan subkey atau operasi internal lainnya di dalam cipher tersebut. Dan twofish memiliki tipe key schedule seperti itu.
Dianggap ada sebuah attacker yang menebak suatu word genap dari key Mc. Attacker tidak mempelajari apapun dari key S, untuk tiap round blok subkey , ia mengetahui Ai. Jika ia menebak dengan suatu Ko, ia dapat menghitung K1 yang besesuaian. Ia dapat melakukan attack round subkey sebanyak yang dia suka, tapi tiap tebakan memakan 32 bit. Dapat dilihat bahwa tidak ada jalan bagi attacker untuk menguji tebakan 96 bit sekalipun hanya satu round subkey dengan cara ini terhadap full Twofish.
Jalan lainnya adalah dengan menebak input key S terhadap G. Cara ini hanyalah setengah jalan dari full key M , tapi tidak memberikan informasi tentang round key AI. Dapat dilihat bahwa dengan cara ini pun tak ada jalan bagi attacker untuk menguji tebakan s terhadap twofish 16 round yang penuh sehingga analisis menyarankan bahawa attack terhadap full Twofish dengan menggunakan diferensial reated key , adalah suatu pekerjaan yang sia- sia karena resistensi cipher Twofish yang handal terhadap attacker sejenis.
KESIMPULAN
Twofish telah dipresentasikan sebagai disain dan cryptanalysis yang berjalan dari tangan ke tangan , dalam artian mustahil melakukan suatu hal tanpa hal yang lain dikerjakan juga dan hanya dalam analisis yang kemampuan algoritmanya dapat didemonstrasikan.
Selama proses disain, telah dipelajari beberapa pengetahuan mengenai desain cipher, yang disajiakan sebagai berikut
· Algoritma enkripsi dan key schedule harus didisain secara tandem (bersamaan), yaitu perubahan yang tak kentara dapat mempengaruhi proses yang lain. Dirasa tidak cukup mendesain fungsi round yang hebat dan kemudian dilanjutkan dengan mencabangkan key schedule yang hebat pula padanya( kecuali jika sudah puas dengan konstruksi yang kurang efisien dan kurang elegan yang dimiliki oleh blowfish) Jadi keduanya harus berjalan bersamaan.
· Tak terdapat suatu hal serupa dengan key dependent s- box, yang ada hanyalah fungsi non linear multi stage yang rumit yang diimplementasikan sebagai sebuah key dependent s- box untuk efisiensi.
· Key harusnya dibuat sependek mungkin. Dianggap sangat berat untuk mendesain suatu algoritma dengan key panjang jika dibadingkan dengan algoritma yang menggunakan key yang pendek . Dari keseluruhan proses desain ini , dirasa lebih mudah mendesain dan menganalisa Twofish dengan sebuah key 128 bit daripada Twofish yang menggunakan key 192 bit ataupun key 256 bit.
· Membangun sebuah cipher dengan enkripsi lokal yang kuat dan membiarkan fungsi pembulatan menangani difusi global . Perancangan Twofish dalam hal ini menjadikannya sangat sukar untuk menyusun statistical cryptanalis attack.
Diangap bahwa Twofish merupakan algoritma yang ideal bagi AES. Karena Twofish efisien pada mikroprosesor besar, smart card dan hardware yang dikhususkan untuk itu. Selain itu juga karena twofish memiliki key schedule yang handal dan membuatnya cocok untuk bermacam –macam implementasi . perhatian terhadap detail , baik sisi fungsi enkripsi, maupun sisi key schedule, membuatnya layak sebagai codebook, output feedback dan fungsi hash satu arah serta pseudo random number generator.
PENUTUP
Twofish adalah cipher blok 128 bit yang menerima key dengan panjang variabel diatas 256 bits. Cipher tersebut merupakan sebuat network Feitsel 16 round dengan suatu fungsi bijektif F yang membuat empat buahkey dependent s- boxes 8 x 8 , jarak maksimum 4 x 4 yang dapat dipisahkan atas GF(28 ) suatu transformasi pseudo- Hadamard, rotasi bitwise, dan penjadwalan key dengan seksama.
Sementara itu , pondasi dasar dari jaringan Feistel adalah fungsi F , yaitu suatu permutasi yang key- dependent terhadap nilai 64 bit. Dari fungsi F ini dihasilkan output-output yang kemuduan diolah lagi dalam fugsi g. Dan melalui proses – proses yang lain lagi sehingga dihasilkan sebuah cipher blok 128 bit yang handal dalam menghadapi attack – attack related key. Dan perlu diketahui bahwa fungsi f selalu non linear dan kemudian non surjektif , yaitu bahwa tidak semua output yang dimungkinkan berada dalam ruang output dapat terjadi semua.
Twofish memiliki kehandalan- kehandalan dalam implementasinya diatas berbagai platform microprocessor, smart card dan hardware yang dibuat sebagai perangkat enkripsi data. Hal ini dapt dilihat dari tabel – tabel yang menunjukkan kinerja twofish secara keseluruhan dalam berbagai format message dan ukuran key. Kinerja twofish pada microprocessor besar meliputi pilihan- pilihan performance, yaitu full keying dan partial keying , minimal keying ,zero keying dan compiled. Dan dengan jelas telah ditunjukkan bahwa dengan zero keying , dan kehandalan twofish diatas mikroprosessor besar sangat optimal. Namun hal tersebut memiliki faktor- faktor yang penting yaitu ukuran plaintext, pilihan keying, dan pemakaian waktu dalam key setup.
Beberapa cryptanalis yang dilakukkan terhadap cipher blok twofish memberikan hasil yang menakjubkan, dimana attack yang diterapkan dengan menggunakan related key dinyatakan sia- sia karena untuk bisa menembus pertahanan twofish diperlukan attack yang berupa brute force. Berdasarkan hasil analisis ini , dapat diterka bahwa tidak lagi terdapat attack yang lebih efisien terhadap twofish selain brute force. Yaitu attack yang paling efisien untuk melawan twofish dengan key 128 bit harus memliki kompleksitas 2 128, sementara untuk twofish dengan key 192 bit harus mengunakan attack dengan kompleksitas 2 192 dan untuk Twofish dengan key 256 bit harus menggunakan attack dengan kompleksitas 2 256 .
Dari sini dapat disimpulkan bahwa algoritma enkripsi twofish yang merupakan cipher blok 128 bit dan dijdikan kandidat AES adalah algoritma enkripsi yang memilki kehandalan dan keunggulan. implementasi pada berbagai macam platform mikroprocessor, beragam smart card dan hardware- hardware yang dispesifikasikan untuk proses enkripsi. Hal ini disebabkan oleh keunggulannya dalam menggunakan siklus clock dan kebutuhan spesifikasi hardware dalam implementasinya. Selain itu, twofish memiliki resistensi yang tinggi terhadap related key attack, dan hanya dapat ditembus dengan menggunakan brute force. Maka Twofish merupakan kandidat AES yang handal.


0 comments:
Posting Komentar