Görsele gizli metin nasıl gizlenir (steganografi)
Steganografi, bir mesajı başka bir dosyanın içine öyle saklamaktır ki mesajın orada olduğu bile belli olmaz. En yaygın hali bir görselin pikselleri içine metin gizlemektir: görsele bakan biri sıradan bir fotoğraf görür, oysa içinde okunabilir bir yazı taşır. Bu rehber, bir görsele gizli metni nasıl gömeceğinizi ve geri alacağınızı gösterir; tamamı ücretsiz ve tamamen tarayıcıda çalışır.
Nasıl çalışır
Bir görseldeki her piksel üç sayıdan oluşur: kırmızı, yeşil ve mavi kanalın değeri. Her biri 0 ile 255 arasındadır. Bu bir sayıyı 8 bitlik ikili olarak yazmanıza karşılık gelir. En sağdaki bit, yani “en önemsiz bit” (LSB, least significant bit), sayının yalnızca 1 birim değişmesini sağlar. Kırmızı değeri 200 (ikili 11001000) yerine 201 (11001001) olduğunda renk gözle ayırt edilemeyecek kadar az kayar.
İşte hilenin tamamı burada. Gizlemek istediğiniz metnin baytlarını alıp bit bit bu en önemsiz bitlerin üzerine yazarsınız. Görselin genel görünümü değişmez çünkü her piksel en fazla 1 birim oynar, ama o bitleri geri okuyan bir program mesajı yeniden kurar.
Somut bir örnek: “H” harfinin sayısal karşılığı 72’dir, ikili olarak 01001000. Bu 8 bitin her biri ardışık bir pikselin kırmızı kanalının en önemsiz bitine yazılır. İlk piksel 0 taşır, ikincisi 1, sonra 0, 0, 1, 0, 0, 0. Sekiz piksel bir harf eder. Çözücü aynı pikselleri sırayla okuyup 01001000’i toplar ve “H” harfini geri verir. Mesajın tamamı bu şekilde, karakter karakter piksellere serpiştirilir.
Ne kadar gizleyebilirsiniz
Kapasite basit bir çarpımdır: kullandığınız her piksel, seçtiğiniz her kanal başına 1 bit taşır. 8 bit 1 bayt eder, yani kabaca 1 karakter. Yalnızca kırmızı kanalı kullanırsanız piksel başına 1 bit alırsınız; kırmızı, yeşil ve maviyi birlikte kullanırsanız piksel başına 3 bit, yani kapasite kabaca üçe katlanır.
| Görsel boyutu | Kırmızı (1 kanal) | RGB (3 kanal) |
|---|---|---|
| 100x100 px | ≈ 1,2 KB | ≈ 3,6 KB |
| 1280x720 px | ≈ 115 KB | ≈ 345 KB |
| 1920x1080 px | ≈ 259 KB | ≈ 778 KB |
Kodlayıcımız hangi kanalları kullanacağınızı seçmenize izin verir: Kırmızı (varsayılan, en göze batmayanı), RGB (yaklaşık üç kat kapasite) veya RGBA (alfa kanalını da katarak yaklaşık dört kat). Kısa bir mesaj için Kırmızı fazlasıyla yeter ve görseli en az bozan seçenektir; uzun bir metin sığdırmanız gerekiyorsa RGB’ye geçin.
Bir mesaj gizle
Aşağıdaki kodlayıcıya bir görsel yükleyin, mesajınızı yazın ve indirin. Her şey sizin tarayıcınızda olur, görsel hiçbir yere yüklenmez.
Adımlar şöyle: bir görsel yükleyin, gizlemek istediğiniz mesajı yazın, daha fazla alana ihtiyacınız varsa kanal olarak RGB seçin, isterseniz bir parola belirleyin ve Kodla ile İndir’e tıklayın. Çıktı her zaman PNG’dir. Bunun sebebi PNG’nin kayıpsız olmasıdır: kaydettiği piksel değerleri birebir korunur. JPEG ise kayıplı bir biçimdir; dosyayı küçültmek için piksel değerlerini komşularına göre yeniden hesaplar ve tam da mesajı taşıyan en önemsiz bitleri yok eder. Bu yüzden çıktı asla JPEG olamaz.
Bir mesajı çöz
Elinizde içine mesaj gizlenmiş bir PNG varsa, aşağıdaki çözücüye bırakın ve gizli metni okuyun.
Adımlar basit: PNG dosyasını çözücüye bırakın, gizli metin ekranda belirsin. Görsel parola korumalıysa parolayı yazın, aksi halde çözücü metni doğrudan gösterir. Çözücü yalnızca bizim kodlayıcımızın ürettiği biçimi değil, yaygın LSB varyasyonlarının çoğunu otomatik algılar: farklı kanal sıralamaları, uzunluk öneki veya null sonlandırma, farklı bit sıraları. Yani başka bir araçla gizlenmiş bir mesaj da çoğu zaman çıkar.
Parola ekle (şifreleme)
Kodlarken bir parola belirlerseniz, mesaj piksellere yazılmadan önce AES-256-GCM ile şifrelenir. Şifreleme anahtarı parolanızdan doğrudan alınmaz; PBKDF2 ile çok sayıda tekrarla türetilir, bu da kaba kuvvetle parola denemeyi çok yavaşlatır. Sonuçta pikseller içindeki bitler, parola olmadan bakan biri için rastgele gürültüden farksızdır. Yanlış parola girildiğinde de hiçbir şey açığa çıkmaz: GCM’in kimlik doğrulama etiketi çözmenin başarısız olduğunu anlar ve düz metin üretmez.
Steganografi ile şifrelemenin işi farklıdır. Steganografi bir mesajın var olduğunu gizler. Şifreleme, mesaj bulunsa bile okunamaz kılar. İkisini birlikte kullandığınızda hem mesajın varlığı görünmez olur hem de bir şekilde bitler ele geçse bile içerik açığa çıkmaz. Birlikte tek başlarına olduklarından çok daha güçlüdürler.
Sınırlar ve sık yapılan hatalar
Dürüst konuşmak gerekirse bu yöntemin katı bir koşulu var: yalnızca kayıpsız PNG üzerinde çalışır. Kodlanmış görseli JPEG olarak yeniden kaydederseniz ya da ekran görüntüsünü alıp öyle paylaşırsanız pikseller yeniden hesaplanır ve mesaj yok olur. Aynı şekilde bir görsel düzenleyicide açıp yeniden dışa aktarmak da çoğu zaman bitleri bozar.
En sık düşülen tuzak paylaşım kanalıdır. WhatsApp, Instagram, Telegram’ın “fotoğraf” modu ve pek çok sosyal ağ, yüklediğiniz görseli otomatik olarak yeniden sıkıştırır. Bu sıkıştırma gizli bitleri siler ve karşı taraf boş bir görsel alır. Bu yüzden kodlanmış PNG’yi görsel olarak değil, dosya olarak (belge eki gibi) veya görseli yeniden sıkıştırmayan bir kanalla paylaşın.
Son bir nokta: bu bir LSB steganografisidir, evrensel bir dedektör değil. Başka bir yöntemle, örneğin JPEG’in DCT frekans alanına gizlenmiş bir mesajı bu çözücü bulmaz. Her steganografi tekniğinin kendi okuma yöntemi vardır.
Sık sorulan sorular
Gizli mi, görselim bir yere yükleniyor mu? Hayır. Kodlama ve çözme işlemlerinin tamamı tarayıcınızda, Canvas API üzerinde yerel olarak çalışır. Görseliniz de mesajınız da hiçbir sunucuya gönderilmez, cihazınızdan çıkmaz.
Herhangi bir görsel kullanabilir miyim? Evet, herhangi bir fotoğraf ya da resim işe yarar. Bol renkli ve detaylı görseller değişiklikleri saklamakta biraz daha iyidir; düz tek renkli geniş alanlarda çok yakından bakıldığında ince farklar teorik olarak seçilebilir, ama pratikte normal bakışta görünmez. Sadece çıktının PNG olarak kaydedildiğinden emin olun.
Kodlanmış görsel gözle farklı görünür mü? Hayır. Her kanal en fazla 1 birim değişir, bu da 256 tonluk bir ölçekte gözle ayırt edilemez. Orijinal ile kodlanmış görseli yan yana koyarsanız bile fark göremezsiniz.
Parola olmadan biri mesajı okuyabilir mi? Parola kullanmadıysanız, LSB steganografisini bilen ve doğru araca sahip biri metni okuyabilir; steganografi tek başına gizler ama şifrelemez. Parola belirlediyseniz mesaj AES-256-GCM ile şifrelidir ve doğru parola olmadan içerik açığa çıkmaz; yanlış parola da hiçbir şey vermez.
Gizli bir mesaj gömmek için Steganografi Kodlayıcı aracını, gizlenmiş bir metni geri okumak için Steganografi Çözücü aracını kullanın.