Uygulama Düzeyindeki Kodda Zamanlama Saldırıları
Dize karşılaştırma zamanlamasının sırları nasıl sızdırdığını ve sabit zamanlı karşılaştırmanın bunları nasıl önlediğini öğrenin.
Uygulama Düzeyindeki Kodda Zamanlama Saldırıları, CoddyKit'te ücretsiz bir Cryptology Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cryptology Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cryptology Academy kursu toplamda 4 dersten oluşur.
Sabit Zamanlı Olmayan Dize Karşılaştırması
Çoğu programlama dilindeki standart dize eşitliği işleci, bir uyuşmazlık bulunur bulunmaz sonlanır. Python'da bytes nesneleri üzerindeki ==, C'deki strcmp ve Java'daki String.equals, ilk farklı bayt bulunduğunda hemen sonuç döndürür. Normal dize karşılaştırmasında bu bir iyileştirmedir; ancak MAC etiketleri veya parolalar gibi gizli değerleri karşılaştırırken, bilgi sızdıran ve ölçülebilen bir zamanlama yan kanalı oluşturur.
HMAC Karşılaştırma Süresini Ölçme
Bir saldırgan, gönderilen HMAC etiketinin doğru değerle karşılaştırılmasının ne kadar sürdüğünü ölçer. İlk baytı doğru eşleşen bir HMAC gönderimi, ilk baytı yanlış olan bir gönderimden biraz daha uzun sürer (bir ek bayt karşılaştırması). Her olası ilk bayt için çok sayıda değer gönderip yanıt sürelerini ölçen saldırgan, doğru ilk baytı belirler. Bu işlem, etiketin tamamı ele geçirilene kadar bayt bayt tekrarlanır.
Pratik Saldırılarda Zamanlama Hassasiyeti
Modern ağ zamanlama saldırıları, internet üzerinden onlarca ila yüzlerce nanosaniyelik zaman farklarını ayırt edebilir. Her doğru baytın işleme süresine yaklaşık 10-100 ns eklediği 32 baytlık bir HMAC karşılaştırması, ağdaki gecikme dalgalanmalarının yeterli sayıda yinelenen ölçümle ortalamasının alınması sayesinde ölçülebilir bir sinyal sağlar. Yerel ağ bağlamında, yeterli istatistiksel örneklemeyle tek nanosaniyelik farklardan bile yararlanılabilir.
Python == İşlecindeki Güvenlik Açığı
Python'da MAC etiketlerini == ile karşılaştırmak güvenli değildir: mac == submitted_mac, ilk uyuşmazlığın konumuna bağlı olarak True veya False döndürür. Binlerce hazırlanmış etiket gönderip yanıt sürelerini ölçen bir saldırgan, beklenen etiketi bayt bayt ele geçirebilir. Bu güvenlik açığı, oturum belirteci veya API anahtarı karşılaştırmasını sabit zamanlı işlevler kullanmadan hatalı biçimde uygulayan üretim web uygulamalarında görülmüştür.
Python'da hmac.compare_digest
Python'daki hmac.compare_digest(a, b), iki bayt veya dize değerini sabit sürede karşılaştırır; ilk uyuşmazlığın nerede gerçekleştiğinden bağımsız olarak aynı süreyi alır. Python bayt kodunun yorumlanmasından kaynaklanan ek yüke rağmen sabit zamanlı davranışı güvenceye almak için C'de uygulanmıştır. MAC etiketlerini, oturum belirteçlerini, API anahtarlarını veya zamanlama bilgisinin tehlikeli olabileceği herhangi bir değeri karşılaştırırken her zaman hmac.compare_digest kullanın.
OpenSSL'de CRYPTO_memcmp
OpenSSL, sabit zamanlı bellek karşılaştırması için CRYPTO_memcmp(a, b, length) işlevini sağlar. memcmp'den farklı olarak, erken uyuşmazlıklardan bağımsız biçimde length parametresinde belirtilen tüm baytları işler. Eşitse dönüş değeri sıfır, farklıysa sıfırdan farklıdır. Beklenen uzunluğun tamamını her zaman karşılaştırmak önemlidir: farklı uzunluktaki değerleri daha kısa olan uzunlukla karşılaştırmak yine de uzunluk bilgisini sızdırabilir. OpenSSL kullanan C/C++ kodundaki güvenlik açısından kritik tüm karşılaştırmalarda CRYPTO_memcmp kullanın.
RSA'da Zamanlama Saldırıları: Bleichenbacher
Zamanlama saldırıları dize karşılaştırmasının ötesine geçer. Bleichenbacher'ın 2006 yılında RSA PKCS#1 v1.5 şifre çözme üzerine gerçekleştirdiği saldırı, SSL/TLS uygulamalarına karşı pratik bir zamanlama kehanet mekanizması ortaya koydu. RSA özel anahtar işleminin süresi, şifresi çözülen değerin geçerli PKCS#1 dolgusu içerip içermediğine göre değişiyordu. Saldırganlar, binlerce hazırlanmış şifreli metin göndererek RSA özel anahtarlarını ele geçirebiliyordu. Bu durum RSA-OAEP'nin ve sabit zamanlı RSA uygulamalarının geliştirilmesine yön verdi.
AES'te Önbellek Zamanlama Saldırıları
Arama tabloları kullanan AES uygulamaları (performans amacıyla yaygındır), anahtara ve düz metne bağlı olarak farklı tablo girdilerine erişir. Önbellek isabetleri ve ıskaları, hangi tablo girdilerine erişildiği hakkında bilgi sızdıran ölçülebilir zaman farkları oluşturur. Bu yan kanal AES anahtarlarını ortaya çıkarabilir. Savunma olarak, AES-NI donanım yönergeleri veya bit dilimli yazılım uygulamaları gibi tablo aramalarına dayanmayan AES uygulamaları kullanılmalıdır.
Sabit Zamanlı Uygulama İlkeleri
Sabit zamanlı kod yazmak şunlardan kaçınmayı gerektirir: gizli verilere bağlı koşullu dallanmalar (maskeleme ile dallanmasız seçim kullanın), gizli verilere bağlı bellek erişim örüntüleri (gizli değerlerle indekslenen arama tablolarından kaçının) ve gecikmesi gizli değerlere bağlı olan tüm işlemler (ör. bazı işlemcilerde bölme). Derleyiciler sabit zamanlı yapıları optimizasyonla ortadan kaldırabilir; bu nedenle kritik bölümlerde assembly dili veya volatile bellek erişimleri gerekebilir.
AEAD, Uygulama Düzeyindeki MAC Karşılaştırmasını Ortadan Kaldırır
MAC karşılaştırmasına yönelik zamanlama saldırılarına karşı en iyi savunma, AEAD kiplerini (GCM, ChaCha20-Poly1305) kullanmak ve MAC doğrulamasını kriptografik kitaplığa bırakmaktır. Kitaplık uygulamaları doğrulamayı kendi içinde sabit zamanlı gerçekleştirir. AEAD'yi doğru kullanıyorsanız (herhangi bir değiştirme durumunda şifre çözme başarısız olur ve etiketi doğrulamadan önce şifreyi asla çözmezsiniz), uygulama kodunda MAC etiketlerini karşılaştırmanız gerekmez; böylece zamanlama açığı tamamen ortadan kalkar.
Zamanlama Açıklarını Test Etme
Zamanlama açıklarını test etmek, yanıt süresi dağılımlarının istatistiksel analizini gerektirir. tlsfuzzer, zamanlama saldırısı test betikleri ve dudect çerçevesi, kriptografik uygulamalardaki zaman farklarını saptamaya yardımcı olur. Eşit zamanlama üretmesi gereken girdiler için yanıt süresi örneklerine uygulanan bir t-testi, istatistiksel olarak anlamlı farkları ortaya çıkarabilir. Yanlış negatifler mümkündür; testin yanı sıra sabit zamanlı kod incelemesi de zorunludur.
Sabit Zamanlı Karşılaştırma
Zamanlama saldırılarını önlemek için bir HMAC etiketini güvenli biçimde karşılaştırırken hangi Python işlevi kullanılmalıdır?
Zamanlama Saldırılarının Özeti
Zamanlama saldırılarının özeti: erken sonlanan dize karşılaştırması, yanıt süresi farkları aracılığıyla gizli değerleri bayt bayt sızdırır; yeterli örnekle ağ üzerinden ölçülebilir; sabit zamanlı karşılaştırma için Python'da hmac.compare_digest, OpenSSL'de CRYPTO_memcmp kullanın; RSA dolgusu zamanlama saldırıları özel anahtarları ele geçirir (sabit zamanlı RSA ve OAEP kullanın); AES tablo arama zamanlama saldırıları anahtar bitlerini sızdırır (AES-NI veya bit dilimli uygulamalar kullanın) ve AEAD kitaplık doğrulaması, uygulama düzeyinde MAC karşılaştırması gereksinimini ortadan kaldırır.
Sıkça Sorulan Sorular
“Uygulama Düzeyindeki Kodda Zamanlama Saldırıları” dersi ücretsiz mi?
Evet — “Uygulama Düzeyindeki Kodda Zamanlama Saldırıları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cryptology Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cryptology Academy kursu toplamda 4 dersten oluşur.
“Uygulama Düzeyindeki Kodda Zamanlama Saldırıları” dersinde ne öğreneceğim?
Dize karşılaştırma zamanlamasının sırları nasıl sızdırdığını ve sabit zamanlı karşılaştırmanın bunları nasıl önlediğini öğrenin. Cryptology Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cryptology Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cryptology Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Uygulama Düzeyindeki Kodda Zamanlama Saldırıları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cryptology Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cryptology Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Ayrıntılı Dolgu Oracle Saldırıları
- Tekrar Oynatma Saldırıları ve Nonce Yeniden Kullanım Güvenlik Açıkları
- Uygulama Düzeyindeki Kodda Zamanlama Saldırıları
- Başlıca Kriptografik Yanlış Kullanım Kalıpları