15 0 1 MB
LAPORAN PRAKTIKUM FINAL KEAMANAN JARINGAN KOMPUTER IMAGE STEGANOGRAPHY DENGAN METODE LSB (LEAST SIGNIFICANT BIT)
Disusun oleh : Nama
: Wahyu Ramadhan
NIM
: 1457301017
Kelas
: 4.2 / Teknik Informatika
Pembimbing
: Muhammad Rizka, S.S.T, M.Kom
POLITEKNIK NEGERI LHOKSEUMAWE JURUSAN TEKNOLOGI INFORMASI DAN KOMPUTER PRODI TEKNIK INFORMATIKA 2017
LEMBAR PENGESAHAN
No Praktikum
: 01 / KJK/ 4.2/ TI/ 2017
Judul Praktikum
: Image Steganography dengan Metode LSB
Nama Praktikan
: Wahyu Ramadhan
NIM
: 1457301017
Kelas
: 4.2
Jurusan
: Teknologi Informasi dan Komputer
Prodi
: Teknik Informatika
Tanggal Praktikum
: 05 Desember 2017
Tanggal Penyerahan
: 27 Desember 2017
Nilai
:
Keterangan
:
Buket Rata, 27 Desember 2017 Pembimbing
Muhammad Rizka, S.S.T, M.Kom NIP. 19881009 201504 1 001
ii
DAFTAR ISI LEMBAR JUDUL LEMBAR PENGESAHAN .................................................................................... ii DAFTAR ISI .......................................................................................................... iii 1.1
TUJUAN PRAKTIKUM ............................................................................. 1
1.2
DASAR TEORI ........................................................................................... 1
1.2.1
Pengertian Kriptografi .......................................................................... 1
1.2.2
Tujuan Kriptografi ................................................................................ 1
1.2.3
Steganografi .......................................................................................... 2
1.2.4
Least Significant Bit (LSB) .................................................................. 4
1.3
ALAT DAN BAHAN PRAKTIKUM ......................................................... 5
1.4
LANGKAH PRAKTIKUM ......................................................................... 5
1.5
HASIL PRAKTIKUM ............................................................................... 19
1.6
ANALISA PEMBAHASAN...................................................................... 22
1.7
ANALISA PROGRAM ............................................................................. 24
1.8
KESIMPULAN .......................................................................................... 27
DAFTAR PUSTAKA ........................................................................................... 28
iii
LAPORAN PRAKTIKUM FINAL IMAGE STEGANOGRAPHY DENGAN METODE LSB (LEAST SIGNIFICANT BIT)
1.1
TUJUAN PRAKTIKUM
1. Mahasiswa memahami pengertian algoritma Steganography dan LSB. 2. Mahasiswa mampu membuat program algoritma Steganography dan LSB. 3. Mahasiswa mampu menganalisa program Steganography dan LSB.
1.2
DASAR TEORI
1.2.1
Pengertian Kriptografi Kriptografi merupakan ilmu sekaligus seni untuk menjaga keamanan pesan
(Cryptography is the art and science of keeping messages secure) selain itu ada pengertian tentang kriptografi yaitu kriptografi merupakan ilmu yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi seperti kerahasiaan, integritas data, serta otentikasi. Kata “seni” di dalam definisi di atas maksudnya adalah mempunyai cara yang unik untuk merahasiakan pesan. Kata “graphy” di dalam “cryptography” itu sendiri sudah menyiratkan sebuah seni (Munir, 2006).
1.2.2
Tujuan Kriptografi Menurut (Munir, 2006) Ada empat tujuan mendasar dari ilmu kriptografi
yang juga merupakan aspek keamanan informasi, yaitu: 1. Convidentiality (kerahasiaan), yaitu memberikan kerahasiaan pesan dan menyimpan data dengan menyembunyikan data dengan menyembunyikan informasi lewat teknik-teknik enkripsi. 2. Message intergrity (integritas data), yaitu memberikan jaminan bahwa dari setiap bagian tidak mengalami perubahan dari saat data dibuat/ dikirim sampai dengan saat data tersebut di buka.
1
3. Non-repudiation
(nirpenyangkalan),
yang
memberikan
cara
untuk
membuktikan bahwa suatu dokumen dating dari setiap seseorang apabila ia mencoba menyangkal memiliki dokumen tersebut.
4. Auntentication (autentikasi), yang memberikan dua layanan. Yang pertama mengidentifikasi keaslian dari suatu pesan dan memberikan jaminan keotentikannya. Kedua, untuk meguji identitas seseorang apabila ia akan memasuki sebuah sistem.
2
1.2.3
Steganografi Steganografi adalah suatu teknik untuk menyembunyikan informasi yang
bersifat pribadi dengan sesuatu yang hasilnya akan tampak seperti informasi normal lainnya. Media yang digunakan umumnya merupakan suatu media yang berbeda dengan media pembawa informasi rahasia, dimana disinilah fungsi dari teknik steganografi yaitu sebagai teknik penyamaran menggunakan media lain yang berbeda sehingga informasi rahasia dalam media awal tidak terlihat secara jelas. Steganografi biasanya sering disalahartikan dengan kriptografi karenanya keduanya sama-sama bertujuan untuk melindungi informasi yang berharga. Perbedaan yang mendasar antara keduanya yaitu steganografi berhubungan dengan informasi tersembunyi sehingga tampak seperti tidak ada informasi tersembunyi sama sekali. Jika seseorang mengamati obyek yang menyimpan informasi tersembunyi tersebut, maka dia tidak akan menyangka bahwa terdapat pesan rahasia dalam obyek tersebut, dan karenanya dia tidak akan berusaha memecahkan informasi dari obyek tersebut. Kata steganografi berasal dari bahasa Yunani, yaitu dari kata Stegos (covered/tersembunyi) dan Graptos (writing/tulisan). Steganografi di dunia modern biasanya mengacu pada informasi atau suatu arsip yang telah disembunyikan ke dalam suatu arsip citra digital, audio, atau video. Teknik Steganografi ini telah banyak digunakan dalam strategi peperangan dan pengiriman sandi rahasia sejak jaman dahulu kala. Dalam perang Dunia II, teknik steganografi umum digunakan oleh tentara Jerman dalam mengirimkan pesan rahasia dari atau menuju Jerman, (Morkel, dkk, 2005).
3
Semakin pentingnya nilai dari sebuah informasi, maka semakin berkembang pula metode-metode yang dapat digunakan untuk melakukan penyisipan informasi yang didukung pula dengan semakin berkembangnya media elektronik. Berbagai macam media elektronik kini telah dapat digunakan untuk melakukan berbagai fungsi steganografi dengan berbagai macam tujuan dan fungsi yang diharapkan oleh penggunanya. Sebagai fungsi yang umum, steganografi digunakan untuk memberikan cap khusus dalam sebuah karya yang dibuat dalam format media elektronik sebagai identifikasi, (Johnson, dkk, 1998).
Gambar 1.1 Fokus disiplin ilmu penyisipan informasi (Chedad et al, 2010) Dua teknik lain yang sangat erat kaitannya dengan steganografi adalah watermarking dan fingerprinting. Kedua teknik ini berfokus pada perlindungan hak cipta dengan menyisipkan informasi hak cipta pada media lain dan memberikan ijin kepada pihak ketiga untuk mengetahui keberadaan informasi yang disisipkan tersebut. Hal ini berbeda dengan steganografi yang menjaga informasi yang disisipkan pada media lain agar tidak terlihat oleh pihak ketiga. Jika ada pihak ketiga yang ingin menghack isi informasi tersembunyi tersebut, maka tujuan mereka adalah berbeda. Jika pada watermarking dan fingerprinting, maka mereka berusaha menghilangkan informasi yang disisipkan, sedangkan jika pada steganografi, maka mereka berusaha sebatas mendeteksi keberadaan informasi tersembunyi, (Morkel , 2005).
4
1.2.4
Least Significant Bit (LSB) Metode LSB ini digunakan dalam teknik steganographydikarenakan
tergolong mudah dalam penerapannya. Dasar dari metode ini adalah bilangan berbasiskan biner atau dengan kata lain angka 0 dan angka 1. Karena data digital
merupakan
susunan
antara
angka
0
dan
satu
maka proses
penerapannya menjadi mudah. Lebih lanjut lagi, metode ini berhubungan erat dengan ukuran 1 bit dan ukuran 1 byte. 1bytedata dapat dikatakan terdiri dari 8 bit data. Dimana bit pada posisi paling kanan lah yang disebut dengan bit pada posisi LSB (Least Significant Bit).Teknik steganography dengan menggunakan metode LSB adalah teknik dimana kita mengganti bit pada posisi LSB pada data dengan bit yang dimiliki oleh data yang akan disembunyikan. Karena bit yang diganti hanyalah bit yang paling akhir, maka meskipun data telah berubah, kita tetap tidak akan bisa mengenalinya, karena media stego yang dihasilkan hampir sama persis dengan media sebelum disisipi oleh data yang ingin disembunyikan. Untuk
ilustrasi
proses
penyisipan
pesan
dengan
menggunakan
metode ini adalah sebagai berikut:
Gambar 1.2 Ilustrasi Pesan
dari data diatas akan disisipkan suatu pesan rahasia yang berupa data biner dengan nilai bit (01001000) maka data atau media penampung akan menjadi Dari:
Gambar 1.3 Pesan yang telah disisipi penjelasan
diatas
dapat
disimpulkan
bahwa
metode
LSB
hanya
mengganti satu nilai dari posisi LSB pada setiap byte data pada media penampung data yang akan disembunyikan dengan satu bit data dari text atau data yang akan disembunyikan. Karena bit yang diganti adalah bit
5
dengan nilai paling kanan maka media yang dihasilkan hamper sama persis dengan media aslinya 1.3
ALAT DAN BAHAN PRAKTIKUM Alat dan bahan yang digunakan praktikum ini adalah sebagai berikut :
Alat
: Laptop Acer (Netbook) Intel Celeron 2Gb Memory
Bahan
: Software Netbeans IDE 8.1 Java JDK
1.4
LANGKAH PRAKTIKUM Langkah-langkah praktikum :
1. Buka aplikasi Netbeans IDE 8.1 yang terdapat di dekstop
Gambar 1.4 Desktop
2. Pilih file, lalu klik new project atau bisa menekan langsung Ctrl + Shift + N di keyboard
6
Gambar 1.5 New Project 3. Pilih Java, Java Application, klik Next
Gambar 1.6 Java Application 4. Ubah nama project menjadi ImageSteganography, pilih lokasi penyimpanan, klik Finish
7
Gambar 1.7 New Java Application 5. Didalam project ImageSteganography, terdapat source package yang mana didalam adalah sumber kode utama dari project ini. Lalu didalam source terdapat tiga folder java source package yaitu
Imagesteganography
Imagesteganography.util
Imagesteganography.view
Gambar 1.8 Isi Source project
8
6. Di dalam imagesteganography (java source package), terdapat class yang bernama
ImageSteganography.java
yang
merupakan
import
dari
MainApp.java.
Gambar 1.9 ImageSteganography.java 7. Di dalam imagesteganography.util, terdapat tiga class java yaitu Encode, Decode, dan StegoImage yang berkestensi .java. Ketiganya adalah komponen penting dalam project ini karena disanalah semua sumber kode utama terprogram. Adapaun pada Encode terdapat list program yang berfungsi untuk proses awal pada penyandian gambar dan pesan yang disisi pada gambar yang di input. Berikut listing program Encode.java.
Encode.java
package imagesteganography.util; import java.awt.image.BufferedImage; import java.io.File; public class Encode extends StegoImage { public boolean encode(String fileIn, String fileOut, String message) { BufferedImage image_orig = getImage(fileIn); BufferedImage image = user_space(image_orig);
9
image = add_text(image, message); return (setImage(image, new File(fileOut), "png"));
Keterangan : Encode ini adalah extends dari StegoImage.java artinya source code Encode.java terdapat juga pada StegoImage.java (perpanjangan program dari
Encode.java).
jadi
Encode
memanggil
fungsi
dari
class
lain
(StegoImage.java) yang terdapat proses encode juga didalam class tersebut.
Adapaun pada Decode terdapat list program yang berfungsi untuk mengembalikan pesan yang telah disisipi di gambar dan diambil untuk diketahui isi pesan tersebut. Berikut listing program Encode.java.
Decode.java
package imagesteganography.util; import java.awt.image.BufferedImage; import javax.swing.JOptionPane; public class Decode extends StegoImage { public String decode(String name) { byte[] decode; try { BufferedImage image = user_space(getImage(name)); decode = decode_text(get_byte_data(image)); return (new String(decode)); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Tidak terdapat pesan rahasia pada gambar tersebut!", "Error", JOptionPane.ERROR_MESSAGE); return ""; } } }
Keterangan : Decode ini adalah extends dari StegoImage.java artinya source code Decode.java terdapat juga pada StegoImage.java (perpanjangan program dari
Encode.java).
jadi
Decode
memanggil
fungsi
dari
class
lain
(StegoImage.java) yang terdapat proses encode juga didalam class tersebut. 10
Kemudian, pada StegoImage.java adalah source yang paling utama dimana proses penyandian, penyisipan, proses encoding decoding pesan dilakukan di class ini. Terdapat juga fungsi-fungsi extends dari Encode.java dan Decode.java. Selain itu juga terdapat proses dari metode Least Significant Bit.
StegoImage.java
package imagesteganography.util; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JOptionPane; public class StegoImage { public BufferedImage getImage(String f) { BufferedImage image = null; File file = new File(f); try { image = ImageIO.read(file); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Gambar
tidak
dapat
di
baca!"
+
ex,
"Error", JOptionPane.ERROR_MESSAGE); } return image; } public
boolean
setImage(BufferedImage
image,
File
file,
String ext) { try { file.delete(); ImageIO.write(image, ext, file); return true; } catch (IOException e) { JOptionPane.showMessageDialog(null,
11
"File
tidak
dapat
di
simpan!",
"Error",
JOptionPane.ERROR_MESSAGE); return false; } } public BufferedImage add_text(BufferedImage image, String text) { byte img[] = get_byte_data(image); byte msg[] = text.getBytes(); byte len[] = bit_conversion(msg.length); try { encode_text(img, len, 0); encode_text(img, msg, 32); } catch (Exception e) { JOptionPane.showMessageDialog(null, "File
tidak
dapat
disisipi
pesan!",
"Error", JOptionPane.ERROR_MESSAGE); } return image; } public BufferedImage user_space(BufferedImage image) { BufferedImage
new_img
=
BufferedImage(image.getWidth(),
new
image.getHeight(),
BufferedImage.TYPE_3BYTE_BGR); Graphics2D graphics = new_img.createGraphics(); graphics.drawRenderedImage(image, null); graphics.dispose(); return new_img; } public byte[] get_byte_data(BufferedImage image) { WritableRaster raster = image.getRaster(); DataBufferByte
buffer
=
(DataBufferByte)
raster.getDataBuffer(); return buffer.getData(); } public byte[] bit_conversion(int i) { byte byte3 = (byte) ((i & 0xFF000000) >>> 24); byte byte2 = (byte) ((i & 0x00FF0000) >>> 16); byte byte1 = (byte) ((i & 0x0000FF00) >>> 8);
12
byte byte0 = (byte) ((i & 0x000000FF)); return (new byte[]{byte3, byte2, byte1, byte0}); } public byte[] encode_text(byte[] image, byte[] addition, int offset) { if (addition.length + offset > image.length) { throw
new
IllegalArgumentException("File
tidak
cukup di sisipi pesan!"); } for (int i = 0; i < addition.length; ++i) { int add = addition[i]; for (int bit = 7; bit >= 0; --bit, ++offset) { int b = (add >>> bit) & 1; image[offset] = (byte) ((image[offset] & 0xFE) | b); } } return image; } public byte[] decode_text(byte[] image) { int length = 0; int offset = 32; for (int i = 0; i < 32; ++i) { length = (length > 24); byte byte2 = (byte) ((i & 0x00FF0000) >>> 16); byte byte1 = (byte) ((i & 0x0000FF00) >>> 8); byte byte0 = (byte) ((i & 0x000000FF)); return (new byte[]{byte3, byte2, byte1, byte0}); }
Program di atas berfungsi untuk mengkoversikan byte ke bit. Terdapat beberapa pilihan konversi yaitu ada 24 bit, 16 bit, 8 bit
25
f. Add Text public BufferedImage add_text(BufferedImage image, String text) { byte img[] = get_byte_data(image); byte msg[] = text.getBytes(); byte len[] = bit_conversion(msg.length); try { encode_text(img, len, 0); encode_text(img, msg, 32); } catch (Exception e) { JOptionPane.showMessageDialog(null, "File tidak dapat disisipi pesan!", "Error", JOptionPane.ERROR_MESSAGE); } return image; }
Program diatas berfungsi untuk menambahkan teks atau pesan rahasia yang disisipi
ke
dalam
gambar.
Terdapat
perintah
byte
img[]
=
get_byte_data(image) untuk mengambil byte (data raster/biner) dari gambar. Kemudian terdapat perintah byte msg[]=text.getBytes() untuk mengambil byte dari pesan/teks yang ingin sisipi yang diubah menjadi nilai
biner
nantinya
dengan
perintah
byte
len[]=
bit_conversion(msg.length). Kemudian teks tersebut di encode menggunakan
encode_text(img,len,0)
perintah
dan
encode_text(img,msg,32)
g. Encode Text public byte[] encode_text(byte[] image, byte[] addition, int offset) { if (addition.length + offset > image.length) { throw new IllegalArgumentException("File tidak cukup di sisipi pesan!"); } for (int i = 0; i < addition.length; ++i) { int add = addition[i]; for (int bit = 7; bit >= 0; --bit, ++offset) { int b = (add >>> bit) & 1; image[offset] = (byte) ((image[offset] & 0xFE) | b); } } return image; }
Perintah diatas merupakan perintah utama untuk melakukan proses encoding dengan
LSB.
Terdapat
encode_text(byte[]
perintah
image,
byte[]
public
byte[]
addition,
int
26
offset) yang berfungsi melakukan encode teks terhadap byte gambar, dan penambahan bit baru di gambar dari bit teks. Lalu proses penyisipan biner (byte) gambar hingga nantinya berada di sebelah kanan pada bit ke 8 menggunakan perintah
for
(int
bit=7;
bit>=0;
--bit,
++offset).
h. Decoder Text public byte[] decode_text(byte[] image) { int length = 0; int offset = 32; for (int i = 0; i < 32; ++i) { length = (length