TUGAS AKHIR – KI141502
IMPLEMENTASI METODE ENKRIPSI MENGGUNAKAN ALGORITMA XXTEA (CORRECTED BLOCK TINY ENCRYPTION ALGORITHM) PADA APLIKASI SURAT ELEKTRONIK BERBASIS WEB KINASIH NUR AZIZAH NRP 5113100178 Dosen Pembimbing I Henning Titi Ciptaningtyas, S.Kom., M.Kom. Dosen Pembimbing II Ir. Muchammad Husni, M.Kom.
Departemen Teknik Informatika Fakultas Teknologi Informasi Institut Teknologi Sepuluh Nopember Surabaya 2017
i
TUGAS AKHIR – KI141502
IMPLEMENTASI METODE ENKRIPSI MENGGUNAKAN ALGORITMA XXTEA (CORRECTED BLOCK TINY ENCRYPTION ALGORITHM) PADA APLIKASI SURAT ELEKTRONIK BERBASIS WEB KINASIH NUR AZIZAH NRP 5113100178
Dosen Pembimbing I Henning Titi Ciptaningtyas, S.Kom., M.Kom. Dosen Pembimbing II Ir. Muchammad Husni, M.Kom.
Departemen Teknik Informatika Fakultas Teknologi Informasi Institut Teknologi Sepuluh Nopember Surabaya 2017
i
(Halaman ini sengaja dikosongkan)
ii
UNDERGRADUATE THESES – KI141502
IMPLEMENTATION OF ENCRYPTION METHOD USING XXTEA ALGORITHM (CORRECTED BLOCK TINY ENCRYPTION ALGORITHM) FOR WEB BASED ELECTRONIC MAIL SYSTEM KINASIH NUR AZIZAH NRP 5113100178 First Advisor Henning Titi Ciptaningtyas, S.Kom., M.Kom. Second Advisor Ir. Muchammad Husni, M.Kom.
Department of Informatics Faculty of Information Technology Sepuluh Nopember Institute of Technology Surabaya 2017
iii
(Halaman ini sengaja dikosongkan)
iv
LEMBAR PENGESAHAN IMPLEMENTASI METODE ENKRIPSI MENGGUNAKAN ALGORITMA XXTEA (CORRECTED BLOCK TINY ENCRYPTION ALGORITHM) PADA APLIKASI SURAT ELEKTRONIK BERBASIS WEB TUGAS AKHIR Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer pada Bidang Studi Arsitektur dan Jaringan Komputer Program Studi S-1 Departemen Teknik Informatika Fakultas Teknologi Informasi Institut Teknologi Sepuluh Nopember Oleh: KINASIH NUR AZIZAH NRP: 5113100178
Disetujui oleh Pembimbing Tugas Akhir: 1.
Henning Titi Ciptaningtyas, S.Kom., M.Kom. ..................... (NIP. 19840708 201012 2 004) (Pembimbing 1)
2.
Ir. Muchammad Husni, M.Kom. (NIP. 19600221 198403 1 001)
SURABAYA JULI, 2017
v
..................... (Pembimbing 2)
(Halaman ini sengaja dikosongkan)
vi
IMPLEMENTASI METODE ENKRIPSI MENGGUNAKAN ALGORITMA XXTEA (CORRECTED BLOCK TINY ENCRYPTION ALGORITHM) PADA APLIKASI SURAT ELEKTRONIK BERBASIS WEB Nama Mahasiswa NRP Jurusan Dosen Pembimbing 1
: : : :
KINASIH NUR AZIZAH 5113100178 Teknik Informatika FTIF-ITS Henning Titi Ciptaningtyas, S.Kom., M.Kom. Dosen Pembimbing 2 : Ir. Muchammad Husni, M.Kom. Abstrak Perkembangan pengiriman surat menyurat elektronik semakin berkembang pesat. Dalam surat menyurat dibutuhkan keamanan dalam proses pengirimannya. Salah satu metode untuk mengamankan proses pengiriman surat elektronik agar informasi dan data yang tercantum tidak disalahgunakan oleh pihak yang tidak berwenang adalah dengan proses enkripsi. Metode yang akan digunakan pada Tugas Akhir ini adalah metode enkripsi menggunakan algoritma XXTEA (Corrected Block Tiny Encryption Algorithm). Enkripsi adalah nama yang diberikan untuk proses penerapan algoritma pada sebuah pesan, yang mana proses tersebut akan mengacak data di dalamnya sehingga sangat sulit dan memakan waktu apabila data hasil enkripsi tersebut disimpulkan tanpa mengetahui kode/sandi khusus. Algoritma XXTEA merupakan pengembangan dari algoritma TEA dan XTEA. Algoritma XXTEA beroperasi dalam ukuran blok kelipatan 32 bit dan panjang kunci 128 bit. Pengacakan pada blok XXTEA ini berdasarkan blok pada kanan dan kiri blok yang sedang diacak. Dari hasil uji coba yang telah dilakukan, dihasilkan bahwa algoritma XXTEA memiliki kecepatan enkripsi yaitu 2,240 ms dan kecepatan dekripsi yaitu 2,114 ms. Untuk hasil coba performa yang
vii
telah dilakukan, dihasilkan bahwa komputer web server mampu menangani 1024 akses pengguna dengan request per second-nya mencapai 34 request. Kata kunci: Algoritma XXTEA, Enkripsi, Surat Elektronik
viii
IMPLEMENTATION OF ENCRYPTION METHOD USING XXTEA ALGORITHM (CORRECTED BLOCK TINY ENCRYPTION ALGORITHM) FOR WEB BASED ELECTRONIC MAIL SYSTEM Student’s Name Student’s ID Department First Advisor Second Advisor
: : : :
KINASIH NUR AZIZAH 5113100178 Teknik Informatika FTIF-ITS Henning Titi Ciptaningtyas, S.Kom., M.Kom. : Ir. Muchammad Husni, M.Kom. Abstract
The development of electronic mail is growing rapidly. In electornic mail, security is needed for delivery process. One method to secure the process of sending electronic mail so that the information and data listed are not misused by unauthorized parties is by the process of encryption. The method that will be used in this Final Project is the encryption method using XXTEA algorithm (Corrected Block Tiny Encryption Algorithm). Encryption is a process of applying an algorithm to a message, which the process will scramble the data in it so it is very difficult and time consuming if the encrypted data is concluded without knowing the code / password. The XXTEA algorithm is the development of TEA and XTEA algorithms. The XXTEA algorithm operates in 32 bit block size and 128 bit key length. Randomization on XXTEA block is based on the block on the right and left of the block being randomized. From the experiments that have been done, shows that the XXTEA algorithm has an encryption speed of 2,240 ms and decryption speed of 2,114 ms. Performance test shows that web server can handle 1024 user access with request per second reached 34 requests.
ix
Keywords : Electronic Mail, Encryption, XXTEA Algorithm
x
KATA PENGANTAR
Alhamdulillahirabbil’alamin, segala puji bagi Allah SWT yang telah melimpahkan rahmat dan karunia-Nya sehingga penulis dapat menyelesaikan Tugas Akhir yang berjudul: “Implementasi Metode Enkripsi Menggunakan Algoritma XXTEA (Corrected Block Tiny Encryption Algorithm) pada Aplikasi Surat Elektronik Berbasis Web ” Terselesaikannya Tugas Akhir ini tidak terlepas dari bantuan dan dukungan banyak pihak, Oleh karena itu melalui lembar ini penulis ingin mengucapkan terima kasih dan penghormatan kepada: 1. Allah SWT serta junjungan Nabi Muhammad SAW, karena limpahan rahmat dan karunia-Nya penulis dapat menyelesaikan Tugas Akhir dan juga perkuliahan di Teknik Informatika ITS. 2. Kedua orangtua penulis, Papa dan Mama penulis, Rofiq dan Setyawati yang tiada hentinya memberikan dukungan doa, moral, dan material kepada penulis sehingga penulis dapat menyelesaikan Tugas Akhir ini. 3. Kakak penulis, Religia Nur Aisyah dan keluarga tercinta yang telah memberikan dukungan dan semangatnya kepada penulis. 4. Ibu Henning Titi Ciptaningtyas, S.Kom., M.Kom. dan Bapak Ir. Muchammad Husni, M.Kom. selaku pembimbing I dan II yang telah membimbing dan memberikan motivasi, nasihat dan bimbingan dalam menyelesaikan Tugas Akhir ini.
xi
5. Bapak Darlis Herumurti, S.Kom., M.Kom. selaku kepala jurusan Teknin Informatika ITS dan segenap dosen dan karyawan Teknik Informatika ITS yang telah memberikan ilmu dan pengalaman kepada penulis selama menjalani masa studi di Teknik Informatika ITS. 6. Rekan diskusi Yusuf Nugroho yang selalu memberikan bimbingan dan membantu ketika penulis menemukan kesusahan atau kesalahan dalam pengerjaan Tugas Akhir. 7. Rekan penulis dalam pengerjaan Tugas Akhir yaitu Nindyasari Dewi Utari yang menjadi penyemangat dalam mengerjakan Tugas Akhir. 8. Sahabat penulis, Dhita, Lino, Adi, Apip, Saddam, Rifqi, Harry, Nanang, Ridho, Arvi, dan Dhea yang selalu ada dan saling memberi semangat selama pengerjaan Tugas Akhir. 9. Teman-teman Laboratorium AJK, Daniel, Fathoni, Mas Thiar, Syukron, Wicak, Uul, Asbun, Risma, Awan, Ambon, Vivi, Oing, Didin, Fuad, Bebet, Fatih yang senantiasa menghibur dan mendukung penulis dalam mengerjakan tugas akhir ini serta menemani penulis di laboratorium. 10. Serta semua pihak yang yang telah turut membantu penulis dalam menyelesaikan Tugas Akhir ini. Penulis menyadari bahwa laporan Tugas Akhir ini masih memiliki banyak kekurangan. Oleh karena itu dengan segala kerendahan hati penulis mengharapkan kritik dan saran dari pembaca untuk perbaikan penulis kedapannya. Selain itu, penulis berharap laporan Tugas Akhir ini dapat berguna bagi pembaca secara umum.
Surabaya, Juli 2017
xii
DAFTAR ISI LEMBAR PENGESAHAN ......................................................... v Abstrak .......................................................................................vii Abstract ....................................................................................... ix DAFTAR ISI .............................................................................xiii DAFTAR GAMBAR ...............................................................xvii DAFTAR TABEL ..................................................................... xix DAFTAR KODE SUMBER .................................................... xxi BAB I PENDAHULUAN ........................................................ xxi 1.1 Latar Belakang ................................................................. 1 1.2 Rumusan Masalah ............................................................ 2 1.3 Batasan Permasalahan ...................................................... 2 1.4 Tujuan .............................................................................. 3 1.5 Manfaat............................................................................. 3 1.6 Metodologi ....................................................................... 3 1.6.1 Penyusunan Proposal Tugas Akhir ........................... 3 1.6.2 Studi Literatur ........................................................... 4 1.6.3 Implementasi Perangkat Lunak................................. 4 1.6.4 Pengujian dan Evaluasi ............................................. 4 1.6.5 Penyusunan Buku ..................................................... 4 1.7 Sistematika Penulisan Laporan ........................................ 5 BAB II TINJAUAN PUSTAKA ................................................. 7 2.1 XXTEA ............................................................................ 7 2.2 Web Service RESTful API ............................................. 10 2.3 Node.js ........................................................................... 11 2.4 Kerangka Kerja Express ................................................. 12 2.5 MySQL ........................................................................... 13 2.6 Pug.js .............................................................................. 14 BAB III PERANCANGAN SISTEM ....................................... 15 3.1 Kasus Penggunaan.......................................................... 15 3.2 Arsitektur Sistem ............................................................ 16 3.2.1 Desain Umum Sistem ............................................. 16 3.2.2 Desain Backend....................................................... 25 3.2.3 Desain Frontend ..................................................... 26
xiii
BAB IV IMPLEMENTASI ....................................................... 29 4.1 Lingkungan Implementasi .............................................. 29 4.2 Implementasi .................................................................. 30 4.2.1 Implementasi Node.js ............................................. 30 4.2.2 Implementasi Basis Data......................................... 32 4.2.3 Implementasi Backend ............................................ 34 4.2.3.1 Inisiasi Session................................................. 37 4.2.3.2 Login................................................................ 37 4.2.3.3 Mengirim Pesan ............................................... 38 4.2.3.4 Daftar Pesan Masuk ......................................... 40 4.2.3.5 Detail Pesan Masuk ......................................... 42 4.2.3.6 Daftar Pesan Keluar ......................................... 44 4.2.3.7 Detail Pesan Keluar ......................................... 45 4.2.4 Implementasi Frontend ........................................... 46 4.2.3.8 Halaman Index ................................................. 50 4.2.3.9 Halaman Login ................................................ 50 4.2.5 Implementasi Algoritma XXTEA ........................... 50 BAB V UJI COBA DAN EVALUASI ...................................... 53 5.1 Lingkungan Pengujian .................................................... 53 5.2 Skenario Uji Coba .......................................................... 54 5.2.1 Uji Fungsionalitas ................................................... 54 5.2.2 Uji Performa............................................................ 54 5.2.2.1 Uji Performa Aplikasi ...................................... 55 5.2.2.2 Uji Performa Algoritma ....................................... 56 5.3 Hasil Uji Coba ................................................................ 56 5.3.1 Hasil Uji Fungsionalitas .......................................... 57 5.3.2 Hasil Uji Performa .................................................. 60 5.3.2.1 Hasil Uji Performa Aplikasi ................................ 60 5.3.2.2 Hasil Uji Performa Algoritma ............................. 67 5.3.3 Evaluasi ................................................................... 70 BAB VI KESIMPULAN DAN SARAN ................................... 71 6.1. Kesimpulan ..................................................................... 71 6.2. Saran ............................................................................... 71 DAFTAR PUSTAKA ................................................................ 73 LAMPIRAN ............................................................................... 75 xiv
BIODATA PENULIS ................................................................ 93
xv
(Halaman ini sengaja dikosongkan)
xvi
DAFTAR GAMBAR Gambar 2.1 Proses Pengacakan pada Satu Iterasi ......................... 8 Gambar 2.2 Arsitektur RESTful .................................................. 11 Gambar 2.3 Proses asynchronous Node.js [6] ............................. 12 Gambar 2.4 Contoh Window MySQL Workbench ..................... 14 Gambar 3.1 Diagram Kasus Penggunaan .................................... 15 Gambar 3.2 Diagram Alir Membuka Pesan ................................ 17 Gambar 3.3 Diagram Alir Membuat Pesan ................................. 18 Gambar 3.4 Desain Sistem Secara Umum .................................. 19 Gambar 3.5 Pengacakan Pertama ................................................ 21 Gambar 3.6 Pengacakan Kedua................................................... 22 Gambar 3.7 Pengacakan Ketiga .................................................. 23 Gambar 3.8 Pengacakan Keempat ............................................... 24 Gambar 3.9 Proses Enkripsi Tahap Akhir ................................... 25 Gambar 3.10 Desain Arsitektur pada Backend ........................... 26 Gambar 3.11 Desain Arsitektur pada Frontend ........................... 27 Gambar 4.1 Pseudocode auth.js .............................................. 37 Gambar 4.2 Pseudocode index.js ........................................... 38 Gambar 4.3 Pseudocode enkrip.js ......................................... 38 Gambar 4.4 Pseudocode modul.js ........................................... 39 Gambar 4.5 Pseudocode Mengirim Pesan ................................... 40 Gambar 4.6 Pseudocode inbox.js ........................................... 41 Gambar 4.7 Pseudocode Detail Pesan Masuk ............................. 42 Gambar 4.8 Pseudocode Membalas Pesan .................................. 43 Gambar 4.9 Pseudocode Mengunduh Lampiran ......................... 43 Gambar 4.10 Pseudocode outbox.js ....................................... 44 Gambar 4.11 Pseudocode Detail Pesan Keluar ........................... 45 Gambar 4.12 Pengunduhan File pada Pesan Keluar ................... 46 Gambar 4.13 Halaman Index....................................................... 50 Gambar 4.14 Pseudocode Implementasi Algoritma XXTEA ..... 51 Gambar 5.1 Pseudocode test.js .............................................. 56 Gambar 5.2 Hasil Uji Fungsionalitas Menggunakan Wireshark Belum Terenkripsi ....................................................................... 59
xvii
Gambar 5.3 Hasil Uji Fungsionalitas Menggunakan Wireshark Sudah Terenkripsi ........................................................................ 59 Gambar 5.4 Grafik Performa 1 Node CPU.................................. 60 Gambar 5.5 Grafik Performa 2 Node CPU.................................. 61 Gambar 5.6 Grafik Performa 3 Node CPU.................................. 62 Gambar 5.7 Grafik Performa 4 Node CPU.................................. 63 Gambar 5.8 Grafik Performa 5 Node CPU.................................. 64 Gambar 5.9 Grafik Performa 6 Node CPU.................................. 65 Gambar 5.10 Grafik Performa 7 Node CPU................................ 66 Gambar 5.11 Grafik Performa 8 Node CPU................................ 67 Gambar 5.20 Grafik Hasil Waktu Enkripsi XXTEA ................... 69 Gambar 5.21 Grafik Hasil Waktu Dekripsi XXTEA................... 70 Gambar 5.12 Tabel Hasil Uji Performa 1 Node CPU ................. 89 Gambar 5.13 Tabel Hasil Uji Performa 2 Node CPU ................. 89 Gambar 5.14 Tabel Hasil Uji Performa 3 Node CPU ................. 90 Gambar 5.15 Tabel Hasil Uji Performa 4 Node CPU ................. 90 Gambar 5.16 Tabel Hasil Uji Performa 5 Node CPU ................. 91 Gambar 5.17 Tabel Hasil Uji Performa 6 Node CPU ................. 91 Gambar 5.18 Tabel Hasil Uji Performa 7 Node CPU ................. 92 Gambar 5.19 Tabel Hasil Uji Performa 8 Node CPU ................. 92
xviii
DAFTAR TABEL Tabel 2.1 Detail XXTEA............................................................. 10 Tabel 3.1 Daftar Kode Kasus Penggunaan .................................. 16 Tabel 3.2 Daftar Rute pada Backend........................................... 26 Tabel 3.3 Daftar Rute pada Frontend .......................................... 27 Tabel 4.1 Spesifikasi Lingkungan Implementasi ........................ 29 Tabel 4.2 Implementasi Basis Data ............................................. 33 Tabel 4.3 Implementasi Backend ................................................ 35 Tabel 4.4 Implementasi Frontend ................................................ 47 Tabel 5.1 Spesifikasi Lingkungan Pengujian .............................. 53 Tabel 5.2 Hasil Eksekusi Uji Fungsionalitas............................... 57 Tabel 5.3 Hasil Pengujian Performa Enkripsi XXTEA............... 68 Tabel 5.4 Hasil Pengujian Performa Dekripsi XXTEA .............. 68
xix
(Halaman ini sengaja dikosongkan)
xx
DAFTAR KODE SUMBER Kode Sumber 4.1 Isi File package.json ................................. 31 Kode Sumber 4.2 Isi File database.js.................................... 32 Kode Sumber 4.3 Isi File auth.js ............................................ 75 Kode Sumber 4.4 Isi File index.js .......................................... 76 Kode Sumber 4.5 Isi File enkrip.js ........................................ 77 Kode Sumber 4.6 Isi File modul.js .......................................... 77 Kode Sumber 4.7 Isi File email.js .......................................... 79 Kode Sumber 4.8 Isi File inbox.js .......................................... 84 Kode Sumber 4.9 Isi File outbox.js ........................................ 88
xxi
(Halaman ini sengaja dikosongkan)
xxii
BAB I PENDAHULUAN 1.1
Latar Belakang
Pada era globalisasi ini, aktivitas sehari-hari tidak dapat lepas dari teknologi yang semakin canggih. Dahulu, untuk melakukan komunikasi jarak jauh harus melalui surat-menyurat yang membutuhkan jasa pengiriman atau kurir untuk menempuh jarak dengan waktu yang tidak singkat. Sekarang, untuk melakukan komunikasi jarak jauh sangatlah mudah dengan hanya jangkauan jari dan dalam waktu yang sangat cepat menggunakan aplikasi chat atau menggunakan email atau yang biasa disebut surat elektronik. Surat elektronik digunakan oleh berbagai kalangan untuk berbagai kepentingan. Salah satu contoh kalangan yang menggunakan surat elektronik adalah institusi pendidikan yaitu Institut Teknologi Sepuluh Nopember (ITS). ITS menggunakan surat elektronik untuk surat-menyurat sesama dosen dan karyawan. Sejauh ini, aplikasi E-Surat ITS belum memiliki keamanan pada proses pengirimannya. Oleh karena itu, dibutuhkan suatu metode untuk mengamankan proses pengiriman surat elektronik tersebut agar informasi dan data yang tercantum tidak disalah gunakan oleh pihak yang tidak berwenang. Metode yang akan digunakan adalah metode enkripsi. Enkripsi adalah nama yang diberikan untuk proses penerapan algoritma pada sebuah pesan, yang mana proses tersebut akan mengacak data di dalamnya sehingga sangat sulit dan memakan waktu apabila data hasil enkripsi tersebut disimpulkan tanpa mengetahui kode/sandi khusus. Pada Tugas Akhir ini diterapkan metode enkripsi algoritma XXTEA (Corrected Block Tiny Encryption Algorithm) untuk melakukan pengamanan data pada proses pengiriman data aplikasi E-Surat. Karakteristik XXTEA adalah small, secure, simple, and
1
2 fast. Jadi, dengan implementasi algoritma XXTEA diharapkan proses pengiriman surat elektronik di ITS dapat diamankan. 1.2
Rumusan Masalah
Tugas Akhir ini mengangkat beberapa rumusan masalah sebagai berikut: 1. Bagaimana cara menerapkan metode enkripsi menggunakan algoritma XXTEA (Corrected Block Tiny Encryption Algorithm) pada aplikasi surat elektronik ESurat? 2. Bagaimana hasil dari penerapan metode enkripsi yang menggunakan algoritma XXTEA (Corrected Block Tiny Encryption Algorithm) pada aplikasi surat elektronik ESurat? 1.3
Batasan Permasalahan
Permasalahan yang dibahas pada Tugas Akhir ini memiliki batasan sebagai berikut: 1. Model arsitektur yang digunakan adalah client-server. 2. Bahasa pemrograman yang digunakan adalah Javascript dengan Node.js sebagai kerangka kerjanya. 3. Kerangka kerja dari Node.js yang digunakan adalah Express. 4. Template engine untuk tampilan antarmuka yang digunakan adalah Pug.js. 5. Database yang digunakan adalah MySQL. 6. Aplikasi yang dibuat adalah aplikasi surat elektronik dengan layanan full service email. Jadi alamat email yang digunakan tidak asli. 7. Pesan yang dienkripsi hanya isi pesan teks, lampiran tidak termasuk.
3 1.4
Tujuan
Tujuan dari Tugas Akhir ini adalah sebagai berikut: 1. Mengimplementasikan metode enkripsi menggunakan algoritma XXTEA (Corrected Block Tiny Encryption Algorithm) dalam mengamankan aplikasi surat elektronik. 2. Mengetahui performa algoritma XXTEA (Corrected Block Tiny Encryption Algorithm) dalam aplikasi surat elektronik berbasis web. 3. Mengetahui performa dari aplikasi surat elektronik berbasis web. 1.5
Manfaat
Manfaat yang diperoleh dari pembuatan Tugas Akhir ini adalah pengiriman pesan pada aplikasi E-Surat menjadi aman berdasarkan hasil implementasi metode enkripsi algoritma XXTEA (Corrected Block Tiny Encryption Algorithm). 1.6
Metodologi
Pembuatan Tugas Akhir ini menggunakan metodologi sebagai berikut:
dilakukan
dengan
1.6.1 Penyusunan Proposal Tugas Akhir Tahapan awal dari Tugas Akhir ini adalah penyusunan Proposal Tugas Akhir. Proposal Tugas Akhir berisi pendahuluan, deskripsi dan gagasan metode – metode yang dibuat dalam Tugas Akhir ini. Pendahuluan ini terdiri atas hal yang menjadi latar belakang diajukannya Tugas Akhir, rumusan masalah yang diangkat, batasan masalah untuk Tugas Akhir, dan manfaat dari hasil pembuatan Tugas Akhir ini. Selain itu dijabarkan pula tinjauan pustaka yang digunakan sebagai referensi pendukung
4 pembuatan Tugas Akhir. Terdapat pula sub bab jadwal kegitan yang menjelaskan jadwal pengerjaan Tugas Akhir. 1.6.2 Studi Literatur Tugas Akhir ini menggunakan literatur paper yang berasal dari jurnal internasional bereputasi yaitu IEEE untuk mencari informasi yang dapat dijadikan referensi dalam pengerjaan Tugas Akhir ini. Selain itu juga digunakan sejumlah referensi buku dan literatur lain yang berhubungan dengan metode enkripsi yang diusulkan pada Tugas Akhir ini termasuk tahap pembuatan aplikasi E-Surat itu sendiri. 1.6.3 Implementasi Perangkat Lunak Implementasi merupakan tahap untuk membangun metodemetode yang sudah diajukan pada proposal Tugas Akhir. Untuk membangun algoritma yang telah dirancang sebelumnya, maka dilakukan implementasi dengan menggunakan suatu perangkat lunak. 1.6.4 Pengujian dan Evaluasi Pada tahap ini dilakukan pengujian terhadap hasil implementasi dengan membandingkan performa dan keamanan metode enkripsi algoritma XXTEA dan metode enkripsi algortima RC4 sekaligus evaluasi dilakukan dengan melihat kesesuaian perencanaan. 1.6.5 Penyusunan Buku Pada tahap ini dilakukan penyusunan buku yang menjelaskan seluruh konsep, teori dasar dari metode yang digunakan, implementasi, serta hasil yang telah dikerjakan sebagai dokumentasi dari pelaksanaan Tugas Akhir.
5 1.7
Sistematika Penulisan Laporan
Sistematika penulisan laporan Tugas Akhir adalah sebagai berikut: 1. Bab I. Pendahuluan Bab ini berisikan penjelasan mengenai latar belakang, rumusan masalah, batasan masalah, tujuan, manfaat, metodologi, dan sistematika penulisan dari pembuatan Tugas Akhir. 2. Bab II. Tinjauan Pustaka Bab ini berisi kajian teori dari metode dan algoritma yang digunakan dalam penyusunan Tugas Akhir ini. Secara garis besar, bab ini berisi tentang enkripsi dengan menggunakan algoritma XXTEA. 3. Bab III. Perancangan Sistem Bab ini berisi pembahasan mengenai perancangan dari aplikasi E-Surat menggunakan metode enkripsi algoritma XXTEA. 4. Bab IV. Implementasi Bab ini menjelaskan implementasi yang berbentuk kode sumber dari rancangan aplikasi E-Surat menggunkn metode enkripsi algoritma XXTEA. 5. Bab V. Hasil Uji Coba dan Evaluasi Bab ini berisikan hasil uji coba dari keamanan aplikasi E-Surat menggunakan algoritma XXTEA dan kemudian dibandingkan dengan algortima RC4. 6. Bab VI. Kesimpulan dan Saran Bab ini merupakan bab yang menyampaikan kesimpulan dari hasil uji coba yang dilakukan, masalah-masalah yang dialami pada proses pengerjaan Tugas Akhir, dan saran untuk pengembangan solusi ke depannya. 7. Daftar Pustaka Bab ini berisi daftar pustaka yang dijadikan literatur dalam Tugas Akhir. 8. Lampiran Dalam lampiran terdapat tabel-tabel data hasil uji coba dan kode sumber program secara keseluruhan.
6 (Halaman ini sengaja dikosongkan)
BAB II TINJAUAN PUSTAKA Bab ini berisi pembahasan mengenai teori-teori dasar yang digunakan dalam Tugas Akhir. Teori-teori tersebut diantaranya adalah XXTEA dan beberapa teori lain yang mendukung pembuatan Tugas Akhir. 2.1
XXTEA
XXTEA atau Corrected Block Tiny Encryption Algorithm adalah algoritma enkripsi sederhana tapi kuat yang diciptakan oleh Roger M. Needham dan David J. Wheeler untuk menutupi kelemahan algoritma Block Tiny Encryption Algorithm (Block TEA). Sebelum Block TEA diciptakan, algoritma TEA dan XTEA telah lebih dahulu dikembangkan. Namun masing-masing algoritma tersebut memiliki kelemahan tersendiri sehingga dikembangkan secara bertahap hingga lahirlah algoritma XXTEA. Penyandian XXTEA berbasis pada iterasi Feistel dan menggunakan banyak ronde untuk mendapatkan keamanan. Sebuah perubahan dari plaintext akan mengubah sekitar setengah dari ciphertext tanpa meninggalkan jejak di mana perubahan berasal. XXTEA beroperasi pada blok yang berukuran tetap yaitu dalam ukuran blok kelipatan 32 bit dengan ukuran minimal 64 bit dan memiliki panjang kunci 128 bit. Jumlah dari putaran lengkap bergantung pada ukuran blok, tetapi terdapat minimal 6 dan 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. Berikut akan dijelaskan proses pengacakan yang terjadi pada satu iterasi algoritma XXTEA [1].
7
8
Gambar 2.1 Proses Pengacakan pada Satu Iterasi
Keterangan simbol: 1. Xr : blok plaintext, dimana r adalah urutan blok yang sedang diacak. 2. Xr-1 : blok plaintext, dimana r-1 adalah urutan blok sebelum blok yang sedang diacak. 3. Xr+1 : blok plaintext, dimana r+1 adalah urutan blok setelah blok yang sedang diacak. 4. q : jumlah iterasi yang sedang dilakukan 5. DELTA : q dikalikan dengan konstanta yang bernilai 0x9E3779B. 6. Kr : blok kata kunci ke-r dimana r sama dengan keterangan di atas. 7. << n : pergeseran bit ke kiri sebanyak n kali. 8. >> n : pergeseran bit ke kanan sebanyak n kali. 9. : operasi XOR. 10. : operasi penambahan.
9 Keterangan warna: 1. Kotak hijau 2. Kotak merah
: output program. : input user.
Satu iterasi dalam XXTEA menampilkan proses pengacakan yang dilakukan pada satu iterasinya. Proses iterasi dalam XXTEA dilakukan dalam dua 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 yaitu xr-1 << 2 di-XOR-kan dengan xr+1 >> 5. 4. Pengacakan kedua yaitu xr-1 >> 3 di-XOR-kan dengan xr+1 << 4. 5. Hasil yang didapat dari tahap 3 dan 4 ditambahkan. 6. Pengacakan ketiga yaitu xr-1 di-XOR-kan dengan DELTA yang merupakan perkalian antara konstanta DELTA yang bernilai 0x9E3779B dengan jumlah iterasi pertama yang telah dilakukan 7. Pengacakan keempat yaitu xr+1 di-XOR-kan dengan salah satu blok kata kunci ke-r yang sebelumnya telah di-XORkan dengan DELTA >> 2. 8. Hasil yang didapat dari tahap 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. Penjelasan algoritma XXTEA secara singkat dalam satu proses pengacakan terdapat pada Tabel 2.1 di bawah ini.
10 Tabel 2.1 Detail XXTEA
No. 1 2 3 4
Variabel Panjang kunci Ukuran blok Struktur Ronde
Keterangan 128 bit Tidak tetap, bergantung pada plaintext Jaringan Feistel Tidak tetap, 6-32 ronde Feistel (sekitar 3-16 putaran) bergantung pada panjang blok
Pada penelitian ini, algoritma XXTEA digunakan sebagai metode enkripsi dan dekripsi untuk mengamankan pengiriman pesan pada aplikasi E-Surat. Algoritma XXTEA dipilih sebagai metode enkripsi yang diterapkan pada aplikasi ini karena XXTEA merupakan metode enkripsi blok cipher yang cepat dan cocok untuk mengenkripsi isi pesan yang panjang. Alasan lain dipilihnya XXTEA sebagai metode enkripsi adalah XXTEA merupakan algoritma terbaik karena merupakan pengembangan dari algoritma pendahulunya yaitu TEA dan XTEA. 2.2
Web Service RESTful API
Representational State Transfer atau biasa disebut REST adalah suatu arsitektur metode komunikasi yang sering diterapkan dalam pengembangan layanan berbasis web arsitektur. REST yang umumnya dijalankan via HTTP (Hypertext Transfer Protocol), melibatkan proses pembacaan laman web tertentu yang memuat sebuah file XML atau JSON. File inilah yang menguraikan dan memuat konten yang hendak disajikan. Setelah melalui sebuah proses definisi tertentu, user akan bisa mengakses antarmuka aplikasi yang dimaksudkan [2]. Arsitektur REST sesungguhnya berbasis pada 3 hal yang bersifat mendasar, yaitu [3]: 1. Identifikasi sumberdaya menggunakan URL (Uniform Resource Locator).
11 2. Antarmuka yang seragam, yaitu PUT, GET, POST, dan DELETE. 3. Interaksi pada aplikasi dilakukan melalui hyperlink. web server
browser page request
HTML page
Gambar 2.2 Arsitektur RESTful
Gambar 2.2 menunjukkan arsitektur RESTful pada sebuah aplikasi. Pada penelitian ini web service yang digunakan untuk membangun aplikasi E-Surat adalah RESTful API. 2.3
Node.js
Node.js adalah sebuah platform yang dibuat di atas Javascript Runtime-nya Chrome. Dengan kata lain, kodingan pada server akan dieksekusi dengan cara yang mirip dengan ketika di browser. Untuk penulisan kodingan, teknik-teknik Javascript yang telah umum dapat diterapkan di node.js. Node.js memiliki beberapa kelebihan, antara lain cepat, event-driven, dan ringan. Namun keistimewaan yang paling utama dari menggunakan node.js adalah pemrograman asynchronous [4]. Asynchronous berarti non-blocking I/O. Ini berarti setiap operasi asynchronous harus segera mungkin mengembalikan nilai agar program tidak perlu menunggu proses baca tulis ke I/O. Proses asynchronous dapat dilihat pada Gambar 2.3. Kebalikan dari asynchronous, sebuah program yang menjalankan operasi synchronous akan menunggu operasi itu selesai baru kemudian program dapat melanjutkan operasi lainnya. Sedangkan istilah event-driven disini sama dengan eventbased programming yaitu urutan atau flow program ditentukan oleh sebuah events. Events didefinisikan dengan perubahan pada sebuah kondisi objek. Perpindahan kursor dari window satu ke
12 window lain, penekanan keyboard, sampai pada request halaman website. Hal paling dasar sekaligus terpenting dari event-driven ini adalah event-handler atau callback. Callback adalah sebuah fungsi atau subroutine yang dijadikan sebagai argumen pada operasioperasi asynchronous. Callback akan dipanggil sekali setelah operasi selesai dilakukan [5].
Gambar 2.3 Proses asynchronous Node.js [6]
Pada penelitian ini, Node.js digunakan sebagai kerangka kerja untuk membangun aplikasi E-Surat dengan bahasa pemrogramannya adalah Javascript. 2.4
Kerangka Kerja Express
Express.js adalah satu web framework paling populer di dunia Node.js. Dokumentasinya yang lengkap dan penggunaannya yang cukup mudah, dapat membuat kita mengembangkan berbagai produk seperti aplikasi web ataupun RESTful API. Express pun dapat digunakan menjadi pijakan untuk membangun web framework yang lebih kompleks seperti, Sails.js, MEAN (MongoDB, Express.js, Angular.js, Node.js) dan MERN (MongoDB, Express.js, React.js, Node.js). Express dibuat oleh TJ Holowaychuk dan sekarang dikelola oleh komunitas [7].
13 Beberapa keunggulan yang dimiliki oleh Express antara lain: Dukungan pembuatan middleware Dukungan terhadap berbagai HTTP verb seperti POST, GET, PUT, DELETE, OPTION, HEAD, dan lainnya 3. Sudah terpasang template engine Jade 4. Manajemen file statik seperti CSS dan Javascript 5. Sangat bebas untuk dikostumisasi 1. 2.
2.5
MySQL
MySQL adalah sebuah perangkat lunak sistem manajemen basis data SQL (Database Management System) yang bersifat open source dan merupakan salah satu DBMS yang populer saat ini. Sistem basis data MySQL mendukung beberapa fitur seperti multithreaded, dan multi-user. Basis data ini dibuat untuk keperluan sistem basis data yang cepat, handal dan mudah digunakan [8]. Beberapa kelebihan MySQL adalah tersedia untuk berbagai platform, sintaks yang mudah dipelajari dan tidak rumit, memiliki system keamanan yang cukup baik, dapat digunakan dengan berbagai bahasa pemrograman umum seperti C, C++, Java, Perl, PHP, dan sebagainya. Sedangkan kekurangan MySQL adalah sulit untuk diaplikasikan pada intansi dengan basis data yang besar dan tidak cocok untuk aplikasi mobile dan games [9]. Pada Tugas Akhir ini, sistem basis data yang digunakan adalah MySQL Workbench. MySQL Workbench merupakan salah satu produk dari MySQL yang diciptakan untuk para arsitek database, programmers, dan DBA (Database Administration). MySQL Workbench menyediakan layanan pemodelan data, pemrograman SQL, dan berbagai macam tools administrasi yang lengkap untuk konfigurasi server, administrasi user, backup, dan lain-lain. MySQL Workbench tersedia untuk sistem operasi Windows, Linux, dan Mac OS X. Gambar 2.4 merupakan salah satu contoh window MySQL Workbench [10].
14
Gambar 2.4 Contoh Window MySQL Workbench
2.6
Pug.js
Pug.js adalah salah satu Javascript templating engine yang terkenal. Awalnya, Pug.js bernama Jade. Namun karena suatu hal Jade berganti nama menjadi Pug.js pada tahun 2015. Pug.js merupakan templating engine yang berperforma tinggi yang terinspirasi dari Haml (HTML abstraction markup language) dan diimplementasikan menggunakan Javascript pada Node.js. Contoh kelebihan penggunaan Pug.js adalah tidak perlu menggunakan tag penutup, pemrogramannya mengharuskan menggunakan indentasi, dan tersedia untuk diimplementasikan di PHP, scala, ruby, python dan Java. Sedangkan beberapa kekurangan Pug.js adalah tidak semua orang menyukai pemrograman yang bergantung pada indentasi, tidak cocok untuk output selain HTML, dan tidak mendukung streaming [11]. Pada penelitian ini, Pug.js digunakan untuk membuat antarmuka aplikasi E-Surat.
BAB III PERANCANGAN SISTEM Bab ini menjelaskan tentang perancangan dan pembuatan sistem perangkat lunak. Sistem perangkat lunak yang dibuat pada Tugas Akhir ini adalah sistem surta elektronik sederhana yang isi pesannya dienkripsi menggunakan algoritma XXTEA. Pada bab ini pula akan dijelaskan gambaran umum sistem dalam bentuk flowchart. 3.1
Kasus Penggunaan
Pada sub bab ini akan dijelaskan mengenai diagram kasus penggunaan sistem yang dikerjakan pada Tugas Akhir ini.
Gambar 3.1 Diagram Kasus Penggunaan
Deskripsi diagram kasus penggunaan pada Gambar 3.1 akan dijelaskan pada Tabel 3.1.
15
16 Tabel 3.1 Daftar Kode Kasus Penggunaan
No UC001
Nama Mengirim pesan
Aktor Pengguna
UC002
Melihat pesan masuk
Pengguna
UC003
Melihat pesan keluar
Pengguna
UC004
Mengunggah lampiran
Pengguna
UC005
Mengunduh lampiran
Pengguna
3.2
Deskripsi Pengguna dapat mengirim pesan Pengguna dapat melihat pesan yang masuk Pengguna dapat melihat pesan yang telah dikirim Pengguna dapat mengunggah lampiran yang terdapat pada pesan Pengguna dapat mengunduh lampiran yang terdapat pada pesan
Arsitektur Sistem
Pada sub bab ini akan dibahas mengenai arsitektur sistem yang meliputi desain umum dari sistem yang akan dibangun, desain backend, desain frontend, dan desain algortima XXTEA. 3.2.1
Desain Umum Sistem
Desain umum sistem pada Tugas Akhir ini adalah membuat aplikasi surat elektronik sederhana yang dalam proses pengirimannya terenkripsi menggunakan algoritma XXTEA. Sistem ini dibuat dengan menggunakan Node.js dengan bahasa pemrograman Javascript dan Express sebagai kerangka kerjanya.
17
Gambar 3.2 Diagram Alir Membuka Pesan
18
Gambar 3.3 Diagram Alir Membuat Pesan
Skenario penggunaan aplikasi sebenarnya tidak beda dengan pengiriman email biasa. Klien A membuat pesan baru dan mengirimkan pesan tersebut kepada klien B. Kemudian klien B membuka pesan yang telah masuk di inbox klien B. Apabila pada pesan tersebut terdapat lampiran, maka klien B dapat mengunduh lampiran yang tertera. Diagram alir membuat pesan dapat dilihat pada Gambar 3.2 dan diagram alir membuka pesan pada Gambar 3.3. Untuk desain arsitektur sistem dapat dilihat pada Gambar 3.4.
19
Klien A
Database Klien B Gambar 3.4 Desain Sistem Secara Umum
Proses dibalik layar yang terjadi saat klien A mengirimkan pesan ke klien B adalah klien A melakukan HTTP request ke server REST untuk mengirim pesan. Kemudian REST merespon dan terjadi proses enkripsi untuk mengamankan isi pesan yang dikirim. Ketika klien B ingin membuka pesan yang baru masuk, klien B melakukan request ke server untuk melakukan dekripsi pesan. Kemudian server REST akan merespon dengan memberikan pesan dari basis data yang telah terdekripsi kepada klien B. Di bawah ini terdapat Gambar 3.5 sampai Gambar 3.9 yang menunjukkan diagram alir yang menjelaskan bagaimana proses enkripsi algoritma XXTEA. Proses enkripsi ini dilakukan pada client-side atau sebutannya adalah end-to-end encryption. Sebelumnya, perlu diketahui bahwa kunci yang digunakan untuk mengenkripsi dan mendekripsi didapatkan dari rumus berikut: Email A + Email B + Waktu pesan + TA2017 Keterangan: 1. Email A : alamat email pengirim 2. Email B : alamt email penerima 3. Waktu pesan : waktu pesan tersebut dikirim 4. TA2017 : suatu string tetap sebagai penanda
20
Waktu pesan terkirim dijadikan variabel agar kunci yang dihasilkan pada setiap pengiriman pesan berbeda-beda. String TA2017 dijadikan sebagai variabel tetap agar string kunci nantinya memiliki identitas tersendiri. Empat komponen ini kemudian digabung atau di-concat untuk dijadikan sebuah string yang panjang. Setelah itu string ini diurutkan dari yang secara alfabetik. Setelah diurutkan, string ini digunakan sebagai kunci untuk mengenkripsi dan mendekripsi isi pesan.
21
Gambar 3.5 Pengacakan Pertama
Proses enkripsi dimulai dari mengambil blok sebelum (Xrdan sesudah (Xr+1) blok yang sedang diacak, kata kunci dan DELTA sebagai input. Kemudian terjadi proses pengacakan pertama yaitu blok sebelum di-shift left 2 (xr-1 << 2) di-XOR-kan dengan blok sesudah yang di-shift right 5 (xr+1 >> 5). Hasil dari pengacakan pertama disimpan dengan nama hasil pengacakan 1 seperti pada Gambar 3.5. 1)
22
Gambar 3.6 Pengacakan Kedua
Proses pengacakan kedua juga diawali dengan mengambil blok sebelum (Xr-1) dan sesudah (Xr+1) blok yang sedang diacak, kata kunci dan DELTA sebagai input. Kemudian terjadi proses pengacakan kedua yaitu blok sebelum di-shift right 3 (xr-1 >> 3) diXOR-kan dengan blok sesudah yang di-shift left 4 (xr+1 << 4). Hasil dari pengacakan pertama disimpan dengan nama hasil pengacakan 2 seperti pada Gambar 3.6.
23
Gambar 3.7 Pengacakan Ketiga
Sama seperti proses pengacakan pertama dan kedua, proses pengacakan ketiga dimulai dengan mengambil blok sebelum (Xr-1) dan sesudah (Xr+1) blok yang sedang diacak, kata kunci dan DELTA sebagai input. Kemudian terjadi proses pengacakan ketiga yaitu blok sebelum (xr-1) di-XOR-kan dengan DELTA yang merupakan perkalian antara konstanta DELTA yang bernilai 0x9E3779B dengan jumlah iterasi pertama yang telah dilakukan (DELTA = q * 0x9E3779B). Hasil dari pengacakan
24 ketiga disimpan dengan nama hasil pengacakan 3 seperti pada Gambar 3.7.
Gambar 3.8 Pengacakan Keempat
Dengan awal yang sama seperti pengacakan sebelumsebelumnya, blok sesudah (xr+1) di-XOR-kan salah satu blok kata kunci ke-r yang sebelumnya telah di-XOR-kan dengan DELTA yang di-shift right 2 (Kr XOR (DELTA >> 2)). Hasil dari pengacakan keempat disimpan dengan nama hasil pengacakan 4 seperti pada Gambar 3.8.
25
Gambar 3.9 Proses Enkripsi Tahap Akhir
Gambar 3.9 merupakan gambar yang menunjukkan keseluruhan tahap dari proses enkripsi. Diagram alir ini merupakan gabungan dari diagram alir pada halaman-halaman sebelum halaman ini. Pertama, hasil dari proses pengacakan 1 ditambahkan dengan hasil dari proses pengacakan 2 dan disimpan dengan variabel A. Hal yang sama juga terjadi pada hasil dari proses pengacakan 3 dan 4. Hasil dari proses pengacakan 3 ditambahkan dengan hasil dari proses pengacakan 4 dan disimpan dengan variabel B. Kedua, hasil jumlah pengacakan 1 dan 2 (variabel A) di-XOR-kan dengan hasil jumlah pengacakan 3 dan 4 (variabel B) yang kemudian disimpan variabel C. Terakhir, hasil xor tersebut (variabel C) ditambahkan dengan blok yang sedang diacak. Pada proses dekripsi, iterasi pengacakan dimulai dari blok yang paling terakhir pada deret blok dan iterasi pengacakan berjalan mundur. Untuk proses pengacakan pada dekripsi tidak berbeda dengan proses pengacakan pada enkripsi seperti yang telah dijelaskan sebelumnya. 3.2.2
Desain Backend
Desain backend pada Tugas Akhir ini bertujuan untuk menangani segala bentuk operasi basis data yang dikirimkan dari
26 frontend maupun yang dibutuhkan frontend. Backend ini dikerjakan dengan menggunakan kerangka kerja Express.js. Desain arsitektur backend dapat dilihat pada Gambar 3.10.
Gambar 3.10 Desain Arsitektur pada Backend
Di bawah ini terdapat Tabel 3.2 yang merupakan daftar rute pada backend. Berbagai rute yang terdapat dalam backend adalah: Tabel 3.2 Daftar Rute pada Backend
No
Rute
Metode
1
/login
POST
Hak Akses Tidak ada
2
/viewInbox
POST
Pengguna
3
/compose
POST
Pengguna
3.2.3
Aksi Melakukan autentikasi username dan password. Membalas pesan berupa teks Mengirim pesan berupa teks atau lampiran
Desain Frontend
Desain frontend pada Tugas Akhir ini bertujuan untuk menyediakan tampilan sebagai perantara pengguna dengan
27 backend. Aplikasi ini menggunakan Pug.js sebagai templating engine untuk mempermudah proses pelemparan variabel dari frontend ke backend. Desain arsitektur frontend dapat dilihat pada Gambar 3.11.
Gambar 3.11 Desain Arsitektur pada Frontend
Di bawah ini terdapat Tabel 3.3 yang merupakan daftar rute pada frontend. Berbagai rute yang terdapat dalam frontend adalah: Tabel 3.3 Daftar Rute pada Frontend
No
Rute
Metode
1
/
GET
Hak Akses Tidak ada
2
/compose
GET
Pengguna
3
/inbox
GET
Pengguna
4
/viewInbo x/:msg_id
GET
Pengguna
Aksi Menampilkan halaman index Menampilkan halaman untuk membuat pesan baru Menampilkan halaman daftar pesan masuk Menampilkan halaman pesan masuk yang dipilih
28 5
/outbox
GET
Pengguna
6
/viewOutb ox/:msg_i d /downloa d/:id_file
GET
Pengguna
GET
Pengguna
/logout
GET
Pengguna
7
8
Menampilkan halaman daftar pesan keluar Menampilkan halaman pesan keluar yang dipilih Menampilkan tautan untuk mengunduh lampiran Menghapus session yang sedang aktif
BAB IV IMPLEMENTASI Pada bab ini akan dibahas mengenai implementasi dari perancangan yang sudah dilakukan pada bab sebelumnya. Implementasi berupa kode sumber untuk membangun program. Sebelum masuk ke penjelasan implementasi, akan ditunjukkan terlebih dahulu lingkungan untuk melakukan implementasi. 4.1
Lingkungan Implementasi
Implementasi metode enkripsi menggunakan algoritma XXTEA pada aplikasi surat elektronik berbasis web ini menggunakan spesifikasi perangkat keras dan perangkat lunak seperti yang ditunjukkan pada Tabel 4.1. Tabel 4.1 Spesifikasi Lingkungan Implementasi
Perangkat
Jenis Perangkat
Spesifikasi
Perangkat Keras
Prosesor
Intel(R) Core(TM) I3 2120
Memori
8 GB
Sistem Operasi
Linux Ubuntu 14.04.3
Perangkat Pengembang
Sublime Text Editor 3 sebagai teks editor MySQL 14.14 sebagai basis data Javascript sebagai bahasa pemrograman Node.js 6.2.1 sebagai kerangka kerja Express.js 4.15.3 sebagai tools framework Node.js
Perangkat Lunak
29
30 Pug.js sebagai tampilan antarmuka Mozilla Firefox 53.0.3 sebagai peramban web 4.2
Implementasi
Pada sub bab implementasi akan menjelaskan bagaimana pembangunan perangkat lunak secara detail dan menampilkan kode sumber dan pseudocode yang digunakan mulai dari tahap awal pembuatan aplikasi Tugas Akhir hingga akhir. 4.2.1
Implementasi Node.js
5. Node.js menyediakan banyak paket untuk menunjang kebutuhan suatu sistem yang akan dibuat. Untuk melakukan instalasi paket-paket tersebut ketikkan npm install [nama paket yang tersedia] pada terminal di Ubuntu yang sebelumnya telah diinstal Node.js. Cara ini kurang efektif apabila paket yang ingin diinstal cukup banyak. 6. Cara lain untuk menginstall beberapa paket secara bersamaan adalah dengan membuat suatu file package.json yang isinya berisi daftar paket yang dibutuhkan dan kemudian mengetikkan npm install pada terminal. Isi file package.json pada Tugas Akhir dapat dilihat pada Kode Sumber 4.1.
31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{ "name": "emailta", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.15.1", "express": "~4.13.4", "fs-extra": "^2.1.2", "moment": "^2.18.1", "mysql": "^2.13.0", "pug": "^2.0.0-beta11", "serve-favicon": "~2.3.0" } }
Kode Sumber 4.1 Isi File package.json
Keterangan Kode Sumber 4.1 adalah sebagai berikut: 1. Name: nama proyek yang sedang dikerjakan 2. Version: versi proyek yang sedang dikerjakan 3. Private: mode privat untuk proyek yang sedang dikerjakan 4. Scripts: penempatan script untuk proyek yang sedang dikerjakan 5. Body-parser: digunakan untuk melakukan parsing data request.body pada Node.js 6. Express: digunakan sebagai kerangka kerja aplikasi 7. Fs-extra: sebuah package untuk membuat file system 8. Moment: digunakan untuk mendapatkan waktu 9. Mysql: package yang diinstal untuk menggunakan basis data MySQL 10. Pug: templating engine untuk antarmuka aplikasi 11. Serve-favicon: digunakan browser untuk mengindentifikasi suatu website
32 4.2.2
Implementasi Basis Data
Penyimpanan data pada aplikasi Tugas Akhir ini mengunakan salah satu tools dari MySQL yaitu MySQL Workbench. Untuk dapat menyambungkan aplikasi dengan basis data, dibutuhkan file database.js seperti pada Kode Sumber 4.2. 1 2 3 4 5 6 7 8 9 10 11
var express = require("express"); var mysql = require('mysql'); var connection = mysql.createConnection({ connectionLimit : 100000, host : '10.151.36.30', user : 'ta', password : ta2017, database : 'restful_api_demo' }); connection.connect(); module.exports = connection;
Kode Sumber 4.2 Isi File database.js
Keterangan Kode Sumber 4.2 adalah sebagai berikut: 1. connectionLimit: maksimal koneksi terhadap basis data 2. host: alamat ip di mana aplikasi dapat diakses 3. user: nama pengguna pada basis data 4. password: kata sandi yang digunakan pada basis data 5. database: basis data yang digunakan Pada basis data yang telah dibuat, terdapat tiga tabel sebagai media penyimpanan yaitu tabel user, message, dan file_upload. Tabel 4.2 meliputi nama atribut, tipe data, dan deskripsi masing-masing atribut.
33 Tabel 4.2 Implementasi Basis Data
No Nama Tabel 1 user
Nama Atribut user_id
Tipe Data
Deskripsi
integer
2
user
user_email
varchar(45)
3
user
user_password varchar(45)
4
message
msg_id
integer(70)
5
message
msg_source
varchar(45)
6
message
msg_target
varchar(45)
7 8
message message
msg_plain key_recepient
text varchar(45)
9
message
msg_time
timestamp
10
file_upload id_file
Primary key tabel Alamat email pengguna Password pengguna Primary key tabel Alamat email pengirim Alamat email penerima Pesan teks Kunci yang digunakan penerima untuk membuka dan membaca pesan dari pengirim Waktu pesan ketika dikirim Primary key tabel
integer(70)
34 No Nama Nama Tabel Atribut 11 file_upload name_file
12
file_upload path_file
13
file_upload size_file
14
file_upload time_file
4.2.3
Tipe Data
Deskripsi
varchar(100) Nama file yang diunggah varchar(100) Alamat folder file yang diunggah varchar(45) Ukuran file yang diunggah timestamp Waktu file diunggah
Implementasi Backend
Implementasi backend pada Tugas Akhir ini menggunakan kerangka kerja Express.js dan Web Service REST API. Rute backend ditulis dalam sebuah file javascript. Di bawah ini terdapat Tabel 4.3 yang menunjukkan rute backend pada aplikasi ini.
35
Tabel 4.3 Implementasi Backend
No
Rute
1
/login
Metode POST
2
/compose
POST
Hak akses
Pengguna
Tidak ada
Aksi
Langkah Proses
Melakukan 1. Menerima data dari autentikasi username frontend berisi username dan password. dan password 2. Jika pengguna terdaftar, maka pengguna akan diarahkan ke halaman pesan masuk 3. Jika pengguna tidak terdaftar, maka pengguna akan tetap diarahkan pada halaman login Mengirim pesan 1. Menerima data dari berupa teks atau halaman frontend berisi lampiran. email yang dituju, lampiran jika perlu, dan isi pesan 2. Mengirim data ke database ketika tombol send diklik
36 No
3
Rute
/viewInbox
Metode
POST
Hak akses
Pengguna
Aksi
Membalas berupa teks
Langkah Proses 3. Ketika proses pengiriman data dilakukan, akan terjadi proses enkripsi data untuk melakukan penyandian data pesan 1. Menerima data dari frontend berisi pesan teks 2. Mengirim data ke database ketika tombol send diklik
37 4.2.3.1
Inisiasi Session
Session bisa diartikan sebagai suatu informasi yang diambil saat melakukan suatu pekerjaan tertentu. Informasi ini disimpan pada variabel session yang disimpan di sisi server dan dapat diakses oleh klien pada web browser. Dalam Tugas Akhir ini, script session disimpan pada folder terpisah yaitu pada folder /middleware dengan nama file auth.js. Script ini akan dipanggil pada halaman-halaman yang membutuhkan session di dalamnya. Apabila pengguna tidak melakukan login pada halaman tersebut, maka pengguna tidak dapat mengakses dan akan dirujuk ke halaman login. Berikut pseudocode session ditunjukkan pada Gambar 4.1. Kode sumber fungsi inisiasi session terdapat pada Kode Sumber 4.3 pada lampiran. 1 2 3 4
if session next() else redirect login
Gambar 4.1 Pseudocode auth.js
4.2.3.2
Login
Pada umumnya, aplikasi web dilengkapi dengan fitur login untuk melakukan verifikasi pengguna. Form login pada aplikasi ini berisi email dan password. Ketika pengunjung memasukkan email dan password yang sesuai dengan data yang berada pada basis data maka pengunjung tersebut dapat mengakses halaman pesan masuk. Apabila pengunjung tidak memasukkan email dan password yang sesuai dengan data yang berada pada basis data, maka pengunjung tetap akan berada pada halaman login. Pseudocode dapat dilihat pada Gambar 4.2. Kode sumber fungsi login terdapat pada Kode Sumber 4.4 baris 10-36 pada lampiran.
38 1 2 3 4 5 6 7
input user_email and user_password if user_email and user_password esixt in table user login successed else login failed
Gambar 4.2 Pseudocode index.js
4.2.3.3
Mengirim Pesan
Berikut merupakan pseudocode untuk mengambil id-id dari frontend agar dapat diproses untuk melakukan enkripsi pesan. Pseudocode dapat dilihat pada Gambar 4.3. Kode sumber fungsi untuk mengambil id dari frontend terdapat pada Kode Sumber 4.5 pada lampiran. 1 2 3 4 5 6 7 8 9
get get get get
text date to from
key = text + date + to + from + “TA2017” sort key by alphabets text = window.encrypt(text, key)
Gambar 4.3 Pseudocode enkrip.js
Berikut penjelasan Gambar 4.3: 1. Text adalah isi pesan teks yang akan dikirim yang dimasukkan oleh pengguna. 2. Date adalah varibel untuk mendapatkan waktu pengiriman pesan. 3. To adalah variabel untuk mendapatkan alamat email penerima yang dimasukkan oleh pengguna. 4. From adalah variabel untuk mendapatkan alamat email pengirim.
39 5. Key adalah variabel untuk menampung empat variabel diatas ditambah string ’TA2017’ yang kemudian diurutkan berdasarkan alfabet yang akan digunakan sebagai kunci pengenkripsian pesan. 6. Kemudian fungsi ini memanggil fungsi enkrip pada file modul.js yang ditunjukkan pada Gambar 4.4. Kode sumber fungsi tersebut terdapat pada Kode Sumber 4.6 di lampiran. 1 2 3 4 5 6 7
function encrypt(message, key) ciphertext = xxtea.encryptToString(message, key) return ciphertext function decrypt(message,ke ciphertext = xxtea.decryptToString(message, key) return ciphertext
Gambar 4.4 Pseudocode modul.js
Berikut penjelasan Gambar 4.4: 1. Fungsi encrypt merupakan fungsi untuk mengenkrip isi pesan 2. Fungsi decrypt merupakan fugsi untuk mendekrip isi pesan Pada Gambar 4.5 terdapat pseudocode untuk membuat pesan. Kode sumber fungsi membuat pesan terdapat pada Kode Sumber 4.7 di lampiran. Penjelasan pseudocode tersebut adalah sebagai berikut: 1. Mengeset alamat email pengirim menjadi session yang sedang login. 2. Memasukkan msg_source dan isi pesan ke basis data dengan query INSERT INTO ke tabel message. 3. Apabila pengguna ingin menambahkan lampiran, file lampiran tersebut akan dimasukkan ke tabel file_upload dengan mengambil msg_id yang sama dengan pesan yang sedang dibuat yang disimpan pada variabel rows.insertId.
40 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
set msg_source = session input msg_source and msg_plain add msg_source and msg_plain to table message if File = 1 set name_File set path_File
= filename + originalname = /file/ + filename + originalname set size_File = size
add name_File, path_File, size_File to file_upload else return
Gambar 4.5 Pseudocode Mengirim Pesan
Secara keseluruhan, proses enkripsi dan dekripsi pesan disimpan pada sebuah file yaitu xxtea.js yang berisi algoritma XXTEA. Kemudian untuk membungkus xxtea.js dan modul.js agar dapat dijalankan dalam proses sebelum pengiriman ke basis data, digunakan sebuah tools yaitu browserify dengan melakukan perintah browserify modul.js -o bundle.js pada terminal. Dari perintah tersebut akan menghasilkan file bundle.js yang berisi gabungan modul.js dan xxtea.js. File bundle.js ini akan tersimpan pada folder public. Kemudian pada folder yang sama dibuat file enkrip.js untuk menampung id-id yang akan dibutuhkan. File tersebut dapat dilihat pada Gambar 4.3. Isi file yang terdapat pada modul.js dapat dilihat pada Gambar 4.4. 4.2.3.4
Daftar Pesan Masuk
Pada halaman pesan masuk, pengguna dapat melihat semua pesan yang diterima pengguna. Halaman ini merupakan halaman yang akan muncul setiap kali pengguna berhasil melakukan login. Pada halaman ini, pengguna tidak dapat melihat detail pesan masuk namun hanya dapat melihat dari siapa dan
41 kapan pesan tersebut masuk. Pseudocode dapat dilihat pada Gambar 4.6. Kode sumber fungsi daftar pesan masuk terdapat pada Kode Sumber 4.8 baris 8-55 di lampiran. 1 2 3 4 5 6 7 8 9 10 11 12 13 14
set msg_source = session query = select from table message if error message error else for i=0; i
Gambar 4.6 Pseudocode inbox.js
Penjelasan Gambar 4.6 adalah sebagai berikut: 1. Mengeset alamat email pengirim menjadi session yang sedang login. 2. Melakukan query SELECT untuk mengambil seluruh atribut yang ada pada tabel message dan diurutkan berdasarkan waktu yang paling terakhir masuk. 3. Dalam rute ini terdapat inisiasi objek inboxList yang bertipe global agar dapat dipanggil pada rute lain. Isi dari inboxList ini adalah alamat email pengirim, waktu pengiriman, dan alamat email yang dituju. Inisiasi ini juga berguna untuk melempar objek inboxList dari backend untuk ditampilkan pada frontend. 4. Halaman yang di-render pada rute ini adalah halaman pesan masuk.
42 4.2.3.5
Detail Pesan Masuk
Halaman detail pesan masuk menampilkan isi pesan, waktu pesan tersebut diterima, dan dari siapa pesan tersebut dikirim serta lampiran jika ada. Pada halaman ini pengguna dapat membalas pesan masuk secara langsung karena terdapat form balas pesan di bawah isi pesan. Pengguna juga dapat mengunduh lampiran apabila terdapat lampiran pada pesan tersebut. Pseudocode melihat detail pesan masuk dapat dilihat pada Gambar 4.7. Kode sumber fungsi detail pesan masuk terdapat pada Kode Sumber 4.8 baris 56-164 di lampiran. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
query = select from table message if error Message error else str str str str
1 2 3 4
= = = =
msg_source msg_target msg_time “TA2017”
stringConcat = str1 + str2 + str3 + str4 key = stringConcat sort key by alphabets plaintext = xxtea.decryptToString(db_message_plain, keySort);
Gambar 4.7 Pseudocode Detail Pesan Masuk
Penjelasan Gambar 4.7 adalah sebagai berikut: 1. Melakukan query SELECT untuk mengambil seluruh atribut yang ada pada tabel message yang msg_id-nya sesuai dengan yang dipilih pengguna.
43 2. Kemudian, pesan akan didekripsi dengan kunci yang didapat dari rumus kunci yang telah dijelaskan pada bab 3 dan memanggil XXTEA pada file xxtea.js. 1 2 3 4 5 6
add msg_plain to table message if error message error else render to inbox
Gambar 4.8 Pseudocode Membalas Pesan
Dalam inbox.js terdapat fungsi untuk melakukan pembalasan pesan. Fungsi ini bekerja hampir mirip dengan fungsi membuat pesan baru. Perbedannya adalah pada form balas pesan tidak terdapat kolom untuk melampirkan suatu file. Kode sumber fungsi membalas pesan masuk terdapat pada Kode Sumber 4.8 baris 165-190 di lampiran. Penjelasan Gambar 4.8 adalah sebagai berikut: 1. Memasukkan pesan ke basis data dengan query INSERT INTO ke tabel message. 2. Apabila tidak ada error maka akan memuat halaman pesan masuk. Selain terdapat form untuk melakukan pembalasan pesan, pada halaman detail pesan masuk ini juga akan menampilkan sebuah tautan jika pengirim melampirkan file saat mengirim pesan. Fungsi pengunduhan lampiran pada detail pesan masuk dapat dilihat pada Gambar 4.9. Kode sumber fungsi mengunduh lampiran terdapat pada Kode Sumber 4.8 baris 192-203 di lampiran. 1 2 3
query = select from file_upload render to viewInbox
Gambar 4.9 Pseudocode Mengunduh Lampiran
44 4.2.3.6
Daftar Pesan Keluar
Pada halaman pesan keluar, pengguna dapat melihat semua pesan yang telah dibuat dan dikirim. Pada halaman ini, pengguna tidak dapat melihat detail pesan keluar namun hanya dapat melihat kepada siapa dan kapan pesan tersebut dikirim. Pseudocode dapat dilihat pada Gambar 4.10. Kode sumber fungsi daftar pesan keluar terdapat pada Kode Sumber 4.9 baris 9-53 di lampiran. 1 2 3 4 5 6 7 8 9 10 11
query = select from table message if error Message error else for i=0; i
Gambar 4.10 Pseudocode outbox.js
Penjelasan Gambar 4.10 di atas adalah sebagai berikut: 1. Melakukan query SELECT untuk mengambil seluruh atribut yang ada pada tabel message dan diurutkan berdasarkan waktu yang paling terakhir dikirim. 2. Dalam rute ini terdapat inisiasi objek outboxList yang bertipe global agar dapat dipanggil pada rute lain. Isi dari outboxList ini adalah alamat email penerima, waktu pengiriman. Inisiasi ini juga berguna untuk melempar objek outboxList dari backend untuk ditampilkan pada frontend. 3. Halaman yang di-render pada rute ini adalah halaman pesan keluar.
45 4.2.3.7
Detail Pesan Keluar
Halaman detail pesan keluar menampilkan isi pesan, waktu pesan tersebut dikirim, dan kepada pesan tersebut dikirim serta lampiran jika ada. Pengguna dapat mengunduh lampiran apabila terdapat lampiran pada pesan tersebut. Pseudocode dapat dilihat pada Gambar 4.11. Kode sumber fungsi detail pesan keluar terdapat pada Kode Sumber 4.9 baris 55-158 di lampiran. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
query = select from table message if error Message error else str str str str
1 2 3 4
= = = =
msg_source msg_target msg_time “TA2017”
stringConcat = str1 + str2 + str3 + str4 key = stringConcat sort key by alphabets plaintext = xxtea.decryptToString(message, key)
Gambar 4.11 Pseudocode Detail Pesan Keluar
Penjelasan Gambar 4.11 adalah sebagai berikut: 1. Melakukan query SELECT untuk mengambil seluruh atribut yang ada pada tabel message yang msg_id-nya sesuai dengan yang dipilih pengguna. 2. Kemudian, pesan akan didekripsi dengan kunci yang didapat dari rumus kunci yang telah dijelaskan pada bab 3 dan memanggil XXTEA pada file xxtea.js. Apabila pada halaman detail pesan keluar pengirim memasukkan lampiran maka sebuah tautan pengunduhan akan muncul pada layar. Fungsi pengunduhan lampiran pada detail
46 pesan keluar dapat dilihat pada Gambar 4.12. Kode sumber fungsi mengunduh lampiran terdapat pada Kode Sumber 4.9 baris 160168 di lampiran. 1 2 3
query = select from file_upload render to viewInbox
Gambar 4.12 Pengunduhan File pada Pesan Keluar
4.2.4
Implementasi Frontend
Implementasi frontend pada Tugas Akhir ini dibangun menggunakan Pug.js. Pada aplikasi ini terdapat lima kasus penggunaan yaitu: 1. Pengguna dapat mengirim pesan berupa teks dan lampiran 2. Pengguna dapat melihat pesan masuk 3. Pengguna dapat melihat pesan keluar 4. Pengguna dapat mengunggah lampiran 5. Pengguna dapat mengunduh lampiran Di bawah ini terdapat Tabel 4.4 yang menunjukkan rute frontend pada aplikasi ini.
47 Tabel 4.4 Implementasi Frontend
No
Rute
1
/
Metode GET
2
/compose
GET
Hak akses
Pengguna
Tidak ada
Aksi Menampilkan halaman login.
Langkah Proses
1. Pengguna mengisi username dan password pada halaman login 2. Pengguna mengeklik tombol login 3. Jika pengguna benar memasukkan username dan password, maka akan diarahkan ke halaman inbox. Jika salah, maka akan tetap berada pada halaman login Menampilkan 1. Pengguna memilih menu halaman kirim compose pesan atau lampiran 2. Pengguna mengisi form berisi alamat email yang dituju, lampiran jika perlu, dan pesan teks 3. Pengguna mengeklik tombol send
48 No
Rute
Metode GET
Hak akses
3
/inbox
Pengguna
4
/viewInbox/:m sg_id
GET
Pengguna
5
/outbox
GET
Pengguna
6
/viewOutbox/: msg_id
GET
Pengguna
Aksi
Langkah Proses
Menampilkan 1. Pengguna memilih menu halaman seluruh inbox pesan masuk 2. Pengguna melihat keseluruhan pesan masuk Menampilkan 1. Pengguna memilih salah satu halaman masingpesan keluar pada halaman masing pesan inbox masuk 2. Pengguna akan melihat detail isi pesan masuk Menampilkan 1. Pengguna memilih menu halaman seluruh outbox pesan keluar 2. Pengguna akan melihat keseluruhan pesan keluar yang telah dibuat Menampilkan 3. Pengguna memilih salah satu halaman masingpesan keluar pada halaman masing pesan keluar outbox 4. Pengguna akan melihat detail isi pesan keluar
49 No
Rute
7
/download/:id _file
8
/logout
Metode GET
Hak akses
GET
Pengguna
Pengguna
Aksi
Langkah Proses
Menampilkan 1. Pengguna dapat melakukan tautan untuk pengunduhan file lampiran mengunduh pada saat pengguna lampiran membuka detail isi pesan pada halaman inbox Menampilkan 1. Pengguna memilih tombol tombol untuk logout logout 2. Pengguna akan keluar dari akun dan akan diarahkan pada halaman login
50 4.2.3.8
Halaman Index
Aplikasi E-Surat ini dapat diakses pada IP private 10.151.36.30 dengan port 3232. Saat pertama kali diakses, akan muncul tampilan seperti Gambar 4.13 di bawah ini. Untuk masuk ke halaman login, pengguna harus memilih login pada halaman index ini.
Gambar 4.13 Halaman Index
4.2.3.9
Halaman Login
Sebelum masuk ke halaman pesan masuk, pengguna harus melakukan login terlebih dahulu. Pengguna harus memasukkan alamat email dan password pengguna yang benar. Tampilan halaman login dapat dilihat pada Gambar 4.14.
4.2.5
Implementasi Algoritma XXTEA
Berikut Gambar 4.20 merupakan pseudocode dalam proses implementasi algoritma XXTEA. Untuk fungsi XXTEA sudah dijelaskan pada bab 2.1.
51 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Get plaintext Get key Set plaintext to bytes Set key to bytes Convert bytesPlaintext to 32IntArray of bytesPlaintext Convert bytesKey to 32IntArray of bytesKey Encrypt xxtea.function(32IntArrayPlaintext,32IntArrayKey) Convert 32IntArrayCiphertext to 8IntArrayCiphertext Ciphertext = Convert 8IntArrayCiphertext to string.(’base64’)
Gambar 4.14 Pseudocode Implementasi Algoritma XXTEA
52 (Halaman ini sengaja dikosongkan)
BAB V UJI COBA DAN EVALUASI Bab ini akan dijelaskan mengenai skenario uji coba pada perangkat lunak yang telah dibangun. Setelah itu, hasil uji coba akan dievaluasi kinerjanya sehingga dapat diputuskan apakah perangkat lunak ini mampu menyelesaikan permasalahan yang telah dirumuskan diawal. Secara garis besar, bab ini berisikan pembahasan mengenai lingkungan pengujian, data pengujian, dan uji kinerja. 5.1
Lingkungan Pengujian
Lingkungan untuk pengujian menggunakan dua buah komputer yang berfungsi sebagai web server dan penguji. Pada komputer web server hanya digunakan untuk menyalakan server. Sedangkan komputer penguji digunakan untuk mengakses aplikasi Tugas Akhir ini. Proses pengujian dilakukan di Laboratorium Arsitektur dan Jaringan Komputer gedung Teknik Informatika ITS. Spesifikasi perangkat keras dan perangkat lunak yang digunakan dapat dilihat pada Tabel 5.1. Tabel 5.1 Spesifikasi Lingkungan Pengujian
Perangkat
Jenis Perangkat
Perangkat Keras
Prosesor Memori Sistem Operasi
Perangkat Lunak
Perangkat Pengembang
53
Spesifikasi Intel(R) Core(TM) I3 2120 4 GB Linux Ubuntu 14.02.03 LTS Wireshark 1.12.1 sebagai penguji peforma MySQL Workbench 6.0 sebagai basis data
54 5.2
Skenario Uji Coba
Skenario uji coba pada Tugas Akhir ini dilakukan dalam dua tahap yaitu tahap uji coba uji fungsionalitas dan uji performa. 5.2.1
Uji Fungsionalitas
Untuk menguji fungsionalitas sitem surat elektronik yang telah dibuat dilakukan dua pengujian. Pertama, sistem diuji fungsionalitasnya menggunakan peramban Mozilla Firefox. Pengujian ini dilakukan dengan menjalankan sistem pada komputer penguji dengan memasukkan 10.151.36.30:3232 pada kolom url peramban. Kemudian sistem dicek seluruh fungsionalitas yang telah dibuat apakah sudah berjalan sesuai rancangan atau belum. Kedua, sistem diuji menggunakan salah satu sniffing tools yaitu Wireshark. Aplikasi Wireshark digunakan untuk melihat apakah pesan yang terkirim telah terenkripsi atau belum. Sama seperti pengujian pertama, sistem dijalankan pada komputer penguji bersamaan dengan menyalakan aplikasi Wireshark. Kemudian pada aplikasi Wireshark masukkan “ip.dst==10.151.36.30 && 10.151.36.32 && http.request.method==POST” pada kolom filter. Lalu Wireshark akan menampilkan paket data yang dikirim dari komputer penguji dengan IP 10.151.36.32 ke IP 10.151.36.30 yang bermetode POST. Dari hasil filter ini nanti dapat dilihat apakah algortima enkripsi XXTEA berhasil diimplementasikan atau tidak. 5.2.2
Uji Performa
Uji performa pada Tugas Akhir ini dibagi menjadi dua kasus, yaitu uji performa aplikasi dan uji performa algoritma. Pertama, uji performa aplikasi dilakukan untuk menguji kemampuan web server dalam menangani request yang masuk. Kedua, uji performa algoritma dilakukan untuk menghitung total
55 waktu yang dihasilkan ketika melakukan proses enkripsi dan dekripsi pesan. 5.2.2.1 Uji Performa Aplikasi Uji performa aplikasi dilakukan untuk mengetahui performa aplikasi surat elektronik. Pada pengujian ini akan dilihat bagaimana performa aplikasi apabila terdapat batas maksimal permintaan, maksimal permintaan perdetik, dan maksimal jumlah pengguna yang mengakses secara bersamaan. Pengujian ini dilakukan dengan menggunakan package dari Node.js bernama loadtest. Loadtest adalah salah satu tools untuk melakukan uji pembebanan suatu aplikasi. Loadtest bertujuan untuk mengukur respon dari aplikasi pada Tugas Akhir ini. Pengujian ini mengidentifikasi kondisi puncak normal dan kapasitas operasi maksimum dari aplikasi yang diuji. Variabel yang ditentukan dalam pengujian ini adalah concurent dan total request. Concurent merupakan jumlah request yang dilakukan secara bersamaan. Nilai concurent yang ditetapkan adalah 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, dan 1024. Total request merupakan jumlah maksimal request yang dilakukan dalam suatu pengujian. Nilai total request diset sebesar 1000. Pada uji performa ini akan dihasilkan beberapa informasi yaitu total errors, total time seconds, request per second, mean latency, min latency, dan max latency. Total errors adalah banyaknya jumlah error dalam satu pengujian. Total time seconds adalah lamanya waktu dalam satu pengujian. Request per second adalah banyaknya jumlah permintaan setiap detiknya. Mean latency, min latency, dan max latency masing-masing adalah ratarata waktu latensi (interval waktu terhadap respon), waktu minimal, dan waktu maksimal.
56 5.2.2.2 Uji Performa Algoritma Uji coba perfoma algoritma adalah menghitung kecepatan waktu untuk melakukan enkripsi dan dekripsi pesan. Uji performa algoritma pada penelitian ini menggunakan fungsi now() pada Javascript. Penggunaan fungsi ini dilakukan dengan menginisiasi varibel yang menyimpan fungsi now() pada sebelum dan sesudah fungsi enkripsi dan dekripsi kemudian dihitung selisihnya untuk mendapatkan kecepatan waktu enkripsi dan dekripsi. Hasil yang diharapkan pada uji performa algoritma ini adalah mengetahui performa algoritma XXTEA mengenai berapa waktu yang dibutuhkan untuk proses enkripsi dan dekripsi pesan. Fungsi ini dapat dilihat pada Gambar 5.1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
str = "Kabel UTP memiliki beberapa warna di dalamnya, tujuan pemberian warna ini agar dalam pengiriman data dan transmisi paket dapat diminimalisisr adanya lost packet dan dapat mempercepat pengiriman paket-paket tersebut" key = "TA2017!" t0 = get time.now() encrypt_data = xxtea.encryptToString(str, key) t1 = get time.now() encrypt_time = t1 - t0 t2 = get time.now() decrypt_data = xxtea.decryptToString(encrypt_data, key) t3 = get time.now() decrypt_time = t3 – t2
Gambar 5.1 Pseudocode test.js
5.3
Hasil Uji Coba
Sebelum melakukan uji coba, perlu ditentukan skenario yang akan digunakan dalam uji coba. Melalui skenario uji coba ini,
57 perangkat akan diuji apakah sudah berjalan dengan benar, bagaimana performa pada masing-masing skenario dan perbandingan performa antara skenario mana yang memiliki hasil paling baik. Pada Tugas Akhir ini, terdapat dua skenario uji coba, yaitu uji fungsionalitas dan uji performa. 5.3.1
Hasil Uji Fungsionalitas
Berikut merupakan hasil uji fungsionalitas yang telah dilakukan. Uji fungsionalitas yang pertama dilakukan menggunakan peramban Mozilla Firefox pada komputer penguji dan yang kedua menggunakan perangkat lunak Wireshark untuk melakukan sniffing paket data. Hasil uji fungsionalitas pertama ditunjukkan pada Tabel 5.2. Tabel 5.2 Hasil Eksekusi Uji Fungsionalitas
No
Nama Kegiatan
1
Login sebagai pengguna
2
Membuka halaman pesan masuk
3
Membuka halaman pesan keluar
4
Mengirim pesan
Uji Coba Dapat login ke dalam sistem dengan username dan password yang sudah terdaftar Dapat mengakses halaman pesan masuk setelah berhasil melakukan login Dapat mengakses halaman pesan keluar Dapat mengirim pesan yang berisi alamat email yang
Hasil Harapan Sukses
Sukses dan muncul seluruh pesan masuk Sukses dan muncul seluruh pesan keluar Sukses
58 No
Nama Kegiatan
Uji Coba
5
Membuka halaman detail pesan masuk
akan dituju, isi pesan, dan lampiran jika ada Dapat membuka halaman detail pesan masuk
6
Membuka halaman detail pesan keluar
Dapat membuka halaman detail pesan keluar
7
Mengunggah lampiran
8
Mengunduh lampiran
Dapat mengunggah lampiran berekstensi txt, word, jpg, pdf, zip Dapat mengunduh lampiran pada saat menerima pesan
Hasil Harapan
Sukses dan muncul isi detail pesan masuk Sukses dan muncul isi detail pesan keluar Sukses
Sukses dan berhasil menyimpan lampiran pada komputer
Uji fungsionalitas yang kedua menggunakan aplikasi sniffing data yaitu Wireshark. Gambar 5.2 di bawah ini menunjukkan bahwa msg_plain-nya belum terenkripsi yaitu “coba wireshark nih”. Sedangkan pada Gambar 5.3 menunjukkan bahwa msg_plain-nya telah terenkripsi menjadi “NI40ho6k1xfVfVs38i4sIKPtwX/vhZei” yang berarti hasil uji coba fungsionalitas ini berhasil.
59
Gambar 5.2 Hasil Uji Fungsionalitas Menggunakan Wireshark Belum Terenkripsi
Gambar 5.3 Hasil Uji Fungsionalitas Menggunakan Wireshark Sudah Terenkripsi
60 5.3.2
Hasil Uji Performa
Pada uji performa ini terdapat dua subbab yaitu hasil uji coba performa aplikasi dan hasil uji coba algoritma. 5.3.2.1 Hasil Uji Performa Aplikasi Uji performa ini dilakukan dengan cara menjalankan file loadtest.js. Aplikasi ini akan diuji dengan menjalankan server yang terbagi beban pekerjaannya hingga ke 8 node CPU virtual. Hasil uji performa ini akan digambarkan dalam bentuk grafik. Berikut dapat dilihat grafik pada Gambar 5.4 hingga Gambar 5.11. Untuk tabel hasil uji coba performa aplikasi terdapat pada Gambar 5.12 hingga Gambar 5.19 di lampiran.
Gambar 5.4 Grafik Performa 1 Node CPU
Dapat dilihat pada grafik Gambar 5.4 bahwa pada penggunaan 1 node CPU jumlah request per second yang dapat dihasilkan untuk setiap nilai concurent-nya yang telah ditentukan adalah 20.
61
Gambar 5.5 Grafik Performa 2 Node CPU
Grafik pada Gambar 5.5 menunjukan jumlah request per second yang dapat dihasilkan pada penggunaan 2 node CPU adalah tidak stabil. Nilai tertinggi request per second yang dapat dihasilkan adalah sebesar 33 request yaitu saat nilai concurent-nya 2. Sedangkan nilai terendah request per second-nya adalah 22 yaitu saat nilai concurent-nya 62 dan 1024. Penjelasan lebih lengkap mengenai Gambar 5.5 akan dijelaskan sebagai berikut. Pada saat nilai concurent-nya 1, 4, 8, dan 128 request per second yang dihasilkan adalah 32 request. Ketika nilai concurrent-nya 16, request per second-nya adalah 30 request. Saat nilai concurrent-nya 32, request per second yang dihasilkan adalah sebesar 24 request. Ketika nilai concurrent-nya 256 dan 512, request per second yang dihasilkan adalah sebesar 31 request.
62
Gambar 5.6 Grafik Performa 3 Node CPU
Dapat dilihat pada grafik Gambar 5.6 bahwa pada penggunaan 3 node CPU akan menghasilkan jumlah request per second yang cukup stabil. Saat nilai concurent-nya 1 jumlah request per second yang dapat dihasilkan adalah 32. Jumlah request per second naik hingga mencapai nilai maksimalnya yaitu 34 permintaan. Kemudian nilai request per second tidak mengalami kenaikan dan penurunan yang drastis kecuali pada saat nilai concurent-nya 1024. Pada saat nilai concurentnya 1024 jumlah request per second dihasilkan oleh aplikasi adalah 30. Penjelasan lebih lengkap mengenai Gambar 5.6 akan dijelaskan sebagai berikut. Pada saat nilai concurent-nya 16 dan 128, request per second yang dihasilkan adalah 33 request. Ketika nilai concurrent-nya 2, 4, 8, 32, 64, 256, dan 512 request per second-nya adalah 34 permintaan per detik.
63
Gambar 5.7 Grafik Performa 4 Node CPU
Grafik pada Gambar 5.7 menunjukan jumlah request per second yang dapat dihasilkan pada penggunaan 2 node CPU adalah tidak stabil. Terdapat kenaikan dan penurunan nilai request per second yang cukup signifikan. Nilai tertinggi request per second yang dapat dihasilkan adalah sebesar 34 request yaitu saat nilai concurent-nya 2. Sedangkan nilai terendah request per second-nya adalah 22 yaitu saat nilai concurent-nya 32. Penjelasan lebih lengkap mengenai Gambar 5.7 akan dijelaskan sebagai berikut. Pada saat nilai concurent-nya 1, request per second yang dihasilkan adalah 32 request. Ketika nilai concurrent-nya 4, 8, 16, request per second-nya adalah 30 request. Saat nilai concurrent-nya 64, request per second yang dihasilkan adalah sebesar 27 request. Pada saat nilai concurent-nya 128 dan 256, request per second yang dihasilkan adalah 28 dan 26. Ketika nilai concurrent-nya 512 dan 1024, request per second yang dihasilkan adalah sebesar 33 request.
64
Gambar 5.8 Grafik Performa 5 Node CPU
Dapat dilihat pada grafik Gambar 5.8 bahwa pada penggunaan 5 node CPU akan menghasilkan jumlah request per second yang cukup stabil karena nilai yang dihasilkan berkisar dari angka 29 hingga 34. Saat nilai concurent-nya 1 jumlah request per second yang dapat dihasilkan adalah 30. Jumlah request per second naik hingga mencapai nilai maksimalnya yaitu 33 permintaan saat nilai concurent-nya 4, 16, 64, dan 512. Nilai terendah drastis kecuali pada saat nilai concurent-nya 1024. Pada saat nilai concurentnya 1024 jumlah request per second dihasilkan oleh aplikasi adalah 29. Penjelasan lebih lengkap mengenai Gambar 5.8 akan dijelaskan sebagai berikut. Pada saat nilai concurent-nya 1, 256 request per second yang dihasilkan adalah 30 request. Ketika nilai concurrent-nya 2, 32, 128, request per second-nya adalah 31 request. Saat nilai concurrent-nya 8, request per second yang dihasilkan adalah sebesar 32 request.
65
Gambar 5.9 Grafik Performa 6 Node CPU
Grafik pada Gambar 5.9 menunjukan jumlah request per second yang dapat dihasilkan pada penggunaan 2 node CPU adalah tidak stabil. Terdapat kenaikan dan penurunan nilai request per second yang cukup drastis. Nilai tertinggi request per second yang dapat dihasilkan adalah sebesar 33 request yaitu saat nilai concurent-nya 256. Sedangkan nilai terendah request per secondnya adalah 23 yaitu saat nilai concurent-nya 8. Penjelasan lebih lengkap mengenai Gambar 5.9 akan dijelaskan sebagai berikut. Pada saat nilai concurent-nya 2, 16, 64, 128, dan 1024 request per second yang dihasilkan adalah 32 request. Ketika nilai concurrent-nya 4 dan 32, request per secondnya adalah 28 request. Saat nilai concurrent-nya 1, request per second yang dihasilkan adalah sebesar 30 request. Ketika nilai concurrent-nya 512, request per second yang dihasilkan adalah sebesar 31 request.
66
Gambar 5.10 Grafik Performa 7 Node CPU
Dapat dilihat pada grafik Gambar 5.10 bahwa pada penggunaan 7 node CPU akan menghasilkan jumlah request per second yang tidak stabil karena nilai yang dihasilkan berkisar dari angka 24 hingga 32. Saat nilai concurent-nya 1 jumlah request per second yang dapat dihasilkan adalah 27. Jumlah request per second naik hingga mencapai nilai maksimalnya yaitu 32 permintaan saat nilai concurent-nya 2. Nilai terendah yang dihasilkan adalah 24 yaitu pada saat nilai concurent-nya 16 dan 64. Penjelasan lebih lengkap mengenai Gambar 5.10 akan dijelaskan sebagai berikut. Pada saat nilai concurent-nya 4 dan 256 request per second yang dihasilkan adalah 25 request. Ketika nilai concurrent-nya 8, 128, 512, dan 1024, request per second-nya adalah 27 request. Saat nilai concurrent-nya 32, request per second yang dihasilkan adalah sebesar 28 request.
67
Gambar 5.11 Grafik Performa 8 Node CPU
Grafik pada Gambar 5.11 menunjukan jumlah request per second yang dapat dihasilkan pada penggunaan 10 node CPU tidak stabil dan memiliki ruang nilai yang rendah. Nilai tertinggi request per second yang dapat dihasilkan adalah sebesar 26 request yaitu saat nilai concurent-nya 4 dan 256. Sedangkan nilai terendah request per second-nya adalah 20 yaitu saat nilai concurent-nya 512. 5.3.2.2 Hasil Uji Performa Algoritma Hasil uji coba performa algoritma dilakukan dengan menguji lamanya waktu (dalam millisecond) untuk mengenkripsi dan mendekripsi 5 contoh teks dengan jumlah karakter yang bervariasi namun memiliki kunci yang sama. Kunci yang digunakan pada uji coba ini adalah “
[email protected]@gmail.comTA2017! ”. Uji coba ini dilakukan sebanyak lima kali untuk masing-masing jumlah karakter yang telah ditentukan kemudian diambil nilai rata-ratanya. Hasil dari uji performa algoritma ini dapat dilihat pada Tabel 5.3 dan Tabel 5.4
68 Tabel 5.3 Hasil Pengujian Performa Enkripsi XXTEA
Karakter 100 500 1000 1500 2000
Waktu Enkripsi XXTEA Pengujian 1 Pengujian 2 Pengujian 3 Pengujian 4 Pengujian 5 Rata-Rata 1.725689 1.651743 1.664879 1.721699 1.660782 1.6849584 1.99119 1.744716 2.09165 2.159984 2.332117 2.0639314 2.059561 2.456443 2.493199 2.111419 2.060457 2.2362158 2.277431 2.090633 2.291006 2.351205 2.440587 2.2901724 2.948097 2.894597 2.859826 2.953113 2.964795 2.9240856 Rata-Rata Pengujian 2.23987272 Tabel 5.4 Hasil Pengujian Performa Dekripsi XXTEA
Karakter 100 500 1000 1500 2000
Waktu Enkripsi XXTEA Pengujian 1 Pengujian 2 1.797767 1.941078 1.868028 1.892935 2.11421 1.907982 2.473032 2.462018 2.427395 2.409848
Pengujian 3 2.158804 1.96093 1.88285 2.174836 2.378116
Pengujian 4 Pengujian 5 1.979435 2.186128 1.910452 1.888887 2.452942 1.778747 2.032794 1.877615 2.476917 2.418484 Rata-Rata Pengujian
Rata-Rata 2.0126424 1.9042464 2.0273462 2.204059 2.422152 2.1140892
69 Dari hasil uji performa algoritma XXTEA, dapat disimpulkan bahwa waktu enkripsi dan dekripsi pada algoritma XXTEA relatif cepat. Rata-rata waktu yang digunakan XXTEA untuk mengenkripsi pesan adalah 2.23987272 ms. Sedangkan, rata-rata waktu yang dihasilkan algoritma XXTEA untuk mendekripsi pesan adalah 2.05297956 ms. Hasil grafik dari Tabel 5.3 dan 5.4 dapat dilihat pada Gambar 5.20 dan 5.21.
Waktu Enkripsi XXTEA 2.9
2.9240856
Waktu (ms)
2.7
2.5 2.3 2.2362158
2.1 2.0639314
1.9
1.7 1.5
2.2901724
1.6849584 100
500
1000
1500
2000
Jumlah Karakter (char) Gambar 5.20 Grafik Hasil Waktu Enkripsi XXTEA
Pada Gambar 5.20 dapat dilihat bahwa waktu yang dibutuhkan XXTEA untuk mengenkripsi suatu teks yang panjangnya 100 karakter adalah 1,6849584 dan tek yang panjangnya 2000 karakter adalah sebesar 2,9240856 ms. Waktu tersebut tercatat sebagai waktu tercepat dan terlama XXTEA mengenkripsi sebuah teks. Dari grafik di atas dapat dilihat bahwa semakin banyak jumlah karakter yang dienkripsi semakin lama waktu yang dibutuhkan XXTEA untuk mengenkripsi.
70
Waktu (ms)
Waktu Dekripsi XXTEA 2.9 2.7 2.5 2.3 2.1 1.9 1.7 1.5
2.422152 2.204059 2.0126424
100
1.9042464
500
2.0273462
1000
1500
2000
Jumlah Karakter (char) Gambar 5.21 Grafik Hasil Waktu Dekripsi XXTEA
Gambar 5.21 diatas menunjukkan grafik hasil waktu yang dibutuhkan XXTEA untuk mendekripsi suatu teks. Untuk mendekripsi teks yang panjangnya 100 karakter dibutuhkan waktu sebesar 2,0126424 ms sedangkan untuk teks yang panjangnya 2000 karakter diperlukan waktu sebesar 2,422152 ms. 5.3.3
Evaluasi
Berdasarkan hasil skenario uji coba yang telah dilakukan, sistem surat elektronik ini berjalan sesuai dengan rancangan sistem yang telah disampaikan pada bab 3. Hasil uji coba skenario uji fungsionalitas, terbukti bahwa pesan yang terkirim sudah terenkripsi dengan algoritma XXTEA. Pembuktian ini dilakukan dengan menjalankan aplikasi wireshark untuk melihat paket pesan yang dikirim. Pada uji performa, sistem rata-rata mampu menangani 32 request jika terdapat banyak pengguna yang secara bersamaan ketika mengakses sistem. Dari hasil uji algoritma XXTEA dapat disimpulkan bahwa rata-rata waktu untuk melakukan proses enkripsi adalah 2,23987272 ms dan dekripsi adalah 2.1140892 ms.
BAB VI KESIMPULAN DAN SARAN Bab ini membahas tentang kesimpulan yang didasari oleh hasil uji coba yang telah dilakukan pada bab sebelumnya. Kesimpulan nantinya sebagai jawaban dari rumusan masalah yang dikemukakan. Selain kesimpulan, juga terdapat saran yang ditujukan untuk pengembangan penelitian lebih lanjut di masa depan. 6.1.
Kesimpulan
Dalam pengerjaan Tugas Akhir ini melalui tahap perancangan aplikasi, implementasi algoritma, serta uji coba. Sehingga mendapatkan kesimpulan sebagai berikut: 1. Implementasi algoritma XXTEA pada aplikasi Surat Elektronik berbasis web berhasil dilakukan dengan cara enkripsi dan dekripsi pada pengiriman dan pengambilan pesan dari database. 2. Rata-rata waktu yang dibutuhkan algoritma XXTEA untuk mengenkripsi pesan adalah 2,240 ms dan mendekripsi pesan adalah 2,114 ms. 3. Aplikasi dapat menangani hingga 1024 pengguna yang mengakses secara bersamaan dan tidak terjadi error, dengan request per second-nya mencapai 34 request. 6.2.
Saran
Saran yang diberikan untuk pengembangan aplikasi ini adalah mengimplementasikan XXTEA pada sistem surat elektronik sesungguhnya agar dapat bermanfaat bagi aktivitas sehari-hari.
71
72 (Halaman ini sengaja dikosongkan)
DAFTAR PUSTAKA [1] K. William, “Studi Mengenai Tiny Encryption Algorithm (TEA) dan Turunan-Turunannya (XTEA dan XXTEA).” [2] R. T. Fielding dan R. N. Taylor, “Principled Design of the Modern Web Framework,” hal. 407–416, 2000. [3] Feridi, “Mengenal RESTful Web Services,” CodePolitan.com. [Daring]. Tersedia pada: https://www.codepolitan.com/mengenal-restful-web-services. [Diakses: 05-Mei-2017]. [4] “Node.js.” [Daring]. Tersedia pada: https://nodejs.org/en/. [Diakses: 04-Mei-2017]. [5] “NodeJS part I: Asynchronous I/O dan Event-driven.” [Daring]. Tersedia pada: http://bisakomputer.com/nodejs-parti-asynchronous-io-dan-event-driven/. [Diakses: 05-Mei2017]. [6] “Moving functionality to Node.js increased per-server capacity by 100x.” [Daring]. Tersedia pada: https://servercheck.in/blog/moving-functionality-nodejsincreased-server. [Diakses: 05-Jul-2017]. [7] M. Arslan, “Memulai Pembuatan Aplikasi Web dengan Express.js (1): Instalasi dan Pengenalan,” CodePolitan.com. [Daring]. Tersedia pada: https://www.codepolitan.com/memulai-pembuatan-aplikasiweb-dengan-express-js-1-instalasi-dan-pengenalan. [Diakses: 04-Mei-2017]. [8] “MySQL.” [Daring]. Tersedia pada: https://www.mysql.com/. [Diakses: 09-Jun-2017]. [9] S. Suehring, MySQL Bible. New York: Wiley Publishing, 2002. [10] “MySQL Workbench.” [Daring]. Tersedia pada: https://www.mysql.com/products/workbench/. [Diakses: 05Mei-2017]. [11] “StrongLoop - Comparing JavaScript Templating Engines: Jade, Mustache, Dust and More.” [Daring]. Tersedia pada: 73
74 https://strongloop.com/strongblog/compare-javascripttemplates-jade-mustache-dust/. [Diakses: 05-Mei-2017].
LAMPIRAN 1 2 3 4 5 6 7 8 9 10 11 12 13 14
'use strict'; module.exports = function(req,res,next){ //res.send(req.session.pisang) var x = true; if(x) next(); else { var response = {code:403,msg:"Forbidden Access!"}; req.session.response = response; res.redirect("/login"); } /*next();*/ };
Kode Sumber 4.3 Isi File auth.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
var var var var
express = require('express'); mysql = require('mysql'); router = express.Router(); connection = require('../database.js'); router.get("/",function(req,res){ res.render('index'); }); router.get("/login", function(req, res){ res.render('login'); req.session.pisang = "login";
}).post("/login", function(req, res){ var query = "SELECT * FROM ?? WHERE ?? = ? AND ?? = ?"; var table = ["user","user_email",req.body.email,"user_password", req.body.password]; query = mysql.format(query,table); connection.query(query,function(err,rows){ if(err) {
75
76 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else if(rows.length){ req.session.pisang = rows[0]; res.redirect("/inbox"); } else { res.redirect("/login"); } }); }); router.get('/logout', function(req, res) { if (!req.session.pisang) { res.redirect('/login'); } else { req.session.pisang = null; var response = { code: 200, msg: 'Logout Successfully!' }; req.session.response = response; res.redirect('/login'); } }); module.exports = router;
Kode Sumber 4.4 Isi File index.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14
$(document).on('click','#submit2', function(e){ var text_ori2 = $('#message_ori2').val(); var date2 = $('#date_open2').val(); var to2 = $('#message_to2').val(); var from2 = $('#message_from2').val(); var key2 = from2+to2+date2+'TA2017'; var sortAlphabets = function(stringConcat) { return stringConcat.split('').sort().join(''); }; key2 = sortAlphabets(key2); console.log(key2)
77 15 16 17 18 19 20
text_ori2 = window.encrypt(text_ori2, key2); $('#message_c2').val(text_ori2); $('#submitFormBtn2').click(); });
Kode Sumber 4.5 Isi File enkrip.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var xxtea = require("./xxtea.js"); window.encrypt = function(message, key){ //function encrypt(message, key){ var ciphertext = xxtea.encryptToString(message, key); return ciphertext; } window.decrypt = function(ciphertext, key){ //function decrypt(ciphertext, key){ var ciphertext = xxtea.decryptToString(ciphertext, key); return ciphertext; }
Kode Sumber 4.6 Isi File modul.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var var var var var var var var var var
express mysql router connection formidable path fs multer xxtea moment
= = = = = = = = = =
require('express'); require('mysql'); express.Router(); require('../database.js'); require('formidable'); require('path'); require('fs-extra'); require('multer'); require('../xxtea/xxtea.js'); require('moment');
router.get('/compose', require('../middleware/auth.js'), function(req, res){ var date = moment().format("YYYY-MM-DD HH:mm:ss");
78 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
res.render('compose', { 'login': req.session.pisang.user_email, 'date': date }); }).post("/compose", multer({ dest: './img/'}).single('fileUploaded'),function(req, res){ var query = "INSERT INTO ??(??,??,??,??) VALUES (?,?,?,?)"; var table = ["message","msg_source","msg_target","msg_plain","m sg_time",req.session.pisang.user_email,req.body.msg _target, req.body.msg_plain, req.body.msg_time]; query = mysql.format(query,table); connection.query(query,function(err,rows){ if(err) { res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { if (req.file) { fs.rename(req.file.path, './img/' + req.file.filename + '-' + req.file.originalname, function(err) { var nameFile = req.file.filename+ '-' + req.file.originalname; var pathFile = '/img/' + req.file.filename + '-' + req.file.originalname; var sizeFile = req.file.size; var query2 = "INSERT INTO ??(??,??,??,??) VALUES (?,?,?,?)"; var table2 = ["file_upload","name_file","path_file","size_file", "msg_id",nameFile, pathFile, sizeFile, rows.insertId]; query2 = mysql.format(query2,table2);
79 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
connection.query(query2,function(err,rows){ if(err) { res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { console.log(rows); } }); }); } res.redirect("/inbox"); } }); }); router.get('/new', function(req, res, next) { res.send('respond with a resource'); }); module.exports = router;
Kode Sumber 4.7 Isi File email.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
var var var var var var
express mysql router connection xxtea moment
= = = = = =
require('express'); require('mysql'); express.Router(); require('../database.js'); require('../xxtea/xxtea.js'); require('moment');
router.get("/", require('../middleware/auth.js'), function(req,res){ var loginList = []; global.inboxList = []; var query = "SELECT * FROM ?? WHERE ?? = ? ORDER BY ?? DESC"; var table = ["message", "msg_target", req.session.pisang.user_email, "msg_time"]; query = mysql.format(query,table); connection.query(query,function(err,rows,fields){ if(err) {
80 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
return res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { for (var i = 0; i < rows.length; i++) { // Create an object to save current row's data var login = req.session.pisang.user_email; var getTime = '' + rows[i].msg_time; var time = getTime.substr(0,24); global.inbox = { 'msg_id': rows[i].msg_id, 'msg_source': rows[i].msg_source, 'msg_plain': rows[i].msg_plain, 'msg_time': time, 'msg_target': rows[i].msg_target, 'key_recepient': rows[i].key_recepient, 'key_sender': rows[i].key_sender, 'login': login } // Add object into array inboxList.push(inbox); } } res.render('inbox', { 'inboxList': inboxList, 'login': req.session.pisang.user_email, 'loginList': loginList }); }); }); router.get('/viewInbox/:msg_id/', require('../middleware/auth.js'), function(req, res, next) { var viewInbox = []; var query = "SELECT * FROM ?? WHERE ?? = ?";
81 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
var table = ["message", "msg_id", req.params.msg_id]; query = mysql.format(query,table); connection.query(query,function(err, rows, fields){ if(err) { return res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { const db_message_plain = rows[0].msg_plain; /*Modul For Decrypt By Key*/ const key_from_sender_db = rows[0].key_sender; key = key_from_sender_db; str1 = rows[0].msg_source; str2 = rows[0].msg_target; str3 = moment(rows[0].msg_time).format("YYYY-MM-DD HH:mm:ss"); str4 = "TA2017"; var stringConcat = str1.concat(str2, str3, str4); var sortAlphabets = function(stringConcat) { return stringConcat.split('').sort().join(''); }; var keySort = sortAlphabets(stringConcat); var e = xxtea.decryptToString(db_message_plain,keySort); /*End Of Modul*/ var date = moment().format("YYYY-MM-DD HH:mm:ss"); var getTime = '' + rows[0].msg_time;
82 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
var time = getTime.substr(0,24); global.viewInbox2 = { 'msg_id': rows[0].msg_id, 'msg_source': rows[0].msg_source, 'msg_plain': e, 'msg_time': time, 'msg_target': rows[0].msg_target } viewInbox.push(viewInbox2); var viewAttachment = []; var query2 = "SELECT * FROM ?? WHERE ?? = ?"; var table2 = ["file_upload", "msg_id", req.params.msg_id]; query2 = mysql.format(query2,table2); console.log(query2);
connection.query(query2,function(err,rows){ if(err) { res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { if(rows[0]){ global.viewAttachment2 = { 'id_file': rows[0].id_file, 'path_file': rows[0].path_file, 'size_file': rows[0].size_file } viewAttachment.push(viewAttachment2); res.render('viewInbox', { 'viewInbox': viewInbox,
83 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
'viewAttachment': viewAttachment, 'login': req.session.pisang.user_email }); } res.render('viewInbox', { 'viewInbox': viewInbox, 'viewAttachment' : viewAttachment, 'login': req.session.pisang.user_email, 'date': date }); } }); } }); }).post("/viewInbox", require('../middleware/auth.js'), function(req, res, next){ str1vi str2vi str3vi str4vi
= = = =
req.session.pisang.user_email; viewInbox2.msg_source; req.body.msg_time; "TA2017";
var query = "INSERT INTO ??(??,??,??,??) VALUES (?,?,?,?)"; var table = ["message","msg_source","msg_target","msg_plain","m sg_time",str1vi,str2vi,req.body.msg_plain, str3vi]; query2 = mysql.format(query,table); connection.query(query2,function(err,rows,fields){ if(err) { res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { res.redirect("/inbox");
84 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
} }); }); router.get("/download/:id_file", require('../middleware/auth.js'), function(req,res){ var path = require('path'); var mime = require('mime'); var file = __dirname + '/..' + viewAttachment2.path_file;
res.download(file); }); module.exports = router;
Kode Sumber 4.8 Isi File inbox.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
var var var var var var var
express = require('express'); mysql = require('mysql'); router = express.Router(); connection = require('../database.js'); xxtea = require('../xxtea/xxtea.js'); sha1 = require('sha1'); moment = require('moment');
router.get("/", require('../middleware/auth.js'), function(req,res){ console.log("MASUK FUNGSI GET /OUTBOX"); var outboxList = []; var query = "SELECT * FROM ?? WHERE ?? = ? ORDER BY ?? DESC"; var table = ["message", "msg_source", req.session.pisang.user_email, "msg_time"]; query = mysql.format(query,table); connection.query(query,function(err,rows,fields){
85 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
if(err) { return res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { for (var i = 0; i < rows.length; i++) { // Create an object to save current row's data var login = req.session.pisang.user_email; var getTime = '' + rows[0].msg_time; var time = getTime.substr(0,24); var outbox = { 'msg_id': rows[i].msg_id, 'msg_source': rows[i].msg_source, 'msg_plain': rows[i].msg_plain, 'msg_time': time, 'msg_target': rows[i].msg_target, 'key_sender': rows[i].key_sender, 'login':login } // Add object into array outboxList.push(outbox); } } res.render('outbox', { 'outboxList': outboxList, 'login': req.session.pisang.user_email }); }); }); router.get('/viewOutbox/:msg_id/', require('../middleware/auth.js'), function(req, res, next) { var viewOutbox = []; var query = "SELECT * FROM ?? WHERE ?? = ?";
86 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
var table = ["message", "msg_id", req.params.msg_id]; query = mysql.format(query,table); connection.query(query,function(err,rows,fields){ if(err) { return res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { const db_message_plain = rows[0].msg_plain; /*Modul For Decrypt By Key*/ const key_from_sender_db = rows[0].key_sender; key = key_from_sender_db; /*End Of Modul*/ str1 = rows[0].msg_source; str2 = rows[0].msg_target; str3 = moment(rows[0].msg_time).format("YYYY-MM-DD HH:mm:ss"); str4 = "TA2017"; var stringConcat = str1.concat(str2, str3, str4); var sortAlphabets = function(stringConcat) { return stringConcat.split('').sort().join(''); }; var keySort = sortAlphabets(stringConcat); var e = xxtea.decryptToString(db_message_plain,keySort); var getTime = '' + rows[0].msg_time; var time = getTime.substr(0,24); global.viewOutbox2 = { 'msg_id': rows[0].msg_id,
87 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
'msg_source': rows[0].msg_source, 'msg_plain': e, 'msg_time': time, 'msg_target': rows[0].msg_target } viewOutbox.push(viewOutbox2); var viewAttachment = []; var query2 = "SELECT * FROM ?? WHERE ?? = ?"; var table2 = ["file_upload", "msg_id", req.params.msg_id]; query2 = mysql.format(query2,table2); connection.query(query2,function(err,rows){ if(err) { res.json({"Error" : true, "Message" : "Error executing MySQL query"}); } else { if(rows[0]) { global.viewAttachment2 = { 'id_file': rows[0].id_file, 'path_file': rows[0].path_file, 'size_file': rows[0].size_file } viewAttachment.push(viewAttachment2); res.render('viewOutbox', { 'viewOutbox': viewOutbox, 'viewAttachment': viewAttachment, 'login': req.session.pisang.user_email }); }
88 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
res.render('viewOutbox', { 'viewOutbox': viewOutbox, 'viewAttachment' : viewAttachment, 'login': req.session.pisang.user_email }); } }); } }); }); router.get("/download/:id_file", require('../middleware/auth.js'), function(req,res){ var path = require('path'); var mime = require('mime'); var file = __dirname + '/..' + viewAttachment2.path_file; res.download(file); }); module.exports = router;
Kode Sumber 4.9 Isi File outbox.js
Performa 1 Node CPU concurent 1 2 4 8 16 32 64 128 256 512 1024
totalReq 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
totalErrors 0 0 0 0 0 0 0 0 0 0 0
totalTimeSeconds 49.17 50.17 51.25 49.97 50.91 50.90 50.30 51.04 50.33 50.81 48.83
rps 20 20 20 20 20 20 20 20 20 20 20
meanLatency 19602.8 20258.1 20677 20246.8 20431.8 20374.3 20705.1 20411.9 20469.1 20528.4 19940.2
maxLatency minLatency percy 38988 622 0.270 39414 633 0.258 40503 646 0.262 39465 643 0.285 40027 623 0.282 40070 600 0.287 40183 636 0.269 40395 602 0.274 39936 619 0.289 40217 640 0.278 38686 596 0.274
error error null error null error null error null error null error null error null error null error null error null error null
Gambar 0.12 Tabel Hasil Uji Performa 1 Node CPU Performa 2 Node CPU concurent 1 2 4 8 16 32 64 128 256 512 1024
totalReq 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
totalErrors 0 0 0 0 0 0 0 0 0 0 0
totalTimeSeconds 30.99 30.68 31.47 31.26 33.66 42.17 44.51 30.99 32.16 31.84 46.45
rps 32 33 32 32 30 24 22 32 31 31 22
meanLatency 10928.4 9298.2 10227.8 10580.1 11397.2 20319.4 23027.7 9915.8 10764.8 11079.2 24484.7
maxLatency minLatency percy 21119 710 0.317 20397 118 0.457 20810 102 0.273 21915 83 0.647 23579 351 0.480 31626 4735 0.367 35472 8152 0.369 20566 116 0.458 21867 428 0.349 22188 372 0.595 37201 13245 0.583
Gambar 0.13 Tabel Hasil Uji Performa 2 Node CPU
89
error error null error null error null error null error null error null error null error null error null error null error null
90 Performa 3 Node CPU concurent 1 2 4 8 16 32 64 128 256 512 1024
totalReq 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
totalErrors 0 0 0 0 0 0 0 0 0 0 0
totalTimeSeconds 30.87 29.00 29.62 29.73 30.45 29.53 29.45 30.16 29.77 29.79 33.57
rps 32 34 34 34 33 34 34 33 34 34 30
meanLatency 10700.6 9086.3 9503.7 9415.4 10433 9390.7 9464.6 9515.9 9429 9299.2 12847.8
maxLatency minLatency percy 20258 851 0.698 18960 68 0.509 19617 122 0.470 19328 96 0.463 21878 109 0.478 20769 116 0.468 19839 104 0.467 19747 125 0.383 20109 145 0.449 19553 125 0.496 23552 957 0.442
error error null error null error null error null error null error null error null error null error null error null error null
Gambar 0.14 Tabel Hasil Uji Performa 3 Node CPU Performa 4 Node CPU concurent 1 2 4 8 16 32 64 128 256 512 1024
totalReq 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
totalErrors 0 0 0 0 0 0 0 0 0 0 0
totalTimeSeconds 30.80 29.73 32.83 32.97 32.80 45.47 37.19 36.22 39.09 30.46 30.71
rps 32 34 30 30 30 22 27 28 26 33 33
meanLatency 11155.7 9589.9 11396 11538.7 11711.9 23660.4 15938.7 14972.5 17712.5 9637.4 408
maxLatency minLatency percy 20994 1144 10,265 19729 137 8,308 22153 638 0.498 22574 597 0.468 23133 590 0.443 35690 11947 0.459 27355 1657 0.458 26226 3544 0.387 29292 3195 0.451 20098 140 0.391 20479 160 0.453
Gambar 0.15 Tabel Hasil Uji Performa 4 Node CPU
error error null error null error null error null error null error null error null error null error null error null error null
91 Performa 5 Node CPU concurent 1 2 4 8 16 32 64 128 256 512 1024
totalReq 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
totalErrors 0 0 0 0 0 0 0 0 0 0 0
totalTimeSeconds 33.02 32.70 30.53 30.77 30.44 32.38 30.51 32.67 33.21 30.22 33.97
rps 30 31 33 32 33 31 33 31 30 33 29
meanLatency 12084 11479.6 9691.4 9825.1 9764.7 11368.5 9626.6 11693.1 11847 9870.2 12260
maxLatency minLatency percy 23764 1275 0.487 22813 759 2,434 20594 154 4,775 20703 155 13,890 20878 167 0.362 23110 249 7,132 20222 147 0.381 22466 382 7,232 23059 617 8,495 20846 131 0.493 24394 732 0.494
error error null error null error null error null error null error null error null error null error null error null error null
Gambar 0.16 Tabel Hasil Uji Performa 5 Node CPU Performa 6 Node CPU concurent 1 2 4 8 16 32 64 128 256 512 1024
totalReq 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
totalErrors 0 0 0 0 0 0 0 0 0 0 0
totalTimeSeconds 33.19 31.01 35.29 43.15 31.15 35.10 31.19 31.10 30.11 32.06 30.85
rps 30 32 28 23 32 28 32 32 33 31 32
meanLatency 12628.6 10198.2 12721.3 20828.9 9899.5 13698.3 10036 9970.5 9750.1 9995.2 9868.1
maxLatency minLatency percy 23424 1410 8,690 21351 174 0.493 25056 877 5,300 32802 8529 0.514 20961 166 4,463 25410 1806 0.561 21334 145 0.480 21356 156 1,976 20362 168 4468 21883 165 12,171 21041 121 0.401
Gambar 0.17 Tabel Hasil Uji Performa 6 Node CPU
error error null error null error null error null error null error null error null error null error null error null error null
92 Performa 7 Node CPU concurent 1 2 4 8 16 32 64 128 256 512 1024
totalReq 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
totalErrors 0 0 0 0 0 0 0 0 0 0 0
totalTimeSeconds 36.82 31.33 40.52 37.35 40.90 35.98 40.90 37.61 39.74 37.09 37.37
rps 27 32 25 27 24 28 24 27 25 27 27
meanLatency 14115.5 9320.8 15700.2 11855.8 15274.1 11658.1 15143.6 12735.9 15351.4 12238.8 12753.5
maxLatency minLatency percy 27121 1920 16,168 22199 164 0.444 31124 958 0.468 27705 194 5,344 30799 927 0.470 27057 194 0.584 31225 308 5,191 27094 289 2,406 30122 697 0.388 27284 152 2,235 28186 252 0.480
error error null error null error null error null error null error null error null error null error null error null error null
Gambar 0.18 Tabel Hasil Uji Performa 7 Node CPU Performa 8 Node CPU concurent 1 2 4 8 16 32 64 128 256 512 1024
totalReq 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
totalErrors 0 0 0 0 0 0 0 0 0 0 0
totalTimeSeconds 42.54 39.28 38.93 42.42 43.73 42.54 45.01 40.03 38.76 49.56 38.71
rps 24 25 26 24 23 24 22 25 26 20 26
meanLatency 16525.8 12454.6 12467.1 15905.9 16530.1 16303.5 17008.9 13137.7 12137.1 20883.6 12116.3
maxLatency minLatency percy 32583 2337 2,201 28891 268 8,703 29047 129 3,606 32409 1273 4,669 33549 2438 0.430 32331 2246 1,713 34798 2249 1,644 29677 185 7,100 29143 238 0.393 39397 6464 10,758 28625 199 0.581
Gambar 0.19 Tabel Hasil Uji Performa 8 Node CPU
error error null error null error null error null error null error null error null error null error null error null error null
BIODATA PENULIS Kinasih Nur Azizah, lahir di Bekasi pada tanggal 31 Mei 1995. Penulis menempuh pendidikan mulai dari TK Islam Al-Azhar 24 Jatikramat (2001), SD Islam Al-Azhar 23 Jatikramat (2001-2007), SMP Islam AlAzhar 9 Kemang Pratama (2007-2010), SMA Islam Al-Azhar 4 Kemang Pratama (2010-2013), dan sekarang sedang menjalani pendidikan S1 Teknik Informatika di ITS. Penulis aktif dalam organisasi Himpunan Mahasiswa Teknik Computer (HMTC). Diantaranya adalah menjadi staff departemen kewirausahaan dan minat bakat HMTC ITS 2014-2015. Penulis juga aktif dalam kegiatan kepanitiaan Schematics. Diantaranya penulis pernah menjadi Badan Pengurus Harian (BPH) Schematics 2014 sie kestari dan BPH Schematics 2015 sekretaris. Penulis mengambil bidang minat Arsitektur dan Jaringan Komputer (AJK). Komunikasi dengan penulis dapat melalui email:
[email protected]
93