Ana içeriğe geç

Bölüm 8:Simetrik Şifreleme

9 dakikalık okumaGüncelleme:

Ağlar'a “Sen”i Katmak yazısının parçası: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine kadar inen uzun bir teknik yolculuk.

Tüm bölümler
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. Önbellek, Tazelik ve Güven
  6. Port Numarası ve Soket
  7. Bağlantısız Taşıma: UDP
  8. Üç Adımlı El Sıkışma
  9. Simetrik Şifreleme
  10. Açık Anahtarlı Kriptografi
  11. TLS El Sıkışması
  12. Sertifika Zinciri
  13. HTTP Mesajının Anatomisi
  14. Durum, Çerez ve Oturum
  15. HTTP/2'den HTTP/3'e
  16. İçerik Dağıtım Ağları
  17. Diğer Uygulama Protokolleri
  18. Katmanlı Mimari
  19. Kapsülleme ve Başlıklar
  20. Paket Yakalama ve Çözümleme
  21. Ağ Arayüz Kartı
  22. Fiziksel Adresleme
  23. Hata Sezme ve CRC
  24. Adres Çözümleme: ARP
  25. Anahtarlama ve Ortam Erişimi
  26. Ağ Topolojileri
  27. Sanal Yerel Ağlar
  28. Kablosuz Erişim: 802.11
  29. Radyo Kanalı ve Kapasite
  30. Kablosuz Ağ Güvenliği
  31. Hücresel Ağlar
  32. Spektrum ve Kuşaklar
  33. Hareketlilik ve Aktarma
  34. Adres Kiralama: DHCP
  35. Adresin Anatomisi
  36. Adres Tükenmesi ve IPv6
  37. Yönlendirici Mimarisi
  38. Kuyruk Yönetimi
  39. Cihaz Yapılandırma
  40. Yönlendirme Protokolleri
  41. Kontrol Düzlemi ve SDN
  42. Ağ İzleme ve Yönetimi
  43. Alanlar Arası Yönlendirme
  44. Adres Çevirisi
  45. Ara Kutular
  46. Tünelleme ve IPsec
  47. Güvenlik Duvarları
  48. Operatör ve Metro Ağları
  49. Bitten Sinyale
  50. Çoklama Teknikleri
  51. İletim Ortamları
  52. Kablo Sonlandırma
  53. Fiber Optik İletim
  54. Bakır Erişim Ağı: DSL
  55. Pasif Optik Ağlar
  56. Kablo Erişim Ağları
  57. Denizaltı Kabloları
  58. Veri Merkezi Ağları
  59. Kapsülleme Çözme
  60. Güvenilir Aktarım
  61. Tıkanıklık Denetimi
  62. Trafik Çözümleme
  63. Gecikme Bütçesi
  64. 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 ve o mekanizmanın kendi anahtarı var.

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ğ arayüzü, yanından geçen bütün paketleri okuyup kaydediyor; parolalar dahil. Paylaşımlı Ethernet ve kablosuz gibi yayın ortamlarında bu doğrudan çalışıyor.

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.

Ş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. Haritalaması şöyle: kasanın mekanizması algoritma, kombinasyon anahtar, içine koyduğun belge açık metin, kilitli kasa ise şifreli metin. Benzetme şurada biter: 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ı tek cümle: 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, tam olarak 128 bitlik 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 — karıştırma, açık metnin her bitinin çıktının her bitini etkilemesi; yayma, anahtar ile şifreli metin arasındaki ilişkinin istatistiksel olarak izlenemez olması. Tek bir turda ikisi de zayıf; on turda 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.

Tablodaki 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.

kipnasıl çalışıyorsorunu / gücü
ECBher blok bağımsız şifreleniraynı açık blok hep aynı şifreli bloğu verir — desen sızar
CBCher blok, önceki şifreli blokla XOR’lanıp şifrelenirdeseni kırar; sıralı çalışır, paralelleşmez
CTRbir sayaç şifrelenip açık metinle XOR’lanırblok şifreyi akış şifresine çevirir; paralelleşir
GCMCTR + bütünlük etiketihem gizler hem kurcalanmayı yakalar

ECB’nin kusuru soyut değil, gözle görülür. Bir görüntü dosyasını ECB ile şifrelersen aynı renkteki bölgeler aynı şifreli bloğa dönüşür ve resmin hatları şifreli çıktıda okunmaya devam eder. Şifreleme yapıldı, ama içerik hâlâ tanınıyor. Bu yüzden ECB pratikte hiçbir yerde kullanılmı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 tam olarak 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 — 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 telde dolaşan şey de parola değil, ondan türetilen taze bir AES anahtarı; o türetmenin adımlarını 29. bölümde açacağım. Uzaktaki bir sunucu için cevabı 9. 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: 1993 tarihli, NIST kaynaklı bir ABD şifreleme standardı. 56 bitlik bir anahtar kullanıyor ve girdiyi 64 bitlik açık metin blokları halinde alıyor.

DES bir blok şifresi, ve blok şifreleri çıplak kullanılmıyor. Etraflarına bir kip sarılıyor; DES’te bu, şifreli blok zincirleme (cipher block chaining). Kipin işi şu: aynı açık metin bloğu her seferinde aynı şifreli çıktıyı vermesin diye her blok bir öncekine bağlanıyor. Bu, şifreleme algoritmasının kendisi değil; onun etrafındaki kullanım kuralı.

DES Challenge’da 56 bit anahtarla şifrelenmiş bir ifade, kaba kuvvetle bir günden kısa sürede çözüldü. Bilinen iyi bir analitik saldırı yoktu. Şemayı düşüren şey zekâ değil, anahtarın kısalığıydı.

EFF’in DES Cracker makinesinden tek bir devre kartı; üzerinde anahtar uzayını paralel tarayan onlarca özel üretim Deep Crack yongası sıralı duruyor. Metindeki ’şemayı düşüren şey anahtarın kısalığıydı’ cümlesinin donanım karşılığı bu kart.

Ayakta tutma çabası 3DES oldu: üç farklı anahtarla üç kez şifreleme. Kalıcı cevap Kasım 2001’de geldi. NIST’in yeni simetrik anahtar standardı AES DES’in yerini aldı ve bugün hâlâ orada. AES veriyi 128 bitlik bloklar halinde işliyor, yani tek seferde 16 bayt. Anahtar 128, 192 ya da 256 bit olabiliyor; blok boyu sabit kalıyor, değişen anahtar. 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:

DESAES
Standart1993Kasım 2001
Anahtar56 bit128, 192 ya da 256 bit
Blok64 bit128 bit (16 bayt)
Anahtar uzayı2^56, yaklaşık 72 katrilyon2^128
Tüm anahtarları denemek1 saniye varsayarsak149 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ı girdiyi aynı anahtarla iki kez şifrelememek. Bunun aracı nonce, yani ömür boyu yalnızca bir kez kullanılan sayı. Tekrar oynatma (playback) saldırısını kıran şey bu. Kaydedilip sonra yeniden gönderilen bir mesaj, yeni nonce’a cevap veremiyor.

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 tek bir bağlantıda yaklaşık 24 milyon tam boy kayıt şifrelenebiliyor; sonrasında anahtarın tazelenmesi gerekiyor. 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.

Özet

Peki, ne öğrendik?

  • 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, ve yanından geçen paketleri okumak için karışık moda alınmış bir arayüz 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 tek bağlantıda ş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?

9. bölüme devam et: Açık Anahtarlı Kriptografi