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 :
− 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
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
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).
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
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.
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 benar-benar 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)
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
substitution-permutation-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
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 S-boxes, yang dibentuk menggunakan 2 8 x 8 bit permutasi yang sudah pasti dan
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 + 2b 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.
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.
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
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
Mi =
â
j=03
m
H
4i+jL
. 28j i = 0, ..., 2k- 1Kemudian ke dalam vektor 2 word dari panjang k
Me =
H
M0, M2, ..., M2k-2L
Mo =
H
M1, M3, ..., M2k-1L
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.
i
k
jjjjjjjjjjj
si,0 si,1 si,2 si,3y
{
z
z
z
z
z
z
z
z
z
z
z
=i
k
jjjjjjjjjjjjj
. ... . . . . RS . . . . ... .y
{
z
z
z
z
z
z
z
z
z
z
z
z
z
.i
k
jjjjjjjjjjjjjjjj
jjjjjjjjjjj
m8i m8i+1 m8i+2 m8i+3 m8i+4 m8i+5 m8i+6 m8i+7y
{
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
Si =â
j=0 3 si,j. 28j Untuk i = 0, . . . , k-1 maka S=H
Sk-1, Sk-2, ..., S0L
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 perkalian matriks MDS. Menggunakan pemetaan tersebut, RS matriks dapat ditulis :
RS=
i
k
jjjjjjjjj
01 A4 55 87 5 A 58 DB 9 E A4 56 82 F3 1E C6 68 E5 02 A1 FC C1 47 AE 3D 19 A4 55 87 5A 58 DB 9E 03y
{
z
z
z
z
z
z
z
z
z
2.2.2 Expanded KeyWord yang terdapat pada expanded key didefinisikan dengan menggunakan
fungsi h. r = 224+ 216+ 28+ 20 Ai = h
H
2ir, MeL
Bi = ROLH
hH
H
2i+1L
r, MoL
, 8L
K2i =H
Ai+ BiL
mod 232 K2i+1 = ROLIH
Ai+2BiL
mod 232, 9M
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
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 di- XOR 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 fungsi g. Kemudian word dibagi menjadi byte.
li,j =
A
Li 28jE
mod 28xj =
A
X 28jE
mod 28Untuk i = 0, . . . , k-1 dan j = 0, . . . , 3 , maka urutan subtitusi dan XOR diaplikasikan. yk,j = xj j = 0, ..., 3 Jika k = 4, maka y3,0 = q1
@
y4,0D
Ål3,0 y3,1 = q0@
y4,1D
Ål3,1 y3,2 = q0@
y4,2D
Ål3,2 y3,3 = q1@
y4,3D
Ål3,3 Jika k ≥ 3, maka y2,0 = q1@
y3,0D
Ål2,0 y2,1 = q1@
y3,1D
Ål2,1 y2,2 = q0@
y3,2D
Ål2,2 y2,3 = q0@
y3,3D
Ål2,3Untuk semua kasus
y0 = q1
@
q0@
q0@
y2,0D
Ål1,0D
Å l0,0D
y1 = q0
@
q0@
q1@
y2,1D
Ål1,1D
Å l0,1D
y2 = q1
@
q1@
q0@
y2,2D
Ål1,2D
Å l0,2D
q0 dan q1 adalah permutasi yang sudah tetap berbasis nilai 8 bit. Vektor yang
dihasilkan yi dikalikan dengan matriks MDS, sama seperti fungsi g.
i
k
jjjjjjjjj
z0 z1 z2 z3y
{
z
z
z
z
z
z
z
z
z
=i
k
jjjjjjjjjjjjj
. ... . . . . MDS . . . . ... .y
{
z
z
z
z
z
z
z
z
z
z
z
z
z
.i
k
jjjjjjjjj
y0 y1 y2 y3y
{
z
z
z
z
z
z
z
z
z
Z =â
i=0 3 zi. 28iGambar 2.5 Fungsi h
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. Untuk nilai input x, dapat didefinisikan output y sebagai berikut :
a0, b0 =
@
x 16D
, x mod 16 a1 = a0Åb0 b1 = a0 Å ROR4H
b0, 1L
Å8a0 mod 16 a2, b2= t0@
a1D
, t1@
b1D
a3 = a2Åb2 b3 = a2 Å ROR4H
b2, 1L
Å8a2 mod 16 a4, b4= t2@
a3D
, t3@
b3D
y = 16b4 + a4Dimana 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 =
@
8 1 7 D 6 F 3 2 0 B 5 9 E C A 4D
t1 =
@
E C B 8 1 2 3 5 F 4 A 6 7 0 9 DD
t2 =
@
B A 5 E 6 D 9 0 C 8 F 3 2 4 7 1D
t3 =
@
D 7 F 4 1 2 6 E 9 B 3 0 8 5 C AD
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 =
@
2 8 B D F 7 6 E 3 1 9 4 0 A C 5D
t1 =
@
1 E 2 B 4 C 3 7 6 D A 5 F 9 0 8D
t2 =
@
4 C 7 5 1 6 9 A 0 E D 8 2 B 3 FD
t3 =
@
B 9 5 1 C 3 D E 6 4 7 F 2 0 8 AD
2.2.3 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
Pi =
â
j=03
p
H
4i+jL
.28j i = 0, . . ., 3Pada langkah input whitening, word tersebut di XOR dengan 4 expanded key
word.
R0,i = Pi Å Ki 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 dapat dirumuskan sebagai berikut :
H
Fr,0, Fr,1L
= FH
Rr,0, Rr,1, rL
Rr+1,0 = ROR
H
Rr,2 Å Fr,0, 1L
Rr+1,1 = ROL
H
Rr,3, 1L
ÅFr,1Rr+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 putaran terakhir, dan meng-XOR word data dengan 4 expanded key word.
Ci = R16,
H
i+2L
mod4ÅKi+4 i = 0, ..., 3word dari ciphertext kemudian dikonversi menjadi 16 byte c0, . . . , c15 dengan
menggunakan konversi little-endian yang sama dengan yang digunakan pada plaintext.
ci =
A
C@
i 4D
28H
i mod4L
E
mod 2 8 i = 0, ..., 15 2.2.3.1 Fungsi FFungsi 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
untuk membentuk T1. Hasil dari T0 dan T1 kemudian dikombinasi dengan menggunakan
PHT dan 2 word dari expanded key dihasilkan. T0 = g
H
R0L
T1 = g
H
ROLH
R1, 8L
L
F0 =
H
T0 + T1+ K2r+8L
mod 232F1 =
H
T0 +2T1+ K2r+9L
mod 232Dimana (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.
Masing-masing 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 yang dihasilkan diintrepretasikan sebagai double word yang mana merupakan hasil dari fungsi g.
xi =
A
X 28iE
mod 28 i = 0, ..., 3 yi = si@
xiD
i=0, ..., 3i
k
jjjjjjjjj
z0 z1 z2 z3y
{
z
z
z
z
z
z
z
z
z
=i
k
jjjjjjjjjjjjj
. ... . . . . MDS . . . . ... .y
{
z
z
z
z
z
z
z
z
z
z
z
z
z
.i
k
jjjjjjjjj
y0 y1 y2 y3y
{
z
z
z
z
z
z
z
z
z
Z =â
i=0 3 zi.28iDimana 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))))
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 :
MDS =
i
k
jjjjjjjjj
01 EF 5 B 5 B 5B EF EF 01 EF 5B 01 EF EF 01 EF 5By
{
z
z
z
z
z
z
z
z
z
2.2.4 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
Fr,0, Fr,1L
= FH
Rr,0, Rr,1, rL
Rr+1,1 = ROR
H
Rr,3 Å Fr,1, 1L
Rr+1,0 = ROL
H
Rr,2, 1L
ÅFr,0Rr+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
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
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.
7. Pengguna dapat menguasai sistem
Pengguna harus mampu menguasai sistem dengan cara memberikan perintah-perintah 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.
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
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