7 puan yazan GN⁺ 2025-04-19 | 2 yorum | WhatsApp'ta paylaş
  • Python’ın varsayılan hash ve HMAC algoritmaları artık doğrulanmış kriptografi kodu olan HACL* ile değiştirildi
  • Yaklaşık 15.000 satır C kodu, HACL*’den Python kod tabanına otomatik olarak entegre edildi
  • Çeşitli blok algoritmalarını işleyebilmek için streaming API genel amaçlı olarak tasarlanıp doğrulandı
  • Bellek ayırma hatalarının ele alınması, AVX2 derleme sorunlarının çözülmesi, CI ortamının optimize edilmesi gibi ileri düzey mühendislik sorunları ele alındı
  • Python ve kriptografi topluluğunun iş birliğiyle hem güvenlik hem de bakım kolaylığı somut biçimde sağlandı

Python’un kriptografi algoritmalarında tamamen doğrulanmış koda geçişi

  • 2022’de ortaya çıkan SHA3 uygulamasıyla ilgili CVE-2022-37454 sonrasında, Python’da hash altyapısının doğrulanmış koda geçirilmesi gerektiği gündeme geldi
  • Sonraki 2,5 yıl içinde Python, yerleşik hash ve HMAC algoritmalarını HACL* tabanlı doğrulanmış uygulamalarla tamamen değiştirdi
  • Bu değişim kullanıcılar için tamamen şeffaf biçimde yapıldı ve işlevsellik açısından herhangi bir kayıp olmadı
  • HACL* ayrıca Python için bazı ek yetenekler sundu: Blake2’nin çeşitli modları, SHA3 için Keccak türevlerini destekleyen API, HMAC için streaming optimizasyonları vb.
  • Yeni sürümlerin yansıtılması betikler aracılığıyla otomatikleştirildi ve bakım kolaylaştırıldı

Streaming API’yi anlamak

  • Kriptografik algoritmaların çoğu blok algoritmalarıdır ve girdiyi bloklar halinde işlemeleri gerekir
  • Gerçek kullanım ortamlarında girdiyi blok blok vermek zor olduğundan, streaming API gerekir
  • Streaming API, girdi uzunluğundan bağımsız çalışır ve ara sonuçların alınmasına da olanak tanır
  • Streaming uygulaması karmaşık durum yönetimi gerektirir; önceki SHA3 uygulamasında bununla ilgili ciddi bir güvenlik açığı vardı
  • Her hash algoritmasının işleyiş biçimi farklı olduğundan karmaşıklık artar: örn. Blake2 boş bloğa izin vermez, HMAC ise anahtarı başlattıktan sonra silebilir

Genel amaçlı streaming algoritmasının doğrulanması

  • 2021’de yazılan bir makalede tanıtılan yaklaşım, blok algoritmasını soyutlayıp bunun üzerinde genel amaçlı bir streaming algoritması tanımlamaya dayanıyor
  • Ardından bu yapı her algoritmaya şablon gibi uygulanarak yeniden kullanılabilir hale geliyor
  • Farklı özel koşulları kapsayacak şekilde genelleştirildi:
    • Çıktı uzunluğunun belirtilebilir olup olmaması (SHA3 vs Shake)
    • İşlemden önce gerekli girdi bulunup bulunmaması (örn. Blake2’nin anahtar bloğu)
    • Son bloğun işlenme biçimindeki farklar
    • İç durumda korunması gereken ek bilgiler
    • Ara sonuç çıkarmak için durumun nasıl kopyalanacağı (stack vs heap)
    • Algoritma başına ayrı API mi yoksa aile API’si mi kullanılacağına dair strateji

Python entegrasyonu için derleme kararlılığının sağlanması

  • Python’un CI sistemi 50’den fazla toolchain ve mimaride doğrulama yapıyor; bu da küçük sorunların bile ortaya çıkmasını sağlıyor
  • HMAC uygulamasında AVX2 komut desteğiyle ilgili bir sorun yaşandı:
    • Bazı derleyiciler AVX2 olmadan immintrin.h başlığını işleyemiyor
    • Bunu çözmek için C’nin soyut struct kalıbı kullanıldı
    • F*’tan üretilen C kodundaki soyutlama kavramı ile C struct’larının farkı nedeniyle, krml derleyicisine hassas görünürlük analizi özelliği eklemek gerekti

Bellek ayırma hatalarına karşı yaklaşım

  • Mevcut F* modeli teorik olarak bellek hatalarını modelleyebiliyordu, ancak bunun pratikte uygulanması ilk kez gerçekleşti
  • Python’un ihtiyaçları doğrultusunda durum struct’ları, algoritma tanımları ve streaming yapıları, ayırma hatalarını iletebilecek şekilde geliştirildi
  • F* içinde option tipi kullanıldı; C’de bu yapı tagged union olarak derleniyor
  • Gelecekte karmaşıklığı azaltmak için bunun çalışma zamanı hata bayrağı yaklaşımına dönüştürülmesi mümkün olabilir

HACL* kod güncellemelerinin otomasyonu

  • İlk Python PR’ı, gereksiz başlık tanımlarını kaldırmak ve yolları düzeltmek için sed kullanıyordu
  • Daha sonra HACL* kodunun kararlılığı doğrulanınca karmaşık sed kullanımı kaldırıldı ve yerine basit bir betik getirildi
  • Bu betik sayesinde herkes Python kaynak ağacında HACL* kodunu en güncel sürüme kolayca güncelleyebiliyor

Sonuç

  • Doğrulanmış kriptografi kodu, üretim ortamlarının önde gelen örneklerinden biri olan Python’a başarıyla entegre edildi
  • Bu, söz konusu teknolojinin yalnızca akademik araştırma aşamasında kalmadığını, gerçek yazılımlarda da pratik ve bakımı yapılabilir olduğunu gösteren bir örnek oldu
  • Python topluluğu ile HACL* geliştiricileri arasındaki iş birliğinin iyi bir örneği olarak, gelecekte başka projeleri de etkileyebilir

2 yorum

 
sonnet 2025-04-21

Hacker News yorumlarında da belirtildiği gibi, Python ekosisteminin “akademik araştırma aşamasını aşıp gerçek yazılımlarda da pratik ve bakımı yapılabilir” bir şeye ulaştığı derken ne kastedildiğini anlamak zor.

Eğer anlatılmak istenen, mevcut doğrulanmamış hash altyapısı üzerinde streaming algoritmalarını soyutlama çalışması yapıldığıysa, bu da sadece bir başka “Pythonic” kelime oyunu gibi duruyor.

 
GN⁺ 2025-04-19
Hacker News görüşleri
  • Python sürümü belirtilmemiş. Araştırınca, bu özelliğin 3.14 sürümüne dahil edilmesinin planlandığı görülüyor. Ekim ayına kadar göremeyebiliriz

    • Bu bir güvenlik düzeltmesi olarak görülebilir ve şu anda desteklenen tüm Python sürümlerine (>=3.9) dahil edilmesi gerektiği savunulabilir
  • Microsoft'un F* ile üretilmiş doğrulanmış C kütüphanesi CPython'a dahil edilmiş ve bir C uzantısı yazılmış

    • Bu süreçte, özgün kütüphanenin bellek ayırma hatalarını ele almadığı fark edilmiş
    • Python açısından büyük meselenin ne olduğu merak ediliyor. Sonuçta bu, sadece sarmalanmış başka bir C kütüphanesi
  • SHAKE için "streaming" çıktı desteğinin gelip gelmeyeceği merak ediliyor

    • pyca/cryptography'de bu özellikle ilgili yakın zamanda kapatılmış bir issue var. Python standart kütüphanesi için buna denk bir issue bulunamıyor
    • İlgili issue bulunmuş ve "planlanmıyor" denilerek kapatılmış
  • Modern ve yaygın kullanılan kriptografi pratikte kırılamaz durumda; 90'lardaki kripto savaşları artık biraz eski bir tartışma gibi görünüyor. Bunun toplum üzerindeki etkisine dair düşüncesi olan var mı diye merak ediliyor

  • Genel amaçlı bir streaming doğrulama çerçevesinin, kriptografik hash'ler dışında ne kadar yeniden kullanılabilir olduğu merak ediliyor

  • Kriptografi modülünü içe aktaran her şeyin G++ ya da başka bir şeyi de içermesi gerekip gerekmediği, yoksa bunun doğrudan CPython'ın kendisi içinde mi derlendiği merak ediliyor

  • Kriptografi konusunda çok bilgili değilim. Bunun Python için ne anlama geldiği merak ediliyor

  • Geliştirmenin ne kadarının doğrulandığı ve bunun tam olarak neleri kapsadığı merak ediliyor

    • "doğrulanmış" ifadesini okuyunca biraz endişe duyuluyor
  • Kod satırı sayısı çok kötü bir ölçüt. Özellikle de kriptografi kodu bağlamında büyük sayılarla övünülüyorsa bu daha da geçerli