Site icon IT Tutorial

Steganografi -1

Merhaba,

Bilgisayarla steganografi iki temel prensipten yaralanılmaktadır. Birincisi sayısallaştırılmış görüntü veya ses kaydedilmiş dosyaların içeriklerinin,görüntü veye ses kaydına zarar vermeden bir dereceye kadar değiştirile bilmesidir. Diğer prensip ise,insanları görüntü,renk ve ses kalitelerindeki ufak değişiklerinin fark edememesidir.

 

 

Bilgi saklamak için, gereğinden fazla detay taşıyan 16-bit ses, 8-bit veya daha detaylı 24-bit görüntü dosyalarından kolaylıkla faydanılmaktadır. Görüntü dosyalarında piksel renklerinin en anlamsız (least significant) bit’lerinin değiştirilmesi görüntü üzerinde gözle fark edilebilir bir değişiklik yapmamaktadır. Bizim projede, 8-bit lik görüntü dosyalarında verinin saklanması ve saklanan verinin geri elde edilmesi üzerine dayanır. Yapıyı tam anlaya bilmek için, resim dosyalarının tipik özelliklerini çok iyi kavramamız gerekir. Bunlar;

1- Bütün resimler dosya başlığı (header) ve piksellerden oluşur. 2- Her piksel sadece bir renk içeren/gösteren küçük bir bloktur.

  1. Her pikseldeki renk temel 3 rengin karışımından elde edilir.(Red,Green,Blue)
  2. Her pikselde bu 3 rengin verileri tutulur. Her temel renk 1 pikselde 1 byte (0..255) yer kaplar, yani 1 piksel 3 byte (R,G,B) veri taşır.

 

 

Örnek :

Beyaz Renk RGB formatında FF-FF-FF hex değeri ile ifade edilir. Yani Red: FF(h), Green: FF(h), Blue: FF(h)

FF binary sistemde 11111111 in karşılığıdır.

1 pikselde beyaz rengi ifade etmek için 11111111- 11111111- 11111111 verisi kullanılır.

11111111- 11111111- 11111111 verisinin en anlamsız bitlerini gizlenecek olan veri için kullanma yöntemi üzerine kuruludur. Bu küçük renk değişikliğini insan gözü algılayamaz.

Her piksele 3 bit. İlk bakışta çok çok az gibi görünse de 800×600 ebatlı bir resimde 800 x 600 = 480.000 adet piksel bulunur.

480.000 x 3 bit = 1.440.000 bit (gizlenecek olan veri için kalan yer)

1.440.000 bit = 175,7 KiloByte. Aslında gizlenecek verinin hiçte az olmadığı görülür.

 

 

Aşağıda RGB değerleri arasında bir birimlik fark olan iki görüntü verilmiştir.

Şekil 1.RGB(50,50,230) Şekil 2.RGB(51,51,231)

Şekil 1 ve şekil 2 deki görüntülerde de var olan değişiklik insan tarafından algılanamayacak kadar ufak olduğu görülmektedir. İşte, bu form atta resmin anlamsız bitlerine (sondan 1,2 ve 3. bitleri) istediğimiz herhangi bir veriyi rahatlıkla gizleye biliriz.

 

Veri Gizleme İşlemi

Bilgisayarda her karakter 8-bit’le (1 byte) temsil edilir. Yukarda da ifade ettiğimiz üzere her piksel 3 byte ve her byte ta RGB değerlerinden birine karşılık gelir. Bizim yapacak olduğumuz işlem ,elimizde olan ve 8-bit’ten oluşan her bir karakterin bitlerini RGB değerlerinin anlamsız (son ) bit’lerine yerleştirmektir. Aşağıda yerleştirme işlemi gösterilmiştir.

Örneğin, ‘a’ karakterini herhangi bir görüntünün içine yerleştirelim. Yukarda da ifade ettiğimiz gibi her karakter 1 byte yani 8-bit ten oluşur. ‘a’ karakterinin sayısal karşılığı aşağıdaki gibidir.

 

 

 

‘a’=01010111

Karakter 8-bit’ten oluştuğu ve karakterin her bit’ini 1 byte saklayacağımız dan dolayı bize ‘a’ karakterini saklamak için 8-byte lazım. Her piksel 3 byte (RGB) içer diden dolayı 8-byte için yaklaşık 3 pikselle ihtiyacımız olacak. Başlangıçta belli bir değere rahip olan RGB değerlerinin son bitlerini ‘a’ karakterinin bitleriyle yer değiştireceğiz. Aşağıdaki tabloda değişim işlemi gösterilmiştir.

1.pikselde 101-> 010 2.pikselde 111->101 3.pikselde 01->11
R 1001101 1 0 R 000010 1 1 R 1100110 0 1
G 0101110 0 1 G 111110 1 0 G 1000110 1 1
B 0101010 1 0 B 110110 1 1 B 10101010 (boş)

‘a’= 010 101 11

Sekil 3. ‘a’ karakterinin RGB değerlerin içerisine saklanması

 

Elimizde var olan herhangi bir bilgiyi üstte de ifade ettiğimiz gibi, karakter-karakter ayırıp resmimizin anlamsız bitlerine yerleştirebiliriz. Tabi ki, bilginin saklanmasında programcı esnek hareket edebilir. Yani isteğe bağlı olarak bilgi, pikseldeki RGB değerlerinden istenilene ya da hepsine sak saklanılabilinir.

Aşağıda yerleştirme ile ilgili C kodu verilmiştir;

ikilik_taban(Text[indis++],bit_);

//alınan tekstin her karakteri bit_[8] Binay olarak atanır

while( satır <pBitmap->Height)

{

ptr = (Byte *)pBitmap->ScanLine[satır];//resmin satır adresi ptr'ye atanır

sutun=0; //sutundan itibaren resme yerleştirmeye başlanılır

while(sutun<pBitmap->Width)

{

if(a==8)//karakterin son bitide yerleştirildikten sonra diger karaktere gecilir

if(!diger_karakter_al(bit_,a)) return;

ikilik_taban(ptr[3*sutun],bit);

bit[n]=bit_[a++]; //R değerine 1 bit yerleştirilir

ptr[3*sutun]=onluk_taban(bit);

if(a==8) if(!diger_karakter_al(bit_,a)) return;

ikilik_taban(ptr[3*sutun+1],bit);

bit[n]=bit_[a++]; //G değerine 1 bit yerleştirilir

ptr[3*sutun+1]=onluk_taban(bit);

if(a==8) if(!diger_karakter_al(bit_,a)) return;

ikilik_taban(ptr[3*sutun+2],bit);

bit[n]=bit_[a++]; //B değerine 1 bit yerleştirilir

ptr[3*sutun+2]=onluk_taban(bit); sutun++;

}

satır++;

if(satır==pBitmap->Height)

{satır=0;n--;} } // Kayıt için bir sonraki anlamsız bite geç

 

Aşağıda içerisine bilgi gizlenmiş resim bulunmaktadır.

Şekil4.Remin Orijinal hali Şekil5. Resmin ”Mehmet” bilgisi gizlenmiş hali

Yukarıda da görüldüğü üzere resimde ki değişiklik hiç bir şekilde insan tarafından algılanamayacak kadar az. Fakat ekleme işlemi resmin anlamlı bitlerine yaklaştıkça resimdeki değişiklik gözle görülebilecek seviyeye doğru yaklaşmaya başlıyor. Şimdi resmin farklı formlarının anlamlı bitlerinden anlamsız bitlerine doğru veri gizleyelim ve aralarındaki farklılığı gözlemleyelim.

İlk olarak resmin farklı formları derken ne kastettiğimizi ifade edelim. Bir görüntü renkli, gray(siyah -beyaz) ve ikili (binary) olmak üzere üç kısımda ifade edilebilir.

Renkli görüntü: Resmin (renkli) orijinal halidir.

 

Gray görüntü: Bu görüntü için girilen renkli bir resim(RGB), alınıp ilgili renk değerleri üzerinde kimi işlemler yapılarak dönüşüm yapılmaktadır.Bu işlem sonucu renkli resim siyah-beyaz forma dönüşür. Dönüştürme işlemi için kullanılan birkaç yöntem vardır. En basit olanı RGB değerlerinin ortalamasını alarak tekrardan RGB değerlerine atamaktır. Diğer bir yöntem ise RGB değerleri için belirlenen özel değerlerle çarpılıp ortalamasının alınmasıdır. Aşağıda RGB değerleri için belirlenmiş özel çarpanlar verilmiştir.

R=0.2125F; G=0.7154F; B=0.0721F;

Şekil6.Resmin orijinal hali Şekil7.Resmin Gray hali

 

 

İkili (Binary) görüntü: Burada resim ikili forma dönüştürülür. Resmin orijinal haliyle her RGB değeri 0 ile 255 değeri arasındadır. Belirli bir eşik değerine göre pikseller yeniden değerlendirilir. Kullanılan eşik değerine göre resim ikili forma dönüştürülür. Dönüştürme işlemi; eşik değerin altındaki RGB değerlerine 0 üstündeki değerlere ise 255 atanmasıyla resim sadece iki renk tonunu içerecek forma dönüştürülür. İkilik form genellikle görüntü işleme alanlarında, görüntüyü gürültü diye tabir edilen gölge, toz zerreleri , ışık vb. yan etkilerden arındırmak için kullanılır.

Aşağıda bu şekilde olan örnekler verilmiştir. Çeşitli eşik değerleri için ölçülmüştür.

Şekil8.Resmin orijinal hali Şekil9.Eşik=64’e göre resim Şekil9.Eşik=128’e göre resim

 

Görüntünün farklı formlarını gördükten sonra şimdi de bu üç farklı formda resmin anlamsız bitlerinden-anlamlı bitlerine doğru veri saklayalım ve aralarındaki ilişkiye bir göz atalım.

Şekil 10.a. orijinal b. orijinal c. orijinal

Şekil 11.a veri gizli b. veri gizli c. veri gizli

 

Şekil10’da aynı resmin farklı formlarının orijinal halleri verilmiş. Şeki11’de, şekil10’da verilmiş resimlerin 8,7,6. bitlerine veri gizlenmiş hali verilmiş. Verilmiş üç form içinde resimler arasındaki değişiklik gözle fark edilemeyecek kadar az olduğu görülmektedir.

Şekil 12.a. veri gizli b. veri gizli c. veri gizli

Şekil10’de verilen resimlerin farklı formlarının 8,7,6,5. bitlerine veri gizlenmiştir. Resimlerde görüldüğü üzere değişiklik artık gözle görüle bilecek seviyeye ulaşmıştır. Resimler kısmen bozulmuştur.

Şekil 13a. veri gizli b. veri gizli c. veri gizli

 

Şekil10’de verilen resimlerin farklı formlarının 8,7,6,5,4. bitlerine veri gizlenmiştir. Resimlerden de anlaşılacağı üzere,anlamlı bitlere yaklaştıkça resimlerdeki bozulmalar da aynı oranda artmaktadır.

Şekil 14a. veri gizli b. veri gizli c. veri gizli

 

 

Şekil10’de verilen resimlerin farklı formlarının 8,7,6,5,4,3. bitlerine veri gizlenmiştir. Resimler iyiden iyiye bozulmaya başlamıştır. Yukarda da ifade ettiğimiz gibi anlamlı bitlere hareket resimlerin orijinalın dan uzaklaşmasına sebep oluyor.

Şekil 15a. veri gizli b. veri gizli c. veri gizli

 

 

Şekil10’de verilen resimlerin farklı formlarının 8,7,6,5,4,3,2. bitlerine veri gizlenmiştir. Resimler artık orijinalın dan büsbütün uzaklaşmıştır. Dikkat edilirse binary ve gray formlardaki değişiklikle bozulan resimler birbirinin aynısıymış gibi gözükmeye başlıyor.

Şekil 16a. veri gizli b. veri gizli c. veri gizli

 

 

Şekil10’de verilen resimlerin farklı formlarının 8,7,6,5,4,3,2,1. bitlerine veri gizlenmiştir. Görüldüğü üzere,resimlerin tüm bitlerine veri yerleştirilmesi sonucu resimler tamamen bozulmuştur.

 

Steganografin C# da kodlanmış hali aşağıdaki gibidir.

https://drive.google.com/open?id=1aIsH_uHCidZryzQmldDvlyHENc0yD3BR

Exit mobile version