BAB II. STUDI LITERATUR Pada bab ini, akan dipaparkan teori-teori yang mendasari pengerjaan tugas akhir ini. Secara umum, teori yang dibahas adalah mengenai kriptografi, XXTEA, dan format penulisan surat elektronik.
II.1 Kriptografi Kriptografi adalah ilmu menganalisis dan menguraikan kode dan sandi rahasia dan kriptogram (sebuah potongan tulisan dalam kode atau sandi rahasia) [PRI08]. Tujuan utama kriptografi adalah memungkinkan 2 (dua) orang, direpresentasikan sebagai Alice dan Bob, untuk berkomunikasi melalui saluran tidak aman dalam sebuah cara sehingga lawannya, Oscar, tidak mampu mengerti isi percakapan mereka. Saluran tidak aman yang dimaksud dapat berupa jalur telepon atau jaringan komputer. Informasi yang Alice ingin kirim ke Bob, disebut sebagai plaintext, dapat berupa teks berbagai bahasa, data numerik atau lainnya—strukturnya dibebaskan kombinasinya. Alice mengenkripsi plaintext, menggunakan sebuah kunci, dan mengirimkan ciphertext hasil melalui saluran komunikasi. Oscar yang mencuri dengar ciphertext dalam saluran komunikasi tidak bisa menentukan plaintext-nya, tetapi jika Bob mengetahui kunci enkripsinya, Bob dapat mendekripsi ciphertext dan merekonstruksi plaintext yang bersesuaian. Konsep di atas dideskripsikan secara formal menggunakan notasi matematis berikut [STI95]: Sebuah kriptosistem adalah sebuah tuple berukuran 5 (lima), yaitu (P,C,κ,ε,D), dimana kondisi berikut dipenuhi: 1. P adalah kumpulan terbatas dari plaintext yang mungkin. 2. C adalah kumpulan terbatas dari ciphertext yang mungkin. 3. κ, ruang kunci, adalah kumpulan terbatas dari kunci yang mungkin.
II-1
II-2
4. Untuk setiap K є κ, terdapat sebuah aturan enkripsi eK є ε dan sebuah aturan dekripsi yang bersesuaian dK є D. Masing-masing eK : P → C dan dK : C → P adalah fungsifungsi sehingga dK (eK (x)) = x untuk setiap plaintext x є P
Properti utama dari notasi di atas adalah properti 4. Disebutkan bahwa jika sebuah plaintext x dienkripsi menggunakan eK dan ciphertext yang dihasilkan lalu didekripsi menggunakan dK, plaintext awal x akan dihasilkan. Alice dan Bob akan menggunakan protokol berikut dalam menjalankan sebuah kriptosistem spesifik: 1. Alice dan Bob memilih sebuah kunci random K є κ. Hal ini dilakukan ketika mereka berada di tempat yang sama dan tidak sedang diamati oleh Oscar, atau ketika mereka mempunyai akses ke saluran komunikasi yang aman, dimana mereka dapat berada di tempat yang berbeda. 2. Suatu saat, Alice ingin mengirimkan pesan pada Bob melalui saluran tidak aman. Pesan dimisalkan sebagai sebuah string berbentuk
x = x1x2…xn
untuk sebuah integer n ≥ 1, dimana masing-masing simbol plaintext xi є P, 1 ≤ i ≤ n. 3. Masing-masing xi dienkripsi menggunakan aturan enkripsi eK yang spesifik menggunakan kunci yang telah ditentukan sebelumnya, yaitu K. Lalu, Alice menghitung yi = eK (xi), 1 ≤ i ≤ n, dan string ciphertext yang dihasilkan berbentuk
y = y1y2…yn
dikirimkan melalui saluran tidak aman. 4. Ketika Bob menerima ciphertext y1y2…yn, dia mendekripsi ciphertext tersebut menggunakan aturan dekripsi dK, menghasilkan string plaintext awal, x1x2…xn. Lihat Gambar II-1 sebagai ilustrasi dari saluran komunikasi yang digunakan.
II-3
Gambar II-1 Ilustrasi Saluran Komunikasi
Keterangan Gambar II-1: 1. X
: plaintext, pesan yang akan dikirimkan.
2. Y
: ciphertext, pesan yang telah terenkripsi.
3. K
: kata kunci yang digunakan untuk enkripsi X.
4. Alice
: pengirim pesan.
5. Bob
: penerima pesan.
6. Oscar
: kriptanalis, orang yang berusaha memecahkan ciphertext.
7. Encrypter
: program enkripsi plaintext dengan kata kunci enkripsi.
8. Decrypter
: program dekripsi ciphertext dengan kata kunci dekripsi.
9. Key source
: sumber generasi kata kunci yang random.
10. Secure channel: saluran komunikasi aman yang digunakan untuk mengirimkan kata kunci. Jelas terlihat bahwa fungsi enkripsi eK adalah fungsi injektif (contoh, satu-ke-satu), jika tidak, dekripsi tidak dapat dilakukan. Sebagai contoh, jika y = eK (x1) = eK (x2)
dimana x1 ≠ x2, maka Bob tidak dapat mengetahui apakah y harus didekripsi menjadi x1 atau x2.
II-4
II.2 Block Cipher Block cipher adalah sebuah tipe algoritma enkripsi kunci simetris yang mentransformasikan sebuah blok plaintext berukuran tetap (teks yang tidak terenkripsi) menjadi blok ciphertext (teks yang terenkripsi) dengan ukuran yang sama [RSA09]. Transformasi ini berlangsung dengan menggunakan kunci rahasia masukan dari user. Proses dekripsi dilakukan dengan menjalankan transformasi kebalikan ke blok ciphertext dengan menggunakan kunci rahasia yang sama. Ukuran 1 (satu) blok yang selalu tetap dinamakan block size dan untuk sebagian besar block cipher, block size sebesar 64 bits. Sebagai contoh, misalkan terdapat sebuah plaintext x. Plaintext tersebut dapat dilihat sebagai kumpulan blok: x = x1x2…xn
dimana xm, 1≤m≤n, merupakan satuan blok dari ciphertext yang berukuran 64 bits. Ketika user mengenkripsi x, proses enkripsi dilakukan per blok sehingga menghasilkan ciphertext y yang dapat dilihat sebagai berikut: y = y1y2…yn = eK(x1) eK(x2)… eK(xn)
Gambar II-2 Skema Enkripsi dan Dekripsi Block Cipher di bawah menampilkan proses enkripsi dan dekripsi block cipher secara umum [MUN06].
Gambar II-2 Skema Enkripsi dan Dekripsi Block Cipher [ MUN06]
II-5
Keterangan Gambar II-2: 1. Diagram kiri menggambarkan proses enkripsi, sedangkan diagram kanan proses dekripsi. 2. E
: proses enkripsi dengan masukan plaintext X dan kunci K yang menghasilkan ciphertext Y.
3. D
: proses dekripsi dengan masukan ciphertext Y dan kunci K yang menghasilkan plaintext X.
II.3 Jaringan Feistel Horst Feistel (1915-1990) adalah seorang peneliti non-militer pertama dalam bidang kriptografi dan dapat dinilai sebagai pendiri dari dasar block cipher modern [EXH09]. Pada 1973, dia mempublikasikan sebuah artikel dengan judul “Cryptography and Computer Privacy” dalam sebuah majalah bernama “Scientific American”1, yang di dalamnya dia berusaha untuk mencakup aspek terpenting mesin enkripsi dan memperkenalkan sesuatu yang sekarang dikenal dengan nama jaringan Feistel. Pemodelan dengan Jaringan Feistel kemudian menjadi terkenal digunakan sebagai basis untuk banyak skema algoritma enkripsi.
Gambar II-3 Skema Penyandian dari Feistel Cipher 1
Isi dari majalah “Scientific American” dapat dibaca di http://www.prism.net/user/dcowley/docs.html
II-6
Keterangan Gambar II-3: 1. Ln
: bagian kiri dari blok plaintext yang akan dienkripsi.
2. Rn
: bagian kanan dari blok plaintext yang akan dienkripsi.
3. Kn
: kata kunci yang digunakan untuk enkripsi pada putaran ke-n.
4. F
: fungsi transformasi, yang tidak perlu memiliki kebalikan sehingga dapat berupa fungsi yang rumit.
Model jaringan Feistel pada Gambar II-3 adalah sebagai berikut [MUN06]: 1. Bagi blok yang panjangnya n bit menjadi dua bagian, kiri (L) dan kanan (R), yang masing-masing panjangnya n/2 (hal ini mensyaratkan n harus genap). 2. Definisikan cipher blok berulang dimana hasil dari putaran ke-i ditentukan dari hasil putaran sebelumnya, yaitu: Li = Ri+1 Ri = Li – 1 ⊕ f(Ri – 1, Ki) yang dalam hal ini, i = 1, 2,… r (r adalah jumlah putaran). Ki = upa-kunci (subkey) pada putaran ke-i f = fungsi transformasi (di dalamnya terdapat fungsi substitusi, permutasi, dan/atau ekspansi, kompresi).
II.4 Fungsi Hash SHA Fungsi hash adalah fungsi yang menerima masukan string yang panjangnya sembarang, lalu mentransformasikannya menjadi string keluran yang panjangnya tetap (umumnya berukuran jauh lebih kecil daripada ukuran string semula) [MUN06]. Tujuan dari fungsi hash [MUN06], yaitu: 1. Menjaga integritas data, dimana fungsi hash sangat peka terhadap perubahan pesan. 2. Menghemat waktu pengiriman ketika melakukan pengecekan validitas sebuah file dengan melakukan perbandingan message digest antara file salinan dengan file asli.
II-7
3. Menormalkan panjang data yang beraneka ragam, misalkan penyimpanan password. Password masukan user dapat beragam ukurannya, tetapi dengan menggunakan fungsi hash, panjang message digest-nya akan selalu sama. Terdapat beberapa fungsi hash yang ada [MUN06], yaitu: 1. MD2, MD4, MD5. 2. Secure Hash Function (SHA), yang terdiri dari SHA0, SHA1, dan SHA2 (memiliki varian berupa SHA224, SHA256, SHA384, dan SHA512). 3. Snefru. 4. N-hash. 5. RIPE-MD, dan lain-lain. Fungsi hash SHA1 dikembangkan oleh National Institute of Standards and Technology (NIST) dan National Security Agency (NSA) melalui publikasi Federal Information Processing Standards (FIPS) 180: Secure Hash Standard (SHS) pada Mei 1993. SHA1 digunakan untuk menghitung representasi singkat dari sebuah pesan atau file [FAQ09]. Ketika sebuah pesan dengan panjang lebih kecil dari 264 bits sebagai input, SHA1 menghasilkan sebuah keluaran yang dinamakan message digest yang berukuran 160 bit. Setiap perubahan pada input akan menghasilkan perubahan message digest dengan probabilitas tinggi. SHA1 dikatakan aman karena fungsi hash ini secara penghitungan tidak dapat dicari sebuah pesan yang bersesuaian dengan message digest yang diberikan.
II.5 Corrected Block Tiny Encryption Algorithm Pada subbab ini, akan dibahas definisi, algoritma penyandian, dan detail sandi yang akan digunakan dalam tugas akhir ini. Secara umum, algoritma yang digunakan adalah block cipher.
II.5.1 Definisi Corrected Block Tiny Encryption Algorithm, untuk selanjutnya disebut sebagai XXTEA, adalah sebuah algoritma penyandian yang sederhana, tapi kuat yang berbasis
II-8
iterasi Feistel dan menggunakan banyak ronde untuk mendapatkan keamanan [MOV08]. XXTEA dirancang berupa program kecil yang dapat berjalan pada banyak mesin dan mengenkripsi dengan aman. Algoritma ini menggunakan banyak iterasi dibandingkan program yang rumit sehingga algoritma ini dapat diterjemahkan ke dalam banyak bahasa pemrograman dengan mudah. XXTEA juga merupakan sebuah algoritma enkripsi efektif yang mirip dengan DES2 yang dapat digunakan untuk aplikasi web yang membutuhkan keamanan. Ketika menggunakan algoritma ini, sebuah perubahan dari teks asal akan mengubah sekitar setengah dari teks hasil tanpa meninggalkan jejak dimana perubahan berasal. XXTEA beroperasi pada blok yang berukuran tetap yang merupakan kelipatan 32 bits dengan ukuran minimal 64 bits. Jumlah dari putaran lengkap bergantung pada ukuran blok, tetapi terdapat minimal 6 (bertambah terus hingga 32 untuk ukuran blok yang lebih kecil). Algoritma ini menggunakan lebih banyak fungsi pengacakan yang menggunakan kedua blok tetangganya dalam pemrosesan setiap kata dalam blok. Untuk kemudahan penggunaan dan keamanan secara umum, XXTEA lebih tepat digunakan ketika dapat dipakai untuk kondisi berikut: 1. Perubahan satu bit pada plaintext akan mengubah sekitar setengah dari total bits dari seluruh blok tanpa meninggalkan jejak dimana perubahan dimulai. 2. Walaupun terdapat perubahan yang teratur pada plaintext (misalkan nomor pesan), hanya pesan yang sama yang akan memberikan ciphertext yang sama dan kebocoran informasi minimal. 3. Jika tidak memungkinkan untuk memasukkan pesan yang panjang, pesan tersebut dapat dipecah menjadi beberapa bagian yang masing-masing berukuran 60 kata.
2
Keterangan lebih lengkap mengenai DES dapat dibaca di http://csrc.nist.gov/publications/fips/fips46-
3/fips46-3.pdf
II-9
II.5.2 Algoritma Penyandian
Gambar II-4 Satu Iterasi dalam XXTEA
Keterangan simbol: 1. Xr, Xr-1, Xr+1
: blok plaintext, dimana r adalah urutan blok yang sedang
diacak. 2. q
: jumlah iterasi yang sedang dilakukan.
3. DELTA
: q dikalikan dengan konstanta yang bernilai 0x9E3779B.
4. Kr
: blok kata kunci ke-r, dimana r sama dengan keterangan di
atas. 5. <
: pergeseran bit ke kiri sebanyak n kali.
6. >>n
: pergeseran bit ke kanan sebanyak n kali.
7.
: operasi XOR.
8.
: operasi penambahan.
II-10
Keterangan warna: 1. Kotak berwarna merah
: input user.
2. Kotak berwarna hijau
: output program.
Gambar II-4 Satu Iterasi dalam XXTEA menampilkan proses pengacakan yang dilakukan pada satu iterasinya. Proses iterasi dalam XXTEA dilakukan dalam 2 kali iterasi yang dilakukan secara bersarang. Pada iterasi teratas, iterasi dilakukan sebanyak q, dimana q = 6 + 52/n
dengan n ≥ 1 dimana n adalah jumlah blok dari plaintext. Lalu, pada iterasi selanjutnya, iterasi dilakukan sebanyak n kali. Proses pengacakan yang dilakukan dalam satu iterasi XXTEA adalah sebagai berikut: 1. Algoritma akan mengacak blok ke-r dari plaintext. 2. Proses akan mengambil xr-1, xr+1, DELTA, dan kata kunci sebagai input. 3. Pengacakan pertama: xr-1<<2 di-XOR-kan dengan xr+1>>5. 4. Pengacakan kedua: xr-1>>3 di-XOR-kan dengan xr+1<<4. 5. Hasil yang didapat dari tahap 4 dan 5 ditambahkan. 6. Pengacakan ketiga: xr-1 di-XOR-kan dengan D yang merupakan perkalian antara konstanta DELTA yang bernilai 0x9E3779B dengan jumlah iterasi pertama yang telah dilakukan. 7. Pengacakan keempat: xr+1 di-XOR-kan dengan salah satu blok kata kunci, yaitu blok ke-(r XOR D>>2). 8. Hasil yang didapat dari tahap ke 6 dan 7 ditambahkan. 9. Hasil yang didapat dari tahap 5 dan 8 di-XOR-kan. 10. Hasil yang didapat pada tahap 9 ditambahkan ke blok plaintext ke-r.
II.5.3 Detail Sandi Tabel II-1 menjelaskan detail algoritma XXTEA secara singkat mengenai panjang kata kunci, ukuran masing-masing blok, struktur algoritma, dan banyaknya ronde dalam satu proses pengacakan.
II-11
Tabel II-1 Detail Sandi
No
Variabel
Keterangan
1
Panjang kunci
128 bits
2
Ukuran blok
Tidak tetap, bergantung pada panjang teks asal
3
Struktur
Jaringan Feistel
4
Ronde
Tidak tetap, 6-32 ronde Feistel (sekitar 3-16 putaran) bergantung pada panjang blok.
II.6 Kata Kunci Pada subbab ini, akan dibahas definisi kata kunci, kekuatan kata kunci, dan cara pengukurannya. Semakin kuat kata kunci yang digunakan dalam enkripsi sebuah plaintext, semakin sulit sebuah ciphertext untuk dipecahkan. Selain kerumitan algoritma enkripsi yang digunakan, kerumitan kata kunci juga menentukan keamanan ciphertext yang didapatkan.
II.6.1 Definisi Kata kunci adalah sekumpulan karakter yang dimasukkan seorang pengguna untuk mendapatkan akses ke sumber informasi yang diproteksi [MIC08]. Terdapat sebuah dilema dalam pemilihan dan penggunaan kata kunci, dimana pengguna tidak mudah, atau bahkan tidak mampu mengingat kata kunci yang kuat dan kata kunci yang diingat justru kata kunci yang mudah ditebak. Kata kunci yang baik harus mengandung karakter campuran atau karakter khusus, dan tidak boleh mengandung kata-kata yang dapat ditemukan dalam kamus [LAW08]. Kata kunci dapat berupa gabungan huruf kapital atau huruf kecil. Sebuah teknik yang bagus untuk memilih kata kunci adalah dengan menggunakan huruf pertama dari sebuah frase, tapi jangan mengambil frase yang umum diketahui, seperti “An apple a day keeps the doctor away” (Aaadktda). Contoh: ambil frase yang bersifat pribadi dan tidak umum digunakan, seperti “My dog’s first name is Rex” (MdfniR). Selain itu, kata kunci yang baik memiliki panjang minimal 8 (delapan) karakter dan harus
II-12
mengandung sedikitnya 2 (dua) karakter bukan huruf. Disarankan agar kata kunci selalu diganti minimal sekali sebulan.
II.6.2 Pengukuran Kekuatan Kata Kunci Melihat adanya sejumlah saran yang dapat digunakan dalam membangun kata kunci yang baik, kata kunci dapat diukur derajat kekuatannya. Pengukuran kekuatan kata kunci dilakukan dengan melakukan penilaian terhadap kata kunci masukan. Terdapat sejumlah faktor penilaian yang dapat digunakan [GEE08], yaitu: 1. Panjang karakter kata kunci minimal 8. 2. Gunakan campuran huruf kapital atau huruf kecil. 3. Gunakan minimal 1 angka. 4. Gunakan karakter khusus (!,@,#,$,%,^,&,*,?,_,~). 5. Gunakan prinsip Leet, yaitu penggunaan karakter non-alfabet untuk menggantikan huruf yang memiliki kemiripan yang dekat atau perubahan pengucapan, seperti penggantian huruf “s” yang terakhir dengan “z” atau “(c)ks” untuk “x” [NAT08]. Untuk masing-masing faktor penilaian di atas, diberikan sebuah nilai tambahan jika faktor tersebut dipenuhi. Dengan menggunakan faktor-faktor penilaian di atas, sebuah kata kunci masukan akan dinilai derajat kekuatannya.
II.7 Surat Elektronik Surat elektronik adalah sebuah sistem komunikasi elektronik dunia yang di dalamnya sebuah pengguna komputer dapat membuat pesan pada sebuah terminal yang nantinya dapat diregenerasi di terminal penerima ketika penerima login [PRI09]. Sistem pengiriman surat elektronik modern didasarkan pada model store-and-forward yang di dalamnya server surat elektronik menerima, meneruskan, atau menyimpan pesan atas nama pengguna yang hanya terkoneksi ke infrastruktur surat elektronik dengan menggunakan komputer pribadinya.
II-13
Gambar II-5 Proses Pengiriman Surat Elektronik menjelaskan skema sederhana proses pengiriman surat elektronik dari Alice sebagai pengirim sampai Bob sebagai penerima.
Gambar II-5 Proses Pengiriman Surat Elektronik
Ketika Alice menekan tombol “Send” pada mail user agent (MUA)-nya, terjadi tahapan berikut: 1. MUA memformat pesan menggunakan protokol berkaitan untuk dikirimkan ke mail transfer agent (MTA) lokal, yang dimiliki oleh Internet Service Provider (ISP) Alice. 2. MTA melihat alamat tujuan dalam surat elektronik, yang pada contoh di atas adalah
[email protected]. 3. DNS server untuk domain b.org, yaitu ns.b.org, merespon dengan memberikan daftar MX yang menampilkan server mail untuk domain tersebut, yaitu mx.b.org, yang dimiliki oleh ISP Bob. 4. smtp.a.org mengirimkan pesan ke mx.b.org menggunakan protokol surat elektronik yang akan dimasukan ke mailbox Bob. 5. Ketika Bob menekan tombol “Read”, MUA akan mengambil pesan tersebut.
II-14
II.8 MIME MIME adalah format standar internet yang memperluas format surat elektronik untuk mendukung [MHO09]: 1. Teks dalam set karakter selain ASCII, biasanya dalam format encoding Base643. 2. Non-text attachments. 3. Badan pesan dalam banyak bagian. 4. Informasi header dalam non-ASCII set karakter. Contoh surat elektronik dalam format MIME: MIME-version: 1.0 Content-type: multipart/mixed; boundary="frontier" This is a message with multiple parts in MIME format. --frontier Content-type: text/plain This is the body of the message. --frontier Content-type: application/octet-stream Content-transfer-encoding: base64 PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcy BpcyB0aGUg Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== --frontier—
Keterangan: 1. Sebuah surat elektronik dapat dibangun dalam beberapa bagian yang dinyatakan oleh “Content-type:
multipart/mixed;” dan masing-
masing bagian dibatasi oleh sebuah boundary yang dinyatakan oleh “boundary="frontier"”. 2. Bagian Content-type: text/plain This is the body of the message. --frontier
3
Keterangan mengenai Base64 dapat dibaca di referensi [AAR09].
II-15
menyatakan bagian body dari surat elektronik yang dibangun dalam tipe text/plain. 3. Bagian selanjutnya “Content-type:
application/octet-stream”
menyatakan attachment dari surat elektronik dalam bentuk binary file.
II.9 Mekanisme Add-on pada Mozilla Thunderbird Pada subbab I.1 telah dijelaskan sebelumnya, add-on adalah sebuah fitur yang disediakan pada Mozilla Thunderbird untuk memungkinkan developer menambah fungsionalitas Thunderbird. Dalam pembangunannya, add-on dibagi menjadi 2 (dua) bagian penting, yaitu modul antarmuka dan modul controller. Pertama, developer membangun antarmuka add-on. Pembangunan antarmuka menggunakan bahasa XUL. XUL adalah Extensible Markup Language (XML) grammar yang menyediakan komponen dasar antarmuka, seperti button, menu, toolbar, tree, dan lain-lain. Aksi user yang dikaitkan dengan fungsionalitas dibangun dengan menggunakan Javascript. Untuk
mengembangkan
Thunderbird,
pengembang
memodifikasi
antarmuka
Thunderbird dengan menambahkan atau memodifikasi komponen dasarnya. Pengembang menambahkan komponen dasar dengan memasukan elemen DOM XUL ke window Thunderbird dan memodifikasinya dengan menggunakan scripts dan event handlers yang sesuai [DEV09]. Scripts dan event handlers dapat dibangun dengan menggunakan bahasa C dan Javascript. Pada tugas akhir ini, scripts dan event handlers dibangun dengan Javascript.