2 puan yazan GN⁺ 2024-08-05 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-08-05
Hacker News görüşleri
  • Derleyici yazarları, optimizasyon nedeniyle ortaya çıkan hatalardan sorumlu tutulmuyor

    • Dil standardına göre bu tür hatalar programcının hatası sayılıyor
    • Bu da bunun bir bug olmadığının kanıtı olarak görülüyor
  • Bernstein'ın görüşüne katılıyorlar, ancak bazen yanlış yöne gittiğini düşünüyorlar

    • Optimizasyonun faydası kullanım senaryosuna göre değişiyor
    • C derleyicilerinin, dilde ifade edilemeyen anlamları dikkate almamasından şikayet ediliyor
    • Bu, "ihtiyacınız olan anlamı ifade edebilen bir dil kullanın" sonucuna indirgenebilir
  • C ve C++, sabit zaman garantisi gerektiren algoritmalar yazmak için uygun değil

    • Standartta gerçek zaman kavramı neredeyse hiç yok
    • Derleyici geliştiricilerini suçlamak yanlış hedefe yönelmek oluyor
  • Intel CPU'larda, kullanıcı modunda clang ya da başka herhangi bir şey doğru kod üretemiyor

    • DOITM'yi ayarlamak imkansız
  • Derleyici yazarlarının hatalardan sorumlu olmadığı iddiasına katılmıyorlar

    • Bunun, C'deki temel "tanımsız davranış" kavramına dair bir yanlış anlama olduğu söyleniyor
  • clang'da, fonksiyon bazında optimizasyonu devre dışı bırakabilen clang::optnone niteliği var

    • GCC'de, optimizasyon seviyesini ayarlayabilen gnu::optimize niteliği bulunuyor
    • clang::no_builtins, memcpy ve memset optimizasyonlarını devre dışı bırakıyor
  • C'de çok fazla tanımsız davranış olduğu için başka dillere geçme ihtimali var

    • Python'da set nesnelerinin sırası önemli değil
    • C derleyicileri, kod kalıplarını analiz ederek optimizasyon yapmaya çalışıyor
    • Bu, Hubble teleskobundaki sorunun çözümüne benzer bir şekilde daha iyi performans sağlayabiliyor
  • Kriptografi uzmanlarının hedeflerine katılıyorlar, ancak genel amaçlı derleyiciler bunu dikkate almıyor

    • Uzmanlaşmış derleyiciler gerekebilir
  • Bazı dillerin ve derleyicilerin sabit zamanlı kriptografik rutinler yazmak için uygun olmadığı doğru

    • Buradan tüm derleyicilerin ve assembly dillerinin kötü olduğu sonucuna varmak yanlış
    • Basit alan-özgü derleyiciler ve diller yazılmalı
  • Belirli bir fonksiyon örneğinde, SIZE_T_MAX girdisinde tanımsız davranış ortaya çıkıyor

    • Bu tür birçok hata var, ancak pratikte pek önemli değiller