BAB 2 LANDASAN TEORI 2.1
Kriptografi Kriptografi dapat didefinisikan sebagai berikut :
−
Menurut Menezes, Van Oorschot, dan Vanstone. (1996, p4) adalah ilmu yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi seperti kerahasiaan data, keabsahan data, integritas data, serta autentikasi data.
−
Menurut Rosen (2000, p266) adalah bagian dari kriptologi, ilmu yang mempelajari tentang sistem keamanan, yang berhubungan dengan desain dan implementasi dari sistem rahasia.
−
Menurut Burton (2002, p144) adalah suatu teknik atau metode yang bertujuan untuk melindungi informasi yang dikirimkan melalui jaringan komunikasi publik. Proses-proses yang ada dalam kriptografi adalah enkripsi dan dekripsi. Dimana
menurut Rosen (2000, p260) metode enkripsi atau cipher adalah metode prosedur untuk mengubah plaintext, pesan yang akan dibentuk menjadi pesan rahasia, menjadi ciphertext, pesan rahasia, dengan cara mengganti karakter yang ada pada plaintext melalui proses transformasi. Proses untuk mengubah plaintext menjadi ciphertext disebut enkripsi atau enchipering; sementara proses sebaliknya yaitu mengubah ciphertext menjadi plaintext kembali oleh penerima yang dimaksud, yang memiliki pengetahuan mengenai metode untuk melakukannya, disebut dekripsi. Untuk menjalankan kedua proses tersebut diperlukan suatu algoritma kriptografi yang menggunakan fungsi matematika, algoritma ini membutuhkan suatu key (kumpulan karakter, nomor, atau frase) untuk melakukan proses enkripsi dan dekripsi. Plaintext yang sama akan menghasilkan ciphertext yang berbeda apabila menggunakan key yang berbeda (Anonymous, 1999, p12). Terdapat empat tujuan mendasar pada ilmu kriptografi dimana tujuan tersebut merupakan beberapa aspek keamanan informasi (Menezes et al, 1996, p4), dimana tujuan tersebut adalah : 4
−
Kerahasiaan adalah layanan yang digunakan untuk menjaga isi informasi dari siapapun kecuali yang memiliki otoritas atau kunci rahasia untuk membuka informasi yang telah dienkripsi, dimana terdapat beberapa cara untuk memperoleh
kerahasiaan
tersebut
mulai
dari
proteksi
fisikal
sampai
menggunakan algoritma matematika yang mana menyebabkan data menjadi tidak dapat dibaca. −
Integritas data berhubungan dengan penjagaan dari perubahan data secara tidak sah. Untuk menjaga integritas data, sistem harus memiliki kemampuan untuk mendeteksi manipulasi data oleh pihak-pihak yang tidak berhak, antara lain penyisipan, penghapusan, dan pensubsitusian data lain kedalam data yang sebenarnya.
−
Autentikasi berhubungan dengan identifikasi/pengenalan, baik secara kesatuan sistem maupun informasi itu sendiri. Dua pihak yang saling berkomunikasi harus saling memperkenalkan diri. Informasi yang dikirimkan melalui kanal harus diautentikasi keaslian, isi datanya, waktu pengiriman, dan lain-lain.
−
Non-repudiasi atau penyangkalan adalah usaha untuk mencegah terjadinya penyangkalan terhadap pengiriman/terciptanya suatu informasi oleh yang mengirimkan/membuat. Menurut Shannon (Trappe dan Washington, 2002, p37) terdapat 2 hal penting
yang harus diperhatikan dalam kriptosistem yang baik yaitu : −
Difusi Apabila karakter dari plaintext ada yang dirubah maka beberapa karakter dalam ciphertext akan berubah, sebaliknya apabila karakter dalam ciphertext ada yang berubah maka karakter dalam plaintext ikut berubah
−
membingungkan key tidak berhubungan dengan sederhana ke ciphertext, yang mana setiap karakter dalam ciphertext tergantung dari beberapa bagian key.
5
2.1.1
Sejarah Singkat Awal sejarah perkembangan kriptografi dimulai sejak tahun 1900 SM. Salah satu
yang dikenal pada saat itu adalah enkripsi sederhana yang dibuat oleh Julius Caesar yang digunakannya untuk mengirim pesan rahasia. Perkembangan sistem komputer dan sistem komunikasi pada tahun 1960-an membuat keamanan informasi diperlukan, membuat kriptografi ikut berkembang karena kriptografi digunakan sebagai alat untuk memproteksi informasi tersebut. Dimulai dari penemuan Feistel pada awal 1970-an yang pada akhirnya diadopsi oleh U.S. Federal Information Processing Standard untuk mengenkripsi data rahasia, Data Encryption Standard (DES), sampai pada tahun 1976 dimana Diffie dan Hellman mempublikasi New Directions in Crytography. Makalah ini memperkenalkan konsep revolusioner dari kriptografi menggunakan public-key dan juga mempersembahkan metode baru dan brilian untuk pertukaran key. Pada tahun 1978 Rivest, Shamir, dan Adleman menemukan enkripsi public-key pertama yang dapat digunakan (sekarang sering dikenal dengan nama algoritma RSA). Kontribusi yang paling menonjol dari kriptografi public-key adalah digunakannya untuk digital signature, pada tahun 1991 standar internasional pertama dikeluarkan untuk digital signature. Pada tahun 1998 diadakan suatu kompetisi yang diberi nama Advanced Encrytion Standard (AES) untuk menetapkan metode algoritma enkripsi standar yang baru untuk Amerika (keamanan DES dianggap tidak lagi relevan karena dengan teknologi yang ada kode enkripsi pada DES dapat dibuka dalam waktu kurang dari 1 hari). Pada kompetisi itu diperoleh 5 finalis yaitu algoritma Rijndael, Serpent, Twofish, MARS, dan RC5. Pada kompetisi itu ditetapkan algoritma Rijndael sebagai algoritma standar untuk enkripsi di Amerika. Rijndael dipilih karena kecepatan proses enkripsi dan kemudahan dalam pembentukannya, Serpent gagal karena proses enkripsi yang lama, dan Twofish gagal karena algoritmanya yang sulit. Namun di antara semua metode tersebut algoritma twofish memiliki tingkat keamanan yang tinggi.
2.1.2
Kriptografi Public-key atau Asimetris Kriptografi
Public-key
adalah
proses
enkripsi-dekripsi
asimetrik
yang
menggunakan sepasang key dimana key yang pertama digunakan untuk enkripsi (public
6
key) dan key yang lain digunakan untuk dekripsi (private key). Dengan adanya kedua key tersebut maka apabila public key dipublikasikan dan private key tetap disimpan maka siapapun yang memiliki public key tersebut dapat mengenkripsi suatu informasi, akan tetapi tidak bisa mendekripsinya, yang hanya dapat dibaca oleh pemilik private key. Secara komputerisasi untuk mendapatkan private key dari public key adalah hal yang tidak mungkin (Anonymous, 1999, p14).
Gambar 2.1 Enkripsi dengan teknik public key (Gambar diambil dari menezes et al, p26) Pada Gambar 2.1 terlihat bahwa public key (e) dikirim ke tujuan melalui jaringan yang tidak diamankan, yang mana melalui jaringan ini pula kemungkinan ciphertext (c) dikirimkan.
2.1.3
Kriptografi Simetris Kriptografi simetris adalah proses enkripsi-dekripsi simetrik yang menggunakan
satu key baik untuk enkripsi maupun untuk dekripsi (Anonymous, 1999, p13).
7
Gambar 2.2 Enkripsi dengan kriptografi simetris (Gambar diambil dari menezes et al, p16) Pada Gambar 2.2 terlihat bahwa key (e) dikirim ke tujuan melalui jaringan yang diamankan, kemudian melalui jaringan yang tidak diamankan ciphertext (c) dikirimkan ke tujuan. Salah satu masalah utama dari kriptografi simetris ini adalah mencari cara yang efisien untuk memberitahukan key yang dibutuhkan secara aman. Menurut Menezes et al (1996, p16) terdapat 2 kelas dari enkripsi dengan key simetris, yaitu :
A
Stream Cipher Stream Cipher mengenkripsi karakter secara individu (biasanya dalam bilangan
biner) dari suatu plaintext, menggunakan transformasi enkripsi yang bergantung pada waktu. Dalam segi hardware stream cipher biasanya lebih cepat dari block cipher. Karena stream cipher memiliki propagasi yang terbatas atau jarang mengalami kesalahan, maka cipher ini memiliki keuntungan apabila digunakan dalam suatu transmisi yang memiliki tingkat kesalahan yang cukup besar, selain itu cipher ini baik digunakan juga pada saat informasi yang ingin dienkripsi harus diproses setiap karakternya satu persatu (misalnya pada perlengkapan yang tidak memiliki memori atau buffering dari data terbatas). 8
B
Block Cipher Menurut Menezes et al (1996, p224) block cipher sebenarnya dapat
dikategorikan sebagai key simetris atau dapat juga public-key. Block cipher adalah suatu fungsi yang memetakan n-bit blok dari plaintext ke dalam n-bit blok ciphertext; n adalah panjang blok. Cara standar menggunakan block cipher adalah membagi beberapa kumpulan karakter pada plaintext menjadi beberapa blok, blok dari plaintext tersebut kemudian dikonversi menjadi blok dari ciphertext, satu persatu hingga seluruh blok, dan pada saat konversi setiap blok tidak akan melibatkan blok lainnya. Adapun teknik ini termasuk dalam tipe electronic codebook (ECB). Ada beberapa teknik untuk mengenkripsi ke dalam blok ciphertext dari blok plaintext, diantaranya tipe cipher block chaining (CBC) dan tipe cipher feedback (CFB) (Trappe dan Washington, 2002, p33). Karena block cipher menggunakan blok untuk enkripsi maka apabila dalam suatu blok terdapat 1 karakter yang terganti maka pada saat enkripsi seluruh blok tersebut akan terenkripsi menjadi blok ciphertext yang berbeda, contoh ‘blo’ akan dienkripsi menjadi ‘rbz’ akan tetapi apabila blok ‘blo’ berubah menjadi ‘clo’ maka akan menghasilkan ‘sdc’ sebagai blok ciphertext-nya. Oleh karena itu keamanan block cipher tergantung pada jumlah frekuensi bloknya (Trappe dan Washington, 2002, p35).
2.1.4
Kriptografi simetris dibandingkan dengan Kriptografi asimetris Menurut Menezes et al (1996, pp31-32) masing-masing jenis kriptografi
memiliki keuntungan dan kerugian, keuntungan dari kriptografi simetris adalah 1. Cipher key simetris didesain untuk dapat menerima data yang banyak. Implementasi untuk mengenkripsi rata-rata ratusan megabyte per detik. 2. Key biasanya pendek. 3. Cipher key simetris dapat digunakan dalam mekanisme berbagai kriptografi seperti pseudorandom number generator, fungsi hash, dan digital signature. 4. Cipher key simetris dapat digunakan untuk membuat cipher yang lebih kuat. Transformasi sederhana yang dengan mudah dianalisa, tapi apabila berdiri sendiri lemah, dapat digunakan untuk membangun cipher yang lebih kuat.
9
Kerugian dari kriptografi simetris adalah 1. Dalam komunikasi antara 2 orang, key harus tetap menjadi rahasia dari kedua orang tersebut. 2. Dalam jaringan yang luas, ada banyak key yang harus diatur. 3. Demi berlangsungnya keamanan maka key yang digunakan harus selalu diganti pada jangka waktu tertentu. 4. Mekanisme digital signature yang menggunakan enkripsi key simetris biasanya memerlukan key yang panjang guna fungsi verifikasi public atau untuk digunakan dalam trusted third party (TTP). Keuntungan dari kriptografi asimetris adalah 1. Hanya private key yang harus dijaga kerahasiaannya. 2. Administrasi dari key dalam sebuah jaringan membutuhkan TTP yang benarbenar terpercaya. 3. Bergantung pada penggunaan, pasangan private key/public key tidak perlu diubah dalam jangka waktu yang lama. 4. Public key relatif lebih efisien dalam mekanisme digital signature. Key yang digunakan untuk fungsi verifikasi publik lebih kecil daripada key yang digunakan pada kriptografi simetris. 5. Dalam jaringan yang luas, jumlah key yang dibutuhkan lebih sedikit daripada yang digunakan dalam kriptografi simetris. Kerugian dari kriptografi asimetris adalah 1. Proses dalam kriptografi asimetris dalam metode enkripsi lebih lambat dijalankan dibandingkan dengan kriptografi simetris. 2. Ukuran key yang digunakan biasanya lebih panjang dibandingkan dengan enkripsi menggunakan key simetris. 3. Tidak ada public key yang terbukti benar-benar aman (walaupun hal ini juga berlaku untuk block cipher). Menurut Menezes et al (1996, p32) private key dalam sistem public-key harus lebih besar dari key pada sistem key simetris (apabila dalam key simetris 128 bit maka untuk public-key 1024 bit, RSA) karena (untuk algoritma yang masih terjaga)
10
penyerangan yang paling efisien dalam sistem key simetris adalah exhaustive key search, yang mana penyerangan paling efisien yang digunakan dalam sistem public-key adalah serangan “shortcut”, contohnya faktorisasi, yang mana lebih efisien apabila dibandingkan dengan exhaustive key search.
2.2
Algoritma Twofish Berdasarkan Schneier, Kelsey, Whiting, Wagner, Hall, dan Ferguson. (1998, p3)
twofish merupakan salah satu peserta AES yang telah memenuhi kriteria National Institute of Standard and Technology (NIST), dimana kriteria itu antara lain adalah blok sebesar 128 bit, dapat menggunakan key sepanjang 128 bit, 192 bit, dan 256 bit, efisien untuk diimplementasikan ke dalam berbagai spesifikasi komputer, memiliki variasi dalam performa yang disebabkan oleh adanya key schedule, dan lain-lain. Menurut Schneier et al (1998, pp4-5) berikut adalah elemen-elemen yang membangun algoritma twofish: 1. Feistel Network Adalah metode umum untuk mentransformasi fungsi tertentu (biasanya disebut sebagai fungsi F) menjadi permutasi. Elemen fundamental dari Feistel network adalah fungsi F, pemetaan yang bergantung pada key dari string input ke string output. Menurut Xue (2006, p2) Feistel Network dapat juga disebut substitutionpermutation-network, yang memiliki bentuk umum seperti pada Gambar 2.3. Input dari Feistel Network berupa blok plaintext berukuran n bit, dan sebuah key K. Blok dari plaintext dibagi menjadi 2 bagian, L0 dan R0. kedua bagian data tersebut diproses sebanyak r putaran yang kemudian dikombinasikan untuk menghasilkan blok ciphertext. Dalam setiap putaran i, input berupa Li-1 dan Ri-1, yang diturunkan dari output putaran sebelumnya, sama seperti subkey Ki, yang diturunkan dari key K secara keseluruhan.
11
Gambar 2.3 Bentuk umum Feistel Network (Gambar diambil dari Xue, p3) 2 putaran dari Feistel network disebut “cycle”. Dalam 1 cycle, setiap bit dari blok teks telah diubah sekali. Twofish adalah 8 cycle Feistel network dengan fungsi bijektif F. 2. S-boxes S-box adalah tabel operasi subtitusi non linear yang digunakan kebanyakan block cipher. Twofish menggunakan 4 diferensiasi, bijektif, key-dependent, 8 x 8 bit Sboxes, yang dibentuk menggunakan 2 8 x 8 bit permutasi yang sudah pasti dan materi key.
12
3. Matriks MDS Kode maximum distance separable (MDS) melalui field adalah pemetaan linear dari elemen field a ke elemen field b, yang membentuk elemen vektor gabungan a+b, dengan properti jumlah minimum elemen tidak nol dalam vektor tidak nol paling kurang b+1. Pemetaan MDS dapat direpresentasikan dengan matriks MDS berdimensi a x b. Kondisi dimana matriks a x b bisa dikatakan MDS adalah semua submatriks persegi yang memungkinkan bersifat non-singular. Twofish menggunakan 4 x 4 matriks MDS tunggal yang didapatkan melalui GF(28) dengan polinomial modularnya adalah x8 + x6 + x5 + x3 + 1. 4. Pseudo-Hadamard Transforms (PHT) PHT adalah operasi pencampuran sederhana. Memberikan 2 input, a dan b, 32 bit PHT didefinisikan :
a' = a + b mod 232 b' = a + 2 b mod 232 Twofish menggunakan 32 bit PHT untuk mencampur output dari 2 double word yang dihasilkan fungsi g. 5. Whitening Adalah teknik meng-XOR materi key sebelum putaran pertama dan sesudah putaran terakhir, teknik ini dapat menambah tingkat kesulitan pada penyerangan keysearch. 6. Key Schedule Adalah bit dari key yang dirubah menjadi key-key setiap putaran yang digunakan. Twofish membutuhkan banyak materi key, dan memiliki key schedule yang rumit. Langkah – langkah untuk menjalankan algoritma twofish sebagai berikut. 1. Key Schedule Langkah ini dijalankan untuk mendapatkan nilai output berupa Me, Mo, dan S. Dimana Nilai output Me dan Mo akan digunakan untuk langkah Expanded Key dan S akan digunakan dalam Fungsi g.
13
2. Expanded Key Langkah ini dijalankan untuk mendapatkan ke-40 key yang akan digunakan dalam langkah whitening dan Fungsi F. Salah satu proses yang dilakukan pada langkah ini adalah menjalankan Fungsi h yang mana didalam Fungsi h ini akan dijalankan proses permutasi q0 dan q1. 3. Konversi little-endian Langkah ini dijalankan untuk mengkonversi 16 karakter pada input menjadi Double Word. 4. Input whitening Langkah untuk meng-XOR Word yang dikonversi sebelumnya dengan 4 Expanded Key. 5. Algoritma Twofish Langkah utama yang akan dijalankan, didalam algoritma akan dipanggil Fungsi F yang mana Fungsi tersebut akan memanggil Fungsi g. 6. Output whitening Langkah untuk meng-XOR Word dengan 4 Expanded Key. 7. Konversi little-endian Langkah ini dijalankan untuk mengkonversi kembali Double Word menjadi 16 karakter. Gambar 2.4 menunjukkan garis besar dari algoritma twofish. Twofish menggunakan struktur yang seperti Feistel sebanyak 16 putaran dengan tambahan whitening untuk input dan output. Elemen non-Feistel yang digunakan hanya perputaran 1 bit, yang mana rotasi tersebut dapat dipindah ke dalam fungsi F untuk membuat struktur Feistel murni, akan tetapi hal ini dapat menyebabkan perubahan algoritma karena dibutuhkan rotasi tambahan dari word sebelum langkah output whitening dilakukan.
14
Gambar 2.4 Twofish (Gambar diambil dari Schneier et al, p6) Plaintext dibagi menjadi 4 bagian yang berukuran double word. Pada langkah input whitening plaintext ini kemudian di-XOR dengan 4 key word, yang kemudian diiterasi sebanyak 16 putaran. Dari setiap putaran, 2 word yang terletak pada sisi kiri digunakan untuk input pada fungsi g. Fungsi g terdiri dari 4 byte-wide-key-dependent Sboxes, yang diikuti dengan langkah linear mixing yang didasari oleh MDS matrix. Hasil dari 2 fungsi g akan dikombinasi dengan menggunakan PHT, dan 2 keyword dihasilkan. 15
Kedua hasil ini kemudian di XOR dengan word yang berada di sebelah kanan (yang mana salah satunya dirotasi ke kiri sebanyak 1 bit sebelum di XOR, dan yang lainnya dirotasi ke kanan sesudah di XOR). Potongan kiri dan kanan kemudian ditukar untuk putaran berikutnya. Setelah semua putaran selesai, word yang ditukar pada putaran terakhir ditukar kembali dan 4 word tadi akan di XOR dengan 4 key word lainnya untuk membuat ciphertext.
2.2.1
Key Schedule Key schedule harus menyediakan 40 expanded key word K0, . . . , K39, dan 4 key-
dependent S-boxes yang digunakan dalam fungsi g. Didefinisikan k = N/64, key M terdiri dari 8k byte m0, . . . , m8k-1 (dimana N adalah panjang key yang digunakan, twofish dibuat agar dapat menerima key sepanjang N = 128, N = 192, dan N = 256, Key yang lebih kecil dari N bit yang tersedia dapat digunakan dengan cara mengisi nilai nol, untuk nilai yang tidak terisi, sampai panjang key standar yang paling dekat dengan panjang key. Misalkan terdapat key sepanjang 80 bit maka key yang dimiliki adalah m0, . . . , m9 dan selebihnya mi = 0 dimana i = 10, . . . , 15 , karena panjang key standar yang terdekat adalah 128 bit). Pertama-tama byte dikonversi menjadi double word, sehingga dapat dikatakan
âHL H H 3
Mi =
m 4 i+j . 28 j
i = 0, ..., 2 k - 1
j=0
Kemudian ke dalam vektor 2 word dari panjang k
L L
M e = M0, M2, ..., M2 k- 2 Mo = M1, M3, ..., M2 k- 1
Vektor word ketiga dari panjang k juga diturunkan dari key. Hal ini dapat dilakukan dengan cara membagi key byte dalam 8 grup, menginterpretasikan key tersebut sebagai vektor melalui GF(28), dan mengalikannya dengan 4 x 8 matriks yang diturunkan dari kode RS. Masing-masing akan menghasilkan 4 byte yang nantinya diinterpretasikan menjadi double word.
16
i y j z j y zzzjj z z z z{jjj z z z k{
i j ijjj y z j z j z k{jk â H L si,0 si,1 si,2 si,3
=
3
Si =
. ... . . . . RS . . . . . ... .
m8 i m8 i+1 m8 i+2 m8 i+3 m8 i+4 m8 i+5 m8 i+6 m8 i+7
si,j. 28 j
j=0
Untuk i = 0, . . . , k-1 maka
S = Sk- 1, Sk- 2, ..., S0
Hasil dimasukkan dengan urutan terbalik ke dalam vektor S. Vektor Me, Mo, dan S merupakan faktor utama untuk membentuk key schedule. Untuk perkalian matriks RS, GF(28) direpresentasikan sebagai GF(2)[x]/w(x), dimana w(x) = x8+x6+x3+x2+1 adalah polinomial primitif dari pangkat 8 melalui GF(2). Pemetaan antara nilai byte dan elemen GF(28) menggunakan definisi yang sama dengan
ijjj k
y zzz {
perkalian matriks MDS. Menggunakan pemetaan tersebut, RS matriks dapat ditulis : 01 A4 55 87 5 A 58 DB 9 E A4 56 82 F3 1 E C6 68 E5 RS = 02 A1 FC C1 47 AE 3 D 19 A4 55 87 5 A 58 DB 9 E 03
2.2.2
Expanded Key Word yang terdapat pada expanded key didefinisikan dengan menggunakan
fungsi h.
HHHLLLL HIH LL M
r = 224 + 216 + 28 + 20
Ai = h 2 ir , Me Bi = ROL h 2 i + 1 r , Mo , 8 K2 i = Ai + Bi mod 232 K2 i+1 = ROL Ai + 2 Bi mod 232 , 9
Nilai konstan ρ digunakan untuk duplikasi byte, word iρ terdiri dari 4 byte yang sama, masing-masing dengan nilai i. Ai nilai byte adalah 2i, dan argumen kedua dari h adalah Me. Bi didapatkan sama seperti Ai hanya saja nilai byte-nya 2i+1 dan Mo sebagai
17
argumen kedua, hanya berbeda pada rotasi tambahan sebanyak 8 bit. Nilai Ai dan Bi dikombinasikan menggunakan PHT. Salah satu perhitungan dirotasi sebanyak 9 bit, hasil K tersebut menghasilkan expanded key.
2.2.2.1 Fungsi h Gambar 2.5 adalah gambaran umum dari fungsi h. Fungsi h adalah fungsi yang mengambil 2 input, double word X dan sekumpulan L = (L0, . . . , Lk-1) double word dari panjang k, dan menghasilkan 1 word sebagai output. Fungsi ini berjalan sebanyak k putaran. Di setiap putaran, 4 byte akan disampaikan pada S-box yang sudah tetap, dan diXOR dengan byte yang diturunkan dari daftar L. Kemudian, byte sekali lagi disampaikan ke S-box yang sudah tetap, dan 4 byte dikalikan dengan matriks MDS sama seperti
A E AE
fungsi g. Kemudian word dibagi menjadi byte.
li,j = Li 28j mod 28 xj = X 28 j mod 28 Untuk i = 0, . . . , k-1 dan j = 0, . . . , 3 , maka urutan subtitusi dan XOR diaplikasikan.
yk,j = xj Jika k = 4, maka
Jika k ≥ 3, maka
Untuk semua kasus
y0 y1 y2 y3
j = 0, ..., 3
@ D @ D @ D @ D @ D @ D @ D @ D @ @ @ D D D @ @ @ D D D @ @ @ D D D @ @ @ DDD y3,0 y3,1 y3,2 y3,3
= q1 y4,0 Å l3,0
y2,0 y2,1 y2,2 y2,3
= q1 y3,0 Å l2,0 = q1 y3,1 Å l2,1
= q0 y4,1 Å l3,1 = q0 y4,2 Å l3,2
= q1 y4,3 Å l3,3
= q0 y3,2 Å l2,2
= q0 y3,3 Å l2,3
= q1 q0 q0 y2,0 Å l1,0 Å l0,0 = q0 q0 q1 y2,1 Å l1,1 Å l0,1
= q1 q1 q0 y2,2 Å l1,2 Å l0,2 = q0 q1 q1 y2,3 Å l1,3 Å l0,3
18
q0 dan q1 adalah permutasi yang sudah tetap berbasis nilai 8 bit. Vektor yang
ijjj y zzzijjj k{ jk â
y zzzijj y z z z{jkz{
dihasilkan yi dikalikan dengan matriks MDS, sama seperti fungsi g.
z0 z1 z2 z3
=
3
Z=
. ... . y0 . . y . MDS . . 1 y2 . . y3 . ... .
zi . 28 i
i=0
Dimana Z adalah hasil dari h.
19
Gambar 2.5 Fungsi h (Gambar diambil dari Schneier et al, p9) 20
2.2.2.2 Permutasi q0 dan q1 Permutasi q0 dan q1 adalah permutasi yang sudah tetap berbasis nilai 8 bit. Permutasi tersebut masing-masing dikonstruksi dari 4 4-bit permutasi yang berbeda.
@D H L @ D@ D H L @ D@ D
Untuk nilai input x, dapat didefinisikan output y sebagai berikut :
a0, b0 = x 16 , x mod 16 a1 = a0 Å b0 b1 = a0 Å ROR4 b0, 1 Å 8 a0 mod 16 a2, b2 = t0 a1 , t1 b1 a3 = a2 Å b2 b3 = a2 Å ROR4 b2, 1 Å 8 a2 mod 16 a4, b4 = t2 a3 , t3 b3 y = 16 b4 + a4 Dimana ROR4 adalah fungsi ROR yang berdasarkan pada data yang bernilai 4 bit. Pertama, byte dipisah menjadi 2 bagian, langkah ini dikombinasi dengan langkah bijective mixing. Kemudian setiap bagian disampaikan pada masing-masing S-box 4-bit yang sudah tetap. Yang kemudian diikuti dengan langkah mixing dan S-box berikutnya. Akhirnya, kedua bagian tersebut dikombinasikan kembali menjadi byte. Untuk
@ @ @ @ @ @ @ @
permutasi q0, S-box 4-bit yang digunakan adalah :
t0 t1 t2 t3
= = = =
8 E B D
1 C A 7
7 B 5 F
D 8 E 4
6 1 6 1
F 2 D 2
3 3 9 6
2 5 0 E
0 F C 9
B 4 8 B
5 A F 3
9 6 3 0
E 7 2 8
C 0 4 5
A 9 7 C
4 D 1 A
D D D D D D D D
Dimana masing-masing S-box 4-bit tersebut diwakili oleh daftar yang menggunakan notasi heksadesimal. Sedangkan untuk permutasi q1, S-box 4-bit yang digunakan adalah :
t0 t1 t2 t3 2.2.3
= = = =
2 1 4 B
8 E C 9
B 2 7 5
D B 5 1
F 4 1 C
7 C 6 3
6 3 9 D
E 7 A E
3 6 0 6
1 D E 4
9 A D 7
4 5 8 F
0 F 2 2
A 9 B 0
C 0 3 8
5 8 F A
Langkah Utama Adapun metode untuk membagi plaintext adalah sebagai berikut, 16 byte dari
plaintext p0, . . . , p15 dibagi menjadi 4 double word P0, . . . , P3 masing-masing menggunakan konversi little-endian.
21
âHL 3
Pi =
p 4 i+j .28 j
i = 0, . . ., 3
j=0
Pada langkah input whitening, word tersebut di XOR dengan 4 expanded key word.
R0,i = Pi Å K i
i = 0, . . ., 3
Dari setiap 16 putaran, 2 word pertama akan digunakan sebagai input dari fungsi F, yang mana juga menggunakan jumlah putaran sebagai input. Kata ketiga di XOR dengan output pertama dari F, kemudian dirotasi ke kanan sebesar 1 bit. Word keempat dirotasi ke kiri sebesar 1 bit dan di XOR menggunakan output kedua dari F. Langkah ini
H LHH LL HL
dapat dirumuskan sebagai berikut :
Fr,0, Fr,1 = F Rr,0, Rr,1, r Rr+1,0 = ROR Rr,2 Å Fr,0, 1 Rr+1,1 = ROL Rr,3, 1 Å Fr,1 Rr+1,2 = Rr,0 Rr+1,3 = Rr,1
Untuk r = 0, . . . , 15 dan dimana ROR serta ROL adalah fungsi rotasi dari argumen pertama (Double word) kiri atau kanan sesuai nomor yang diindikasikan pada argumen kedua. Langkah pada output whitening mengembalikan ‘pertukaran’ yang terdapat di
HL AH@DLE
putaran terakhir, dan meng-XOR word data dengan 4 expanded key word.
Ci = R16, i+2
mod4 Å
Ki+4
i = 0, ..., 3
word dari ciphertext kemudian dikonversi menjadi 16 byte c0, . . . , c15 dengan menggunakan konversi little-endian yang sama dengan yang digunakan pada plaintext. Ci4 ci = mod 28 i = 0, ..., 15 8 i mod4 2
2.2.3.1 Fungsi F Fungsi F adalah permutasi yang bergantung pada key yang memiliki nilai 64 bit. Fungsi ini memiliki 3 argumen, 2 input word R0 dan R1, dan bilangan bulat r digunakan untuk memilih subkey yang diperlukan. R0 disampaikan ke dalam fungsi g, yang membentuk T0.R1 dirotasi ke kiri sebanyak 8 bit dan kemudian disampaikan ke fungsi g
22
untuk membentuk T1. Hasil dari T0 dan T1 kemudian dikombinasi dengan menggunakan
H L H H L H L H L
PHT dan 2 word dari expanded key dihasilkan.
T0 T1 F0 F1
= g R0
= g ROL R1, 8
T0 + T 1 + K2 r+8 mod 232 = T0 + 2 T 1 + K2 r+9 mod 232 =
Dimana (F0,F1) adalah hasil dari F.
2.2.3.2 Fungsi g Fungsi g adalah inti dari algoritma twofish. Word dari input dibagi menjadi 4 byte. Di setiap byte disampaikan ke key-dependent masing-masing dari S-box. Masingmasing S-box bersifat bijektif, ambil 8 bit input, dan hasilkan 8 bit output. Keempat hasil akan diintrepretasikan sebagai vektor dengan panjang 4 melalui GF(28), dan dimultiplikasi menggunakan 4 x 4 MDS matriks. vektor
A E @ D i y j z ijjj y i y z j z j z z j z j z z j z k{ jk z k {{ â
yang dihasilkan
diintrepretasikan sebagai double word yang mana merupakan hasil dari fungsi g.
xi = X 28i mod 28 i = 0, ..., 3 yi = si xi i = 0, ..., 3 z0 z1 z2 z3
=
3
Z=
. ... . . . . MDS . . . . . ... .
y0 y1 y2 y3
zi .28 i
i=0
Dimana X adalah word dari input, si adalah key-dependent S-boxes dan Z adalah hasil dari fungsi g. Berdasarkan Savard (1999), keempat key-dependent S-boxes tersebut terbentuk dari elemen 32 bit dari vektor S. Jika panjang key yang digunakan adalah 256 bit, vektor S memiliki 4 elemen 32 bit, s0, s1, s2, dan s3, sehingga operasi yang dijalankan adalah output = q0(S0,0 xor q1(S1,0 xor q1(S2,0 xor q0(S3,0 xor q1(input)))) output = q1(S0,1 xor q1(S1,1 xor q0(S2,1 xor q0(S3,1 xor q0(input)))) output = q0(S0,2 xor q0(S1,2 xor q1(S2,2 xor q1(S3,2 xor q0(input)))) output = q1(S0,3 xor q0(S1,3 xor q0(S2,3 xor q1(S3,3 xor q1(input)))) yang mana S2,1 berarti byte ke 1 dari word ke 2 dalam vector S.
23
Saat panjang key yang digunakan sepanjang 192 bit, definisi S-box disederhanakan menjadi output = q0(S0,0 xor q1(S1,0 xor q1(S2,0 xor q0(input))) output = q1(S0,1 xor q1(S1,1 xor q0(S2,1 xor q0(input))) output = q0(S0,2 xor q0(S1,2 xor q1(S2,2 xor q1(input))) output = q1(S0,3 xor q0(S1,3 xor q0(S2,3 xor q1(input))) dan jika panjang key yang digunakan 128 bit, definisi S-box disederhanakan menjadi output = q0(S0,0 xor q1(S1,0 xor q1(input)) output = q1(S0,1 xor q1(S1,1 xor q0(input)) output = q0(S0,2 xor q0(S1,2 xor q1(input)) output = q1(S0,3 xor q0(S1,3 xor q0(input)) Dimana matriks MDS yang digunakan adalah : 01 EF 5 B 5 B 5 B EF EF 01 MDS = EF 5 B 01 EF EF 01 EF 5 B
jijj k
2.2.4
y z z z {
Algoritma Dekripsi Twofish Menurut Xue (p4, 2006), proses dekripsi dari kriptografi yang menggunakan
Feistel Network memiliki proses yang sama dengan proses enkripsi dengan menggunakan ciphertext sebagai input-nya, akan tetapi subkey K digunakan dengan urutan yang terbalik. Pendapat Xue ini dapat digunakan untuk proses dekripsi pada algoritma Twofish, akan tetapi pada algoritma Twofish terdapat operasi pada bagian Feistel Network sebelah kanan yang mengakibatkan adanya perubahan pada algoritma Twofish seperti berikut
H LHH LL HL Fr,0, Fr,1 = F Rr,0, Rr,1, r Rr+1,1 = ROR Rr,3 Å Fr,1, 1 Rr+1,0 = ROL Rr,2, 1 Å Fr,0 Rr+1,2 = Rr,0 Rr+1,3 = Rr,1
2.3
ROL dan ROR Operasi ROL dan ROR adalah salah satu operasi yang digunakan dalam bahasa
assembly. Menurut Hyde (1996) operasi ROL adalah operasi yang merotasi input-nya ke kiri sesuai dengan nilai bit yang telah ditentukan dimana bit pertama nantinya akan berputar menjadi bit terakhir, sedangkan operasi ROR adalah operasi yang merotasi 24
input-nya ke kanan sesuai dengan nilai bit yang telah ditentukan dimana bit terakhir nantinya akan berputar menjadi bit pertama.
2.4
Interaksi Manusia dan Komputer Menurut Shneiderman (1998, p15) Dalam merancang suatu program atau sistem,
perlu diperhatikan satu hal yang sangat penting, yaitu interaksi antara pengguna dengan program atau sistem. Interaksi yang baik haruslah bersifat user friendly, yang berarti mudah untuk digunakan oleh pengguna yang awam sekalipun. Dalam merancang program atau sistem yang user friendly ada beberapa kriteria yang harus diperhatikan : 1. Waktu belajar, yaitu lamanya waktu yang diperlukan oleh seorang pengguna untuk mempelajari cara menggunakan piranti lunak tersebut. 2. Kecepatan sistem, yaitu kecepatan sistem dalam merespon perintah yang diberikan oleh pengguna. 3. Tingkat kesalahan pengguna, yaitu jumlah dan jenis kesalahan yang paling sering dilakukan oleh pengguna dalam menjalankan piranti lunak mencapai tingkat yang rendah. 4. Daya ingat pengguna, yaitu jangka waktu suatu informasi dapat diingat oleh seorang pengguna. 5. Kepuasan pengguna, hal ini sangat penting karena apabila pengguna tidak menyukai sistem yang dibuat, maka ia tidak akan menggunakannya lagi. Menurut Shneiderman (1998, pp74-75) terdapat delapan aturan emas (eight golden rules) yang digunakan dalam merancang suatu antar muka yang baik, aturan tersebut yaitu : 1. Berusaha untuk konsisten Konsistensi dalam merancang antarmuka antara lain konsistensi urutan aksi dalam situasi-situasi yang memiliki kemiripan, hal-hal yang standar menggunakan istilah yang sama, penggunaan font yang sama, dan lain-lain. 2. Memungkinkan pengguna menggunakan shortcut Dengan meningkatnya kemampuan pengguna dalam mengoperasikan sistem, pengguna menginginkan suatu perintah yang minimal dengan hasil yang
25
sama dengan jumlah perintah yang banyak. Tersedianya shortcut, tombol spesial dan makro, akan sangat berguna bagi pengguna yang mengutamakan efisiensi. 3. Memberikan umpan balik yang informatif Sistem yang baik memberikan umpan balik terhadap semua aksi yang dilakukan pengguna. Setiap interaksi pengguna seharusnya diberi umpan balik seperti suara atau tampilan visual untuk mengkonfirmasikan bahwa piranti lunak memberikan reaksi terhadap aksi pengguna, suatu tampilan yang
bersifat
statis
atau
tidak
memberikan
umpan
balik
akan
membingungkan pengguna. 4. Merancang dialog untuk menghasilkan keadaan akhir yang baik Setiap aksi yang dilakukan pengguna harus mempunyai urutan yang terorganisasi dengan baik. Dengan kata lain, aksi harus memiliki kondisi permulaan, tengah, dan kondisi akhir. Setelah aksi selesai dilakukan, akan sangat baik apabila tersedia umpan balik yang dapat menginformasikan pengguna bahwa aksi yang mereka lakukan telah berhasil dengan baik, sehingga akan timbul rasa aman pada pengguna untuk melanjutkan ke aksi yang berikutnya. 5. Memberikan pencegahan kesalahan dan penanganan kesalahan yang sederhana Sistem harus dibuat sedemikian rupa sehingga pengguna tidak akan melakukan kesalahan yang besar. Jika pengguna melakukan kesalahan, hendaknya sistem memberikan peringatan berupa pesan kesalahan yang sederhana, spesifik dan bersifat konstruktif. 6. Memungkinkan pembalikan aksi yang mudah Setiap aksi harus dirancang sedemikian rupa sehingga pengguna dapat melakukan pembalikan untuk kembali ke keadaan semula sebelum aksi tersebut dijalankan. Dengan adanya fasilitas ini, pengguna akan memiliki keberanian untuk mengeksplorasi sistem yang telah dibuat, karena apabila pengguna telah melakukan kesalahan, mereka dapat melakukan pembalikan terhadap aksi yang telah dilakukan.
26
7. Pengguna dapat menguasai sistem Pengguna harus mampu menguasai sistem dengan cara memberikan perintahperintah kepada sistem. Sistem yang rumit, kesulitan dalam memperoleh informasi, serta ketidakmampuan menjalankan sistem akan membuat pengguna merasa tidak nyaman dan tidak puas.
8. Mengurangi beban ingatan jangka pendek Keterbatasan manusia dalam mengelola memori jangka pendek menyebabkan dibutuhkannya suatu tampilan yang sesederhana mungkin dimana informasi yang
ada
sebaiknya
dikelompokkan,
pengaturan
dalam
multipage,
pergerakkan window yang sesedikit mungkin, waktu latihan yang cukup dan optimal serta pengaturan dalam urutan aksi.
2.5
Rekayasa Piranti Lunak Menurut Bauer (Pressman, 2001, p20), Rekayasa Piranti Lunak adalah
penggunaan prinsip-prinsip perancangan untuk membuat suatu piranti lunak yang dapat diandalkan dan dapat diterapkan pada mesin secara efisien. Menurut Pressman (2001, p20-21) rekayasa piranti lunak mencakup 3 elemen yang mampu mengontrol proses pengembangan piranti lunak, yaitu : 1. Proses (Process) Proses rekayasa piranti lunak merupakan perekat yang menggabungkan layer teknologi secara bersama-sama dan memungkinkan pengembangan piranti lunak komputer secara berkala 2. Metode-metode (Methods) Metode piranti lunak menyediakan cara-cara teknis dalam membangun piranti lunak. Terdiri dari analisis kebutuhan, perancangan, membangun program, pengujian, dan dukungan. 3. Alat-alat bantu (Tools)
27
Menyediakan pendukung otomatis atau semi otomatis untuk proses dan metode, misalnya Computer Aided Software Engineering (CASE) yang mengkombinasikan piranti lunak, piranti keras, dan database piranti lunak. Menurut Pressman (2001, pp28-30) salah satu model yang paling umum dan sering digunakan dalam membangun piranti lunak adalah model waterfall, atau yang lebih dikenal dengan nama Classic Life Cycle. Pada model waterfall ini terdapat 6 tahap yaitu :
1. Rekayasa sistem Tahap awal perancangan piranti lunak adalah rekayasa sistem yang akan dibangun dengan menetapkan kebutuhan-kebutuhan elemen sistem. 2. Analisis kebutuhan piranti lunak Sebelum merancang sistem harus terlebih dahulu diketahui kebutuhan, informasi, beserta spesifikasi piranti lunak. 3. Perancangan Pada tahap ini menitikberatkan pada tiga komponen program, yaitu struktur data, arsitektur piranti lunak, dan prosedur detail. 4. Pembuatan kode Merupakan penerjemahan hasil rancangan ke bahasa yang dimengerti oleh mesin dalam bentuk program-program. 5. Pengujian Sebelum diaplikasikan, suatu piranti lunak harus diuji dahulu agar keluaran yang dihasilkan oleh sistem sesuai dengan yang diharapkan. 6. Pemeliharaan Pemeliharaan piranti lunak dilakukan untuk mengantisipasi peningkatan kebutuhan pengguna akan fungsi-fungsi baru.
2.5.1
State Transition Diagram (STD) Menurut Pressman (2001, p302) State Transition Diagram atau diagram transisi
merupakan suatu alat perancangan yang menggambarkan sistem bekerja sebagai akibat
28
dari suatu kejadian yang dinamis. Kejadian difokuskan dan dihubungkan dengan berbagai cara dari state ke state. Simbol-simbol yang digunakan dalam STD : − State (tampilan kondisi) Berupa simbol kotak, merepresentasikan layar yang ditampilkan menurut keadaan atau atribut, untuk memenuhi suatu tindakan pada waktu tertentu yang mewakili suatu bentuk keberadaan atau kondisi tertentu.
Gambar 2.6 State − State Transition (tindakan) Berupa simbol anak panah disertai keterangan tindakan yang dilakukan.
Gambar 2.7 State Transition − Kondisi dan Aksi Kondisi bersifat mengubah state dan aksi adalah aksi yang dilakukan sistem ketika state berubah. 2.5.2
Spesifikasi Proses Berdasarkan Pressman (2001,p327) spesifikasi proses adalah penjelasan dari
proses-proses yang terjadi di dalam sistem, spesifikasi proses menjadi pedoman bagi pembuat program dalam membuat kode program maupun dokumentasi. Beberapa cara untuk membuat spesifikasi proses antara lain dengan : − Tabel keputusan − Pseudocode − Bagan alur (Flowchart) − Diagram Nassi-Shneiderman − Bentuk narasi atau cerita
29