<<

CIPHER BLOCK MENGGUNAKAN LOKI

Raden Fitri Indriani – NIM : 13503020 Program Studi Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung E-mail : [email protected]

Abstrak

Di dalam kriptografi ada berbagai macam algoritma yang dapat digunakan, baik yang termasuk algoritma kriptografi modern maupun algoritma kriptografi klasik. Yang termasuk di dalam algoritma kriptografi modern adalah algoritma cipher block. Chiper block merupakan sebuah algoritma simetri yang mengoperasikan bit-bit yang mempunyai panjang yang sama. Sebagai contoh, ketika melakukan enkripsi, sebuah 128-bit blok plaintext akan menghasilkan sebuah 128-bit blok . Begitu pula dengan proses deskripsi. Sebuah 128-bit blok ciphertext akan menghasilkan 128-bit blok plaintext.

Sudah banyak sekali algoritma cipher block yang dikembangkan. Salah satunya adalah LOKI. Nama LOKI diambil dari salah satu nama dewa dalam mitos Skandinavia. LOKI pertama kali dipublikasikan oleh kriptografer Australia yaitu , Josef Pieprzyk, dan Jennifer Seberry pada tahun 1990. LOKI dibuat dengan tujuan untuk menggantikan DES (Data Standard). LOKI dibuat sangat mirip dengan struktur DES. Sejak pertama kali dibuat, LOKI terus diperbaiki yang menghasilkan beberapa versi LOKI seperti LOKI91 dan LOKI97.

Kata kunci: kriptografi modern,blok cipher, LOKI89, LOKI91, LOKI97

1. Pendahuluan pengamanan difokuskan pada keamanan kunci yang digunakan. Contohnya adalah Kriptografi adalah sebuah ilmu dan seni dengan menyembunyikan kunci yang yang memungkinkan pesan dikirim dalam digunakan dengan mengenkripsinya bentuk yang aman sehingga hanya dengan kunci yang lain. penerima yang berhaklah yang dapat membaca informasi di dalamya. Ada dua macam enkripsi yang Kriptografi sudah ada sejak jaman bangsa berdasarkan pada kunci yaitu algoritma Mesir sekitar 4000 tahun yang lalu. simetri dan algoritma asimetri. Algoritma Semakin berkembangnya jaman maka simetri menggunakan kunci yang sama semakin berkembang pula algoritma untuk dekripsi dan enkripsi (kunci kriptografi yang digunakan. Apalagi dekripsi dapat diturunkan dari kunci dengan jaman yang serba komputer enkripsi). Sedangkan algoritma asimetri sekarang ini, algoritma yang digunakan menggunakan kunci yang berbeda antara untuk mengamankan pesan pun semakin enkripsi dan dekripsi (kunci dekripsi tidak kompleks sehingga sulit dipecahkan oleh dapat diturunkan dari kunci dekripsi). para kriptanalis. Berbeda dengan Algoritma asimetri disebut juga algoritma kriptografi klasik, kriptografi modern kunci publik. Secara umum, algoritma menggunakan algoritma yang canggih dan simetri melakukan eksekusi lebih cepat rumit serta kunci rahasia untuk dibandingkan dengan algoritma asimetri mengekripsi dan mendekripsi data. [ECO06].

Kriptografi modern mempunyai basis pada kerahasiaan kunci yang digunakan, bukan pada kerahasiaan metode enkripsinya. Kunci rahasia haruslah tidak tampak ketika plainteks dan cipherteks dibandingkan. Kriptografi modern didasarkan pada persoalan matematika yang rumit seperti pemfaktoran bilangan prima, dan sebagainya. Desain sistem Gambar 1 Algoritma Simetri

1

Ukuran blok yang digunakan umumnya 64 bit atau 128 bit. Akan tetapi ada beberapa algoritma cipher blok yang menggunakan ukuran blok yang berbeda (bukan 64 bit maupun 128 bit). Ukuran blok 64 bit biasanya digunakan untuk desain yang dirancang sampai pertengahan tahun 1990. Gambar 2 Algoritma Asimetri Desain-desain baru umumnya menggunakan blok berukuran 128 bit. Jika Algoritma simetri terbagi menjadi dua plainteks akan dibagi menjadi blok-blok jenis yaitu algorithm dan berukuran 64 bit misalnya, tetapi ukuran block chiper algorithm. Stream cipher plainteks tersebut bukan kelipatan dari 64, algorithm dapat melakukan enkripsi maka digunakan skema agar sebuah bit single dari plainteks setiap plainteks tersebut tetap bisa dienkripsi. waktunya. Sedangkan algorithm melakukan enkripsi terhadap Ada beberapa mode operasi yang beberapa bit dari plainteks (biasanya 64 digunakan dalam blok cipher. Setiap mode bit) dan mengenkripsinya sebagai sebuah operasi memiliki karakteristik tersendiri kesatuan. untuk menghindari serangan-serangan yang mungkin muncul. Ukuran kunci 2. Algoritma Cipher Blok () yang umumnya digunakan adalah 40, 56, 64, 80, 128, 192 dan 256 bit. Algoritma cipher blok termasuk ke dalam Beberapa mode operasi yang digunakan algoritma simetri yang mengoperasikan untuk blok cipher adalah sebagai berikut. bit-bit yang panjangnya tetap dengan sebuah transformasi yang sama. Biasanya ƒ Electronic Code Book (ECB) plainteks dibagi menjadi blok-blok bit dengan panjang yang sama. Ketika Mode operasi ECB merupakan mode melakukan enkripsi, misalnya pada sebuah enkripsi yang paling sederhana blok plainteks yang panjangnya 64 bit dimana plainteks dibagi menjadi maka akan menghasilkan blok cipherteks beberapa blok yang berukuran sama sepanjang 64 bit juga. Begitu pula ketika dan setiap blok dienkripsi secara dilakukan dekripsi, sebuah blok cipherteks terpisah. sepanjang 128 bit akan menghasilkan sebuah blok plainteks sepanjang 128 bit. Kunci yang digunakan untuk melakukan enkripsi dan dekripsi mempunyai panjang yang sama dengan blok bit plainteks

Cipher blok terdiri dari dua buah algoritma yang berpasangan. Satu digunakan untuk melakukan enkripsi, E. Satu lagi digunakan untuk melakukan dekripsi, E-1. Kedua algoritma tersebut menerima dua buah input, yaitu sebuah Gambar 3 Enkripsi EBC blok input berukuran n bit dan sebuah kunci berukuran k bit, menghasilkan sebuah blok yang berukuran n bit.

Untuk kunci apapun yang digunakan, dekripsi merupakan fungsi invers dari enkripsi. Dengan demikan, algoritma enkripsi dan dekripsi dapat dirumuskan sebagai berikut.

-1 Ek (Ek(P)) = P Gambar 4 Dekripsi EBC

P = sebuah blok plainteks k = key

2 Kelemahan mode ini adalah sebuah plainteks akan dienkripsikan menjadi sebuah cipherteks yang identik. Dengan demikian, mode EBC ini tidak dapat menyembunyikan pola dari data. Hal ini mengakibatkan mode EBC tidak mendukung message confidentiality. Oleh karena itulah mode ini tidak disarankan untuk digunakan sebagai protokol kriptografi. Gambar 5 Enkripsi menggunakan mode CBC Berikut ini adalah sebuah contoh yang menunjukkan bahwa enkripsi dengan menggunakan mode EBC tidak dapat menyembunyikan pola data.

ƒ Cipher Block Chaining (CBC)

Cipher block chaining hampir serupa dengan EBC dalam hal pembagian plainteks menjadi blok-blok bit yang berukuran sama. Hanya saja, dalam

cipher block chaining setiap blok Gambar 6 Dekripsi menggunakan bergantung dengan blok yang mode CBC berdekatan dengannya. Hal ini disebabkan karena setiap blok ƒ Propagating Cipher Block Chaining plainteks dilakukan operasi xor (PCBC) dengan blok cipherteks sebelumnya. Untuk blok pertama, digunakan Propagating cipher block chaining Initialitation Vector (IV) sebagai didesain untuk melengkapi pengganti cipherteks sebelumnya. kekurangan yang terdapat pada cipher Dengan adanya intialitation vector, block chaining (CBC). Proses maka pesan menjadi unik. Akan enkripsi dan dekripsi dilakukan tetapi, CBC jarang digunakan. Mode dengan cara sebagai berikut. CBC mempunyai kelemahan yaitu jika terjadi kesalahan satu bit dalam C = E (P ⊕ P ⊕ C ) sebuah blok plainteks pada proses i k i i-1 i-1

enkripsi, maka blok-blok cipherteks P = D (C ⊕ C ⊕ P ) berikutnya dan blok cipherteks dari i k i i-1 i-1

plainteks yang bersangkutan akan Initialitation vector yang digunakan mengalami kesalahan pula. Akan tetapi jika kesalahan terjadi pada adalah mo ⊕ co. PCPB biasanya sebuah bit dalam sebuah cipherteks digunakan pada Kerberos dan pada proses dekripsi, maka hanya WASTE. Secara umum PCBC ini blok planteks yang bersangkutan dan jarang digunakan. sebuah blok plainteks berikutnya saja ƒ yang terkena dampaknya. Cipher FeedBack (CFB)

Mode CFB memperlakukan blok cipher seolah-olah seperti cipher aliran. Hal ini dilakukan dengan cara data dienkripsikan menjadi ukuran yang lebih kecil dari blok seperti 2 bit, 8 bit, dan seterusnya. Dengan demikian, mode CFB bekerja bukan pada blok lagi tetapi pada unit-unit yang terdiri dari beberapa buah bit.

Mode CFB membutuhkan sebuah queue dimana elemen dari queue

3 inilah yang akan dikenai fungsi enkripsi/dekripsi.

Gambar 9 Enkripsi menggunakan mode OFB

Gambar 7 Enkripsi menggunakan mode CFB

Gambar 10 Dekripsi menggunakan mode OFB

Jika terjadi kesalahan pada 1 bit blok Gambar 8 Dekripsi menggunakan plainteks maka hanya akan mempengaruhi mode CFB blok cipherteks saja. Hal ini juga berlaku untuk proses dekripsi. Kelemahan dari mode ini adalah jika terdapat kesalahan pada satu buah bit 3. LOKI89 yang dienkripsi, maka bit-bit selanjutnya juga akan salah. Hal ini juga LOKI dirancang oleh kriptografer berlaku untuk proses dekripsi. Australia yaitu Lawrie Brown, Josef Pieprzyk, dan Jennifer Seberry. LOKI ƒ Output FeedBack(OFB) didesain sebagai hasil dari analisis yang dilakukan secara detail terhadap blok Seperti halnya CFB, OFB juga cipher yang standar digunakan pada saat memperlakukan blok cipher seperti itu, yaitu DES (Data Encryption Standar). layaknya cipher aliran. Pada Dikarenakan ada versi terbaru dari LOKI prinsipnya mode OFB mirip dengan ini, maka LOKI yang dibuat pertama kali CFB. Perbedaannya adalah jika pada lebih dikenal dengan nama LOKI89 sesuai CFB yang dimasukkan ke dalam dengan tahun pembuatannya, walaupun antrian (queue) adalah hasil enkripsi LOKI pertama kali diperkenalkan pada (cipherteks). Sedangkan pada OFB tahun 1990. yang dimasukkan ke dalam antrian adalah elemen antrian terdepan yang LOKI didesain untuk menggantikan DES telah dikenakan fungsi enkripsi. sehingga strukturnya pun dibuat hampir sama dengan DES. LOKI menggunakan blok data sepanjang 64 bit dan kunci sepanjang 64 bit pula.

4 ™ Desain LOKI89 ™ Struktur LOKI89

Secara garis besar, desain dari LOKI89 sangat mirip dengan desain DES, termasuk : − Permutasi P dan penggunaannya dalam membentuk cipherteks tergantung daripada plainteks − Permutasi PC2 dan perputaran kunci dalam membentuk cipherteks tergantung dari kunci.

Desain S-Boxes dari LOKI89 berdasarkan pada kriteria nonlinier yang dibuat oleh Josef Pieprzyk, dan Jennifer Seberry. LOKI89 merupakan sebuah kelas dari , maksudnya adalah sebuah bentuk dari subtitusi dan permutasi (S-P) dan jaringan (Shannon).

Properti inti dari jaringan S-P adalah sebagai berikut. Gambar 7 Struktur LOKI89 − Properti avalanche − Properti completeness ™ Fungsi f LOKI89 Kedua buah properti di atas diimplementasikan dalam desain yang terdiri dari dua buah fase.

¾ Ekspansi Fungsi E Ekspansi fungsi E dilakukan dengan cara menduplikasi input dan kunci untuk mendukung autoclaving. Ekspansi fungsi E berdasarkan pada pemilihan bit-bit yang dilakukan secara regular. Ekspansi fungsi E didesain menggunakan input 32 bit untuk Gambar 8 Fungsi f LOKI89 memudahkan implementasi pada

perangkat lunak. ™ Kunci LOKI89

¾ Permutasi P Kunci yang digunakan oleh LOKI89 Permutasi dilakukan dengan adalah blok yang mempunyai panjang mengirimkan output dari sebuah S- 64 bit yang tidak menggunakan bit Box untuk menjadi input pada S- paritas. Dengan panjang 64 bit, maka Box lain yang akan diproses. jika kripanalisis menggunakan brute Permutasi ini dapat dibangkitkan force harus mencoba kemungkinan dengan fungsi yang berbeda-beda sebanyak 264 kali. yang terdapat pada nomor S-Box.

™ Desain S-Box LOKI89 ¾ Jadwal penggunaan kunci

Proses ini dilakukan dengan Desain S-Box yang digunakan oleh merotasikan kunci berukuran besar. LOKI pada dasarnya sama dengan S- Putaran dilakukan sebanyak 16 kali Box biasa dengan menggunakan berdasarkan hasil dari Bilham- properti completeness dan avalanche. Shamir karena jika kurang dari itu Prinsip utama dari desain S-Box ini dianggap tidak aman. adalah fungsi boolean dengan

nonlinier yang maksimum yang

dicanangkan oleh Josef Pieprzyk, dan

5 Jennifer Seberry. Nonlinear dari untuk menggeser 32 bit blok b ke kiri sebuah fungsi f pada sebuah set Fn sepanjang 12 bit. Sedangkan dari seluruh fungsi boolean dengan n ROR12(b) digunakan pada saat variable adalah minimum jarak perputaran untuk proses dekripsi yaitu Hamming (Hamming distance) antara untuk menggeser 32 bit blok b ke f dan kumpulan semua fungsi boolean kanan sepanjang 12 bit. linier Ln yang terdapat di Fn. Proses Enkripsi S-Box LOKI89 didesain untuk Proses enkripsi berikut ini akan menerima masukan sebanyak 12 dan melakukan enkripsi sebuah 64 bit mengeluarkan output sebanyak 8. Hal blok b dengan menggunakan kunci ini dilakukan dengan alasan untuk lokikey. memaksimalkan ketergantungan antar bit dan karena kedua angka tersebut Proses ini akan melakukan operasi merupakan nilai terbesar yang dapat XOR blok input dengan kunci, disimpan di tabel biasa (tidak implementasi perputaran LOKI terkomputerisasi). S-Box ini dipecah sebanyak 16 kali yang bertujuan menjadi fungsi yang terdiri dari 16 untuk menjamin bahwa blok keluaran baris dan 256 kolom. Dimana setiap merupakan hasil fungsi yang rumit fungsinya merupakan eksponensial antara blok masukan dan kunci, dan GF (28) sebagai berikut : yang terakhir adalah melakukan XOR kembali blok masukan dengan kunci. er Sfnr = (c+r) mod genr Setiap putaran akan melakukan Rumus tersebut mempunyai 30 perhitungan dengan menggunakan polinomial yang tidak dapat subkunci sepanjang 48 bit dengan diperkecil lagi, 24 perpangkatan yang rincian sebagai berikut : membentuk fungsi nonlinier maksimum. Pangkat 31 dipilih karena L(i) = R(i-1) dianggap merupakan nilai terkecil R(i) = L(i-1) XOR f(R(i-1),K(i)) yang menghasilkan nilai nonlinier yang maksimal. Untuk diingat bahwa 64 bit blok b masukan dianggap sebagai dua buah ™ Implementasi LOKI89 longword dimana bit-bit tersebut diberi nomor 0..63. ([63 62 ... 33 32] Berikut ini adalah salah satu [31 30 ... 1 0]). Dengan demikian L implementasi LOKI89 64 bit dalam adalah b[0] dan R adalah b[1]. bahasa C yang dites pada mesin little indian. Kode ini dibuat oleh Dikarenakan blok masukan dibagi Lawrence Brown. menjadi dua bagian (L dan R), maka kunci juga harus dibagi menjadi dua Fungsi f dideklarasikan dengan : bagian yang sama, yaitu KL dan KR static Long f(); dengan prinsip yang sama dalam S-box dideklarasikan dengan : pembagian blok masukan. Kemudian static short s(); setelah kunci dibagi menjadi dua Kunci 64 bit dideklarasikan dengan bagian, sekarang dilakukan operasi cara : XOR antara kunci dengan blok Long lokikey[2]= {0, 0}; masukan dengan cara sebagai berikut.

Fungsi perputaran didefinisikan L = ((Long *)b)[0] ^ KL; dengan cara sebagai berikut. R = ((Long *)b)[1] ^ KR;

ROL12(b) b = ((b << 12) | Kemudian dilakukan putaran (b >> 20)); sebanyak 16 kali menggunakan subkunci dengan cara sebagai berikut. ROR12(b) b = ((b >> 12) | (b << 20)); L ^= f(R, KL); ROL12(KL); ROL12(b) digunakan pada saat R ^= f(L, KR); perputaran untuk proses enkripsi yaitu ROL12(KR);

6 L ^= f(R, KL); L ^= f(R, KR); ROL12(KL); ROR12(KL); R ^= f(L, KR); R ^= f(L, KL); ROL12(KR); ROR12(KR); L ^= f(R, KL); L ^= f(R, KR); ROL12(KL); ROR12(KL); R ^= f(L, KR); R ^= f(L, KL); ROL12(KR); ROR12(KR); L ^= f(R, KL); L ^= f(R, KR); ROL12(KL); ROR12(KL); R ^= f(L, KR); R ^= f(L, KL); ROL12(KR); ROR12(KR); L ^= f(R, KL); L ^= f(R, KR); ROL12(KL); ROR12(KL); R ^= f(L, KR); R ^= f(L, KL); ROL12(KR); ROR12(KR); L ^= f(R, KL); L ^= f(R, KR); ROL12(KL); ROR12(KL); R ^= f(L, KR); R ^= f(L, KL); ROL12(KR); ROR12(KR); L ^= f(R, KL); L ^= f(R, KR); ROL12(KL); ROR12(KL); R ^= f(L, KR); R ^= f(L, KL); ROL12(KR); ROR12(KR); L ^= f(R, KL); L ^= f(R, KR); ROL12(KL); ROR12(KL); R ^= f(L, KR); R ^= f(L, KL); ROL12(KR); Setelah putaran selesai dilakukan, Operasi terakhir dari proses enkripsi tahap selanjutnya adalah dengan ini adalah dengan melakukan XOR melakukan XOR kembali antara antara blok masukan yang telah kunci dan blok masukan yang telah diputar dengan kunci. Operasinya diproses sebelumnya. adalah sebagai berikut. ((Long *)b)[0] = R ^ KL; ((Long *)b)[0] = R ^ KR; ((Long *)b)[1] = L ^ KR; ((Long *)b)[1] = L ^ KL; Fungsi f(r,k) Proses Dekripsi f(r,k) merupakan sebuah fungsi Seperti pada proses enkripsi, bagi LOKI89 yang kompleks dan nonlinier kunci menjadi dua bagian yaitu KL yang menghasilkan keluaran yang dan KR. Begitu pula dengan blok merupakan hasil dari fungsi kompleks yang akan dienkripsi dibagi menjadi dari masukan dan kuncinya. Caranya dua bagian yaitu L dan R. adalah data R(i-1) yang menjadi masukan akan melalui proses : Operasi yang dilakukan pada proses a. Penambahan modulo 2 pada dekripsi adalah melakukan XOR K(i) antara blok masukan dengan kunci. b. Perpanjangan menjadi 48 bit melalui fungsi ekspansi fn E L = ((Long *)b)[0] ^ KR; c. Dilakukan subtitusi dengan R = ((Long *)b)[1] ^ KL; menggunakan S-Box d. Dilakukan permutasi oleh P. Setelah itu dilakukan putaran sebanyak 16 kali dengan cara sebagai Data R(i-1) dideklarasikan dengan berikut. cara : register Long r; ROR12(KR); L ^= f(R, KR); Kunci K(i) dideklarasikan dengan ROR12(KL); cara: R ^= f(L, KL); Long k; ROR12(KR);

7 Setelah nilai baris ditentukan, maka 12 bit untuk perluasan E selanjutnya adalah menentukan nilai dideklarasikan dengan cara: kolom. #define MASK12 0x0fff; c = (i>>2) & 0xff;

Proses pertama yang dilakukan pada Setelah itu menentukan nilai basis fungsi f ini adalah dengan melakukan sfn. operasi XOR antara data masukan t = c ^ r; R(i-1) dan kunci K(i). a = r ^ k; Proses yang terakhir adalah melakukan eksponensial. Setelah itu dilakukan perpanjangan v = exp8(t, sfn[r].exp, dan subtitusi menggunakan S-box sfn[r].gen); dengan cara : /* Sfn[r] = t ^ exp mod b = ((Long)s((a&MASK12))) gen */ | ((Long)s(((a>>8)& Dengan demikian nilai yang MASK12)) << 8) dikembalikan oleh proses S-box ini | adalah v. ((Long)s(((a>>16)& MASK12)) << 16) Permutasi : perm32(out,in,perm) | perm32 adalah sebuah operasi ((Long)s((((a>>24) permutasi biasa yang mendapat | masukan 32 bit blok in, menghasilkan (a << 8)) & MASK12)) 32 bit blok out di bawah kontrol << 24); lanjar permutasi perm. Setiap elemen dari perm menspesifikasikan bit Sejauh ini, proses yang dilakukan masukan mana yang harus adalah : dipermutasikan menjadi bit keluaran B = S(E(R(i-1))^K(i)) dengan indeks yang sama dengan elemen perm. Setelah ekspansi dan subtitusi selesai dilakukan, maka selanjutnya adalah Fungsi permutasi ini dilakukan dengan melakukan permutasi. dengan cara : perm32(&c, &b, P); for (o=0; o<32; o++) { Dengan demikian, keseluruhan proses i =(int)*p++; yang dilakukan adalah sebagai b = (*in >> i) & 01; berikut. if (b) C=P(S(E(R(i-1))XOR K(i))) *out |= mask; mask >>= 1; Maka, nilai yang dikembalikan oleh } fungsi f ini adalah C. /* Untuk setiap bit keluaran di posisi o, ambil nilai masukan yang akan S-Box : s(i) dipermutasikan ke bit keluaran o. Sebagai catatan, nilai masukan 12 bit Hitung nilai dari untuk bit masukan i. (i) untuk S-box direpresentasikan Jika i telah diset, lakukan OR pada sebagai [11 10 9 ... 1 0] dimana : mask untuk bit keluaran i. Geser mask Bit [11 10 1 0] akan memilih sebuah ke bit selanjutnya. baris dari 16 buah baris yang terdapat */ di setiap S-box. Sedangkan bit [9 8 … Dengan : 3 2] akan menentukan kolom pada mask = 0x80000000L baris yang telah dipilih oleh bit [11 10 *p = perm 1 0]. o = indeks bit keluaran i = indeks bit masukan Proses pertama yang dilakukan adalah menentukan nilai baris. Eksponensial : exp8(base, eksponen, r = ((i>>8) & 0xc) | (i & gen) 0x3); Fungsi ini menerima tiga buah masukan yaitu base (basis dari

8 eksponensial), eksponen (nilai maka a dikurangi modulo. Geser a eksponen), dan gen (polinomial sebanyak satu dijit. terkecil yang dapat digunakan untuk */ membangkitkan Galois Field). Fungsi ini mengembalikan hasil perhitungan ™ Kelemahan LOKI89 dari : exp = base ^ exp mod gen Kelemahan-kelemahan LOKI89 yang berhasil ditemukan para ahli adalah Proses dari fungsi ini adalah sebagai sebagai berikut. berikut. 1. LOKI89 yang menggunakan if (base == 0) putaran hingga 10 kali return(0); memungkinkan terjadinya serangan dengan menggunakan while (exponent != 0) differential cryptanalisis. Hal ini { ditemukan oleh Biham dan if((exponent&0x0001)== 0x0001) Knudsen. result = mult8(result,accum, 2. LOKI89 yang menggunakan gen); putaran hingga 14 kali exponent >>= 1; memungkinkan adanya celah accum = mult8(accum, accum, serangan menggunakan 3 round gen); characteristic. Hal ini ditemukan } oleh Kwan dan Knudsen. return(result); 4. LOKI91 /* jika nilai base adalah 0 maka fungsi LOKI91 dibuat sebagai revisi dari akan otomatis mengembalikan nilai 0. LOKI89. Oleh karena itulah terdapat jika tidak 0 maka dilakukan proses beberapa kesamaan antara LOKI91 dan perulangan hingga exponent menjadi LOKI89. 0. Eksponen akan dikenai fungsi

mult8 jika nilai eksponen adalah 1. ™ Desain LOKI91 Lalu nilai eksponen bergeser ke dijit selanjutnya. Tambahan-tambahan yang terdapat */ pada LOKI91 dari LOKI89 adalah sebagai berikut. Multiply : mult8(a, b, gen) a. Jadwal pembangkitan kunci Fungsi ini mengembalikan hasil diperbaiki sehingga perkalian dari dua buah string biner a meminimalkan pembangkitan dan b serta menggunakan generator kunci yang sama ataupun gen sebagai modulus. pasangan kunci dan plainteks mult = a * b mod gen yang berhubungan.

b. Meminimalkan probabilitas Proses dari fungsi ini adalah sebagai f(x) menghasilkan 0 berikut. c. Menjamin bahwa blok telah while(b != 0) diputar dengan jumlah yang { cukup sehingga serangan yang if (b & 01) mungkin ada hanya exhaustive product ^= a; search. a <<= 1; d. Menjamin bahwa S-box tidak if (a >= SIZE) akan menghasilkan 0 sehingga a ^= gen; meningkatkan keamanan untuk b >>= 1; } mode hashing. return(product); ™ Spesifikasi LOKI91 /* selama pengali b tidak 0, lakukan Perubahan-perubahan yang terdapat proses berikut ini : jika LSB dari b pada LOKI91 adalah sebagai berikut. merupakan 01, tambahkan hasil a. Merubah jadwal pembangkitan perkalian dengan a. Geser a sebanyak kunci sedemikian sehingga satu dijit. Jika a lebih besar dari 256,

9 kunci kanan KR dan kunci kiri static short s(); KL ditukar setiap dua putaran. b. Merubah jadwal rotasi kunci Fungsi perputaran didefinisikan sebagai dengan menggunakan dua berikut. buah cara yaitu antara ROT12 (putaran ganjil) dan ROT13 ROL12(b) b = ((b << 12) | (putaran genap). (b >> 20)); c. Menghilangkan operasi XOR ROL13(b) b = ((b << 13) | di awal dan akhir antara kunci (b >> 19)); dan blok yang akan dienkripsi/didekripsi. ROL12(b) digunakan untuk menggeser d. Merubah fungsi S-box menjadi 32 bit blok b ke kiri sepanjang 12 bit. sebagai berikut. Sedangkan ROL13(b) digunakan untuk menggeser 32 bit blok b ke kiri Sfn (r,c) = (c + ((r*17) (+) ff16) & sepanjang 13 bit. ff16) 31 mod genr Sebelum melakukan proses enkripsi/dekripsi, subkunci sebanyak 16 ™ Struktur LOKI91 buah harus dibangkitkan terlebih dahulu. Sebelum pembangkitan kunci dilakukan, kunci masukan harus dibagi dua bagian yaitu KL dan KR seperti pada pembagian kunci di LOKI89. Pembangkitan subkunci dilakukan dengan cara :

for (i=0;i

Dengan ROUNDS=16.

Proses Enkripsi Gambar 10 Struktur LOKI91 Seperti pada halnya LOKI89, blok masukan dibagian menjadi dua buah ™ Implementasi LOKI91 bagian yang sama besar, yaitu R dan L.

Berikut ini adalah salah satu L = ((Long *)b)[0]; implementasi LOKI91 64 bit dalam R = ((Long *)b)[1]; bahasa C yang dites pada mesin little indian. Kode ini dibuat oleh Matthew Kemudian dilakukan proses enkripsi Kwan beserta Lawrence Brown. dengan menggunakan 16 buah subkunci yang telah dibangkitkan sebelumnya. Kunci masukan disimpan di dalam Proses enkripsi dengan menggunakan array of long. Sedangkan subkunci subkunci ini dilakukan dengan cara untuk 16 putaran dideklarasikan sebagai berikut. dengan cara : Long loki_subkeys[ROUNDS]; for (i=0; i

10 Operasi yang terakhir dilakukan dalam Sejauh ini operasi yang dilakukan proses enkripsi adalah dengan menukar adalah : L dan R : A = R(i-1) XOR K(i)

((Long *)b)[0] = R; Setelah itu dilakukan ekspansi dan ((Long *)b)[1] = L; hasilnya dimasukkan ke dalam S-box. b = ((Long)s((a&MASK12))) Proses Dekripsi | Pada dasarnya proses dekripsi mirip ((Long)s(((a>>8)& dengan proses enkripsi, hanya saja MASK12))<<8) putaran dilakukan dengan urutan yang | terbalik dari proses enkripsi. ((Long)s(((a>>16)& MASK12))<<16) Pertama-tama, blok yang akan | didekripsi dibagi menjadi dua buah ((Long)s((((a>>24) bagian yang sama, yaitu L dan R. | (a<<8))&MASK12))<< 24);

L = ((Long *)b)[0]; Dimana MASK12 adalah 0x0fff. Sejauh R = ((Long *)b)[1]; ini operasi yang telah dilakukan adalah. B = S(E(R(i-1))^K(i))

Kemudian dilakukan putaran dengan Operasi yang terakhir dilakukan pada cara sebagai berikut. fungsi f ini adalah melakukan permutasi dengan cara : for (i=ROUNDS; i>0; i-=2) perm32(&c, &b, P); { L^=f(R, loki_subkeys[i-1]); Dengan demikian, keseluruhan proses R^=f(L, loki_subkeys[i-2]); fungsi f ini adalah : } C=P(S(E(R(i-1)) XOR K(i))) Dengan C adalah nilai yang dihasilkan Proses terakhir yang dilakukan pada oleh fungsi f ini. dekripsi adalah dengan melakukan penukaran antara L dengan R. S-box : s(i) Proses yang dilakukan dalam S-box ini ((Long *)b)[0] = R; adalah sebagai berikut. ((Long *)b)[1] = L; Pertama-tama penentuan nilai baris Fungsi f(r,k) yang ditentukan oleh bit ke 11 10 dan 1 f(r,k) merupakan sebuah fungsi 0. LOKI91yang kompleks dan nonlinier r=((i>>8)&0xc)|(i&0x3); yang menghasilkan keluaran yang merupakan hasil dari fungsi kompleks Setelah penentuan baris selesai, dari masukan dan subkunci. Hal ini selanjutnya adalah penentuan kolom dilakukan dengan cara sebagai berikut. dengan menggunakan bit [9 8 .. 3 2]. Operasi XOR dilakukan terhadap data c=(i>>2)&0xff; masukan (r) dengan subkunci(k). Setelah itu data diperpanjang menjadi Kemudian menentukan nilai basis 4x12 bit yang akan dimasukkan ke untuk Sfn. dalam S-box. Keluaran 4x8 bit dari S- t=(c+((r*17)^0xff))&0xff; box akan dipermutasikan untuk menghasilkan 32 bit keluaran dari Tahapan terakhir yang dilakukan fungsi f ini. adalah menghitung nilai Sfn[r] = t ^ exp mod gen. Pertama-tama data masukan r dikenai v=exp8(t,sfn[r].exp,sfn[r].gen); fungsi XOR dengan subkunci masukan dan hasilnya disimpan dalam a. Dengan demikian nilai yang dihasilkan a = r ^ k; dari fungsi S-box ini adalah v.

Permutasi : perm32(out, in, perm)

11 Fungsi permutasi pada LOKI91 sama dengan fungsi permutasi pada /* LOKI89 dimana melakukan perasi jika nilai base adalah 0 maka fungsi permutasi biasa yang mendapat akan otomatis mengembalikan nilai 0. masukan 32 bit blok in, menghasilkan jika tidak 0 maka dilakukan proses 32 bit blok out di bawah kontrol perulangan hingga exponent menjadi lanjar permutasi perm. Setiap elemen 0. Eksponen akan dikenai fungsi dari perm menspesifikasikan bit mult8 jika nilai eksponen adalah 1. masukan mana yang harus Lalu nilai eksponen bergeser ke dijit dipermutasikan menjadi bit keluaran selanjutnya. dengan indeks yang sama dengan */ elemen perm. Multiply : mult8(a, b, gen) Fungsi permutasi ini dilakukan Fungsi mult8 pada LOKI91 sama dengan cara : dengan fungsi mult8 pada LOKI89 for (o=0; o<32; o++) yaitu mengembalikan hasil perkalian { dari dua buah string biner a dan b i =(int)*p++; serta menggunakan generator gen b = (*in >> i) & 01; sebagai modulus. mult = a * b mod gen if (b) *out |= mask; Proses dari fungsi ini adalah sebagai mask >>= 1; berikut. } while(b != 0) /* Untuk setiap bit keluaran di posisi { o, ambil nilai masukan yang akan if (b & 01) dipermutasikan ke bit keluaran o. product ^= a; Hitung nilai dari untuk bit masukan i. a <<= 1; Jika i telah diset, lakukan OR pada if (a >= SIZE) mask untuk bit keluaran i. Geser mask a ^= gen; ke bit selanjutnya. b >>= 1; */ } Dengan : return(product); mask = 0x80000000L *p = perm /* o = indeks bit keluaran selama pengali b tidak 0, lakukan i = indeks bit masukan proses berikut ini : jika LSB dari b merupakan 01, tambahkan hasil Eksponensial : exp8(base, exponent, perkalian dengan a. Geser a sebanyak gen) satu dijit. Jika a lebih besar dari 256, Fungsi eksponensial LOKI91 sama maka a dikurangi modulo. Geser a dengan LOKI89, tidak ada perubahan sebanyak satu dijit. sama sekali. Fungsi ini tetap */ melakukan operasi : exp = base ^ exp mod gen ™ Kelemahan LOKI91

Proses dari fungsi ini adalah sebagai Berikut ini adalah beberapa berikut. kelemahan yang terdapat pada if (base == 0) LOKI91. return(0); 1. Dengan dihilangkannya operasi XOR di awal dan akhir proses while (exponent != 0) mengakibatkan adanya { ketergantungan cipherteks pada if((exponent&0x0001)== 0x0001) kunci di putaran 3 sampai 5. result = mult8(result,accum, gen); 5. LOKI97 exponent >>= 1; accum = mult8(accum, accum, LOKI97 merupakan sebuah algoritma gen); blok cipher menggunakan kunci privat } yang mengoperasikan data sebesar 128 bit return(result);

12 dengan kunci sebesar 256 bit. LOKI97 merupakan evolusi dari LOKI89 dan LOKI91 dengan memperkuat penjadwalan kunci dan memperbesar ukuran kunci yang digunakan. LOKI97 diajukan sebagai kandidat untuk menggantikan DES ().

Struktur dan Desain LOKI97 secara keseluruhan dibuat oleh Dr. Lawrie Browns. Sedangkan desain dari S-box yang digunakan dibuat oleh Prof. Pieprzyk.

™ Spesifikasi LOKI97

LOKI97 melakukan proses enkripsi/dekripsi data 128 bit menggunakan kunci sepanjang 128, 192, atau 256 bit.

Karena LOKI97 menerima masukan data sepanjang 128 bit dan dikarenakan LOKI97 merupakan Gambar 11 Proses Enkripsi LOKI97 algoritma blok cipher maka LOKI97 akan menghasilkan data keluaran Sedangkan untuk proses dekripsi, sepanjang 128 bit pula. proses putaran hanya dibalik. Dengan demikian perhitungannya adalah Proses pertama yang dilakukan dalam sebagai berikut. melakukan enkripsi adalah membagi blok masukan menjadi dua buah blok Li-1 = Ri XOR f(Li - SK3i, SK3i-1) yang sama panjang yaitu L dan R. Hal Ri-1 = Li - SK3i - SK3i-2 ini juga dilakukan dalam LOKI89 dan LOKI91. ™ Pembangkitan Subkunci LOKI97

Setelah data dibagi menjadi dua buah LOKI97 menggunakan jadwal bagian yang sama besar, dilakukan pembangkitan subkunci berdasarkan proses putaran sebanyak 16 kali pada jaringan Feistel yang tidak dengan menggunakan jaringan seimbang yang mengoperasikan 4 Feistel. Proses yang dilakukan dalam buah blok sebesar 64 bit setiap putaran adalah sebagai berikut. [K40|K30|K20|K10]. Dikarenakan ukuran kunci yang digunakan bisa Ri = Li-1 XOR f(Ri-1 + SK3i-2, SK3i-1) mempunyai 3 buah ukuran, maka Li = Ri-1 + SK3i-2 + SK3i inisialisasi kunci untuk setiap ukuran pun berbeda-beda. Untuk kunci Setiap putaran menggunakan operasi sepanjang 256 bit [Ka|Kb|Kc|Kd], XOR dan + (modulo 264) terhadap 64 maka inisialisasinya adalah : bit data masukan bersamaan dengan [K40|K30|K20|K10] = [Ka|Kb|Kc|Kd] hasil fungsi f yang merupakan fungsi nonlinier yang rumit sehingga Untuk kunci sepanjang 192 memaksimalkan avalanche antara bit- [Ka|Kb|Kc] bit, inisialisasinya adalah bit masukan. dengan cara : [K40|K30|K20|K10]= [Ka|Kb|Kc|f(Ka,Kb)]

Sedangkan untuk kunci sepanjang 128 bit [Ka|Kb], proses inisialisasi dilakukan dengan cara : [K40|K30|K20|K10]= [Ka|Kb|f(Kb,Ka)|f(Ka,Kb)]

13 menggunakan 32 bit yang paling Berikut ini adalah proses untuk kanan dari B untuk menentukan mendapatkan subkunci SKi dengan apakah menukar bit pada posisi ini. melakukan putaran sebanyak 48 kali. SKi = K1i = K4i-1 XOR gi(K1i-1, K3i-1, b. E() K2i-1) Merupakan fungsi perluasan seperti K4i = K3i-1 yang terdapat dalam LOKI91 K3i = K2i-1 namun pergeseran yang ada lebih K2i = K1i-1 disederhanakan. Dengan i mulai dari 1 sampai dengan 48 dan : c. Sa(), Sb() gi(K1, K3, K2i)= Sa() dan Sb() merupakan dua buah f(K1+K3+ (Delta * i), K2 ) kolom dari S-box yang dibentuk Delta = ⎣(sqrt(5)-1) * 263⎦ dengan cara menggabungkan S1 dan S2 dimana Sa() = ™ Fungsi f LOKI97 [S1,S2,S1,S2,S2,S1,S2,S1] dan Sb() = [S2,S2,S1,S1,S2,S2,S1,S1]. Fungsi f ini menerima dua buah masukan sebesar 64 bit dan d. P() menghasilkan sebuah blok berukuran Merupakan sebuah fungsi permutasi 64 bit. Cara pemrosesannya adalah untuk menyebarkan hasil keluaran dengan menggunakan S-box dua lapis dari S-box untuk dibentuk menjadi dengan nilai nonlinier maksimal yang blok berukuran 64 bit. memungkinkan untuk menghasilkan sebuah blok berukuran 64 bit. Selain ™ S-Box LOKI97 menggunakan S-box, digunakan pula permutasi sebanyak dua kali untuk LOKI97 menggunakan S-box memaksimalkan nilai avalanche pada berbentuk kotak memakai nilai Galois keseluruhan bit. Fungsi f ini Field yang ganjil GF(2n). Supaya didefinisikan sebagai berikut. masukan yang didapat berjumlah ganjil maka S1 menggunakan F(A,B) = Sb(P(Sa(E(KP(A,B)))),B) masukan sebanyak 13 bit, sedangkan S2 menggunakan masukan sebanyak 11 bit. Nilai masukan yang dimasukan dibalik terlebih dahulu agar nilai masukan 1 tidak akan menghasilkan 1, begitu pula nilai masukan 0 tidak akan menghasilkan 0.

S1[x]= ((x XOR 1FFF 3) mod 2911) & FF , dalam GF(213).

S2[x]= ((x XOR 7FF 3) mod AA7) & FF , dalam GF(211).

™ Kelemahan LOKI97 Menurut [KNU99], kelemahan Gambar 12 Fungsi f LOKI97 LOKI97 adalah : a. jumlah masukan yang tetap pada Pada deskripsi fungsi f diatas, S-Box lapis kedua terdapat beberapa fungsi antara, yaitu: memungkinkan terjadinya linier attack. a. KP(A,B) b. Fungsi putaran yang terdapat di Fungsi ini merupakan fungsi dalama LOKI97 memungkinkan permutasi biasa yang memecah A terjadinya differential attack. menjadi dua buah bagian masinng- masing sebesar 32 bit dan

14 Kedua hal diatas pula yang dianggap menjadi penyebab mengapa LOKI97 menjadi kandidat lemah untuk AES.

6. Kesimpulan

Kesimpulan yang dapat ditarik dari ketiga buah generasi LOKI diatas adalah sebagai berikut. 1. Setiap versi LOKI pada umumnya terdiri dari : a. Permutasi b. Ekspansi c. Pembangkitan kunci yang dilakukan sebanyak 16 putaran. d. Pembagian blok kunci dan blok masukan menjadi dua buah blok yang sama besar. e. Penggunaan S-Box untuk membangkitkan subkunci. 2. Pada dasarnya keseluruhan proses LOKI adalah sama, khususnya untuk LOKI89 dan LOKI91. Perbedaan yang ada hanya pada pendeklarasian fungsi f. 3. Evolusi yang dilakukan dari versi satu ke versi lain hanyalah merubah fungsi S-box, permutasi, dan sebagainya, bukan merubah cara kerja itu sendiri. 4. Untuk mendapatkan algoritma yang aman, perlu adanya subkunci- subkunci yang dibangkitkan. Semakin rumit cara pembangkitannya, semakin kecil kemungkinan algoritma tersebut dapat diserang.

7. Daftar Referensi

[BRO98] Brown, L., Pieprzyk. Introducing the new LOKI97 Block Cipher. 1998.

[ECO06] http://eco.utexas . Diakses pada tanggal 25 September 2006.

[KNU99] Knudsen, L. R., Rijmen, V. Weaknesses in LOKI97

[WIK06] http://wikimirror.com. Diakses pada tanggal 25 September 2006.

15