PENYISIPAN DATA PADA DOMAIN FREKUENSI DARI VIDEO DAN AUDIO STREAMING PADA FILE AUDIO VIDEO INTERLEAVE TIDAK TERKOMPRES Yonathan Dri Handarkho Dosen Tetap Program Studi Teknik Informatika, Politeknik Cilacap ABSTRACT The aplication of steganography on an uncompressed AVI file, have a purpose to hide an information in the file streaming of the video. Generally AVI file has four streamings that informations can be attached in: Video, Audio, Midi, and Text. From these four streaming files, video and audio stream is a media that most often informations can be attached on. Video stream on uncompressed AVI file is chain of frames in the form of image with bitmap type piled up in the streaming file. So that the process of attachments of datas or informations can be apply in the bitmap format. There are several algorithm of datas attachment that can be apply to a file. One of them is using Fast Fourier Transform (FFT) algorithm. FFT algorithm is the simplified form from Discrete Fourier Transform (DET) algorithm that transforming a value data from spacial space to frequency space. On this observation, datas that need to be transform is blue color value data (B) from RGB value found in the piled up of every pixels bitmap on video streaming. Value of the Blue pixels will be transform using FFT algorithm. Result of transforming the pixel value will be attached with a new data, by using a appropriate method . Audio streaming format on uncompressed AVI is uncompressed WAV (Waveform Audio File Format) file. Hiding a message in Wave file is similar to hiding it in the pixels of a bitmap because WAV file consists of a series or chain of audio data. So we can grab one carrier unit from audio data steaming, attach a new data, and write the changed unit to the destination stream. Keywords: Steganography, Audio Video Interleave, Video Streaming, Audio Streaming, Fast Fourier Transform, RGB, Blue Pixel, Bitmap, Audio data 1. Pendahuluan 1.1 Latar Belakang Penerapan konsep steganografi pada sebuah file video AVI pada umumnya diarahkan kepada proses penyisipan data atau informasi pada sebuah streaming file dari sebuah file video. Streaming file adalah file penyusun file video yang secara umum terdiri dari empat jenis streaming file yaitu file video, audio, midi, dan teks. Dari keempat buah file streaming tersebut, video dan audio stream adalah jenis streaming yang paling sering dipergunakan di dalam proses penyisipan sebuah informasi atau data. Video stream adalah sebuah rangkaian frame atau image yang menyusun sebuah file video. Pada file AVI tidak terkompres, video stream terbentuk dari sejumlah rangkaian file image bertipe bitmap yang tersusun dalam sebuah file streaming. Proses penyisipan data atau informasi diterapkan dengan mengekstrak frame dari sebuah video dalam format bitmap, kemudian dilakukan penyisipan data atau informasi kedalam file bitmap tersebut. Audio stream pada file AVI tidak terkompres sendiri adalah sebuah file WAV (Waveform Audio File Format) yang memiliki sifat Lossless compression. Proses penyisipan pada file WAV dilakukan pada data audio dari file WAV yang memiliki format standart RIFF (Resource Interchange File Format). Terdapat beberapa algoritma penyisipan data yang dapat diterapkan pada suatu file image maupun audio. Salah satunya dengan menggunakan algoritma Fast Fourier Transform (FFT). Algoritma FFT adalah bentuk penyederhanaan dari algoritma Discrete Fourier Transform (DFT) yang mentransformasikan suatu nilai data dari ruang spasial ke ruang frekuensi. Pada penelitian kali ini, data yang akan ditransformasikan adalah data nilai warna biru (B) dari nilai RGB yang terdapat di setiap pixel bitmap penyusun video streaming dan data RIFF dari rangkaian data file audio streaming. Nilai dari pixel Blue dan data dari audio stream akan ditransformasikan menggunakan algoritma FFT. Hasil transformasi nilai tersebut selanjutnya akan disisipkan sebuah nilai baru menggunakan metode penyisipan yang dianggap paling sesuai dengan sifat dari transformasi fourier. Tidak semua metode penyisipan data bisa diterapkan begitu saja pada data streaming yang telah tertransformasi tersebut. Hal tersebut dikarenakan nilai data balikan (invert) dari domain frekuensi haruslah berupa bilangan bulat, menyesuaikan dengan format nilai data piksel dan audio. Apabila nilai balikan dari data fourier menghasilkan nilai desimal, maka nilai akan dibulatkan agar sesuai dengan format data dari audio dan video stream. Hal tersebut akan menyebabkan data yang disisipkan menjadi rusak karena nilai sudah tidak sesuai dengan kondisi semula.
1.2 Perumusan Masalah Berdasarkan latar belakang masalah diatas, maka dapat dirumuskan permasalahan sebagai berikut : “Bagaimanakah bentuk implementasi dari proses penyisipan data pada domain frekuensi dari data video dan audio streaming dari file Audio-Video Interleaved ?” 1.3 Tujuan Penelitian Penelitian ini bertujuan untuk mencari metode yang tepat pada proses penyisipan data di domain frekuensi dari file audio dan video streaming pada file AVI. Berdasarkan pada tujuan tersebut, penulis juga akan menunjukkan bagaimana proses dan hasil pengujian terhadap metode penyisipan data sederhana seperti LSB, jika diterapkan pada domain frekuensi dan pengaruhnya terhadap data yang telah disisipkan. 2. Tinjauan Pustaka dan Landasan Teori 2.1 Tinjauan Pustaka Terdapat beberapa penelitian yang memiliki keterkaitan dengan penelitian ini. Stanescu dkk (2007) dalam jurnalnya yang berjudul Embedding Data in Video Stream using Steganography, mencoba menyisipkan data kedalam video stream pada file video MPEG-2, menggunakan algoritma Discrete Cosine Transform (DCT). Dalam penelitian tersebut, Stanescu dkk (2007) menyisipkan data karakter pada blok blok pixel menggunakan algoritma DCT pada frame penyusun video stream tersebut. Raja dkk (2005) dalam jurnalnya yang berjudul A Secure Image Steganography using LSB, DCT and Compression Techniques on Raw Images mencoba memadukan tiga buah algoritma untuk menghasilkan proses penyisipan data yang aman pada sebuah file gambar mentah (raw images). Ketiga algoritma tersebut adalah Least significants Bits (LSB) yang dipergunakan untuk menyisipkan (embed) data, algoritma Discrete Cosine Transform (DCT) yang dipergunakan untuk mentransformasikan data yang telah disisipi dari domain spasial ke domain frekuensi, dan yang terakhir adalah penggunaan algoritma quantization and runlength untuk mengkompres file gambar yang telah disisipkan informasi (stego image) untuk meningkatkan keamanan dari data yang disisipkan. Gumantyo (2007) dalam penelitiannya yang berjudul “Steganografi Audio dengan metode Spread Spektrum Dan Data Swap” menerapkan steganografi pada file WAV menggunakan pengembangan algoritma FFT dan LSB yang diterapkan pada data spektrum frekuensi dari file WAV. Dalam penelitian tersebut, data pada biner dari rangkaian file audio diubah ke dalam bentuk frekuensi menggunakan algoritma FFT, untuk selanjutnya dilakukan penyisipan data menggunakan metode swap data yang merupakan pengembangan dari metode LSB agar proses penyisipan data tidak merubah format nilai dari data audio. Pada penelitian kali ini, penulis mencoba memanfaatkan ruang yang cukup luas yang tersedia didalam format file video yang tersusun atas beberapa file streaming. File streaming yang dipergunakan dalam penyisipan data kali ini adalah video dan audio streaming. Penggunaan dua buah file streaming tersebut menyebabkan kapasitas data yang akan disisipkan menjadi jauh lebih banyak. Proses penyisipan data pada kedua file streaming tersebut dilakukan pada domain frekuensi dari data yang diperoleh melalui proses transformasi fourier menggunakan algoritma FFT. Penyisipan data pada domain frekuensi sendiri ditujukan agar data menjadi lebih aman dari proses ekstraksi yang bersifat ilegal. Akan tetapi proses penyisipan data pada domain frekuensi juga memiliki konsekuensi terhadap format data yang dihasilkan. Hal tersebut dikarenakan jika kita menyisipkan data secara sembarangan akan merubah nilai frekuensi dari data, yang mengakibatkan saat kita mengembalikan data kedomain semula akan menghasilkan nilai data yang tidak bulat (desimal). Hal tersebut tentu saja tidak diperkenankan karena nilai dari data audio dan video streaming bernilai bulat. Oleh karena itu, penelitian kali ini juga akan membahas dan menguji mengenai metode apakah yang tepat untuk digunakan pada proses penyisipan data pada domain frekuensi dari data audio dan video streaming. 2.2 Landasaan Teori 2.2.1 Konsep Steganografi Steganografi merupakan seni untuk menyembunyikan pesan di dalam pesan lainnya sehingga orang lain tidak menyadari bahwa ada sesuatu di dalam pesan tersebut. Terdapat berbagai bentuk dan metode penerapan dari konsep ini. Metode Steganografi sering kali disamakan dengan metode kriptografi. Padahal kedua metode ini tidaklah sama. Prinsip dasar dari metode Kriptografi adalah mengacak pesan sehingga tidak dapat dimengerti oleh pihak lain. Sedangkan prinsip dasar dari steganografi adalah menyembunyikan pesan atau data di dalam suatu media menggunakan metode atau algoritma tertentu sehingga menjadi tidak terdeteksi. 2.2.2 Algoritma Fast Fourier Transform Metode transformasi fourier pada dasarnya adalah suatu metode transformasi untuk mengubah suatu data menjadi jumlahan dari komponen eksponensial bilangan kompleks yang saling berbeda magnitude, frekuensi dan fase. Setiap fungsi periodik (sinyal) dapat dibentuk dari penjumlahan gelombang-gelombang sinus atau cosinus. Secara lebih sederhana transformasi fourier didefinisikan sebagai transformasi data dari domain ruang (spasial) ke
domain frekuensi. Melalui proses transformasi fourier, metode penyisipan data menjadi lebih aman dikarenakan data disisipkan pada domain frekuensi.
64 61 74 61
00 40 01 00
Contoh Bentuk data satu di dimensi dari audio stream
07 45 98 75 32 114 05 134 02 19 08 91 106 45 56 31 90 34 22 17 29 00 48 28 91 Contoh Blok data matrik 5 x 5 dari nilai pixel Blue dari frame bitmap video stream
Implementasi transformasi domain menggunakan algoritma FFT pada data dari audio stream dan video stream memiliki perbedaan dari bentuk dimensi datanya, menyesuaikan dengan dimensi dari kedua data streaming tersebut. Dimensi data dari audio stream yang dipergunakan adalah satu dimensi. Sedangkan dimensi data dari video stream (bitmap frame) adalah dua dimensi. Sehingga untuk data dari audio stream, digunakan algoritma FFT satu dimensi dan untuk data video stream digunakan algoritma FFT dua dimensi. Persamaan Fast Fourier Transform satu dimensi FFT untuk satu dimensi dirumuskan sebagai berikut: N 1
X (q) x(n)e
j 2qn / N
n 0
Digunakan persamaan Euler:
e jx cos x j sin x e jx cos x j sin x Berdasarkan persamaan Euler, persamaan FFT dapat berubah menjadi: N 1
X (q) x(n)(cos 2qn / N j sin 2qn / N ) n0
Dari persamaan di atas akan diperoleh nilai hasil berupa bilangan Real dan Imaginer. Nilai Real diperoleh dari: N 1
Re(q) x(n) cos 2qn / N n0
Nilai Imaginer diperoleh dari: N 1
Im( q) j x(n) sin 2qn / N n 0
Nilai frekuensi diperoleh dari penggabungan Nilai Real dan Imaginer menggunakan persamaan:
F (q) Re(q) 2 Im( q) 2 Persamaan Fast Fourier Transform dua dimensi Untuk FFT dua dimensi dirumuskan sebagai berikut : M 1 N 1
X ( p, q) x(m, n)e j 2 / M pme j 2 / N qn m 0 n 0
Digunakan persamaan Euler:
e jx cos x j sin x e jx cos x j sin x Berdasarkan persamaan Euler, persamaan FFT dua dimensi dapat berubah menjadi: M 1 N 1
X ( p, q )
x(m, n)(cos 2pm / M j sin 2pm / M )(cos 2qn / N j sin 2qn / N )
m 0
n 0
Dari persamaan FFT dua dimensi akan diperoleh nilai hasil berupa bilangan Real dan Imaginer. Nilai Real diperoleh dari: M 1 N 1
Re( p, q) m 0
x(m, n)(cos 2pm / M )(cos 2qn / N ) n 0
Nilai Imaginer diperoleh dari: M 1 N 1
Im( p, q) j m 0
x(m, n)(sin 2pm / M )(sin 2qn / N ) n 0
Nilai frekuensi diperoleh dari penggabungan Nilai Real dan Imaginer menggunakan persamaan:
F ( p, q) Re( p, q) 2 Im( p, q) 2 2.2.3 Algoritma Invert Fast Fourier Transform Setelah dilakukan penyisipan bit-bit data pada data frekuensi dari data audio dan video stream, data akan dikembalikan kedalam domain semula dengan menggunakan metode Invert FFT (IFFT). Untuk mendapatkan nilai invert Fourier Transform, harus ditentukan terlebih dahulu nilai sudut teta (θ). Nilai sudut teta (θ) digunakan untuk menentukan sudut yang terbentuk dari nilai Real dan Imaginer awal. Tujuannya agar nilai real dan imaginer baru nantinya berada pada sudut dan kuadran yang sama dengan nilai awal, sehingga nilai balikan (invert FFT) sesuai dengan nilai awalnya. Perhitungan sudut dapat ditemukan dengan persamaan:
(q) arctg
Im(q) Re(q)
( p, q) arctg
(IFFT satu dimensi)
Im(p, q) Re( p, q)
(IFFT dua dimensi)
Setelah didapat nilai θ, nilai tersebut harus dikonversi berdasarkan kuadrannya. Kuadran-kuadran yang ada, yaitu: 1. Kuadran I : Kondisi ini terpenuhi jika nilai real dan imaginer positif. 2.
Nilainya : 0 90 Kuadran II : Kondisi ini terpenuhi jika nilai real negatif dan nilai imaginer positif.
3.
Nilainya : 180 Kuadran III : Kondisi ini terpenuhi jika nilai real dan nilai imaginer negatif.
4.
Nilainya : 180 Kuadran IV : Kondisi ini terpenuhi jika nilai real positif dan nilai imaginer negatif. Nilainya :
o
o
o
Pada IFFT dibutuhkan nilai real dan imaginer baru yang didapat dari persamaan:
Re(q) F (q) cos (q) Im(q) F (q) sin (q) Re( p, q) F ( p, q) cos ( p, q) Im(p, q) F ( p, q) sin ( p, q)
( IFFT satu dimensi)
( IFFT dua dimensi)
Setelah didapat nilai real dan imaginer baru, kemudian kedua nilai tersebut dimasukkan kedalam persamaan IFFT untuk mendapatkan nilai data dalam domain spasial. Persamaan Invert Fast Fourier Transform satu dimensi IFFT dihitung dengan menggunakan persamaan:
1 N 1 X ( q ) x ( n)e N n0
j 2qn / N
Secara umum nilai dari x(n) adalah:
x(n) re(q) j. Im(q) Dalam penjabarannya, Persamaan Euler serta persamaan dari x(n) dapat dimasukkan kedalam persamaan IFFT di atas sehingga diperoleh persamaan IFFT yang baru :
X (q)
1 N 1 (re(q) j. Im( q)).(cos(2qn / N ) j.(sin(2qn / N ))) N n 0
Dari persamaan IFFT di atas akan diperoleh nilai hasil berupa bilangan Real dan Imaginer sebagai berikut: Untuk nilai Real:
Re(q) (re(q) * cos(2qn / N )) j.(Im(q) * sin(2qn / N )) Untuk nilai Imaginer:
Im(q) (re(q) * j.sin(2qn / N )) ( j. Im(q) * cos(2qn / N )) Hasil dari proses IFFT sendiri diperoleh dari rumus:
X (q) ( Re(q) 2 Im( q) 2 ) / N Persamaan Invert Fast Fourier Transform dua dimensi IFFT dua dimensi dihitung dengan menggunakan persamaan:
X ( p, q )
1 1 M N
M 1 N 1
x(m, n)e m 0
n 0
j 2pm / M
e
j 2qn / N
Secara umum nilai dari x(n) adalah:
x(m, n) re( p, q) j. Im(p, q)
Dalam penjabarannya, Persamaan Euler serta persamaan dari x(m,n) dapat dimasukkan kedalam persamaan IFFT di atas sehingga diperoleh persamaan IFFT dua dimensi yang baru :
1 1 M 1 X ( p, q ) M N m 0
N 1
(re( p, q) j. Im( p, q)).(cos 2pm / M j sin 2pm / M )(cos 2qn / N j sin 2qn / N ))) n 0
Dari persamaan IFFT di atas akan diperoleh nilai hasil berupa bilangan Real dan Imaginer sebagai berikut: Untuk nilai Real:
Re( p, q) (re( p, q) * cos(2pm/ M ) * cos(2qn / N )) j.(Im(p, q) * sin(2pm/ M * sin(2qn / N )) Untuk nilai Imaginer:
Im(p, q) (re( p, q) * j.sin(2pm / M ) * j.sin(2qn / N )) ( j. Im(p, q) * cos(2pm / M ) * cos(2qn / N )) Hasil dari proses IFFT sendiri diperoleh dari rumus:
X ( p, q) ( Re( p, q) 2 Im( p, q) 2 ) / MN 2.2.4 Algoritma Least Significants Bits Algortma LSB adalah salah satu metode penyisipan data yang cukup populer dan sederhana. Untuk memahami konsep LSB, perlu juga dipahami konsep dari binary digit. Binary digit merupakan unit informasi terkecil yang ditangani oleh sebuah komputer. Satu bit diwujudkan sebagai 1 atau 0 dalam mode numeral, atau perwujudan dari true atau false sebagai kondisi logika. Sebuah grup dengan delapan bit akan disebut dengan satu byte. Dalam bentuk byte akan memberikan banyak tipe informasi, sebagai contoh surat yang ditulis dengan alphabet, digit decimal atau karakter lain. Binary digit sering disingkat dengan bit. Metode Least significant bit menggunakan sifat data dari binary digit. Binary digit tersusun dari barisan data biner yang selalu memiliki nilai paling tidak berarti atau tidak terlalu berdampak besar pada perubahan suatu data. Letak dari nilai tersebut adalah pada sisi paling kanan dari barisan bit tersebut. Bit tersebut disebut sebagai least significant bit. Sedangkan most significant bit adalah kebalikan dari least significant bit yaitu angka yang memiliki impact (pengaruh) paling berarti yang terletak pada sisi paling kiri dari baris binary digit. Sebagai contoh bilangan biner dari 115 adalah 01110011 yang diperoleh dari perhitungan dibawah ini : = 𝟎 ∗ 27 + 𝟏 ∗ 26 + 𝟏 ∗ 25 + 𝟏 ∗ 24 + 𝟎 ∗ 23 + 𝟎 ∗ 22 + 𝟏 ∗ 21 + 𝟏 ∗ 20 = 0 + 64 + 32 + 16 + 0 + 0 + 2 + 1 = 115 Angka 0 dan 1 yang di cetak tebal menunjukkan bilangan biner yang merupakan presentasi dari nilai 115 dalam bilangan biner. Apabila kita merubah data pada bit LSB, maka perubahan nilai yang terjadi tidak akan berdampat terlalu jauh atau besar bila dibandingkan dengan nilai asli. Sebagai contoh kita akan merubah nilai LSB dari bilangan biner 115 yaitu 01110011 menjadi 01110010. Jika kita ubah nilai biner tersebut menjadi bilangan desimal maka nilai nya tidak akan jauh dari nilai semula seperti ditunjukkan pada perhitungan dibawah ini: 115
01110010 = 𝟎 ∗ 27 + 𝟏 ∗ 26 + 𝟏 ∗ 25 + 𝟏 ∗ 24 + 𝟎 ∗ 23 + 𝟎 ∗ 22 + 𝟏 ∗ 21 + 𝟎 ∗ 20 = 0 + 64 + 32 + 16 + 0 + 0 + 2 + 0 = 114 Dari perhitungan di atas, perubahan yang terjadi dari penyisipan nilai bit baru pada bit LSB dari bilangan biner 115, memberikan nilai yang tidak terlalu jauh sebesar 114.
3. Metode penelitian 3.1 Bahan dan Alat penelitian Bahan dan alat yang digunakan didalam penelitian ini adalah : 1. Microsoft Visual C# 2008 dari Microsoft Visual Studio 2008 sebagai tools untuk menguji kevalidan metode penyisipan data pada domain frekuensi. 3.2 Metode Penyisipan Data Proses penyisipan data pada file AVI dibagi menjadi tiga tahapan utama yaitu: mengekstrak video stream dan audio stream dari video file. Proses pengekstrakan menghasilkan rangkaian frame video dalam bentuk bitmap dan file audio dalam bentuk WAV. Tahapan kedua adalah menyisipkan (embed) data kedalam file bitmap dan file WAV. Tahapan terakhir adalah menyusun kembali frame-frame tersebut sehingga menjadi video stream yang baru dan menggabungkannya dengan file audio stream sehingga menjadi sebuah file video.
Bitmap Bitmap Bitmap video stream
AVI file
extract stream
Embed data : 0100101 10100100
join stream
New AVI file
audio stream : WAV Gambar 3.1 Proses penyisipan data ( embeding data) 3.2.1 Pengekstrakan data video stream dan audio stream Proses pengekstrakan data streaming diawali dengan mengambil audio stream dari file AVI kemudian dilanjutkan dengan pengekstrakan video stream. Setelah mendapatkan video stream, maka langkah selanjutnya adalah membaca informasi dari stream tersebut yang meliputi posisi mula-mula (start position frame) dari stream tersebut, jumlah frame penyusun video stream, header information yang meliputi panjang dan lebar dari frame, dan frame rate dari video stream. Setelah informasi dari video stream diperoleh, dilanjutkan dengan mengekstrak masing masing frame dari video stream dengan menentukan pointer dari object frame yang diinginkan dan pointer untuk DIB (Device Independent Bitmaps) dari frame yang di inginkan. DIB adalah format yang digunakan untuk menyimpan bitmap dalam format file bmp. Berdasarkan header information yang telah didapatkan maka langkah selanjutnya adalah melakukan decompress terhadap frame untuk menyimpannya sebagai file bitmap. Proses pembentukan bitmap diawali dengan menyusun header information dari bitmap yang diperoleh sebelumnya dari video stream, dilanjutkan dengan melakukan decompress frame yang diambil dari video stream yang disimpan sementara di dalam DIB. Setelah semua informasi yang dibutuhkan (bitmap info header) didapatkan dan telah tersusun secara terstruktur, maka image dan header info yang didapat akan disimpan di dalam format data bitmap. Sampai langkah ini, frame yang terekstrak berformat bitmap. 3.2.2 Penyisipan data (data embeding) Terdapat dua buah proses penyisipan data yaitu penyisipan data pada frame dari video stream dan penyisipan data pada file audio stream. Pada file audio stream berupa data WAV, penyisipan data dilakukan pada data digital audio dari file WAV. Perlu diketahui bahwa file WAV menggunakan struktur standar RIFF (Resource Intercahange File Format) yang mengelompokkan isi file kedalam beberapa bagian. Setiap bagian dari data audio memiliki header-nya sendiri-sendiri beserta dengan ukurannya. Struktur RIFF mengatur file data audio kedalam bagian bagian yang masing-masing memiliki header dan ukurannya sendiri dan disebut sebagai chunk. Format file WAV sendiri memiliki tiga buah chunk, yaitu: RIFF header, FORMAT header, dan DATA audio (DATA chunk). Telah disebutkan sebelumnya, proses penyisipan data dilakukan pada bagian data audio (data chunk). Apabila file WAV diamati menggunakan HEX Editor, akan memberikan hasil berupa rangkaian nilai sebagai berikut : 52 49 46 46 24 40 01 00 10 00 00 00 01 00 02 00 04 00 10 00 64 61 74 61
57 41 56 45 66 6D 74 20 11 2B 00 00 44 AC 00 00 00 40 01 00 00 00 00 00
[email protected] .........+..D... ....data.@......
Untaian nilai nilai diatas merupakan rangkaian dari data chunk yang terdiri dari header, FORMAT header, dan DATA audio (DATA chunk). Nilai dari DATA audio ditunjukkan pada cuplikan baris data di bawah ini: 64 61 74 61 data
00 40 01 00 length of the chunk
Proses penyisipan data akan dilakukan pada bagian data dengan mengubah nilai tersebut kedalam domain frekuensi menggunakan algoritma Fast Fourier Transfrom satu dimensi. Hasil dari proses transformasi data tersebut selanjutnya akan di sisipkan data menggunakan metode penyisipan yang dianggap sesuai dengan sifat dari transformasi fourier menggunakan algoritma FFT. Penyisipan data pada file bitmap dari rangkaian frame pada video streaming sendiri tidak terlalu berbeda jauh dengan proses penyisipan data pada file audio WAV. Perlu diketahui bahwa citra bitmap adalah citra dengan ukuran 24 bit di mana untuk setiap piksel dari citra bitmap memiliki komponen warna yang spesifik yang merupakan kombinasi dari tiga warna dasar yaitu Red (R), Green (G),Blue (B) sehingga sering disebut sebagai citra RGB. Setiap komponen warna tersebut masing masing mempunyai nilai intensitas tersendiri dengan nilai 0 sampai dengan 255. Proses penyisipan data pada file bitmap dilakukan dengan memanipulasi nilai RGB dari piksel bitmap tersebut. Penyisipan data dilakukan dengan mengambil blok matrik dari nilai pixel warna biru (Blue) dengan ukuran tertentu, untuk selanjutnya di transformasikan kedalam domain frekuensi menggunakan algortima Fast Fourier Transform dua dimensi. Seperti halnya pada file audio, hasil transformasi dari nilai piksel tersebut akan diubah kedalam bilangan biner dan akan disisipkan data dalam format biner menggunakan algoritma Least Significants Bits sebelum nantinya akan dikembalikan kedalam domain spasial menggunakan algoritma inverse FFT. Pemilihan piksel berwarna biru dikarenakan warna biru adalah warna yang sulit di deteksi oleh mata manusia normal, walaupun terjadi perubahan atau manipulasi nilai didalamnya. 23 12 65 97 52 56 95 04 12
13 33 83 83 12 48 82 77 66
95 112 56 113 71 01 04 75 92 31 05 31 33 113 71 83 11 171 74 07 24 12 86 32 27 240 34
28 09 06 53 01 99 06 47 56
91 68 52 49 09 27 11 33 63
02 96 77 67 68 88 47 02 73
56 45 21 29 96 36 73 01 33
92 06 52 31 53 49 71 01 09 blok matrik
FFT 2D Proses
3 x 3
Gambar 3.2 Contoh blok matrik nilai piksel biru dari bitmap frame yang di ubah kedalam domain frekuensi Proses penyisipan data sendiri dilakukan secara bertahap dimana frame awal yang terekstrak akan tersimpan di dalam folder sementara, untuk kemudian dibuka dan disisipkan data kedalamnya. Hal tersebut berlaku juga untuk rangkaian file frame selanjutnya. Setelah data berhasil disisipkan, frame akan disusun kembali untuk membentuk sebuah video stream baru. Jadi pada intinya penyisipan data dilakukan satu persatu, dan untuk beralih ke frame selanjutnya, frame (bitmap) yang tersimpan di folder sementara akan dihapus terlebih dahulu. Pada proses akhir, data audio streaming dan video streaming akan digabungkan (merge) sehingga menjadi sebuah file AVI yang telah disisipkan sebuah data atau informasi di dalamnya. 3.3 Metode Pengekstrakan Data Proses pengekstrak data dari stego video (file video yang telah disisipi hidden data) hampir serupa dengan proses penyisipan data di awal. Proses di awali dengan pengekstrakan data audio stream dan video stream dari file AVI. Pada file video stream data audio stream akan di transformasikan ke domain frekuensi menggunakan algoritma FFT. Setelah nilai dalam domain frekuensi didapatkan, langkah selanjutnya adalah mengubah nilai data sesuai dengan metode invert dari metode yang digunakan pada proses penyisipan data di awal, sehingga di dapatkan data yang disisipkan.
Bitmap Bitmap Bitmap
FFT , extrect method
video stream
Stego AVI file
extract data
extract stream
data
FFT, extrect method
audio stream : WAV Gambar 3.3 Proses pengekstrakan data 4. Pembahasan 4.1 Penyisipan data Pada bagian ini akan dijabarkan implementasi proses penyisipan data baik pada audio stream maupun video stream secara mendetail. Proses penyisipan data pada kedua data streaming tersebut di awali dengan melakukan proses transformasi nilai data pada data streaming dari domain spasial ke domain frekuensi. Telah dijabarkan pada bagian sebelumnya bahwa data dari audio streaming memiliki format satu dimensi. Sedangkan data nilai piksel dari bitmap penyusun video stream. 02 06 15 8 5 23 7
11 13 09 07 01 19
format satu dimensi
format dua dimensi
Untuk mengubah data audio dan bitmap ke dalam domain frekuensi, data data tersebut bisa kita perlakukan sebagai elemen dari sebuah larik berdimensi satu untuk data audio dan berdimensi dua untuk data nilai piksel (RGB) frame seperti digambarkan pada gambar dibawah ini: 0 1 2 indeks element
8
5
23
0
1
2
indeks
7 3
0
02
06
15
1
11
13
09
2
07
01
19
element
Gambar 4.1 Array D satu dimensi berisi data audio dan Array E dua dimensi berisi data piksel
Dengan memperlakukan data sebagai bagian dari array, maka proses perhitungan nilai real dan imaginer dari data frekuensi dapat dijabarkan dalam pseudo code sebagai berikut: FFT satu dimensi For i 0 To n – 1 Do For j 0 To n – 1 Do Real Real + (D[j] * (Math.Cos(((2 * phi * i * n) / n)))) Imagi Imagi - (D(j) * (Math.Sin(((2 * phi * i * n) / n)))) Endcase ArrayReal[i] Real ArrayImag[i] Imagi Real 0 Imagi 0 Endcase
Dengan keterangan sebagai berikut : D i n Real Imagi ArrayReal ArrayImag Phi
= = = = = = = =
array satu dimensi yang menampung data audio indeks dari array satu dimensi banyaknya data variabel penampung hasil perhitungan nilai real variabel penampung hasil perhitungan nilai imaginer array satu dimensi menampung nilai real dari setiap data array satu dimensi menampung nilai imagi dari setiap data 3.14
FFT dua dimensi For i 0 To n-1 Do For j 0 To m-1 Do For k 0 To n – 1 Do For l 0 To m – 1 Do Real Real + ( E[k,l] *(Math.Cos((((2*phi*i*k)/n) + ((2*phi*j*l)/m)))) ) Imagi Imagi - ( E[k,l] *(Math.Sin((((2*phi*i*k)/n) + ((2*phi*j*l)/m)))) ) Endcase Endcase ArrayReal[i,j] Real ArrayImag[i,j] Imagi Real 0 Imagi 0 Endcase Endcase
Dengan keterangan sebagai berikut : E i,j n m Real Imagi ArrayReal ArrayImag
= = = = = = = =
array satu dimensi yang menampung data audio indeks dari array dua dimensi banyaknya baris data banyaknya kolom data variabel penampung hasil perhitungan nilai real variabel penampung hasil perhitungan nilai imaginer array satu dimensi menampung nilai real dari setiap data array satu dimensi menampung nilai imagi dari setiap data
Setelah nilai real dan imaginer didapatkan, selanjutnya kedua nilai tersebut diubah kedalam nilai frekuensi dengan perhitungan sebagai berikut : FFT satu dimensi For i 0 To n - 1 Do Frekuensi[i] Math.Sqrt((Math.Abs(Real[i])^2) + (Math.Abs(Imagi[i])^2)) Endcase
FFT dua dimensi For i 0 To n-1 Do For j 0 To m-1 Do Frekuensi[i,j] Math.Sqrt((Math.Abs(Real[i,j])^2) + (Math.Abs(Imagi[i,j])^2)) Endcase Endcase
Hasil transformasi fourier untuk FFT satu dan dua dimensi dengan pembulatan kebawah untuk nilai 0.5 kebawah berdasarkan contoh larik pada Gambar 4.1 adalah sebagai berikut : data audio domain frekuensi
43
16
19
16
data piksel domain frekuensi
83
22
24
08
23
11
08
11
23
Setelah proses transformasi fourier selesai dilakukan, langkah selanjutnya adalah menyisipkan data baru menggunakan metode penyisipan data yang dianggap tepat dan sesuai. Pada penelitian kali ini kita akan mencoba menyisipkan data kedalam nilai frekuensi dari data audio dan piksel menggunakan algoritma penyisipan paling sederhana yaitu LSB. Proses diawali dengan mengubah nilai frekuensi kedalam bilangan biner sebagai berikut : 43 16 19 16
: : : :
0010 0001 0001 0001
1011 0000 0011 0000
83: 0101 0011 08: 0000 1000 08: 0000 1000
data biner audio
22: 0001 0110 23: 0001 0111 11: 0000 1011
24: 0001 1000 11: 0000 1011 23: 0001 0111
data biner RGB piksel
Proses penyisipan data pada data data biner di atas dilakukan pada bit data paling tidak berarti (least significat bit ). Sebagai contoh, pada data audio, kita bisa menyisipkan empat buah data bit kedalam data biner sebagai berikut : 0 1 1 0
Proses penyisipan keempat data, dapat dilakukan secara langsung seperti dijabarkan pada bagian berikut : 43 16 19 16
: : : :
0010 0001 0001 0001
1011 0000 0011 0000
0010 0001 0001 0001
0110 disisipkan di bit LSB
1010 0001 0011 0000
: : : :
42 17 19 16
Akan tetapi proses penyisipan data pada least bit di atas akan menemui kendala karena saat dilakukan pembalikan (invert) nilai kedomain semula (spasial), nilai yang didapatkan menjadi tidak bulat. Hal tersebut menjadi kendala dikarenakan nilai dalam domian spasial tersebut merupakan nilai dari data audio streaming dan nilai dari data piksel biru dari file bitmap penyusun video stream yang memiliki tipe data integer positif (bilangan bulat). Di bawah ini ditunjukkan nilai balikan dari data frekuensi ke domain spasial dari data yang telah disisipi informasi baru. 42
17
19 16
--- IFFT --- > 7.07
4.67
23.43
6.84
Keempat nilai baru yang terbentuk di atas harus dibulatkan sesuai dengan format data dari audio dan video streaming. Hasil pembulatannya adalah sebagai berikut : 7
5
23
7
Nilai di atas jika kita kembalikan kedomain frekuensi akan menghasilkan nilai frekuensi baru sebagai berikut : 43 17 18 17
: : : :
0010 0001 0001 0001
1011 0001 0010 0001
data yang disisipkan berubah
Dari perhitungan di atas terlihat metode penyisipan data menggunakan algoritma LSB biasa, kurang tepat dipergunakan dalam proses penyisipan sebuah data baru dalam sebuah domain frekuensi. Dari hasil perhitungan di atas, hasil pemerolehan data baru yang disisipkan tidak sesuai dengan nilai yang disisipkan. Data awal yang disisipkan bernilai 0 1 1 0. Sedangkan setelah melalui proses IFFT dan FFT, data yang disimpan berubah menjadi 1 1 0 1 . Hal tersebut dikarenakan penyisipan data di nilai frekuensi menyebabkan hasil pembalikan data ke domain semula (IFFT) akan menghasilkan bilangan desimal, sehingga harus dilakukan pembulatan sesuai dengan karakter dari data audio dan video streaming. Hal tersebut juga berlaku untuk proses perhitungan FFT dan IFFT dua dimensi. Untuk mengatasi masalah tersebut, harus dicari sebuah metode penyisipan yang tepat agar nilai data balikan tetap bertipe bulat. Terdapat beberapa cara untuk mengatasi hal tersebut seperti memodifikasi metode LSB. Akan tetapi pada penelitian ini akan digunakan pendekatan yang jauh lebih sederhana. Salah satu pendekatan yang cukup sederhana tersebut adalah dengan mempersempit jumlah area data yang di transformasikan yaitu dua data untuk transformasi satu dimensi dan 2x2 data untuk transformasi dua dimensi. Selanjutnya penyisipan data baru dapat memanfaatkan salah satu dari sifat perhitungan dari FFT satu dan dua dimensi sebagai berikut :
-
Untuk perhitungan FFT satu dimensi, diandaikan n adalah sebuah bilangan integer, perhitungan dari array satu dimensi berukuran dua memiliki ciri khas sebagai berikut : n
n
----- FFT ---- >
2*n
1
maka hasil
----- IFFT ----- > n n
Contoh penerapan dari sifat perhitungan di atas ditunjukkan pada perhitungan nilai frekuensi di bawah ini menggunakan bahasa pemrograman C# :
Gambar 4.2 Contoh perhitungan FFT satu dimensi menggunakan C#
-
Untuk perhitungan FFT dua dimensi, diandaikan n adalah sebuah bilangan integer, maka hasil perhitungan dari array dua dimensi berukuran 2 x 2 memiliki sebuah ciri khas sebagai berikut : n n
n n
----- FFT ---- >
4* n 0
0 0
----- IFFT ----- >
n n
n n
Contoh penerapan dari sifat perhitungan di atas ditunjukkan pada perhitungan nilai frekuensi di bawah ini menggunakan bahasa pemrograman C# :
Gambar 4.3 Contoh perhitungan FFT dua dimensi menggunakan C#
Dari sifat perhitungan transformasi fourier di atas baik untuk satu dan dua dimensi, maka dapat di buat sebuah kondisi dalam proses penyisipan data dalam sebuah domain frekuensi sebagai berikut : -
Untuk data fourier satu dimensi ( data audio streaming), apa bila data baru yang hendak disisipkan bernilai satu (1) maka di kondisikan nilai fourier dari dua buah data audio streaming diubah menjadi sesuai dengan sifat pada Gambar 4.2 yaitu pada nilai kedua selalu bernilai satu. Sebaliknya jika data yang disisipkan bernilai nol (0), maka nilai dari data audio streaming tidak perlu dimanipulasi asalkan data kedua tidak bernilai satu. Jika data kedua bernilai satu maka nilai harus diganti dengan sembarang nilai selain satu. Untuk lebih jelasnya dapat dilihat pada penggambaran di bawah ini : disisipkan Data --FFT--> data fourier 8
5
13 3
fourier baru --IFFT--> Data baru –-FFT--> data fourier 1
13 1
7
6
13 1
Penggambaran di atas menunjukkan bahwa data yang telah di sisipi oleh data baru, setelah di ubah ke domain spasial (IFFT), untuk selanjutnya di transformasikan ulang menggunakan metode FFT, tidak merubah kondisi data yang telah disisipkan data baru.
-
Untuk data fourier dua dimensi (data frame bitmap dari video streaming), berdasarkan sifat perhitungan matrik fourier di atas, apabila data yang hendak disisipkan bernilai nol (0), maka nilai untuk masing masing komponen matrik fourier 2 x 2 tidak boleh dalam kondisi yaitu nilai selain matrik (0,0) sama dengan 0. Jika kondisi tersebut tidak terpenuhi maka nilai frekuensi matrik harus diacak agar tidak membentuk pola tersebut. Hasil balikan (IFFT) dari matrik ini akan menghasilkan nilai berbeda untuk masing masing komponen. Sebaliknya apabila inputan bernilai satu (1), maka nilai untuk masing masing komponen matrik fourier 2 x 2 harus dalam sebuah kondisi yaitu selain nilai pada koordinat (0,0), nilai lainnya harus ber nilai nol ( 0). Jika tidak terpenuhi maka nilai fourier matrik harus diubah menjadi sama dengan 0 untuk koordinat (0,1), (1,0) dan (1,1). Hasil balikan (IFFT) dari matrik ini akan menghasilkan nilai sama untuk masing masing komponen matrik. Untuk lebih jelasnya dapat dilihat pada penggambaran di bawah ini : 9 23
17 41
--FFT-->
90 38
26 10
disisipkan -- 1 -->
90 00
00 00
--IFFT-->
23 23
23 23
--FFT--> 92 00 00
00
Penggambaran di atas menunjukkan bahwa data yang telah di sisipi oleh data baru, setelah di ubah ke domain spasial (IFFT), untuk selanjutnya di transformasikan ulang menggunakan metode FFT, tidak merubah kondisi data yang telah disisipkan data baru. Setelah proses penyisipan data selesai, maka langkah selanjutnya mengembalikan nilai data dari domain frekuensi kembali ke domain spasial menggunakan metode invert fourier. Untuk mendapatkan nilai invert Fourier Transform, harus ditentukan terlebih dahulu nilai sudut teta (θ). Nilai sudut teta (θ) digunakan untuk menentukan sudut yang terbentuk dari nilai Real dan Imaginer awal. Tujuannya agar nilai real dan imaginer baru nantinya berada pada sudut dan kuadran yang sama dengan nilai awal, sehingga nilai balikan (invert FFT) sesuai dengan nilai awalnya. Perhitungan sudut dapat ditemukan dengan persamaan:
(q) arctg
Im(q) Re(q)
Implementasi dari perhitungan sudut di atas (teta) dalam pseudo code adalah sebagai berikut :
phi As Double Math.PI teta As Double 0 If real <> 0 Then teta = Math.Abs(Math.Atan(imagi/real)) If real >= 0 and imagi >= 0 Then teta teta
ElseIf real < 0 and imagi >= 0 Then teta phi - teta
ElseIf real < 0 and imagi < 0 Then teta (phi + teta)
ElseIf real >= 0 and imagi < 0 Then teta -teta
End If
Nilai teta yang didapatkan akan dipergunakan untuk mendapatkan nilai real dan imaginer yang baru berdasarkan sudut teta yang didapatkan. Implementasi dari proses di atas untuk FFT satu dimensi dan dua dimenis, ditunjukkan pada dua buah pseudo code di bawah ini : For i 0 To n - 1 Real[i] = NilaiFrekuensi[i] * Math.Cos(teta) Imagi[i] = NilaiFrekuensi[i] * Math.Sin(teta) Endcase
For i 0 To n - 1 For j 0 To m - 1 Real[i, j] = NilaiFrekuensi [i, j] * Math.Cos(teta); imagi[i, j] = NilaiFrekuensi [i, j] * Math.Sin(teta); Endcase Endcase
Setelah nilai real dan imaginer yang baru didapatkan untuk masing masing nilai, maka proses invert FFT dilakukan untuk mengembalikan nilai ke domain spasialnya. Implementasi dari invert FFT satu dan dimensi di dalam pseudo code adalah sebagai berikut :
dapat dua
For i 0 To n - 1 For j 0 To n - 1 RealI RealI + (RealB[i]*(Math.Cos(2*phi*i*j/n)))-(imagiB[i]* (Math.Sin(2*phi*i*j/n))) ImagiI ImagiI + (RealB[i]*(Math.Sin(2*phi*i*j/n)))+(imagiB[i]* (Math.Cos(2*phi*i*j/n))) Endcase arrayHasil[i] Math.Sqrt((RealI ^ 2) + (ImagiI ^ 2)) / n RealI 0 ImagiI 0 Endcase
Dengan keterangan sebagai berikut : i n RealI ImagiI RealB ImagiB ArrayHasil
= = = = = = =
indeks dari array satu dimensi banyaknya data variabel penampung hasil perhitungan nilai invert real variabel penampung hasil perhitungan nilai invert imaginer Nilai Real setelah dihitung dengan sudut baru (teta) Nilai Imaginer setelah dihitung dengan sudut baru (teta) array satu dimensi menampung nilai dari invert FFT
For i 0 To n - 1 For j 0 To m - 1 For k 0 To n -1 For l 0 To m - 1 RealI RealI + ((reB[k,l])*(Math.Cos((((2*phi*i*k)/2) + ((2* phi*j*l)/2))))) - (imgB[k,l]*(Math.Sin((((2*phi*i*k)/2) + ((2*phi*j * l)/ 2))))); ImagiI ImagiI + (reB[k,l]*((Math.Sin((((2*phi*i*k)/2) + ((2*phi*j*l)/ 2)))))) + (imgB[k,l]*(Math.Cos((((2*phi*i*k)/2) + ((2*phi*j*l)/ 2)))));
Endcase Endcase arrayHasil[i,j] Math.Sqrt((RealI^ 2) + (ImgI ^ 2))/ (n*m);
Endcase Endcase
Setelah data di transformasikan ke domain semula maka data yang baru akan menggantikan data yang lama dari data streaming berupa data audio dan data video streaming (bitmap frame).
5. Kesimpulan Dari uraian yang telah dipaparkan pada bab sebelumnya, maka dapat diambil kesimpulan mengenai proses penyisipan data pada file video dalam domain frekuensi sebagai berikut: 1. Proses penyisipan data pada sebuah file video dapat disisipkan pada bagian data audio streaming dan video streaming. Pada data audio streaming, penyisipan data dilakukan pada nilai nilai dari data audio yang terdapat di dalam audio streaming. Sedangkan pada data video streaming, proses penyisipan data dilakukan pada data penyusun video streaming, berupa data frame image bertipe bitmap. 2. Dalam menyisipkan data kedomain frekuensi yang diperoleh dari proses transformasi fourier (FFT), harus menggunakan algoritma penyisipan yang sesuai, agar nilai balikan dalam domain spasial menggunakan proses invert fourier ( IFFT), tidak menghasilkan nilai tidak bulat yang akan menyebabkan perubahan data yang disisipkan dikarenakan tipe data spasial dari data audio-video streaming bertipe bulat. 6. Daftar Pustaka “Chapter 12. Fast Fourier Transform”.Sample page from NUMERICAL RECIPES IN C: THE ART OF SCIENTIFIC COMPUTING (ISBN 0-521-43108-5), Copyright (C) 1988-1992 by Cambridge University Press. Dri Handarkho, Yonathan. 2007.”Pembangunan Aplikasi Steganografi Pada File Video Audio Video Interleave Menggunakan Algoritma Fast Fourier Transform”. Skripsi, Program Studi Teknik Informatika Universitas Atma Jaya Yogyakarta. Gumantyo, Raymondus Rhisang Galih. 2007. “Pembangunan Aplikasi Audio Steganografi Pada File Wav Dengan Menggunakan Metode Spread Spectrum Dan Data Swap”. Skripsi, Program Studi Teknik Informatika Universitas Atma Jaya Yogyakarta. Hoffman, Forrest M.1997. “An Introduction to Fourier Theory”. University of California San Diego. John, Corrina. 2004. “Steganography VIII - Hiding Data in Wave Audio Files” URL: http://www.codeproject.com/KB/security/steganodotnet8.aspx John, Corinna. 2004. “A Simple C# Wrapper for the AviFile Library”. URL: http://www.codeproject.com/cs/media/avifilewrapper.asp. Raja, K.B, dkk. 2005.” A Secure Image Steganography using LSB, DCT and Compression Techniques on Raw Images”. IEEE International. Stanescu, Daniela, dkk.2007.”Embedding Data in Video Stream using Steganography”. SACI 2007 - 4th International Symposium on Applied Computational Intelligence and Informatics.IEEE International.