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.
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
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