Zamanlama saldırısı

Kriptografide, bir zamanlama saldırısı, saldırganın kriptografik algoritmaları yürütmek için geçen zamanı analiz ederek bir kriptosistemi tehlikeye atmaya çalıştığı yan kanal saldırısıdır. Bir bilgisayardaki her mantıksal işlemin yürütülmesi zaman alır ve zaman girdiye göre değişebilir; her işlem için tam zaman ölçümleriyle, bir saldırgan girdiye geriye doğru çalışabilir.
Belirli sorgulara yanıt vermek için geçen sürenin ölçülmesi yoluyla sistemden bilgi sızabilir. Bu bilginin bir saldırgana ne kadar yardımcı olabileceği birçok değişkene bağlıdır: kriptografik sistem tasarımı, sistemi çalıştıran CPU, kullanılan algoritmalar, çeşitli uyarlama detayları, zamanlama saldırısı karşı tedbirleri, zamanlama ölçümlerinin doğruluk oranı, vb.
Zamanlama saldırıları genellikle tasarım aşamasında göz ardı edilir, çünkü uyarlamaya çok bağımlıdırlar ve derleyici optimizasyonlarıyla yanlışlıkla tanıtılabilirler. Zamanlama saldırılarından kaçınılması, sabit zamanlı işlevlerin tasarımını ve son yürütülebilir kodun dikkatle test edilmesini içerir.
Kavram
Zamanlama saldırısı, algoritmanın diğer matematiksel özelliklerinden ziyade bir Algoritma uyarlamasının verilere bağlı davranışsal karakteristiklerinden yararlanan bir saldırı örneğidir.
Birçok kriptografik algoritma, veriye bağlı zamanlama bilgilerini azaltacak veya ortadan kaldıracak şekilde uygulanabilir (veya bir proxy tarafından maskelenebilir): bir alt rutine yapılan her çağrının her zaman tam olarak x saniye içinde döndüğü bir uygulamayı düşünün; burada x, her muhtemel yetkili girişi için bu rutini yürüttüğü maksimum süredir. Böyle bir uyarlamada, algoritmanın zamanlaması söz konusu çağrılma için sağlanan veriler hakkında hiçbir bilgi sızdırmaz. Bu yaklaşımın kötü tarafı, tüm yürütmeler için kullanılan sürenin, işlevin en kötü durum performansı haline gelmesidir.
Zamanlama saldırıları birçok yönden pratiktir:
Zamanlama saldırıları, veriye bağlı zamanlama varyasyonu olan herhangi bir algoritmaya uygulanabilir. Veri önbelleği olan bir CPU üzerinde çalışan yazılım, belleğin önbelleğe bakması sonucunda verilere bağlı zamanlama varyasyonları sergileyecektir. Çarpma gibi bazı işlemler, girdilere bağlı olarak değişen yürütme sürelerine sahip olabilir. Sıklıkla çeşitli yürütme süreleri gösteren düşük düzeyli işlemler kullanan bazı algoritmalarda zamanlama bağımlılıklarını kaldırmak zordur.
Zamanlama bilgileriyle sır bulmak, bilinen düz metin, şifreli metin çiftlerinin kriptanalizini kullanmaktan çok daha kolay olabilir. Bazen bilgi sızıntı hızını arttırmak için zamanlama bilgisi kriptanaliz ile birleştirilir.
Örnekler
Modüler üs almada kullanılan kare ve çarpma algoritmasının yürütme süresi, doğrusal olarak anahtardaki '1' bit sayısına bağlıdır. Tek başına '1' bit sayısı, anahtarı bulmak için neredeyse yeterli bilgi olmamakla birlikte, aynı anahtar ve farklı girişlerle tekrarlanan yürütmeler, anahtarı tamamen kurtarmak için zamanlama bilgilerinin istatistiksel korelasyon analizini gerçekleştirmek için kullanılabilir, pasif saldırgan tarafından bile. Gözlemlenen zamanlama ölçümleri genellikle gürültüyü içerir (ağ gecikmesi gibi kaynaklardan veya erişimden erişime disk sürücüsü erişim farklılıkları ve iletim hatalarından kurtulmak için kullanılan hata bulma ve düzeltme teknikleri). Bununla birlikte, zamanlama saldırıları RSA Algoritması, ElGamal ve Dijital İmza Algoritması dahil olmak üzere bir dizi şifreleme algoritmasına karşı pratiktir.
2003 yılında Boneh ve Brumley, Çin'in Chinese Remainder Theorem optimizasyonlarıyla RSA kullanımı ile ilgili farklı bir güvenlik açığına dayanan, SSL etkin web sunucularında pratik bir ağ tabanlı zamanlama saldırısı gösterdiler. Gerçek ağ mesafesi deneylerinde küçüktü, ancak saldırı birkaç saat içinde bir sunucu özel anahtarını başarıyla kurtardı. Bu gösteri SSL uygulamalarında körleştirme (blinding) tekniklerinin yaygın olarak başvurulmasına ve kullanılmasına yol açmıştır. Bu bağlamda körleştirme, anahtar ve şifreleme süresi arasındaki korelasyonları ortadan kaldırmayı amaçlamaktadır.
Unix'in bazı sürümleri, 8 karakterlik bir parolayı 11 karakterlik bir dizeye ayırmak için crypt kitaplığı işlevinin nispeten pahalı bir uyarlaması kullanır. Eski donanımlarda, bu hesaplama kasıtlı olarak ve kısmen uzun bir zaman aldı: bazı durumlarda iki veya üç saniye kadar. Unix'in ilk sürümlerindeki login programı, yalnızca oturum açma adı sistem tarafından tanındığında crypt işlevini yürüttü. Bu, şifre yanlış olsa bile, oturum açma adının geçerliliği hakkında zamanlama yoluyla bilgi sızdırdı. Bir saldırgan, ilk olarak geçerli olduğu bilinen giriş adlarının bir listesini üretmek için kaba kuvvet uygulayarak bu tür sızıntılardan yararlanabilir, daha sonra yalnızca bu adları sıkça kullanıldığı bilinen çok sayıda parola ile birleştirerek erişim elde etmeye çalışabilir. Oturum açma adlarının geçerliliği hakkında herhangi bir bilgi olmadan, böyle bir yaklaşımın yürütülmesi için gereken süre, büyüklük sıralarına göre artarak etkili bir şekilde işe yaramaz hale gelir. Unix'in sonraki sürümleri, oturum açma adının geçerliliğine bakılmaksızın her zaman crypt işlevini çalıştırarak bu sızıntıyı giderdi.
Önbellek veya sanal bellek ile tek bir sistemde çalışan, aksi takdirde güvenli bir şekilde izole edilmiş iki işlem, bir işlemde kasıtlı olarak sayfa hatalarına ve/veya önbellek hatalarına neden olarak iletişim kurabilir, ardından diğerinden erişim sürelerinde oluşan değişiklikleri izleyebilir. Benzer şekilde, bir uygulama güvenilirse, ancak disk belleği / önbelleğe alma dallanma mantığından etkileniyorsa, ikinci bir uygulamanın erişim süresi değişikliklerini izleyerek şube durumuna kıyasla verilerin değerlerini belirlemesi mümkün olabilir; uç örneklerde bu, kriptografik anahtar bitlerinin kurtarılmasına izin verebilir.
CPU üreticilerini (Intel, AMD, ARM ve IBM dahil) CPU'larını yeniden tasarlamaya zorlayan 2017 Meltdown ve Spectre saldırıları, zamanlama saldırılarına güveniyor. 2018'in başından itibaren, dünyadaki hemen hemen her bilgisayar sistemi, bir zamanlama saldırısının tarihteki en güçlü örneği haline getirerek Spectre'den etkilendi.
Aşağıdaki Visual Basic kodu, karakter uyuşmadığı zaman en kısa sürede sınamayı durduran tipik bir güvenli olmayan string karşılaştırma gösterir. Örneğin, "ABCDE" ile "ABxDE" karşılaştırıldığında, 3 döngü iterasyonundan sonra geriye dönüş yapar:
Function InsecureCompare(StrA As String, StrB As String, length As Integer) As Boolean
Dim result As Boolean
For i = 1 To length
If Mid(StrA, i, 1) <> Mid(StrB, i, 1) Then Exit For
Next
result = (i > length)
InsecureCompare = result
End Function
Karşılaştırma olarak, aşağıdaki sürüm tüm karakterleri test ederek ve koşullu atlama olmadan test etmek için bitsel işlemleri kullanarak sabit zamanda çalışır:
Function SecureCompare(StrA As String, StrB As String, length As Integer) As Boolean
Dim result As Boolean
For i = 1 To length
result = result Or (Asc(Mid(StrA, i, 1)) Xor Asc(Mid(StrB, i, 1)))
Next
SecureCompare = Not result
End Function