Modern kriptografi yüksek matematikle iç içe geçmeden önce, insanlar klasik şifreler kullanırdı: kâğıt-kalemle uygulanabilen, zekice tasarlanmış yöntemler. Diplomatların mektuplarını, askerlerin emirlerini, hatta bazen aşk mektuplarını bu şifrelerle koruyorlardı.
Bugün bu şifrelerin çoğu kırılmış durumda — ama hâlâ öğretici. Modern kriptografinin neden bu şekilde tasarlandığını anlamanın en iyi yolu, eski şifrelerin nasıl ve neden çöktüğünü anlamak.
Bu yazıda üç klasik şifre üzerinde duracağız: Vigenère şifresi, onu kıran Kasiski analizi ve Running Key şifresi.
Önce terimler
Üç kelime sık sık birbirinin yerine kullanılır, ama farklı anlamları vardır:
- Kriptografi (Cryptography) — bilgiyi gizli tutmak için kullanılan yöntemlerin tasarımı.
- Kriptanaliz (Cryptanalysis) — bu yöntemleri kırma çalışması.
- Kriptoloji (Cryptology) — her ikisini kapsayan üst başlık.
Yazı boyunca kullanacağımız diğer terimler:
- Düz metin (plaintext) — orijinal mesaj.
- Şifreli metin (ciphertext) — şifreleme sonrası ortaya çıkan mesaj.
- Şifre (cipher) — biriyle diğerini değiştirme prosedürü.
- Anahtar (key) — şifreyi kişiselleştiren parametre. Aynı düz metin ve aynı şifre, farklı anahtarlarla farklı şifreli metinler üretir.
Sahneyi kuralım: Caesar şifresi
Caesar şifresi her harfi sabit bir miktar kaydırır. Kaydırma 3 ise MERHABA → PHUKDED olur. Anahtar bu kaydırma değeridir — ve faydalı kaydırma sayısı sadece 25.
Bu şifreyi kırmak için 25 olasılığı denemeniz yeterli. Bir saniye sürmez.
Caesar şifresinin asıl zaafı şu: her düz metin harfi her zaman aynı şifreli harfe karşılık gelir. Frekans analizi — her harfin ne sıklıkta geçtiğini sayma — bu şifreyi açmak için yeterlidir. Türkçede en sık görülen harf A'dır; şifreli metinde en sık görünen harf büyük olasılıkla şifrelenmiş A'dır.
Vigenère şifresi
Vigenère'nin numarası birçok kaydırmayı sırayla kullanmak. Hangi kaydırmanın kullanılacağını bir anahtar kelime belirler. Buna polialfabetik şifre denir: aynı düz metin harfi, bulunduğu konuma göre farklı şifreli harflere dönüşebilir.
Nasıl çalışır?
Düz metnin altına anahtar kelimeyi tekrarlayarak yazarsınız, sonra harfleri pozisyon-pozisyon toplarsınız (A=0, B=1, …, Z=25, mod 26):
1Düz metin: SALDIRIATTAN
2Anahtar: LIMONLIMONLI (tekrar edilir)
3Şifreli metin: DIXRWCQMHGLV
İlk harf: S + L = 18 + 11 = 29 mod 26 = 3 → D. İkinci harf: A + I = 0 + 8 = 8 → I. Ve böyle devam eder.
Şifre çözme aynı işlemi tersine yapar: şifreli metin harfinden anahtar harfini çıkarırsınız.
Neden güçlü?
Aynı düz metin harfi pozisyona göre farklı şifreli harflere dönüştüğü için, basit frekans analizi başarısız olur — şifreli metnin harf dağılımı üniform dağılıma çok daha yakındır.
Yaklaşık 300 yıl boyunca (16. yüzyıldan 19. yüzyıla) Vigenère, le chiffre indéchiffrable — "kırılamaz şifre" — olarak kabul edildi.
Java ile basit bir implementasyon
src/main/java/cipher/Vigenere.java 1public class Vigenere {
2
3 public static String encrypt(String plaintext, String key) {
4 StringBuilder out = new StringBuilder();
5 String upperKey = key.toUpperCase();
6 int keyIdx = 0;
7
8 for (char ch : plaintext.toUpperCase().toCharArray()) {
9 if (Character.isLetter(ch)) {
10 int p = ch - 'A';
11 int k = upperKey.charAt(keyIdx % upperKey.length()) - 'A';
12 out.append((char) (((p + k) % 26) + 'A'));
13 keyIdx++;
14 } else {
15 out.append(ch);
16 }
17 }
18 return out.toString();
19 }
20
21 public static String decrypt(String ciphertext, String key) {
22 StringBuilder out = new StringBuilder();
23 String upperKey = key.toUpperCase();
24 int keyIdx = 0;
25
26 for (char ch : ciphertext.toUpperCase().toCharArray()) {
27 if (Character.isLetter(ch)) {
28 int c = ch - 'A';
29 int k = upperKey.charAt(keyIdx % upperKey.length()) - 'A';
30 out.append((char) (((c - k + 26) % 26) + 'A'));
31 keyIdx++;
32 } else {
33 out.append(ch);
34 }
35 }
36 return out.toString();
37 }
38}
Kasiski analizi: Vigenère'yi kırmak
1863'te Prusyalı subay Friedrich Kasiski, Vigenère'yi açıkça kıran bir yöntem yayımladı. Fikir zarif.
Adım 1: Tekrar eden dizileri bul
Düz metinde bir harf dizisi (örneğin "BIR") iki farklı yerde aynı anahtar konumunun altına denk gelirse, her iki konumda da aynı şifreli diziye dönüşür. Tekrar eden düz metin + aynı anahtar hizalaması = tekrar eden şifreli metin.
Adım 2: Mesafeleri ölç
Şifreli metindeki iki tekrar arasındaki mesafe — neredeyse her zaman — anahtar uzunluğunun bir katıdır. Anahtar 6 harfse, mesafeler 6'nın katlarıdır.
Adım 3: EBOB'unu al
Tekrar eden dizilerin mesafeleri 12, 18 ve 30 ise, anahtar uzunluğu büyük olasılıkla bunların EBOB'udur: EBOB(12, 18, 30) = 6.
Adım 4: Her sütunu frekans analizine sok
Anahtar uzunluğunu öğrendikten sonra şifreli metni L sütuna ayırırsınız (L = anahtar uzunluğu). Her sütun tek bir Caesar kaydırmasıyla şifrelenmiştir — ve Caesar'ı kırmak çok kolay.
Her sütunu bağımsız olarak çözersiniz, kaydırmaları birleştirirsiniz, ve anahtar kelime ortaya çıkar.
Küçük bir örnek
Şifreli metinde RPB üçlüsünün 10 ve 40 konumlarında, sonra da 70 ve 130 konumlarında geçtiğini varsayalım.
- Mesafe 1:
40 − 10 = 30 - Mesafe 2:
130 − 70 = 60
Olası anahtar uzunluğu her ikisini de bölmeli: EBOB(30, 60) = 30. Anahtar uzunluğu büyük olasılıkla 30'un bölenlerinden biridir: 2, 3, 5, 6, 10, 15 veya 30. Her aday için sütun-sütun frekans analizi yaparsınız; anlamlı bir metin üreten aday doğrudur.
Running Key şifresi
Vigenère'nin zaafı, anahtarın tekrar etmesi. Peki anahtar mesaj kadar uzun olsa ve tekrar etmese?
İşte Running Key şifresi tam olarak bu. Anahtar, bir kitaptan (veya başka bir uzun metinden) alınan, mesaj uzunluğundan kısa olmayan bir parça. Şifreleme yine Vigenère'deki gibi harf-harf toplama; ama anahtar sarmalanmıyor.
1Düz metin: SALDIRIATTAN
2Anahtar: (Suç ve Ceza, sayfa 47, satır 3, karakter 12'den itibaren: "BIRINSANRUHUNUN…")
3Şifreli metin: ...
Gönderici ve alıcı aynı kitaba sahipse ve başlangıç noktasını biliyorsa (örneğin "sayfa X, satır Y, karakter Z" şeklinde paylaşılır), istedikleri kadar uzun mesajı, tekrar etmeyen bir anahtarla şifreleyebilirler.
Bu ne sağlar?
- Kasiski tarzı analizler işe yaramaz, çünkü tekrar eden bir anahtar yok.
- Doğal dilden alınan anahtarlar için kısa mesajlar hâlâ saldırılabilirdir — hem anahtar hem düz metin doğal dil olduğundan, ikisinin birlikteliğinden faydalanılabilir.
- Eğer anahtar gerçekten rastgele olsaydı ve yalnızca bir kez kullanılsaydı, bu one-time pad'e dönüşür: bilgi teorisi açısından kırılamaz.
Klasik şifrelerin öğrettiği
2024'te Vigenère kullanmayacaksınız — ama bu şifrelerin öğrettiği dersler, modern kriptografinin tam olarak üzerine inşa edildiği derslerdir:
- Tekrar düşmandır. Modern blok şifreleri, şifreli metni rastgele görünmesi için her türlü matematiksel hileyi kullanır.
- İstatistiksel yapı sızdırır. Harf frekansları, sık görülen ikililer, beklenen kelime uzunlukları — hepsi saldırı yüzeyidir.
- Anahtar tekrarı her şeyi kırar. Bu, one-time pad için de doğrudur, RC4 gibi modern stream şifreleri için de. (WEP'in çöküşü tam olarak bu yüzdendir.)
- Bir sır, ancak anahtar yönetimi kadar güvenlidir. Running Key şifresi, "anahtar başlangıcı"nı güvenli paylaşabildiğiniz sürece kırılamaz. Bu, modern açık anahtar kriptografisinin çözmeye çalıştığı problemin minyatür hâli.
Sonuç
Kriptografi tarihi bir silahlanma yarışı: zekice bir şifre icat edilir, savunanlar güvende hisseder, saldıranlar yapısal bir zafiyet bulur, savunanlar daha iyi bir şifre tasarlar. Vigenère üç yüzyıl ayakta kaldı; Kasiski onu kırdı; Running Key şifresi karşılık verdi; modern kriptografi sorunu saf matematiğin içine taşıdı.
Klasik şifreler artık tek başına güvenli değil, ama modern olanın neden bu şekilde tasarlandığını anlamak için en iyi oyun bahçesi onlar.
