Jauhkan kunci trading dan secret aplikasi dari disk server

erpc worker menyimpan kunci trading dan secret aplikasi di 1Password, rantai kunci Anda, atau keystore terenkripsi, lalu menyerahkannya ke aplikasi di memori, tidak pernah ke disk server.
Halaman ini menjelaskan ERPC CLI v0.1.0-rc.4, versi pra-rilis.

Cara kunci trading sampai ke aplikasi

Aplikasi yang memiliki wallet menerima kuncinya melalui pipe saat mulai berjalan. Tidak ada wallet.json, tidak ada .env, dan tidak ada salinan di server. erpc tidak menulis kunci ke disk mana pun tanpa enkripsi: satu-satunya file tempat erpc menaruhnya adalah file milik keystore, di mesin Anda, terenkripsi dengan frasa sandi Anda.
  • Tempat kunci disimpan: erpc worker key new membuat kunci di 1Password jika erpc login menyimpan sesi di sana, jika tidak di rantai kunci, dan jika tidak juga, di keystore. erpc.toml mencatat referensi kunci dan kunci publiknya.
  • Di server: agen erpc worker menyimpan kunci hanya di memori. Agen ini membuat dirinya tidak dapat di-dump dan mengunci memorinya, lalu menyerahkan kunci ke aplikasi melalui file descriptor; aplikasi menghapus bersih kunci tersebut setelah membacanya.
  • Setelah reboot, worker kembali dalam keadaan terkunci: aplikasi tidak berjalan sampai erpc worker start mengirim kunci lagi. Agen yang gagal atau dimatikan dijalankan kembali oleh systemd dan kembali terkunci dengan cara yang sama.
  • Update package tidak me-restart worker. deploy memberi tahu needrestart agar tidak menyentuh unit worker: dalam mode otomatisnya, alat ini menunda unit tersebut, dan jika ditanya di terminal, jawaban default-nya untuk unit tersebut adalah tidak, sehingga update keamanan tanpa pengawasan tidak me-restart aplikasi. Jika aturan tersebut tidak dapat ditulis, deploy menyebutkannya dan tetap berlanjut, dan worker kemudian berjalan tanpa perlindungan ini.
Kunci trading disebut oleh [wallet] dan tidak oleh hal lain, dan erpc membacanya hanya untuk orang yang berada di terminal: tidak untuk tool AI, dan tidak dengan service account 1Password. Baris [secrets] yang menyebut referensi [wallet], atau akun keychain: atau keystore: yang berakhiran .wallet, ditolak. Di keystore, entri yang disimpan sebagai kunci tidak dapat dibuka sebagai secret. Di 1Password, dan di bawah akun rantai kunci dengan nama lain, tidak ada yang menandai sebuah kunci: jika erpc.toml tanpa [wallet] menyebut item seperti itu di bawah [secrets], item tersebut dibaca sebagai secret.

Pilih tempat nilai disimpan

1Password bersifat opsional. erpc worker key new dan erpc worker secret put menyimpan apa yang diberikan kepadanya di tempat pertama yang berlaku dari daftar berikut, kecuali --store menyebut salah satunya (--store 1password --vault <id>, --store keychain, --store keystore):
  1. 1Password, jika erpc login menyimpan sesi di sana atau --vault diberikan.
  2. Rantai kunci sistem operasi, di sistem yang rantai kuncinya menyimpan nilai melewati reboot: macOS, Windows, dan Linux dengan keyring desktop dalam sesi yang sudah login.
  3. Keystore milik erpc, di mesin Linux tanpa keyring seperti itu: server headless, WSL, login SSH. --store keychain di mesin seperti itu ditolak.
Di rantai kunci atau keystore, kunci hanya ada di satu mesin itu, tanpa salinan dan tanpa sinkronisasi, dan mesin lain tidak dapat membaca referensi keychain: atau keystore:.
Mesin yang hilang atau dihapus bersih isinya berarti wallet ikut hilang: simpan sedikit saja di dalamnya, atau gunakan 1Password, yang dapat dibaca oleh setiap mesin yang sudah masuk ke vault. Masuk ke 1Password dengan erpc login --store 1password-desktop, atau melalui op signin jika tidak ada aplikasi desktop.
Service account 1Password dapat menyimpan secret aplikasi, tetapi erpc tidak membaca kunci trading dengannya. Dengan 1Password, setiap pembacaan dapat memunculkan prompt persetujuan di aplikasinya, dan erpc menampilkan spinner selama menunggu.

Simpan secret

Secret, seperti token API dan RPC key, disimpan dengan cara yang sama, tetapi sampai ke aplikasi sebagai variabel lingkungan, bukan melalui pipe. erpc worker secret put <NAME> menyimpan nilainya, dan [secrets] di erpc.toml hanya berisi referensinya.
bash
erpc worker secret put API_TOKEN --generate          # the bot's own API token, made for you and shown to nobody
erpc worker secret put ERPC_API_KEY --from-account   # the account's RPC key, read from your account (or SOLANA_RPC_ENDPOINT in [vars])
  • --generate membuat nilainya: 32 byte acak, dalam bentuk 64 karakter heksadesimal.
  • --from-account menyimpan RPC key pertama dari akun Anda yang diterima oleh shared RPC. Kunci dicoba secara berurutan, dimulai dari kunci utama, dengan satu getHealth untuk masing-masing, yang diberi waktu 8 detik untuk menjawab. Kunci yang mendapat jawaban 401 atau 403 ditolak dan kunci berikutnya dicoba, dan hanya kunci yang diterima RPC yang disimpan. Perintah ini menyebutkan apakah kunci tersebut adalah kunci utama akun atau kunci lain (account_key dengan --json).
  • Kedua nilai tersebut tidak dicetak, bahkan dengan --json. Penggunaan pertama keystore, atau keystore yang terkunci, memerlukan orang di terminal.
  • Kunci dicoba dari mesin ini, sehingga kunci yang dibatasi ke alamat server ditolak di sini meskipun berfungsi di sana. Jika semua kunci ditolak, --from-account tidak menyimpan apa pun, dan Anda menyimpan kunci yang Anda maksud secara manual, diketik tanpa ditampilkan atau dikirim melalui pipe. Jika RPC tidak dapat dihubungi, perintah ini tidak menyimpan apa pun dan erpc.toml tetap seperti semula; jalankan perintah yang sama sekali lagi.
Untuk menyimpan kunci secara manual:
bash
erpc worker secret put ERPC_API_KEY        # asks for the value, unseen
  • --replace menyimpan nilai baru untuk nama yang sudah diatur. erpc worker secret list menampilkan pengaturan secret berdasarkan nama dan tempat masing-masing disimpan.
  • Pengaturan yang disediakan oleh line data (GRPC_ENDPOINT, SHREDS_ENDPOINT, SOLANA_SEND_RPC_ENDPOINT) tidak pernah menjadi secret: --grpc, --shreds, dan --unlimited yang menetapkannya.
Referensi di [secrets] atau [wallet] adalah salah satu dari berikut:
ReferensiTempat nilai berada
op://<vault-id>/<item-id>/<field>1Password, berdasarkan id vault dan id item
keychain:<service>/<account>Rantai kunci sistem operasi di mesin yang menyimpannya
keystore:<service>/<account>Keystore milik erpc di mesin yang menyimpannya

Keystore

Keystore adalah direktori ~/.erpc/keystore (keystore di bawah ERPC_HOME jika variabel tersebut diatur). Di Linux dan macOS, direktorinya berizin 0700 dan file-nya 0600; di Windows, erpc tidak menetapkan izin sendiri.
  • master.json berisi kunci master acak 32 byte, yang disegel dengan kunci yang dibuat oleh PBKDF2-HMAC-SHA256 (600.000 iterasi) dari frasa sandi Anda. Setiap entri berisi satu nilai, yang disegel dengan ChaCha20-Poly1305 menggunakan kuncinya sendiri.
  • Frasa sandi: key new atau secret put pertama yang memakai keystore meminta Anda memilihnya, diketik dua kali di terminal, minimal 12 karakter. erpc mengambilnya hanya dari prompt tersembunyi tersebut, tidak pernah dari argumen, variabel lingkungan, atau pipe.
  • Membuka kunci di Linux: setelah frasa sandi membuka keystore, hasil buka kunci tersebut disimpan di keyring persisten milik kernel, di memori, sampai mesin di-restart, keyring tidak dipakai selama masa kedaluwarsa idle-nya (tiga hari, kecuali sistem menentukan lain), atau erpc worker secret lock dijalankan. erpc worker secret unlock meminta frasa sandi lebih awal dan menyebutkan sampai kapan hasil buka kunci tersebut berlaku. Di shell yang dijalankan tanpa login sendiri (su tanpa -, sudo -E), hasil buka kunci tidak disimpan dan setiap perintah akan meminta frasa sandi.
  • Tanpa orang di terminal, perintah yang memerlukan keystore memakai hasil buka kunci jika ada, dan jika tidak ada, perintah gagal sambil menyebutkan erpc worker secret unlock. Keystore yang sudah dibuka kuncinya menyerahkan secret, bukan kunci trading.
  • Di macOS dan Windows (--store keystore), hasil buka kunci tidak disimpan: setiap perintah yang memerlukan keystore meminta frasa sandi satu kali, sehingga memerlukan terminal.

Yang dilindungi keystore, dan yang tidak

  • Backup direktori keystore dan ingat frasa sandinya. erpc tidak dapat memulihkan satu pun dari keduanya, dan jika salah satunya tidak ada, isi keystore hilang.
  • Siapa pun yang memiliki file keystore dan frasa sandinya memiliki kuncinya. PBKDF2 membuat setiap tebakan menjadi lambat, tetapi tidak membuat frasa sandi yang mudah ditebak menjadi aman.
  • Selama keystore sudah dibuka kuncinya, program apa pun yang berjalan sebagai Anda dapat membaca kunci master dari keyring kernel (program yang sesinya tidak memegang keyring Anda dapat menautkannya ke sesinya) dan membuka setiap entri, termasuk entri sebuah kunci. Aturan erpc sendiri (kunci yang disebut oleh [wallet] hanya dibaca untuk orang yang berada di terminal, tidak pernah untuk tool AI; kunci yang disimpan di keystore tidak pernah dibuka sebagai secret) adalah apa yang dilakukan erpc; aturan itu tidak mengikat program lain yang berjalan sebagai Anda. Jalankan erpc worker secret lock setelah Anda selesai.
  • Nama entri tidak disembunyikan, dan ukuran entri menunjukkan panjang nilainya.
  • File yang diubah tidak dapat dibuka; salinan lama dari entri yang sama yang dikembalikan ke tempatnya tetap dapat dibuka.
  • erpc worker secret rm menghapus entri keystore milik secret beserta barisnya di erpc.toml (kecuali pengaturan lain di aplikasi menyebut entri yang sama), dan membiarkan nilai di 1Password atau rantai kunci tetap di tempatnya. Perintah ini tidak membersihkan disk, dan salinan di backup Anda tetap ada.
  • erpc tidak pernah menghapus atau menimpa entri kunci trading. Untuk mengganti kunci, pindahkan dananya, lalu hapus sendiri file dan [wallet] milik kunci tersebut.
  • Pengaturan tidak dapat diberi nama WALLET, dengan kombinasi huruf besar dan kecil apa pun, di keystore atau rantai kunci; --store 1password menerima nama tersebut.

Bekerja dengan kunci trading

PerintahFungsinya
erpc worker key newMembuat kunci trading dan mencetak kunci publik yang perlu diisi dana
erpc worker key import <FILE>Memindahkan file kunci ke 1Password, rantai kunci, atau keystore, lalu menawarkan untuk menghapus bersih file tersebut
erpc worker key showMenampilkan kunci publik dari kunci tersebut dan tempat kunci disimpan
erpc worker key balanceMenampilkan saldo kunci, melalui pengaturan RPC milik aplikasi itu sendiri
erpc worker key send --to <ADDRESS> --sol <N>Menandatangani satu transfer di memori setelah Anda menjawab "ya" di terminal. --all mengirim semuanya kecuali biaya transaksi
Jika erpc berhenti tanpa mengetahui apakah transfer berhasil masuk, periksa signature-nya sebelum Anda mengirim lagi: pengiriman kedua adalah transfer kedua.