Penyembunyian Pesan Rahasia Dalam Gambar Dengan Metoda JPEG-JSTEG.

(1)

i Universitas Kristen Maranatha Penyembunyian Pesan Rahasia Dalam Gambar dengan Metoda

JPEG - JSTEG

Hendry Hermawan / 0622097

Email : e3n_17@yahoo.com

Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha Jalan Prof. drg. Suria Sumantri, MPH 65, Bandung 40164, Indonesia

ABSTRAK

Di era modern ini, pendistribusian media digital (teks, citra, suara, video, dll) melalui internet banyak dilakukan. Pengamanan dalam pendistribusian media digital perlu dilakukan apabila media digital yang akan didistribusikan bersifat rahasia. Steganografi adalah salah satu teknik penyembunyian pesan, yang dapat berupa teks, citra, suara, dll, dengan cara menyisipkan pesan tersebut pada media digital lain

Discrete Cosine Transform (DCT) banyak digunakan pada teknik steganografi. Pada tugas akhir ini diimplementasikan steganografi dengan metoda Jpeg- Jsteg pada suatu citra sebagai media host dan teks sebagai pesan yang akan disembunyikan. Proses DCT dilakukan pada citra yang digunakan sebagai media host dan kemudian dikuantisasi. Pesan rahasia akan disisipkan pada koefisien DCT terkuantisasi. Run Length Encoding (RLE) dilakukan untuk proses kompresi sehingga akhirnya dihasilkan citra-stego.

Dari hasil ujicoba, didapat nilai PSNR dan MOS untuk tiap citra. Citra “baboon” yang telah disisipi pesan memiliki nilai PSNR ≥ 30,7 dB dan nilai MOS ≥ 4,6. Citra “lena” yang telah disisipi pesan memiliki nilai PSNR ≥ 33,81 dB dan nilai MOS ≥ 3,4. Citra “water lilies” yang telah disisipi pesan memiliki nilai PSNR ≥ 30,08 dB dan nilai MOS ≥ 4.

Kata Kunci : Steganografi, Jpeg-Jsteg, Discrete Cosine Transform, dan Run Length Encoding.


(2)

ii Universitas Kristen Maranatha Hiding Secret Message in an Image with JPEG – JSTEG Method

Hendry Hermawan / 0622097

Email : e3n_17@yahoo.com

Electrical Engineering, Engineering Faculty, Maranatha Christian University Prof. drg. Suria Sumantri, MPH 65 Street, Bandung 40164, Indonesia

ABSTRACT

In this modern day, the distribution of digital media (texts, images, sounds, videos, etc) throughout the internet is commonly used. The security in digital media distribution has to taken if the digital media which will be distributed is a confidential file. Steganography is one of the techniques for hiding messages (texts, images, sounds, etc) by embeding it to another digital media.

Discrete Cosine Transform (DCT) is often used on stenography techniques. In this final project, steganography is implemented with a Jpeg-Jsteg method on an image as the host media and texts as the secret message. The DCT process is applied to the host image and then quantized. The secret message will be embedded into the quantized DCT coefficient. Run Length Encoding (RLE) is used in data compression process to produce a stego-image.

From the experiments, we obtain the PSNR and MOS value of each image. The “baboon” image that has been embedded with the secret message has a PSNR value of ≥ 30,7 dB and a MOS value of ≥ 4,6. The “lena” image that has been embedded with the secret message has a PSNR value of ≥ 33,81 dB and a MOS value of ≥ 3,4. The “water lilies” image that has been embedded with the secret message has a PSNR value of ≥ 30,08 and a MOS value of ≥ 4.

Keywords : Steganography, Jpeg-Jsteg, Discrete Cosine Transform, and Run Length Encoding


(3)

v Universitas Kristen Maranatha

DAFTAR ISI

Halaman

ABSTRAK ... i

ABSTRACT ... ii

KATA PENGANTAR ... iii

DAFTAR ISI ... v

DAFTAR TABEL ... vii

DAFTAR GAMBAR ... viii

BAB I PENDAHULUAN 1.1 Latar Belakang ... 1

1.2 Perumusan Masalah ... 2

1.3 Tujuan Tugas Akhir ... 2

1.4 Pembatasan Masalah ... 2

1.5 Sistematika Penulisan ... 2

BAB II LANDASAN TEORI 2.1 Citra Digital ... 4

2.1.1 Pembentukan Citra Digital ... 4

2.2 Steganografi ... 5

2.2.1 Sejarah Steganografi ... 7

2.2.2 Kriteria Stegnografi ... 8

2.3 Jpeg-Jsteg... 9

2.4 Discrete Cosine Transform (DCT) ... 10

2.4.1 Discrete Cosine Transform Dimensi Satu (1-D DCT) 10 2.4.2 Discrete Cosine Transform Dimensi Dua (2-D DCT) 11 2.5 Pengurutan Zig-Zag... 13


(4)

vi Universitas Kristen Maranatha

2.7 Run Length Encoding (MOS) ... 14

2.8 Warna dan Ruang Warna ... 15

2.8.1 RGB (Red Blue Green) ... 15

2.8.2 YCbCr ... 16

2.9 Peak Signal to Noise Ratio (PSNR) dan Mean Square Error (MSE) ... 18

2.10 Mean Opinion Score ... 18

BAB III PERANCANGAN DAN REALISASI PERANGKAT LUNAK 3.1 Gambaran Umum Steganografi ... 20

1.2 Proses Penyisipan Pesan Rahasia ... 21

3.2.1 Penjelasan Tahapan Proses Penyisipan Pesan Rahasia 25 3.3 Proses Ekstraksi Pesan Rahasia ... 28

BAB IV PEMBAHASAN DAN HASIL 4.1 Tampilan Program dan Fungsi Tombol... 31

4.2 Jenis dan Ukuran Citra Host ... 33

4.3 Pesan Rahasia yang Disisipkan ... 34

4.4 Hasil Pengujian dan Analisis Percobaan I, II, dan III ... 34

4.5 Hasil Pengujian dan Analisis Percobaan IV ... 39

4.6 Hasil Pengujian dan Analisis Percobaan Citra Host dengan Format File Jpeg ... 40

BAB V KESIMPULAN DAN SARAN 5.1 Kesimpulan ... 42

5.2 Saran ... 42

DAFTAR PUSTAKA ... 44 LAMPIRAN A CITRA ... A-1 LAMPIRAN B PENILAIAN SUBJEKTIF ... B-1 LAMPIRAN C PERANGKAT LUNAK ... C-1


(5)

vii Universitas Kristen Maranatha DAFTAR TABEL

Halaman

Tabel 2.1 Kategori penilaian Mean Opinion Score ... 19

Tabel 3.1 Tabel kuantisasi standar luminance untuk JPEG ... 21

Tabel 3.2 Tabel kuantisasi standar chrominance untuk JPEG ... 22

Tabel 4.1 Citra yang akan digunakan untuk ujicoba ... 33

Tabel 4.2 Hasil pengujian pada citra “baboon” ... 34

Tabel 4.3 Hasil pengujian pada citra “lena” ... 35

Tabel 4.4 Hasil pengujian pada citra “water lilies” ... 35

Tabel 4.5 Hasil pengujian pada citra berwarna polos ... 39

Tabel 4.6 Hasil pengujian pada citra “baboon.jpg” ... 40


(6)

viii Universitas Kristen Maranatha DAFTAR GAMBAR

Halaman

Gambar 2.1 Citra digital ... 5

Gambar 2.2 Contoh Jpeg-Jsteg (a) blok 8x8 pixel (b) koefisien DCT (c) koefisien DCT terkuantisasi ... 10

Gambar 2.3 Delapan basis vektor untuk DCT dengan n = 8... 11

Gambar 2.4 Pengurutan secara zig-zag ... 13

Gambar 2.5 Tabel kuantisasi standar untuk JPEG (a) luminance (b) chrominance ... 14

Gambar 2.6 Ruang warna RGB ... 16

Gambar 2.7 Citra “winter” (a) dalam RGB (b) komponen Y (c) komponen Cb (d) komponen Cr ... 17

Gambar 3.1 Proses penyisipan pesan rahasia ... 21

Gambar 3.2 Diagram alir perhitungan maksimum pesan rahasia yang dapat disisipkan... 23

Gambar 3.3 Diagram alir penyisipan pesan rahasia ... 24

Gambar 3.4 Nilai Y suatu citra ... 25

Gambar 3.5 Hasil DCT nilai Y ... 25

Gambar 3.6 Hasil kuantisasi koefisien DCT ... 26

Gambar 3.7 Hasil pembulatan nilai DCT koefisien terkuantisasi ... 26

Gambar 3.8 Pengurutan secara zig-zag ... 27

Gambar 3.9 Pesan yang akan disisipkan ... 27

Gambar 3.10 Pesan yang telah dienkripsi ... 27

Gambar 3.11 Nilai koefisien DCT terkuantisasi yang telah disisipkan pesan ... 28

Gambar 3.12 Hasil dari proses RLE ... 28

Gambar 3.13 Proses ekstraksi pesan rahasia ... 28


(7)

ix Universitas Kristen Maranatha

Gambar 4.1 Tampilan perangkat lunak untuk menyisipkan pesan

rahasia ... 31 Gambar 4.2 Tampilan perangkat lunak untuk mengekstrak pesan rahasia

... 32 Gambar 4.3 Tampilan proses ektraksi pesan rahasia citra “baboon”

256x256 yang disisipkan pesan 100% atau 1172 karakter . 37 Gambar 4.4 Gambar 4.4 Perbandingan citra ukuran 256x256 pixel sebelum

dan sesudah dilakukan penyisipan 100% kapasitas penyimpanan ... 38 Gambar 4.5 Perbandingan terhadap citra warna hijau (a) citra host

(b) citra yang telah disisipkan pesan rahasia ... 39 Gambar 4.6 Perbandingan terhadap citra warna hitam (a) citra host


(8)

LAMPIRAN A

CITRA


(9)

A-1

A.1. Citra Host ”Baboon.bmp” Sebelum dan Setelah Disisipkan Pesan

Citra Host 128x128 Pesan 30% Pesan 60% Pesan 100%

Citra Host 192x192 Pesan 30%


(10)

A-2

Citra Host 256x256 Pesan 30%


(11)

A-3

A.2. Citra Host ”Lena.bmp” Sebelum dan Setelah Disisipkan Pesan

Citra Host 128x128 Pesan 30% Pesan 60% Pesan 100%

Citra Host 192x192 Pesan 30%


(12)

A-4

Citra Host 256x256 Pesan 30%


(13)

A-5

A.3. Citra Host ”Water Lilies.bmp” Sebelum dan Setelah Disisipkan Pesan

Citra Host 128x128 Pesan 30% Pesan 60% Pesan 100%

Citra Host 192x192 Pesan 30%


(14)

A-6

Citra Host 256x256 Pesan 30%


(15)

A-7

A.4. Citra Host ”Baboon.jpg” Sebelum dan Setelah Disisipkan Pesan


(16)

A-8

A.5. Citra ”lena.jpg” Sebelum dan Setelah Disisipkan Pesan


(17)

A-9

A.6. Citra Berwarna Polos Tanpa Corak Sebelum dan Setelah Disisipkan Pesan

Citra Host Citra Setelah Disisipkan Pesan Citra Host Citra Setelah


(18)

A-10

A.7. Hasil Ekstraksi Citra

Citra ”baboon.bmp” 128x128

Citra ”baboon.bmp” 192x192


(19)

A-11

Citra ”baboon.bmp” 256x256


(20)

A-12

Citra ”lena.bmp” 192x192


(21)

A-13

Citra ”water lilies.bmp” 128x128


(22)

A-14

Citra ”water lilies.bmp” 256x256


(23)

A-15


(24)

LAMPIRAN B


(25)

B-1

B.1. Kategori Penilaian Mean Opinion Score (MOS)

Nilai Kualitas citra Penjelasan

5 Sangat Bagus Citra yang diamati mempunyai kualitas yang sangat baik hampir serupa dengan citra aslinya

4 Bagus Citra yang diamati mempunyai kualitas bagus tanpa gangguan yang berarti

3 Cukup Citra yang diamati mempunyai kualitas yang cukup baik dengan gangguan yang sedikit berarti

2 Batas Citra yang diamati mempunyai kualitas buruk dengan gangguan yang berarti

1 Buruk Citra yang diamati memiliki kualitas yang demikian buruk sehingga tidak dapat diamati lagi

B.2. Contoh Kuisioner untuk Penilaian Mean Opinion Score (MOS) Nama :

Citra “baboon.bmp”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256 Citra host terhadap citra disisipkan pesan 30%

Citra host terhadap citra disisipkan pesan 60% Citra host terhadap citra disisipkan pesan 100%

Citra “lena.bmp”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256 Citra host terhadap citra disisipkan pesan 30%

Citra host terhadap citra disisipkan pesan 60% Citra host terhadap citra disisipkan pesan 100%

Citra “water lilies.bmp”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256 Citra host terhadap citra disisipkan pesan 30%

Citra host terhadap citra disisipkan pesan 60% Citra host terhadap citra disisipkan pesan 100%


(26)

B-2 Citra “baboon.jpg”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256 Citra host terhadap citra disisipkan pesan

Citra “lena.jpg”

Penilaian Nilai (1-5)

Ukuran Citra 128x128 192x192 256x256 Citra host terhadap citra disisipkan pesan

B.3. Hasil Penilaian MOS No Nama Baboon.bmp

128 Baboon.bmp 192 Baboon.bmp 256 Lena.bmp 128 Lena.bmp 192 Lena.bmp 256 1. Ferdinand 4 5 5 4 5 5 5 4 4 5 4 4 4 4 4 3 4 4 2. Tommy 5 4 4 5 4 4 4 4 5 4 4 3 3 3 3 4 4 3 3. Fritz Oliver 5 5 5 5 5 4 5 5 4 3 4 4 4 3 3 4 3 3 4. Yuwen 5 5 5 4 5 5 5 5 5 4 4 4 4 4 4 4 3 4 5. Vivi Valen 5 5 5 5 4 5 5 5 5 4 4 4 4 4 3 4 3 3

No Nama Lilies.bmp 128

Lilies.bmp 192

Lilies.bmp 256

Baboon.jpg Lena.jpg 128 192 256 128 192 256 1. Ferdinand 5 5 5 4 4 4 5 4 4 5 4 4 4 4 3 2. Tommy 4 4 4 5 4 4 4 4 4 4 4 5 3 4 3 3. Fritz Oliver 5 4 4 4 4 4 4 4 4 5 5 4 4 3 3 4. Yuwen 5 5 5 5 5 4 5 4 4 5 5 5 5 4 4 5. Vivi Valen 4 5 4 4 4 4 4 4 4 5 5 5 4 4 4


(27)

LAMPIRAN C


(28)

C-1

%% Perhitungan Kapasitas Maksmimum Pesan Rahasia %% % Input Citra Host

function pushbutton1_Callback(hObject, eventdata, handles)

[filename, pathname] = uigetfile({'*.bmp','All Image Files';...

'*.*','All Files' },'select image');

if isequal([filename,pathname],[0,0])

return else handles.img=imread(fullfile(pathname, filename)); guidata(hObject, handles); axes(handles.axes1); imshow(handles.img); img = handles.img;

end

% Tabel kuantisasi luminance Q=[ 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99]; % Tabel kuantisasi chrominance CQ=[17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99]; % Pengurutan zig-zag

ZigZag_Order = uint8([

1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21 28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64]); ZigZag_Order = ZigZag_Order';

reverse_zigzag_order_8x8 = zeros(8,8);

for k = 1:(size(ZigZag_Order,1) *size(ZigZag_Order,2))

reverse_zigzag_order_8x8(k) = find(ZigZag_Order== k);

end;

% Ubah RGB ke YCbCr img= handles.img; yCbCr = rgb2ycbcr(img); Y = double(yCbCr(:,:,1)); Cb=double(yCbCr(:,:,2)); Cr=double(yCbCr(:,:,3)); [xm,xn]=size(Y);


(29)

C-2 % Hitung nilai DCT dan kuantisasi Y

Y_dct = blkproc (Y,[8 8],'dct2');

quan_Y = blkproc (Y_dct,[8 8],@(x)Q.\ x ); quantz_Y = round(quan_Y);

Single_column_quantized_image_Y=im2col(quantz_Y, [8 8],'distinct');

% Hitung nilai DCT dan kuantisasi Cb

Cb_dct = blkproc (Cb,[8 8],'dct2');

quan_Cb = blkproc (Cb_dct,[8 8],@(x)CQ.\ x ); quantz_Cb = round(quan_Cb);

Single_column_quantized_image_Cb=im2col(quantz_Cb, [8 8],'distinct');

% Hitung nilai DCT dan kuantisasi Cr

Cr_dct = blkproc (Cr,[8 8],'dct2');

quan_Cr = blkproc (Cr_dct,[8 8],@(x)CQ.\ x ); quantz_Cr = round(quan_Cr);

Single_column_quantized_image_Cr=im2col(quantz_Cr, [8 8],'distinct');

% Gabung nilai DCT terkuantisasi Y, Cb, dan Cr joined =

cat(2,Single_column_quantized_image_Y,Single_column_quantized_image_Cb ,Single_column_quantized_image_Cr);

% Ambil nilai yang bukan -2, -1, 0 dan 1 order=joined(:);

not = order~=0 & order~=1 & order~=-1 & order~=-2; % Hitung kapasitas maksimum pesan

part = order(not); max = length(part);

maximum_capacity = ceil((max/7)-3);

set(handles.text4, 'string',maximum_capacity);

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)


(30)

C-3 %% Proses Penyisipan Pesan Rahasia %%

% Ambil pesan yang telah diketikkan

function edit1_Callback(hObject, eventdata, handles) edit1 = get(hObject,'string');

handles.msg = edit1; guidata(hObject,handles)

% hObject handle to edit1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Ambil kunci enkripsi

function edit2_Callback(hObject, eventdata, handles) edit2 = get(hObject,'string');

handles.key_enc = edit2; guidata(hObject,handles)

% hObject handle to edit2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Input Citra Host

function pushbutton2_Callback(hObject, eventdata, handles)

[filename, pathname] = uigetfile({'*.bmp','All Image Files';...

'*.*','All Files' },'select image');

if isequal([filename,pathname],[0,0])

return else handles.img=imread(fullfile(pathname, filename)); guidata(hObject, handles); axes(handles.axes1); imshow(handles.img); img = handles.img;

end

% Tabel kuantisasi luminance Q=[ 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99]; % Tabel kuantisasi chrominance CQ=[17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99]; % Pengurutan zig-zag

ZigZag_Order = uint8([

1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21


(31)

C-4 28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64]); ZigZag_Order = ZigZag_Order';

% Reverse zig-zag

reverse_zigzag_order_8x8 = zeros(8,8);

for k = 1:(size(ZigZag_Order,1) *size(ZigZag_Order,2))

reverse_zigzag_order_8x8(k) = find(ZigZag_Order== k);

end;

% Ambil nilai key untuk enkripsi dan pesan rahasia key_enc = handles.key_enc;

msg = handles.msg; s = msg;

k = str2num(key_enc);

% Ubah pesan rahasia jadi bit-bit biner nummsg = double(msg);

minus = nummsg-k;

binmsg = de2bi(minus,7); binmsg2 = binmsg';

binord = binmsg2(:);

% Hitung jumlah bit biner pesan rahasia n=length(binord(:));

panjang_msg=length(msg);

panjang_msg_biner=de2bi(panjang_msg,14); panjang_msg_biner_urut=panjang_msg_biner(:);

% Ubah RGB ke YCbCr img= handles.img;

yCbCr = rgb2ycbcr(img); Y = double(yCbCr(:,:,1)); Cb=double(yCbCr(:,:,2)); Cr=double(yCbCr(:,:,3)); [xm,xn]=size(Y);

% Hitung nilai DCT dan kuantisasi Y

Y_dct = blkproc (Y,[8 8],'dct2');

quan_Y = blkproc (Y_dct,[8 8],@(x)Q.\ x ); quantz_Y = round(quan_Y);

Single_column_quantized_image_Y=im2col(quantz_Y, [8 8],'distinct');

ZigZaged_Single_Column_Image_Y=Single_column_quantized_image_Y(ZigZag_ Order,:);

% Hitung nilai DCT dan kuantisasi Cb

Cb_dct = blkproc (Cb,[8 8],'dct2');

quan_Cb = blkproc (Cb_dct,[8 8],@(x)CQ.\ x ); quantz_Cb = round(quan_Cb);

Single_column_quantized_image_Cb=im2col(quantz_Cb, [8 8],'distinct');

ZigZaged_Single_Column_Image_Cb=Single_column_quantized_image_Cb(ZigZa g_Order,:);

% Hitung nilai DCT dan kuantisasi Cr

Cr_dct = blkproc (Cr,[8 8],'dct2');

quan_Cr = blkproc (Cr_dct,[8 8],@(x)CQ.\ x ); quantz_Cr = round(quan_Cr);


(32)

C-5

Single_column_quantized_image_Cr=im2col(quantz_Cr, [8 8],'distinct');

ZigZaged_Single_Column_Image_Cr=Single_column_quantized_image_Cr(ZigZa g_Order,:);

% Gabung nilai Y, Cb, dan Cr joined =

cat(2,ZigZaged_Single_Column_Image_Y,ZigZaged_Single_Column_Image_Cb,Z igZaged_Single_Column_Image_Cr);

% Ambil nilai yang bukan -2, -1, 0 dan 1 order_zigzag=joined(:);

quantz=order_zigzag;

not = quantz~=0 & quantz~=1 & quantz~=-1 & quantz~=-2; part = quantz(not);

% Penyisipan pesan lsb = mod(part,2);

part(1:14)=part(1:14)-lsb(1:14)+panjang_msg_biner_urut(1:14); part(15:n+14)=part(15:n+14)-lsb(15:n+14)+binord(1:n);

quantz(not) = part;

reshape_zigzag = reshape(quantz,64,xm*xn*3/64); % Rekonstruksi nilai Y, Cb, dan Cr

Y2 = reshape_zigzag(1:xm*xn); Y3 = reshape(Y2,64,xm*xn/64);

Cb2 = reshape_zigzag(xm*xn+1:xm*xn*2); Cb3 = reshape(Cb2,64,xm*xn/64);

Cr2 = reshape_zigzag(xm*xn*2+1:xm*xn*3); Cr3 = reshape(Cr2,64,xm*xn/64);

Single_column_quantized_image_Yy = Y3(reverse_zigzag_order_8x8,:); quantized_image_Y= col2im(Single_column_quantized_image_Yy, [8 8],

[xm xn], 'distinct');

quantze_Y= blkproc (quantized_image_Y,[8 8],@(x)Q.* x);

Yx = uint8(blkproc (quantze_Y,[8 8],'idct2'));

Single_column_quantized_image_Cby = Cb3(reverse_zigzag_order_8x8,:); quantized_image_Cb= col2im(Single_column_quantized_image_Cby, [8 8],

[xm xn], 'distinct');

quantze_Cb= blkproc (quantized_image_Cb,[8 8],@(x)CQ.* x);

Cbx = uint8(blkproc (quantze_Cb,[8 8],'idct2'));

Single_column_quantized_image_Cry = Cr3(reverse_zigzag_order_8x8,:); quantized_image_Cr= col2im(Single_column_quantized_image_Cry, [8 8],

[xm xn], 'distinct');

quantze_Cr= blkproc (quantized_image_Cr,[8 8],@(x)CQ.* x);

Crx = uint8(blkproc (quantze_Cr,[8 8],'idct2'));

yCbCr(:,:,1) = Yx; yCbCr(:,:,2) = Cbx; yCbCr(:,:,3) = Crx;

cRGB_out = ycbcr2rgb(yCbCr); out = cRGB_out;

axes(handles.axes2) imshow(out)

% RLE

run_level_pairs=[]; f = xm*xn*3/64;


(33)

C-6

for block_index=1:f

single_block_image_vector_64(1:64)=0;

for Temp_Vector_Index=1:64

single_block_image_vector_64(Temp_Vector_Index) = reshape_zigzag(Temp_Vector_Index, block_index); end non_zero_value_index_array = find(single_block_image_vector_64~=0); number_of_non_zero_entries = length(non_zero_value_index_array);

if non_zero_value_index_array(1)==1,

run=0;

run_level_pairs=cat(1,run_level_pairs, run, single_block_image_vector_64(non_zero_value_index_array(1)));

end

for n=2:number_of_non_zero_entries,

run=non_zero_value_index_array(n)-non_zero_value_index_array(n-1)-1;

run_level_pairs=cat(1, run_level_pairs, run, single_block_image_vector_64(non_zero_value_index_array(n)));

end

run_level_pairs=cat(1, run_level_pairs, 155, 155);

end

length_rle=length(run_level_pairs); length_ori = xm*xn*3;

compression_factor = length_ori / length_rle;

set(handles.text6, 'string',compression_factor);

save_matrix=run_level_pairs; save_matrix2=run_level_pairs+100; % Simpan sebagai stego-image

[filename, pathname, filterindex] = uiputfile( ...

{'*.abc', 'abc-Files (*.abc)';...

'*.*', 'All Files (*.*)'},...

'Save');

if isequal(filename,0) || isequal(pathname,0)

disp('User selected Cancel')

else

disp(['User selected',fullfile(pathname,filename)])

fid= fopen(filename,'w');

fwrite(fid, save_matrix2);

end

% hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)


(34)

C-7 %% Proses Ekstraksi Pesan Rahasia %%

% Ambil citra yang akan diekstrak

function pushbutton1_Callback(hObject, eventdata, handles) [filename, pathname] = uigetfile({'*.abc','All Image Files';...

'*.*','All Files' },'select image'); if isequal([filename,pathname],[0,0]) return

else

fid= fopen(filename,'r'); load_matrix = fread(fid);

load_matrix2 = load_matrix-100; % Invers RLE

run_level_pairs = load_matrix2; c=[];

for n=1:2:size(run_level_pairs),

if run_level_pairs(n)<155 zero_count=0;

zero_count=run_level_pairs(n); for l=1:zero_count

c=cat(1,c,0); end

c=cat(1,c,run_level_pairs(n+1)); else

number_of_trailing_zeros= 64-mod(size(c),64); for l= 1:number_of_trailing_zeros

c=cat(1,c,0); end

end

end

handles.x = c;

guidata(hObject, handles);

Q = [ 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55

14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99]; CQ=[17 18 24 47 99 99 99 99

18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99]; ZigZag_Order = uint8([

1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 41 34 27 20 13 6 7 14 21


(35)

C-8 28 35 42 49 57 50 43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64]); ZigZag_Order = ZigZag_Order';

reverse_zigzag_order_8x8 = zeros(8,8);

for k = 1:(size(ZigZag_Order,1) *size(ZigZag_Order,2)) reverse_zigzag_order_8x8(k) = find(ZigZag_Order== k); end;

% rekonstruksi citra leng = length(c); tem=leng/64;

xm = sqrt (leng/3); xn=xm;

reshape_zigzag_after = reshape(c,64,tem); Y2 = reshape_zigzag_after(1:xm*xn);

Y3 = reshape(Y2,64,xm*xn/64);

Cb2 = reshape_zigzag_after(xm*xn+1:xm*xn*2); Cb3 = reshape(Cb2,64,xm*xn/64);

Cr2 = reshape_zigzag_after(xm*xn*2+1:xm*xn*3); Cr3 = reshape(Cr2,64,xm*xn/64);

Single_column_quantized_image_Yy = Y3(reverse_zigzag_order_8x8,:); quantized_image_Y= col2im(Single_column_quantized_image_Yy, [8 8], [xm xn], 'distinct');

quantze_Y= blkproc (quantized_image_Y,[8 8],@(x)Q.* x); Yx = uint8(blkproc (quantze_Y,[8 8],'idct2'));

Single_column_quantized_image_Cby = Cb3(reverse_zigzag_order_8x8,:); quantized_image_Cb= col2im(Single_column_quantized_image_Cby, [8 8], [xm xn], 'distinct');

quantze_Cb= blkproc (quantized_image_Cb,[8 8],@(x)CQ.* x); Cbx = uint8(blkproc (quantze_Cb,[8 8],'idct2'));

Single_column_quantized_image_Cry = Cr3(reverse_zigzag_order_8x8,:); quantized_image_Cr= col2im(Single_column_quantized_image_Cry, [8 8], [xm xn], 'distinct');

quantze_Cr= blkproc (quantized_image_Cr,[8 8],@(x)CQ.* x); Crx = uint8(blkproc (quantze_Cr,[8 8],'idct2'));

% Menampilkan citra yang akan diekstrak yCbCr(:,:,1) = Yx;

yCbCr(:,:,2) = Cbx; yCbCr(:,:,3) = Crx;

cRGB_out = ycbcr2rgb(yCbCr); out = cRGB_out;

axes(handles.axes1) imshow(out)

end

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)


(36)

C-9 % Ekstraksi pesan rahasia

function pushbutton2_Callback(hObject, eventdata, handles) c = handles.x;

key_dec = handles.key_dec; k=str2num(key_dec);

not2 = c~=0 & c~=1 & c~=-1 & c~=-2; part2 = c(not2);

key = part2(1:14); key2 = mod(key,2); key3 = key2';

key4 = bi2de(key3); n=key4*7;

l=n/7;

out_msg = part2(15:n+14);

out_msg_biner = mod(out_msg,2);

out_msg_biner_reshape = reshape(out_msg_biner,7,l); out_msg_biner_trans = out_msg_biner_reshape';

out_msg_decimal = bi2de(out_msg_biner_trans); % Dekripsi pesan

plus = out_msg_decimal+k;

% Menampilkan pesan yang berhasil diekstrak out_msg_ascii = char(plus);

output_msg = out_msg_ascii';

set(handles.text2, 'string',output_msg);

% hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Ambil kunci untuk dekripsi

function edit2_Callback(hObject, eventdata, handles) edit2 = get(hObject,'string');

handles.key_dec = edit2; guidata(hObject,handles)

% hObject handle to edit2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)


(37)

(38)

1 Universitas Kristen Maranatha

BAB I

PENDAHULUAN

1.1 Latar Belakang

Perkembangan teknologi internet dalam beberapa tahun terakhir ini telah membawa perubahan besar bagi distribusi media digital. Media digital yang berupa teks, citra, audio dan video dapat dengan mudah didistribusikan melalui internet. Selain memberikan kemudahan, pendistribusian media digital melalui internet juga menimbulkan permasalahan lain, salah satunya adalah kejahatan internet seperti hacking, cracking, phising, defacing, dll. Oleh karena itu pendistribusian media digital melalui internet perlu dilindungi untuk memperkecil atau bahkan mencegah terjadinya kejahatan internet.

Steganografi merupakan salah satu cara untuk meningkatkan keamanan dalam pendistribusian media digital. Steganografi adalah teknik penyembunyian pesan, dalam hal ini media digital, dalam sebuah pesan atau media digital lainnya. Maksud dari menyembunyikan pesan ini adalah jikalau pada suatu saat pesan didistribusikan dan diterima oleh pihak yang salah. Pihak tersebut tidak akan menyangka adanya data penting atau rahasia di dalam media digital tersebut, dan berpikir hanya media digital pada umumnya sehingga pesan tersebut tetap tersimpan dengan aman.

Dengan latar belakang tersebut, maka diperlukan teknik steganografi yang dapat digunakan untuk menyembunyikan pesan rahasia pada suatu citra atau media digital lainnya sehingga pendistribusian media digital melalui internet dapat lebih terjamin keamanannya.


(39)

BAB I PENDAHULUAN

Universitas Kristen Maranatha 2

1.2 Perumusan Masalah

Permasalahan yang dibahas dalam tugas akhir ini meliputi:

1. Bagaimana menyembunyikan pesan berupa teks pada suatu citra tertentu yang perubahan pada citra asli tidak tampak oleh mata dengan menggunakan metoda Jpeg-Jsteg?

2. Berapa jumlah maksimal teks yang dapat disembunyikan dalam suatu citra dan bagaimana kualitas citra setelah proses penyembunyian tersebut?

1.3 Tujuan Tugas Akhir

Tujuan yang hendak dicapai dalam pengerjaan tugas akhir ini adalah: 1. Merealisasikan teknik penyembunyian pesan berupa teks pada suatu citra

tertentu yang perubahan pada citra asli tidak tampak oleh mata dengan menggunakan metoda Jpeg-Jsteg.

2. Mengetahui jumlah maksimal teks yang dapat disembunyikan dalam suatu citra dan kualitas citra setelah proses penyembunyian.

1.4 Pembatasan Masalah

Pembatasan masalah pada tugas akhir ini meliputi: 1. Menggunakan citra berwarna dengan format file *.bmp.

2. Citra yang digunakan berukuran 128x128, 192x192, dan 256x256 pixel. 3. Pesan yang akan disembunyikan berupa teks dan diketikkan secara

manual.

4. Implementasi dilakukan dengan bahasa pemrograman Matlab 7.7 pada komputer PC Core 2 Quad dengan memori 3 GB.

1.5. Sistematika Penulisan

BAB I PENDAHULUAN

Bab ini berisi latar belakang, perumusan masalah, tujuan tugas akhir, pembatasan masalah, dan sistematika penulisan.


(40)

BAB I PENDAHULUAN

Universitas Kristen Maranatha 3

BAB II LANDASAN TEORI

Bab ini membahas teori-teori tentang citra digital, steganografi, DCT (Discrete Cosine Transform), kuantisasi, RLE (Run Length Encoding) dan ruang warna.

BAB III PERANCANGAN DAN REALISASI PERNGKAT LUNAK Bab ini berisi perancangan, penjelasan, diagram alir, serta realisasi dari program yang dibuat.

BAB IV PEMBAHASAN HASIL

Bab ini berisikan data hasil uji coba perancangan dan simulasi.

BAB V KESIMPULAN DAN SARAN

Bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu dilakukan untuk perbaikan di masa mendatang.


(41)

42 Universitas Kristen Maranatha

BAB V

KESIMPULAN DAN SARAN

Bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu dilakukan untuk perbaikan di masa mendatang.

5.1 Kesimpulan

Dari analisis yang dilakukan terhadap hasil-hasil ujicoba maka dapat ditarik kesimpulan sebagai berikut:

• Tugas akhir ini berhasil mengimplementasikan teknik steganografi pada suatu citra dengan menggunakan metoda Jpeg-Jsteg.

• Citra yang dihasilkan setelah proses penyisipan pesan memiliki kualitas yang cukup baik, yakni seperti berikut : citra “baboon” memiliki nilai PSNR ≥ 30,7 dB dan nilai MOS ≥ 4,6. Citra “lena” memiliki nilai PSNR ≥ 33,81 dB dan nilai MOS ≥ 3,4. Citra “water lilies” memiliki nilai

PSNR ≥ 30,08 dB dan nilai MOS ≥ 4.

• Citra yang memiliki banyak corak dan warna memiliki kapasitas penyimpanan pesan rahasia yang lebih banyak.

• Steganografi baik dilakukan pada warna hitam, merah, biru, dan ungu dibandingkan warna putih, abu-abu, kuning, dan jingga karena perubahan warnanya yang tidak terlihat oleh penglihatan mata manusia.

• Proses ekstraksi pesan rahasia dapat dilakukan tanpa memerlukan citra host (blind steganografi).

5.2 Saran

Saran-saran yang dapat diberikan untuk perbaikan dan pengembangan Tugas Akhir ini di masa mendatang adalah :

• Menggunakan metoda lain yang dapat meningkatkan kapasitas penyimpanan pesan rahasia dengan kualitas yang tetap baik.


(42)

BAB V KESIMPULAN DAN SARAN 43

Universitas Kristen MaranathaMenggunakan standar JPEG library pada saat menyimpan stego-image

menjadi sebuah file sehingga dapat dilihat oleh program viewer standar yang umum digunakan (seperti ACDSee, fax viewer, Adobe Photoshop). • Menggunakan media digital lain sebagai host untuk steganografi, misal


(43)

44 Universitas Kristen Maranatha

DAFTAR PUSTAKA

1. Chin-Chen Chang, Tung-Shou Chen, dan Lou-Zo Chung, A Steganographic Method Based Upon JPEG and Quantization Table Modification, Departement of Computer and Information Engineering, National Chung Cheng University Chiayi, Taiwan 621, ROC, 2001.

2. Ford, A., dan Roberts, A., Colour Space Conversions, http://www.poynton.com/PDFs/coloureq.pdf, 1998. 3. Guillermito, Extracting data embedded with Jsteg,

www.guillermito2.net/stegano/jsteg/, 2004.

4. Hamilton, E., September 1992, JPEG File Interchange Format, Version 1.02. http://www.w3.org/Graphics/JPEG/jfif.txt

5. Impulse Adventure, JPEG Quantization Table,

http://www.impulseadventure.com/photo/jpeg-quantization.html, 2008. 6. Johnson , N.F., Steganography, IEEE Computer, http://www.jjtc.com/stegdoc/

, 1995.

7. Munir, Rinaldi., Steganografi dan Watermarking, Departemen Teknik Informatika Institut Teknologi Bandung, 2004.

8. Poynton, C. A., Frequently Asked Questions about Color, http://www.poynton.com/PDFs/ColorFAQ.pdf, 1997

9. Technical Advisory Service for Images., File Formats and Compression, http://www.tasi.ac.uk, 2005.

10. Watson, A., B., Image Compression Using the Discrete Cosine Transform, Mathematica Journal, 4(1), pp. 81-88, 1994.

11. Wikipedia, JPEG, http://en.wikipedia.org/wiki/JPEG

12. Wikipedia, Run Length Encoding, http://en.wikipedia.org/wiki/Run-length_encoding


(1)

1 Universitas Kristen Maranatha

BAB I

PENDAHULUAN

1.1 Latar Belakang

Perkembangan teknologi internet dalam beberapa tahun terakhir ini telah membawa perubahan besar bagi distribusi media digital. Media digital yang berupa teks, citra, audio dan video dapat dengan mudah didistribusikan melalui internet. Selain memberikan kemudahan, pendistribusian media digital melalui internet juga menimbulkan permasalahan lain, salah satunya adalah kejahatan internet seperti hacking, cracking, phising, defacing, dll. Oleh karena itu pendistribusian media digital melalui internet perlu dilindungi untuk memperkecil atau bahkan mencegah terjadinya kejahatan internet.

Steganografi merupakan salah satu cara untuk meningkatkan keamanan dalam pendistribusian media digital. Steganografi adalah teknik penyembunyian pesan, dalam hal ini media digital, dalam sebuah pesan atau media digital lainnya. Maksud dari menyembunyikan pesan ini adalah jikalau pada suatu saat pesan didistribusikan dan diterima oleh pihak yang salah. Pihak tersebut tidak akan menyangka adanya data penting atau rahasia di dalam media digital tersebut, dan berpikir hanya media digital pada umumnya sehingga pesan tersebut tetap tersimpan dengan aman.

Dengan latar belakang tersebut, maka diperlukan teknik steganografi yang dapat digunakan untuk menyembunyikan pesan rahasia pada suatu citra atau media digital lainnya sehingga pendistribusian media digital melalui internet dapat lebih terjamin keamanannya.


(2)

BAB I PENDAHULUAN 2

1.2 Perumusan Masalah

Permasalahan yang dibahas dalam tugas akhir ini meliputi:

1. Bagaimana menyembunyikan pesan berupa teks pada suatu citra tertentu yang perubahan pada citra asli tidak tampak oleh mata dengan menggunakan metoda Jpeg-Jsteg?

2. Berapa jumlah maksimal teks yang dapat disembunyikan dalam suatu citra dan bagaimana kualitas citra setelah proses penyembunyian tersebut?

1.3 Tujuan Tugas Akhir

Tujuan yang hendak dicapai dalam pengerjaan tugas akhir ini adalah: 1. Merealisasikan teknik penyembunyian pesan berupa teks pada suatu citra

tertentu yang perubahan pada citra asli tidak tampak oleh mata dengan menggunakan metoda Jpeg-Jsteg.

2. Mengetahui jumlah maksimal teks yang dapat disembunyikan dalam suatu citra dan kualitas citra setelah proses penyembunyian.

1.4 Pembatasan Masalah

Pembatasan masalah pada tugas akhir ini meliputi: 1. Menggunakan citra berwarna dengan format file *.bmp.

2. Citra yang digunakan berukuran 128x128, 192x192, dan 256x256 pixel. 3. Pesan yang akan disembunyikan berupa teks dan diketikkan secara

manual.

4. Implementasi dilakukan dengan bahasa pemrograman Matlab 7.7 pada komputer PC Core 2 Quad dengan memori 3 GB.

1.5. Sistematika Penulisan BAB I PENDAHULUAN

Bab ini berisi latar belakang, perumusan masalah, tujuan tugas akhir, pembatasan masalah, dan sistematika penulisan.


(3)

BAB I PENDAHULUAN

Universitas Kristen Maranatha 3

BAB II LANDASAN TEORI

Bab ini membahas teori-teori tentang citra digital, steganografi, DCT (Discrete Cosine Transform), kuantisasi, RLE (Run Length Encoding) dan ruang warna.

BAB III PERANCANGAN DAN REALISASI PERNGKAT LUNAK Bab ini berisi perancangan, penjelasan, diagram alir, serta realisasi dari program yang dibuat.

BAB IV PEMBAHASAN HASIL

Bab ini berisikan data hasil uji coba perancangan dan simulasi.  BAB V KESIMPULAN DAN SARAN

Bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu dilakukan untuk perbaikan di masa mendatang.


(4)

BAB V

KESIMPULAN DAN SARAN

Bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu dilakukan untuk perbaikan di masa mendatang.

5.1 Kesimpulan

Dari analisis yang dilakukan terhadap hasil-hasil ujicoba maka dapat ditarik kesimpulan sebagai berikut:

• Tugas akhir ini berhasil mengimplementasikan teknik steganografi pada suatu citra dengan menggunakan metoda Jpeg-Jsteg.

• Citra yang dihasilkan setelah proses penyisipan pesan memiliki kualitas yang cukup baik, yakni seperti berikut : citra “baboon” memiliki nilai PSNR ≥ 30,7 dB dan nilai MOS ≥ 4,6. Citra “lena” memiliki nilai PSNR ≥ 33,81 dB dan nilai MOS ≥ 3,4. Citra “water lilies” memiliki nilai PSNR ≥ 30,08 dB dan nilai MOS ≥ 4.

• Citra yang memiliki banyak corak dan warna memiliki kapasitas penyimpanan pesan rahasia yang lebih banyak.

• Steganografi baik dilakukan pada warna hitam, merah, biru, dan ungu dibandingkan warna putih, abu-abu, kuning, dan jingga karena perubahan warnanya yang tidak terlihat oleh penglihatan mata manusia.

• Proses ekstraksi pesan rahasia dapat dilakukan tanpa memerlukan citra host (blind steganografi).

5.2 Saran

Saran-saran yang dapat diberikan untuk perbaikan dan pengembangan Tugas Akhir ini di masa mendatang adalah :

• Menggunakan metoda lain yang dapat meningkatkan kapasitas penyimpanan pesan rahasia dengan kualitas yang tetap baik.


(5)

BAB V KESIMPULAN DAN SARAN 43

Universitas Kristen MaranathaMenggunakan standar JPEG library pada saat menyimpan stego-image

menjadi sebuah file sehingga dapat dilihat oleh program viewer standar yang umum digunakan (seperti ACDSee, fax viewer, Adobe Photoshop). • Menggunakan media digital lain sebagai host untuk steganografi, misal


(6)

44 Universitas Kristen Maranatha

DAFTAR PUSTAKA

1. Chin-Chen Chang, Tung-Shou Chen, dan Lou-Zo Chung, A Steganographic Method Based Upon JPEG and Quantization Table Modification, Departement of Computer and Information Engineering, National Chung Cheng University Chiayi, Taiwan 621, ROC, 2001.

2. Ford, A., dan Roberts, A., Colour Space Conversions, http://www.poynton.com/PDFs/coloureq.pdf, 1998. 3. Guillermito, Extracting data embedded with Jsteg,

www.guillermito2.net/stegano/jsteg/, 2004.

4. Hamilton, E., September 1992, JPEG File Interchange Format, Version 1.02. http://www.w3.org/Graphics/JPEG/jfif.txt

5. Impulse Adventure, JPEG Quantization Table,

http://www.impulseadventure.com/photo/jpeg-quantization.html, 2008. 6. Johnson , N.F., Steganography, IEEE Computer, http://www.jjtc.com/stegdoc/

, 1995.

7. Munir, Rinaldi., Steganografi dan Watermarking, Departemen Teknik Informatika Institut Teknologi Bandung, 2004.

8. Poynton, C. A., Frequently Asked Questions about Color, http://www.poynton.com/PDFs/ColorFAQ.pdf, 1997

9. Technical Advisory Service for Images., File Formats and Compression, http://www.tasi.ac.uk, 2005.

10. Watson, A., B., Image Compression Using the Discrete Cosine Transform, Mathematica Journal, 4(1), pp. 81-88, 1994.

11. Wikipedia, JPEG, http://en.wikipedia.org/wiki/JPEG

12. Wikipedia, Run Length Encoding, http://en.wikipedia.org/wiki/Run-length_encoding