Go kapal dengan suite lengkap paket enkripsi di perpustakaan standar untuk membantu pengembang membangun aplikasi yang aman. untuk menyelesaikan audit dari paket inti yang juga validasi sebagai bagian dari Audit menghasilkan satu temuan tingkat rendah, yang tidak didukung. , dan beberapa temuan informatif. teks lengkap laporan audit dapat ditemukan . Perjalanan dari Bits Modul FIPS 140-3 yang baru Integrasi Go+BoringCrypto di sini Bidang audit termasuk implementasi pertukaran kunci (ECDH dan post-quantum ML-KEM), tanda tangan digital (ECDSA, RSA, dan Ed25519), enkripsi (AES-GCM, AES-CBC, dan AES-CTR), hashing (SHA-1, SHA-2, dan SHA-3), derivasi kunci (HKDF dan PBKDF2), dan otentikasi (HMAC), serta generator angka acak kriptografis. implementasi kurva besar tingkat rendah dan kurva eliptik, dengan inti perakitan mereka yang halus, dimasukkan. protokol tingkat tinggi seperti TLS dan X.509 tidak termasuk. Kami bangga dengan catatan keamanan paket kriptografi Go, dan hasil audit ini, yang hanya salah satu dari banyak cara kami mendapatkan jaminan tentang keakuratan paket. yang memfokuskan pada keamanan atas kinerja.Selain itu, kita Dengan berbagai teknik yang berbeda. kami membuat titik untuk memanfaatkan API yang aman bahkan untuk paket internal, dan tentu saja kami dapat mengandalkan properti bahasa Go untuk menghindari masalah manajemen memori. Prinsip kriptografi Menguji mereka secara menyeluruh Penemuan yang rendah Satu-satunya masalah yang berpotensi dimanfaatkan, TOB-GOCL-3, telah , yang berarti itu memiliki dampak kecil dan sulit untuk memicu. masalah ini telah diperbaiki di Go 1.24. Seriusitas rendah Tipe-tipe yang digunakan dalam penelitian ini adalah TOC ( c) Manajemen memori dalam yang tidak diaktifkan secara default dan tidak didukung untuk digunakan di luar Google. dibahas lebih lanjut di bawah Legacy Go+BoringCrypto Eksperimen 5 Temuan Informasi Temuan yang tersisa adalah , yang berarti mereka tidak menimbulkan risiko langsung tetapi relevan dengan praktik terbaik keamanan. kami membahas ini dalam pohon pengembangan Go 1.25 saat ini. Informasi Temuan TOB-GOCL-1, TOB-GOCL-2, dan TOB-GOCL-6 berkaitan dengan kemungkinan saluran samping waktu dalam berbagai operasi kriptografis. Dari tiga temuan ini, hanya TOB-GOCL-2 mempengaruhi operasi yang diharapkan menjadi konstan waktu karena beroperasi pada nilai rahasia, tetapi hanya mempengaruhi target Power ISA (GOARCH ppc64 dan ppc64le). TOB-GOCL-4 menyoroti risiko penyalahgunaan dalam API internal, jika harus digunakan kembali di luar kasus penggunaan saat ini. Menampilkan Side-Channels Temuan TOB-GOCL-1, TOB-GOCL-2, dan TOB-GOCL-6 berkaitan dengan saluran samping waktu yang lebih kecil. TOB-GOCL-1 dan TOB-GOCL-6 terkait dengan fungsi yang tidak kita gunakan untuk nilai-nilai sensitif, tetapi dapat digunakan untuk nilai-nilai tersebut di masa depan, dan TOB-GOCL-2 terkait dengan implementasi perakitan P-256 ECDSA pada Power ISA. : konversi dari byte ke elemen bidang tidak konstan waktu (TOB-GOCL-1) crypto/ecdh,crypto/ecdsa Implementasi internal dari kurva elips NIST memberikan metode untuk mengkonversi elemen lapangan antara representasi internal dan eksternal yang beroperasi dalam waktu yang bervariasi. Semua penggunaan metode ini beroperasi pada input publik yang tidak dianggap rahasia (nilai publik ECDH, dan kunci publik ECDSA), jadi kami memutuskan bahwa ini bukan masalah keamanan. , untuk mencegah secara tidak sengaja menggunakan metode ini di masa depan dengan nilai-nilai rahasia, dan sehingga kita tidak perlu berpikir tentang apakah itu masalah atau tidak. membuat metode waktu konstan bagaimanapun P-256 negasi kondisional tidak konstan waktu dalam Power ISA assembly (TOB-GOCL-2, CVE-2025-22866) crypto/ecdsa Selain dari , Go juga mendukung sejumlah platform tambahan, termasuk beberapa arsitektur yang kurang umum.Pada saat meninjau implementasi assembly kami dari berbagai primitif kriptografi yang mendasarinya, tim Trail of Bits menemukan satu masalah yang mempengaruhi implementasi ECDSA pada arsitektur ppc64 dan ppc64le. Kelas Pertama Platform Karena penggunaan instruksi cabang bersyarat dalam implementasi negasi bersyarat P-256 titik, fungsi beroperasi dalam variabel-waktu, bukan konstan-waktu, seperti yang diharapkan. dengan pola yang sudah kita gunakan di tempat lain untuk secara kondisional memilih hasil yang benar dalam waktu konstan. kita menetapkan masalah ini CVE-2025-22866. Menggantikan Perintah Branching Kondisional Untuk memprioritaskan kode yang mencapai sebagian besar pengguna kami, dan karena pengetahuan khusus yang dibutuhkan untuk menargetkan ISA tertentu, kami umumnya mengandalkan kontribusi komunitas untuk mempertahankan assembly untuk platform non-kelas pertama. Scalar.SetCanonicalBytes bukanlah waktu konstan (TOB-GOCL-6) crypto/ed25519 Paket internal edwards25519 menyediakan metode untuk mengkonversi antara representasi internal dan eksternal skalar yang beroperasi dalam waktu variabel. Metode ini hanya digunakan pada input tanda tangan ke ed25519.Verify, yang tidak dianggap rahasia, jadi kami memutuskan bahwa ini bukan masalah keamanan. , untuk mencegah secara tidak sengaja menggunakan metode ini di masa depan dengan nilai-nilai rahasia, dan karena kami menyadari bahwa orang-orang membongkar kode ini di luar perpustakaan standar, dan mungkin menggunakannya dengan nilai-nilai rahasia. membuat metode waktu konstan bagaimanapun Manajemen Memori Cgo Menemukan TOB-GOCL-3 berkaitan dengan masalah manajemen memori dalam integrasi Go+BoringCrypto. : finisher khusus dapat membebaskan memori pada awal panggilan fungsi C menggunakan memori ini (TOB-GOCL-3) crypto/ecdh Selama ulasan, ada sejumlah pertanyaan tentang integrasi Go+BoringCrypto berbasis cgo kami, yang menyediakan mode enkripsi yang sesuai dengan FIPS 140-2 untuk penggunaan internal di Google. Tim Trail of Bits menemukan satu kerentanan dan satu , keduanya adalah hasil dari manajemen memori manual yang diperlukan untuk berinteraksi dengan pustaka C. Karena tim Go tidak mendukung penggunaan kode ini di luar Google, kami telah memilih untuk tidak mengeluarkan entri database kerentanan CVE atau Go untuk masalah ini, tetapi kami . non-security bug yang relevan Menyelesaikan masalah ini dengan 1.24 Jenis jebakan ini adalah salah satu dari banyak alasan mengapa kami memutuskan untuk menjauh dari integrasi Go+BoringCrypto. yang menggunakan paket kriptografi Go murni biasa, memungkinkan kita untuk menghindari semantik cgo yang kompleks demi model memori Go tradisional. Menggunakan FIPS 140-3 Implementasi lengkap Temuan TOB-GOCL-4 dan TOB-GOCL-5 berkaitan dengan implementasi terbatas dari dua spesifikasi, dan . Spesifikasi NIST SP 800-90A RFC 8018 CTR_DRBG API memiliki beberapa risiko penyalahgunaan (TOB-GOCL-4) crypto/internal/fips140/drbg Sebagai bagian dari Sebelum kami memperkenalkan, kami membutuhkan implementasi NIST CTR_DRBG (generator bit acak deterministik berbasis AES-CTR) untuk memberikan randomness yang mematuhi. Menggunakan FIPS 140-3 Karena kami hanya membutuhkan subset kecil dari fungsionalitas NIST SP 800-90A Rev. 1 CTR_DRBG untuk tujuan kami, kami tidak menerapkan spesifikasi penuh, khususnya melewatkan fungsi derivasi dan string personalisasi. Karena implementasi kami terfokus secara ketat ke kasus penggunaan spesifik yang kami butuhkan, dan karena implementasi tidak diekspor secara publik, kami memutuskan bahwa ini dapat diterima dan layak karena kompleksitas implementasi yang berkurang. Hal ini memperjelas keterbatasan tersebut. Menambahkan peringatan pada dokumen PBKDF2 tidak menegakkan batasan panjang output (TOB-GOCL-5) crypto/pbkdf2 Di Go 1.24, kami memulai proses memindahkan paket dari masuk ke perpustakaan standar, berakhir dengan pola yang membingungkan di mana paket enkripsi Go pertama, berkualitas tinggi, dan stabil disimpan di luar perpustakaan standar tanpa alasan khusus. Golang.org/x dan Crypto Sebagai bagian dari proses ini, kami memindahkan paket ke perpustakaan standar, seperti crypto/pbkdf2. saat meninjau paket ini, tim Trail of Bits memperhatikan bahwa kami tidak menegakkan batas pada ukuran kunci derivatif yang didefinisikan dalam . golang.org/x/crypto/pbkdf2 RFC 8018 Batasnya adalah Ketika menggunakan SHA-256, melebihi batas akan mengambil kunci lebih dari 137GB. Kami tidak mengharapkan siapa pun pernah menggunakan PBKDF2 untuk menghasilkan kunci yang begitu besar, terutama karena PBKDF2 menjalankan iterasi pada setiap blok, tetapi demi keakuratan, kami . (2^32 - 1) * <hash length> sekarang mematuhi batas seperti yang ditetapkan oleh standar Apa yang selanjutnya Hasil audit ini memvalidasi upaya tim Go dalam mengembangkan perpustakaan kriptografi berkualitas tinggi, mudah digunakan dan harus memberikan kepercayaan kepada pengguna kami yang mengandalkan mereka untuk membangun perangkat lunak yang aman dan aman. Kami tidak beristirahat di laurel kami, bagaimanapun: kontributor Go terus mengembangkan dan meningkatkan perpustakaan kriptografi yang kami berikan kepada pengguna. Go 1.24 sekarang mencakup mode FIPS 140-3 yang ditulis dalam Go murni, yang saat ini sedang menjalani pengujian CMVP. Ini akan menyediakan mode kompatibel FIPS 140-3 yang didukung untuk semua pengguna Go, menggantikan integrasi Go+BoringCrypto yang saat ini tidak didukung. Kami juga bekerja untuk menerapkan kriptografi pasca-kuantum modern, memperkenalkan implementasi ML-KEM-768 dan ML-KEM-1024 di Go 1.24 di , dan menambahkan dukungan untuk paket crypto/tls untuk pertukaran kunci hibrida X25519MLKEM768 . Paket Kripto/Milk Akhirnya, kami berencana untuk memperkenalkan API enkripsi tingkat tinggi baru yang lebih mudah digunakan, yang dirancang untuk mengurangi hambatan untuk memilih dan menggunakan algoritma berkualitas tinggi untuk kasus penggunaan dasar. kami berencana untuk mulai dengan menawarkan API hashing kata sandi sederhana yang menghilangkan kebutuhan bagi pengguna untuk memutuskan mana dari seribu algoritma yang mungkin mereka harus mengandalkan, dengan mekanisme untuk secara otomatis bermigrasi ke algoritma yang lebih baru sebagai perubahan state-of-the-art. Roland Shoemaker dan Filippo Valsorda Artikel ini tersedia di The Go Blog di bawah lisensi CC BY 4.0 DEED. Blog yang Go Blog yang Go Foto oleh Batyrkhan Shalgimbekov di Unsplash Batyrkhan Shalgimbekov Unsplash yang