Selasa, 22 Desember 2015

ALGORITMA KEAMANAN PADA SISTEM OPERASI JARINGAN PART II

1.  Algoritma MARS

MARS adalah cipher block yang didesain oleh tim dari IBM Corporation, yaitu Carolynn Burwick, Don Coppersmith, Edward D’Avignon, Rosario Gennaro, Shai Halevi, Charanjit Jutla, Stephen M.Matyas, Jr., Luke O’Connor, Mohammad Peyravian, David Safford, dan Nevenko Zunic. MARS merupakan block cipher dengan panjang blok 128 bit dan panjang kunci fleksible dari 128 bit sampai 499 bit. Algoritma ini bekerja dengan word 32 bit, dan menggunakan jaringan Feistel (Feistel network) tipe-3. MARS menerima input dan menghasilkan output empat word 32 bit.
Cipher ini berorientasi pada word, di mana semua operasi internalnnya bekerja pada word 32 bit, sehingga struktur internal dari MARS adalah endian-neutral (code yang sama dapat bekerja pada mesin little-endian maupun big-endian). Jika input (atau output) cipher adalah byte stream, maka digunakan pengurutan little-endian byte untuk menginterpretasi masingmasing empat byte sebagai sebuah word 32 bit.
Gambar 4 memperlihatkan skema dari MARS yang dibagi menjadi 3 fase. Fase pertama, “Forward Mixing” berisi pengacakan besarbesaran dan “hujan kunci” untuk membuat frustasi serangan chosen-plaintext. Di dalam fase ini dilakukan penambahan word kunci ke word data, diikuti dengan delapan putaran berbasis S-Box. Fase kedua merupakan “Cryptographic Core” (inti kriptografi) dari cipher ini, yang berisi 16 putaran transformasi dengan jaringan Feistel. Untuk memastikan enkripsi dan dekripsi memiliki kekuatan yang sama, maka 8 putaran pertama dilakukan dengan “forward mode” sedangakan sisanya dengan “backward mode”. Fase terakhir, “Backward Missing” operasi yang dilakukan hampir sama seperti fase pertama, namun merupakan kebalikan dari fase pertama. Fase ini bertujuan melindungi cipher dari serangan chosen-ciphertext.

a.  Fase I: Forward Mixing

Pada fase ini, pertama kali yang dilakukan adalah menambahkan masing-masing word data dengan word kunci. Selanjutnya masuk ke dalam delapan putaran pengacakan jaringan Feistel tanpa kunci, dikombinasikan dengan beberapa operasi pengacakan tambahan. Masing-masing putaran, digunakan sebuah word data (disebut dengan source word) untuk modifikasi tiga word data lainnya (drisebut dengan target words). Keempat byte source word dijadikan indeks ke dua S-Box, S0 dan S1 yang berisi 256 word 32 bit, dan elemen SBox yang berkoresponden di-XOR-kan atau ditambahkan kepada tiga target words
Untuk putaran selanjutnya, keempat word dirotasikan, sehingga target word pertama menjadi source word berikutnya, target word kedua menjadi target word pertama, target word ketiga menjadi target word kedua, dan source word menjadi target word ketiga. Sebagai tambahan, setelah empat putaran, salah satu target word ditambahkan kepada source word. Contohnya, setelah putaran pertama dan kelima, target word ketiga ditambahkan kembali ke source word. Alasan dari pengacakan tambahan ini adalah untuk mengurangi beberapa serangan differential yang mudah, untuk memecah simetri pada fase mixing.

b.  Fase II: Main Keyed Transformasion

Inti dari cipher MARS adalah jaringan Feistel tipe-3 yang terdiri dari 16 putaran. Masingmasing putaran digunakan sebuah fungsi E (E dari kata expansion) yang berbasiskan pada sebuah kombinasi baru dari perkalian, rotasi dan S-Box. Fungsi ini menerima input sebuah wordi data dan mengembalikan tiga word data sebagai output. Pada setiap putaran, digunakan sebuah word data sebagai input fungsi E, dan tiga output word dari fungsi E ditambahkan atau di-XOR-kan dengan tiga word data lainnya. Sebagai tambahan, source word dirotasikan 13 posisi ke kiri.

c.  Fase III: Backward Mixing

Fase ini sama dengan fase forwars mixing, hanya bedanya word data diproses dengan urutan yang berkebalikan. Sama seperti di forward mixing, digunakan juga sebuah source word untuk memodifikasi tiga word target. Untuk source word b0, b1, b2, b3, maka b0 dan b2 digunakan sebagai indeks ke S-Box S1 dan b1 dan b3 indeks untuk S0. S1[b0] di-XOR-kan dengan target word pertama, kurangkan S0[b3] dengan target word kedua, dan kurangkan S1[b2] dengan target word  ketiga dan XOR-kan S0[b1] juga dengan target word ketiga. Terakhir, rotasikan source word 24 posisi ke kiri. Untuk putaran selanjutnya, keempat word dirotasikan, sehingga target word pertama menjadi source word berikutnya, target word kedua menjadi target word pertama, target word ketiga menjadi target word kedua, dan source word menjadi target word ketiga.

2.  Algoritma RC6

Algoritma yang mulai diperkenalkan sekitar tahun 1998 ini adalah hasil pengembangan dari algoritma RC5. Algoritma ini, sama seperti RC1 sampai RC5, dikembangkan oleh Laboratorium RSA di San Mateo, USA. Algoritma ini lebih dispesifikasikan dengan sebutan RC6-w/r/b dengan w adalah panjang ukuran kata dalam bit, r adalah jumlah putaran (rounds) dari proses enkripsi dengan r tidak negatif, dan b adalah panjang kunci enkripsi dalam bytes. Putaran yang dimaksudkan disini adalah sama dengan pada DES. Satu kali putaran sama dengan satu kali jaringan Feistel. Agar sesuai dengan persyaratan dari AES, maka RC6 menggunakan ukuran w = 32 dan r = 20 dengan panjang kunci mulai dari 16, 24, sampai 32 byte.
RC6 beroperasi pada empat unit kata dengan masingmasing sepanjang w bit. Operasi yang dilakukanantara lain sebagai berikut:
a + b Penambahan modulo 2w
a b Pengurangan modulo 2w
a 􀙒 b Exclusive-or untuk w bit kata
a × b Multiplikasi modulo 2w
a ‹« b Rotasi untuk kata a ke kiri sebanyak jumlah yang diberikan least significant log w bits dari b
a ›» b Rotasi untuk kata a ke kanan sebanyak jumlah yang diberikan least significant log w bits dari b
Dengan operasi logaritma berbasis dua.

a.  Key Scheduling pada RC6

RC6 juga melakukan proses enkripsi dengan menggunakan kunci yang berbeda pada setiap putarannya. Pembentukan kunci pada RC6 tidak terlalu berbeda dengan pembentukan kunci pada RC5. Secara garis besar, pembentukan kunci dilakukan dengan mengambil dari b bytes kunci yang dimasukkan oleh user dimana 0 ≤ b ≤ 255. Sejumlah byte nol ditambahkan secukupnya untuk panjang kunci sama dengan jumlah bulat kata yang tidak nol. Kunci ini kemudian dimasukkan ke dalam array sepanjang c dimana tiap array diisi dengan satu byte dari kunci. Dari kunci ini, diambil sejumlah 2r + 4 kata dengan panjang w bits tiap kata dan disimpan dalam array S[0,...,2r + 3].

b.  Operasi enkripsi dan dekripsi pada RC6

RC6 beroperasi menggunakan empat register A, B, C, D sepanjang w bit yang berisi masukan awal dari plain text dan bisa juga hasil akhir cipher text pada akhir proses enkripsi. Byte pertama dari plain text dimasukkan ke dalam least significant byte A dan byte terakhir dari plain text dimasukkan ke dalam most significant byte D. Proses berikutnya adalah hasil enkripsi atau dekripsi dengan menggunakan operasi pada jaringan Feistel.

c.   Fleksibilitas RC6

Kode RC6 yang sangat pendek merupakan sebuah kemampuan tersendiri dari algoritma ini, dan membuat algoritma ini sangat sepadan bila diimplementasikan ke dalam lingkungan smart card. Ditambah lagi karena RC6 tidak melakukan proses pembuat sub key atau yang kita sebut key scheduling pada saat proses enkripsi. Namun untuk platform yang lain, RC6 tidak terlalu banyak memberikan hasil yang sebaik platform pentium. Bahkan, RC6 berjalan lebih lambat hingga 3 kali lipat pada platform pentium pro.

d.  Keamanan RC6

Serangan paling sederhana dan dapat menghasilkan pada RC6 diperkirakan adalah exhaustive search untuk kunci RC6. Serangan ini dapat digunakan pada block cipher apapun. Dengan RC6, operasi yang dibutuhkan untuk mencari key atau expanded key array adalah antara 28 hingga 21408 operasi. Namun dapat digunakan meet in the middle attack sehingga dibutuhkan 2704 komputasi. Untuk ukuran panjang kunci yang bersesuaian dengan AES, serangan ini jelas tidak mungkin.

3.  Algoritma Rijndael

Adalah algoritma yang beroperasi dalam byte, bukandalam bit. Algoritma ini mampu melakukan enkripsi terhadap plain text sebesar 16 byte atau 128 bit. Selain itu, algoritma ini juga menggunakan kunci sebanyak 16 byte. Dengan kunci sepanjang 128 bit, maka terdapat 2128 = 3,4 x 1038 kemungkinan kunci. Dengan demikian, waktu yang dibutuhkan untuk menebak kunci yang ada dengan komputer yang cepat pun membutuhkan 1018 tahun. Selain panjang kunci yang lumayan banyak, kunci internal pada algoritma ini juga selalu berubah pada setiap putarannya. Kunci internal ini disebut dengan round key. Pembangkitan round key diambil dari cipher key. Mirip dengan DES, algoritma Rijndael juga melakukan putaran enkripsi (enciphering) sebanyak 10 putaran namun bukan putaran yang merupakan jaringan Feistel. Enciphering pada Rijndael melibatkan empat proses yaitu:
1. Sub Bytes
2. Shift Rows
3. Mix Columns
4. Add Round Key
Secara umum, proses enkripsi dilakukan dengan initial round yaitu melakukan XOR antara state awal yang masih berupa plain text dengan cipher key. Kemudian melakukan keempat proses diatas sebanyak 9 kali putaran, dan terakhir adalah final round yang melibatkan proses sub bytes, shift rows, dan add round key.

a.  Fleksibilitas Rijndael

Sebagai varian dari Square Cipher, Rijndael memiliki kemampuan untuk bekerja sangat baik pada platform apapun. Ditambah dengan operasi yang menggunakan table lookup dan operasi XOR membuat prosesnya menjadi tidak terlalu rumit. Walaupun proses enkripsi dan dekripsinya tidak terlalu identik, namun struktur umum dan performanya tidak dapat secara langsung dibedakan. Rijndael, memiliki keuntungan yang tinggi dalam smart card dikarenakan penggunaan ROM yang cukup kecil. Namun untuk penggunaan smart card, proses dekripsi malah membuat ukuran kodenya menjadi bertambah dan kecepatan dekripsi lebih lambat dari pada kecepatan enkripsi, mencapai 2 kali lipat.

b.  Keamanan Rijndael

Untuk Rijndael, tipe serangan square attacks cukup menjadi dikenal sebagai serangan terbaik terhadap Rijndael. Square attacks adalah serangan yang memanfaatkan struktur orientasi byte. Algoritma ini bekerja dengan baik pada square cipher yang bekerja dalam 6 putaran. Untuk Rijndael dengan kunci sepanjang 128 bit, maka serangan ini lebih cepat dari pada exhaustive search,hingga 6 kali iterasi Rijndael. Namun untuk AES, jelas bahwa serangan ini tidak mungkin dipraktekkan karena jumlah putaran pada Rijndael, mengakibatkan batas keamanan untuk algoritma ini menjadi lebih besar.

4.  Algoritma Serpent

Algoritma Serpent didesain oleh Ross Andersen dari Cambridge Universitiy Inggris, Eli Biham dar Technion Israel, dan Lars Knudsen dari University of Bergen Norwegia. 10 Serpent adalah algoritma dengan 32 putaran jaringan SP yang beroperasi pada empat word 32 bit, yang berarti ukuran bloknya adalah 128 bir. Semua nilai yang digunakan direpresentasikan sebagai bitstream. Untuk komputasi internal, semua nilai direpresentasikan dalam little-endian, di mana word pertama adalah least-significant word, dan word terakhir adalah most-significant word. Secara eksternal, setiap blok dituliskan sebagai plain hexadesimal 128 bit . Serpent mengenkripsi plainteks P 128 bit menjadi cipherteks C 128 bit dalam 32 putaran dengan kontrol dari 33 sub-kunci 128 bit K0,...,K32. Panjang kunci masukan user fleksibel, namun untuk memenuhi persyaratan AES, maka ditetapkan 128, 192,dan 256 bit. Kunci yang lebih pendek dari 256 bit dipetakan menjadi kunci sepanjang 256 bit dengan menambahkan satu “1” bit pada akhir MSB, dan diikuti dengan “0” bit sampai mencapai 256 bit.

a.  S-Box Serpent

S-Box Serpent adalah permutasi 4 bit dengan ketentuan sebagai berikut:
1. Masing-masing karakteristik diferensial memiliki probabilitas maksimal ¼, dan sebuah input dengan perbedaan satu bit tidak akan meghasilkan output dengan perbedaan satu bit
2. Masing-masing karakteristik linear memiliki probabilitas antara ½ ± ¼, dan hubungan linear antara sebuah bit pada input dan sebuah bit pada output memiliki probabilitas ½ ±1/8
3. Urutan non-linear bit output sebagai fungsi dari bit input maksimal 3 Pembangkitan S-Box terinspirasi dari EC4, yaitu menggunakan matriks dengan 32 array yang masing-masing memiliki 16 entri.
Matriks diinisialisasi dengan 32 baris S-Box DES dan ditransformasikan dengan menukar entri pada array ke-r bergantung pada nilai entri ke-(r+1) array dan pada inisial string yang merepresentasikan kunci. Jika array hasilnya memenuhi ketentuan yang telah disebutkan sebelumnya, maka simpan array sebagai Serpent S-Box. Ulangi prosedur tadi sampai 8 S-Box berhasil dibangkitkan.

b.  Algoritma Twofish/Blowfish

Twofish didesain oleh Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, dan Niels Ferguson dari Laboratorium Counterpane System. Bruce Schneier juga mendesain algoritma Blowfish yang telah diimplementasi oleh lebih dari 130 aplikasi komersial. Twofish yang resmi, yaitu dengan 16 putaran, sampai saat ini belum terpecahkan. Namun untuk 5 putaran, telah berhasil dipecahkan dengan 222,5 plainteks terpilih dan 251 usaha (effort).
Twofish adalah block cipher 126 bit yang menerima kunci dengan panjang yang fleksibel sampai 256 bit. Cipher ini menggunakan cukup banyak metode dalam implementasinya, meliput jaringan Feistel (Feistel network), SBox, Matriks MDS, transformasi Pseudo-Hadamard, whitening, dan key schedule.
Gambar 6 memperlihatkan skema dari block cipher Twofish. Twofish menggunakan sebuah struktur seperti jaringan Feistel 16 putaran dengan tambahan whitening terhadap input dan output. Yang membuatnya bukan termasuk jaringan Feistel murni adalah adanya rotasi 1 bit. Sebenarnya rotasi ini dapat dimasukkan ke dalam fungsi F, agar dapat membentuk jaringan Feistel murni, namun hal ini membutuhkan rotasi tambahan terhadap word sebelum output dari tahap whitening.\

Plainteks dibagi menjadi empat word 32 bit. Pada tahap whitening input, word tersebut di-XOR-kan dengan empat word kunci, kemudian masuk ke dalam 16 putaran. Pada setiap putaran, dua word sebelah kiri digunakan sebagai masukan untuk dua fungsi g (salah satu word dirotasi 8 bit terlebih dulu). Fungsi g terdiri dari empat S-Box key-dependent, dan diikuti dengan tahap pengacakan linear menggunakan matriks MDS.
Hasil dari dua fungsi g dikombinasikan menggunakan Pseudo-Hadamard Transform (PHT), dan penambahan dua word kunci. Kedua hasil ini kemudian di-XOR-kan dengan dua word plainteks sebelah kanan (salah satunya dirotasikan 1 bit ke kiri, dan yang lain dirotasikan 1 bit ke kanan terlebih dulu). Bagian kiri dan kanan ini kemudian di-swap (tukar) untuk masuk ke putaran selanjutnya. Setelah 16 putaran, proses swap terakhir dikembalikan lagi keempat word di-XOR-kan dengan word kunci untuk menghasilkan cipherteks.

Tidak ada komentar:

Posting Komentar