# Steganografi
 
Steganografi, eski Yunancada "gizlenmiş yazı" anlamına gelir ve bilgiyi gizleme (önemli: şifreleme değil) bilimine verilen addır. Steganografi'nin şifrelemeye göre en büyük avantajı bilgiyi gören bir kimsenin gördüğü şeyin içinde önemli bir bilgi olduğunu fark edemiyor olmasıdır, böylece içinde bir bilgi aramaz (oysaki bir şifreli mesaj, çözmesi zor olsa bile, gizemi dolayısıyla ilgi çeker).


## Tarihçe.
Tarihte steganografi, hem şifreleme öncesi dönemde hem de sonrasında (ilgi çekmeme avantajından dolayı) kullanılmıştır.
  - Eski Yunanistan'da, insanlar mesajları tahtaya yazıp üzerini mumla kaplarlardı. Böylece cisim kullanılmamış bir tablete benzerdi öte yandan mumun eritilmesiyle birlikte içindeki gizli mesaj okunabilirdi.
  - Herodot'un bir hikâyesine göre Pers saldırısının öncesinde saçları tıraşlanan bir kölenin kafasına yazılan uyarı mesajı, saçlarının uzaması sayesinde saklanmıştır. Bu sayede, mesaj dikkat çekmeden gerekli yere ulaşabilmiş, ulaştığında da kölenin saçları tekrar kesilerek uyarı okunabilmiştir.
  - II. Dünya Savaşı sırasında, New York'taki, Japon millî ajanı (Velvalee Dickinson) oyuncak bebek pazarlamacısı kılığı altında saklanmaktaydı. Bu ajan, Amerikan ordusunun hareketlerini bebek siparişi içeren mektuplar içine saklayarak Güney Amerika'daki adreslere gönderiyordu.
  - Özellikle 1960'larda mor ötesi boya ile yazı yazabilen sprey ve kalemler moda idi. Bu kalemlerin yazdığı yazılar, sadece bir mor ötesi ışıkla görülebiliyordu.
  - Ron Howard'ın Akıl Oyunları (A Beautiful Mind) filminde, John Nash gazete ve dergilerde gizli mesajlar aramaktadır.


## Bilgisayar dünyasında kullanımı.
### Veri içine veri gömmek.
Bilgisayar dünyasında da steganografi oldukça popülerdir:
  - i386 işlemci serisinin komut setindeki bir tekrarlama, i386 için yazılmış programlara herhangi bir veriyi saklama imkânı vermektedir.
  - Resim, ses ve video gibi verilerde dosya boyları çok büyüktür. Öte yandan, seste ve görüntüdeki küçük bozuklukları insan beyni fark edemediği için, kasıtlı olarak periyodik bozukluklar şeklinde dosyanın içine başka bir dosya saklanabilir.


### Örnek.
Resimlerde, 24 bitlik bir kanallama kullanılır. Bu kanallar kırmızı, yeşil ve mavidir ve her bir kanal 8 bitlik bir değere sahip olabilir. 8 bit 256 ayrı değer saklayabilir ve örneğin 12 sayısı 00001100 olarak 240 sayısı ise 11110000 olarak kodlanacaktır.
Öte yandan, bir insan her renkteki 8 bitin son iki (hatta üç) bitindeki değişiklikleri göremeyecektir, zira bu değişiklik 3 (veya son üç bit için 7) ton değişikliğe eşdeğerdir (oysaki toplamda 255 ton var). Bu durumda, son üç bit asıl rengin detayları yerine başka bir bilgi saklamak için kullanılabilir: hesaplayacak olursak görüyoruz ki günümüzde cep telefonlarının çektiği (dolayısıyla sıkça paylaşılan) 1600 * 1200 çözünürlükteki bir resmin içine bile 2 Megabayta kadar veri saklanabilir.
Örneğin, soldaki resmi gelişmiş bir fotoğraf veya veri editörüne verin. Editöre, resmin her baytına 3 sayısı ile "Logical AND" işlemi yapmasını söyleyin. Ortaya simsiyah bir resim çıkacak.
Şimdi işin zevkli kısmı: o simsiyah (gibi görünen) resmi bir resim editörü ile açın ve resmin parlaklığını 85 katına çıkartın. Göreceksiniz ki, ortaya sağdaki kedi çıkacak.


### Resim içine yazı gizlemek.
Günümüzde birden fazla veri gizleme metodu bulunmaktadır. Bu yöntemler arasında en iyi en kötü ayrımı yapamayız, her birinin diğerlerine göre kısıtlamaları ya da üstünlükleri bulunmaktadır. Bu projede kullanılacak olan yönteme geçmeden önce diğer yöntemleri inceleyelim.
Yöntemlerin en kolayı gizlenecek olan veriyi resim dosyasının “açıklama” alanında gizlemektir. Bu ideal bir yöntem değil çünkü “açıklama” alanının bir sınırı var (255 byte kadar). Ayrıca bu yöntemde değişik resim dosyaları için değişik algoritmalar kurmanız gerekecektir.
Bir başka yöntem ise resim dosyasında renkler için ayrılan ama kullanılmayan alanların veri gizleme için kullanılmasıdır. Bu yöntem de bazı veri çözme araçları ile kolayca bulunabilir, fark edilebilir.
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. 3- Her pikseldeki renk temel 3 rengin karışımından elde edilir. (Kırmızı, Yeşik, Mavi) 4- Her pikselde bu 3 renkin 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 az gibi görünse de 800 x 600 ebatında 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