i
NASKAH PUBLIKASI
diajukan oleh
Ronald Arie Bowo Supardi
09.11.3165
kepada
JURUSAN TEKNIK INFORMATIKA
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
AMIKOM YOGYAKARTA
iii
Ronald Arie Bowo Supardi Ema Utami
Jurusan Teknik Informatika STMIK AMIKOM YOGYAKARTA
ABSTACT
Information is easy to come by at this time, including for the delivery of the message, it has started being a means to send a message so we can easily send and receive messages. All the convenience it will be very influential when data or the message we send is confidential and only certain people are allowed to know the message, especially if the data that will tell us it is a state secret it will be very harmful to national defense and security.
How that can be used to secure messages, including by making their own encryption and steganography. Encryption is the process used to create the message or plaintext into messages disguised meaning or ciphertext so that people could not understand the meaning of the message. As for the steganography is the process of hiding data in digital files so that people do not think that if the digital file no message. If both of these processes in combination then the message will be more secure. For that need to be made an application to store the message in the picture with the encryption process first.
This application is an application to send a picture but the picture was inserted messages that have been encrypted first. In making this application I use the Java programming language and uses encryption algorithms that created by myself.
Keywords: Steganography Application, Cryptography Application, Steganography and
1. PENDAHULUAN
Informasi saat ini sangat mudah didapat termasuk untuk pengiriman pesan,
sekarang sudah mulai banyak sarana untuk mengirimkan pesan sehingga kita bisa
dengan mudah mengirim dan menerima pesan. Di jaman yang serba cangih sepertini
alat untuk mengirim pesan sudah banyak termasuk medianya seperti facebook dan
twitter sehingga kita bisa mengirim pesan dengan cepat begitupun sebaliknya kita bisa
menerima pesan dengan cepat pula. Dengan mudahnya kita mengirim pesan sehingga
kita bisa mengirim berita dengan cepat walau kita mengirim pada orang yang tempatnya
jauh. Dari semua kemudahan itu tentu akan sangat berpengaruh ketika kita akan
mengirim pesan yang isinya hanya orang-orang tertentu saja yang boleh mengetahui
isinya. Salah satu yang harus benar-benar dijaga adalah pesan yang bersifat rahasia
negara karena jika pesan itu tersebar maka akan mengancam persatuan dan keamanan
negara.
Salah satu cara yang biasa di gunakan adalah dengan enkripsi dan steganografi.
Enkripsi adalah proses untuk menyamarkan makna dari pesan sehingga orang yang
tidak berkepentingan tidak bisa mengetahui makna dari pesan tersebut. Sedangkan
steganografi adalah cara atau proses untuk menyisipakan pesan dalam suatu file digital
sehingga pesan yang dikirim akan aman dan tidak mencurigakan. Proses enkripsi
membuat pesan yang tersamarkan maknanya namun masih berbentuk tulisan oleh
karena itu walau pesan itu telah di enkripsi tetap akan menimbulkan kecurigaan sehingga
dapat meicu orang yang ingin tau makna pesan untuk mencari makna sebenarnya dari
pesan tersebut. Untuk memperkuat keamanan pesan yaitu dengan menggabungkan
steganografi dan kriptografi sehingga orang tidak akan curiga jika dalam sebuah file
tersimpan pesan dan pesan tersebut sudah terenkripsi sehingga orang akan tetap
Berdasarkan latar belakang di atas penulis mencoba untuk membuat aplikasi
berbasis mobile yang bisa mengirimkan pesan menggunakan media gambar. Penelitian
ini juga sebagai tugas akhir untuk menyelesaikan studi pada program S1 Teknik
Informatika dengan judul “Perancangan Aplikasi Pengiriman Pesan Rahasia Menggunakan Steganografi Dan Kriptografi Dengan Teknik Substitusi Berbasis Mobile”.
2. LANDASAN TEORI
2.1 Pengertian Citra Digital
Citra digital merupakan sebuah larik (array) yang berisi nilai-nilai real maupun
komplek yang direpresentasikan dengan deretan bit tertentu1.
Suatu citra dapat didefinisikan sebagai fungsi f(x,y) berukuran M baris dan N kolom , dengan x dan y adalah koordinat spasial, dan amplitudo f di titik koordinat (x,y)
dinamakan intensitas atau tingkat keabuan dari citra pada titik tersebut2. Apabila nilai x, y,
dan nilai amplitudo f secara keseluruhan berhingga (finite) dan bernilai diskrit maka dapat
dikatakan bahwa citra tersebut adalah citra digital3.
2.2 Terminologi Steganografi
Steganography merupakan suatu cabang ilmu yang mempelajari tentang bagai
mana menyembuyikan suatu informasi “rahasia” di dalam suatu informasi lainnya4 .
Perbedaan steganograpy dengan cryptography terletak pada bagaimana proses
penyembunyian data dan hasil akhir dari proses tersebut5. Cryptography melakukan
proses pengacakan data aslinya sehingga menghasilkan data terenkripsi yang
benar-benar acak dan berbeda dengan aslinya, sedangkan steganography menyembunyikan
1
Darma Putra, Pengolahan Citra Digital, hal 19
2 Ibid 3
Ibid
4
Dony Ariyus, Kriptografi Keamanan Data dan Komunikasi, hal 149
5
dalam data lain yang akan ditumpanginya tanpa mengubah data yang ditumpanginya
tersebut sehingga data yang ditumpanginya sebelum dan sesudah proses
penyembunyian hampir sama6.
2.3 Terminologi Kriptografi
Kriptografi berasal dari bahasa Yunani yaitu crypto dan graphia. Crypto berarti
rahasia dan graphia berarti tulisan. Secara terminology kriptografi berarti ilmu dan seni
untuk menjaga keamanan pesan7.
2.4 Sejarah Android
Android adalah sebuah sistem operasi berbasis linux untuk perangkat mobile
yang mencakup sistem operasi, middleware dan aplikasi. Awalnya Google Inc. membeli
Android Inc. yang merupakan pendatang baru yang membuat piranti lunak untuk ponsel
atau smartphone8. Google Inc. membeli Android Inc. kemudian mengembangkan
android dan dibentuklah Open Handset Alliance konsorsium dari 34 perusahaan peranti
lunak, peranti keras dan telekomunikasi , termasuk Google, HTC, Motorola, Qualcomm,
T-Mobile, dan Nvidia9.
Pada saat perilisan perdana Android, 5 November 2007 , Android bersama Open
Handset Alliance menyatakan mendukung pengembangan open source pada perangkat
mobile10. Di lain pihak, Google merilis kode-kode Android di bawah lisensi Apache,
sebuah lisensi perangkat lunak dan open platform perangkat seluler11.
6 Ibid
7
Dony Ariyus, Pengantar Ilmu Kriptografi Teori Analisis dan Implementasi, hal 13
8
Nazruddin Safaat H, Android Pemrograman Aplikasi Mobile Smartphone dan Tablet PC Berbasis Android, hal 1 9 Ibid, hal 1-2 10 Ibid, hal 2 11 Ibid, hal 2
3. ANALISIS DAN PERCANGAN 3.1 Analisis Sistem
3.1.1.1 Kebutuhan Fungsional
Kebutuhan Functional adalah jenis kebutuhan yang berisi proses-proses apa
saja yang nantinya dilakukan oleh sistem12. Kebutuhan fungsional juga berisi
informasi-informasi apa saja yang harus ada dan dihasilkan oleh sistem13. Berikut adalah
kebutuhan fungsional yang dimiliki oleh aplikasi yang akan di buat:
1. Sistem harus dapat melakukan penyembunyian pesan pada gambar.
a. Pengguna bisa menyisipkan pesan ke dalam gambar
2. Sistem harus dapat membaca pesan yang ada pada gambar .
a. Pengguna bisa membaca data yang telah di sisipkan pesan sebelumnya.
3. Sistem harus bisa mengenkripsi pesan sebelum disisipkan.
a. Pesan yang dikirim oleh pengguna di enkripsi dulu sehingga lebih aman.
4. Sistem harus bisa membatasi pengguna lain sehingga tidak bisa mengakses.
a. Pengguna harus login sebelum menggunakan aplikasi.
b. Admin bisa menonaktifkan id pengguna jika diperlukan.
5. Sistem harus bisa mengirim gambar yang telah di sisipkan data.
a. Pengguna bisa mengirimkan data yang sudah di sisipkan pesan
menggunakan internet.
12 Hanif Al Fatta , Analisis dan Perancangan Sistem Informasi untuk Keunggulan Bersaing
Perusahaan dn Organisasi Modern, hal 63
13
Hanif Al Fatta , Analisis dan Perancangan Sistem Informasi untuk Keunggulan Bersaing Perusahaan dn Organisasi Modern, hal 63
3.1.1.2 Kebutuhan Non-Fungsional
Kebutuhan Non-Fungsional adalah tipe kebutuhan yang berisi properti perilaku
yang dimiliki oleh sistem14. Berikut adalah kebutuhan Non-Fungsional yang ada pada
aplikasi yang akan dibuat:
1. Operasional
a. Digunakan pasa sistem operasi Android dengan versi minimal 2.2
b. Kebutuhan memori 256MB RAM
c. Membutuhkan koneksi internet
2. Sekuriti
a. Aplikasi telah dilengkapi oleh password
3. Informasi
a. Digunakan untuk menginformasikan apabila password yang dimasukkan oleh
pengguna salah.
b. Digunakan jika ada pengguna mengirimkan data ke pengguna lain.
4. Kinerja
a. Untuk penggunaan gambar sebaiknya tidak terlalu besar agar lebih cepat dalam
mengirim dan memproses data.
3.2 Perancangan Sistem 3.2.1 Perancangan UML
3.2.1.1 Use case diagram
Berikut adalah gambaran interaksi antara aplikasi dan aktor yang ada pada
aplikasi ini:
14
Hanif Al Fatta , Analisis dan Perancangan Sistem Informasi untuk Keunggulan Bersaing Perusahaan dn Organisasi Modern, hal 63
Gambar 3.2-1 Gambar Rancangan Use Case Diagram
3.2.1.2 Class Diagram
Berikut ini adalah class diagram yang digunakan untuk menggambarkan struktur
4. IMPLEMENTASI DAN PEMBAHASAN 4.1 Implementasi
4.1.1 Ujicoba Sistem dan Program
4.1.1.1 Black box Testing
Disini penulis mencoba untuk melakukan testing yang berfokus pada persyaratan
fungsional perangkat lunak. Cara yang dilakukan oleh penulis adalah dengan
menjalankan aplikasi yang telah dibuat sehingga bisa terlihat kekurangan dari program
ini. Beberapa kategori yang akan di uji adalah sebagai berikut :
1. Fungsi –fungsi yang tidak benar atau hilang 2. Kesalahan kinerja
3. Kesalahan tampilan
4. Kesalahan dalam struktur data
Berikut adalah tabel Black Box Testing yang terdapat pada program ini yang
telah dibuat oleh penulis :
Tabel 4.1-1 Testing Input Normal
No Pengguna Fungsi Skenario Hasil Status
1 Biasa Login Memasukan ID dan Password
Masuk dalam aplikasi
Sukses
2 Biasa Buat pesan gambar
Pilih gambar, tulis pesan yang akan di sisipkan , masukkan no telepon tujuan , kemudian gambar di upload Gambar sukses terkirim Sukses 3 Biasa Notifikasi pesan datang
Ketika pesan datang makan akan muncul
Notifikasi muncul
notifikasi setelah program di jalankan 4 Biasa Lihat pesan
datang
Melihat semua pesan datang yang belum terbaca
Pindah ke form baca pesan
Sukses
5 Biasa Baca pesan Memilih gambar yang mengandung pesan, atau jika telah memilih pesan datang tinggal di tekan tombol baca
Pesan yang ada di gambar akan tampil
Sukses
6 Admin Login Memasukkan id dan
password admin
Masuk Aplikasi
Sukses
7 Admin Lihat List Pengguna
Setelah Login masuk ke List pengguna bisa melihat berdasarkan status atau menggunakan pencarian Tab di tekan akan muncul list berdasarkan status List pencarian tampil Sukses 8 Admin Tambah Pengguna Admin menambahkan pengguna dengan memasukan data pengguna Pengguna tambah Sukses
9 Admin Ubah data pengguna
Admin mengisi form dengan data baru
Database diperbaharui
Sukses
4.1.2 Pemeliharaan System
Tahap pemeliharaan system ini akan menentukan sistem akan berjalan lama
atau tidak. Seiring berjalannya waktu tentu kita tidak tahu apa yang akan terjadi pada
system yang ada sehingga untuk mengurangi kemungkinan buruk di masa mendatang.
Adapun tahapan-tahapan untuk memelihara program ini sehingga tetap berjalan
1. Backup data admin sehingga ketika ada sesuatu pada admin data bisa
dipertahankan.
2. Pengguna yang mengganti nomor telepon segera memberitahu admin
sehingga pengirim bisa mengirimkan pesan dengan tepat ke tujuan.
3. Jika user di nonaktifkan bisa menghubungi admin untuk mengaktifkan
pengguna.
4. Jangan sampai pengguna memberi tahu password yang dimiliki.
5. Pendataan pengguna secara berkala untuk menjaga keamanan aplikasi ini.
4.2 Pembahasan
4.2.1 Pembahasan Listing Program
4.2.1.1 Class Kriptografi
Pada class ini terdapat dua fungsi utama yaitu enkripsi dan deskripsi. Fungsi
enkripsi adalah untuk membuat pesan terenkripsi dan untuk fungsi deskripsi adalah untuk
mendekript pesan yang telah terenkripsi.
package com.ronald.stegano_kripto.kripto;
publicclass kriptografi {
// membuat tabel enkripsi String[][] tabelEnkripsi = {
{"A", "B", "C", "D", "E", "F", "G", "H", "I"},// 0 {"J", "K", "L", "M", "N", "O", "P", "Q", "R"},// 1 {"S", "T", "U", "V", "W", "X", "Y", "Z", "a"},// 2 {"b", "c", "d", "e", "f", "g", "h", "i", "j"},// 3 {"k", "l", "m", "n", "o", "p", "q", "r", "s"},// 4 {"t", "u", "v", "w", "x", "y", "z", "!", "@"},// 5 {"#", "$", "%", ":", "&", "*", "(", ")", "_"},// 6 {"+", "=", "-", "1", "2", "3", "4", "5", "6"},// 7 {"7", "8", "9", "0", ".", ",", "?", " ", "/"}};// 8 // 0 1 2 3 4 5 6 7 8
public String enkripsi(String pesan) {
String chiperText; int jumlahBarisPesan; String[] PesanTabelEnkrip;
String[] arrayKata = pesan.split("(?!^)"); int jumlahKarakter = arrayKata.length;
jumlahBarisPesan = (int) Math.ceil(pesan.length() / 8); jumlahBarisPesan = jumlahBarisPesan + 1;
String[][] prosesEnkrip1 = new String[8][jumlahBarisPesan]; String[][] prosesEnkrip2 = new String[8][];
String[][] prosesEnkrip3 = new String[jumlahBarisPesan * 2][8]; String[] prosesEnkrip4 = new String[jumlahBarisPesan * 2]; String[][] prosesEnkrip5 = new String[jumlahBarisPesan * 2][4]; String[][] prosesEnkrip6 = new String[jumlahBarisPesan * 2][4]; String[] prosesEnkrip7 = new String[jumlahBarisPesan * 2];
// membuat pesan kosong untuk di isi pesan enkripsi PesanTabelEnkrip = new String[jumlahBarisPesan * 8]; for (int i = 0; i < jumlahBarisPesan * 8; i++) {
PesanTabelEnkrip[i] = "78"; }
for (int p = 0; p < jumlahKarakter; p++) { for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (arrayKata[p].equals(tabelEnkripsi[i][j])) { PesanTabelEnkrip[p] = String.valueOf(j) + String.valueOf(i); i = 9; j = 9; } } } } int batas = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < jumlahBarisPesan; j++) { if (batas < PesanTabelEnkrip.length) {
prosesEnkrip1[i][j] = PesanTabelEnkrip[batas]; batas++; } else { i = 8; j = jumlahBarisPesan; } } } // berbeda dengan PHP for (int i = 0; i < 8; i++) {
prosesEnkrip2[i] = implode(prosesEnkrip1[i]).split("(?!^)"); }
// transpose
for (int i = 0; i < jumlahBarisPesan * 2; i++) { for (int j = 0; j < 8; j++) {
} }
// membuat matrik baru
for (int i = 0; i < jumlahBarisPesan * 2; i++) { prosesEnkrip4[i] = implode(prosesEnkrip3[i]); for (int j = 0; j < 4; j++) { prosesEnkrip5[i][j] = prosesEnkrip4[i].substring(j * 2,j * 2 + 2); } } // penambahan data
for (int i = 0; i < jumlahBarisPesan * 2; i++) { for (int j = 0; j < 4; j++) { prosesEnkrip6[i][j] = String.valueOf(Integer.parseInt(prosesEnkrip5[i][j]) + j); if (Integer.parseInt(prosesEnkrip6[i][j]) < 10) { prosesEnkrip6[i][j] = "0" + prosesEnkrip6[i][j]; } } }
for (int i = 0; i < jumlahBarisPesan * 2; i++) { prosesEnkrip7[i] = implode(prosesEnkrip6[i]); }
chiperText = implode(prosesEnkrip7); return chiperText;
}
public String dekripsi(String kata) { String plainText;
String[] arrayKata = kata.split("(?!^)");
String[] arrayKata2 = new String[arrayKata.length / 2]; int panjangKarakter = arrayKata2.length;
int jumlahBarisKata = (int) Math.ceil(kata.length() / 8); String[][] prosesDekrip1 = new String[panjangKarakter][4]; String[][] prosesDekrip2 = new String[panjangKarakter][8]; String[][] prosesDekrip3 = new String[8][jumlahBarisKata]; String[] prosesDekrip4 = new String[8];
String[][] prosesDekrip5 = new String[8][panjangKarakter]; String[] prosesDekrip6 = new String[panjangKarakter]; String[] prosesDekrip7 = new String[panjangKarakter];
int index = 0;
for (int i = 0; i < arrayKata.length; i += 2) {
arrayKata2[index] = arrayKata[i] + arrayKata[i + 1]; index++;
}
//mengurangi nilai data index = 0;
for (int i = 0; i < jumlahBarisKata; i++) { for (int j = 0; j < 4; j++) { prosesDekrip1[i][j] = String.valueOf(Integer.parseInt(arrayKata2[index]) - j); if (Integer.parseInt(prosesDekrip1[i][j]) < 10) { prosesDekrip1[i][j] = "0" + prosesDekrip1[i][j]; } index++; } }
//membuat array per karakter
for (int i = 0; i < jumlahBarisKata; i++) {
prosesDekrip2[i] = implode(prosesDekrip1[i]).split("(?!^)"); }
//membalik
for (int i = 0; i < 8; i++) {
for (int j = 0; j < jumlahBarisKata; j++) { prosesDekrip3[i][j] = prosesDekrip2[j][i]; }
}
//mebuat matrik baru for (int i = 0; i < 8; i++) {
prosesDekrip4[i] = implode(prosesDekrip3[i]); for (int j = 0; j < jumlahBarisKata/2; j++) {
prosesDekrip5[i][j] = prosesDekrip4[i].substring(j*2, j*2+2); }
}
index = 0;
while (index < panjangKarakter) { for (int j = 0; j < 8; j++) {
for (int i = 0; i < jumlahBarisKata/2; i++) { prosesDekrip6[index] = prosesDekrip5[j][i]; index++; } } } //konfersi ke karakter
for (int i = 0; i < panjangKarakter; i++) { prosesDekrip7[i] = tabelEnkripsi[Integer.parseInt(prosesDekrip6[i].substring(1, 2))][Integer.parseInt(prosesDekrip6[i].substring(0, 1))]; } plainText = implode(prosesDekrip7); return plainText;
}
public String implode(String[] pesan) { String imploded = "";
for (int i = 0; i < pesan.length; i++) { imploded += pesan[i]; } return imploded; } } 5. PENUTUP 5.1 Kesimpulan
Setelah tahapan-tahapan penelitian dilakukan kesimpulan yang dapat diambil
dalam penelitian kali ini adalah :
1. Pengamanan pesan dapat menggunakan kriptografi yang membuat pesan
tersamarkan pesannya namun untuk memaksimalkan pengamanan pesan
dapat menambahkan steganografi yaitu dengan menyisipkan pesan ke
dalam gambar.
2. Proses penyembunyian pesan diawali dengan prosess kripto grafi yang
menghasilkan angka yang panjangnya bisa lebih dari dua kali panjang pesan
setelah itu setiap angka di sisipkan ke dalam gambar dengan mengganti nilai
value angka terakhir dari warna gambar.
3. Untuk memberi keamanan pada aplikasi android maka digunakan sistem
login yang prosesnya ada pada server , pengguna bisa mengirimkan pesan
mengunakan aplikasi ini ke tujuan dengan menggunakan internet dan server
sebagai penampung, tersedia service untuk mengetahui pesan datang dan
setiap muncul notifikasi pengguna akan di arahkan untuk login kembali
4. Server berguna untuk menambah, menonaktif dan mengaktifkan pengguna,
dan pesan yang dikirim akan disimpan di server untuk di download oleh
pengguna yang dituju.
5.2 Saran
Pada penulisan Skripsi ini tentu masih banyak kekurangan , dan mungkin dapat
disempurnakan oleh penelitian-penelitian berikutnya. Untuk lebih menyempurnakan
program ini penulis memberikan beberapa saran diantaranya :
1. Pengunaan service pada aplikasi ini akan membuat aplikasi ini berjalan terus
sehingga akan memakan daya dan bandwidth walau pun oleh penulis sudah
dibuat seminimal mungkin namun dapat di perbaiki oleh pengembang
berikutnya dengan menggunakan push notification sehingga dari server yang
akan memberikan pesan ke ponsel.
2. Penulis membatasi pada file Bitmap (.bmp) sehingga untuk pengembangan
berikutnya bisa ditambahkan tipe file lain sehingga akan lebih fleksibel.
3. Server ketika di kirim pesan terus menerus akan menyebabkan penumpukan
data sehingga untuk pengembangannya server bisa membuat penghapusan
data secara otomatis.
4. Data nomor telepon yang ada pada smart phone bisa digunakan untuk
validasi pengguna sehingga pengguna tidak bisa login dengan user berbeda
6. DAFTAR PUSTAKA