Clang vs. Clang: Clang'ı kızdırmayın
- Clang üzerine yapılan deneyleri ele alan bir blog yazısı
- Derleyici optimizasyonlarıyla ilgili son LLVM ve GCC değişikliklerine bakıldığında optimizasyonlar, optimizasyon testleri, test düzeltmeleri ve hata düzeltmeleri yer alıyor
- Derleyici geliştiricileri, kendilerinin eklediği hatalardan sorumlu tutulmak istemiyor
- Derleyici optimizasyonları gerçek performans artışına büyük katkı sağlamıyor
Derleyici optimizasyonlarının sorunları
- Optimize edilmiş derleyicilerin performansı artırdığı durumlar nadirdir
- Örneğin kyber768'in avx2 uygulaması, optimize edilmiş derleyiciyle derlenmiş koda göre 4 kat daha hızlıdır
- Todd A. Proebsting yasasına göre derleyici optimizasyonları, hesaplama performansına neredeyse hiç katkı sağlamaz
- Arseny Kapoulkine'in benchmark sonuçları da benzer bir sonuca varıyor
Güvenlik sorunları
- Optimize edilmiş derleyiciler, geleneksel hataların yanı sıra zamanlama sızıntıları gibi güvenlik sorunlarına da yol açabilir
- 2018 tarihli EuroS&P makalesine göre, derleyici yükseltmeleri zamanlama kanalları açarak güvenli kodu savunmasız hale getirebilir
- Kyber referans kodunda, Clang 15 ve üzerinin optimizasyon seçenekleriyle derlenen kodda başarılı zamanlama saldırıları bildirildi
TIMECOP aracı
- TIMECOP 2, SUPERCOP kriptografi test çerçevesine gömülüdür ve sırdan türetilen koşullu dallanmaları otomatik olarak tarar
- TIMECOP 1 ile TIMECOP 2 arasındaki fark: TIMECOP 2, RNG çıktısını otomatik olarak sır olarak işaretler ve çok çekirdekte çalışır
Sabit zamanlı kod yazımı
- Sabit zamanlı kodun nasıl yazılacağına dair bir sunum Temmuz 2024'te yapıldı
- libmceliece ve SUPERCOP'ta sağlanan sabit zamanlı işlevler açıklanıyor
- Örneğin
crypto_uint32_bitmod_mask(x,j) işlevi, derleyicinin 1 bitlik sonucu fark etmesini engeller
Derleyici optimizasyonu sorunlarını önleme
- Derleyicinin zamanlama sızıntısı eklemesini önlemenin yollarından biri, kütüphaneleri assembly diliyle dağıtmaktır
- Ancak assembly dili, yazılımın doğruluğunu denetlemeyi zorlaştırabilir
- C, C++ vb. kodlara zamanlama sızıntısını önleyici kodları hızlıca eklemenin yolları araştırılıyor
clang-vs-clang yaması
- LLVM optimizasyon aracına,
&1 ve >>31 kalıplarını tarayıp uyarı mesajı veren bir yama yazıldı
- Örneğin
x >>= 31 kodunda bir uyarı mesajı gösteriliyor
Sonuç
- Derleyici optimizasyonları performans artışına büyük katkı sağlamaz ve güvenlik sorunlarına yol açabilir
- TIMECOP gibi araçlar kullanılarak sabit zamanlı kod yazılmalı ve derleyici optimizasyonu sorunları önlenmelidir
GN⁺ özeti
- Bu yazı, derleyici optimizasyonlarının sorunlarını ve güvenlik risklerini ele alıyor
- Derleyici optimizasyonlarının gerçek performans artışına büyük katkı sağlamadığını ve güvenlik sorunlarına yol açabileceğini vurguluyor
- TIMECOP aracı ve sabit zamanlı kod yazma yöntemleri tanıtılarak güvenlik sorunlarını önleme yolları sunuluyor
- Derleyici optimizasyonu sorunlarını önlemek için kütüphaneleri assembly diliyle dağıtma yöntemi de öneriliyor
- İlgili alandaki diğer projeler arasında FaCT ve Jasmin gibi güvenlik odaklı derleyiciler bulunuyor
1 yorum
Hacker News görüşleri
Derleyici yazarları, optimizasyon nedeniyle ortaya çıkan hatalardan sorumlu tutulmuyor
Bernstein'ın görüşüne katılıyorlar, ancak bazen yanlış yöne gittiğini düşünüyorlar
C ve C++, sabit zaman garantisi gerektiren algoritmalar yazmak için uygun değil
Intel CPU'larda, kullanıcı modunda clang ya da başka herhangi bir şey doğru kod üretemiyor
Derleyici yazarlarının hatalardan sorumlu olmadığı iddiasına katılmıyorlar
clang'da, fonksiyon bazında optimizasyonu devre dışı bırakabilen
clang::optnoneniteliği vargnu::optimizeniteliği bulunuyorclang::no_builtins, memcpy ve memset optimizasyonlarını devre dışı bırakıyorC'de çok fazla tanımsız davranış olduğu için başka dillere geçme ihtimali var
Kriptografi uzmanlarının hedeflerine katılıyorlar, ancak genel amaçlı derleyiciler bunu dikkate almıyor
Bazı dillerin ve derleyicilerin sabit zamanlı kriptografik rutinler yazmak için uygun olmadığı doğru
Belirli bir fonksiyon örneğinde, SIZE_T_MAX girdisinde tanımsız davranış ortaya çıkıyor