Bölüm 9: Simetrik Şifreleme
Ağlar'a “Sen”i Katmak kitabının bir bölümü: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine inip karşı taraftan geri dönen uzun bir teknik yolculuk.
Kısım 2: Bağlantı Kuruluyor (Bölüm 6-12)
Tüm bölümler
- Giriş
- Adres Çubuğundan İsteğe
- Paket Anahtarlamalı Yol
- İsimden Adrese
- DNS Kayıtları
- Önbellek, Tazelik ve Güven
- Port Numarası ve Soket
- Bağlantısız Taşıma: UDP
- Üç Adımlı El Sıkışma
- Simetrik Şifreleme
- Açık Anahtarlı Kriptografi
- TLS El Sıkışması
- Sertifika Zinciri
- HTTP Mesajının Anatomisi
- Durum, Çerez ve Oturum
- HTTP/2'den HTTP/3'e
- İçerik Dağıtım Ağları
- Diğer Uygulama Protokolleri
- Katmanlı Mimari
- Hizmet ve Protokol
- Encapsulation ve Başlıklar
- Paket Yakalama ve Çözümleme
- Ağ Interface Kartı
- Fiziksel Adresleme
- Hata Sezme ve CRC
- Adres Çözümleme: ARP
- Ortam Erişimi: CSMA/CD
- Switch'ler
- Ağ Topolojileri
- Sanal Yerel Ağlar
- Kablosuz Erişim: 802.11
- Radyo Kanalı ve Kapasite
- Kablosuz Ağ Güvenliği
- Hücresel Ağlar
- Spektrum ve Kuşaklar
- Hareketlilik ve Aktarma
- Adres Kiralama: DHCP
- Adresin Anatomisi
- Adres Tükenmesi ve IPv6
- Router Mimarisi
- Kuyruk Yönetimi
- Cihaz Yapılandırma
- Routing Protokolleri
- Kontrol Düzlemi ve SDN
- Ağ İzleme ve Yönetimi
- Alanlar Arası Routing
- Adres Çevirisi
- Ara Kutular
- Tünelleme ve IPsec
- Firewall'lar
- Ağ Saldırıları
- Operatör ve Metro Ağları
- Bitten Sinyale
- Sembol Hızı ve Kanal Kapasitesi
- Multiplexing Teknikleri
- İletim Ortamları
- Bakır Kablo Sonlandırma
- Fiber Sonlandırma
- Fiber Optik İletim
- Bakır Erişim Ağı: DSL
- DSL'de Hız ve Mesafe
- Pasif Optik Ağlar
- Kablo Erişim Ağları
- Kablo Modem ve CMTS
- Denizaltı Kabloları
- Veri Merkezi Ağları
- Encapsulation Çözme
- Güvenilir Aktarım
- Tıkanıklık Denetimi
- Trafik Çözümleme
- Gecikme Bütçesi
- Soket Programlama
- Eşten Eşe ve Protokol Tasarımı
- Uyarlanır Video Akışı
- Gerçek Zamanlı Ses ve Görüntü
- Kablosuz Sensör Ağlarının Mimarisi
- Sensör Ağlarında Ortam Erişimi
- Sensör Ağlarında Yönlendirme ve IP
- Zaman Eşitleme ve Konum Bulma
- Sensör Ağı Uygulamaları
- Mobil Kablosuz Sensör Ağları
- Son Söz
Bağlantı kuruldu ve imleç parolanın yanında bekliyor. Yazacağın şey aradaki onlarca cihazın önünden geçecek ve hepsi onu olduğu gibi okuyabilecek.
Okunamaz hâle getirmek varsayılan bir davranış değil, ayrı bir hazırlık gerektiriyor ve o hazırlığın ilk yarısını bu bölümde kuruyoruz.
Aradaki herkes ne görüyor?
Ağ güvenliği tek bir vaat gibi konuşuluyor. Aslında dört ayrı vaat var ve hiçbiri diğerinin yerine geçmiyor. Gizlilik, içeriği yalnızca gönderenin ve hedeflenen alıcının anlayabilmesi. Kimlik doğrulama, iki tarafın da karşısındakinin kim olduğunu teyit edebilmesi. Mesaj bütünlüğü, mesajın yolda ya da sonrasında fark edilmeden değiştirilememesi. Erişilebilirlik ise hizmetin kullanıcılara açık kalması.
Bu bölümde yalnızca birincisini çözüyoruz. Şifrelemenin bütünlük vermediğini baştan bilmen gerekiyor: okunamaz bir mesaj, değiştirilemez bir mesaj anlamına gelmiyor. Bütünlük ayrı bir mekanizma istiyor.
Aradaki saldırganın elinde ne olduğunu beş başlıkta toplayabilirsin. Mesajları yakalayıp dinleyebiliyor. Kurulu bir bağlantıya kendi mesajını sokuşturabiliyor. Kaynak adresini, hatta paketteki herhangi bir alanı sahteleyebiliyor. Süregelen bir bağlantıda taraflardan birini çıkarıp yerine geçebiliyor. Kaynakları boğarak hizmeti tümden engelleyebiliyor.
Bunların ilki özel bir yetenek bile istemiyor. Karışık (promiscuous) moda alınmış bir ağ interface’i, yanından geçen bütün paketleri okuyup kaydediyor; parolalar dahil. Herkesin aynı ortamı paylaştığı yerlerde bu doğrudan çalışıyor: bir kablodan gelen sinyali bütün kablolara tekrarlayan hub’lı eski Ethernet’te ve şifresiz kablosuz ağda. Bugün kabloların birleştiği yerde bir switch duruyor ve frame’i yalnızca alıcısının kablosuna iletiyor; bunu nasıl öğrendiğini 27. bölümde göreceğiz. Switch’li bir ağda kart çoğu zaman yalnızca kendisine ve herkese gönderilenleri görüyor; saldırganın önce trafiği kendine çekmesi gerekiyor.
Sahtecilik de ucuz. Paketin üstündeki kaynak adresi bir kanıt taşımıyor; yalnızca bir iddia. O alanı gönderenin kendisi dolduruyor ve doğru doldurduğunu kimse denetlemiyor.
SYN, SYN-ACK ve ACK ile kurulan bağlantı bir kanal açıyor, ama o kanal hiçbir şey saklamıyor. Sade bir TCP ya da UDP soketinde hiç şifreleme yok: sokete yazdığın düz metin parola, internette düz metin olarak yol alıyor. Bunun en görünür karşılığı adres çubuğunda duruyor. HTTP varsayılan olarak 80. portu kullanıyor, HTTPS ise 443’ü; iyi bilinen portlar bir gelenekti. HTTPS ayrı bir taşıma değil; HTTP ile TLS’in birleşimi. TLS’i bu bölümde ve sonraki üç bölümde parça parça kuracağız.
Şifrelemenin üç kelimesi, saldırganın üç modeli
Kriptografinin sözlüğü üç terimden ibaret. Açık metin (plaintext) gönderilecek şey, şifreli metin (ciphertext) telde giden şey, anahtar ise ikisi arasındaki dönüşümü belirleyen sayı. Şifreleme algoritması açık metni anahtarla şifreli metne çeviriyor, çözme algoritması tersini yapıyor.
Bunu bir kasayla düşünmek işi kolaylaştırıyor. Kasanın modeli herkesçe biliniyor ve mağazadan satın alınabiliyor; onu güvenli yapan şey kombinasyonun sende kalması. Şifreleme de aynı yere yaslanıyor: algoritma yayımlanmış durumda, gizli tutulan tek şey anahtar. Kasanın mekanizması algoritmaya, kombinasyon anahtara, içine koyduğun belge açık metne, kilitli kasa ise şifreli metne karşılık geliyor. Benzetmenin çöktüğü yer kombinasyonun yolculuğu: kasayı arkadaşına yollarken kombinasyonu telefonda söyleyebilirsin, ağda ise o telefon hattı da saldırganın dinlediği hat.
Bir şemayı kırmanın üç ayrı zemini var. En zayıfı yalnızca şifreli metin saldırısı: saldırganın elinde sadece ciphertext var ve iki yolu kalıyor: anahtar uzayını baştan sona taramak ya da metnin istatistiğini çözümlemek. Bilinen açık metin saldırısında iş kolaylaşıyor, çünkü saldırgan bazı şifreli metinlerin açık karşılığını da biliyor. Seçilmiş açık metin saldırısında ise istediği metnin şifrelisini elde edebiliyor. Bu en güçlü model ve iyi bir şema ona karşı da dayanmak zorunda.
Bu bölümün konusu olan aile simetrik anahtarlı şifreleme ve tanımı kısa: iki taraf aynı anahtarı paylaşıyor. Aynı anahtar hem kilitliyor hem açıyor.
AES bir mesajı değil, bir bloğu şifreliyor
Bugün kullanılan simetrik şifrenin adı AES ve tanımını bilmek bir yanlış anlamayı baştan kesiyor: AES bir mesajı şifrelemiyor, her seferinde 128 bitlik tek bir bloğu şifreliyor. 16 bayt girer, 16 bayt çıkar. Anahtar 128, 192 ya da 256 bit olabiliyor ve uzunluk tek bir şeyi değiştiriyor: kaç tur döneceğini. Sırasıyla 10, 12 ve 14 tur.
Her tur aynı dört adımı tekrarlıyor: bayt değiştirme, satır kaydırma, sütun karıştırma ve tur anahtarını ekleme. Üçü karıştırıyor, dördüncüsü anahtarı işin içine sokuyor. Fikir Shannon’ın koyduğu iki ölçüte dayanıyor. Yayma (diffusion), açık metnin tek bir bitindeki değişikliğin çıktının her bitine dağılması; karıştırma (confusion) ise anahtar ile şifreli metin arasındaki ilişkinin istatistiksel olarak izlenemez olması. Tek bir tur zayıf; on turdan sonra girdiyle çıktı arasındaki bağı izlemek pratikte imkânsız.
Ama senin isteğin 16 bayt değil. Uzun bir mesajı bloklara bölüp her birini ayrı ayrı şifrelemek gerekiyor ve bunun nasıl yapılacağı ayrı bir karar. Kararın adı çalışma kipi ve şifrenin kendisi kadar önemli.
Aşağıdaki tabloda geçen XOR, iki biti karşılaştıran en basit işlem: ikisi farklıysa 1, aynıysa 0 veriyor. Aynı değerle iki kez uygulandığında ilk hâline dönmesi, onu şifrelemenin vazgeçilmez aleti yapıyor.
| kip | nasıl çalışıyor | sorunu / gücü |
|---|---|---|
ECB | her blok bağımsız şifrelenir | aynı açık blok hep aynı şifreli bloğu verir; desen sızar |
CBC | her blok, önceki şifreli blokla XOR’lanıp şifrelenir | deseni kırar; sıralı çalışır, paralelleşmez |
CTR | bir sayaç şifrelenip açık metinle XOR’lanır | blok şifreyi akış şifresine çevirir; paralelleşir |
GCM | CTR + bütünlük etiketi | hem gizler hem kurcalanmayı yakalar |
ECB’nin kusuru soyut değil, gözle görülür. Aşağıdaki üç kare aynı resmin piksel baytları: solda özgün hâli, ortada AES-128 ile ECB kipinde şifrelenip yeniden resim olarak okunmuş hâli, sağda aynı işlemin CBC kipindeki sonucu.

Ortadaki karede renkler gitti ama kilit yerinde duruyor. Aynı renkteki bölgede aynı 16 baytlık bloklar tekrar ediyor ve ECB her birini hep aynı şifreli bloğa çeviriyor; zemin, halka ve gövde birer desene dönüşüyor ve resmin hatları şifreli çıktıda okunmaya devam ediyor. Şifreleme yapıldı ama içerik hâlâ tanınıyor. CBC her bloğu şifrelemeden önce bir öncekinin şifreli hâliyle karıştırdığı için tekrar eden şifreli blok kalmıyor ve çıktı düz gürültüye dönüyor.
Deney sıkıştırılmamış piksellerle yapılıyor. Sıkıştırılmış bir PNG ya da JPEG’de tekrar eden bayt dizileri zaten ayıklandığı için sızacak desen de çok azalır. Gerçek mesajlar ise tekrarla dolu: aynı başlıklar, aynı alan adları, aynı dolgu. Bu yüzden ECB mesaj şifrelemek için hiçbir güncel protokolde yer almıyor.
CBC ile CTR’nin ortak şartı ise bir sayı: her mesajda yeni bir başlangıç değeri. CBC’de adı başlangıç vektörü (IV), CTR’de sayacın başlangıcı (nonce). İkisi de gizli olmak zorunda değil, ama tekrarlanmamak zorunda. CTR kipinde aynı sayacı iki farklı mesaj için kullanırsan iki şifreli metnin XOR’u iki açık metnin XOR’unu verir; anahtar hiç kırılmadan içerik açığa çıkar. Kriptografide en sık yapılan uygulama hatalarından biri budur.
Son satır bugünün varsayılanı ve bir eksiği kapatıyor: şifreleme tek başına kurcalamayı engellemiyor. CTR kipinde şifreli metindeki bir biti çeviren saldırgan, açık metindeki karşılık gelen biti de çevirmiş oluyor; üstelik anahtarı hiç bilmeden. GCM bunun üstüne bir doğrulama etiketi ekliyor ve alıcı etiketi tutmayan mesajı hiç çözmüyor. Aynı anda gizlilik ve bütünlük veren bu aileye AEAD deniyor. TLS 1.3’ün eski şifre takımlarını tümden atmasının sebebi de bu: artık yalnızca AEAD kabul ediliyor.
Tanımın açıkta bıraktığı şeyin de bir adı var: anahtar dağıtımı. İki taraf o anahtar değerinde nasıl anlaşacak?
Ev ağında bu sorunun cevabı elden veriliyor. WPA2 ve WPA3’ün kişisel kipinde parolayı cihaza sen yazıyorsun; değer ağdan hiç geçmiyor. Katılım sırasında havada ne parola ne de oturum anahtarı dolaşıyor: iki taraf taze AES anahtarını, paroladan ve havada açıkça takas edilen rastgele sayılardan kendi başına türetiyor. O türetmenin adımlarını 32. bölümde açacağım. Uzaktaki bir sunucu için cevabı 10. bölüme bırakıyorum; önce anahtarın kendisini tanımak gerekiyor.
Anahtar kısaysa akıl gerekmiyor
Standartlaşan ilk simetrik şema DES oldu: 1977’de FIPS 46 olarak yayımlanan bir ABD federal standardı. NIST onu son kez 1999’da yeniden onayladı ve 2005’te geri çekti. 56 bitlik bir anahtar kullanıyor ve girdiyi 64 bitlik açık metin blokları hâlinde alıyor.
DES de bir blok şifresi ve o da çıplak kullanılmıyor; yukarıdaki tablodan tanıdığın CBC kipi ilk kez onun etrafına sarıldı.
1999’da RSA şirketinin açtığı bir yarışmada (DES Challenge III), 56 bitlik anahtarla şifrelenmiş bir cümle kaba kuvvetle 22 saatte çözüldü. Bilinen iyi bir analitik saldırı yoktu. Şemayı düşüren şey zekâ değil, anahtarın kısalığıydı.

Ayakta tutma çabası 3DES oldu: üç farklı anahtarla üç kez şifreleme. Kalıcı cevap Kasım 2001’de geldi. NIST yeni standardı kapalı kapılar ardında yazmadı; 1997’de dünyaya açık bir yarışma düzenledi ve üç yıllık elemenin sonunda Belçikalı iki kriptografın Rijndael adlı tasarımını seçti. AES adını alan bu şifre DES’in yerini aldı ve bugün hâlâ orada. Blok boyu iki katına, anahtar ise en az 128 bite çıktı; bir HTTP isteğinin ilk satırı bile birden çok bloğa yayılıyor.
Ölçek farkı düz metinde kayboluyor, o yüzden yan yana koymak gerekiyor:
| DES | AES | |
|---|---|---|
| Standart | 1977 | Kasım 2001 |
| Anahtar | 56 bit | 128, 192 ya da 256 bit |
| Blok | 64 bit | 128 bit (16 bayt) |
| Anahtar uzayı | 2^56, yaklaşık 72 katrilyon | 2^128 |
| Tüm anahtarları denemek | 1 saniye varsayarsak | 149 trilyon yıl |
Alt satır bu tablonun en sert yeri. Aynı kaba kuvvet donanımı DES anahtar uzayını 1 saniyede tarıyorsa, AES’in en kısa anahtarında 149 trilyon yıl harcıyor. Arada 2^72 kat var.
Aynı anahtarla kaç kayıt gönderebilirsin?
Anahtarın uzunluğu tek başına yetmiyor. Aynı anahtarın ne kadar iş görebileceğini üç kural sınırlıyor.
İlk kural anahtarı işlere bölmek. Aynı anahtarı birden çok kriptografik işlev için kullanmak kötü kabul ediliyor, o yüzden şifreleme ile mesaj kimlik doğrulama kodu (MAC) TLS 1.2 ve öncesinde ayrı anahtarlar kullanıyordu: dört anahtar türetiliyordu, iki yönün her biri için birer şifreleme ve birer MAC anahtarı. TLS 1.3’te ayrı MAC anahtarı yok: şifreleme ile doğrulama tek AEAD algoritmasında birleştiği için bölme başka eksende yapılıyor, yön başına ve evre başına ayrı anahtar.
İkinci kural aynı anahtar altında aynı başlangıç değerini iki kez kullanmamak. Bunun aracı nonce, yani ömür boyu yalnızca bir kez kullanılan sayı. Yukarıda CTR kipinde tekrarlanan sayacın içeriği nasıl açığa çıkardığını gördün; nonce o kazayı imkânsız kılıyor. Nonce kaydın sıra numarasına bağlandığında bir kazanç daha doğuyor: kaydedilip sonra yeniden gönderilen bir kayıt, alıcının beklediği numarayla eşleşmediği için doğrulamadan geçemiyor. Tekrar oynatma (replay) saldırısını kıran şey bu.
TLS 1.3’te kayıt koruması AEAD ile yapılıyor ve AEAD dört girdi alıyor: tek bir anahtar, bir nonce, açık metin ve kimlik doğrulamaya dahil edilecek ek veri. TLS’te ek veri kaydın başlığı. Nonce ise elle seçilmiyor. Kaydın 64 bitlik sıra numarası ağ bayt sırasında kodlanıyor, sola sıfırla dolduruluyor ve o yönün statik IV’siyle XOR’lanıyor. Sıra numarası okuma ve yazma için ayrı tutuluyor, her kayıttan sonra bir artıyor, anahtar değişiminde sıfırlanıyor. Bir trafik anahtarıyla gönderilen ilk kayıt 0 numarasını kullanmak zorunda. Böylece aynı anahtar altında iki kayıt asla aynı nonce’u görmüyor.
Üçüncü kural anahtarı zamanında bırakmak. AES-GCM ile aynı anahtar altında yaklaşık 24 milyon tam boy kayıt şifrelenebiliyor; sonrasında anahtarın tazelenmesi gerekiyor ve TLS 1.3 bunu bağlantıyı kesmeden yapabiliyor. Bir anahtarın ömrü saatle ölçülmüyor, kayıt sayacıyla ölçülüyor.
TLS’in gizlilik vaadi dürüst ve sınırını da söylüyor. Kanal kurulduktan sonra gönderilen veri yalnızca uçlara görünüyor, ama uzunluk gizlenmiyor. İsteğinin kaç bayt olduğu dışarıdan sayılabiliyor; bulanıklaştırmak isteyen kayıtlara dolgu ekliyor.
Bütün bunları kendi makinende görebilirsin. Bir terminalde sudo tcpdump -n -A -i any 'tcp port 80 or tcp port 443' çalıştır, başka bir terminalde aynı sayfayı iki kez iste: önce curl http://example.com/, sonra curl https://example.com/. İlk çıktıda istek satırı ekranda düz okunuyor. İkincisinde yalnızca kayıt başlıkları görünüyor, gerisi anahtarın altında. Dikkatli bakarsan şifreli çıktının başında yine de bir ad seçeceksin: example.com. O ad bağlantı kurulurken düz metin gidiyor; sebebini 11. bölümde göreceğiz.
Özet
- Güvenlik dört ayrı vaat: gizlilik, kimlik doğrulama, mesaj bütünlüğü ve erişilebilirlik. Şifreleme bunlardan yalnızca ilkini veriyor.
- Korumasızlık varsayılan: sade bir sokete yazılan parola telde düz metin gidiyor; paylaşılan bir ortamda onu okumak için karışık moda alınmış bir interface yetiyor.
- Şemayı düşüren şey çoğu zaman algoritma değil, anahtarın kısalığı: DES’i bitiren analitik bir buluş değildi, 56 bitlik uzayın taranabilir olmasıydı.
- Anahtarın bir kullanım bütçesi var: her kayıt nonce’unu sıra numarasından türetiyor ve aynı anahtarla şifrelenebilecek kayıt sayısının bir tavanı bulunuyor.
Şifrelemenin gücü artık elinde ve nereden geldiğini biliyorsun. Bu bölüm boyunca iki tarafın aynı anahtarı bildiğini varsaydım. Şifreleme var, ama anahtarı karşı tarafa nasıl ulaştıracaksın?
10. bölüme devam et: Açık Anahtarlı Kriptografi