Kriptografi Tahan Kuantum untuk Ekosistem Go
filippo.io/mlkem768 adalah implementasi murni Go untuk ML-KEM-768, yang dioptimalkan untuk akurasi dan keterbacaan.
- ML-KEM adalah mekanisme pertukaran kunci tahan kuantum yang sedang dalam proses standardisasi oleh NIST dan mulai diadopsi di sebagian besar industri.
- Paket ini terdiri dari sekitar 500 baris kode, 200 baris komentar, dan 650 baris pengujian, serta tidak memiliki dependensi selain
golang.org/x/crypto/sha3.
- Paket ini direncanakan akan diintegrasikan ke pustaka standar Go, dan dirancang untuk memberikan keyakinan keamanan yang tinggi melalui kemudahan review, kesederhanaan, dan pengujian yang menyeluruh.
Implementasi untuk Verifikasi Spesifikasi
- Berbeda dari kebanyakan implementasi, kode ini tidak dipindahkan dari pustaka referensi pq-crystals, melainkan ditulis dari nol tanpa membaca detail codebase lain.
- Dokumen FIPS 203 merupakan panduan implementasi yang sangat baik karena menyediakan pseudocode yang rinci, definisi yang menyeluruh, dan informasi tipe yang konsisten.
- Untuk meningkatkan keterbacaan kode dan nilainya sebagai sumber belajar, nama fungsi dan variabel serta urutan operasi dipilih dengan cermat agar sesuai dengan spesifikasi FIPS.
Polinomial dan Aljabar Linear yang Cukup untuk Implementasi
- Spesifikasi ini membutuhkan latar belakang matematika yang relatif terbatas, tetapi untuk memudahkan pekerjaan implementor, ditulislah 'Polinomial dan Aljabar Linear yang Cukup untuk Mengimplementasikan Kyber'.
- Sisanya dibiarkan sebagai latihan bagi pembaca, yaitu 1) aritmetika modulo terhadap prima 3329, 2) implementasi konkret fungsi kompresi dan dekompresi dari [0, 3329) ke [0, 2ᵈ), dan 3) jaminan operasi waktu konstan.
Keterbacaan dan Nilai Edukasi
- Keterbacaan adalah salah satu tujuan utama implementasi ini, agar efektif untuk review sekaligus berfungsi sebagai sumber belajar bagi generasi berikutnya dari maintainer dan engineer kriptografi.
- Demi meningkatkan keterbacaan fungsi yang kompleks, dalam beberapa kasus kode sengaja dibuat lebih panjang dan kurang dapat digunakan ulang.
Keyakinan Keamanan Tinggi melalui Pengujian
- Implementasi ini memverifikasi bahwa pembuatan kunci, encapsulation, dan decapsulation berjalan dengan benar, serta mempertahankan cakupan pengujian di atas 95%.
- Interoperabilitas dijamin melalui test vector dari NIST dan implementasi lain, sementara operasi aritmetika field dasar diuji secara menyeluruh dengan membandingkannya terhadap nilai yang diharapkan.
- Sebagai bagian dari proyek CCTV, test vector yang dapat digunakan ulang oleh implementasi lain juga dipublikasikan.
Performa
- Performa bukan tujuan utama, tetapi paket ini tetap harus cukup cepat agar berguna.
- ML-KEM sudah cukup cepat, dan implementasi sederhana ini dapat bersaing dengan implementasi P-256 dan X25519 yang dioptimalkan dengan assembly.
- Untuk meningkatkan performa, berbagai upaya dilakukan seperti mengikuti pola pemrograman Go dan meminimalkan alokasi heap.
Menggunakan Implementasi ML-KEM sebagai Kyber v3
- NIST membuat beberapa perubahan kecil pada submission Round 3 dari Kyber.
- Sejumlah protokol eksperimental didefinisikan berdasarkan Kyber v3 (atau "draft00"), tetapi tidak perlu membuat paket terpisah.
- ML-KEM dapat digunakan untuk menghasilkan shared secret K, lalu derivasi kunci tambahan dapat diterapkan untuk menghasilkan shared secret Kyber.
Opini GN⁺
- Pentingnya kriptografi tahan kuantum: Seiring kemajuan komputasi kuantum, teknologi enkripsi yang ada saat ini bisa menjadi rentan, sehingga pengembangan dan standardisasi teknologi kriptografi tahan kuantum seperti ML-KEM sangat penting.
- Ekstensibilitas bahasa Go: Implementasi ini menunjukkan ekstensibilitas dan fleksibilitas bahasa Go, dan rencana integrasinya ke pustaka standar menjadikannya sumber daya yang berguna bagi komunitas pengembang Go.
- Nilai edukasi: Pendekatan yang menekankan keterbacaan kode dan nilai edukasi akan sangat membantu sebagai sumber belajar bagi generasi berikutnya dari engineer kriptografi dan pengembang yang tertarik.
1 komentar
Komentar Hacker News
Pertanyaan tentang kondisi terkini komputasi kuantum
Sapaan dan berbagi dari Kudelski Security
Rekomendasi buku tentang sistem kriptografi yang diimplementasikan dalam Go
Pertanyaan tentang implementasi dalam bahasa lain (Java, C#, dll.)
Kekhawatiran tentang implementasi murni yang ditulis dalam Go
Ketertarikan dan pertanyaan tentang dukungan Kyber v3
Lelucon tentang tabel system call 32-bit
Apresiasi terhadap penggunaan nama variabel Unicode
Pujian untuk proyek lain dari FiloSottile
Berbagi tautan dokumen NIST FIPS 203