-
C'yi güvenli Rust'a derlemek için formalize edilmiş bir yöntem
-
Rust dilinin popülerliği hızla artsa da, birçok kritik kod tabanı hâlâ C ile yazılmış durumda ve bunları elle yeniden yazmak gerçekçi değil. Bu nedenle C'yi otomatik olarak Rust'a derlemek çekici bir alternatif olarak öne çıkıyor.
-
Mevcut birçok araştırma, Rust'ın çeşitli özelliklerini (ör.
unsafe) kullanarak C'nin giderek daha büyük bir bölümünü ele alacak şekilde ilerliyor. Ancak otomasyonun cazibesine karşın,unsafe'a bağımlı kod üretmek Rust'ın sağladığı bellek güvenliği garantisini geçersiz kılar ve böylece mevcut bir kod tabanını güvenli bir dile taşımanın ana avantajını ortadan kaldırır. -
Biz farklı bir yol izleyerek C'yi güvenli Rust'a derleme yöntemini inceledik: yani Rust'ın tip sistemine uygun çalışarak bellek güvenliğini kolayca garanti eden kod üreten bir yaklaşım.
-
Araştırmamızın birkaç özgün katkısı şunlardır:
- C'nin bazı kısımlarının güvenli Rust'a tip yönlendirmeli çevirisi
- Rust'ın slice ve split işlemlerini kullanarak C işaretçi aritmetiğini ifade edebilen
split-treetabanlı yeni bir statik analiz - Hangi ödünç almanın değişebilir (mutable) olması gerektiğini kesin olarak çıkaran bir analiz
- C yapılarının Rust'ın sahiplenmeyen ve sahiplenen ayrımıyla uyumlu tiplerine uygun bir derleme stratejisi
-
Bu yaklaşımı, halihazırda formal olarak doğrulanmış C kod tabanlarına uyguladık: HACL* şifreleme kütüphanesi ve EverParse'in ikili ayrıştırıcısı ile serileştiricisi. Desteklenen C alt kümesinin her iki uygulamayı güvenli Rust'a çevirmek için yeterli olduğunu gösterdik.
-
Yapılan değerlendirmede, Rust'ın aliasing (takma ad) disiplinini ihlal eden bazı bölümlerin otomatik bir cerrahi yeniden yazımla giderilebileceğini ve eklenen stratejik kopyaların performansa etkisinin önemsiz olduğunu gördük.
-
Özellikle HACL* için, yaklaşımın uygulanması sonucunda modern algoritmaların tamamını içeren 80.000 satırlık doğrulanmış bir kriptografi kütüphanesinin tamamen saf Rust ile yazıldığını gösterdik. Bu, bu alandaki ilk örnektir.
1 yorum
Hacker News yorumları
Rust'a bir projeyi taşırken bazı sonuçlar gördüm
Biçimsel olarak doğrulanmış bir C kod tabanı ile tipik sistem C kod tabanı farklıdır
2002 yılında araştırmacılar, güvenli bir C lehçesi olan Cyclone üzerine bir makale yayımladı ve C'den Cyclone'a kod taşırken güvenlik hataları tespit etti
Rust'a doğrudan çeviri hem güvenli hem güvensiz bölümler üretebilir; manuel çaba, güvensiz bölgelerin güvenliğini doğrulamaya odaklanabilir
C'nin küçük bir kısmını derlemeye ilişkin beklentim düşüktü
Zig'in C dönüşümü ile karşılaştırılmasıyla ilgili bir merakım var
C2Rust'ın biçimsel olarak doğru kod üretebilip üretemeyeceğine dair bir soruÇalışır durumdaki bir C kütüphanesi varsa, Rust'un güvensizliğini kullanarak çevirmek değere sahip olabilir
Yüksek optimizasyon seviyesinin Rust hızını önemli ölçüde artıramaması ilginç