Keychain mengabstraksi backend penandatanganan, tetapi mengoperasikan penanda tangan di produksi tetap menjadi tanggung jawab Anda. Praktik-praktik ini berlaku di semua backend; lihat Memilih backend untuk memilih salah satunya.
Pisahkan penanda tangan hot dan cold
Gunakan penanda tangan operasional bersaldo rendah ("hot") untuk transaksi yang sering dan otomatis, serta penanda tangan bernilai tinggi ("cold") yang terpisah untuk pergerakan kas. Dukung penanda tangan cold dengan kustodi MPC atau cloud HSM dan terapkan kebijakan persetujuan sebelum penandatanganan. Karena antarmukanya identik, setiap peran dapat menggunakan backend yang berbeda tanpa mengubah lokasi pemanggilan.
Rotasi kunci secara terencana
Di Solana, kunci penandatanganan adalah alamat akun, sehingga merotasi kunci menghasilkan alamat baru. Rencanakan rotasi sebagai migrasi: provisikan kunci baru, tetapkan kembali otoritas yang relevan (atau pindahkan dana) ke alamat baru, lalu nonaktifkan yang lama. Gunakan kunci berbeda per lingkungan agar kunci devnet tidak pernah digunakan ulang di mainnet.
Berikan akses hak istimewa minimal
Batasi kredensial setiap backend hanya sebatas yang diperlukan untuk menandatangani. Untuk AWS KMS,
itu adalah kms:Sign, kms:DescribeKey, dan kms:GetPublicKey pada kunci yang spesifik
(pemeriksaan ketersediaan menggunakan dua yang terakhir); utamakan peran IAM daripada
kredensial statis. Terapkan prinsip yang sama pada kebijakan Vault dan kunci API
wallet terkelola.
Rencanakan ketersediaan
Backend jarak jauh bergantung pada layanan jaringan. Periksa ketersediaan sebelum mengandalkan
sebuah signer (isAvailable() di TypeScript, is_available() di Rust dan Python,
IsAvailable(ctx) di Go), coba ulang kegagalan yang hanya melibatkan penandatanganan dengan backoff, dan tentukan
jalur cadangan untuk saat terjadi gangguan. Jangan mencoba ulang backend yang melakukan broadcast secara membabi buta
(Crossmint, mode otomatis native Fordefi): lihat
Tangani broadcast yang belum terkonfirmasi. Keychain
memberlakukan HTTPS pada base URL yang dikonfigurasi, menolak pengalihan (redirect), dan menerapkan batas waktu
permintaan default.
Tangani broadcast yang belum terkonfirmasi
Crossmint dan mode otomatis native Fordefi menandatangani dan melakukan broadcast di sisi server, sehingga panggilan yang
gagal tidak berarti tidak ada yang terkirim. Ketika penyedia mungkin telah menerima
transaksi, Keychain melaporkan BROADCAST_UNCONFIRMED
(SignerError::BroadcastUnconfirmed di Rust). Error ini membawa id
transaksi penyedia jika permintaan pembuatan diterima, dan selalu membawa kunci
idempotensi yang digunakan saat permintaan pembuatan dikirim, yang diturunkan dari pesan.
- Lakukan rekonsiliasi dengan penyedia menggunakan id transaksi sebelum melakukan hal lainnya.
- Mengirim ulang transaksi yang identik byte demi byte aman dilakukan: kunci idempotensi mencegah duplikasi.
- Membangun ulang transaksi (misalnya dengan blockhash baru) menghasilkan kunci baru dan karenanya transfer baru.
Lindungi rahasia dan transportasi
- Backend jarak jauh memberlakukan HTTPS pada base URL yang dikonfigurasi dan menolak pengalihan (redirect).
Satu-satunya pengecualian adalah Vault, yang menerima HTTP biasa pada loopback sehingga
vault server -devlokal dapat berfungsi. - Sediakan kunci API, token, dan kredensial dari pengelola rahasia atau variabel lingkungan — jangan pernah menyandikannya secara langsung atau menyimpannya ke kontrol sumber.
- Keychain membersihkan respons kesalahan untuk menghindari kebocoran rahasia ke log; jaga pencatatan Anda sendiri bebas dari kredensial mentah dan materi kunci.
Pantau dan audit penandatanganan
Lacak tingkat keberhasilan penandatanganan, latensi, dan jumlah kegagalan, serta beri peringatan pada lonjakan — lihat metrik di Kesiapan Produksi. Aktifkan log audit sisi penyedia (KMS, Vault, atau kustodian) dan rekonsiliasi dengan transaksi yang diajukan aplikasi Anda.
Ketahui apa yang diperiksa Keychain
- Keychain memvalidasi tahap penandatanganan, bukan transaksi Anda: tidak ada simulasi, tidak ada pemeriksaan isi transaksi, dan tidak ada mesin kebijakan. Terapkan hal tersebut di aplikasi Anda atau pada kontrol kebijakan penyedia.
- Mode manual native Fordefi menulis ulang transaksi (blockhash, instruksi biaya Compute Budget) sebelum menandatanganinya. Lanjutkan dari transaksi yang dikembalikan, bukan yang Anda kirimkan, dan jalankan sebelum signer lainnya.
- Rust melakukan zeroize pada buffer kunci perantara; Python dan Go tidak bisa. Dengan backend Memory di bahasa-bahasa tersebut, perlakukan seluruh memori proses sebagai data sensitif.
- Dengan Ledger, layar perangkat adalah satu-satunya deskripsi yang dapat dipercaya tentang apa yang
sedang ditandatangani. Jangan aktifkan fitur
unsafe-debugatau loggingTRACEuntuksolana_remote_walletdi produksi, karena keduanya mencatat detail perangkat dan transaksi.
Lihat model keamanan untuk gambaran lengkapnya.
Is this page helpful?