Go ekosistemi için kuantum dirençli kriptografi
filippo.io/mlkem768, doğruluk ve okunabilirlik için optimize edilmiş, ML-KEM-768'in saf Go implementasyonudur.
- ML-KEM, NIST tarafından standardizasyon sürecinde olan ve sektörün büyük bölümünde benimsenen kuantum dirençli bir anahtar değişim mekanizmasıdır.
- Paket yaklaşık 500 satır kod, 200 satır yorum ve 650 satır testten oluşur;
golang.org/x/crypto/sha3 dışında bağımlılığı yoktur.
- Go standart kütüphanesine entegre edilmesi planlanmaktadır ve inceleme kolaylığı, sadelik ve kapsamlı testler sayesinde yüksek güvenlik güvencesi sağlayacak şekilde tasarlanmıştır.
Spesifikasyonu doğrulamak için bir implementasyon
- Çoğu implementasyonun aksine bu kod, referans pq-crystals kütüphanesinden port edilmemiş; başka kod tabanları ayrıntılı biçimde incelenmeden sıfırdan yazılmıştır.
- FIPS 203 belgesi, ayrıntılı sözde kod, kapsamlı tanımlar ve tutarlı tip bilgileri sunarak mükemmel bir implementasyon rehberi işlevi görür.
- Kodun okunabilirliğini ve öğrenme kaynağı olarak değerini artırmak için fonksiyon ve değişken adları ile işlem sırası dikkatle FIPS spesifikasyonuna göre seçilmiştir.
Implementasyon için yeterli polinom ve lineer cebir
- Spesifikasyon görece sınırlı bir matematik altyapısı gerektirse de, implementatörün işini kolaylaştırmak için 'Kyber implementasyonu için yeterli polinom ve lineer cebir' yazılmıştır.
- Geri kalanı okuyucuya bırakılan alıştırmalardır: 1) 3329 asalına göre modüler aritmetik, 2) [0, 3329) ile [0, 2ᵈ) arasındaki sıkıştırma ve açma fonksiyonlarının somut implementasyonu, 3) sabit zamanlı işlem garantisi.
Okunabilirlik ve eğitsel değer
- Okunabilirlik, implementasyonun temel hedeflerinden biridir; etkili incelemeyi mümkün kılar ve gelecek nesil bakımcılar ile kriptografi mühendisleri için bir eğitim kaynağı görevi görür.
- Karmaşık fonksiyonların okunabilirliğini artırmak için bazen kod daha uzun ve yeniden kullanılabilirliği daha düşük olacak şekilde yazılmıştır.
Testlerle yüksek güvenlik güvencesi
- Anahtar üretimi, encapsulation ve decapsulation işlemlerinin doğru yapıldığını doğrular ve %95'in üzerinde test kapsamını korur.
- NIST ve diğer implementasyonlardan elde edilen test vektörleriyle birlikte çalışabilirliği garanti eder ve temel alan aritmetiği işlemlerini beklenen değerlerle karşılaştırarak kapsamlı biçimde test eder.
- CCTV projesinin bir parçası olarak, başka implementasyonlarda da yeniden kullanılabilecek test vektörleri yayımlar.
Performans
- Performans ana hedef olmasa da paketin faydalı olacak kadar hızlı olması gerekir.
- ML-KEM yeterince hızlıdır ve bu basit implementasyon, assembly ile optimize edilmiş P-256 ve X25519 implementasyonlarıyla rekabet edebilir.
- Performansı artırmak için Go programlama kalıpları izlenmiş ve heap tahsisleri en aza indirilmeye çalışılmıştır.
ML-KEM implementasyonunu Kyber v3 olarak kullanmak
- NIST, Kyber'in Round 3 gönderiminde birkaç küçük değişiklik yaptı.
- Bazı deneysel protokoller Kyber v3'e (veya "draft00") dayanarak tanımlanmış olsa da ayrı bir paket oluşturmaya gerek yoktur.
- Paylaşılan gizli K'yı üretmek için ML-KEM kullanılabilir, ardından Kyber paylaşılan sırrını üretmek için ek anahtar türetme uygulanabilir.
GN⁺ görüşü
- Kuantum dirençli kriptografinin önemi: Kuantum bilişimin ilerlemesiyle mevcut kriptografi teknikleri zayıflayabileceğinden, ML-KEM gibi kuantum dirençli kriptografi teknolojilerinin geliştirilmesi ve standartlaştırılması çok önemlidir.
- Go dilinin genişletilebilirliği: Bu implementasyon, Go dilinin genişletilebilirliğini ve esnekliğini gösteriyor; ayrıca kriptografi kütüphanesini standart kütüphaneye entegre etme planı sayesinde Go geliştirici topluluğu için faydalı bir kaynak olacak.
- Eğitsel değer: Kodun okunabilirliğine ve eğitsel değerine odaklanan bu yaklaşım, gelecek nesil kriptografi mühendisleri ve ilgili geliştiriciler için güçlü bir öğrenme kaynağı olacaktır.
1 yorum
Hacker News yorumları
Kuantum hesaplamanın mevcut durumuna dair soru
Kudelski Security'den selam ve paylaşım
Go diliyle uygulanan şifreleme sistemleri hakkında kitap önerisi
Diğer dillerdeki (Java, C# vb.) uygulamalar hakkında soru
Go diliyle yazılmış saf uygulamaya dair endişe
Kyber v3 desteğine ilgi ve soru
32 bit sistem çağrısı tablosu hakkında şaka
Unicode değişken adlarının kullanımına beğeni
FiloSottile'nin diğer projesine övgü
NIST FIPS 203 belgesi bağlantısının paylaşılması