De tradingsleutel en secrets van een app weghouden van de schijf van de server

erpc worker bewaart de tradingsleutel en de secrets van een app in 1Password, uw sleutelhanger of een versleutelde keystore, en geeft ze in het geheugen aan de app, nooit aan de schijf van de server.
Deze pagina beschrijft ERPC CLI v0.1.0-rc.4, een pre-release.

Hoe de tradingsleutel de app bereikt

Een app met een wallet krijgt de sleutel via een pipe wanneer hij start. Er is geen wallet.json, geen .env en geen kopie op de server. erpc schrijft de sleutel op geen enkele schijf onversleuteld weg: het enige bestand waarin het de sleutel zet, is dat van de keystore, op uw machine, versleuteld met uw wachtzin.
  • Waar hij wordt bewaard: erpc worker key new maakt de sleutel in 1Password als erpc login de sessie daar bewaart, anders in de sleutelhanger, anders in de keystore. erpc.toml legt de verwijzing naar de sleutel en de publieke sleutel vast.
  • Op de server: de agent van erpc worker houdt de sleutel alleen in het geheugen. Hij maakt zichzelf ondumpbaar, vergrendelt zijn geheugen en geeft de sleutel via een file descriptor aan de app; de app wist hem na het lezen.
  • Na een herstart komt de worker vergrendeld terug: de app draait pas als erpc worker start de sleutel opnieuw stuurt. Een agent die faalt of geforceerd wordt beëindigd, wordt door systemd opnieuw gestart en komt op dezelfde manier vergrendeld terug.
  • Een pakketupdate herstart een worker niet. deploy vertelt needrestart de worker-units met rust te laten: in de automatische modus stelt het ze uit, en als het aan een terminal wordt gevraagd, is het standaardantwoord voor die units nee, zodat een beveiligingsupdate zonder toezicht de app niet herstart. Als die regel niet kon worden geschreven, meldt de uitrol dat en gaat hij door, en draait de worker daarna zonder deze bescherming.
De tradingsleutel wordt genoemd door [wallet] en door niets anders, en erpc leest hem alleen voor iemand aan de terminal: niet voor een AI-tool, en niet met een serviceaccount van 1Password. Een regel in [secrets] die de verwijzing van [wallet] noemt, of een account onder keychain: of keystore: dat eindigt op .wallet, wordt geweigerd. In de keystore gaat een item dat als sleutel is bewaard niet open als secret. In 1Password, en onder een sleutelhangeraccount met een andere naam, markeert niets een sleutel: noemt een erpc.toml zonder [wallet] zo'n item onder [secrets], dan wordt het als secret gelezen.

Kiezen waar waarden worden bewaard

1Password is optioneel. erpc worker key new en erpc worker secret put bewaren wat ze krijgen in de eerste van deze opties die van toepassing is, tenzij --store er een noemt (--store 1password --vault <id>, --store keychain, --store keystore):
  1. 1Password, als erpc login de sessie daar bewaart of als --vault is opgegeven.
  2. De OS-sleutelhanger, waar die een waarde over een herstart heen bewaart: macOS, Windows, en Linux met een desktop-keyring in een ingelogde sessie.
  3. De keystore van erpc, op een Linux-machine zonder zo'n keyring: een headless server, WSL, een SSH-login. --store keychain wordt op zo'n machine geweigerd.
In de sleutelhanger of de keystore bestaat de sleutel alleen op die ene machine, zonder kopie en zonder synchronisatie, en een andere machine kan een verwijzing met keychain: of keystore: niet lezen.
Een verloren of gewiste machine betekent dat de wallet weg is: houd er weinig in, of gebruik 1Password, dat elke machine kan lezen die bij de kluis is ingelogd. Log in bij 1Password met erpc login --store 1password-desktop, of via op signin waar geen desktop-app is.
Een serviceaccount van 1Password kan de secrets van een app bevatten, maar erpc leest er geen tradingsleutel mee. Met 1Password kan elke leesactie een goedkeuringsprompt in de app tonen, en erpc toont een spinner terwijl het wacht.

Een secret bewaren

Secrets, zoals API-tokens en RPC-keys, worden op dezelfde manier bewaard, maar bereiken de app als omgevingsvariabelen, niet via een pipe. erpc worker secret put <NAME> bewaart de waarde, en [secrets] in erpc.toml bevat alleen de verwijzing ernaar.
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 maakt de waarde: 32 willekeurige bytes, als 64 hexadecimale tekens.
  • --from-account bewaart de eerste RPC-key van uw account die de shared RPC accepteert. De keys worden op volgorde geprobeerd, de primaire eerst, met één getHealth per key, die 8 seconden krijgt om te antwoorden. Een key die met 401 of 403 wordt beantwoord, wordt geweigerd en de volgende wordt geprobeerd, en alleen een key die de RPC heeft geaccepteerd, wordt bewaard. Het commando meldt of het de primaire key van het account is of een andere (account_key met --json).
  • Geen van beide waarden wordt afgedrukt, ook niet met --json. Het eerste gebruik van de keystore, of een vergrendelde keystore, vereist iemand aan de terminal.
  • De keys worden vanaf deze machine geprobeerd, dus een key die beperkt is tot het adres van de server, wordt hier geweigerd, ook al werkt hij daar. Als elke key wordt geweigerd, bewaart --from-account niets, en bewaart u de bedoelde key zelf, onzichtbaar getypt of via een pipe ingevoerd. Als de RPC niet kon worden gevraagd, bewaart het niets en is erpc.toml ongewijzigd; voer hetzelfde commando opnieuw uit.
Om een key zelf te bewaren:
bash
erpc worker secret put ERPC_API_KEY        # asks for the value, unseen
  • --replace bewaart een nieuwe waarde voor een naam die al is ingesteld. erpc worker secret list toont de secret-instellingen op naam en waar elke instelling wordt bewaard.
  • Een instelling die een datalijn levert (GRPC_ENDPOINT, SHREDS_ENDPOINT, SOLANA_SEND_RPC_ENDPOINT), is nooit een secret: --grpc, --shreds en --unlimited stellen die in.
Een verwijzing in [secrets] of [wallet] is een van deze:
VerwijzingWaar de waarde staat
op://<vault-id>/<item-id>/<field>1Password, op kluis- en item-id
keychain:<service>/<account>De OS-sleutelhanger van de machine die de waarde heeft bewaard
keystore:<service>/<account>De keystore van erpc op de machine die de waarde heeft bewaard

De keystore

De keystore is de map ~/.erpc/keystore (keystore onder ERPC_HOME als die is ingesteld). Op Linux en macOS hebben de mappen 0700 en de bestanden 0600; op Windows stelt erpc zelf geen rechten in.
  • master.json bevat een willekeurige hoofdsleutel van 32 bytes, verzegeld onder een sleutel die PBKDF2-HMAC-SHA256 (600.000 iteraties) uit uw wachtzin afleidt. Elk item bevat één waarde, verzegeld met ChaCha20-Poly1305 onder een eigen sleutel.
  • De wachtzin: de eerste key new of secret put die de keystore gebruikt, laat u die kiezen, twee keer getypt aan een terminal, 12 tekens of meer. erpc accepteert hem alleen via die verborgen prompt, nooit via een argument, een omgevingsvariabele of een pipe.
  • Ontgrendelen op Linux: zodra de wachtzin de keystore heeft geopend, wordt de ontgrendeling in de persistente keyring van de kernel bewaard, in het geheugen, totdat de machine herstart, de keyring ongebruikt blijft gedurende zijn verlooptijd bij inactiviteit (drie dagen, tenzij het systeem iets anders zegt) of erpc worker secret lock wordt uitgevoerd. erpc worker secret unlock vraagt vooraf om de wachtzin en meldt tot wanneer de ontgrendeling geldt. In een shell die zonder eigen login is gestart (su zonder -, sudo -E), wordt geen ontgrendeling bewaard en vraagt elk commando erom.
  • Als er niemand aan een terminal zit, gebruikt een commando dat de keystore nodig heeft de ontgrendeling als die er is, en mislukt het anders, en noemt het daarbij erpc worker secret unlock. Een ontgrendelde keystore geeft secrets af, niet de tradingsleutel.
  • Op macOS en Windows (--store keystore) wordt geen ontgrendeling bewaard: elk commando dat de keystore nodig heeft, vraagt één keer om de wachtzin en heeft dus een terminal nodig.

Wat de keystore beschermt, en wat niet

  • Maak een back-up van de map keystore en onthoud de wachtzin. erpc kan geen van beide herstellen, en zonder een van beide is wat de keystore bevat verloren.
  • Wie de keystore-bestanden en de wachtzin heeft, heeft de sleutel. PBKDF2 maakt elke gok traag, maar maakt een te raden wachtzin niet veilig.
  • Zolang de keystore ontgrendeld is, kan elk programma dat onder uw gebruiker draait de hoofdsleutel uit de keyring van de kernel lezen (een programma waarvan de sessie uw keyring niet bevat, kan hem eraan koppelen) en elk item openen, ook dat van een sleutel. De eigen regels van erpc (de door [wallet] genoemde sleutel alleen lezen voor iemand aan de terminal, nooit voor een AI-tool; een sleutel die in de keystore is bewaard nooit als secret openen) zijn wat erpc doet; ze binden geen andere programma's die onder uw gebruiker draaien. Voer erpc worker secret lock uit als u klaar bent.
  • Itemnamen worden niet verborgen, en de grootte van een item laat zien hoe lang de waarde is.
  • Een gewijzigd bestand gaat niet open; een oudere kopie van hetzelfde item die op zijn plaats is teruggezet, wel.
  • erpc worker secret rm verwijdert het keystore-item van een secret samen met de regel ervan in erpc.toml (tenzij een andere instelling van de app hetzelfde item noemt), en laat een waarde in 1Password of de sleutelhanger staan waar die is. Het maakt de schijf niet veilig schoon, en kopieën in uw back-ups blijven bestaan.
  • erpc verwijdert of overschrijft nooit het item van een tradingsleutel. Om een sleutel te vervangen, verplaatst u eerst het geld en verwijdert u daarna zelf het bestand van de sleutel en [wallet].
  • Een instelling kan niet WALLET heten, ongeacht hoofdletters of kleine letters, in de keystore of de sleutelhanger; --store 1password accepteert die naam.

Werken met de tradingsleutel

CommandoWat het doet
erpc worker key newMaakt de tradingsleutel en drukt de publieke sleutel af om op te storten
erpc worker key import <FILE>Verplaatst een sleutelbestand naar 1Password, de sleutelhanger of de keystore en biedt daarna aan het bestand te wissen
erpc worker key showToont de publieke sleutel en waar de sleutel wordt bewaard
erpc worker key balanceToont het saldo van de sleutel, via de eigen RPC-instelling van de app
erpc worker key send --to <ADDRESS> --sol <N>Ondertekent één overboeking in het geheugen na uw ja aan een terminal. --all verstuurt alles behalve de transactiekosten
Als erpc eindigt zonder te weten of een overboeking is aangekomen, zoek dan de handtekening ervan op voordat u opnieuw verstuurt: een tweede verzending is een tweede overboeking.