TESIS ALGORITMA MEoF (MODIFIKASI END of FILE) UNTUK STEGANOGRAFI PADA CITRA BITMAP 24 BIT
THOMAS EDYSON TARIGAN 11/324230/PPA/03667
PROGRAM STUDI S2 ILMU KOMPUTER JURUSAN ILMU KOMPUTER DAN ELEKTRONIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS GADJAH MADA YOGYAKARTA 2015
TESIS ALGORITMA MEoF (MODIFIKASI END of FILE) UNTUK STEGANOGRAFI PADA CITRA BITMAP 24 BIT
Diajukan untuk memenuhi salah satu syarat memperoleh derajat
Master of Computer Science
THOMAS EDYSON TARIGAN
11/324230/PPA/03667
PROGRAM STUDI S2 ILMU KOMPUTER JURUSAN ILMU KOMPUTER DAN ELEKTRONIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS GADJAH MADA YOGYAKARTA 2015
A
LAMAN PENGESAHAN
PERNYATAAN
Dengan ini saya menyatakan bahwa dalam Tesis ini tidak terdapat karya yang pernah diajukan untuk memperoleh gelar Master di suatu Perguruan Tinggi, dan sepanjang pengetahuan saya juga tidak terdapat karya atau pendapat yang ditulis atau diterbitkan oleh orang lain, kecuali yang secara tertulis diacu dalam naskah ini dan disebutkan dalam daftar pustaka.
Yogyakarta, Juli 2015
THOMAS EDYSON TARIGAN
iv
HALAMAN PERSEMBAHAN
TO
v
PRAKATA
Puji syukur penulis panjatkan pada Tuhan YME, atas rahmat dan kasih karuniaNya, sehingga saya dapat menyelesaikan tesis ini dengan baik dan lancar. Penulis sadar bahwa selesainya tesis ini tidak terlepas dari arahan, bantuan dan dukungan dari berbagai pihak. Oleh karena itu pada kesempatan ini penulis mengucapkan terima kasih kepada : 1. Kedua orang tua saya, terima kasih untuk semua hal yang sampai kapanpun tidak akan pernah terbalaskan. 2.
Dekan Fakultas MIPA UGM, Bapak Drs. Pekik Nurwantoro, M.S., Ph. D.
3.
Ketua Program Studi Ilmu Komputer S2 UGM, Ibu Prof. Dra. Sri Hartati, M. Sc.,Ph. D.
4.
Bapak Drs. Edi Winarko, M. Sc, Ph. D., selaku dosen pembimbing utama penulis. Terima kasih telah meluangkan waktu, tenaga dan pikiran dalam membimbing, mengarahkan dan mendorong penulis untuk menyusun dan menyelesaikan tesis ini.
5.
Seluruh staff pengajar di Program Studi Magister Ilmu Komputer UGM. Terima kasih atas ilmu, pengetahuan dan pengalaman yang telah diberikan selama penulis menempuh pendidikan di Program Ilmu Komputer FMIPA UGM.
6.
Bapak Sugeng, Ibu Rini, Bapak Kuncoro dan Bapak Nanang. Terima kasih atas pelayanan dan kerjasama yang telah diberikan kepada penulis selama menempuh kuliah.
7. Keluarga kecilku, Nio dan Kean semua senyum, tawa dan tangis kalian
berdua telah menjadi penyemangat untuk menyelesaikan tulisan ini. 8. Semua teman – teman Pra-S2 angkatan genap 2010 dan mahasiswa S2 Program Ilmu Komputer FMIPA UGM, terima kasih untuk semua kebersamaannya. 9.
Teman – teman di STMIK Akakom, terima kasih atas dukungan dan pengertian yang telah diberikan selama ini.
vi
10. Semua teman – teman yang telah memberikan dukungan selama penulis menempuh studi, yang tidak mungkin penulis sebutkan satu per satu disini. Terima kasih untuk doa dan perhatian yang telah diberikan selama ini. Penulis sadar bahwa tesis ini tidak lepas dari kekurangan dan kelemahan. Oleh karena itu, kritik dan saran yang bersifat membangun guna kesempurnaan tesis ini sangat penulis harapkan. Semoga tesis ini dapat bermanfaat bagi kita semua terutama bagi perkembangan ilmu komputer.
Yogyakarta, Juli 2015
Penulis
vii
DAFTAR ISI
PERNYATAAN ..................................................................................................... iv HALAMAN PERSEMBAHAN ............................................................................. v PRAKATA ............................................................................................................. vi DAFTAR ISI ........................................................................................................ viii DAFTAR TABEL .................................................................................................. xi DAFTAR GAMBAR ............................................................................................ xii INTISARI............................................................................................................. xiv ABSTRACT .......................................................................................................... xv 1.1 1.2 1.3 1.4 1.5 1.6 1.7
BAB I PENDAHULUAN ................................................................... 1 Latar Belakang .................................................................................... 1 Rumusan Masalah ............................................................................... 4 Batasan Masalah ................................................................................. 4 Tujuan Penelitian ................................................................................ 4 Manfaat Penelitian .............................................................................. 4 Metodologi Penelitian ......................................................................... 5 Sistematika Penulisan ......................................................................... 6 BAB II TINJAUAN PUSTAKA......................................................... 7
3.1 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.3 3.3.1 3.3.2 3.4 3.5 3.5.1 3.5.2 3.6 3.7 3.7.1 3.7.2
BAB III LANDASAN TEORI .......................................................... 15 Steganografi ...................................................................................... 15 File Bitmap ....................................................................................... 17 Format file bitmap 24 bit ................................................................... 17 Header dan struktur file bitmap ........................................................ 18 Data piksel......................................................................................... 19 Metode lockbits / unlockbits untuk akses data citra .......................... 20 Algoritma End of File (EoF) ............................................................. 21 Penyisipan pesan dengan algoritma EoF .......................................... 22 Ekstraksi pesan dengan algoritma EoF ............................................. 24 Algoritma MEoF (Modifikasi End of File) ....................................... 27 Algoritma Modifikasi Least Significant Bit (MLSB) ........................ 29 Penyisipan pesan dengan algoritma MLSB ....................................... 29 Ekstraksi algoritma MLSB (Modifikasi Least Significant Bit).......... 32 Peak Signal to Noise Ratio (PSNR) .................................................. 35 Algoritma Rijndael ............................................................................ 36 Enkripsi Rijndael............................................................................... 36 Dekripsi Rijndael .............................................................................. 37
4.1
BAB IV ANALISIS DAN RANCANGAN SISTEM....................... 39 Deskripsi Penyisipan Pesan .............................................................. 39
viii
4.2 4.2.1 4.2.2 4.3 4.3.1 4.3.2 4.4
Perancangan Algoritma MEoF (Modifikasi End of File) ................. 40 Penyisipan pesan dengan algoritma MEoF ....................................... 40 Ekstraksi pesan dengan algoritma MEoF (Modifikasi End of File) . 43 Metode Pengujian Steganografi ........................................................ 45 Pengujian kualitatif ........................................................................... 46 Pengujian kuantitatif ......................................................................... 47 Perancangan Antarmuka Penyisipan dan Ekstraksi Pesan ................ 47
5.1 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.3 5.3.1 5.3.2 5.3.3 5.4 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.5 5.5.1 5.5.2 5.5.3 5.5.4 5.6 5.6.1 5.6.2 5.6.3 5.7 5.7.1 5.7.2 5.8
BAB V IMPLEMENTASI ................................................................ 51 Lingkungan Implementasi................................................................. 51 Algoritma MEoF (Modifikasi End of File) ....................................... 51 Kalkulasi lokasi penyisipan pesan .................................................... 51 Lockbit data citra bitmap ................................................................... 52 Pengambilan header pesan................................................................ 53 Pengukuran panjang pesan ................................................................ 54 Enkripsi pesan ................................................................................... 55 Membuat citra hasil ........................................................................... 56 Penyisipan pesan ............................................................................... 57 Proses stegano ................................................................................... 59 Ekstraksi Pesan ................................................................................. 60 Ekstraksi header pesan...................................................................... 60 Konversi hasil header pesan ............................................................. 61 Ekstraksi pesan .................................................................................. 62 Algoritma End of File (EoF) ............................................................. 63 Inisialisasi algoritma EoF ................................................................. 63 Citra hasil .......................................................................................... 64 Kalkulasi kapasitas pesan.................................................................. 65 Salin byte citra dan sisip pesan ......................................................... 65 Ekstraksi pesan .................................................................................. 67 Algoritma Modifikasi Least Significant Bit (MLSB) ........................ 68 Mencacah jumlah byte citra yang mampu disisipi pesan .................. 69 Sisip penanda pesan .......................................................................... 70 Sisip panjang pesan ........................................................................... 71 Sisip pesan......................................................................................... 72 Ekstraksi Algoritma MLSB ............................................................... 73 Pengambilan byte citra untuk ekstraksi bit penanda pesan ............... 74 Ekstraksi panjang pesan .................................................................... 75 Ekstraksi pesan .................................................................................. 76 Algoritma Rijndael ............................................................................ 77 Implementasi enkripsi ....................................................................... 77 Implementasi dekripsi ....................................................................... 78 Mengukur Kualitas Citra ................................................................... 79
6.1 6.1.1 6.1.2
BAB VI HASIL DAN PEMBAHASAN .......................................... 81 Hasil Penelitian ................................................................................. 81 Pengujian kualitatif ........................................................................... 81 Pengujian kuantitatif ......................................................................... 85
ix
6.2 6.2.1 6.2.2
Pembahasan ....................................................................................... 93 Perbandingan dengan algoritma EoF ................................................ 93 Perbandingan dengan algoritma MLSB ............................................. 94
7.1 7.2
BAB VII KESIMPULAN DAN SARAN ......................................... 96 Kesimpulan ....................................................................................... 96 Saran.................................................................................................. 97
DAFTAR PUSTAKA ........................................................................................... 98
x
DAFTAR TABEL
Tabel 2.1 Perbandingan penelitian yang sebelumnya ........................................... 12 Tabel 3.1 Informasi header bitmap ....................................................................... 19 Tabel 3.2 Struktur header bitmap ......................................................................... 19 Tabel 3.3 S-Box algoritma Rijndael ...................................................................... 36 Tabel 3.4 Invers S-Box algoritma Rijndael ........................................................... 37 Tabel 3.5 Perbandingan jumlah iterasi algoritma Rijndael ................................... 38 Tabel 6.1 Hasil pengujian kualitatif ...................................................................... 83 Tabel 6.2 Hasil pengukuran kuantitatif berdasarkan ukuran citra bitmap ............ 89 Tabel 6.3 Hasil pengukuran kuantitatif berdasarkan panjang pesan ..................... 91
xi
DAFTAR GAMBAR
Gambar 3.1 Penggolongan steganografi berdasarkan tujuan ................................ 16 Gambar 3.2 Diagram sistem steganografi ............................................................. 16 Gambar 3.3 Tabel warna RGB pada bitmap 24 bit/piksel ..................................... 17 Gambar 3.4 Hubungan scan0 dan stride ke array dalam memori ........................ 20 Gambar 3.5 Struktur file bitmap untuk steganografi pada algoritma EoF ............ 22 Gambar 3.6 Flowchart penyisipan pesan untuk algoritma EoF ........................... 23 Gambar 3.7 Flowchart ekstraksi pesan untuk algoritma EoF............................... 25 Gambar 3.8 Flowchart penyisipan pesan dengan algoritma MLSB ...................... 31 Gambar 3.9 Flowchart ekstraksi pesan dengan algoritma MLSB ......................... 33 Gambar 4.1 Flowchart penyisipan pesan pada algoritma MEoF.......................... 42 Gambar 4.2 Flowchart ekstraksi pesan dengan algoritma MEoF ......................... 44 Gambar 4.3 Rancangan antarmuka penyisipan/ekstraksi pesan ........................... 48 Gambar 5.1 Kalkulasi lokasi penyisipan untuk ukuran width modulo 4 = 0 ........ 51 Gambar 5.2 Lockbit nilai byte citra ....................................................................... 52 Gambar 5.3 Pengambilan header pesan ................................................................ 53 Gambar 5.4 Pengukuran panjang pesan ................................................................ 54 Gambar 5.5 Enkripsi pesan dengan Rijndael ........................................................ 55 Gambar 5.6 Citra tanpa padding ........................................................................... 56 Gambar 5.7 Penyisipan pesan ............................................................................... 58 Gambar 5.8 Proses stegano ................................................................................... 59 Gambar 5.9 Ekstraksi penanda pesan.................................................................... 61 Gambar 5.10 Konversi hasil header pesan ........................................................... 62 Gambar 5.11 Ekstraksi pesan ................................................................................ 62 Gambar 5.12 Pembuatan citra hasil ...................................................................... 64 Gambar 5.13 Citra hasil ........................................................................................ 64 Gambar 5.14 Kalkulasi kapasitas pesan ................................................................ 65 Gambar 5.15 Salin byte citra dan sisip pesan ........................................................ 66 Gambar 5.16 Ekstraksi pesan algoritma EoF ........................................................ 67 Gambar 5.17 Mencacah jumlah byte citra yang mampu disisipi pesan ................ 69 Gambar 5.18 Sisip penanda pesan ........................................................................ 70 Gambar 5.19 Sisip panjang pesan ......................................................................... 71 Gambar 5.20 Sisip pesan ....................................................................................... 73 Gambar 5.21 Pengambilan byte stego untuk ekstraksi bit penanda pesan ............ 75 Gambar 5.22 Ekstraksi panjang pesan .................................................................. 76 Gambar 5.23 Ekstraksi pesan ................................................................................ 77 Gambar 5.24 Enkripsi plaintext ............................................................................ 78 Gambar 5.25 Dekripsi pesan ................................................................................. 79
xii
Gambar 5.26 Perhitungan MSE dan PSNR ........................................................... 80 Gambar 6.1 Pengujian kualitatif dengan pengamatan visual manusia .................. 82 Gambar 6.2 Pengujian kualitatif ekstrak nilai byte citra ....................................... 82 Gambar 6.3 Perbandingan citra asli dan citra stego pada algoritma EoF ............. 93
xiii
INTISARI ALGORITMA MEoF (MODIFIKASI END of FILE) UNTUK STEGANOGRAFI PADA CITRA BITMAP 24 BIT Oleh THOMAS EDYSON TARIGAN 11/324230/PPA/03667
Informasi berupa pesan tidak hanya disandikan, tetapi dapat juga disisipkan kedalam media digital. Teknik menyembunyikan atau menyisipkan pesan disebut steganografi. Steganografi sebagai ilmu dan seni untuk menyembunyikan informasi sehingga informasi yang bersifat rahasia tidak dapat diketahui oleh orang lain, kecuali pengirim dan penerima. Banyak cara telah dilakukan untuk mengamankan informasi dari pihak yang tidak bertanggung jawab, salah satunya melakukan stegano menggunakan algoritma End of File (EoF) memanfaatkan citra bitmap sebagai penampung pesan. Penyisipan pesan dengan algoritma EoF dilakukan setelah akhir Byte citra bitmap, tetapi file stego yang dihasilkan masih memiliki kelemahan, adapun kelemahan yang dihasilkan yaitu terjadinya peningkatan ukuran file dan munculnya garis – garis tambahan pada baris paling bawah citra stego. Kelemahan file stego yang dihasilkan dari algoritma EoF secara visual manusia kualitas citra sangat jelas terlihat mengalami perubahan sehingga dapat mencurigakan bagi pengguna lain. Penelitian ini bermaksud memodifikasi penyisipan pesan pada algoritma EoF memanfaatkan citra bitmap 24 bit sebagai media digital untuk memanpung pesan. Modifikasi terletak pada teknik menyisipkan pesan, modifikasi ini dilakukan dengan menyisipkan pesan pada padding citra bitmap. Padding adalah Byte kosong pada perangkat penyimpanan yang sudah dipakai oleh file namun ruang Byte penyimpanan tersebut tidak digunakan seluruhnya untuk menyimpan data citra. Pesan yang akan disisipkan adalah karakter ASCII yang telah dienkripsi menggunakan algoritma Rijndael. Hasil modifikasi algoritma EoF selanjutnya disebut dengan algoritma MEoF (Modifikasi End of File). Hasil pengujian kualitatif menunjukkan penyisipan pesan dengan algoritma MEoF dan MLSB secara visual manusia kualitas citra stego masih tampak seperti citra aslinya. Sedangkan dengan algoritma EoF kualitas citra mengalami perubahan. Hasil pengujian kuantitatif noise yang dihasilkan algoritma MEoF lebih baik dibandingkan dengan algoritma EoF, tetapi tidak selalu lebih baik dari MLSB. Selain itu dengan kondisi Byte citra tidak dominan algoritma MEoF kemampuan penyisipan pesan lebih besar dibandingkan MLSB. Kata kunci : Algoritma MEoF, Padding, Citra stego.
xiv
ABSTRACT MEoF ALGORITHM (MODIFICATION END of FILE) FOR STEGANOGRAPHY ON 24-BIT BITMAP IMAGE By THOMAS EDYSON TARIGAN 11/324230/PPA/03667
Information in the form of messages, can be encoded and inserted into digital media. Techniques to hide or insert the message is called steganography. Steganography is the art and science of hiding information so that confidential information can not be known by others, except the sender and the recipient. Many ways have been made to secure information from parties who are not responsible, one of which did stegano using End of File (EoF) algorithms utilize bitmap image as a container for messages. EoF message insertion algorithm made after the end Byte of bitmap image, but the resulting stego file using EoF algorithm still has weaknesses, which is the increase in file size and appearance of an extra line on the bottom line stego image. Visually downside of stego file generated by using EoF algorithms is on the quality of the visible image. This study aims to modify the EoF algorithm message insertion utilizes a 24-bit bitmap image as a digital media to accommodate the message. Modification of the technique lies in the insert message, modifications carried out by inserting the message on the bitmap image padding. Padding is empty Byte storage device that has been used by the file yet Byte storage space is not used entirely for storing image data. The message that will be inserted is the ASCII character that has been encrypted using the Rijndael algorithm. Results EoF algorithm modifications hereinafter referred to MEoF algorithm (Modification End of File). Qualitative test results showed the insertion of messages with MEoF and MLSB algorithms visualy the image quality still looks like the original image. While the image quality using EoF algorithm changes. Quantitative test results showed that the noise generated by MEoF algorithm is better than the algorithm EoF, but not always better than MLSB. In addition to the condition that not dominant image Byte MEoF algorithm capable of inserting a message bigger than MLSB.
Keywords: Algorithm MEoF, Padding, Stego Image.
xv
1 BAB I PENDAHULUAN
1.1
Latar Belakang Sejak zaman dahulu, pentingnya kerahasiaan suatu informasi telah
menjadi suatu perhatian tersendiri. Manusia berusaha mencari cara bagaimana merahasiakan informasi terhadap pihak yang dianggap tidak berhak untuk mengetahuinya. Berbagai cara telah dilakukan oleh bangsa – bangsa kuno untuk merahasiakan informasi, karena informasi yang jatuh ke orang yang tidak berhak akan menimbulkan kerugian. Sebagai contoh Julius Caesar, kaisar romawi, telah menggunakan suatu metode untuk mengacak pesan sebelum pesan itu dikirimkan kepada penerimanya. Tujuannya adalah agar orang yang tidak berhak menerima pesan tersebut tidak dapat membacanya (Ariyus, 2006). Teknik penyandian ini dikenal dengan istilah kriptografi (Rafiudin, 2002). Rafiudin (2002) memaparkan kriptografi dapat diartikan sebagai ilmu dan seni penulisan rahasia terhadap informasi-informasi. Kriptografi disebut ilmu (science) karena menggunakan matematika aljabar dan disebut seni (art) karena dalam aplikasinya memiliki pola – pola tertentu dalam proses penyandian yang unik (Setiawan, 2009). Hingga era digital saat ini, kriptografi sangat dibutuhkan dan merupakan bagian penting dari sistem komunikasi modern. Zaman sekarang informasi tidak hanya dapat disandikan, tetapi dapat juga disisipkan kedalam media digital. Teknik menyisipkan pesan dikenal dengan nama steganografi. Atoum dan Ibrahim (2012) memaparkan steganografi sebagai ilmu dan seni untuk menyembunyikan informasi sehingga informasi yang bersifat rahasia tidak dapat diketahui oleh orang lain, kecuali pengirim dan penerima. Proses steganografi biasanya melibatkan penyandian atau kriptografi. Proses yang dilakukan yaitu dengan enkripsi plaintext terlebih dahulu menjadi Byte cipher atau pesan rahasia. Kemudian Byte cipher disisipkan pada media digital berupa teks, audio, citra atau protokol.
1
2
Media digital yang akan diangkat sebagai penampung pesan pada penelitian ini yaitu berupa citra digital dengan format bitmap 24 bit. Penelitian ini berasumsi bahwa pada citra digital berformat bitmap 24 bit terdapat Byte kosong pada perangkat penyimpanan yang sudah dipakai oleh file namun ruang Byte penyimpanan tersebut tidak digunakan seluruhnya untuk menyimpan data citra. Byte tersebut dikenal juga dengan istilah padding. Salah satu algoritma yang digunakan untuk menyisipkan pesan pada citra adalah algoritma End of File (EoF). Wasino et al. (2012), menyatakan algoritma End of File dilakukan dengan cara menambahkan pesan pada bagian akhir Byte data citra yang menjadi media penampung. Karakteristik dari algoritma EoF adalah terjadinya perubahan ukuran file pada citra stego karena ukuran file citra asli akan ditambahkan dengan panjang pesan, selain itu juga memunculkan garis – garis tambahan pada baris paling bawah dari citra stego. Citra yang telah disisipi pesan disebut dengan citra stego. Selain algoritma EoF, ada beberapa algoritma lain yang dapat digunakan untuk steganografi, yaitu Least Significant Bit Insertion (LSB), Redundant Pattern Encoding, Spread Spectrum dan Transformation, keunggulan algoritma lain dibandingkan EoF yaitu, ukuran file citra stego yang dihasilkan dari algoritma LSB tidak mengalami perubahan, begitu juga dengan modifikasi LSB kualitas citra stego tidak jauh berubah dari citra asli, tetapi LSB mudah diserang dalam pemrosesan citra, seperti cropping dan compression. Berbeda dengan LSB, algoritma Redundant Pattern Encoding memiliki keunggulan pada ketahanan terhadap cropping pada file stego, tetapi kemampuan menyisipkan pesan lebih sedikit. Jika dibandingkan dengan algoritma Spread Spectrum maka keunggulan algoritma ini ada pada teknik penyisipan pesan, teknik menyisipkan pesan pada Byte media digital dilakukan secara terpencar sehingga untuk ekstraksi membutuhkan crypto-key dan stego-key, sehingga keamanan pesan lebih aman dan sulit terdeteksi karena informasi yang disembunyikan disebarkan dalam seluruh gambar tanpa mengganti properti statistik dari gambar yang disisipi informasi rahasia (Vembrina, 2006), sedangkan kompleksitas dalam proses perhitungan menjadi kelemahan algoritma ini. Selanjutnya jika dibandingkan
3
dengan algoritma Transformation maka pesan disisipkan ke media penampung menggunakan fungsi matematika, fungsi tersebut adalah Discrete Cosine Transformation (DCT) dan Wavelet Transformation. Fungsi DCT dan Wavelet yaitu mentransformasi data dari satu tempat (domain) ke tempat (domain) yang lain. Fungsi DCT yaitu mentransformasi data dari tempat spatial (spatial domain) ke tempat frekuensi (frequency domain). Dari beberapa algoritma yang dibandingkan diatas maka algoritma EoF dianggap perlu diteliti lebih lanjut, karena algoritma ini mampu menyisipkan pesan dengan kapasitas cukup besar, tetapi kemampuan tersebut dapat menjadi kelemahan dibandingkan dengan algoritma lainnya, karena citra stego yang dihasilkan mengalami peningkatan ukuran file yang berdampak terhadap perubahan kualitas citra stego yang dihasilkan. Untuk mengatasi kelemahan ini maka perlu suatu modifikasi terhadap algoritma EoF yang bertujuan memperbaiki teknik menyisipkan pesan. Teknik yang digunakan dalam modifikasi ini adalah memanfaatkan padding pada citra bitmap 24 bit untuk menyisipkan pesan, sehingga dengan teknik ini maka peningkatan ukuran file dan kualitas citra stego yang dihasilkan tidak jauh berubah dengan citra asli. Berdasarkan pemaparan diatas, penelitian ini berusaha memodifikasi algoritma End of File (Modifikasi End of File / MEoF) yang diterapkan pada citra bitmap 24 bit sebagai media penampung pesan. Hasil dari pengujian algoritma MEoF dibandingkan dengan dengan pengujian dari algoritma EoF dan MLSB, untuk mengetahui kelemahan dan kelebihan dari algoritma MEoF. Adapun yang akan dibandingkan adalah kualitas citra stego, panjang pesan yang mampu disisipkan dan perubahan ukuran file citra stego dari masing – masing algoritma. Algoritma End of File (EoF) dan Modifikasi Least Significant Bit (MLSB) dipilih sebagai perbandingan algoritma MEoF karena algoritma ini merupakan perbaikan dari algoritma End of File (EoF) dan algoritma EoF sendiri merupakan pengembangan dari algoritma LSB, sementara menurut Jhoni et al. (2012), bahwa steganografi dengan algoritma Least Significant Bit (LSB) paling umum dilakukan.
4
1.2
Rumusan Masalah Berdasarkan latar belakang diatas, maka rumusan masalah dalam
penelitian ini adalah : Apakah dengan citra bitmap 24 bit dan algoritma MEoF (Modifikasi End of File) kelemahan dari algoritma End of File (EoF) yaitu peningkatan ukuran file yang berdampak terhadap perubahan kualitas citra stego jika dibandingkan dengan citra asli dapat teratasi.
1.3
Batasan Masalah Untuk mendapatkan hasil seperti yang diharapkan dan penelitian yang
lebih terarah, maka perlu ada batasan permasalahan dalam penelitian ini, adapun batasannya sebagai berikut, 1. Pesan yang disembunyikan adalah karakter ASCII yang dienkripsi menggunakan algoritma Rijndael. 2. Media digital untuk penyisipan pesan menggunakan citra bitmap 24 bit dengan satuan piksel.
1.4
Tujuan Penelitian Adapun tujuan dari penelitan ini yaitu melakukan penyisipan pesan
menggunakan algoritma MEoF pada citra 24 bit, kemudian hasil citra stego diuji secara kualitatif dan kuantitatif kemudian dibandingkan dengan hasil pengujian citra stego dari algoritma EoF dan MLSB untuk mengetahui kelebihan dan kekurangan algoritma MEoF.
1.5
Manfaat Penelitian Manfaat dari penelitian ini yaitu :
1.
Menghasilkan algoritma alternatif dalam steganografi yang memanfaatkan citra bitmap 24 bit sebagai media penampung pesan.
2.
Algoritma yang dihasilkan dapat dijadikan sebagai acuan untuk pengembangan teknik steganografi.
5
1.6
Metodologi Penelitian Langkah-langkah untuk melakukan penelitian ini :
1. Studi literatur dan pengumpulan data a. Studi kepustakaan Pada tahap ini mempelajari sumber yang tertulis seperti buku teks, jurnal, dan karya ilmiah, e-book, tugas akhir dan media online yang berkaitan dengan steganografi khususnya yang berkaitan dengan algoritma MEoF (Modifikasi End of File) dan algoritma MLSB (Modifikasi Least Significant Bit) sehingga dapat menunjang penelitian ini. b. Pengumpulan data Mengumpulkan data yang dibutuhkan berupa algoritma End of File (EoF) dan algoritma Least Significant Bit (LSB) serta citra bitmap yang digunakan untuk pengujian. 2. Perancangan sistem Pada tahap ini memodelkan algoritma MEoF (Modifikasi End of File) dalam bentuk flowchart untuk menggambarkan proses yang terjadi. 3. Implementasi Hasil rancangan diimplementasikan ke dalam aplikasi steganografi yang memiliki kemampuan menyisipkan pesan pada padding citra bitmap. Algoritma EoF memiliki kemampuan menyisipkan pesan pada akhir Byte citra dan algoritma MLSB memiliki kemampuan untuk menyisipkan bit – bit pesan pada Byte citra bitmap yang bernilai 254 atau 255. Selain itu memiliki kemampuan untuk ekstraksi pesan dari citra stego masing – masing algoritma. 4. Pengujian Tahap ini akan membahas hasil pengujian penyisipan dan ekstraksi pesan pada citra menggunakan algoritma MEoF (Modifikasi End of File), algoritma End of File (EoF) dan algoritma Modifikasi Least Signification Bit (MLSB). Pengujian dilakukan dengan kualitatif untuk melihat perubahan kualitas citra pada citra stego pesan. Selain itu juga dilakukan pengujian kuantitatif yang berfungsi untuk menguji perubahan kualitas citra stego, ukuran file untuk kapasitas sisip citra bitmap.
6
1.7
Sistematika Penulisan Penelitian ini disusun berdasarkan sistematika penulisan sebagai berikut :
BAB I PENDAHULUAN Membahas tentang latar belakang penelitian, perumusan masalah, batasan masalah, tujuan dan manfaat penelitian, metodologi penelitian, dan sistematika penulisan. BAB II TINJAUAN PUSTAKA Bab ini membahas penelitian – penelitian yang sebelumnya pernah dilakukan dan mengusulkan penelitian yang akan dilakukan. BAB III LANDASAN TEORI Membahas landasan teori yang digunakan dalam pembahasan. BAB IV ANALISIS DAN RANCANGAN SISTEM Bab ini membahas gambaran dari analisis dan rancangan sistem. BAB V IMPLEMENTASI Bab ini membahas implementasi dari rancangan aplikasi yang diuraikan pada bab sebelumnya yang mencakup implementasi proses. BAB VI HASIL DAN PEMBAHASAN Bab ini berisi pemaparan dan membahas hasil - hasil penelitian dan implementasi sistem yang telah dirancang. BAB VII. KESIMPULAN DAN SARAN Membahas kesimpulan dari penelitian dan saran untuk penelitian selanjutnya.
2 BAB II TINJAUAN PUSTAKA
Penelitian tentang steganografi memanfaatkan media digital dengan berbagai algoritma sebelumnya telah banyak dilakukan. Edisuryana et al. (2013) pada penelitiannya menggunakan algoritma End of File (EoF) dan kriptografi untuk steganografi dan citra bitmap sebagai media penanpung pesan yang terenkripsi. Sebelumnya Wasino et al. (2012) dan Cruz et. al. (2012) juga melakukan penelitian tentang steganografi dengan algoritma EoF, tetapi memanfaatkan media digital video yang berekstensi FLV sebagai penampung pesan. Hasil dari penelitian menunjukkan bahwa file stego dijalankan kembali akan tetap mempertahankan kualitas audio dan video seperti awal tanpa ada distorsi, tetapi secara signifikan akan meningkatkan ukuran file stego, peningkatan ukuran file tergantung pada besarnya panjang pesan yang disisipkan. Sebelumnya dalam penelitian Sejati (2010) dengan algoritma yang sama, melakukan penyisipan pesan pada DOS. Pembacaan file berbasiskan DOS dilakukan dengan membaca file hingga karakter Ctrl-Z yang dapat disebut elemen dari EoF. Prinsip penggunaan Ctrl-Z ini adalah pembatas antara covertext (media sampul) dengan pesan rahasia yang disisipkan. Jadi apabila membuka file teks dengan binary pada DOS kemudian kita gabungkan dengan sebuah teks secara eksplisit setelah Ctrl-Z, maka pesan tersebut akan tersembunyi dibelakang EoF. Steganografi pada DOS ini akan membaca seluruh karakter file di sampul media kemudian menulis karakter EoF setelah Ctrl-Z. Dari hasil penelitian yang telah dilakukan sebelumnya bahwa algoritma EoF dapat digunakan untuk menyisipkan pesan pada media digital, tetapi hasil pada baris paling bawah file stego akan muncul garis – garis baru. Semakin banyak pesan yang disisipkan maka semakin tampak jelas garis pada akhir citra stego, secara visual ini berdampak terhadap kualitas akhir citra stego dan ukuran citra stego karena ukuran file mengalami peningkatan dari ukuran file citra asli,
7
8
selain itu algoritma EoF menggunakan penanda pada akhir file sehingga dapat dengan mudah dideteksi. Selain End of File (EoF) algoritma lain yang digunakan untuk steganografi yaitu algoritma Least Significant Bit (LSB). Pada algoritma LSB, kelemahan algoritma EoF berupa garis – garis baru pada akhir citra stego tidak terjadi. Proses menyisipkan pesan dengan algoritma Least Significant Bit (LSB) dilakukan dengan cara bit pesan disisipkan pada setiap bit terendah setiap Byte media penampung. Warsito et al. (2012) dalam penelitiannya melakukan perbandingan algoritma End of File (EoF) dan Least Significant Bit (LSB) untuk menyisipkan data dalam berbagai format data dengan ekstensi yang berbeda. Data yang disisipkan berupa pesan atau kode untuk melakukan verifikasi keaslian dari sebuah sertifikat online yang disisipkan pada file sertifikatnya. Penelitian ini menggunakan teknik kriptografi untuk melakukan enkripsi file sertifikat kemudian hasil enkripsi berupa file cipher disimpan dalam media penampung. Adapun hasil dari penelitian ini bahwa algoritma Least Significant Bit (LSB) memiliki kelebihan pada ukuran file stego yang tidak mengalami perubahan sedangkan End of File (EoF) panjang pesan sangat berpengaruh terhadap peningkatan ukuran file stego. Sehingga dapat disimpulkan dari kedua algoritma ini jika ditinjau berdasarkan ukuran file stego maka Least Significant Bit (LSB) lebih baik karena tidak mengalami peningkatan. Penelitian perbandingan algoritma LSB dan EoF untuk steganografi sebelumnya juga telah dilakukan oleh Aditya et al. (2010) penelitian yang dilakukan dengan studi pustaka pada beberapa algoritma di antaranya algoritma Least significant Bit (LSB) dan End of File (EoF) menghasilkan kesimpulan bahwa penyisipan pesan ke media penampung dengan algoritma Least Significant Bit (LSB) dapat dilakukan dengan kondisi ukuran file pesan harus lebih kecil dari ukuran file media penampung sedangkan penyisipan pesan dengan algoritma End of File (EoF) ukuran file pesan dapat lebih besar dari ukuran file media penampung. Selain itu dengan algoritma LSB media penampung yang telah disisipi pesan (hidden text) ukuran file stego tidak mengalami perubahan tetapi berpengaruh terhadap kualitas file stego. Sedangkan algoritma EoF, kualitas file
9
stego setelah di sisipi pesan tidak berubah, tetapi akan mengubah ukuran file stego. Dengan demikian algoritma LSB maupun EoF keduanya memiliki kelebihan dan kelemahan tersendiri. Beberapa peneliti melakukan modifikasi terhadap algoritma Least Significant Bit (LSB) untuk mengurangi kelemahan algoritma ini. Gupta et al. (2012) melakukan modifikasi Least Significant Bit (LSB) untuk meningkat kompleksitas waktu proses secara keseluruhan, skema yang digunakan dengan enkripsi pesan sebelum disisipkan ke dalam citra. Modifikasi yang dilakukan pada sejumlah bit yang akan disisipi pesan mulai dari bit ke 1, 2, 3 dan 4. Kemudian hasilnya dibandingkan dengan citra dari algoritma kriptografi RSA dan Diffie Hellman. Perbandingan dilakukan dilakukan dengan mengukur perubahan ukuran file dan kualitas file citra stego. Hasil dari penelitian menyatakan bahwa algoritma LSB memiliki kemudahaan untuk menyisipkan pesan dan hasil ekstraksi citra stego juga mudah untuk di deskripsi. Selain itu algoritma LSB juga meningkatkan kompleksitas waktu secara keseluruahan untuk melakukan enkripsi pesan yang akan disisipkan. Penelitian yang dilakukan oleh Edisuryana et al. (2013), Wasino et al. (2012), Warsito et al. (2012) dan Gupta et al. (2012) semuanya dilakukan terhadap media citra sebagai penampung pesan. Menurut penelitian Joshi et al. (2013), yang melakukan steganografi menggunakan algoritma LSB mengatakan bahwa citra bitmap 24 bit merupakan media penampung yang terbaik untuk menyisipkan pesan, karena citra bitmap 24 bit berkualitas dan beresolusi tinggi sehingga lebih mudah untuk menyisipkan pesan. Meskipun ukuran file citra bitmap 24 bit berukuran lebih besar dan dapat menimbulkan kecurigaan bagi pengguna lain, tetapi dengan ukuran file yang besar maka semakin banyak pesan yang dapat disisipkan. Proses yang dilakukan bit - bit pesan akan disisipi pada tiap – tiap bit terendah dari Byte piksel citra, setiap piksel akan menyimpan 3 bit pesan. Begitu juga penelitian yang telah dilakukan oleh Poornima dan Iswarya (2013) menggunakan citra digital untuk steganografi dengan algoritma Least Significant Bit (LSB). Hasil dari penelitiannya disimpulkan bahwa algoritma LSB
10
sangat sensitif terhadap filtering, perubahan ukuran, dan pemotongan citra karena dapat merusak pesan. Dalam penelitiannya Poornima dan Iswarya (2013) juga menyatakan bahwa format citra bitmap cocok dan efisien sebagai media steganografi karena gambar bitmap sudah berkualitas baik dan resolusi tinggi sehingga informasi yang tersembunyi tidak terlalu rentan terhadap mata manusia. Saat ini ukuran citra 800 x 600 piksel dapat digunakan untuk menyimpan hingga 1,440,000 bit atau 180.000 Byte informasi. Penggunaan LSB pada citra dengan resolusi tinggi ini membuat hasil dari citra stego hampir sama dengan citra aslinya dan tidak dapat terdeteksi oleh mata manusia. Untuk mengukur kualitas citra stego dapat dilakukan dengan menghitung nilai Mean Square Error (MSE) dan Peak Signal to Noise Ratio (PSNR). Male et al. (2012) telah melakukan penelitian yang bertujuan mengevaluasi kualitas citra stego dengan penilaian secara obyektif dengan cara menghitung nilai Mean Square Error (MSE) dan Peak Signal to Noise Ratio (PSNR). Steganografi citra pada penelitian ini bertujuan untuk mengamankan data dalam penerapan e-government dengan menggunakan algoritma Random Pixel Positioning (RPP). Male et al. (2012) menyisipkan file yang berekstensi *.docx, *.xlsx, *.txt, dan *.pdf pada media citra yang bertipe bitmap. Hasil penyisipan pesan menggunakan algoritma Random Pixel Positioning (RPP) untuk penyembunyian pesan pada citra bitmap sangat baik sehingga tidak terlihat oleh sistem penglihatan manusia pada umumnya. Perhitungan MSE pada citra stego diperoleh nilai yang cukup rendah, kemudian untuk PSNR diperoleh nilai yang cukup besar. Hal ini menunjukkan bahwa algoritma Random Pixel Positioning (RPP) sangat baik dan secara keseluruhan hasil kualitas citra stego untuk aplikasi e-government tetap baik. Berdasarkan kelemahan – kelemahan algoritma yang dilakukan oleh penelitian sebelumnya, maka pada penelitian ini dilakukan pengembangan dengan cara memodifikasi algoritma yang telah digunakan sebelumnya. Pengembangan yang dilakukan yaitu memodifikasi algoritma End of File sebagai teknik untuk melakukan penyisipan pesan. Sebagai pembanding dari hasil penelitian ini digunakan algoritma EoF dan Modifikasi Least Significant Bit (MLSB).
11
Berdasarkan penelitian yang telah dilakukan sebelumnya, penelitian ini memiliki kesamaan dalam domain permasalahan, tetapi memiliki perbedaan dalam konsep penyelesaian masalah. Perbedaan terletak pada algoritma yang digunakan dalam penyelesaian masalah. Penelitian ini berusaha mengembangankan algoritma yang sudah dilakukan pada penelitian sebelumnya dengan cara memodifikasi algoritma yang telah diimplementasikan. Kemudian menganalisis hasil citra stego terhadap citra asli dengan cara membandingkan hasil pengujian kualitatif dan kuantitatif. Pengujian kualitatif dilakukan dengan cara subyektif untuk melihat perubahan kualitas citra stego, sedangkan kuantitatif secara obyektif untuk melihat perubahan kualitas citra stego berdasarkan noise yang dihasilkan. Noise diperoleh dari kalkulasi nilai Mean Square Error (MSE) dan Peak Signal to Noise Ratio (PSNR). Selain itu untuk pengujian kuantitatif juga dilakukan perbandingan untuk panjang pesan yang dapat disisipkan pada citra bitmap dan perubahan ukuran file citra stego dari citra asli dari masing – masing algoritma. Rangkuman perbedaan penelitian yang akan dilakukan dengan penelitian sebelumnya ditunjukkan pada Tabel 2.1.
Tabel 2.1 Perbandingan penelitian yang sebelumnya No
1
2
Peneliti Edisuryana al. (2013)
Wasino (2012)
Langkah Pendekatan et
et al.
3
Cruz et (2012)
4
Sejati (2010)
al.
Kekurangan
Fokus Penelitian
End of File (EoF), Caesar Cipher, Zigzag Cipher
Menghasilkan garis baru pada baris akhir citra dan ukuran citra semakin besar.
Mengkombinasikan End of File, Caesar Cipher dan Zig-Zag Cipher untuk pengamanan data pada citra bitmap.
End of File, Rijndael
a. Tidak adanya validasi untuk kunci dekripsi. b. Semakin banyak pesan maka ukuran citra semakin besar.
Mengkombinasi algoritma End of File dengan algoritma Rijndael untuk pengamanan data, kemudian menguji citra dengan membandingkan ukuran citra sesudah dan sebelum disisipi pesan.
End of File
a. Data pesan yang disisipkan ke file video tidak dienkripsi sehingga pesan kurang aman. b. Tidak ada pengujian kuantitaf untuk menghitung nilai noise dari file stego.
Penelitian ini mengimplementasikan algoritma End of File pada file video yang berekstensi FLV.
End of File, Dynamic Cell Spreading
Tidak menbahas proses ekstraksi data pesan pada file stego.
Melakukan perbandingan dari sisi keamanan data pesan yang disisipkan pada file stego.
12
Tabel 2.1 (lanjutan) No
Peneliti
Langkah Pendekatan
Memperkenalkan dasar dan konsep algoritma Least Significant Bit dengan melakukan pengujian citra menggunakan PSNR.
6
Poornima dan Iswarya (2013)
Least Significant Bit (LSB), Discrete Cosine Transform (DCT)
Gupta (2012)
Least Significant Bit (LSB), algoritma RSA, Algoritma Diffie Hellman
Pengukuran kualitas dijabarkan secara jelas.
Male et (2012)
Random Pixel Positioning (RPP) Mean Square Error (MSE) dan Peak Signal to Noise Ratio (PSNR).
Tidak ada enkripsi untuk data yang disisipkan dan kapasitas penyisipan data pada citra tidak dijabarkan dengan jelas.
Mengukur efektifitas dari algoritma Random Pixel Positioning (RPP) dengan perhitungan nilai MSE dan PSNR
Least Significant (LSB) End of File (EoF)
a. LSB mengurangi kualitas citra setelah terstego dari citra asli. b. Untuk EoF ukuran file lebih besar dari sebelum disisipi pesan.
Pemanfaatan kriptografi dan steganografi untuk membentuk citra stego terhadap data sertifikat yang diterbitkan oleh perguruan tinggi untuk membuktikan keaslian sertifikat dilakukan dengan melakukan validasi.
9
al.
Warsito et al. (2012)
Bit
a. Tidak adanya enkripsi untuk plaintext. b. Kualitas citra mengalami perubahan dari citra asli. a. Algoritma untuk enkripsi datanya tidak jelas. b. Penambahan ekstra noise pada citra dapat merusak isi pesan.
Joshi (2013)
8
Least Significant (LSB)
Fokus Penelitian
5
7
et al.
Kekurangan
Bit
citra
tidak
Melakukan perbandingan antara algoritma Least Significant Bit dengan Discrete Cosine Transform pada citra bitmap 24 bit. Membandingkan hasil ukuran dan perubahan citra sebagai media penampung dengan menyisipi pesan menggunakan algoritma Least Significant Bit (LSB) menggunakan RSA dan Diffie Hellman.
13
Tabel 2.1 (lanjutan) No
10
11
Peneliti
Aditya (2010)
et
al.
Tarigan (2014)
Langkah Pendekatan
Kekurangan
Fokus Penelitian
Least Significant Bit (LSB) dan End of File (EoF).
a. Pada LSB kualitas citra mengalami perubahan dibandingkan citra asli. b. Pada EoF file image akan terlihat berbeda dengan aslinya, adanya penanda khusus yang terlihat pada akhir dari file image berupa garis – garis. c. Tidak ada pengukuran kualitas citra setelah melakukan steganografi.
Melakukan studi pustaka untuk menganalisis algoritma mana yang lebih efektif antara algoritma LSB dan EoF untuk melakukan steganografi, yang bertujuan untuk mengembangkan sistem steganografi.
?
Implementasi algoritma MEoF untuk keamanan pesan karakter ASCII dengan cara menyisipkan pesan pada padding citra bitmap 24 bit. sebagai pembanding digunakan algoritma EoF, MLSB, adapun yang dibandingkan adalah kualitas citra stego yang diukur menggunakan Peak Signal to Noise Ratio (PSNR), jumlah karakter ASCII yang mampu disisipkan pada citra untuk masing - masing algoritma dan perubahan ukuran file citra stego.
End of File Modification, Least Significant Bit Modification, Rijndael
14
3 BAB III LANDASAN TEORI
3.1
Steganografi Steganografi berasal dari bahasa Yunani yaitu steganos, yang artinya
“tersembunyi atau terselubung” dan graphein artinya “menulis”. Steganografi didefinisikan oleh (Cachin, 2005) adalah seni dan ilmu untuk berkomunikasi dengan cara menyembunyikan informasi sehingga informasi tidak dapat terdeteksi oleh pihak lain (indra manusia). Teknik steganografi telah digunakan selama ratusan tahun. Dengan meningkatnya penggunaan file dalam format elektronik, maka teknik baru untuk menyembunyikan informasi menjadi sesuatu yang mungkin untuk dilakukan. Steganografi dan kriptografi keduanya digunakan untuk menjamin kerahasian data. Tetapi perbedaan utama dari keduanya adalah dengan kriptografi, komunikasi kedua belah pihak yang bersifat rahasia lebih rentan dapat diketahui oleh setiap orang, sedangkan dengan steganografi pesan disembunyikan keberadaannya dalam media digital sehingga pesan menjadi lebih terlindungi, dalam steganografi kasus yang terbaik adalah tidak ada yang bisa melihat bahwa telah terjadi komunikasi antara kedua pihak tanpa ada yang bisa melihat (Cummins et al. 2004). Steganografi dapat dibedakan berdasarkan tujuannya menjadi 2 bagian yaitu data hiding/data embedding dan document marking. Data hiding adalah menyembunyikan informasi rahasia di dalam media digital, sedangkan document marking adalah pemberian tanda untuk media digital. Document marking terbagi menjadi dua bagaian yaitu, watermarking dan fingerprinting keduanya berfungsi untuk menyembunyikan identifikasi yang unik sebagai suatu watermark pada data untuk mengidentikasi copy legal dari suatu dokumen. Gambar 3.1 menunjukkan penggolongan steganografi.
15
16
Steganography (Covered writing, coverd channels)
Protection against detection
Protection against removal (document marking)
(data hiding)
Fingerprinting
Watermarking
(identify all object, every object is marked specific)
(all objects are marked in the same way )
Gambar 3.1 Penggolongan steganografi berdasarkan tujuan (Cummins, 2004) Secara garis besar metode Steganografi terdiri dari 2 bagian utama, yaitu proses penyembunyian data (hidden message) dan proses pengembalian data ke bentuk semula (reveal message). Kedua proses ini dilakukan dengan menggunakan kunci rahasia (secret key) yang akan digunakan di dalam prosesnya untuk meningkatkan keamanan data yang disisipkan pada citra digital. Gambar 3.2
menunjukkan diagram sistem steganografi pada media digital. Pengirim
Penerima Kunci (k) Penanda pesan (p)
Kunci
k,p
k (m)
Byte pesan
m
X Sisip
Stego object (0)
X
Cover
Ekstrak
m
Pesan rahasia
p Penanda pesan
Gambar 3.2 Diagram sistem steganografi (Bohme, 2010) Beberapa standar terminologi yang digunakan pada steganografi (Ruid, 2007) mengatakan : 1. Cover Medium, adalah data atau media yang akan digunakan sebagai tempat informasi rahasia di sembunyikan.
17
2. Stego Medium atau stego data, adalah data atau media yang telah berisi informasi rahasia. 3. Message, adalah pesan atau informasi rahasia. 4. Redundant bits, adalah bit – bit data dari cover medium yang dapat di modifikasi. Pada teknologi komunikasi, cover medium merupakan data yang umum dikirimkan, bisa berupa teks, gambar, audio dan video, pada konsep baru dari steganografi atau biasa disebut network steganography yaitu menggunakan kontrol komunikasi protokol, elemen atau fungsi dasar telekomunikasi sebagai cover medium.
3.2
File Bitmap
3.2.1 Format file bitmap 24 bit Pada model warna RGB setiap titik pada layar monitor berisi angka yang menunjukkan intensitas yang dipilih pada suatu tabel warna RGB. Jadi pada setiap titik dapat dipilih salah satu warna dari RGB. Gambar 3.3 menunjukkan tabel warna RGB pada bitmap 24 bit per-piksel.
Gambar 3.3 Tabel warna RGB pada bitmap 24 bit/piksel (Rogerson, 1995) Warna dari tabel RGB memiliki 3 buah warna kombinasi warna yaitu Red,Green, Blue yang menentukan proporsi warna merah, hijau, biru dari warna tersebut. Warna di tabel yang dapat dipilih untuk mengisi warna pada sebuah piksel adalah 256 x 256 x 256 = 16,7 juta warna. Secara umum, file bitmap 24 bit mempunyai kedalaman warna sebanyak 24 bit per piksel.
18
Menurut Dutton (2007), secara teori untuk menghitung ukuran citra bitmap 24 bit, jika hasil perkalian ukuran width di kali Byte per piksel modulo 4 = 0 maka dalam Byte ukuran file citra dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
Sedangkan untuk ukuran citra bitmap 24 bit, jika hasil perkalian ukuran width dengan Byte per piksel modulo 4 ≠ 0 maka dalam Byte ukuran file citra dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
dimana : width adalah ukuran width citra (dalam piksel). height adalah ukuran height citra (dalam piksel). Number of bytes for each pixel adalah jumlah Byte warna yang digunakan dalam piksel.
3.2.2
Header dan struktur file bitmap Header citra bitmap adalah data yang terdapat pada bagian awal berkas
citra. Data header berfungsi untuk mengetahui bagaimana citra dalam format bitmap dikodekan dan disimpan. Header bitmap berisi informasi tentang jenis, ukuran, dan tata letak perangkat file bitmap. Header didefinisikan sebagai struktur Bitmapfileheader. Mengacu pada Tabel 3.1 adalah informasi header pada file bitmap. Informasi
header
bitmap,
didefinisikan
sebagai
struktur
Bitmapinfoheader, menentukan dimensi, tipe kompresi, dan format warna untuk bitmap. Mengacu pada struktur Bitmapinfoheader, maka Tabel 3.2 memberikan informasi struktur header pada file bitmap.
19
Alamat 1 3 7 9 11
Tabel 3.1 Informasi header bitmap (Meyyappan et al., 2011) Ukuran Nilai Nama Keterangan (Byte) Standar 2 bfType 19778 ASCII=’BM’ 4 bfSize ?? Ukuran file bmp (Bytes) 2 bfReaseved1 0 Tidak digunakan 2 bfReserved2 0 Tidak digunakan Posisi Byte dimana 4 bfOffBits 1078 gambar berada Tabel 3.2 Struktur header bitmap (Meyyappan et al., 2011)
Alamat 15 19 23 27 29 31 35 39 43 47 51
3.2.3
Ukuran Nilai Nama Keterangan (Byte) Standar 4 biSize 40 Ukuran dari info dalam Byte 4 biwidth 100 Lebar gambar dalamPiksel 4 biHeight 100 Tinggi gambar dalam piksel 2 biPlanes 1 Jumlah bidang gambar 2 biBitcount 8 Jumlah bit per piksel 4 biCompression 0 Jenis kompresi 4 bisizeImage 0 Ukuran data gambar 4 biXPelsPerMeter 0 Resolusi horizontal piksel meter 4 biYPelsPerMeter 0 Resolusi vertikal piksel meter 4 biClrUsed 0 Jumlah warna yang digunakan 4 biClrImportant 0 Jumlah warna
Data piksel Miano (1999) mengatakan bahwa ukuran width dan height data pada citra
bitmap 24 bit diinformasikan oleh struktur header bitmap yaitu tinggi gambar (biHeight) dan lebar gambar (biWidth) dalam satuan piksel. Sedangkan ukuran Byte per indeks height merupakan pembulatan kelipatan empat yang dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
20
Format file bitmap 24 bit yang diikembangkan oleh Microsoft menggunakan model warna RGB. Pada model warna RGB, warna yang ditampilkan di layar monitor disusun oleh tiga buah warna primer, yaitu Red (merah), Green (hijau), Blue (biru).
3.2.4
Metode lockbits / unlockbits untuk akses data citra Powell, (2003) mengatakan Unlockbit merupakan class bitmap yang
berfungsi untuk mengganti bagian data piksel Array bitmap dalam memori. Mengaksesnya secara langsung dan mengganti bit pada bitmap dengan data yang dimodifikasi, sementara lockbit adalah class BitmapData yang menggambarkan tata letak posisi data dalam Array yang terkunci. Class BitmapData berisi properties berikut, a. Scan0 adalah alamat tetap dalam memori dari data Array. b. Stride adalah width dalam satuan Byte dari satu baris data piksel. c. PixelFormat adalah Format piksel sebenarnya dari data. Hal ini penting untuk menemukan Byte yang tepat. d. Width adalah lebar gambar terkunci. e. Height adalah ketinggian gambar terkunci. Gambar 3.4 menunjukkan hubungan Scan0 dan stride ke Array dalam memori. Stride Scan0
Height Padding Width
Gambar 3.4 Hubungan scan0 dan stride ke array dalam memori (Powell, 2003) Sistem operasi mengatur alokasi ukuran Byte setiap satu baris width citra bitmap 24 bit, Byte data yang dimasukkan ke width dimulai dari alamat pertama
21
data piksel citra, alamat pertama tersebut ditunjukkan oleh Scan0. Penyimpanan Byte citra pada memori dilakukan dengan cara kelipatan 4 Byte sampai ke stride untuk ukuran width citra modulo 4 = 0. Untuk ukuran width citra modulo 4 ≠ 0 maka pada memori akan terdapat padding. Padding terjadi karena adanya Byte kosong pada perangkat penyimpanan yang tidak digunakan seluruhnya untuk menyimpan Byte citra. Byte citra tersebut disimpan dalam Array pada memori.
3.3
Algoritma End of File (EoF) End of File adalah salah satu algoritma yang dapat digunakan dalam
steganografi, algoritma ini melakukan penyisipan pesan dengan teknik pesan akan disisipkan pada akhir file media penampung. Dengan algoritma ini pesan dapat disisipkan sesuai dengan kebutuhan. Cruz et al. (2012) mengatakan algoritma EoF dikenal sebagai algoritma injeksi, teknik ini secara langsung menambahkan pesan pada akhir file. Keberhasilan algoritma injeksi menyisipkan pesan pada media penampung akan mempertahankan kualiatas media penampung. Tetapi algoritma ini secara signifikan akan mempengaruhi ukuran file stego, besarnya ukuran tergantung pada banyak pesan yang disisipkan pada media penampung. Dengan menggunakan algoritma injeksi jumlah data yang disembunyikan pada media penampung tidak memiliki batas, tetapi menyisipkan pesan dengan ukuran yang cukup besar akan dapat memunculkan kecurigaan pengguna lain, ini disebabkan oleh ukuran file stego akan menjadi besar, sehingga file stego rentan terhadap serangan terlebih pesan yang tersembunyi hanya tergantung pada algoritma EoF. Setiap blok pada sebuah file dapat di baca dengan menggunakan dua parameter, posisi awal dan panjang blok tersebut. Dengan struktur di atas, dapat di baca posisi data header yang isinya meliputi:
Posisi awal data pada file.
Panjang data pada file.
Sesuai dengan konsep algoritma End of File (EoF) pada steganografi maka penanda pesan diletakkan di awal sebelum pesan disisipkan. Gambar 3.5 menunjukkan struktur file bitmap untuk steganografi dengan algoritma EoF.
22
File Bitmap 24 bit
Data
Steganografi dengan algoritma End of File File Bitmap 24 bit
Enkripsi Data Header Data
Dekripsi
Gambar 3.5 Struktur file bitmap untuk steganografi pada algoritma EoF (Anggraini et al., 2014)
3.3.1
Penyisipan pesan dengan algoritma EoF Citra bitmap dapat digunakan sebagai media digital untuk menyisipkan
data rahasia yang berbentuk plaintext. Plaintext dapat dienkripsi menggunakan algoritma kriptografi, salah satu diantaranya algoritma Rijndael, sehingga pesan yang akan disisipkan pada citra bitmap adalah pesan yang telah dienkripsi (cipher). Penyisipan Byte cipher dengan algoritma End of File (EoF) dilakukan dengan cara Byte cipher disisipkan setelah akhir dari Byte citra bitmap. Pesan yang disisipkan pada citra bitmap diantaranya adalah Byte cipher, Byte penanda pesan dan panjang pesan yang dialokasikan sebesar 4 Byte. sebelum dilakukan penyisipan, dilakukan mengkalkulasi panjang Byte cipher dan panjang penanda pesan. Penanda pesan berfungsi untuk memastikan keberadaan Byte cipher dalam sebuah citra stego, sedangkan panjang pesan digunakan sebagai informasi ukuran Byte cipher pada citra stego. Header pesan (penanda pesan dan panjang pesan) disisipkan setelah Byte cipher selesai disisipkan pada citra hasil. Gambar 3.6 menunjukkan flowchart penyisipan pesan pada citra bitmap menggunakan algoritma EoF.
23
Mulai Masukkan citra bitmap, Penanda pesan, plaintext dan kunci enkripsi
Data masukan valid?
Tidak
Tampilkan pesan kesalahan
Ya Enkripsi plaintext
Tampung cipher Tidak
Hitung panjang byte pesan Hitung panjang byte penanda pesan Alokasikan memori buffer menanpung byte hasil Salin byte citra dan byte stegano (cipher dan header pesan)
Penyisipan berhasil? Ya Simpan byte hasil
Citra stego Selesai
Gambar 3.6 Flowchart penyisipan pesan untuk algoritma EoF (Sloan, 2015) Berikut adalah tahapan penyisipan pesan pada citra bitmap dengan algoritma EoF, 1. Mulai 2. Masukkan citra bitmap, plaintext, kunci enkripsi dan penanda pesan 3. Lakukan pengecekan, apakah data masukan telah terisi semua, a. Jika “Ya” kerjakan langkah 4 b. Jika “Tidak” kembali ke langkah 2.
24
4. Enkripsi plaintext menggunakan algoritma Rijndael. 5. Tampung Byte hasil enkripsi pesan (Byte cipher). 6. Kalkulasi ukuran panjang Byte pesan, panjang Byte penanda pesan. 7. Salin Byte citra dan pesan ke memori buffer. 8. Lakukan pengecekan, apakah penyisipan berhasil, a. Jika “Ya” kerjakan langkah 9. b. Jika “Tidak” kembali ke langkah 2. 9. Simpan Byte citra hasil. 10. Tampilkan citra stego. 11. Selesai.
3.3.2
Ekstraksi pesan dengan algoritma EoF Ekstraksi Byte cipher pada citra stego dengan algoritma EoF
membutuhkan masukan citra stego, penanda pesan dan kunci dekripsi. Proses ekstraksi dimulai dengan pengecekan kunci dekripsi. Lakukan validasi untuk semua data masukan, jika kondisi benar maka selanjutnya melakukan ekstraksi header pesan. Header pesan terdiri dari penanda pesan dan panjang pesan yang terletak pada Byte terakhir dari Byte citra stego. Kemudian Byte penanda pesan dikonversi ke String, berikutnya dilakukan pengecekan penanda pesan, jika penanda pesan bernilai sama dengan penanda pesan yang dimasukan oleh pengguna maka ekstraksi Byte panjang pesan sebesar 7 Byte kemudian Byte panjang pesan dikonversi ke Integer. Setelah itu ekstraksi pesan sepanjang panjang pesan, hasil ekstraksi Byte pesan ditampung divariabel Array, kerjakan proses ekstraksi Byte pesan sebanyak panjang pesan secara berulang. Setelah proses ekstraksi selesai dikerjakan maka berikutnya hasil ekstraksi Byte pesan didekripsi ke karakter ASCII. Gambar 3.7 menunjukkan flowchart ekstraksi pesan pada citra stego menggunakan algoritma EoF.
25
Mulai Masukkan citra stego, kunci dekripsi dan penanda pesan Pencacah byte pesan= 0
Masukan valid?
Tampilkan pesan kesalahan
Tidak
Ya Baca byte header pesan citra stego
penanda pesan = “masukan”
Tidak
Ya
Konversi ukuran pesan ke integer
Ekstraksi byte pesan
Tampung byte pesan
Ya
Pencacah byte pesan++ Tidak
pencacah byte pesan < ukuran pesan? Tidak
Kunci dekripsi = kunci enkripsi? Ya
Dekripsi pesan Tampilkan plaintext Selesai
Gambar 3.7 Flowchart ekstraksi pesan untuk algoritma EoF (Sloan, 2015)
26
Berikut tahapan ekstraksi Byte pesan dengan algoritma EoF, 1. Mulai 2. Masukan citra stego, kunci dekripsi dan penanda pesan 3. Lakukan pengecekan, apakah data masukan telah terisi semua, a. Jika “Ya” kerjakan langkah 4. b. Jika “Tidak” kembali ke langkah 2. 4. Ekstraksi header pesan (penanda pesan dan panjang pesan) pada citra stego. 5. Lakukan pengecekan, apakah penanda pesan yang dimasukan = penanda pesan hasil ekstraksi, a. Jika “Ya” kerjakan langkah 6. b. Jika “Tidak” kembali ke langkah 2. 6. Konversi panjang pesan ke Integer. 7. Ekstraksi Byte pesan pada citra stego. 8. Tampung Byte pesan. 9. Increment 1 untuk pencacah indeks pesan setiap Byte proses ekstraksi. 10. Lakukan pengecekan, apakah pencacah indeks pesan < panjang pesan, a. Jika “Ya” kembali ke langkah 7. b. Jika “Tidak” lakukan pengecekan, apakah kunci dekripsi = kunci enkripsi, i. Jika “Ya” lakukan langkah 11. ii. Jika “Tidak” kembali ke langkah 2. 11. Dekripsi pesan 12. Tampilkan plaintext. 13. Selesai. Kapasitas pesan yang dapat ditampung oleh sebuah citra bitmap berdasarkan informasi ukuran height dari strukutur header citra bitmap dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
27
Setelah pesan disisipkan maka dihasilkan citra stego, pada citra stego akan terjadi peningkatan ukuran untuk ukuran height, besarnya peningakatan ukuran height dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
Dengan demikian ukuran file citra stego yang dihasilkan dapat dikalkulasi dengan cara mengelompokkan citra menjadi 2 bagian, yaitu citra dengan ukuran width modulo 4 = 0, maka ukuran file dikalkulasi dengan persamaan yang ditulis dalam bentuk,
Sedangkan untuk citra dengan ukuran width modulo 4 ≠ 0, ukuran file citra stego dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
3.4
Algoritma MEoF (Modifikasi End of File) Berdasarkan Gambar 3.3, teknik penyisipan pesan dengan memanfaatkan
padding selanjutnya disebut algoritma MEoF (Modifikasi End of File). Modifikasi yang dilakukan dari algoritma EoF (End of File) yaitu lokasi penyisipan pesan. Padding pada citra bitmap 24 bit adalah jika ukuran width modulo 4 ≠ 0. Untuk citra bitmap dengan kondisi ukuran width modulo 4 = 0, penyisipan pesan dilakukan pada piksel terakhir citra, prosesnya dilakukan dengan cara nilai Byte citra piksel terakhir digantikan dengan Byte pesan. Byte yang mewakili piksel citra bitmap ditampilkan dalam bentuk baris, masing – masing baris merupakan kelipatan 4 Byte termasuk padding. Untuk citra dengan ukuran height > 1, masing – masing baris disimpan dalam bentuk Array
28
piksel. Pada format citra bitmap, citra disimpan dalam bentuk berurutan (sequential). Piksel – piksel disusun mulai dari piksel – piksel baris pertama dan dilanjutkan dengan piksel baris selanjutnya. Jumlah Byte yang dibutuhkan untuk menyimpan satu baris piksel merupakan pembulatan dari kelipatan 4 dapat dikalkulasi dalam bentuk persamaan (Charlamp, 1995),
Sehingga jumlah total Byte yang dibutuhkan untuk menyimpan Byte piksel dalam Array dapat dikalkulasi dalam bentuk persamaan,
Kapasitas penyisipan pesan pada citra dibagi menjadi 2 jenis yaitu citra dengan ukuran width modulo 4 = 0 dan ukuran width modulo 4 ≠ 0. Untuk citra dengan ukuran width modulo 4 = 0 penyisipan pesan dilakukan pada piksel terakhir untuk setiap width, kapasitas pesan yang mampu disisipkan dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
Sedangkan ukuran file citra stego yang dihasilkan dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
Citra dengan ukuran width modulo 4 ≠ 0, maka pesan disisipkan pada padding citra dan kapasitas pesan yang mampu disisipkan dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
29
Sedangkan ukuran file citra stego yang dihasilkan dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
3.5 3.5.1
Algoritma Modifikasi Least Significant Bit (MLSB) Penyisipan pesan dengan algoritma MLSB Johnson dan Jajodia (1998) dalam tulisan Cruz et al. (2012) mengatakan
metode Least Significant Bit (LSB) adalah teknik penyembunyian pesan dengan cara menyisipkan pesan pada bit rendah atau bit paling kanan pada file media penampung sebagai media untuk menyembunyikan pesan. Pada penelitian ini digunakan media citra digital 24 bit dengan model warna RGB. Pada citra digital terdapat 3 bit yang dapat disisipi dalam 1 piksel, setiap 1 piksel warna tersusun dari 3 komponen warna, yaitu Red, Green dan Blue yang disusun oleh 8 digit bilangan biner dari rentang nilai 0 sampai dengan 255 dalam desimal atau 00000000 sampai 11111111 dalam representasi biner. Sebagai contoh sebuah citra bitmap 24 bit dengan ukuran 800 x 600 piksel, dari ukuran ini dapat diartikan bahwa citra tersebut dapat menyimpan 1.440.000 bit atau setara dengan 180.000 Byte pesan yang dapat disisipkan pada media penampung. Proses penyisipan Byte pesan yang melibatkan 3 piksel warna pada citra bitmap 24 bit dapat diilustrasikan seperti berikut, (00101101 00011100 (10100110 11000100 (11010010 10101101 Ketika Byte pesan yang akan disisipkan adalah
11011100) 00001100) 01100011) huruf “A”, yang representasi
binernya adalah 01000001 dan bilangan biner tersebut yang akan disisipkan ke Byte citra bitmap 24 bit. Penyisipan tersebut akan menghasilkan String biner berikut, (00101100 (10100110 (11010010
00011101 11000100 10101101
11011100) 00001100) 01100011)
30
Least Significant Bit adalah barisan data biner yang ada pada media digital dan paling tidak terlalu berpengaruh terhadap perubahan jika nilai datanya dimodifikasi. Modifikasi yang dilakukan pada Least Significant Bit (LSB) yaitu, bit - bit pesan disisipkan pada String biner data citra yang memiliki nilai Byte 254 atau 255. Penyisipan bit - bit pesan pada citra menggunakan algoritma MLSB membutuhkan masukkan data antara lain file citra sebagai media untuk penyisipan pesan, plaintext karakter ASCII dan kunci sebagai kunci untuk enkripsi plaintext menjadi Byte cipher. Pada algoritma MLSB penyisipan pesan dapat dikerjakan dengan kondisi jumlah String biner data citra yang bernilai 254 atau 255 lebih besar dari jumlah ukuran bit - bit pesan yang disisipkan. Proses penyisipan dilakukan dengan mengkonversi header pesan dan Byte pesan, selanjutnya menyisipkan bit – bit header pesan pada setiap String biner data citra sebanyak bit header pesan. Proses penyisipan bit – bit header pesan dilakukan setelah Byte header citra bitmap. Setelah itu dilanjutkan dengan menyisipkan bit - bit pesan pada Byte citra yang bernilai 254 atau 255. Penyisipan bit - bit pesan diproses dengan cara menyeleksi String biner Byte citra untuk setiap indeks width dan indeks height di mulai dari String biner header pesan yang terakhir digunakan untuk menyisipkan bit header pesan + 1. Jika Byte citra bernilai 254 atau 255 konversi Byte citra ke String biner kemudian sisipkan 1 bit pesan pada bit terakhir dari String biner citra. Gambar 3.8 menunjukkan flowchart penyisipan pesan pada citra menggunakan algoritma MLSB (Singadji dan Pakereng, 2013). Tahapan penyisipan bit - bit pesan pada citra dengan algoritma MLSB yaitu, 1.
Mulai
2.
Masukan citra bitmap, plaintext, kunci enkripsi dan penanda pesan.
3.
Pengecekan apakah data masukan telah terisi semua,
a.
Jika “Ya” kerjakan langkah 4.
b.
Jika “Tidak” kembali ke langkah 2.
4.
Cacah jumlah Byte citra bernilai 254 atau 255.
5.
Enkripsi plaintext dengan algoritma Rijndael
6.
Konversi Byte cipher ke String biner.
31
Mulai Masukkan citra bitmap, plaintext, penanda pesan dan Kunci enkripsi Masukan valid?
Tidak
Tampilkan pesan kesalahan
Ya
Cacah byte citra bernilai 254 / 255
Enkripsi pesan
Konversi ciphertext ke string biner
Hitung ukuran panjang pesan Tidak Hitung jumlah bit stegano
lokasi penysipan cukup Ya I = 0, j = 0 Total = panjang string biner
Jika i < Total
Next j
Ya Ya
RGB = Ambil piksel ke ( j )
Blue = 254 or 255
Tidak
Ya Sisip LSB Tidak
i=i+1
Ya
Jika i < Total
Green = 254 or 255
Tidak
Red = 254 or 255
Ya
Ya
Sisip LSB
Sisip LSB
i=i+1
Ya
i=i+1
Jika i < Total
Jika i < Total
Sisipkan penanda pesan dan info ukuran pesan Tidak Simpan sebagai file citra baru
Tidak
Selesai
Gambar 3.8 Flowchart penyisipan pesan dengan algoritma MLSB (Singadji, 2013)
32
7. Hitung ukuran panjang pesan kemudian konversi ke biner. 8. Hitung jumlah bit stegano. 9. Lakukan pengecekan, apakah jumlah Byte citra bernilai 254 atau 255 > jumlah bit stegano, a. Jika “Ya” kerjakan langkah 10. b. Jika “Tidak” kembali ke langkah 11. 10. Lakukan penyisipan bit stegano, proses penyisipan dengan cara pengecekan pada setiap Byte citra, apakah Byte citra bernilai 254 atau 255, a. Jika “Ya” sisip bit stegano, increment 1 untuk pencacah bit stegano ( i ). b. Jika “Tidak” kerjakan Byte berikutnya ( j ). 11. Simpan file citra sebagai citra stego. 12. Selesai.
3.5.2
Ekstraksi algoritma MLSB (Modifikasi Least Significant Bit) Ekstraksi adalah memisahkan bit pesan dari citra stego untuk dibentuk
menjadi Byte pesan kemudian hasilnya didekripsi menjadi Byte plaintext. Untuk ekstraksi, data yang dibutuhkan adalah citra stego, penanda pesan dan kunci dekripsi. Ekstraksi pada algoritma MLSB dikerjakan dengan tahapan berikut, ekstraksi bit - bit header pesan, hasil ekstraksi bit – bit header terdiri dari bit penanda pesan dan bit informasi panjang pesan. Selanjutnya bit penanda pesan di konversi ke Byte String dan panjang pesan ke Integer. Ekstraksi pesan dapat dikerjakan jika penanda pesan bernilai sama dengan nilai masukan pengguna ketika menyisipkan pesan. Ekstraksi bit – bit pesan dilakukan dengan pengecekan untuk setiap nilai Byte citra stego dimulai dari Byte citra stego yang terakhir digunakan. Untuk setiap Byte citra yang bernilai 254 atau 255 dikonversi ke String biner kemudian bit terakhir diambil dan disimpan pada variabel penampung bit – bit pesan, kemudian setiap bit pesan pada penampung berjumlah 8 bit maka konversi ke Byte String, proses ini dikerjakan sepanjang ukuran Byte pesan. Selanjutnya setelah semua bit selesai diekstraksi maka Byte pesan didekripsi untuk menghasilkan plaintext. Gambar 3.9 menunjukkan flowchart ekstraksi bit pesan pada citra stego.
33
Mulai Masukkan citra stego, penanda pesan dan Kunci dekripsi Masukan valid?
Tampilkan pesn kesalahan
Tidak
Ya
Kunci dekripsi = kunci enkripsi ?
Tidak
Ya Ekstraksi bit penanda pesan dan bit ukuran pesan Konversi penanda pesan ke byte string
Tidak
Penanda pesan =”masukan user” Ya konversi ukuran pesan ke integer J=0 Total = ukuran pesan RGB = ambil piksel ke ( j )
Blue = 254 atau 255
Ya
Ekstrak LSB tambahkan ke bit string
Tidak Green = 254 atau 255
Ya
Ekstrak LSB tambahkan ke bit string
Ya Tidak
Red = 254 atau 255
Ya
Ekstrak LSB tambahkan ke bit string
Tidak J=j+1
J < info ukuran pesan Tidak
Konversi bit array ke byte array
Dekripsi byte array
Tampilkan pesan Selesai
Gambar 3.9 Flowchart ekstraksi pesan dengan algoritma MLSB (Singadji, 2013)
34
Berikut tahapan ekstraksi Byte pesan pada citra stego dengan algoritma MLSB, 1. Mulai 2. Masukan citra stego, kunci dekripsi dan penanda pesan. 3. Lakukan pengecekan, apakah data masukan telah terisi semua, a. Jika “Ya” maka kerjakan langkah 4. b. Jika “Tidak” kerjakan langkah 2. 4. Lakukan pengecekan, apakah kunci dekripsi yang dimasukan = kunci enkripsi. a. Jika “Ya” kerjakan langkah 5. b. Jika “Tidak” kembali ke langkah 2. 5. Ekstraksi bit header pesan (penanda pesan dan panjang pesan). 6. Konversi penanda pesan ke Byte String. 7. Lakukan pengecekan, apakah penanda pesan = hasil ekstraksi penanda pesan, a. Jika “Ya” kerjakan langkah 8 b. Jika “Tidak” kerjakan langkah 2. 8. Lakukan ekstraksi bit pesan, ekstraksi dengan cara pengecekan setiap piksel, apakah Blue nilai Byte 254 atau 255, a. Jika “Ya” ekstraksi LSB kemudian tampung di bit penampung pesan kemudian increment 1 untuk b. Jika “Tidak” uji Byte citra berikutnya pada piksel citra yang sama. 9. Lakukan pengecekan, apakah nilai j < panjang pesan, a. Jika “Ya” kerjakan langkah 8. b. Jika “Tidak” konversi bit Array ke Byte Array. 10. Dekripsi Byte Array. 11. Tampilkan plaintext. 12. Selesai.
35
3.6
Peak Signal to Noise Ratio (PSNR) Menurut Moreno et al. (2013), Peak Signal to Noise Ratio (PSNR) adalah
perbandingan antara nilai maksimum dari sinyal yang diukur dengan besarnya derau yang berpengaruh pada sinyal tersebut. PSNR biasanya diukur dalam satuan desibel (dB). PSNR digunakan untuk mengetahui perbandingan kualitas citra sebelum dan sesudah disisipkan pesan. Mean Square Error (MSE) merupakan parameter yang menunjukkan tingkat kesalahan piksel - piksel citra hasil pemrosesan sinyal (stego image) terhadap citra asli (media cover). Semakin kecil nilai MSE yang didapatkan maka kualitas citra keluaran akan semakin baik atau dapat dikatakan semakin mendekati citra aslinya. Nilai MSE dapat dikalkulasi dengan persamaan yang ditulis dalam bentuk,
dimana : MSE(f,g) adalah nilai Mean Square Error dari citra. M adalah panjang citra stego (dalam piksel). N adalah ukuran width citra stego (dalam piksel). f(i,j) adalah nilai piksel dari citra cover. g(i,j) adalah nilai piksel pada citra stego. Peak Signal to Noise Ratio (PSNR) merupakan parameter besaran yang menunjukkan rasio tingkat toleransi noise tertentu terhadap banyaknya noise pada suatu piksel citra. Noise adalah kerusakan piksel pada bagian tertentu dalam sebuah citra sehingga mempengaruhi kualitas dari pada piksel tersebut. Dengan kata lain nilai PSNR menunjukkan nilai kualitas suatu piksel citra. Untuk menentukan nilai PSNR pada citra dikalkulasi dengan persamaan yang ditulis dalam bentuk,
36
dimana : PSNR adalah Peak Signal to Noise Ratio. Max(f,g) adalah nilai maksimum dari piksel citra. MSE(f,g) adalah nilai Mean Square Error dari citra.
3.7 3.7.1
Algoritma Rijndael Enkripsi Rijndael Pada algoritma Rijndael enkripsi terdiri dari 4 jenis transformasi Byte,
yaitu SubBytes, ShiftRows, Mixcolumns, dan AddRoundKey. Proses awal enkripsi, masukkan ke dalam state akan mengalami transformasi Byte AddRoundKey yaitu melakukan Xor antara state awal (plainteks) dengan cipher key. Tahap ini disebut juga initial round. Setelah itu state akan mengalami putaran transformasi sebanyak Nr – 1 kali. Proses transformasi dikerjakan dengan langkah berikut, 1. SubBytes, substitusi Byte dengan menggunakan tabel substitusi (S-box). Subtitusi (S-box) untuk algoritma Rijndael untuk proses tranformasi SubByte menggunakan Tabel 3.3 berikut, Tabel 3.3 S-Box algoritma Rijndael (Federal Information Processing Standards Publication 197)
2. ShiftRows, pergeseran baris-baris Array state secara wrapping. 3. MixColumns, mengacak data pada masing-masing kolom Array state. 4. AddRoundKey, operasi Xor antara state sekarang dengan round key.
37
Putaran terakhir state tidak mengalami transformasi MixColumns. 3.7.2
Dekripsi Rijndael Pada algoritma Rijndael dekripsi merupakan kebalikan dari proses
enkripsi dan menggunakan invers dari proses transformasi yang dikerjakan pada proses enkripsi. Proses dekripsi untuk iterasi pertama semua transformasi dikerjakan kecuali invers MixColumns. Untuk proses dekripsi dengan Rijndael yang beroperasi pada blok 128-bit adalah sebagai berikut : 1. AddRoundKey : melakukan Xor antara state awal (cipher) dengan cipher key. Tahap ini disebut juga initial round. 2. Putaran sebanyak Nr – 1 kali. Proses pada setiap putaran adalah : a. InvShiftRow, pergeseran baris-baris Array state secara wrapping. b. InvSubByte, substitusi Byte menggunakan tabel substitusi inverse S-box, seperti yang ditunjukkan pada Tabel 3.4 berikut, Tabel 3.4 Invers S-Box algoritma Rijndael (Federal Information Processing Standards Publication 197)
c. AddRoundKey, melakukan operasi Xor antara state sekarang dengan round key. d. InvMixColumn, mengacak data pada masing-masing kolom Array state. 3. Untuk proses putaran terakhir state tidak mengalami transformasi MixColumns.
38
Tabel 3.5 Perbandingan jumlah iterasi algoritma Rijndael (Hmood, 2012) AES 128
AES 192
AES 256
Ukuran kunci
4 word (16 Byte)
6 word (24 Byte)
8 word (32 Byte)
Ukuran blok
4 word (16 Byte)
4 word (16 Byte)
4 word (16 Byte)
Jumlah iterasi
10
12
14
4 BAB IV ANALISIS DAN RANCANGAN SISTEM 4.1
Deskripsi Penyisipan Pesan Penelitian ini bertujuan untuk melakukan stegano menggunakan citra
bitmap 24 bit sebagai media digital untuk menampung pesan. Penyisipan pesan dengan algoritma MEoF dapat dikerjakan dengan kondisi ukuran width citra modulo 4 ≠ 0 atau ukuran citra modulo 4 = 0 dan lokasi untuk penyisipan lebih besar dari panjang pesan. Pesan adalah karakter ASCII yang telah dienkripsi dengan algoritma Rijndael menggunakan kunci 128 bit. Hasil enkripsi pesan karakter ASCII menghasilkan blok cipher berukuran 16 Byte untuk setiap blok. Selain blok cipher, penyisipan juga dilakukan untuk header pesan yang terdiri dari penanda pesan dan panjang pesan pada citra stego. Pada algoritma MLSB bit - bit pesan disisipkan pada Byte citra yang bernilai 254 atau 255, proses penyisipan bit – bit stegano dilakukan dengan cara header pesan, Byte cipher, penanda pesan dan nilai Byte citra yang bernilai 254 atau 255 dikonversi ke String biner, selanjutnya bit – bit header pesan, penanda pesan dan Byte cipher disisipkan pada nilai bit terendah pada String biner citra yang bernilai 254 atau 255 (Singadji dan Pakereng, 2013). Pada algoritma MEoF, MLSB dan EoF ukuran Byte penanda pesan maksimal di-default sebesar 10 Byte dan untuk informasi panjang pesan pada algoritma MEoF dan MLSB dialokasikan sebesar 2 Byte sedangkan untuk algoritma EoF dialokasikan sebesar 4 Byte. Header pesan berfungsi sebagai penanda pesan dan sebagai informasi panjang pesan yang disisipkan pada citra stego. Dengan demikian ketika proses ekstraksi Byte cipher pada citra stego maka tahapan yang dikerjakan adalah mengekstraksi penanda pesan, kemudian dicek penanda pesan hasil ekstraksi, jika penanda pesan bernilai sama dengan nilai masukan ketika menyisipkan pesan maka selanjutnya kerjakan proses konversi ukuran Byte pesan ke Integer. Selanjutnya kerjakan proses ekstraksi Byte cipher sebesar ukuran panjang pesan. Proses ekstraksi ini dikerjakan sesuai dengan
39
40
tahapan pada masing – masing algoritma. Setelah proses ekstraksi Byte cipher selesai dikerjakan maka Byte cipher didekripsi untuk menghasilkan plaintext. Proses penyisipan Byte pesan pada citra biasanya akan menghasilkan perubahan kualitas citra, perubahan ini disebabkan adanya perubahan nilai Byte citra sebelum disisipi pesan dengan setelah disisipi pesan. Karena adanya perubahan kualitas citra setelah disispi pesan maka dibutuhkan pengujian mengetahui tingkat perubahan kualitas citra yang dihasilkan dari masing – masing algoritma, pengujian dilakukan secara kualitatif dan kuantitatif. Proses pengujian kualitatif dikerjakan dengan cara pengamatan terhadap kualitas citra stego menggunakan visual panca indra manusia kemudian dibandingkan dengan citra aslinya. Sedangkan proses pengujian kuantitatif dikerjakan dengan cara terukur, adapun pengukuran dilakukan dengan mengkalkulasi nilai noise yang dihasilkan citra stego. Hasil pengujian kuantitatif dan kualitatif dari algoritma MEoF kemudian dibandingkan dengan hasil pengujian dari algoritma EoF dan MLSB. Untuk pengujian kuantitatif juga dilakukan pengukuran untuk kapasitas pesan yang mampu disisipkan dan mengukur perubahan ukuran pada citra stego. Berdasarkan hipotesa sementara untuk pengukuran jumlah pesan yang mampu disisipkan dan perubahan ukuran citra stego pada algoritma MEoF dan EoF dapat dilakukan secara analisis matematis.
4.2 4.2.1
Perancangan Algoritma MEoF (Modifikasi End of File) Penyisipan pesan dengan algoritma MEoF Untuk penyisipan pesan dengan algoritma MEoF pada citra dibutuhkan
masukan terdiri dari sebuah citra, plaintext, penanda pesan dan kunci enkripsi. Jumlah pesan yang mampu disisipkan pada citra dipengaruhi oleh ukuran width dari citra yang digunakan sebagai penampung pesan. Untuk ukuran width citra modulo 4 = 0 maka pesan disisipkan pada piksel terakhir untuk setiap width. Proses penyisipan pesan dikerjakan dengan mengganti nilai Byte citra dengan nilai Byte pesan, alokasi Byte citra yang dapat digunakan untuk menyisipkan Byte pesan sebesar 3 Byte untuk setiap width. Untuk ukuran width citra modulo 4 ≠ 0
41
maka Byte pesan disisipkan pada padding citra. Ukuran padding yang dapat digunakan untuk menyisipkan pesan setiap indeks width sebesar hasil proses kalkulasi modulo. Gambar 4.1 adalah flowchart penyisipan pesan menggunakan algoritma MEoF, 1. Mulai. 2. Masukkan sebuah file citra bitmap. 3. Lakukan pengecekan, apakah data masukan telah terisi semua, a. Jika “Ya” kerjakan langkah 4. b. Jika “Tidak” kembali ke langkah 2. 4. Scan ukuran height, width dan stride. 5. Lakukan pengecekan untuk padding, apakah ukuran width modulo 4 = 0. a. Jika “Ya” piksel width terakhir dikurangi 1, kemudian kalkulasi ukuran Byte citra yang dapat disisipi. b. Jika “Tidak” hitung ukuran padding. 6. Masukkan plaintext, kunci enkripsi dan penanda pesan. 7. Lakukan enkripsi plaintext dengan algoritma Rijndael menggunakan method CreateEncryptor pada C#. 8. Kalkulasi ukuran pesan. 9. Lakukan pengecekan, apakah ukuran Byte citra yang dapat disisipi/ padding >= panjang pesan. a. Jika “Ya” kerjakan langkah 10. b. Jika “Tidak” kembali ke langkah 6. 10. Alokasikan memori untuk menampung Byte citra hasil. 11. Lakukan pengecekan apakah jumlah indeks width ( j ) < width * 3, a. Jika “Ya”, salin Byte citra. b. Jika “Tidak”, salin pesan. 12. Next j 13. Lakukan pengecekan, apakah jumlah indeks width ( j ) < stride, a. Jika “Ya” kerjakan langkah 11. b. Jika “Tidak” next height ( i ).
42
Mulai
Masukkan citra Scan ukuran height citra, width citra dan stride width citra % 4 = 0 ?
Ya
Tidak Piksel terakhir – 1
Kalkulasi ukuran padding
Masukan pesan, kunci enkripsi dan penanda pesan Enkripsi byte pesan
Kalkulasi panjang pesan kalkulasi panjang penanda pesan Header pesan = panjang penanda pesan + panjang pesan Byte stegano = header pesan + panjang pesan
Ukuran padding >= panjang Byte stegano
Tidak
Tampilkan pesan kesalahan
Ya Alokasikan memori menampung Byte hasil Simpan byte hasil
For i = 0; i < height citra; i++
Citra stego
Selesai
For j = 0 ; j < stride; j++
Next i
j < width citra*3
Tidak
Sisip Byte stegano (header pesan dan cipher )
Ya
Next j
Ya Salin byte citra ke penampung citra baru
Gambar 4.1 Flowchart penyisipan pesan pada algoritma MEoF 14. Lakukan pengecekan, apakah jumlah height ( i ) < total height, a. Jika “Ya” kerjakan width ke ( j ) pada height ke ( i ). b.
Jika “Tidak” kerjakan langkah 15.
15. Simpan citra hasil
43
16. Tampilkan citra stego. 17. Selesai. Proses stegano pada citra akan menghasilkan informasi panjang Byte cipher, panjang Byte cipher yang mampu disisipkan pada citra, panjang Byte chiper yang telah disisipkan, nilai MSE (Mean Sequare Error) dan PSNR (Peak Signal to Noise Rasio).
4.2.2
Ekstraksi pesan dengan algoritma MEoF (Modifikasi End of File) Ekstraksi adalah memisahkan pesan dari citra stego, ekstraksi pesan
dengan algoritma MEoF membutuhkan 3 data masukkan yaitu, citra stego, penanda pesan dan kunci dekripsi yang nilainya sama dengan masukan kunci enkripsi. Ekstraksi dengan algoritma MEoF dilakukan dalam 2 tahapan, yaitu ekstraksi header pesan dan ekstraksi Byte pesan. Ekstraksi header pesan untuk mengambil Byte penanda pesan yang telah disisipkan pada citra stego. Setelah ekstraksi penanda pesan dikerjakan maka dilakukan pengecekan dengan kondisi apakah masukan penanda pesan bernilai sama dengan penanda pesan hasil ekstraksi, jika bernilai sama maka ekstraksi panjang pesan. Hasil ekstraksi panjang pesan selanjutnya dikonversi ke Integer. Selanjutnya dilakukan ekstraksi Byte pesan dengan cara membaca nilai Byte citra stego pada piksel terakhir untuk setiap indeks width atau Byte padding, pembacaan nilai Byte dimulai dari Byte header pesan + 1, hasil ekstraksi ditampung pada sebuah variabel Array. Sebaliknya jika nilai masukan penanda pesan tidak sama dengan hasil ekstraksi penanda pesan maka tampilkan pesan kesalahan. Proses pembacaan Byte pesan pada citra stego dilakukan secara berulang sebanyak panjang pesan. Gambar 4.2 menunjukkan flowchart ekstraksi pesan menggunakan algoritma MEoF. Berikut tahapan proses ekstraksi header pesan dan pesan dengan algoritma MEoF, dari setiap langkah yang dikerjakan, yaitu : 1. Mulai 2. Masukkan sebuah citra stego, kunci simetris dan penanda pesan. 3. Scan width, height dan stride citra stego.
44
Mulai Masukan citra stego kunci dekripsi dan penanda pesan Penanda index byte = 0 Pencacah pesan = 0 Scan ukuran height, width dan stride citra stego Tampilkan pesan kesalahan
For i = 0; i < height citra stego; i++ Next i
For j = width*3; j < stride ; j++
panjang header pesan > penanda index byte Ya
Tidak
Ekstraksi Byte header pesan Tidak
Ya Penanda index byte ++ Tampilkan pesan kesalahan
Penanda pesan = input user Ya
Tidak
Konversi panjang pesan ke integer
Pencacah pesan = panjang pesan
Ya
Kunci dekripsi = kunci enkripsi ?
Tidak
Ekstraksi Byte pesan
pencacah pesan ++
Dekripsi byte cipher
Ya
Tampilkan plaintext
Selesai
Gambar 4.2 Flowchart ekstraksi pesan dengan algoritma MEoF
45
4. Lakukan pengecekan, apakah panjang header pesan > penanda indeks Byte, a. Jika “Ya” ekstrasksi Byte header pesan, kemudian increment 1 untuk penanda indeks Byte. b. Jika “Tidak” lakukan pengecekan, apakah penanda pesan = masukan penanda pesan, i. Jika “Ya” konversi panjang pesan ke Integer. ii. Jika “Tidak” tampilkan pesan kesalahan. 5. Lakukan pengecekan, apakah pencacah pesan = panjang pesan, a. Jika “Tidak” ekstraksi Byte pesan, kemudian increment 1 untuk pencacah pesan. b. Jika “Ya” lakukan pengecekan, apakah kunci dekripsi = kunci enkripsi, i. Jika “Ya” dekripsi Byte cipher. ii. Jika “Tidak” tampilkan pesan kesalahan. 6. Tampilkan plaintext. 7. Selesai. Hasil dari proses ekstraksi adalah Byte cipher yang didekripsi menggunakan algoritma Rijndael dengan kunci simetris 128 bit, untuk menghasilkan plaintext.
4.3
Metode Pengujian Steganografi Teknik pengujian citra stego dilakukan dengan pendekatan kualitatif
(subyektif) dan kuantitatif (obyektif). Sedangkan ukuran sampel plaintext untuk pengujian disesuaikan dengan kapasitas maksimal yang mampu disisipkan pada citra, selain itu juga dilakukan pengujian dengan plaintext dengan ukuran yang merata untuk masing – masing algoritma penyisipan. Pengujian secara kualitatif bertujuan untuk menganalisa citra stego dengan melihat perubahan kualitas citra, pengujian dilakukan dengan cara pengamatan secara langsung hasil citra stego kemudian dibandingkan dengan citra asli dan dengan cara ekstraksi nilai Byte citra stego kemudian dibandingkan dengan hasil ekstraksi nilai Byte citra asli. Untuk pengamatan dilakukan dengan menggunakan visual manusia. Sedangkan
46
pengujian kualitatif bertujuan untuk mengukur secara objektif perubahan kualitas citra, jumlah pesan yang mampu disisipkan dan perubahan ukuran citra stego.
4.3.1
Pengujian kualitatif Safrizal dan Harjoko (2014), mengatakan pengujian kualitatif adalah
menganalisa data berdasarkan hasil yang dinyatakan dalam bentuk uraian. Pada penelitian ini pengujian kualitatif dilakukan dengan cara subyektif. Artinya pengujian
dikerjakan
dengan
pengamatan
secara
langsung
berdasarkan
kemampuan visual manusia untuk mendeteksi adanya perubahan. Adanya perubahan kualitas citra stego ditentukan oleh pengamat sendiri, tergantung dari persepsi visual pengamat. Adapun teknik untuk pengujian kualitatif (subyektif) dilakukan dengan pengamatan secara langsung terhadap citra asli dan citra stego, proses pengujian kualitatif dikerjakan sebagai berikut, 1. Melakukan pengolahan citra memanfaatkan tools freeware (stegdetect) untuk mendeteksi perubahan kualitas citra stego berdasarkan pengamatan dengan visual manusia. 2. Melakukan pengamatan nilai Byte citra stego, kemudian dibandingkan dengan nilai Byte citra asli untuk mendeteksi perubahan kualitas citra. Metode perbandingan tetap (constant comperative method) digunakan sebagai dasar dalam melakukan perbandingan citra stego yang dihasilkan dari algoritma MEoF dengan citra stego yang dihasilkan dari algoritma EoF dan MLSB. Perbandingan dilakukan untuk melihat keterkaitan antara pesan yang disisipkan pada sebuah citra dengan perubahan citra setelah disisipi pesan. Adapun tahapan dalam metode perbandingan tetap adalah, 1. Reduksi data Data yang digunakan untuk pengujian adalah citra stego dan citra bitmap. Pengamatan untuk perubahan kualitas citra akan menjadi fokus dalam pengujian ini.
47
2. Kategorisasi Citra yang digunakan untuk pengamatan adalah citra bitmap 24 bit dengan ukuran width modulo 4 = 0 dan citra yang ukuran width modulo 4 ≠ 0. 3. Sintesisasi Melakukan pengamatan terhadap keterkaitan antara pesan yang disisipkan pada citra bitmap dan perubahan yang terjadi pada citra stego. 4. Menyusun hipotesa Hasil dari pengamatan ini dapat menjawab sebagian dari permasalahan pada penelitian ini.
4.3.2
Pengujian kuantitatif Pengujian kuantitatif untuk melakukan pengukuran secara obyektif
masing – masing algoritma dalam beberapa hal, diantaranya mengukur kemampuan citra menampung pesan, mengukur perubahan ukuran file dari pesan yang disisipi dan mengukur noise yang dihasilkan oleh citra stego. Dengan demikian ada 3 pengukuran obyektif yang dilakukan diantaranya, 1. Mengukur kemampuan citra untuk menampung pesan. 2. Mengukur noise citra stego dari masing – masing algoritma. Pengukuran dilakukan dengan PSNR. 3. Mengukur perubahan ukuran file citra stego. Selanjutnya dari hasil pengukuran dilakukan analisis perbandingan antara algoritma MEoF dengan EoF dan MLSB. Sehingga dari hasil pengamatan dan pengukuran dapat menjawab permasalahan yang menjadi fokus penelitian ini.
4.4
Perancangan Antarmuka Penyisipan dan Ekstraksi Pesan Rancangan antarmuka sebagai desain untuk interaksi pengguna dengan
sistem, antarmuka yang dirancang dari sisi pengguna yaitu desain pemasukan data yang akan diproses untuk menghasilkan citra stego dari masing – masing algoritma. Selanjutnya merancang antarmuka dari sisi penerima yaitu untuk proses ekstraksi pesan pada citra stego. Antarmuka ekstraksi di desain agar
48
pengguna dapat dengan mudah melakukan proses ekstraksi pesan pada citra stego untuk menghasilkan plaintext. Dengan demikian perancangan antarmuka dapat dikelompokkan menjadi 2 bagian yaitu, rancangan untuk pemasukan data untuk proses penyisipan pesan dan rancangan pemasukan data untuk proses ekstraksi pesan. Untuk memasukan data penyisipan dan ekstraksi pesan antarmuka dirancang dengan menu drop down, Gambar 4.3 menunjukkan rancangan antarmuka yang digunakan untuk penyisipan dan ekstraksi pesan. Berdasarkan rancangan diatas maka terdapat 4 menu utama, adapun menu yang terdapat pada rancangan antarmuka terdiri dari : 1
File, memiliki sub menu sebagai berikut, a.
Open Image, berfungsi mengarahkan lokasi drive penyimpanan file citra.
b.
Save Image berfungsi untuk menyimpan file citra stego.
c.
Save Image Info berfungsi untuk menyimpan file Byte citra stego.
File
Stegano Mode
Action
View Message to Hide Load
Image
From File
Maximum Bytes Count : xxxx Byte Cipher Text Count : xxxx Load Image
Save
Char Count : Key Encrypt
Manually Type ----
Hide char
Header Mark : MSE : xxxxxx PSNR : xxxxxx
Proses
Gambar 4.3 Rancangan antarmuka penyisipan/ekstraksi pesan 2
Stegano Mode, memiliki sub menu yang bersifat pilihan, adapun sub menu yang dapat dipilih sebagai berikut, a.
End of File ketika memilih sub menu ini berarti pengguna memilih algoritma End of File untuk melakukan penyisipan pesan.
49
b.
Modifikasi End of File ketika memilih sub menu ini berarti pengguna memilih algoritma Modifikasi End of File untuk penyisipan pesan.
c.
MLSB ketika memilih sub menu ini berarti pengguna memilih algoritma Modifikasi Least Significant Bit untuk melakukan sisip pesan.
3.
Action, memiliki sub menu yang bersifat pilihan, adapun sub menu yang dapat dipilih sebagai berikut, a. Stegano yang berarti akan melakukan proses menyisipkan Byte / bit pesan pada citra. b. Exctract yang berarti akan melakukan proses ekstraksi Byte / bit pesan pada citra stego.
4.
View, memiliki sub menu untuk menampilkan Byte plaintext dan Byte cipher, adapun sub menu untuk menu view sebagai berikut, a.
Show Byte plaintext berarti akan menampilkan Byte plaintext.
b.
Show Byte ciphertext berarti akan menampilkan Byte cipher untuk setiap blok data.
Selain menu drop down yang telah dijelaskan diatas, agar sistem dapat berfungsi dengan baik dalam proses sisip atau ekstraksi, pada halaman antarmuka terdapat beberapa komponen menjadi memasukan yang harus diisikan oleh pengguna sistem, diantarnya adalah : a. Message to Hide, terdapat 2 pilihan menggunakan radiobutton, fungsinya untuk memilih jenis Byte plaintext yang akan dienkripsi, plaintext berupa file teks atau mengetikkan pesan dari keyboard. b. Key encrypt, kunci simetris yang dimasukan oleh pengguna berfungsi untuk melakukan enkripsi plaintext ketika proses penyisipan pesan yang dikerjakan, sebaliknya key juga berfungsi untuk dekripsi Byte cipher ketika proses diekstraksi yang dikerjakan. c. Header Mark, penanda pesan yang dimasukan oleh pengguna sebagai penanda untuk pesan pada citra stego. Hasil dari proses penyisipan Byte cipher pada citra untuk masing – masing algoritma akan menghasilkan citra stego dengan informasi sebagai berikut,
50
Jumlah Byte cipher yang akan disisipkan pada citra.
Total Byte yang tersedia pesan citra.
Total Byte cipher yang mampu disisipkan pada citra bitmap.
Nilai MSE (Mean Square Error).
Nilai PSNR (Peak Signal to Noise Ratio)
5 BAB V IMPLEMENTASI 5.1
Lingkungan Implementasi Tahapan yang telah dikerjakan pada rancangan sistem selanjutnya
diimplementasikan dengan menggunakan bahasa pemrograman C#. Bahasa pemrograman C# dianggap mampu untuk mengimplementasikan hasil rancangan yang telah dikerjakan pada bab sebelumnya.
5.2
Algoritma MEoF (Modifikasi End of File)
5.2.1
Kalkulasi lokasi penyisipan pesan Sesuai dengan penjelasan flowchart pada Bab IV Gambar 4.2 tentang
penyisipan pesan pada citra bitmap menggunakan algoritma MEoF (Modifikasi End of File), proses tahap awal adalah mengkalkulasi ukuran Byte yang dapat digunakan pada citra untuk menyisipkan pesan. Gambar 5.1 menunjukkan method GetMaxBytesSteganoCount untuk mengkalkulasi ukuran Byte citra yang dapat digunakan untuk sisipkan pesan pada citra. 1. 2. 3. 4. 5. 6. 7.
public static int GetMaxBytesSteganoCount(ref Bitmap sourceBmp) { if (sourceBmp == null || sourceBmp.PixelFormat != PixelFormat.Format24bppRgb) { return 0; } int width = sourceBmp.Width; int height = sourceBmp.Height;
8.
BitmapData bmpdata = sourceBmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); int stride = bmpdata.Stride; sourceBmp.UnlockBits(bmpdata); if (width % 4 == 0) { width--; } return (stride - (width * 3)) * height TotalSteganoHeaderSize; ;
9. 10. 11. 12. 13. 14. 15. 16.
}
Gambar 5.1 Kalkulasi lokasi penyisipan untuk ukuran width modulo 4 = 0
51
52
Pada Gambar 5.1 method GetMaxBytesSteganoCount pada baris 1 - 5 untuk pengecekan masukan citra atau format citra yang digunakan dalam menyisipkan pesan. Pada baris 6 – 14 jika format citra adalah 24 bit maka ambil ukuran width dan height dari citra, kemudian dicek dengan cara mengkalkulasi ukuran width modulo 4, jika hasilnya = 0 maka piksel terakhir digunakan sebagai lokasi untuk menyisipkan pesan. Ukuran lokasi yang dapat digunakan untuk menyisipkan pesan dikalkulasi menggunakan persamaan 3.10.
5.2.2
Lockbit data citra bitmap Method GetBitmapData digunakan sebagai langkah awal untuk proses
penyisipan pesan pada citra. Memori buffer akan digunakan untuk menampung nilai Byte citra dan pesan. Dengan demikian alokasikan memori buffer sesuai dengan ukuran citra asli Untuk itu informasi yang dibutuhkan adalah ukuran Byte citra, untuk width, height dan stride. Gambar 5.2 menunjukkan proses pengalokasian memori buffer,
1. private void GetBitmapData() 2. { 3. if (_steganoMode == ESteganoMode.Hide) 4. { 5. _sourceBitmap = new Bitmap(_sourceFileName); 6. _usedBitmap = MakeNewUsedBitmap(ref _sourceBitmap, IsBitmapWidthValid BitmapData bmpData = _usedBitmap.LockBits(new Rectangle(0, 0, _usedBitmap.Width, _usedBitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); 7. _widthImage = _usedBitmap.Width; 8. _widthByte = bmpData.Stride; 9. heightImage = _usedBitmap.Height; 10. _usedBitmap.UnlockBits(bmpData); 11. using (MemoryStream memStream = new MemoryStream()) 12. { 13. _usedBitmap.Save(memStream, ImageFormat.Bmp); 14. BytesResultBitmap = memStream.GetBuffer(); 15. } 16. } 17. MaxBytesStegano = (_widthByte - (_widthImage * 3)) * _heightImage - TotalSteganoHeaderSize; 18. }
Gambar 5.2 Lockbit nilai byte citra
53
Method GetBitmapData Gambar 5.2 pada baris 1 – 10 berfungsi untuk lockbit Byte citra agar lokasi memori yang digunakan untuk menanpung nilai Byte citra tidak digunakan untuk proses lainnya dan mengambil informasi ukuran untuk width, height dan stride. Sedangkan baris 11 – 16 berfungsi mengalokasikan memori buffer untuk lokasi menyalin nilai Byte citra dan pesan. Pada baris 17 - 18 untuk mengkalkulasi ukuran padding yang dapat digunakan untuk menyisipkan pesan pada citra. Padding untuk menyisipkan pesan pada citra yang memiliki ukuran width modulo 4 ≠ 0, proses untuk kalkulasi ukuran padding menggunakan persamaan 3.12.
5.2.3
Pengambilan header pesan Untuk algoritma MEoF header pesan dialokasikan berukuran 5 Byte
dengan rincian 3 Byte untuk penanda pesan dan 2 Byte untuk informasi panjang pesan yang disisipkan pada citra. Pengambilan header pesan dikerjakan pada method GetBytesHeader dengan parameter headerText, selanjutnya header pesan di-encoding untuk mendapatkan nilai Byte dari header pesan. Gambar 5.3 menunjukkan proses pengambilan header pesan dan pesan selanjutnya diencoding ke Byte. static 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
byte[] GetBytesHeader(string headerText) { return Encoding.ASCII.GetBytes(headerText); } static byte[] GetBytesHeader(string headerText) { return Encoding.ASCII.GetBytes(headerText); } void GetBytesBitmapStegano() { GetBitmapData(); IsSuccess = false; if (BytesResultBitmap == null) { AppMessageBox.ErrorMessage("Format image salah."); return; } if (BytesMessage.Length > MaxBytesStegano) { AppMessageBox.ErrorMessage(ResourceMessage.PesanTerlaluPanjang); return; }
Gambar 5.3 Pengambilan header pesan
54
Method GetBytesHeader pada Gambar 5.3 baris 1 – 7 berfungsi untuk mengambil header pesan selanjutnya header pesan di-encoding menjadi nilai Byte. Proses pengambilan menggunakan method GetBytesHeader dengan parameter headerText. Baris 8 – 20 dengan method GetBytesBitmapStegano untuk melakukan pengecekan apakah citra yang digunakan dapat disisipkan pesan. proses pengecekan ditunjukkan pada baris ke – 17, adapun prosesnya dikerjakan dengan membandingkan lokasi citra yang dapat disisipi pesan dibandingkan dengan panjang pesan yang akan disisipkan. Jika panjang pesan lebih panjang dibandingkan dengan ukuran lokasi Byte untuk penyisipan maka tampilkan pesan kesalahan.
5.2.4
Pengukuran panjang pesan Sebelum proses Gambar 5.3 baris ke – 17 dikerjakan, maka dibutuhkan
informasi panjang pesan yang akan disisipkan pada citra. Informasi panjang pesan dapat diperoleh setelah pengguna memasukan pesan pada text editor. Panjang pesan yang dimasukan pada text editor dikalkulasi menfaatkan fungsi Length. Gambar 5.4 menunjukkan proses pengukuran panjang pesan yang dimasukan pada text editor oleh pengguna, private void messageTextBox_TextChanged(object sender, EventArgs e) 1. { 2. TextBox textBox = sender as TextBox; 3. if (textBox != null) 4. { 5. int charCount = textBox.Text.Length; 6. charCountLabel.Text = string.Format("Character Count : {0}", charCount); 7. } 8. }
Gambar 5.4 Pengukuran panjang pesan Method messageTextBox_TextChanged pada baris 1 – 8 berfungsi untuk mengukur panjang pesan yang telah dimasukan oleh pengguna, pengukuran dapat dikerjakan jika editor pesan tidak bernilai null, jika text editor tidak bernilai null maka Gambar 5.4 baris ke – 5 yaitu pengukuran panjang pesan dikerjakan.
55
5.2.5
Enkripsi pesan Sebelum pesan disisipkan pada citra, dimasukan plaintext ke text editor
kemudian plaintext dienkripsi dengan algoritma Rijndael menggunakan kunci 128 bit. Proses untuk enkripsi menggunakan function encrypt yang telah disediakan oleh tools C#. Gambar 5.5 menunjukkan proses enkripsi plaintext menggunakan algoritma Rijndael. public static class MyRijndael 1. { 2. public static byte[] BytesKey { get; set; } 3. private static readonly byte[] BytesIv = new byte[16]; 4. public static byte[] EncryptStringToBytes(string plainText) 5. { 6. if (plainText == null || plainText.Length <= 0) 7. throw new ArgumentNullException("plainText"); 8. if (BytesKey == null || BytesKey.Length <= 0) 9. throw new ArgumentNullException("BytesKey"); 10. if (BytesIv == null || BytesIv.Length <= 0) 11. throw new ArgumentNullException("BytesIv"); 12. byte[] encrypted; 13. using (Rijndael myRijndael = Rijndael.Create()) 14. { 15. myRijndael.Key = BytesKey; 16. myRijndael.IV = BytesIv; 17. myRijndael.Padding = PaddingMode.Zeros; 18. ICryptoTransform encryptor = myRijndael.CreateEncryptor(myRijndael.Key, myRijndael.IV); 19. using (MemoryStream msEncrypt = new MemoryStream()) 20. { 21. using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) 22. { 23. using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) 24. { 25. swEncrypt.Write(plainText); 26. } 27. encrypted = msEncrypt.ToArray(); 28. } 29. } 30. } 31. return encrypted; 32. }
Gambar 5.5 Enkripsi pesan dengan Rijndael Class MyRijndael adalah class yang telah disedikan oleh C# untuk melakukan enkripsi karakter ASCII menjadi Byte cipher. Gambar 5.5 baris 1-3 adalah proses enkripsi yang di-set menggunakan kunci 128 bit, dengan demikian untuk setiap blok pesan akan dibentuk menjadi 16 Byte. Baris 4 – 12 adalah proses enkripsi pesan yang dilakukan dengan method EncryptStringToBytes
56
menggunakan parameter plaintext. sebelum proses enkripsi terlebih dahulu dilakukan pengecekan terhadap masukan yang dibutuhkan dalam proses enkripsi pesan, diantaranya plaintext (pesan) dan kunci enkripsi pesan. Proses enkripsi dapat dilakukan jika plaintext dan kunci enkripsi pesan tidak bernilai null. Baris 13 – 32 menunjukkan proses enkripsi pesan dengan CryptoStream pada C#, adapun hasil dari enkripsi pesan adalah Byte cipher yang ditampung pada variabel Array.
5.2.6
Membuat citra hasil Proses ini dilakukam dengan menyalin Byte citra asli dan pesan ke
memori buffer, Gambar 5.6 menujukkan proses menyalin Byte citra asli dan pesan, private static Bitmap MakeNewUsedBitmap(ref Bitmap source, bool isValidBitmap) 1. { 2. if (source == null) 3. return null; 4. int newWidth = source.Width; 5. int newHeight = source.Height; 6. if (isValidBitmap == false) 7. newWidth = source.Width - 1; 8. Bitmap result = new Bitmap(newWidth, newHeight, source.PixelFormat); 9. BitmapData bmpDataSrc = source.LockBits(new Rectangle(0, 0, source.Width, source.Height), ImageLockMode.ReadOnly, source.PixelFormat); 10. BitmapData bmpDataDst = result.LockBits(new Rectangle(0, 0, result.Width, result.Height), ImageLockMode.WriteOnly, result.PixelFormat); 11. int stride = bmpDataSrc.Stride; 12. int height = source.Height; 13. int width = source.Width; 14. unsafe 15. { 16. for (int i = 0; i < height; i++) 17. { 18. byte* pSrc = (byte*)(bmpDataSrc.Scan0 + i * bmpDataSrc.Stride); 19. byte* pDst = (byte*)(bmpDataDst.Scan0 + i * bmpDataDst.Stride); 20. for (int j = 0; j < stride; j++) 21. { 22. pDst[j] = pSrc[j]; 23. } 24. }} 25. source.UnlockBits(bmpDataSrc); 26. result.UnlockBits(bmpDataDst); 27. return result; 28. }
Gambar 5.6 Citra tanpa padding
57
Method MakeNewUsedBitmap pada Gambar 5.6 memiliki 2 parameter yaitu Bitmap untuk Byte citra asli dan Boolean untuk mengecek status dari citra bitmap. Proses dari method ini menghasilkan bitmap. Selanjutnya Gambar 5.6 Baris 1 - 10 berfungsi untuk menghasilkan citra hasil dengan cara menyalin nilai Byte citra asli ke citra hasil sesuai dengan indeks baris dan indeks kolom, proses ini dapat dikerjakan dengan kondisi nilai Byte citra ≠ null. Selanjutnya untuk kondisi Gambar 5.1 maka 1 piksel width citra yang terakhir akan dijadikan sebagai lokasi untuk menyisipkan pesan, Proses penyalinan Byte citra asli ke citra hasil ditunjukkan pada Gambar 5.6 baris 11 – 28.
5.2.7
Penyisipan pesan Berdasarkan hasil yang diperoleh pada Gambar 5.3 jika kondisi terpenuhi
maka penyisipan pesan dapat dilakukan per Byte untuk setiap lokasi penyisipan. Pesan yang disisipkan pertama adalah header pesan sebesar 5 Byte, dengan dialokasi 3 Byte sebagai penanda pesan dan 2 Byte sebagai informasi panjang pesan. Selanjutnya penyisipan pesan pada lokasi penyisipan pesan/padding, pesan yang disisipkan berupa Byte cipher. Penyisipan pesan dilakukan sebesar panjang Byte pesan pada padding. Untuk citra dengan ukuran width modulo 4 = 0 Byte pesan disisipkan pada piksel terakhir per width sebesar 3 Byte sebesar panjang pesan, Gambar 5.7 baris ke – 14 menunjukkan kondisi penyisipan header pesan pada citra bitmap. Berdasarkan Gambar 5.7 pada baris 1 – 6 berfungsi untuk mengambil nilai String penanda pesan untuk dikonversi ke Byte, selanjutnya mengambil panjang pesan kemudian dikonversi ke String biner untuk disimpan divariabel Array, bit – bit pada variabel Array selanjutnya dikonversi ke Byte, berikutnya nilai untuk Byte penanda pesan dan Byte panjang pesan disimpan di variabel Array. Selanjutnya Gambar 5.7 baris 7 – 17 adalah proses penyisipan header pesan, lokasi yang dibutuhkan untuk menyisipkan pesan sebesar indeks pada variabel Array yang menyimpan header pesan. Penyisipan header pesan akan dikerjakan
sepanjang
kondisi
pengecekan
indexByteCounter
<
58
TotalSteganoHeaderSize, kondisi ini ditunjukkan pada Gambar 5.7 baris ke – 14, sedangkan lokasi untuk menyisipkan Byte pesan yang sedang dikerjkan ditunjukkan pada Gambar 5.7 baris ke – 16. void GetBytesBitmapStegano() 1. { 2. GetBitmapData(); 3. IsSuccess = false; 4. if (BytesResultBitmap == null) { 5. AppMessageBox.ErrorMessage("Format image salah."); 6. return; } 7. if (BytesMessage.Length > MaxBytesStegano) 8. { 9. AppMessageBox.ErrorMessage(ResourceMessage.PesanTerlaluPanjang); 10. return; } 11. int messageLength = BytesMessage.Length; 12. byte[] bytesHeader = GetBytesHeader(SteganoHeaderText); 13. string stringMessageLength = Convert.ToString(messageLength, 2).PadLeft(16, '0'); 14. byte[] bytesMessageLength = General.GetByteArrayFromBinaryString(stringMessageLength); 15. byte[] bytesCompleteHeader = new byte[TotalSteganoHeaderSize]; 16. Buffer.BlockCopy(bytesHeader, 0, bytesCompleteHeader, 0, SteganoHeaderText.Length); 17. Buffer.BlockCopy(bytesMessageLength, 0, bytesCompleteHeader, SteganoHeaderText.Length, bytesMessageLength.Length); 18. int indexByteMessage = 0; 19. int indexByteCounter = 0; 20. bool alreadyDone = false; 21. for (int i = 0; i < _heightImage; i++) { 22. for (int j = _widthImage * 3; j < _widthByte; j++) { 23. if (indexByteCounter < TotalSteganoHeaderSize) { 24. BytesResultBitmap[BitmapHeaderSize + (_widthByte * i) + j] = Tabel 5.6 Penyisipan byte pesan bytesCompleteHeader[indexByteCounter]; 25. } 26. else if (indexByteMessage < BytesMessage.Length){ 27. BytesResultBitmap[BitmapHeaderSize + (_widthByte * i) + j] = BytesMessage[indexByteMessage]; 28. indexByteMessage++; 29. } 30. if (indexByteMessage == BytesMessage.Length) 31. { 32. alreadyDone = true; 33. IsSuccess = true; 34. break; 35. } 36. indexByteCounter++; 37. } 38. if (alreadyDone){ 39. break; 40. } 41. } 42. BytesMessage = null; 43. }
Gambar 5.7 Penyisipan pesan
59
Selanjutnya Gambar 5.7 baris 1 – 10 berfungsi untuk mengecek sebelum dilakukan penyisipan pesan, pengecekan dengan cara membandingkan Byte citra yang menjadi lokasi penyisipan pesan terhadap panjang pesan yang akan disisipkan. Selanjutnya baris 11 – 17 untuk mengambil data stegano yang akan disisipkan pada citra. Berikutnya baris 18 – 24 berfungsi untuk menyisipkan pesan, jika kondisi pada Gambar 5.7 baris ke - 22 belum terpenuhi maka penyisipan pesan pada citra bitmap dikerjakan. Proses penyisipan Byte pesan yang sedang dikerjakan ditunjukkan pada Gambar 5.7 baris ke – 27. Setiap menyisipkan header pesan dan Byte pesan nilai counter di-increment 1. Selanjutnya pada Gambar 5.7 baris 30 – 43 berfungsi untuk pengecekan kondisi penyisipan yang telah dikerjakan, penyisipan Byte pesan akan selesai dikerjakan jika nilai indeks penyisipan pesan telah sama dengan ukuran Byte pesan (indexByteMessage == BytesMessage.Length), kondisi ini ditunjukkan pada Gambar 5.7 barism– 30. Selama kondisi belum terpenuhi proses penyisipan Byte pesan akan dikerjakan. Proses increment indeks Byte pesan tunjukkan pada Gambar 5.7 baris ke - 36.
5.2.8
Proses stegano Setelah proses Gambar 5.7 dikerjakan berikutnya dilakukan pengecekan
untuk mengetahui keberhasilan penyisipan pesan pada citra hasil. Gambar 5.8 menunjukkan proses pengecekan status menyisipkan pesan, public void DoStegano() { GetBytesBitmapStegano(); if (IsSuccess) { IsSuccess = false; if (BytesResultBitmap != null && BytesResultBitmap.Length > 0) { IsSuccess = true; 9. } 10. } 11. } 1. 2. 3. 4. 5. 6. 7. 8.
Gambar 5.8 Proses stegano
60
Proses stegano dinyatakan berhasil setelah Byte citra, header pesan dan Byte pesan disalin atau tidak bernilai null dan panjang Byte citra hasil > 0, proses pengecekan keberhasilan proses stegano ditunjukkan pada Gambar 5.8 baris ke – 7, jika kondisi terpenuhi maka proses penyisipan pesan pada citra berhasil. Gambar 5.8 baris 1 – 2 pada method DoStegano terdapat method GetBytesBitmapStegano merupakan method untuk menyalin Byte citra asli dan menyisipkan pesan ke citra hasil, hasil dari proses method ini selanjutnya dicek dengan kondisi citra yang dihasilkan tidak bernilai null dan panjang Byte citra hasil > 0.
5.3
Ekstraksi Pesan Ekstraksi bertujuan untuk mengambil pesan pada citra stego, untuk
proses ekstraksi dibutuhkan masukan citra stego, keluaran dari proses ekstraksi menghasilkan Byte pesan. Byte Pesan yang dihasilkan selanjutnya didekripsi menggunakan algoritma Rijndael dengan kunci simetris 128 bit, untuk proses dekripsi membutuhkan masukan kunci yang nilainya sama dengan kunci enkripsi. Proses dekripsi Byte pesan akan menghasilkan keluaran plaintext. Ekstraksi dilakukan dengan 2 tahap, pertama ekstraksi Byte header pesan dan yang kedua ekstraksi Byte pesan.
5.3.1
Ekstraksi header pesan Header pesan pada citra stego terdiri dari Byte penanda pesan dan Byte
panjang pesan, dengan alokasi maksimum 10 Byte untuk penanda pesan dan 2 Byte untuk panjang pesan pada citra stego. Proses ekstraksi header pesan dengan cara mengambil nilai Byte untuk setiap indeks baris dari Byte citra stego mulai awal padding sepanjang stride sebanyak Byte header pesan. Proses ekstraksi header pesan ditunjukkan pada Gambar 5.9. Gambar 5.9 baris 1 - 6 method ExtractSteganoImageToByteArray berfungsi mengekstraksi pesan, untuk dapat melakukan ekstraksi maka sebagai tahap awal dilakukan proses pengambilan pesan pada citra stego, proses ini dikerjakan oleh method GetBitmapData. Selanjutnya indeks nilai Byte citra stego
61
yang berisi header pesan diekstraksi kemudian hasil ekstraksi ditampung pada variabel Array, proses ekstraksi Byte header pesan terdiri dari ekstraksi Byte penanda pesan dan Byte panjang pesan. Untuk proses ekstraksi Byte penanda pesan tampilkan pada Gambar 5.9 baris 7 – 19. Setiap indeks Byte penanda pesan yang diekstraksi di-increment 1, proses ini dikerjakan sesuai ukuran Byte penanda pesan. public byte[] ExtractSteganoImageToByteArray(string headerText) { 1. GetBitmapData(); 2. int indexByteCounter = 0; 3. TotalSteganoHeaderSize = headerText.Length + 2; 4. SteganoHeaderText = headerText; 5. byte[] bytesHeader = new byte[TotalSteganoHeaderSize]; 6. bool isDone = false; 7. for (int i = 0; i < _heightImage; i++) 8. { 9. for (int j = _widthImage * 3; j < _widthByte; j++) 10. { 11. if (indexByteCounter < TotalSteganoHeaderSize) 12. bytesHeader[indexByteCounter] = BytesResultBitmap[BitmapHeaderSize + (_widthByte * i) + j]; 13. else 14. { 15. isDone = true; 16. break; } 17. indexByteCounter++; } 18. if (isDone) { 19. break; } }
Gambar 5.9 Ekstraksi penanda pesan 5.3.2
Konversi hasil header pesan Setelah mengekstraksi Byte penanda pesan, maka hasil ekstraksi
dibandingkan dengan Byte masukan penanda pesan, jika Byte penanda pesan bernilai sama dengan nilai Byte masukan penanda pesan maka proses selanjutnya ekstraksi panjang pesan. Sebaliknya jika Byte hasil ekstraksi penanda pesan tidak sama dengan masukan Byte penanda pesan maka tampilkan pesan kesalahan. Gambar 5.10 menunjukkan proses ekstraksi untuk panjang pesan, Gambar 5.10 pada baris 1 – 12 menunjukkan proses pengecekan hasil ekstraksi untuk penanda pesan, jika penanda pesan dicek bernilai benar maka dapat melanjutkan proses ekstraksi panjang pesan. Proses ekstraksi panjang pesan ditunjukkan pada baris ke 4 – 8, ekstraksi dilakukan dengan mengkonversi Byte panjang pesan ke String biner dengan format 8 bit per Byte, kemudian hasil
62
ekstraksi bit – bit tersebut dikonvesi ke Integer, proses konversi ditunjukkan pada baris ke – 9. 1. 2. 3. 4. 5.
if (tempHeaderText != SteganoHeaderText) { AppMessageBox.ErrorMessage(ResourceMessage.BukanFileStegano); return null; } byte[] bytesMessageLength = new byte[2]; Buffer.BlockCopy(bytesHeader, SteganoHeaderText.Length, bytesMessageLength, 0, 2); 6. string binaryMessageLength = string.Empty; 7. for (int i = 0; i < bytesMessageLength.Length; i++) 8. binaryMessageLength += Convert.ToString(bytesMessageLength[i], 2).PadLeft(8, '0'); 9. int messageLength = Convert.ToInt32(binaryMessageLength, 2) + TotalSteganoHeaderSize; 10. int indexByteMessage = 0; 11. byte[] bytesMessage = new byte[messageLength]; 12. isDone = false;
Gambar 5.10 Konversi hasil header pesan 5.3.3
Ekstraksi pesan Ekstraksi pesan dapat dilakukan setelah proses ekstraksi panjang pesan
dikerjakan, karena panjang pesan menjadi batasan dalam mengektraksi Byte pesan. Setiap Byte pesan hasil ekstraksi disimpan pada variabel Array penampung pesan. Proses ekstraksi pesan dikerjakan dari indeks yang terakhir digunakan untuk ekstraksi + 1. Gambar 5.11 menunjukkan proses ekstraksi Byte pesan pada citra stego. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
for (int i = 0; i < _heightImage; i++) { for (int j = _widthImage * 3; j < _widthByte; j++) { if (indexByteMessage < messageLength) bytesMessage[indexByteMessage] = BytesResultBitmap[54 + (_widthByte * i) + j]; indexByteMessage++; if (indexByteMessage == messageLength) { isDone = true; break; } } if (isDone) { break; } } byte[] bytesResult = new byte[bytesMessage.Length TotalSteganoHeaderSize]; Buffer.BlockCopy(bytesMessage, TotalSteganoHeaderSize, bytesResult, 0, bytesResult.Length); return bytesResult; }
Gambar 5.11 Ekstraksi pesan
63
Gambar 5.11 baris 1 – 18 berfungsi mengekstraksi Byte pesan pada citra stego. Sebelum ekstraksi Byte pesan dilakukan pengecekan untuk mengetahui kondisi jumlah indeks counter Byte pesan yang telah diekstraksi. Kondisi pengecekan ditunjukkan pada Gambar 5. 11 baris ke - 6. Jika nilai indeks counter belum sama dengan panjang maka kerjakan proses ekstraksi Byte pesan sampai jumlah indeks counter Byte pesan sama dengan panjang pesan. Setiap proses ekstraksi Byte pesan dikerjakan maka increment 1 untuk indeks counter pesan. Selanjutnya kembali dilakukan pengecekan untuk jumlah indeks counter. Jika jumlah indeks counter telah sama dengan panjang pesan maka proses ekstraksi selesai, proses ini ditunjukkan pada Gambar 5.11 baris ke 7 - 10. Setiap Byte pesan yang diekstraksi hasilnya akan disimpan pada variabel byteResult dalam bentuk Array. Proses penyimpanan Byte hasil ekstraksi ditunjukkan pada Gambar 5.11 baris 16 – 18.
5.4
Algoritma End of File (EoF) Algoritma EoF menyisipkan pesan dengan cara langsung pada akhir file.
pesan yang disisipkan pada akhir file akan memiliki tanda khusus sebagai pengenal awal dan akhir dari Byte pesan yang disisipkan pada citra stego. Penanda awal pesan dikenal dengan penanda pesan, penanda pesan berupa karakter ASCII yang dialokasi berukuran maksimum 10 Byte. Selanjutnya ukuran pesan dialokasikan sebesar 4 Byte. Penanda pesan dan ukuran pesan disisipkan pada akhir pesan citra stego. penanda pesan dan ukuran pesan disebut sebagai header pesan. Pada algoritma EoF header pesan disisipkan diakhir Byte pesan.
5.4.1
Inisialisasi algoritma EoF Inisialiasi dilakukan untuk menanpung Byte citra dan pesan yang akan
disalin pada citra hasil. Adapun header pesan terdiri dari penanda pesan yang dimasukan oleh pengguna dengan ukuran maksimum 10 Byte dan ukuran informasi pesan sebesar 7 Byte. Gambar 5.12 menunjukkan inisialisasi untuk algoritma EoF,
64
1. 2. 3. 4. 5. 6. 7.
private const int BitmapHeaderSize = 54; private int _widthImage; private int _widthByte; private int _heightImage; private int newHeightImage; const string SteganoHeaderText = ""; private const int TotalSteganoHeaderSize = 7;
Gambar 5.12 Pembuatan citra hasil 5.4.2
Citra hasil Citra hasil berfungsi untuk menampung nilai Byte citra asli dan pesan,
citra hasil merupakan citra stego yang dibentuk dari menyalin nilai Byte citra asli dan pesan pada memori buffer kemudian hasil pada memori buffer disimpan dalam format bitmap. Gambar 5.13 menunjukkan proses pengalokasian memori untuk menampung Byte citra dan pesan. private static Bitmap MakeNewUsedBitmap(ref Bitmap source, int newHeight) 1. { 2. if (source == null) 3. return null; 4. int newWidth = source.Width; 5. Bitmap result = new Bitmap(newWidth, newHeight, source.PixelFormat); 6. BitmapData bmpDataSrc = source.LockBits(new Rectangle(0, 0, source.Width, source.Height), ImageLockMode.ReadOnly, source.PixelFormat); 7. BitmapData bmpDataDst = result.LockBits(new Rectangle(0, 0, result.Width, result.Height), ImageLockMode.WriteOnly, result.PixelFormat); 8. int stride = bmpDataSrc.Stride; 9. int height = source.Height; 10. int width = source.Width; 11. unsafe 12. { 13. for (int i = 0; i < height; i++) 14. { 15. byte* pSrc = (byte*)(bmpDataSrc.Scan0 + i * bmpDataSrc.Stride); 16. byte* pDst = (byte*)(bmpDataDst.Scan0 + i * bmpDataDst.Stride); 17. for (int j = 0; j < stride; j++) 18. { 19. pDst[j] = pSrc[j]; 20. } 21. } 22. } 23. source.UnlockBits(bmpDataSrc); 24. result.UnlockBits(bmpDataDst); 25. return result; 26. }
Gambar 5.13 Citra hasil
65
5.4.3
Kalkulasi kapasitas pesan Pada algoritma EoF Byte pesan yang mampu disisipkan pada citra
berdasarkan struktur header citra bitmap untuk ukuran height dan width adalah 4 Byte, Gambar 5.14 menunjukkan proses menentukan kapasitas pesan yang mampu disisipkan pada citra, public static int GetMaxBytesSteganoCount(ref Bitmap sourceBmp) { 1. if (sourceBmp == null || sourceBmp.PixelFormat != PixelFormat.Format24bppRgb){ 2. return 0;} 3. int width = sourceBmp.Width; 4. int height = sourceBmp.Height; 5. BitmapData bmpdata = sourceBmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); 6. int stride = bmpdata.Stride; 7. sourceBmp.UnlockBits(bmpdata); 8. return (int.MaxValue - sourceBmp.Height) TotalSteganoHeaderSize;}
Gambar 5.14 Kalkulasi kapasitas pesan Gambar 5.14 pada baris 1 – 8 untuk mengecek Byte citra dan format citra, jika hasil pengecekan bernilai null maka Byte pesan yang dapat disisipkan sebesar nol. Sebaliknya jika kondisi terpenuhi, ambil ukuran width dan height citra, selanjutnya hitung kapasitas pesan yang dapat disisipkan pada citra. Pada baris 10 adalah proses untuk menghitung kapasitas pesan yang dapat disisipkan pada citra. 5.4.4
Salin byte citra dan sisip pesan Proses penyisipan pesan pada citra dilakukan dengan cara menyalin nilai
Byte citra ke citra hasil sesuai dengan posisi indeks dari Byte citra asli. Setelah semua Byte citra disalin selanjutnya menyisipkan pesan, penyisipan dimulai dari setelah akhir Byte citra. Pesan terdiri dari header pesan dan Byte cipher. Ukuran header pesan terdiri dari penanda pesan untuk tanda awal keberadaan pesan pada citra stego. Pesan yang disisipkan pada citra adalah karakter ASCII yang dienkripsi dengan algoritma Rijndael menggunakan kunci 128 bit. Gambar 5.15
66
adalah method untuk mengalokasikan Byte citra, Byte cipher dan Byte header pesan ke memori buffer. void GetBytesBitmapStegano() 1. { 2. GetBitmapData(); 3. IsSuccess = false; 4. if (BytesResultBitmap == null) 5. { 6. AppMessageBox.ErrorMessage("Format image salah."); 7. return; 8. } 9. if (BytesMessage.Length > MaxBytesStegano){ 10. AppMessageBox.ErrorMessage(ResourceMessage.PesanTerlaluPanjang); 11. return; 12. } 13. int messageLength = BytesMessage.Length; 14. byte[] bytesHeader = GetBytesHeader(SteganoHeaderText); 15. string stringMessageLength = Convert.ToString(messageLength, 2).PadLeft(32, '0'); 16. byte[] bytesMessageLength = 17. General.GetByteArrayFromBinaryString(stringMessageLength); 18. byte[] bytesCompleteHeader = new byte[TotalSteganoHeaderSize]; 19. Buffer.BlockCopy(bytesHeader, 0, bytesCompleteHeader, 0, SteganoHeaderText.Length); 20. Buffer.BlockCopy(bytesMessageLength, 0, bytesCompleteHeader, SteganoHeaderText.Length, bytesMessageLength.Length); 21. byte[] bytesMessageToHide = new byte[messageLength + TotalSteganoHeaderSize]; 22. Buffer.BlockCopy(bytesCompleteHeader, 0, bytesMessageToHide, 0, bytesCompleteHeader.Length); 23. Buffer.BlockCopy(BytesMessage, 0, bytesMessageToHide, bytesCompleteHeader.Length, messageLength); 24. Buffer.BlockCopy(bytesMessageToHide, 0, BytesResultBitmap, BitmapHeaderSize, bytesMessageToHide.Length); 25. IsSuccess = true; 26. BytesMessage = null; 27. }
Gambar 5.15 Salin byte citra dan sisip pesan Gambar 5.15 baris 1 – 12 berfungsi untuk menjalankan method GetBitmapData, method ini berfungsi untuk mengambil data citra yang akan digunakan sebagai media untuk menampung pesan, kemudian berdasarkan informasi data citra dilakukan pengecekan untuk format citra dan panjang pesan yang dapat ditampung pada citra tersebut. Jika semua kondisi pengecekan terpenuhi maka alokasikan semua Byte citra, Byte pesan dan Byte header pesan ke memori buffer, proses pengalokasian masing - masing dari nilai Byte tersebut ditunjukkan pada baris 13 - 27.
67
5.4.5
Ekstraksi pesan Ekstraksi pesan pada algoritma EoF bertujuan untuk mengambil Byte
pesan pada citra stego, proses ekstraksi pada algoritma EoF dilakukan dengan tahapan mengekstraksi header pesan, karena header pesan sebagai penanda awal dan akhir dari pesan yang ada pada citra stego. Header pesan terletak pada akhir citra stego, dengan demikian proses ekstraksi dimulai dari Byte yang paling akhir. Gambar 5.16 menunjukkan proses ekstraksi pesan, public byte[] ExtractSteganoImageToByteArray() { 1. GetBitmapData(); 2. byte[] bytesHeader = new byte[TotalSteganoHeaderSize]; 3. Buffer.BlockCopy(BytesResultBitmap, BitmapHeaderSize, bytesHeader, 0, TotalSteganoHeaderSize); 4. byte[] byteSteganoHeaderText = new byte[SteganoHeaderText.Length]; 5. Buffer.BlockCopy(BytesResultBitmap, BitmapHeaderSize, byteSteganoHeaderText, 0, byteSteganoHeaderText.Length); 6. string tempHeaderText = Encoding.ASCII.GetString(byteSteganoHeaderText); 7. if (tempHeaderText != SteganoHeaderText) 8. { 9. AppMessageBox.ErrorMessage(ResourceMessage.BukanFileStegano); 10. return null; 11. } 12. byte[] bytesMessageLength = new byte[2]; 13. Buffer.BlockCopy(bytesHeader, 3, bytesMessageLength, 0, 2); 14. string binaryMessageLength = string.Empty; 15. for (int i = 0; i < bytesMessageLength.Length; i++) 16. binaryMessageLength += Convert.ToString(bytesMessageLength[i], 2).PadLeft(8, '0'); 17. int messageLength = Convert.ToInt32(binaryMessageLength, 2) ; 18. byte[] bytesMessage = new byte[messageLength]; 19. Buffer.BlockCopy(BytesResultBitmap, BitmapHeaderSize + TotalSteganoHeaderSize, bytesMessage, 0, messageLength); 20. return bytesMessage; 21. }
Gambar 5.16 Ekstraksi pesan algoritma EoF . Gambar 5.16 pada baris 1 – 11 adalah proses ekstraksi header pesan pada citra stego menggunakan method GetBitmapData untuk mengambil Byte citra stego, selanjutnya alokasikan Byte Array sepanjang indeks panjang penanda pesan untuk menampung hasil ekstraksi nilai Byte penanda pesan, selanjutnya ekstraksi penanda pesan, kemudian dilakukan pengecekan terhadap hasil ekstraksi, jika hasil ekstraksi nilai Byte penanda sama dengan masukan nilai Byte penanda pesan ketika melakukan penyisipan maka dilanjutkan dengan mengekstraksi nilai Byte
68
panjang pesan sebesar 7 Byte. Selanjutnya nilai Byte dikonversikan ke String biner dalam format 8 bit per Byte, nilai String biner yang dihasilkan selanjutnya dikonversikan ke Integer. Tahapan berikutnya adalah mengekstraksi nilai Byte pesan dengan cara meng-copy nilai Byte pesan pada citra stego dimulai dari Byte yang terakhir digunakan untuk dalam proses ekstraksi, hasil dari proses ekstraksi nilai Byte pesan dialokasikan ke variabel Array yang menjadi penanpung pesan, proses ekstraksi dikerjakan sebesar panjang pesan. Sebaliknya jika nilai penanda pesan tidak sama dengan nilai masukan penanda pesan ketika menyisipkan pesan maka tampilkan pesan kesalahan.
5.5
Algoritma Modifikasi Least Significant Bit (MLSB) Steganografi dengan menggunakan MLSB diartikan sebagai penyisipan
bit - bit pesan ke citra bitmap sebagai media penampung pesan. Untuk menyisipkan pesan dibutuhkan data masukan antara lain, citra sebagai media untuk menanpung pesan, pesan berupa plaintext berkarakter ASCII, penanda pesan untuk mengenali pesan pada citra stego dan kunci simetris 128 bit sebagai kunci untuk enkripsi plaintext untuk menghasilkan Byte cipher. Adapun modifikasi pada algoritma MLSB adalah menyisipkan bit stegano tidak pada setiap Byte citra melainkan bit – bit stgano disisipkan pada Byte citra yang memiliki nilai Byte 254 atau 255. Tahapan untuk penyisipan bit - bit pesan di mulai dengan mengecek jumlah Byte citra yang memiliki nilai Byte citra bernilai 254 atau 255 pada setiap indeks width dan height untuk citra yang akan digunakan sebagai media penampung bit stegano. Kemudian dilakukan pengukuran jumlah pesan yang disisipkan pada Byte citra. Selanjutnya hasil pengukuran jumlah dari masing – masing masukan dibandingkan, jika hasil perbandingan jumlah Byte stagano lebih besar maka proses penyisipan tidak dapat dikerjakan, sebalikanya jika ukuran pesan lebih kecil dari jumlah Byte citra yang bernilai 254 atau 255 maka proses penyisipan dikerjakan.
69
5.5.1
Mencacah jumlah byte citra yang mampu disisipi pesan Method GetBytesSteganoBitmapMlsb berfungsi untuk mencacah jumlah
Byte citra yang bernilai Byte 254 atau 255. Tujuannya untuk mengkalkulasi jumlah pesan yang mampu disisipkan. Gambar 5.17 menunjukkan proses mencacah Byte citra dan kalkulasi jumlah pesan yang mampu disisipkan pada sebuah citra. public byte[] 1. 2.
byte[] GetBytesSteganoBitmapMlsb(ref byte[] bytesSourceBitmap, ref bytesMessage, string headerText) { byte[] bytesSteganoBitmap = new byte[bytesSourceBitmap.Length]; Array.Copy(bytesSourceBitmap, bytesSteganoBitmap, bytesSourceBitmap.Length); 3. StringSubHeader = headerText; . 4. _lengthStringSubHeader = StringSubHeader.Length; 5. TotalSteganoBitHeaderSize = (StringSubHeader.Length + 2) * 8; 6. int byteBitmapValue; 7. long byteUsed = 0; 8. bool mlsb = false; 9. for (int i = BytesHeaderSize + TotalSteganoBitHeaderSize + 1; i < bytesSteganoBitmap.Length; i++) { 10. byteBitmapValue = bytesSteganoBitmap[i]; 11. if (byteBitmapValue >= 254) { 12. byteUsed++; 13. if (byteUsed > bytesMessage.Length * 8) { 14. mlsb = true; 15. break; } } } 16. if (mlsb == false) { AppMessageBox.ErrorMessage(ResourceMessage.PesanTerlaluPanjang); 17. return null; }
Gambar 5.17 Mencacah jumlah byte citra yang mampu disisipi pesan Gambar 5.17 pada baris 1 - 17 menunjukkan penggunaan method GetMaxBytesSteganoCount untuk mencacah nilai Byte citra, pencacahan nilai Byte citra untuk mengkalkulasi jumlah Byte pesan yang mampu disisipkan pada citra. Proses pencacahan dilakukan pada setiap indeks Byte Array, setiap nilai indeks Byte Array dicek, adapun kondisi untuk pengecekan jika Byte citra bernilai >= 254 maka dilakukan increment 1. Proses pencacahan nilai Byte citra dikerjakan sepanjang nilai indeks yang dimiliki Byte citra. Selanjutnya hasil total pencacahan Byte yang bernilai 254 atau 255 dibandingkan dengan dengan panjang pesan yang disisipkan pada citra. Jika jumlah Byte citra lebih besar maka proses penyisipan pesan dikerjakan, sebaliknya jika jumlah Byte citra lebih kecil maka tampilkan pesan. Proses pengecekan nilai Byte citra dan perbandingan jumlah Byte citra
70
yang bernilai 254 atau 255 dengan panjang pesan ditunjukkan pada baris ke 11 17.
5.5.2
Sisip penanda pesan Penyisipan bit - bit penanda pesan pada citra bitmap dilakukan dengan
mengkonversi nilai Byte ke String biner dalam format 8 bit untuk setiap Byte. Selanjutnya menyisipkan bit – bit penanda pesan pada Byte citra bitmap setelah header citra. Byte penanda pesan yang mampu disisipkan ke Byte citra maksimal 10 Byte. Gambar 5.18 menunjukkan proses konversi dan penyisipan bit – bit penanda pesan. 1. 2. 3.
11.
_lengthStringSubHeader = StringSubHeader.Length; byte[] bytesSubHeader = Encoding.ASCII.GetBytes(StringSubHeader); string stringBitSubHeader = bytesSubHeader.Aggregate(String.Empty, (current, t) => current + Convert.ToString(t, 2).PadLeft(8, '0')); 4. string newStringBitBitmap; 5. int indexByteUsed = 0; 6. int lastByteBitmapUsed = 0; 7. for (int i = BytesHeaderSize; i < bytesSteganoBitmap.Length; i++) 8. { 9. byteBitmapValue = bytesSteganoBitmap[i]; 10. indexByteUsed++; if (indexByteUsed <= _lengthStringSubHeader * 8) 12. { 13. string stringBitBitmap = Convert.ToString(byteBitmapValue, 2).PadLeft(8, '0'); 14. 15. 16. 17. 18. 19. 20. 21.
newStringBitBitmap = string.Concat(stringBitBitmap.Remove(7), stringBitSubHeader[indexByteUsed - 1]); bytesSteganoBitmap[i] = Convert.ToByte(newStringBitBitmap, 2); } if (indexByteUsed == _lengthStringSubHeader * 8) { lastByteBitmapUsed = i; break; }
Gambar 5.18 Sisip penanda pesan Gambar 5.18 baris 1 – 3 untuk mengkonversi nilai String penanda pesan ke Byte kemudian dari Byte dikonversi ke String biner. Konversi Byte ke String biner dilakukan dengan format 8 bit untuk setiap Byte penanda pesan. Selanjutnya Gambar 5.18 baris 4 – 21 berfungsi untuk melakukan penyisipan bit – bit penanda pesan pada String biner citra. Proses ini dikerjakan secara berulang sejumlah bit
71
penanda pesan. Setiap bit penanda pesan selesai disisipkan pada Byte citra selanjutnya dicek, kondisi pengecekan apakah jumlah Byte citra yang disisipi bit penanda pesan <= panjang bit penanda pesan, jika “benar” maka penyisipan penanda pesan selesai, sebaliknya jika “tidak” maka sisipkan bit penanda pesan kembali. Setiap penyisipan bit penanda pesan nilai String biner dikonversi ke Byte, nilai Byte mengisi Byte citra stego sesuai posisi indeks baris dan indeks kolom dari citra asli.
5.5.3
Sisip panjang pesan Penyisipan bit - bit panjang pesan bertujuan untuk menyimpan informasi
panjang pesan yang disisipkan pada citra stego, panjang pesan diperoleh dari masukan karakter ASCII oleh pengguna. Proses menyisipkan bit - bit panjang pesan dilakukan dengan mengkonversi ke String biner, kemudian hasil konversi bit – bit panjang pesan disisipkan pada Byte citra yang terakhir digunakan oleh penanda pesan + 1, Gambar 5.19 menunjukkan proses menyisipkan bit – bit panjang pesan pada citra. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
16. 17. 18.
string stringBitMsgCount = Convert.ToString(bytesMessage.Length, 2).PadLeft(BitMessageLengthInfo, '0'); indexByteUsed = 0; for (int i = lastByteBitmapUsed + 1; i < bytesSteganoBitmap.Length; i++) { byteBitmapValue = bytesSteganoBitmap[i]; indexByteUsed++; if (indexByteUsed <= BitMessageLengthInfo) { string stringBitBitmap = Convert.ToString(byteBitmapValue, 2).PadLeft(8, '0'); newStringBitBitmap = string.Concat(stringBitBitmap.Remove(7), stringBitMsgCount[indexByteUsed - 1]); bytesSteganoBitmap[i] = Convert.ToByte(newStringBitBitmap, 2); } if (indexByteUsed == BitMessageLengthInfo) { lastByteBitmapUsed = i; break; } }
Gambar 5.19 Sisip panjang pesan
72
Gambar 5.19 baris baris 1 – 18 method stringBitMsgCount untuk menyisipkan bit – bit panjang pesan pada citra, prosesnya dengan cara mengkonversi panjang pesan ke String biner dengan format 16 bit, selanjutnya dicek jumlah Byte citra yang telah disisipi bit panjang pesan, selama counter penyisipan masih lebih kecil dari panjang bit panjang pesan maka proses penyisipan bit - bit panjang pesan pada citra akan dikerjakan. Sebaliknya jika kondisi counter tidak lebih kecil maka proses penyisipan selesai. Selanjutnya setelah penyisipan selesai, nilai String biner dikonversikan kembali ke Byte. Setiap penyisipan bit panjang pesan pada Byte citra bitmap nilai String biner dikonversi ke Byte, nilai Byte mengisi nilai Byte citra stego sesuai posisi indeks height dan indeks width dari citra hasil. Selanjutnya simpan Byte yang terakhir digunakan untuk penyisipan bit.
5.5.4
Sisip pesan Penyisipan bit – bit pesan dilakukan setelah pengecekan perbandingan
panjang pesan yang akan disisipkan kondisinya lebih kecil dari jumlah Byte citra yang bernilai 254 atau 255. Penyisipan bit - bit pesan pada citra bitmap dilakukan dengan mengkonversi Byte cipher ke String biner, selanjutnya bit - bit pesan akan disisipkan pada Byte citra yang bernilai Byte 254 atau 255. Gambar 5.20 menunjukkan proses penyisipan bit – bit pesan pada Byte citra. Gambar 5.20 pada baris 1 – 12 adalah proses memulai penyisipan bit – bit pesan, dimulai dengan pengecekan pada citra Byte yang terakhir digunakan, ukuran Byte yang akan cek sebesar yang telah dikerjakan sebelumnya, seperti yang ditunjukkan pada Gambar 5.18. Penyisipan bit - bit pesan dikerjakan dengan cara pengecekan setiap indeks Byte citra bernilai 254 atau 255. Jika “benar” maka konversi nilai Byte ke biner dengan format 8 bit selanjutnya sisipkan bit pesan pada bit terakhir dari nilai biner citra. Baris 13 – 19 berfungsi mengkonversi String biner hasil sisip bit pesan ke Byte kemudian kembali menyisipkan nilai Byte pada citra hasil. Jika “tidak” maka dicek Byte citra berikutnya. Proses ini akan dikerjakan secara berulang sebanyak jumlah indeks Byte citra.
73
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
int indexByteMsg = 0; int bitIndex = 0; byteUsed = 0; for (int i = lastByteBitmapUsed + 1; i < bytesSteganoBitmap.Length; i++) { byteBitmapValue = bytesSteganoBitmap[i]; if (byteBitmapValue >= 254){ int byteMsgValue = bytesMessage[indexByteMsg]; string stringBitBitmap = Convert.ToString(byteBitmapValue, 2).PadLeft(8, '0'); string stringBitChipperText = Convert.ToString(byteMsgValue, 2).PadLeft(8, '0'); newStringBitBitmap = string.Concat(stringBitBitmap.Remove(7), stringBitChipperText[bitIndex]); bytesSteganoBitmap[i] = Convert.ToByte(newStringBitBitmap, 2); bitIndex++; byteUsed++; if (byteUsed % 8 == 0){ bitIndex = 0; indexByteMsg++;} if (byteUsed == bytesMessage.Length * 8) break;} } return bytesSteganoBitmap;}
Gambar 5.20 Sisip pesan 5.6
Ekstraksi Algoritma MLSB Ekstraksi dengan algoritma MLSB adalah proses mengekstrasi bit - bit
pesan pada citra stego. Ekstraksi dilakukan dari sisi penerima pesan, tahapan ekstraksi terdiri dari ekstraksi bit – bit penanda pesan berikutnya hasil String biner penanda pesan dikonversi ke Byte kemudian Byte dikonversi ke String. Proses selanjutnya melakukan pengecekan penanda pesan. Jika penanda pesan bernilai sama dengan hasil ekstraksi penanda pesan pada citra stego maka ekstraksi bit – bit ukuran Byte pesan dengan cara yang sama dengan sebelumnya. Hasil String biner panjang pesan selanjutnya dikonversi ke Byte, selanjutnya Byte panjang pesan dikonversi ke Integer. Panjang pesan berfungsi sebagai batasan dalam ekstraksi bit – bit pesan. Setelah kedua proses ekstraksi dikerjakan selanjutnya ekstraksi bit – bit pesan dengan cara konversi setiap nilai Byte 254 atau 255 citra stego sebanyak ukuran Byte pesan. Hasil ekstraksi bit – bit pesan dikonversi ke Byte, Byte pesan yang dihasilkan adalah Byte cipher untuk kemudian didekripsi menggunakan algoritma Rijndael dengan kunci simetris 128 bit untuk menghasilkan plaintext.
74
5.6.1
Pengambilan byte citra untuk ekstraksi bit penanda pesan Ekstraksi bit – bit penanda pesan pada citra stego bertujuan memastikan
bahwa citra masukan adalah citra stego. Proses ekstraksi dilakukan dengan cara mengkonversi Byte citra stego ke String biner dimulai setelah header citra, bit terakhir/terendah disimpan dalam variabel penampung bit. Setiap jumlah bit yang disimpan di-modulo 8 = 0 maka konversi ke Byte, selanjutnya dari Byte dikonversi ke String. Proses ekstraksi bit – bit penanda pesan dikerjakan sepanjang nilai counter bit belum sama dengan panjang bit penanda pesan. Gambar 5.21 menunjukkan method ekstraksi bit – bit penanda pesan pada citra stego. Berdasarkan Gambar 5.21 baris 1 – 12 method GetBytesMessageMlsb dengan parameter Byte untuk mengekstraksi bit – bit penanda pesan, panjang pesan dan pesan pada citra stego. Hasil keluaran dari method ini adalah Byte Array. Selanjutnya baris 13 – 29 mengekstraksi bit – bit penanda pesan pada citra stego. Ekstraksi dengan cara mengkonversi Byte citra stego ke String biner kemudian bit terakhir/terendah disimpan pada variable penampung bit yaitu stringBitSubHeader, ekstraksi nilai Byte citra dimulai setelah header citra. Selanjutnya pengecekan, apakah jumlah counter bit di- modulo 8 = 0 dan indeks Byte penanda pesan masih lebih kecil dari panjang penanda pesan, jika “benar” maka konversi String biner ke Byte. Selanjutnya increment 1 untuk indeks Byte penanda pesan, sebaliknya jika “tidak” maka ekstraksi bit penanda pesan berikutnya dengan proses yang sama. Proses ekstraksi bit penanda pesan akan dikerjakan selama jumlah bit counter penanda pesan telah bernilai sama dengan jumlah indeks penanda pesan dikali 8. Setelah ekstraksi bit penanda pesan maka simpan indeks Byte citra stego yang terakhir digunakan. Selanjutnya baris ke - 29 mengecek apakah Byte hasil ekstraksi bernilai sama dengan nilai masukan penanda pesan, jika “benar” maka ekstraksi panjang pesan, sebaliknya jika “tidak” maka kerjakan baris 30 – 34.
75
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
public byte[] GetBytesMessageMlsb(ref byte[] bytesSteganoBitmap) { int checkCounter = 0; int byteValue; int byteIndex = 0; int byteCounter = 0; string stringBitBitmap; int lastByteBitmapUsed = 0; int byteMsgCount = 0; int indexByteSubHeader = 0; byte[] bytesSubHeader = new byte[_lengthStringSubHeader]; string stringBitSubHeader = string.Empty; for (int i = BytesHeaderSize; i < bytesSteganoBitmap.Length; i++) { byteValue = bytesSteganoBitmap[i]; checkCounter++; stringBitSubHeader += Convert.ToString(byteValue, 2).PadLeft(8, '0').Substring(7); if (checkCounter % 8 == 0 && indexByteSubHeader < _lengthStringSubHeader) { bytesSubHeader[indexByteSubHeader] = Convert.ToByte(stringBitSubHeader, 2); stringBitSubHeader = string.Empty; indexByteSubHeader++; } if (checkCounter == _lengthStringSubHeader * 8) { lastByteBitmapUsed = i; break; }} char[] charsSubHeader = Encoding.ASCII.GetChars(bytesSubHeader); string stringSubHeader = charsSubHeader.Aggregate(string.Empty, (current, t) => current + t); if (stringSubHeader != StringSubHeader) {AppMessageBox.ErrorMessage(ResourceMessage.BukanFileStegano ); return null;} string stringBitMsgCount = string.Empty; checkCounter = 0;
Gambar 5.21 Pengambilan byte stego untuk ekstraksi bit penanda pesan 5.6.2
Ekstraksi panjang pesan Ekstraksi bit - bit panjang pesan untuk mengetahui panjang pesan pada
citra stego. Panjang pesan sebagai batasan untuk mengekstraksi bit - bit pesan pada citra stego. Ekstraksi dimulai dari Byte citra stego yang terakhir digunakan + 1. Gambar 5.22 menunjukkan proses ekstraksi bit – bit panjang pesan pada citra stego. Gambar 5.22 baris 1 – 11 untuk mengekstraksi bit – bit panjang pesan dengan alokasi sebesar 16 bit. Proses ekstraksi dilakukan dengan cara mengkonversi Byte citra indeks yang terakhir digunakan + 1 ke String biner
76
dengan format 8 bit, selanjutnya simpan bit yang terendah/terakhir di variabel stringBitMsgCount. Selanjutnya mengecek jumlah counter Byte citra stego yang diekstraksi, jika memenuhi kondisi yaitu jumlah counter Byte sama dengan jumlah bit untuk panjang pesan maka konversi nilai variabel stringBitMsgCount ke Integer, sebaliknya jika belum memenuhi kondisi kerjakan proses ekstraksi bit panjang pesan pada Byte berikutnya, 1. for (int i = lastByteBitmapUsed + 1; i < bytesSteganoBitmap.Length; i++) 2. { 3. byteValue = bytesSteganoBitmap[i]; 4. checkCounter++; 5. stringBitBitmap = Convert.ToString(byteValue, 2).PadLeft(8, '0'); 6. stringBitMsgCount += stringBitBitmap[7]; 7. if (checkCounter == BitMessageLengthInfo) 8. { 9. lastByteBitmapUsed = i; 10. byteMsgCount = Convert.ToInt32(stringBitMsgCount, 2); 11. break; } 12. }
Gambar 5.22 Ekstraksi panjang pesan 5.6.3
Ekstraksi pesan Ekstraksi bit - bit stegano pada citra stego dikerjakan jika hasil ekstraksi
penanda pesan bernilai sama dengan nilai default penanda pesan dan ukuran Byte pesan pada citra stego telah diekstraksi. Ekstraksi bit – bit pesan dilakukan dengan cara mengkonversi Byte citra yang bernilai 254 atau 255 citra stego. Gambar 5.23 menunjukkan proses ekstraksi bit – bit pesan pada citra stego. Gambar 5.23 baris 1 – 11 untuk mengidentifikasi indeks Byte citra stego, mengecek Byte citra stego yang terakhir digunakan + 1, jika Byte citra bernilai 254 atau 255, konversi Byte citra stego ke String biner, kemudian ekstraksi dengan cara menyimpan bit terakhir/terendah dari String biner citra stego divariabel stringBitMsg. Selanjutnya mengecek jumlah Byte citra yang telah diekstraksi, jika counter Byte citra di-modulo 8 = 0, maka konversi bit - bit pesan ke Byte, kemudian Byte hasil konversi disimpan di variabel Array bytesMessage, sebaliknya Byte counter di-modulo 8 ≠ 0 maka kerjakan ekstraksi bit pesan pada Byte citra berikutnya. Ekstraksi bit pesan dikerjakan selama jumlah indeks Byte citra stego yang bernilai 254 atau 255 belum memenuhi kondisi nilai yang sama
77
dengan ukuran panjang pesan, kondisi pengecekan ini ditunjukkan pada Gambar 5.23 baris ke 15 – 16. 1.
for (int i = lastByteBitmapUsed + 1; i < bytesSteganoBitmap.Length; i++) { byteValue = bytesSteganoBitmap[i]; if (byteValue >= 254) { stringBitBitmap = Convert.ToString(byteValue, 2); stringBitMsg += stringBitBitmap[7]; byteCounter++; if (byteCounter % 8 == 0) { byteCounter = 0; bytesMessage[byteIndex] = Convert.ToByte(stringBitMsg, 2); byteIndex++; stringBitMsg = string.Empty; if (byteIndex == byteMsgCount) break; } }} return bytesMessage; } } }
2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Gambar 5.23 Ekstraksi pesan 5.7
Algoritma Rijndael Pada penelitian ini enkripsi pesan menggunakan algoritma Rijndael
dengan kunci simetris 128 bit, dengan demikian proses enkripsi atau dekripsi akan dikerjakan 10 iterasi. Bila bit data yang digunakan pada proses enkripsi belum memenuhi 128 bit atau kelipatannya, maka tambahkan bit yang bernilai 0 agar data tersebut dapat digunakan pada proses enkripsi. Implementasi proses enkripsi dan dekripsi menggunakan algoritma Rijndael memanfaatkan library yang telah disediakan oleh tools C#.
5.7.1
Implementasi enkripsi Proses enkripsi dengan algoritma Rijndael membutuhkan masukan data
plaintext dan kunci simetris 128 bit. Proses enkripsi pesan memanfaatkan method CreateEncryptor yang telah tersedia pada library tools C#. Hasil dari enkripsi menghasilkan Byte cipher. Gambar 5.24 menunjukkan enkripsi dengan algoritma Rijndael memanfaatkan method CreateEncryptor untuk menghasilkan Byte cipher.
78
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
public static byte[] BytesKey { get; set; } private static readonly byte[] BytesIv = new byte[16]; public static byte[] EncryptStringToBytes(string plainText) { if (plainText == null || plainText.Length <= 0) throw new ArgumentNullException("plainText"); if (BytesKey == null || BytesKey.Length <= 0) throw new ArgumentNullException("BytesKey"); if (BytesIv == null || BytesIv.Length <= 0) throw new ArgumentNullException("BytesIv"); byte[] encrypted; using (Rijndael myRijndael = Rijndael.Create()) {myRijndael.Key = BytesKey; myRijndael.IV = BytesIv; myRijndael.Padding = PaddingMode.Zeros; ICryptoTransform encryptor = myRijndael.CreateEncryptor(myRijndael.Key, myRijndael.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) {using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) {swEncrypt.Write(plainText);} encrypted = msEncrypt.ToArray(); } } } return encrypted; }
Gambar 5.24 Enkripsi plaintext 5.7.2
Implementasi dekripsi Proses dekripsi membutuhkan data yaitu, Byte cipher dan kunci simetris
128 bit. Hasil ekstraksi pesan dari citra stego adalah Byte cipher, sehingga dibutuhkan proses dekripsi untuk menghasilkan plaintext. Proses dekripsi pesan dengan algoritma Rijndael memanfaatkan method CreateDecryptor ditunjukkan pada Gambar 5.25. Gambar 5.25 baris 1 – 9 method DecryptStringFromBytes dengan parameter data yang diproses adalah Byte cipher dengan keluaran data String. Proses dekripsi dapat dikerjakan dengan mengecek panjang Byte cipher tidak lebih kecil dari nol atau tidak null. Selanjutnya Gambar 5.25 baris 10 - 26 memanfaatkan method CreateDecryptor dari C# melakukan transformasi Byte cipher dengan algoritma Rinjdael dan kunci simetris 128 bit untuk menghasilkan plaintext.
79
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
22.
public static string DecryptStringFromBytes(byte[] cipherText) { if (cipherText == null || cipherText.Length <= 0) throw new ArgumentNullException("cipherText"); if (BytesKey == null || BytesKey.Length <= 0) throw new ArgumentNullException("Key"); if (BytesIv == null || BytesIv.Length <= 0) throw new ArgumentNullException("Key"); string plaintext; using (Rijndael myRijndael = Rijndael.Create()){ myRijndael.Key = BytesKey; myRijndael.IV = BytesIv; myRijndael.Padding = PaddingMode.Zeros; ICryptoTransform decryptor = myRijndael.CreateDecryptor(myRijndael.Key, myRijndael.IV); try { using (MemoryStream msDecrypt = new MemoryStream(cipherText)) {using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) {using (StreamReader srDecrypt = new StreamReader(csDecrypt)) {plaintext = srDecrypt.ReadToEnd();} } } } catch (Exception ex) {AppMessageBox.ErrorMessage(ex.Message); return string.Empty;} } return plaintext; } }}
Gambar 5.25 Dekripsi pesan
5.8
Mengukur Kualitas Citra Menguji kualitas citra secara objektif dilakukan dengan pengukuran
menggunakan Mean Square Error (MSE) dan Peak Signal of Noise Ratio (PSNR), proses untuk menghasilkan nilai MSE dengan cara menghitung rata – rata kuadrat nilai kesalahan antara citra asli dengan citra stego. Gambar 5.25 menunjukkan method untuk menghitung nilai MSE dan PSNR. Gambar 5.26 baris 1 – 16 method GetPsnrValue untuk mengukur kualitas citra dengan cara mengkalkulasi besaran untuk MSE dan PSNR. Baris ini digunakan untuk mengakases lokasi dari indeks masing – masing Byte citra. Besaran MSE dan PSNR dikalkulasi jika jumlah indeks citra asli memiliki jumlah yang sama dengan indeks citra stego. Gambar 5.26 baris 17 - 19 berfungsi untuk mengkalkulasi rata – rata kuadrat nilai kesalahan antara citra asli dengan citra stego, prosesnya dengan membandingkan selisih nilai antara piksel citra asli dengan piksel citra stego pada lokasi indeks yang sama kemudian selisihnya dikuadratkan, jika hasil MSE diantara 0 sampai nilai tolerance maka nilai MSE = 0. Gambar 5.26 baris 20 - 22 mengkalkulasi nilai PSNR.
80
1. private const double ZeroTolerance = 0.000000000000001; 2. public static double GetPsnrValue(ref byte[] bytesA, ref byte[]public static double GetPsnrValue(ref byte[] bytesA, ref byte[] bytesB, int width, int height, int byteWidth, out double mse) 3. { double result = 0; 4. mse = 0; 5. double pembilang = 0; 6. double penyebut = 0; 7. if (bytesA == null || bytesB == null) 8. { return double.NaN; 9. } 10. if (bytesA.Length != bytesB.Length) 11. return result; 12. for (int i = 0; i < height; i++) 13. { for (int j = 0; j < width * 3; j++) 14. { 15. mse += Math.Pow((bytesA[i * byteWidth + j + 54] bytesB[i * byteWidth + j + 54]), 2); 16. }} 17. mse = mse / (width * 3 * height); 18. if (mse < ZeroTolerance) 19. result = 0; 20. else 21. result = 20 * (Math.Log10(255.0 / (Math.Sqrt(mse)))); 22. return Math.Round(result, 4); }}}
Gambar 5.26 Perhitungan MSE dan PSNR
81
6 BAB VI HASIL DAN PEMBAHASAN
6.1
Hasil Penelitian Pengujian untuk mengukur kinerja masing – masing algoritma yang telah
diimplementasikan, pengujian dilakukan dengan 2 cara, yaitu : 1. Pengujian kualitatif 2. Pengujian kuantitatif
6.1.1
Pengujian kualitatif Pengujian kualitatif bertujuan untuk mengamati perubahan kualitas citra
stego dari bentuk citra asli berdasarkan pengamatan yang dilakukan menggunakan visual manusia yang dihasilkan dari salah satu algoritma MEoF, EoF atau MLSB. Pengamatan bersifat subyektif untuk mendeteksi perubahan kualitas citra dilakukan dengan cara mengamati perubahan warna dan ukuran citra yang terjadi pada citra stego. Adapun pengamatan yang digunakan untuk pengujian kualitatif dengan cara berikut, 1. Mengamati perubahan kualitas secara langsung hasil citra stego kemudian dibandingkan dengan citra asli. 2. Mengekstrasi nilai Byte citra stego kemudian dibandingkan dengan hasil ekstraksi nilai Byte citra asli untuk mendeteksi perubahan kualitas citra stego berdasarkan perubahan ukuran citra. Gambar 6.1 menunjukkan hasil pengujian kualitatif pada citra stego dari masing – masing algoritma. Pengujian dilakukan dengan cara pengamatan langsung menggunakan visual
manusia, kemudian hasil pengamatan citra
stego
dibandingkan dengan citra asli. Gambar 6.2 menunjukkan hasil pengujian kualitatif untuk mendeteksi perubahan kualitas citra, pengujian dilakukan dengan cara mengamati hasil ekstraksi nilai Byte citra stego kemudian dibandingkan dengan hasil ekstraksi nilai Byte citra asli. Adapun proses pengamatan secara langsung ditampilkan pada Ganbar 6.1 dengan hasil sebagai berikut,
82
Citra Asli
MEoF
EoF
MLSB
Gambar 6.1 Pengujian kualitatif dengan pengamatan visual manusia Sedangkan pengujian kualitatif dengan cara pengamatan secara visual manusia berdasarkan hasil ekstraksi nilai Byte citra stego untuk dibandingkan dengan hasil ekstraksi nilai Byte citra asli ditunjukkan pada Gambar 6.2 dengan hasil sebagai berikut,
Byte Citra Asli
MEoF
EoF
MLSB
Gambar 6.2 Pengujian kualitatif ekstrak nilai byte citra Dari proses pengujian kualitatif diatas dengan teknik yang sama dilakukan pengujian pada 10 citra yang berbeda dengan karakteristik citra dan
83
ukuran yang berbeda. Hasil pengujian kualitatif dengan pengamatan visual manusia ditunjukkan pada Tabel 6.1 berikut, Tabel 6.1 Hasil pengujian kualitatif No
Ukuran Citra
1
205 x 246
2
250 x 245
3
216 x 216
4
400 x 326
5
742 x 499
6
1111 x 719
7
1557 x 2272
8
2048 x 1536
9
1280 x 800
10
328 x 161
Algoritma
Jumlah Pesan
MEoF EoF MLSB MEoF EoF MLSB MEoF EoF MLSB MEoF EoF MLSB MEoF EoF MLSB MEoF EoF MLSB MEoF EoF MLSB MEoF EoF MLSB MEoF EoF MLSB MEoF EoF MLSB
240 9008 9008 480 1408 1408 640 640 960 960 880 992 992 768 2144 13888 13888 2256 2256 2256 4592 4592 24624 2384 1216 1216 464 464 528
Pengamatan Visual Manusia Visual Ekstraksi Byte Langsung Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah Tidak Berubah Berubah Berubah Berubah Tidak Berubah Berubah
Berdasarkan hasil pengujian dapat dipaparkan bahwa penyisipan pesan dengan algoritma MEoF kualitas citra stego yang dihasilkan jika diamati secara langsung menggunakan visual manusia sangat sulit untuk mendeteksi telah terjadi perubahan kualitas pada citra stego, karena algoritma MEoF menyisipkan pesan tidak memanfaatkan Byte citra sebagai media untuk menyisipkan pesan,
84
melainkan memanfaatkan padding citra yang tidak terpakai oleh citra. Sebaliknya jika dilakukan pengamatan dari hasil ekstraksi nilai Byte citra stego dari masing – masing algoritma, pada lokasi indeks tertentu nilai Byte citra mengalami perubahan dan citra stego yang dihasilkan dari algoritma EoF juga mengalami perubahan ukuran pada height jika dibandingkan dengan Byte citra asli, dengan demikian kualitas citra telah mengalami perubahan. Berdasarkan hasil pengamatan secara langsung citra stego yang dihasilkan dari algoritma EoF menunjukkan dimensi citra dan panjang pesan yang kecil maka perubahan kualitas citra lebih terlihat dibandingkan dengan citra berdimensi besar dan panjang pesan kecil. Perubahan kualitas citra terletak diakhir Byte citra terlihat garis tambahan yang menunjukkan baris pesan yang disisipkan. Perubahan kualitas citra stego disebabkan adanya pertambahan Byte pada citra stego sebanyak panjang pesan yang disisipkan. Hasil pengamatan dengan mengektraksi nilai Byte citra menunjukkan perubahan kualitas citra berdampak terhadap perubahan ukuran file citra stego. Perubahan ini ditunjukkan dengan peningkatan ukuran height dari citra asli. Besarnya peningkatan untuk ukuran height pada citra stego tergantung dari panjang pesan yang disisipkan. Penyisipan pesan menggunakan algoritma MLSB memiliki kemungkinan kegagalan, seperti yang ditunjukkan pada Tabel 6.1 nomer 3. Kegagalan disebabkan pesan yang akan disisipkan terlebih dahulu dienkripsi menggunakan algoritma Rijndael dengan kunci 128 bit sehingga pesan membentuk blok cipher yang memiliki ukuran 16 Byte per blok. Berdasarkan algoritma kriptografi tersebut maka pesan disisipkan per blok, sehingga dibutuhkan jumlah Byte citra yang berniilai 254 atau 255 minimal sebesar 16 Byte.. Sedangkan citra stego yang dihasilkan algoritma MLSB berdasarkan hasil pengamatan secara langsung tidak mengalami perubahan dari citra asli, tetapi berdasarkan dari hasil pengujian dengan mengekstraksi nilai Byte citra, hasil pengamatan menunjukkan kualitas citra stego mengalami perubahan, tetapi ukuran file citra stego masih sama dengan ukuran citra asli.
85
6.1.2
Pengujian kuantitatif Pengujian kuantitatif untuk mengukur secara obyektif hasil citra stego
dari masing – masing algoritma, pengujian dilakukan dengan mengukur error pada citra stego. Pada penelitian ini ada 3 pengukuran yang dilakukan secara obyektif, diantaranya : 1. Pengukuran kesalahan (error) dilakukan dengan cara mengkalkulasi nilai Mean Square Error (MSE) dan Peak Signal to Noise Ratio (PSNR). Pengukuran nilai error MSE berfungsi untuk mengukur kesamaan 2 buah citra, yaitu citra asli dengan citra stego. PSNR untuk melakukan perbandingan antara nilai maksimum dari sinyal yang diukur dengan besarnya derau yang berpengaruh pada sinyal tersebut, semakin besar nilai PSNR maka citra stego yang dihasilkan semakin baik. 2. Mengukur peningkatan ukuran file citra stego dari jumlah pesan yang disisipkan. 3. Mengukur panjang pesan yang mampu disisipkan pada sebuah citra. Untuk menghasilkan ukuran file citra stego dari masing – masing algoritma maka citra dikelompokkan menjadi 2 bagian, yaitu : 1. Citra ukuran width modulo 4 = 0. a. Berdasarkan hasil pengujian yang ditunjukkan pada Tabel 6.2 nomer 10 yaitu citra berukuran 328 x 161 dengan algoritma MEoF maka kapasitas padding sebesar, = 3 Byte *161 – 10 Byte = 473 Byte. Pesan yang disisipkan ke citra dilakukan per blok, untuk setiap blok sesuai dengan ukuran kunci enkripsi sebesar 16 Byte. Berdasarkan ukuran blok maka panjang pesan yang dapat disisipkan pada citra tersebut sebesar 478/16 = 29 blok atau sama dengan 464 Byte, jika pesan disisipkan dengan maksimal maka ukuran file citra stego yang dihasilkan sebesar,
86
= ((328 * 3) * 161)) + 54 = (984 * 161) + 54 = 158.478 Byte. b. Berdasarkan hasil pengujian pada algoritma EoF, maka ukuran Byte pesan yang dapat disisipkan pada citra sebesar, = ((4.294.967.296/2) – 161) – 10 = 2.147.483.648 – 161 – 10 = 2.147.483.477 Byte Sementara pada pengujian yang ditunjukkan pada Tabel 6.2 nomer 10 dengan citra berukuran 328 x 161, disisipi pesan sebesar 464 Byte, sehingga ukuran file citra stego yang dihasilkan sebesar,
= (Ceiling.Math (464/250*3)) = Ceiling.Math (0,618) =1
= 54 + ((328*3)*161) + (1)* (328*3) = 54 + ((984*161) + 984 = 54 + 158.424 + 984 = 159.462 Byte. 2. Citra ukuran width modulo 4 ≠ 0. a. Berdasarkan hasil pengujian yang ditunjukkan pada Tabel 6.3 nomer 2 dengan ukuran citra 250 x 245 maka ukuran file citra stego dari algoritma MEoF dapat dikalkulasi sebagai berikut,
= 54 + ((250*3)) * 245 + (4 – ((250*3) % 4))*245
87
= 54 + (750)* 250 + (4 – 2)* 245 = 183804 + 490 = 184.294 Byte. Ukuran Byte padding pada citra sebesar,
= ((4 – ((250 * 3) % 4)) * 245) - 10 = (4 – 2) * 245 - 10 = 480 Byte.
Byte padding yang dapat disisipi pesan sebesar, Byte pesan
= 485 Byte / 16 Byte = 30 blok = 480 Byte.
b. Selanjutnya mengukur peningkatan ukuran Byte citra stego pada algoritma End of File, seperti yang ditunjukkan pada Tabel 6.2 nomer 2 citra berukuran 250 x 245, pesan yang disisipi sebesar 240 Byte maka ukuran file citra stego sebesar,
= (Ceiling.Math (1408/250*3)) = Ceiling.Math (1,88) =2
= 54 + ((250*3)*245) + (2*245) + ((2)* (250*3)) + (2*2) = 54 + (750*245) + 490 + 1500 + 4 = 183.804 + 490 + 1500 + 4 = 185.798 Byte.
88
Hasil pengujian kuantititaf terhadap 10 citra dengan berbagai karakteristik ditunjukkan pada Tabel 6.2 dan Tabel 6.3. Pada Tabel 6.2 ditunjukkan hasil pengujian penyisipan pesan pada citra dengan panjang pesan yang berbeda. Sedangkan pada Tabel 6.3 ditunjukkan hasil pengujian untuk penyisipan pesan pada citra dengan panjang pesan yang sama untuk masing – masing algoritma. Adapun hasil dari pengujian disajikan sebagai berikut, Berdasarkan hasil pengujian kuantitatif, penyisipan Byte pesan dengan algoritma MEoF menggunakan citra bitmap untuk ukuran width modulo 4 ≠ 0, maka Byte pesan akan disisipkan pada padding citra. Menyisipkan Byte pesan pada padding citra berarti Byte piksel citra tidak dilibatkan/diganggu untuk menyisipkan pesan. Penyisipan Byte pesan dengan teknik ini menghasilkan citra stego dengan noise sebesar 0, karena tidak terjadi perubahan nilai intensitas piksel citra stego dari nilai piksel citra asli, dengan demikian untuk ukuran width modulo 4 ≠ 0 kualitas citra stego yang dihasilkan dari algoritma MEoF sama baiknya dengan citra asli.
Tabel 6.2 Hasil pengukuran kuantitatif berdasarkan ukuran citra bitmap No.
1
2
3
4
5
Dimensi (W x H)
205 x 246
250 x 245
216 x 216
400 x 326
742 x 499
Algoritma
Panjang pesan (Byte)
MSE
PSNR
MEoF
240
0
0
EoF
9008
10028,56
8,11
MLSB
9008
0,238
MEoF
480
EoF
Ukuran File Asli (Byte)
Ukuran File Citra Stego
Status Citra Stego
151.590
Tidak Berubah
160.830
Berubah
54, 36
151.590
Tidak Berubah
0
0
184.294
Tidak Berubah
1408
2139,33
14,83
185.798
Berubah
MLSB
1408
0,03
63,40
184.294
Tidak Berubah
MEoF
640
41,69
31,99
140.022
Tidak Berubah
EoF
640
207,01
24,97
140.670
Berubah
MLSB
-
-
-
-
-
MEoF
960
26,77
33,85
391,254
Tidak Berubah
EoF
960
410,57
22,00
392.454
Berubah
MLSB
880
0,009
68,55
391,254
Tidak Berubah
MEoF
992
0
0
1.111.826
Tidak Berubah
EoF
992
412,54
21,97
1.114.054
Berubah
MLSB
768
0,0028
73,62
1.111.826
Tidak Berubah
151.590
184.294
140.022
391,254
1.111.826
89
Tabel 6.2 (lanjutan) No.
6
7
8
9
10
Dimensi (W x H)
1111 x 719
1557 x 2272
2048 x 1536
1280 x 800
328 x 161
Algoritma
Panjang pesan (Byte)
MSE
PSNR
MEoF
2144
0
0
EoF
13888
4306,73
11,79
MLSB
13888
0,0232
MEoF
2256
EoF
Ukuran File Asli (Byte)
Ukuran File Citra Stego
Ukuran File Citra Stego
2.398.638
Tidak Berubah
2.415.318
Berubah
64,47
2.398.638
Tidak Berubah
0
0
10.614.838
Tidak Berubah
83360
2415,51
14,30
10.698.934
Berubah
MLSB
83360
0,031
63,17
10.614.838
Tidak Berubah
MEoF
4592
5,17
40,99
9.437.238
Tidak Berubah
EoF
24624
941,92
18,39
9.467.958
Berubah
MLSB
24624
0,0104
67,95
9.437.238
Tidak Berubah
MEoF
2384
8,93
38,62
3.072.054
Tidak Berubah
EoF
2384
1109,11
17,68
3.075.894
Berubah
MLSB
1216
0,0016
76,10
3.072.054
Tidak Berubah
MEoF
464
66,87
29,87
158.478
Tidak Berubah
EoF
528
1043,98
17,94
159.462
Berubah
MLSB
528
0,0136
66,79
158.478
Tidak Berubah
2.398.638
10.614.838
9.437.238
3.072.054
158.478
90
Tabel 6.3 Hasil pengukuran kuantitatif berdasarkan panjang pesan No.
1
2
3
4
5
Dimensi (W x H)
205 x 246
250 x 245
216 x 216
400 x 326
742 x 499
Algoritma
Panjang pesan (Byte)
MSE
PSNR
MEoF
240
0
0
EoF
240
663,68
19,91
MLSB
240
0,0067
MEoF
240
EoF
Ukuran File Asli (Byte)
Ukuran File Citra Stego
Ukuran File Citra Stego
151.590
Tidak Berubah
152.206
Berubah
69,96
151.590
Tidak Berubah
0
0
184.294
Tidak Berubah
240
1004,83
18,11
185.046
Berubah
MLSB
240
0,0055
70,73
184.294
Tidak Berubah
MEoF
240
18,82
35,39
140.022
Tidak Berubah
EoF
240
223,48
24,64
140.670
Berubah
MLSB
-
-
-
140.022
-
MEoF
240
6,82
39,79
391,254
Tidak Berubah
EoF
240
464,07
21,47
392.454
Berubah
MLSB
240
0,0025
74,12
391,254
Tidak Berubah
MEoF
240
0
0
1.111.826
Tidak Berubah
EoF
240
431,65
21,77
1.114.054
Berubah
MLSB
240
0,0009
78,64
1.111.826
Tidak Berubah
151.590
184.294
140.022
391,254
1.111.826
91
Tabel 6.3 (lanjutan) No.
6
7
8
9
10
Dimensi (W x H)
1111 x 719
1557 x 2272
2048 x 1536
1280 x 800
328 x 161
Algoritma
Panjang pesan (Byte)
MSE
PSNR
MEoF
240
0
0
EoF
240
1414,61
16,62
MLSB
240
0,0004
MEoF
240
EoF
Ukuran File Asli (Byte)
Ukuran File Citra Stego
Ukuran File Citra Stego
2.398.638
Tidak Berubah
2.401.974
Berubah
81,93
2.398.638
Tidak Berubah
0
0
10.614.838
Tidak Berubah
240
102,43
28,02
10.619.510
Berubah
MLSB
240
0,0001
88,41
10.614.838
Tidak Berubah
MEoF
240
0,21
55,00
9.437.238
Tidak Berubah
EoF
240
127,41
27,08
9.443.382
Berubah
MLSB
240
0,0001
88,02
9.437.238
Tidak Berubah
MEoF
240
0,75
49,37
3.072.054
Tidak Berubah
EoF
240
1112,27
17,66
3.075.894
Berubah
MLSB
240
0,0003
83.05
3.072.054
Tidak Berubah
MEoF
240
34,52
32,75
158.478
Tidak Berubah
EoF
240
1042,45
17,95
159. 462
Berubah
MLSB
240
0,0062
70,23
158.478
Tidak Berubah
2.398.638
10.614.838
9.437.238
3.072.054
158.478
92
93
6.2
Pembahasan Berdasarkan hasil pengujian, maka untuk menguji algoritma MEoF
dilakukan
perbandingan
dengan
penelitian
sebelumnya.
Perbandingan
dikelompokkan menjadi 2 bagian, 6.2.1
Perbandingan dengan algoritma EoF Berdasarkan hasil implementasi, perbandingan dilakukan dengan
penelitian yang telah diteliti oleh Edisuryana et al. (2013) ; Aditya et al. (2010) dikelompokkan menjadi 3 bagian, yaitu : 1. Kualitas citra stego Pengujian secara kualitatif menunjukkan hasil citra stego dengan algoritma EoF menghasilkan tambahan baris berupa garis – garis pada piksel paling bawah citra stego, baris ini merupakan pesan hasil dari steganografi. Semakin besar pesan yang disisipkan maka semakin banyak baris yang dihasilkan. Sedangkan citra stego yang dihasilkan dari algoritma MEoF tambahan garis – garis pada akhir Byte citra tidak terjadi. Untuk hasil pengujian kuantitatif noise citra stego yang dihasilkan dari algoritma EoF lebih kecil dari noise yang dihasilkan citra stego algoritma MEoF untuk ukuran width citra modulo 4 = 0, sedangkan untuk ukuran width citra modulo 4 ≠ 0 nilai MSE bernilai 0 berarti nilai intensitas piksel citra stego tidak mengalami perubahan dari citra asli. Dengan demikian kualitas citra stego yang dihasilkan dari algoritma MEoF lebih baik dibandingkan citra stego yang dihasilkan dari algoritma EoF. Penambahan baris piksel citra stego yang dihasilkan oleh algoritma EoF ditunjukkan pada Gambar 6.3 berikut,
Gambar 6.3 Perbandingan citra asli dan citra stego pada algoritma EoF (Edisuryana et al., 2013)
94
2. Kapasitas penyisipan pesan Pada algoritma MEoF pesan dapat disisipkan jika panjang pesan tidak lebih besar dari ukuran padding, sedangkan algoritma EoF mampu menyisipkan pesan dengan batasan ukuran Byte informasi width dan height citra pada header citra bitmap. 3. Ukuran file Jika dibandingkan dengan ukuran file citra aslinya, citra stego yang dari algoritma MEoF tidak terjadi peningkatan ukuran file sedangkan citra stego dari algoritma EoF mengalami peningkatan ukuran file, besarnya peningkatan ukuran file tergantung pada panjang pesan yang disisipkan. Tabel 6.2 dan Tabel 6.3 menunjukkan hasil pengujian peningkatan ukuran file citra stego dengan algoritma EoF. 4. Jumlah pesan yang mampu disisipkan pada citra untuk algoritma MEoF dan EoF dapat dikalkulasi secara analisis matematis.
6.2.2 Perbandingan dengan algoritma MLSB Adapun hasil perbandingan pengujian citra stego dari algoritma MEoF dengan algoritma Modifikasi Least Significant Bit adalah sebagai berikut, 1. Kualitas citra Berdasarkan hasil pengujian kualitatif kualitas citra stego dari algoritma MEoF dan MLSB masih sama baik dengan citra asli karena secara visual tidak tampak mengalami perubahan dari bentuk citra asli. Tetapi jika Byte citra stego dan Byte citra asli diekstraksi kemudian dibandingkan maka terlihat perubahan kualitas citra pada Byte yang menjadi lokasi penyisipan Byte pesan. Hasil pengujian kuantitatif menunjukkan ukuran width citra berpengaruh terhadap perubahan kualitas citra, ini dibuktikan dari besarnya noise yang dihasilkan citra, untuk citra yang berukuran width modulo 4 = 0 maka noise citra dari algoritma MLSB lebih baik dibandingkan dengan algoritma MEoF, sebaliknya untuk citra dengan ukuran width citra modulo 4 ≠ 0 maka noise citra dengan algoritma MEoF lebih baik, karena Byte pesan disisipkan pada padding citra, sehingga nilai
95
MSE bernilai 0 berarti nilai intensitas piksel citra stego tidak mengalami perubahan dari citra asli, dengan demikian noise yang dihasilkan sama dengan nol. 2. Kapasitas penyisipan pesan Berdasarkan hasil pengujian pada Tabel 6.2 dan Tabel 6.3, algoritma MLSB memiliki kemungkinan kegagalan dalam menyisipkan pesan atau menyisipkan jumlah pesan lebih sedikit karena jumlah Byte citra yang bernilai 254 atau 255 tidak dominan, sebaliknya jika Byte citra bernilai 254 atau 255 dominan maka jumlah pesan yang mampu disisipkan algoritma MLSB lebih besar. 3. Ukuran file Ukuran file citra stego yang dihasilkan dari algoritma MEoF dan MLSB sama baiknya karena ukuran file citra stego masih sama dengan ukuran file citra asli. 4. Jumlah pesan yang mampu disisipkan pada citra untuk algoritma MEoF dapat dikalkulasi dengan analisis matematis, sedangkan algoritma MLSB sangat sulit menggunakan analisis matematis.
7 BAB VII KESIMPULAN DAN SARAN
7.1
Kesimpulan Berdasarkan analisa dari beberapa pengujian yang dilakukan pada bab
sebelumnya, diperoleh kesimpulan sebagai berikut : 1. Algoritma Modifikasi End of File (MEoF) telah berhasil memperbaiki kelemahan algoritma End of File, yaitu dapat mengatasi permasalahan peningkatan ukuran file dan perubahan kualitas citra stego dari citra asli. 2. Berdasarkan hasil pengujian kualitatif dengan visual manusia kualitas citra stego yang dihasilkan dari algoritma MEoF dan MLSB masih sama baik dengan citra asli, tetapi kualitas citra stego yang dihasilkan oleh algoritma EoF mengalami perubahan. Sedangkan berdasarkan hasil pengujian kuantitatif kualitas citra stego dari algoritma MEoF lebih baik dibandingkan dengan algoritma EoF, tetapi tidak selalu lebih baik dari MLSB. 3. Hasil pengujian kuantitatif pada algoritma MEoF menunjukkan panjang pesan yang mampu disisipkan ditentukan oleh ukuran width dan height citra, sedangkan untuk algoritma EoF ditentukan oleh ukuran Byte informasi data citra pada header citra bitmap dan untuk algoritma MLSB ditentukan oleh jumlah nilai Byte citra bernilai 254 atau 255. 4. Berdasarkan pengujian kualitatif dan kuantitatif ukuran file citra stego dari algoritma MEoF dan MLSB masih sama dengan ukuran file citra asli, tetapi ukuran file citra stego dari algoritma EoF mengalami perubahan, besarnya perubahan ukuran file ditentukan oleh panjang pesan yang disisipkan pada citra. 5. Berdasarkan hasil pengujian tingkat keberhasilan penyisipan pesan dengan algoritma MEoF dan EoF tingkat keberhasilan penyisipan pesan lebih baik dibandingkan algoritma MLSB, karena penyisipan pesan dengan algoritma MLSB sangat dipengaruhi oleh nilai Byte citra.
96
97
7.2 Saran Penelitian lebih lanjut diharapkan dapat memperbaiki kekurangan dan dapat mengembangkan penelitian ini, untuk itu disarankan hal – hal berikut : 1. Dalam penelitian berikutnya dianggap perlu untuk melakukan kompresi terhadap pesan yang akan disisipkan pada citra bitmap 24 bit, untuk mendapatkan jumlah pesan yang disisipkan lebih banyak. 2. Pada penelitian ini algoritma MEoF dapat digunakan pada citra bitmap 24 bit, perlu dilakukan penelitian lebih lanjut penggunan algoritma MEoF pada media digital lain yang memiliki padding. 3. Karena data pesan disisipkan memanfaatkan padding citra bitmap, sehingga dari sisi keamanan pesan masih lemah maka perlu dilakukan penelitian lebih lanjut untuk keamanan pesan agar tidak mudah diketahui pengguna lain.
DAFTAR PUSTAKA Aditya, Y., Pratama, A. dan Nurlifa, A., 2010, Studi Pustaka Untuk Steganografi Dengan Beberapa Metode, Seminar Nasional Aplikasi Teknologi Informasi 2010, Yogyakarta. Anggraini, Y. dan Sakti, Y.S.V.D., 2014, Penerapan Steganografi Metode End of File (EoF) dan Enkripsi Metode Data Encryption Standard (DES) pada Aplikasi Pengamanan Data Gambar Berbasis Java Programming, Konferensi Nasional Sistem Informasi, Makassar. Atoum, M. S., Ibrahim, S., Sulong, G. dan M-Ahmad, A., 2012, MP3 Steganography: Review, International Journal of Computer Science Issues, Vol. 9, Issue 6, No 3. Bohme, R., 2010, Advanced Statistical Steganalysis, volume 0, XVI, Springer, Verlag Gmbh. Bourke
P., 1993, A Beginners Guide to Bitmaps, http://paulbourke.net/dataformats/bitmaps/ diakses tanggal 11 Januari 2014.
Cachin C., 2005, A survey prepared for the Encyclopedia of Cryptography and Security, Digital Steganography, IBM Research Zurich Research Laboratory, Switzerland. Charlamp D., 1995, The Bitmap File Format, http://www.drdobbs.com/architecture-and-design/the-bmp-file-formatpart-1/184409517 diakses 12 Januari 2015. Cummins, J., Diskin, P., Lau, S., dan Parlett, R. 2004. Steganography and Digital Watermakring. Edgbaston: GNU Free Documentation. Cruz, P., J., Libatique, J. dan N., Tangonan, G., 2012, Steganography and Data Hiding in Flash Video (FLV), Ateneo de Manila University, Quezon City, Philippines Dutton, 2007, Bitmap Steganography : An Introduction, Topics in Computer Science, Beau Grantham. Edisuryana, M., Isnanto, R.R. dan Somantri, M., 2013, Aplikasi Steganografi Pada Citra Berformat Bitmap Dengan Menggunakan Metode End of File, TRANSIENT, VOL.2, NO. 3.
98
99
Federal Information Processing Standards Publication 197, 2001, Advanced Encryption Standard (AES), National Institute of Standards and Technology, United States. Gupta, S., 2012, Information Hiding Using Least Significant Bit Steganography and Cryptography, I.J.Modern Education and Computer Science, 27-34 . Hmood, N.D., 2012, A Random Key Generation Approach for Rijndael Algorithm, Journal of Al-Nahrain University, Vol 15 (3), pp. 190-195. Jhoni, V. P., Marihat, S. dan Dedy, A., 2012, Implementasi Steganografi Pesan Text Ke Dalam File Sound (.Wav) Dengan Modifikasi Jarak Byte Pada Algoritma Least Significant Bit (LSB), Jurnal Dunia Teknologi Informasi Vol. 1, No. 1, pp.50-55. Jhonson, F. N. dan Jajodia S., 1998, Exploring Steganography : Seeing the Unseen, Computing Practise, Center for Secure Information Systems, Dept. of Information and Software Systems Engineering, George Mason University, Fairfax Joshi, R., Gagnani, L. dan Pandey, S., 2013, Image Steganography With LSB, International Journal of Advanced Research in Computer Engineering & Technology (IJARCET), Volume 2, Issue 1. . Male, M. G., Wirawan dan Setijadi, E., 2012, Analisa Kualitas Citra pada Steganografi untuk Aplikasi E-Government, Seminar Nasional Manajemen Teknologi XV, Surabaya. Meyyappan, T., Thamarai, SM. dan Nachiaban, J.M.N, 2011, Lossless Digital Image Compression Method For Bitmap Image, The International Journal of Multimedia & Its Applications (IJMA), Vol.3, No.4. Miano J., 1999, Compressed Image File Formats, Addison Wesley Longman, Inc., Massachusetts Moreno, J., Jaime, B. dan Saucedo, S., 2013, Towards No-Reference of Peak Signal to Noise Ratio Estimation Based on Chromatic Induction Model, International Journal of Advanced Computer Science and Applications (IJACSA), Vol. 4, No.1, Mexico. Poornima, R. dan Iswarya, R.J., 2013, An Overview of Digital Image Steganography, International Journal of Computer Science & Engineering Survey (IJCSES) Vol.4, No.1. Powell, W. R., 2003, Using the LockBits method to access image data, http://bobpowell.net/lockingbits.aspx, diakses tanggal 18 Februari 2015.
100
Rafiudin, 2002 , Security Unix. PT Elex Media Komputindo, Jakarta. Rogerson, D., 1995, OpenGL V: Translating Windows DIBs, Microsoft Developer Network Technology Group, http://web.agelid.com/protect/utile/documentation/OpenGL/OpenGL%205 %20-%20Translating%20Windows%20DIBs.htm, diakses 16 Mei 2015. Ruid, 2007, Real-Time Steganography with RTP. DEFCON. Safrizal, M. dan Harjoko, A., 2014, Perbandingan Pewarnaan Citra Grayscale Menggunakan Metode K-Means Clustering dan Agglomerative Hierarchical Clustering, Berkala MIPA, 23(3), Jurusan Ilmu Komputer dan Elektronika, FMIPA UGM, Yogyakarta. Sejati, A., 2007, Studi dan Perbandingan Steganografi Metode EOF (End of File) dengan DCS (Dynamic Cell Spreading), Makalah Strategi Algoritmik, Teknik Informatika Institut Teknologi Bandung. Setiawan, A. D. I, 2009, Pengenalan Kriptografi, Buletindo Buletin Komputer, Edisi 023, Hal. 3-4. Sloan,
T. dan Castro, H.,J., 2015, Forensic Analysis of Video Steganography,Tools University of Kent, School of Computing, Canterbury, Kent. https://dx.doi.org/10.7287/peerj.preprints.1019v1, diakses 11 Juni 2015.
Vembrina, Y. G., (2006), Spread Spectrum Steganography. Warsito, B. A., Fajarita, L., Z., A. dan Nazori, 2012, Proteksi Keamanan Dokumen Sertifikat File Jpeg pada Perguruan Tinggi dengan Menggunakan Steganografi dan Kriptografi, Jurnal TELEMATIKA MKOM Vol.4 No.1. Wasino, Rahayu, P. T. dan Setiawan, 2012, Implementasi Steganografi Teknik End of File Dengan Enkripsi Rijndael, Seminar Nasional Teknologi Informasi dan Komunikasi, (SENTIKA 2012) Yogyakarta.