Selasa, 25 Desember 2007

Sistem Keamanan Komunikasi Dalam Electronic Commer









Sistem keamanan di dalam dunia komputer mulai menjadi perhatian serius para peneliti dan praktisi teknologi informasi semenjak diketemukannya teknologi jaringan komputer. Yang menjadi pemicu berkembangnya isu di bidang ini adalah karena adanya fenomena pengiriman data melalui media transmisi (darat, laut, dan udara) yang mudah “dicuri” oleh mereka yang tidak berhak. Data mentah dari sebuah komputer yang dikirimkan ke komputer lain pada dasarnya rawan terhadap “interfensi” dari pihak ketiga, sehingga diperlukan suatu strategi khusus agar paling tidak dua hal terjadi (Kosiur, 1997):
1. Data yang dikirimkan tidak dapat secara “fisik” diambil oleh pihak lain yang tidak berhak; atau 2. Data yang dikirimkan dapat “diambil secara fisik”, namun yang bersangkutan tidak dapat membacanya.

Secara prinsip, pencapaian obyektif kedua lebih mudah dibandingkan dengan yang pertama, karena untuk dapat memproteksi data secara fisik memerlukan teknologi dan biaya yang teramat besar. Prinsip yang kedua sebenarnya sudah lama berkembang dalam dunia ilmu pengetahuan pada umumnya, yaitu ketika diperkenalkan ilmu sandi (menyamarkan data asli atau data yang sebenarnya ke dalam bentuk lain dengan menggunakan metoda pemetaan tertentu), seperti yang diajarkan di kalangan kepanduan (pramuka) atau militer. Di dalam dunia komputer, teknik penyadian tersebut dinamakan sebagai encryption dan decryption. Encryption adalah proses pengkodean data mentah menjadi data samaran dengan teknik pemetaan tertentu, sementara decryption adalah proses pemetaan kembali dari data samaran menjadi data aslinya. Mekanisme penyandian yang terjadi di dalam dunia internet adalah sebagai berikut.

Katakanlah dua orang yang berbeda lokasi ingin melakukan pertukaran dokumen melalui internet. Si pengirim dan si penerima masing-masing memiliki sebuah “kunci” (misalnya sebuah “password”) yang akan dipergunakan sebagai variabel dalam melakukan pemetaan. Berdasarkan rumus atau formula pemetaan tertentu (misalnya rumus matematika sederhana), teks dokumen asli akan diacak atau dienkripsi menjadi sebuah teks yang baru (cipher text). Teks yang “tidak dapat dibaca” ini kemudian barulah dikirimkan ke penerima melalui jalur internet. Untuk dapat membacanya, si penerima akan menggunakan “kunci” yang sama untuk mendekripsikan pesan yang ada. Dengan adanya mekanisme ini, si pengirim dan si penerima dapat melakukan komunikasi secara aman tanpa rasa takut pesannya terbaca oleh mereka yang mencurinya sepanjang jalur komunikasi.

Kelemahan dari sistem ini adalah sebagai berikut:
• Karena kunci yang dipergunakan sama, berarti masing-masing orang harus memiliki kunci yang berbeda jika ingin berkomunikasi dengan orang lain, yang tentu saja akan sangat repot mengingatnya;
• Jika secara kebetulan dua atau lebih orang memiliki kunci yang sama, maka yang bersangkutan dapat mencuri dan mendeskripsikan pesan orang lain; dan
• Masalah autentifikasi juga akan menjadi isu utama, karena si penerima belum tentu yakin bahwa si pengirim adalah orang yang sesungguhnya, karena mungkin saja orang lain yang secara sengaja mengetahui kunci enkripsi si pengirim mencoba mengirimkan dokumen atas nama orang lain.



Sumber: David Kosiur, 1997

Terlepas dari kekurangan-kekurangan di atas, mekanisme “symmetric encryption” ini masih cukup baik dipergunakan untuk sebuah jaringan komputer sederhana, dimana data atau informasi yang dikirim tidak memiliki tingkat kerahasiaan yang tinggi. Aplikasinya dalam dunia internet atau E-Commerce misalnya dipergunakan untuk pengiriman dokumen-dokumen standar (brosur, pengumuman, dsb.) baik melalui email maupun attachment. Mekanisme penyandian lainnya yang lebih baik adalah dengan menggunakan metode “public-key cryptography” seperti yang digambarkan di berikut ini. Dalam sistem ini, setiap orang yang akan melakukan komunikasi via internet akan diberikan sebuah kunci (disebut sebagai “public key”) yang diketahui oleh semua orang secara terbuka. Jika seseorang ingin mengirimkan sebuah pesan, maka yang bersangkutan diharapkan untuk terlebih dahulu melihat daftar public key (kunci publik) dan mencari tahu kunci publik si penerima.

Kunci inilah yang akan menjadi variabel enkripsi terhadap dokumen atau teks asli tersebut, sebelum dokumen samaran (acak) yang ada dikirimkan melalui internet. Pesan ini baru akan dapat dideskripsikan dengan sebuah “private key” yang hanya diketahui oleh si penerima. Tanpa adanya “private key” tersebut, mustahil seseorang dapat melakukan deskripsi terhadap pesan atau dokumen yang ada. Dengan kata lain, setiap orang yang ingin berkomunikasi akan memiliki sepasang kunci:
1. Kunci yang diketahui oleh umum (public key) dan
2. Kunci yang hanya diketahui secara pribadi (private key).

Dengan adanya sistem semacam ini, maka kekurangan-kekurangan pada metoda “symmetric encryption” dapat teratasi:
• Setiap orang hanya perlu mengingat kunci pribadinya, karena kunci untuk berkomunikasi ke orang-orang lain dapat dengan mudah ditemukan pada daftar kunci; • Algoritma pemetaan bekerja berdasarkan pasangan kunci, sehingga walaupun seseorang memiliki salah satu kunci yang sama, namun jika pasangan kuncinya berbeda, tidak akan dapat dipergunakan untuk mendeskripsikan pesan orang lain; dan • Dengan sendirinya problem autentifikasi akan terselesaikan karena yang bersangkutan pasti akan menggunakan kunci yang benar (bukan kunci orang lain) agar dapat dibaca oleh mereka yang memiliki pasangan kuncinya.

Mekanisme penyandian di atas biasa pula dipergunakan dalam dunia E-Commerce untuk menjaga kerahasiaan sebuah data, misalnya:
• Data nomor kartu kredit yang hanya boleh diketahui oleh si pengirim dan bank atau lembaga keuangan tertentu; • Nomor identifikasi pengguna (user id) dan password yang hanya boleh diketahui oleh konsumen dan perusahaan penyedia jasa E-Commerce; • Mengirimkan daftar pelanggan beserta rincian profilnya yang secara prinsip merupakan milik perusahaan yang tidak boleh dilihat para saingan bisnis; • Melakukan download dokumen atau produk digital lainnya yang hanya dapat dibaca oleh mereka yang secara sah telah membeli; dan lain sebagainya.

Satu-satunya kelemahan sistem ini adalah implementasinya secara teknis yang memakan waktu cukup lama untuk melakukan pengkodean dengan kunci publik. Berbagai teknik baru telah diperkenalkan di dunia pengamanan data sebagai alternatif untuk melakukan komunikasi secara lebih cepat sekaligus aman.

TWO FISH


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:

  1. Melakukan enkripsi data pada 285 siklus per block di atas Pentium Pro setelah menjalankan key setup 12700 siklus clock.
  2. Melakukan enkripsi data pada 860 siklus per blok sdi atas Pentium Pro setelah menjalankan key setup 1250 siklus clock.
  3. 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:

  1. Blok cliper simetris 128-bit
  2. Panjang key-nya adalah 128 bit, 192 bit, dan 256 bit.
  3. Tidak ada key-key yang lemah.
  4. Memiliki efisiensi, baik pada Pentium Pro maupun pada software dan hardware dari platform yang berbeda.
  5. 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.
  6. Simple design, baik untuk memudahkan analisa dan implementasi.

Sebagai tambahannya, ditekankan criteria kinerja sebagai berikut:

  1. Mampu menerima panjang key diatas 256.
  2. Mengenkripsi data kurang dari 500 siklus clock per block di atas Pantium, Pentium Pro dan Pentium II, bagi algoritma yang dioptimasi secara penuh.
  3. 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.
  4. Mengenkripsi data kurang dari 5000 siklus clock per blok di atas Pentium, Pentium Pro, dan Pentium II tanpa melakukan key setup terlebih dahulu.
  5. Tidak menggunakan operasi-operasi yang dapat mengurangi kinerja ketika dijalankan pada mekroproc\sesor 3-bit yang lain.
  6. Tidak menggunakan operasi-operasi yang mengurangi efisiensi ketika dijalankan di atas processor 8-bit atau 16-bit.
  7. Tidak menggunakan operasi-operasi yang mengurangi efisiensi ketika dijalankan di atas processor 64-bit, seperti Merced.
  8. Tidak melibatkan elemen apapun yang membuat tidak efisien dalam hal hardware.
  9. Memiliki bermacam kinerja yang mengacu pada key-schedule.
  10. Mengenkripsi data dalam waktu kurang dari 10 millidetik pada processor 8-bit.
  11. Dapat diimplementasikan di ats processor 8-bit dan dengan RAM 64 byte saja.
  12. 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.

Kamis, 20 Desember 2007

Algoritma RC-5 in C language


Algoritma Enkripsi Rivest Code 5 (RC-5)




Sekilas niyh…

RC-5 (Rivest Code-5) merupakan enkripsi stream simetrik yang dibuat oleh RSA Data Security, Inc (RSADSI). Metode enkripsi ini pada awalnya dirancang untuk enkripsi yang menggunakan mikroprosesor (perangkat keras), tetapi pada tahap pengembangannya algoritma ini cocok diterapkan dengan menggunakan perangkat keras maupun perangkat lunak. Secara ringkas algoritma ini bekerja dengan penambahan modulus 2w,melakukan EX-OR dan melakukan rotasi x kekiri dengan jumlah y bit. RC-5 memiliki kelebihan dalam menentukan jumlah kata kunci yang digunakan, hal ini berarti akan memilih tingkat keamanan yang digunakan sesuai dengan aplikasinya. Tulisan ini membahas tentang algoritma enkripsi RC-5 yang dikemukakan oleh Ronald L.Rivest dari MIT Laboratory for Computer Science. Metode penulisan dilakukan dengan studi literartur terhadap buku dan bahasan-bahasan di internet yang berhubungan dengan algoritma enkripsi terutama algoritma RC-5.

Algoritma RC-5

Pada bagian ini kita menjelaskan algoritma RC5, yang terdiri dari tiga komponen: algoritma key expansion, algoritma enkripsi, dan algoritma dekripsi.

Input plaintext ke RC5 terdiri dari dua word w-bit, yang ditandai dengan A dan B. RC5 menggunakan expanded key table (key table yang diperluas), S[0…t – 1], terdiri dari t = 2(r + 1) word w-bit. Algoritma key expansion menginisialisasi S dari parameter key rahasia dari (yang diberikan oleh) user. (Sebagai catatan tabel S dalam enkripsi RC5 bukan “S-box” seperti yang yang digunakan di DES; RC5 menggunakan entry dalam S secara sekuensial, satu pada satu waktu).

Diasumsikan konvensi standard ``little-endian`` untuk mem-packing byte menjadi blok input/output: byte yang pertama menempati posisi bit low order pada register A, dan seterusnya, sehingga byte keempat menempati posisi bit high-order, byte kelima menempati posisi bit low-order pada B, dan byte kedelapan (terakhir) menempati posisi bit high order di B.

Proses enkrip-nya

Kita asumsikan bahwa blok input diberikan dalam dua register w-bit A dan B. Kita juga mengasumsikan bahwa key expansion telah dijalankan, sehingga array S[0…t – 1] telah dihitung. Berikut ini adalah algoritma enkripsi dalam pseudo-code.

A=A+S[0];

B=B+S[1];

for i=1 to r do

A=((A Å B) <<<>

B=((BÅ A) <<<>

Outputnya berada di dalam register A dan B. Kita mencatat (atau memperhatikan) exceptional simplity dari 5 baris algoritma ini.

Kita juga mencatat bahwa setiap round (putaran) RC5 meng-update kedua register A dan B, dimana satu “round” dalam DES hanya meng-update setengah dari registernya. Suatu “half-round” RC5 (satu dari pernyataan penugasan meng-update A atau B dalam body dari loop diatas) mungkin lebih dapat dianalogi terhadap satu round DES).









Gambar 3. Algoritma enkripsi RC-5

Dari flow chart diatas, A merupakan plaintext yang diproses disebelah kiri setelah ditambahkan dengan dengan hasil key ekspansi dan B merupakan bagian plaintext yang diproses disebelah kanan yang juga ditambahkan dengan hasil key ekspansi. Tahap berikutnya dilakukan proses EX-OR terhadap masing-masing plantext dan dilakukan rotasi (putaran). Setelah dilakukan putaran sebanyak r kali, data-data ini digabungkan kembali membentuk ciphertext yang telah siap dikirimkan ke penerima atau diproses selanjutnya.

Proses dekrip-nya

Proses dekripsi dilakukan penerima terhadap data yang sudah dalam bentuk ciphertext. Proses ini dapat dilakukan dengan algoritma sebagai berikut :

for i= r downto 1 do

B=((B – S [2 * i + 1]) >>> A) Å A;

A=((A – S [2 * i]) >>> B) Å B;

B= B- S[1];

A= A – S[0];

Data-data dari ciphertext dikembangkan menjadi dua bagian A dan B selanjutnya di lakukan pengurangan dengan hasil key ekspansi dan dirotasi sebanyak r sambil dilakukan operasi EX-OR terhadap data tersebut. Tahap akhir untuk mendapatkan plaintext adalah dengan melakukan kembali proses pengurangan ke masing-masing bagian dengan hasil key ekspansi. Data-data ini kemudian digabungkan kembali membentuk plaintext sesuai dengan yang dikirimkan pengirim atau data awal sebelum proses enkripsi.

Key Expansion

Rutin key expansion memperluas kunci rahasia user K untuk mengisi array key yang diperluas S, sehingga S menyerupai suatu array t = 2(r + 1) word biner random yang ditentukan oleh K. Algoritma key expansion menggunakan dua “magic constants”, dan terdiri dari tiga bagian algoritmik sederhana.

Definisi dari Magic Constants. Algoritma key-expansion menggunakan dua konstanta biner berukuran word Pw dan Qw. Konstanta biner tersebut didefinisikan untuk sembarang w sebagai berikut :

Dimana :

e = 2.718281828459 ® Nilai logaritma dasar

f = 1.6180333988749 ® golden ratio

Dimana Odd(x) (bilangan ganjil (x))adalah integer ganjil (odd) terdekat terhadap x (dibulatkan keatas jika x adalah integer genap, meskipun hal ini tidak terjadi disini). Untuk w = 16, 32, dan 64, konstanta ini diberikan berikut ini dalam biner dan dalam heksadesimal.

P16= 1011011111100001 = b7e1.

Q16= 1001111000110111= 9e37.

P32= 10110111111000010101000101100011 = b7e15163.

Q32=10011110001101110111100110111001 = 9e3779b9.

P62= 1011011111100001010100010110001010001010111011010010101001101011

= b7e151628aed2a6b.

Q64= 1001111000110111011110011011100101111111010010100111110000010101

= 9e3779b97f4a7c15.

Merubah Kunci Dari Bit Ke Word

Langkah algoritmik pertama dari key expansion adalah untuk meng-copy kunci rahasia K[0…b – 1] ke array L[0…e – 1] dari word c = [b/u], dimana u = w/8 adalah jumlah byte/word. Operasi ini dilakukan dalam cara yang alami, menggunakan kunci byte konsekutif (berulang) u dari K untuk memenuhi setiap word dalam L, byte low order sampai byte high order. Posisi byte yang tidak terisi dari L dibuat 0. pada kasus ini b = c = 0 kita me-reset c ke 1 dan me-set L[0] menjadi 0.

Pada mesin “little-endian” seperti pada Intel 486, task diatas dapat diselesaikan hanya dengan membuat array L menjadi 0, dan kemudian meng-copy string K secara langsung ke posisi memori yang merepresentasikan L. Pseudocode berikut ini mencapai efek yang sama, diasumsikan semua byte adalah “unsigned” dan semula array L dibuat 0.

C=[max(b,1)/u]

for i=b-1 downto 0 do

L[i/u]=(L[i/u] <<<8)>

Menginisialisasi Array S

Langkah algoritmik kedua dari key expansion adalah untuk menginisialisasi array S menjadi pola bit pseudo-random tertentu yang tetap (key-independent), menggunakan deret aritmetika modulo 2w ditentukan oleh “magic constant” Pw dan Qw. Karena Qw ganjil, deret aritmetik memiliki periode 2w.

S[0] = Pw;

for i=1 to t-1 do

S[i] = S[i-1]+Qw;

Dari algoritma diatas terlihat bahwa pada kondisi 0 S[0] berisi Pw dan pada itersi i=1 dan seterusnya, S[i] akan berisi S[i-1] + Qw.

Penggabungan Kunci

Langkah algoritmik ketiga dari key expansion adalah untuk menggabungkan kunci rahasia user dalam tiga cara pada array S dan L. Lebih tepatnya, dikarenakan ukuran yang berbeda secara potensial pada S dan L, array yang lebih besar akan diproses tiga kali, dan yang lainnya dapat ditangani lebih dari tiga kali. Bentuk algoritma proses dapat dilihat berikut ini :

i=j=0;

A=B=0;

do 3 * max(t,c) times

A=S[i]=(S[i]+A+B) <<>

B=L[j]=(L[j]+A+B) << (A+B);

i=(i+1) mod (t);

j=(j+1) mod(c);

Bentuk Implementasi Dalam Bahasa C

(please…give ur comment!!!)

Implementasi ini dilakukan terhadap format RC-5 32bit, 12 putaran dengan 16 byte kata kunci [7].

# include

typedef unsigned long int WORD; /* Panjang word 32bit=4 byte*/

#define w 32 /* Ukuran word dalam bit*/

#define r 12 /* Jumlah putaran*/

#define b 16 /* Jumlah kata kunci*/

#define c 4 /* Jumlah word*/

#define t 26 /* Ukuran tabel S=2*(r+1)*/

WORD S[t]; /* Tabel pengembangan key*/

WORD P = 0xb7e15163, Q=0x9e3779b9; /* Konstanta magic*/

/* Operasi putaran*/

#define ROTL (x,y) (((x)<<(y&(w-1)))|((x)>>(w-(y&(w-1)))))

#define ROTR (x,y) (((x)>>(y&(w-1)))|((x)<<(w-(y&(w-1)))))

void RC5_ENCRYPT (WORD *pt, WORD *ct) /* proses enkripsi*/

{

WORD i, A=pt[0]+S[0], B=pt[1]+S[1];

for (i=1;i<=r;i++)

{

A=ROTL (A^B,B)+S[2*i];

B=ROTL (B^A,A)+S[2*i+1];

}

ct[0]=A; ct[1]=B;

}

void RC5_DECRYPT (WORD *ct, WORD *pt) /* Proses dekripsi*/

{

WORD i, B=ct[1], A=ct[0];

for (i=r;i>0;i--)

{

B=ROTR (B-S[2*i+1],A)^A;

A=ROTR (A-S[2*i],B)^B;

}

pt[1]=B-S[1]; pt[0]=A-S[0];

}

void RC5_SETUP (unsigned char *k) /* Proses input kunci rahasia*/

{

WORD i, j,k, u=w/8, A, B, L[c];

for (i=b-1,L[c-1]=0;i!=-1;i--)

L[i/u]= (L[i/u]<<8)>

for (S[0]=P,i=1; i

S[i] = S[i-1]+Q;

for (A=B=i=j=k=0;k<3*t;k++,i=(i+1)%t,j=(j+1)%c)

{

A=S[i]=ROTL (S[i]+(A+B),3);

B=L[j]=ROTL (L[j]+(A+B),(A+B));

}

}

void printword(WORD A) /* Proses input plaintext acak*/

{

WORD k;

for (k=0;k

printf ("%02.21X",(A>>k)&0xFF);

}

void main()/* Program utama*/

{

WORD i,j,k,pt1[2],pt2[2],ct[2]={0,0};

unsigned char key[b];

if (sizeof(WORD) !=4)

printf ("RC5 ERROR : WORD has %d bytes.\n",sizeof(WORD));

printf ("RC5-32/12/16 examples : \n");

for (i=1;i<6;i++)

{

pt1[0]=ct[0];pt[1]=ct[1];

for (j=0;j

RC5_SETUP(key);

RC5_ENCRYPT (pt1,ct);

RC5_DECRYPT(ct,pt2);

printf("\n%d. key= ",i);

for (j=0;j

printf ("02.2X",key[j]);

printf ("\n Plaintext ");

printword(pt1[0]);

printword(pt1[1]);

printf("----> ciphertext ");

printf word(ct[0]);

print word(ct[1]);

printf("\n");

if (pt1[0] !=pt2[0] || pt1[1] !=pt2[1])

printf ("Decryption Error");

}

}

Hasil simulasi program adalah :

Key = 91 5F 46 19 BE 41 B2 51 63 55 A5 01 10 A9 CE 91

Plaintext = 21A5DBEE154B8F6D

chipertext = F7C013AC5B2B8952

Menurut saya…

Pada kondisi nyata, semua algoritma enkripsi data yang ada masih dapat dipecahkan kuncinya oleh para kritoanalis, hal ini menunjukan bahwa tidak ada algoritma enkripsi data yang sempurna, termasuk juga disini algoritma RC-5. Untuk enkripsi model RC-5 masih terdapat beberapa kelebiha dan kelemahan yaitu diantaranya;.

A. Kelebihan

§ Kesulitan mengetahui sebuah nilai dalam table pengembangan key karena prose pengembangan key dilakukan secara random.

§ Algoritma enkripsi ini dapat diimplementasikan dalam bentuk hard ware, karena pada dasarnya algoritm in menggunakan operasi yang dapat dilakukan oleh perangkat keras seperti prosesor.

§ Tingkat keamanan dari enkripsi yang dilakukan dapat dipilih dengan

menggunakan jumlah kata kunci yang digunakan, hal ini terlihat bahwa jumlah kata kunci akan menentukan jumlah pembagian plaintext yang akan dienkripsi.

B. Kekurangan

§ Algoritma RC-5 dapat diserang dengan menggunakan analisa dari bagian table pengembangan kunci rahasia.

§ Salah satu kelemahan umum dari metode enkripsi simetrik adalah masalah manajemen kunci. Hal ini juga terdapat pada RC-5, dimana penerima harus memiliki kunci yang sama untuk membuka chipertext yang dikirimkan kepadanya. Hal ini juga merupakan suatu kelemahan yang dapat dimanfaatkan oleh penyerang.

Regards: M N F