Session keys a spending limits

Session keys a spending limits

Session kľúče a spending limity: pohodlie bez hazardu

Session kľúče a spending limity sú kľúčové nástroje, ktoré prenášajú pohodlie web2 do sveta web3 bez toho, aby zničili bezpečnostné záruky vlastného kľúča. Cieľom je umožniť opakovateľné podpisovanie a míňanie v presne ohraničenom rámci – bez nutnosti odomknúť primárny kľúč pri každej interakcii. V článku rozoberieme architektúry (smart kontrakt peňaženky, account abstraction), dizajn oprávnení, kryptografické a operačné detaily, a „edge cases“ typické pre DeFi a on-chain hry.

Problém: frikcia vs. bezpečnosť

  • Každé kliknutie „Sign/Confirm“ zvyšuje frikciu a riziko chýb používateľa (slepé podpisovanie, phishing).
  • Trvalé unlimited approvals (neobmedzené povolenia) sú pohodlné, no pri kompromitácii dApp/approve kontraktu vedú k katastrofám.
  • Cieľ: medzi manuálne podpisovať všetko a nechať otvorené dvere nájsť bezpečný stred – časovo a rozsahom obmedzené oprávnenia.

Čo je session kľúč

Session kľúč je dočasný kryptografický kľúč (alebo pár kľúčov), ktorému primárny vlastník deleguje presne ohraničené práva na podpisovanie transakcií v mene účtu/peňaženky. Typicky je viazaný na:

  • Čas (expirácia, TTL),
  • Rozsah (konkrétne kontrakty, funkcie, kolekcie tokenov),
  • Limity (denné/mimoriadne, per-tx stropy),
  • Prostredie (chain ID, dApp domain, relayer/pátracia logika).

Po expirácii alebo odvolaní je session kľúč bezcenný, čím sa minimalizuje „blast radius“ úniku.

Kde sa session kľúče používajú

  • On-chain hry a sociálne dApps: plynulé podpísanie desiatok úkonov bez odomykania hlavného kľúča.
  • DeFi exekúcia: sériové swapy, rebalansy, DCA/TWAP stratégiá s limitmi bez interakcie používateľa.
  • Podnikové prostredia: oddelenie operátorských práv od trezorového kľúča (treasury/ops model).

Architektúry: EOAs vs. smart kontrakt peňaženky

  • EOA-simulácia: delegácia pomocou podpisu meta-transakcií alebo „permit“ štandardov; právomoci sa uplatnia v cieľovom kontrakte.
  • Smart kontrakt peňaženky: pravidlá autorizácie sú on-chain (modulárne politiky, guardi). To umožňuje jemné ACL, spending limity, odvolanie a audit trail.
  • Account Abstraction: transakcie sú user operations s verifikátorom (validator), ktorý kontroluje session pravidlá a limity pred vykonaním.

Spending limity: dizajn a dimenzie

Spending limit je formálny rozpočet nad objemom, frekvenciou a adresátmi. Pre bezpečné nastavenie odporúčame kombinovať:

  • Objem: max. suma v natívnej mene, max. notional v stable (napr. 500 USDC/deň), max. počet NFT transferov.
  • Frekvencia: per-tx limit, per-block cap, per-časové okno (minúta/hodina/deň), „cool-down“ na vyčerpanie.
  • Adresy a funkcie: allowlist kontraktov, selektívne ABI funkcie (napr. swapExactTokensForTokens), zákaz „call arbitrary“.
  • Smery: iba pull (permit) alebo push (priame prevody); často oboje s inými limitmi.
  • Oracly: notional kalkulovaný z on-chain/bezpečného oracle, nie zo subjektívneho „spotu“ dApp.

Politiky overovania: pred transakciou vs. po transakcii

  • Pre-check: pravidlá sa uplatnia v peňaženke/verifikátore pred vykonaním (preferované; žiadny „rollback“ hazard).
  • Post-check: monitor a spätné zrušenie práv po detekcii anomálie (fallback; vyžaduje pausable/guard háky).

Dizajnové vzory oprávnení

  • Session ako modul: peňaženka načíta „policy modul“ s mapou sessionKey → ACL/limity/expirácia.
  • Permit-driven exekúcia: podpis „voucheru“ (permit) s doménou, funkciou, parametrami, deadlinom a nonce; dApp/relayer ho vykoná až po kontrole limitu.
  • Rollback-resistant approvals: schválenia (allowance) sú viazané na spender kontrakt s vlastnou politikou, nie na „neobmedzené“ ERC-20 allowances.

Prevádzkové aspekty: generovanie, uloženie a rotácia

  • Generovanie: session kľúč vytvára klient lokálne (WebCrypto/SE), podpíše ho primárny kľúč ako delegation.
  • Uloženie: v zabezpečenom úložisku (Secure Enclave, Android Keystore) alebo v HSM; nikdy nie v plain localStorage.
  • Rotácia: expirácia tvorená TTL + „idle timeout“; revokácia on-chain (záznam o zrušení) a off-chain (zabudnutie v klientoch/relayeroch).

Threat model: na čo si dať pozor

  • Phishing UI: session vytvorená pre iný kontrakt/doménu. Riešenie: doménové viazanie (EIP-712 domain separator), „origin pinning“.
  • Parameter smuggling: benigné funkcie s nečakanými calldata. Riešenie: striktne validovať selector, rozsah parametrov a príjemcov.
  • Reentrancy cez modul: volanie tretích strán v rámci policy hooku. Riešenie: checks-effects-interactions, guardi a reentrancy lock.
  • Oracle drift: notional kontrolovaný slabým oracle. Riešenie: viacnásobné feedy, percentuálne odchýlky a havarijné limity.
  • Relayer kompromitácia: vynútenie podpisu/odhalenie metadát. Riešenie: šifrované kanály, podpisovanie „intentu“ a schválenie on-chain policy.

Spending limity pre tokeny: praktické vzory

  • Per-asset cap: napr. 200 USDC/deň, 0,05 ETH/deň; reset v pevnom okne (UTC) alebo klzavé okno (rolling).
  • Per-protocol cap: celkový notional cez konkrétny router (DEX) – bráni „approval driftu“ na iné smery.
  • Per-destination cap: silná ochrana proti odlivu – only-to-vault/allowlist; užitočné pre treasuries.
  • Percentuálne limity: max. X % zostatku alebo TVL účtu; dynamické prispôsobenie pri volatilite.

Funkčné limity: granularita na úrovni ABI

Okrem tokenových stropov zavádzajte funkčné politiky:

  • povoliť iba konkrétne function selectors,
  • overovať range parametrov (minOut, deadline <= N minút),
  • zakázať delegatecall, create a volania bez cieleného príjemcu (call to EOA).

Bezpečné UX pre session kľúče

  • Čitateľná karta oprávnení: „Kto → Čo → Koľko → Kedy“ v jednej obrazovke; nezahlcujte ABI detailmi.
  • Výstrahy a precap: ak sú požadované „unlimited“ práva, núťte používateľa manuálne zmeniť limit.
  • Živý meter: vizualizujte vyčerpanie denného stropu (napr. 120/500 USDC).
  • Rýchla revokácia: tlačidlo „Zrušiť všetky sessions“ + granularna revokácia per kľúč.

Observabilita a audit

  • Eventy: SessionCreated, SessionRevoked, Spend s metadátami (chain, kontrakt, suma, policyID).
  • On-chain metriky: percento zamietnutých volaní (policy reject rate), využitie capu, počet aktívnych session kľúčov.
  • Off-chain logy: mapovanie domén, relayer ID, odtlačky klienta (device fingerprint) pri zmene správania.

Incident response a „kill-switch“

  • Globálne pauzovanie peňaženky alebo konkrétnej policy.
  • Cap-cut: okamžité zníženie limitov na nulu pre rizikový protokol.
  • Time-lock odvolania opačne (pre treasury): veľké zmeny vyžadujú oneskorenie a viaceré podpisy.

Integrácia s multi-sig a MPC

  • Multi-sig & sessions: multi-sig schvaľuje zriadenie policy, nie každé volanie – vysoké pohodlie, zachovaná kolektívna kontrola.
  • MPC primárny kľúč + lokálne session kľúče: minimalizuje frekvenciu interakcií s MPC a chráni pred single-device rizikom.

Implementačné zásady pre vývojárov

  • Deterministické policy ID (hash parametrov) pre audit a reprodukovateľnosť.
  • Jednoznačný domain separator (chainID, name, version) proti „sign-in another app“ útokom.
  • Nonce a replay ochrana: monotónna nonce per session/funkciu; v kombinácii s deadlinom.
  • Fail-closed logika: ak oracle/relayer zlyhá, transakcia sa zamietne.
  • Gas policy: cap na gasPrice/priorityFee a fallback na sponzorovanie cez paymaster s limitom.

Testovanie: scenáre a metriky

  • Pozitívne cesty: sériové volania v limite, prekročenie limitu → očakávaný „revert“ s dôvodom.
  • Mutácie parametrov: extrémne hodnoty (max uint, nulové adresy), substitúcia príjemcu, zmena chainID.
  • Výkonnostné: latencia validácie policy vs. baseline; overhead na gas a na relayer infra.
  • Bezpečnostné: reentrancy, storage-collision v moduloch, zneužitie delegatecall.

Tabuľka: porovnanie prístupov k pohodliu a riziku

Prístup Pohodlie Riziko úniku Granularita kontroly Revokácia
Neobmedzené approvals Vysoké Extrémne Nízka Ťažšia (revoke + monitor)
Manuálny podpis každej tx Nízke Nízke (ak opatrnosť) Stredná Okamžitá
Session kľúč + spending limity Vysoké Nízké až stredné (ohraničený „blast radius“) Vysoká (čas, funkcie, adresy, suma) Okamžitá (on-chain/off-chain)

Checklist pre používateľov

  • Session karta zobrazuje konkrétne kontrakty, limity, expiráciu a doménu dApp?
  • Je dostupné rýchle zrušenie a prehľad aktívnych sessions?
  • Sú limity denné a per-tx, nie iba „mesačný strop“?
  • Je pre výpočty notionalu použitý spoľahlivý oracle s odchýlkovými poistkami?

Checklist pre integrátorov

  • Implementovali ste policy modul s allowlistou funkcií a adresátov?
  • eventy a monitoring nastavené na detekciu prekročenia limitu a anomálií?
  • Testujete phishing scenáre (zlá doména, iný chainID) v CI?
  • Máte kill-switch a cap-cut pre incidenty?

Pohodlie bez hazardu je inžinierska disciplína

Session kľúče a spending limity umožňujú web3 aplikáciám nasadiť plynulé UX bez toho, aby obetovali bezpečnosť. Kľúčom je presná špecifikácia oprávnení, exaktné limity, auditovateľnosť a okamžitá revokácia. Dizajnujte politiky ako kód, merajte ich vplyv na riziko a udržiavajte minimálne nutné oprávnenia. Takto dosiahnete, že pohodlie nebude hazard, ale kontrolované riziko – presne tak, ako to v profesionálnom krypto a trading stacku má byť.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *