24
BAB III METODOLOGI SSIS Dalam bab ini akan di jelaskan metode aplikasi dari teori-teori yang telah di bahas pada bab sebelumnya untuk merancang sebuah prototype SSIS. Beberapa tahapan dalam SSIS akan di jelaskan secara terperinci hingga pembuatan pseudo-code algoritma. Berikut beberapa istilah yang digunakan dalam bab ini. Citra digital yang belum direkayasa disebut coverimage, sementara hasil citra digital yang telah ditempeli pesan dinamakan stegoimage. Agar noise yang telah diboboti pesan bisa ditempelkan pada coverimage, kita memerlukan berbagai tahapan. Sistem pengubahan pesan menjadi Gaussian noise dan kemudian ditempelkan pada coverimage dinamakan Encoding dan sistemnya dinamakan SSIS Encoder. Pembalikan encoding, yaitu ekstraksi pesan dari stegoimage disebut decoding dan sistemnya disebut SSIS Decoder. Cover Image
Pesan
SSIS Encoder
key
Pesan terekstraksi
SSIS Decoder
Stegoimage
Transmission Channel
Estimasi Stegoimage
Bagan 3.1. Diagram alir sistem steganografi. Setelah ditempeli pesan, stegoimage dikirimkan kepada penerima pesan dengan berbagai cara (pembahasan mengenai cara ini diluar batasan steganografi). Secara kasat mata stegoimage yang dikirimkan tersebut hanya terlihat sebagai foto biasa. Walaupun ada kurir dalam pengiriman pesan atau transmisi komunikasi publik yang tidak aman,
25
seperti internet, stegoimage tidak akan pernah bisa dibuka dan dikenali sebagai pesan jika tanpa menggunakan key. Hingga sekarang tidak ditemukan cara membongkar stegoimage yang dibuat dengan teknik SSIS. 1.1
ENCODING Berikutnya akan ditelaah sistem SSIS Encoder. Pada sistem ini, Gaussian Noise
di karakterisasi sehingga berbobot pesan, tahap ini dinamakan Modulasi. Kemudian tahap berikutnya, Interleaving yaitu penyebaran Gaussian Noise yang telah ditempeli pesan secara acak. Lalu terakhir, sebaran acak tersebut ditambahkan pada citra digital, tahap ini disebut Quantizing (Kuantisasi). g
f Quantizer
Cover Image
Stegoimage
s
Pesan
Interleaving
Modulasi key
m
Pseudorandom Noise Generator
n Bagan 3.2. Diagram alir sistem SSIS Encoder. 1.1.1
Modulasi Setelah coverimage dan pesan disiapkan, proses encoding pesan dimulai dengan
menginputkan key yaitu kata kunci. Key tersebut kemudian dijadikan sebagai random seed untuk menghasilkan barisan bilangan uniform. Pada gambar 2.4., barisan bilangan uniform (n) di modulasi untuk membangkitkan Gaussian noise yang berbobot pesan. Tahap modulasi di deskripsikan seperti pada persamaan (2.2) dan (2.3) yang telah dibahas pada bab II.
26
Φ u , Φ u ,
1
1
(2.2)
dan,
0.5, 0.5,
0 0.5 0.5 1
(2.3)
Pseudo-code algoritma dari persamaan tersebut di ekspresikan sebagai berikut, {input: key} {output: igauss} //Pembuatan Random Uniform Sequence RandomSeed<-input(key) for i<-0 to panjangpesan-1 do number[i]<-random*1 {Syntax pembangkit bil. acak uniform} //Algoritma pers. (2.3) if number[i]<0.5 numberaksen[i]<-number[i]+ 0.5 else numberaksen[i]<-number[i]- 0.5 endif endfor for j<-0 to panjangpesan-1 do if BinerPesan[j+1]<-'0' p[j]<-number[j] else p[j]<-numberaksen[j] endif
{jika binerpesan<-‘1’}
//Algoritma pers. (2.2) egauss[j]<-invCumNorm(p[j]) igauss[j]<-round(invCumNorm(p[j])) output(igauss[j]) endfor
egauss[j]
merupakan sampel acak berdistribusi Gauss dengan j index, yang
dihasilkan dari output algoritma aproksimasi rasional pada fungsi probit dan di ekspresikan sebagai invCumNorm(p[j]). Sementara igauss[j] adalah pembulatan dari egauss[j], yang untuk selanjutnya digunakan sebagai Gaussian noise. Untuk beberapa bahasa pemrograman, syntax pembangkit bilangan semi-acak berdistribusi
27
uniform telah tersedia. Jika tidak atau dikarenakan hal-hal lain, maka algoritma CSPRNG pada lampiran A bisa digunakan. 1.1.2
Interleaving Setelah Gaussian noise yang berbobot pesan didapatkan, selanjutnya akan
disebarkan secara acak ke seluruh byte coverimage. Proses penyebaran sinyal secara acak dikenal dengan istilah wideband, sementara relasinya pada noise disebut dengan white noise [14]. Sehingga, secara konsep tahap ini mengubah Gaussian noise menjadi white Gaussian noise. 1.1.2.1 Pemadatan Noise Konsep wideband atau white noise dilakukan dengan penyebaran noise secara merata. Namun, sama sekali tidak memandang kuat amplitudo yang disebarkan pada tiap bagian [14]. Agar noise bisa disebarkan secara merata pada tiap bagian coverimage, maka Gaussian noise dipadatkan dengan 0 hingga sesuai dengan jumlah byte yang terdapat pada coverimage. Misalkan coverimage berukuran 256 256 pixel, karena 1 pixel = 3 byte maka
terdapat 3 256 256 196608 byte. Misalkan S = {1,0,0,1,0,1,-1,0,1,1,1,0,0,1,-
1,-1} adalah Gaussian noise yang dihasilkan pada proses modulasi dan !" 16. Jika S
akan disebarkan pada citra digital diatas yang memiliki 196608 byte, maka S harus dipadatkan dengan 0 sebanyak 196608 16 196592 buah. Sehingga, # $1,0,0,1,0,1, 1,0,1,1,1,0,0,1, 1, 1, 0 , 0% , 0& , … , 0()*(% + $1,0,0,1,0,1, 1,0,1,1,1,0,0,1, 1, 1,0,0,0, … ,0+.
Indeks 0 ke- 1,2,3,…,196592 sama sekali tidak diperlukan, selama kita tahu bahwa banyaknya 0 yang ditambahkan adalah 196592 buah.
28
1.1.2.2 Penyebaran White Noise Proses ini diperlukan dengan tujuan agar kelompok noise terpecah sehingga pada proses filtering tidak terlalu banyak terjadi kesalahan. Sebagai ilustrasi, misalkan kita memiliki tiga nilai noise pada 9 byte citra digital, seperti di gambar 2.5. (b).
(a) byte asli
(b) byte disisipi noise
(c) byte disisipi noise
Gambar 3.1. Ilustrasi Filtering. Proses filtering adalah pengembalian nilai byte yang terkontaminasi oleh noise menjadi nilai aslinya. Salah satu teknik filetring yang dikenal adalah Alpha-Trimmed Mean Filter. Pada ATM Filter, estimasi nilai asli dari posisi byte yang berada di tengah di dapatkan dengan langkah-langkah sebagai berikut, 1. Nilai byte yang di tengah dengan semua byte neighborhood (byte yang berjarak satu satuan) diurutkan. Sehingga untuk byte yang terkontaminasi pada gambar 2.5. (b) di dapat {0,0,0,0,0,0,1,1,2}; 2. Kemudian
dengan
membuang
nilai
maksimum
dan
minimum
didapat
{0,0,0,0,0,1,1}; 3. Anggota himpunan tersebut di rata-ratakan dan dibulatkan. Jadi nilai byte asli yang berada di tengah pada gambar 2.5. (b) adalah 0.29 atau 0. Terlihat bahwa, jika semakin banyak noise yang berkumpul seperti pada gambar 2.5. (b), maka proses penghilangan noise akan semakin tidak akurat karena memerlukan pembulatan yang semakin besar. Sementara, pada gambar 2.5. (c) dengan cara yang sama kita mendapatkan nilai 0 tanpa pembulatan.
29
Gaussian noise S yang di komputasikan sebagai array atau himpunan memiliki indeks posisi. Pada tahap ini, elemen-elemen S dipertukarkan secara acak berdasarkan posisinya. Proses pengacakan ini harus bisa di normalisasi atau dikembalikan ke bentuk semula, karena itu pengacakan harus memiliki suatu pola tertentu. Selain itu, untuk menjaga efektifitas pengacakan, pertukaran dua buah elemen ini tidak boleh diulangi yang akan berakibat munculnya nilai yang sama. Berbagai bentuk pola pengacakan mungkin bisa saja diterapkan, namun pola seperti itu hanya akan memperumit perhitungan seiring dengan banyaknya jumlah pesan dan besar pixel dari citra digital. Seperti kita ketahui bahwa pembangkit bilangan semi-acak memiliki pola tertentu, jadi bilangan semi-acak memenuhi syarat yang pertama. Hal ini berarti kita hanya perlu membangkitkan dua bilangan semi-acak yang tidak boleh berulang. Dalam pembangkit bilangan semi-acak yang tidak berulang ini digunakan random seed yang sama dengan random seed pada pembangkit bilangan semi-acak berdistribusi uniform. Namun, dikarenakan keterbatasan syntax pada bahasa pemrograman, akan dibangkitkan bilangan semi-acak yang tidak berulang dengan cara yang sedikit berbeda. Contoh, misalkan bilangan terurut 0,1,2,3,4,5,…,9, dengan penukaran posisi 2 dan 1 didapat 0,2,1,3,4,5,…,9. Kemudian, posisi 3 dan 5 ditukar sehingga didapat 0,2,1,5,4,3,…,9. Cara ini dilakukan beberapa kali dengan kombinasi kedua posisi yang berbeda dan di pilih menggunakan pembangkit bilangan semi-acak, sehingga di dapat bilangan semi-acak dari 0 sampai 9 yang tidak berulang. Metode tersebut diterapkan pada tahap interleaving, namun dengan skala yang lebih besar yaitu pengacakan posisi elemen-elemen S yang berjumlah 196608. Untuk memastikan semua elemen teracak, hingga sebisa mungkin tidak terjadi kelompok-
30 kelompok noise, maka pengacakan dilakukan sebanyak 10 196608 kali atau secara umum 10 dari jumlah elemen yang akan di acak. Proses pemadatan nol dan penyebaran noise secara acak pada tahap interleaving yang telah di jelaskan di atas bisa di ekspresikan sebagai pseudo-code algoritma berikut, {input: key} {output: igauss} //Pemadatan dengan 0 for j<-0 to jumlah_byte_coverimage-1 do igauss[jumlah_anggota_igauss+j]<-0 endfor
{igauss adalah Gaussian noise S}
//Pengacakan Noise RandomSeed<-input(key) for i<-0 to (10*jumlah_byte_coverimage) do p:=Random(jumlah_byte_coverimage) q:=Random(jumlah_byte_coverimage) Move(igauss[p],temp) Move(igauss[q],igauss[p]) Move(temp,igauss[q]) Output(igauss[i]) endfor
1.1.3
Kuantisasi Tahap terakhir dari SSIS Encoder ini cenderung lebih mudah, karena hanya
penambahan white Gaussian noise berbobot pesan pada tiap byte coverimage. Satu hal yang perlu di perhatikan adalah bahwa seluruh byte pada coverimage terdistribusi secara 2 dimensi, baris dan kolom. Sementara noise yang dimiliki merupakan bentuk linear 1 dimensi. Oleh karena itu perlu dilakukan truncated addition atau penambahan yang dipotong-potong terhadap Gaussian noise S. Misalkan , adalah index baris dari byte coverimage, - adalah index kolom dari
byte coverimage, dan . adalah index dari Gaussian noise S. Setiap satu nilai Gaussian noise S ditambahkan ke satu nilai byte coverimage seperti berikut,
31
6
3
6
3
9
/ / 01,2 / / 71,2 / #8
245 145
245 145
845
(2.8)
dengan, G A S p q l
= stegoimage, = coverimage, = noise, = tinggi coverimage dalam pixel, = 3 lebar coverimage dalam pixel, = !: jumlah anggota S.
Setelah penambahan Gaussian noise sampai pada byte terakhir dalam suatu baris coverimage, maka , 1 dan - kembali ke 0. Sementara itu, karena . hanya berdimensi 1, maka nilai . hanya dilanjutkan pada index berikutnya. Begitu seterusnya hingga byte dan nilai noise terakhir. Setelah tahapan kuantisasi maka proses encoding selesai, dan stegoimage bisa dikirimkan dengan berbagai cara, seperti; copy, upload/download, dan sebagainya. Berikut pseudo-code algoritma tahap kuantisasi, //Quantizing bagi<-0 for i<-0 to tinggi_coverimage-1 do pixmap<-coverimage.ScanLine[i] j<-0 repeat pixmap[j]<-pixmap[j]+igauss[j+bagi] j<-j+1 until j>= 3*lebar_coverimage increment(bagi,3*lebar_coverimage) endfor
1.2
DECODING Penerima stegoimage yang sebelumnya telah memiliki kesepakatan dengan
pembuat stegoimage tentang key dan coverimage yang digunakan, bisa segera melakukan ekstraksi pesan melalui beberapa tahapan yang disebut proses decoding. Berikut ini diagram alir sistem SSIS Decoder.
32
Coverimage g<
Stegoimage yang diterima
Dekuantisasi
Deinterleaving
key
Pseudorandom Noise Generator
_
s< Demodulasi n
m ?
Estimasi Pesan
Bagan 3.3. Diagram alir sistem SSIS Decoder. 1.2.1
Dekuantisasi Pada tahap dekuantisasi, penerima pesan harus memiliki coverimage dan
stegoimage. Coverimage bisa diperoleh dengan cara filtering atau penerima stegoimage memang telah memiliki gambar asli (belum disisipi pesan) dari stegoimage yang diterimanya. Seperti telah diungkapkan sebelumnya, dalam Tugas Akhir ini penerima stegoimage diasumsikan telah memiliki citra digital asli. Nilai-nilai byte dari coverimage dan stegoimage dibandingkan untuk mendapatkan faktor redundant berupa noise. Dari persamaan (2.8) kita dapatkan, 9
6
3
6
3
/ #8 / / 01,2 / / 71,2 845
245 145
245 145
(2.9).
dengan, G A S p q l
= stegoimage, = coverimage, = noise, = tinggi coverimage dalam pixel, = 3 lebar coverimage dalam pixel, = !: jumlah anggota S.
Proses dekuantisasi adalah pembalikan proses kuantisasi dengan cara mencari selisih dari tiap byte coverimage dan stegoimage. Dalam dekuantisasi, tidak ada permasalahan
33
rumit mengenai perbedaan dimensi byte. Nilai selisih coverimage dan stegoimage pada kolom dan baris berapapun akan dimasukan dalam array S dengan indeks satu dimensi. 1.2.1.1 Kasus Istimewa Hal yang perlu diperhatikan pada tahap dekuantisasi adalah overloaded dari nilai-nilai byte. Contoh konkritnya kita mulai dari proses kuantisasi, misalkan kita memiliki suatu byte yang bernilai 254 dan noise yang bernilai +3. Setelah di kuantisasi (ditambahkan) akan di dapatkan nilai 257. Namun, byte adalah bilangan bulat dengan modulo 256, sehingga nilai byte-nya setelah dikuantisasi adalah 1 (257 A 1 CD 256). Perhatikan bahwa kedua nilai ini berjarak sangat jauh, dan hasil dekuantisasi dari kedua byte tersebut adalah 1 254 253. Nilai tersebut bukanlah nilai noise yang benar (+3), bahkan terlalu buruk untuk dikatakan terdapat error/galat. Setelah beberapa percobaan yang dilakukan oleh penulis, Gaussian noise dengan stegopower F % 1 akan menghasilkan sampel acak pada selang 5 G 5.
Sehingga untuk 01,2 71,2 , dan 01,2 5; 71,2 L 251 masalah overloading byte tersebut bisa diselesaikan dengan cara mengembalikan tipe byte ke bilangan bulat biasa
(integer), dalam hal ini 1 CD 256 A 257. Cara ini dilakukan dengan menambahkan 256 ke nilai byte yang telah di kuantisasi, 1 256 257. Sehingga tahap dekuantisasi
bisa dilakukan, dan faktor redundant noise-nya adalah |257 254| 3. Permasalahan yang sama dengan keadaan sebaliknya bisa terjadi untuk noise bertanda negatif, dan
bisa dipecahkan dengan algoritma yang sama. Berikut ini pseudo-code algoritmanya, for y<-0 to tinggi_stegoimage-1 do for x<-0 to lebar_stegoimage-1 do //Overloading byte handler if (byte_stegoimage[y][x]<5)and(byte_coverimage[y][x]>251) byte_stegoimage[y][x]<-byte_stegoimage[y][x]+256 endif
34
//Reverse type of overloading byte handler if (byte_coverimage[y][x]<5)and(byte_stegoimage[i][x]>251) byte_coverimage[y][x]<-byte_coverimage[y][x]+256 endif //Quantizing S[z]<-(byte_stegoimage[y][x])-(byte_coverimage[y][x]) z<-z+1 endfor endfor
1.2.2
Deinterleaving Penerima stegoimage memasukan key yang akan digunakan untuk mengekstrak
pesan. Sekali lagi, barisan bilangan semi-acak dengan jumlah anggota 10 N O di bangkitkan menggunakan input key. Barisan bilangan semi-acak tersebut kemudian di jadikan sebagai indeks dari Gaussian noise S yang akan di tukar posisinya. Oleh karena indeks S yang dihasilkan dari bilangan semi-acak memungkinkan untuk terjadi pengulangan (S tidak boleh berulang, tapi indeksnya bisa), maka normalisasi posisi S dimulai dari urutan bilangan semi-acak yang paling akhir dihasilkan. Berikut pseudocode algoritma deinterleaving, {input: key} {output: S} //Replicating pseudorandom index gen. RandomSeed<-input(key) for i<-0 to 10*(jumlah_byte_coverimage)-1 do SeedSeq[i]<-Random(jumlah_byte_coverimage) endfor //Normalizing interleaved noise j<-10*(jumlah_byte_coverimage)-1 repeat Move(S[SeedSeq[j-1]],temp) Move(S[SeedSeq[j]],S[SeedSeq[j-1]]) Move(temp,S[SeedSeq[j]]) j<-j-2 until j<1 output(S)
Setelah normalisasi posisi S selesai, akan di dapatkan S yaitu Gaussian noise beserta hasil pemadatan 0. Untuk mempercepat proses decoding, hasil pemadatan 0 bisa dipotong sehingga yang tersisa tinggal Gaussian noise. Namun, hal tersebut bisa
35
berisiko terpotongnya pesan jika pada proses filtering dihasilkan estimasi coverimage yang memiliki tingkat kesalahan tinggi. Sekalipun pemotongan 0 dari hasil pemadatan tidak dilakukan, nilai ASCII dari 00000000 merepresentasikan NULL sehingga tidak akan ditulis sebagai karakter apapun. 1.2.3
Demodulasi Dari tahap sebelumnya kita telah mendapatkan Gaussian noise yang sudah
dinormalisasi sehingga tersusun seperti semula. Sekali lagi barisan bilangan semi-acak berdistribusi uniform kembali dibangkitkan, kali ini dengan panjang N O. Untuk
adalah Gaussian noise yang diperoleh dari tahap deinterleaving dan adalah barisan bilangan semi-acak uniform. Dengan pembalikkan persamaan (2.2) diperoleh, u , Φs u ,
1
1
(2.10).
sehingga bisa dilakukan ekstraksi pesan. Namun seperti telah diketahui sebelumnya, penghitungan ulang fungsi distribusi Gauss kumulatif bukanlah hal sederhana dan hanya akan memperlambat tahap ini. Salah satu solusinya adalah dengan membuat kedua duplikat dari Gaussian noise yang mungkin, dari barisan bilangan semi-acak uniform masing-masing untuk u dan u’. Berikut ini pseudo-code algoritmanya, {input: key} {output: bit_pesan} RandomSeed<-input(key) for i<-0 to jumlah_noise_S do //pembuatan duplikat uniform random u[i]<-random*1 if u[i]<0.5 u_aksen[i]<-u[i]+ 0.5 else u_aksen[i]<-u[i]- 0.5 endif //pengecekan probit dg memasukan uniform random
36
if round(invCumNorm(u[i]))=S[i] bit_pesan[i]<-0 else bit_pesan[i]<-1 endif //Character conversion of bit_pesan j<-0 repeat karakter[j]<-character_of(bit_pesan,n,8) pesan<-pesan+karakter[j] n<-n+8 j<-j+1 until j>=jumlah_noise_S div 8 endfor
Kemudian dilakukan perbandingan antara Gaussian noise S dengan duplikatnya yang dibuat dari uniform noise u dan uniform noise u’. Jika perbandinganya sama, maka hasilnya di konversi menjadi 1 untuk noise yang sesuai dengan u dan 1 untuk noise yang sesuai dengan u’. Nilai 1 yang pada tahap modulasi di peroleh dari 0,
dikembalikan ke 0. Sehingga di dapatkan biner-biner pesan untuk kemudian di konversi sebagai karakter agar bisa terbaca sebagai pesan.