Prečo sú zlé podpisy problémom v UX peňaženkách
Podpisy v kryptopeňaženkách predstavujú oveľa viac než len potvrdenie transakcií na blockchainovej sieti. V rámci ekosystému Web3 slúžia aj na podpisovanie rôznych správ bez poplatkov (off-chain), udeľovanie povolení (approvals), delegácií, prihlásení pomocou štandardu Sign-In With Ethereum (SIWE) či meta-transakcií. Pre nováčikov, ktorí často nevidia celý kontext, môže byť podpisovanie zložité a nebezpečné. Nečitateľné hexadecimálne reťazce alebo zložité formuláre EIP-712 vedú k neúmyselnému udeleniu neobmedzených práv alebo podpisu zmlúv na nesprávnych doménach. Riešením nie je iba edukácia používateľa, ale najmä vylepšenie užívateľského zážitku (UX) peňaženiek, ktoré bezpečne zobrazia informácie, predvolia bezpečné nastavenia a minimalizujú počet rozhodnutí, pri ktorých môže používateľ urobiť chybu.
Typy podpisov a ich vhodné ľudsky čitateľné zobrazenia
EIP-155 transakcie (on-chain podpisy)
- Zrozumiteľné zobrazenie chainId, cieľovej adresy to, hodnoty value, dát data a dekódovanie kontraktových funkcií.
- Zahrnutie odhadu spotreby plynu (gas) a zmeny stavu (state diffs), ktoré jasne ukážu, čo sa po transakcii zmení.
EIP-712 typed data
- Zvýraznenie názvu domény (domain.name), verifikujúcej zmluvy (verifyingContract) a identifikátora siete (chainId).
- Prehľadné rozdelenie do sekcií (napríklad povolený príjemca, limit, platnosť) s jasným prekladom do prirodzeného jazyka, aby používateľ presne vedel, čo podpisuje.
Personal_sign / EIP-191
- Zdôraznenie, že ide o neštruktúrovaný textový podpis; varovanie pri binárnych alebo nečitateľných hexa formátoch.
Permit a Permit2
- Explicitné zobrazenie tokenu, prijímateľa spender, limitu, platnosti deadline a nonce.
- Možnosť upraviť limit priamo pred podpisom, čím sa zvyšuje kontrola používateľa nad povoleniami.
SIWE (Sign-In With Ethereum)
- Zobraziť URI, doménu, účel prihlásenia, platnosť, nonce a čas vydania podpisu.
- Zdôrazniť rozdiel medzi prihlásením a finančným podpisom, čím sa minimalizuje riziko neúmyselných finančných transakcií.
Princípy bezpečného užívateľského prostredia pre nových používateľov
- Vždy čitateľné informácie: Automatické dekódovanie kontraktových volaní a EIP-712 dát – žiadne surové hex hodnoty. Používanie známych aliasov pre štandardné funkcie (ERC-20/721/1155, Permit, setApprovalForAll).
- Zrozumiteľný kontext a dôsledky: Jasne vysvetliť, čo sa po podpise presne stane – ktoré povolenia sa zapnú, k akým tokenom vznikne prístup, dokedy a s kým je podpis spojený.
- Minimalizácia nadmerných povolení: Pri schválení povolení ponúknuť používateľovi možnosť obmedziť ich len na konkrétnu transakciu, nastaviť limitovaný rozpočet alebo automatickú expiráciu.
- Silné bezpečnostné varovania: Pri rizikových akciách ako je ApprovalForAll pre NFT by sa mal zobraziť výrazný červený banner s vysvetlením rizika a navrhnutou alternatívou „iba konkrétne položky“.
- Overenie domény: Porovnanie aktuálnej webovej adresy s doménou v podpisovej požiadavke, pri rozdieloch vyžadovať dvojité potvrdenie alebo blokovať podpis úplne.
- Zobrazenie labelov a reputácie: Overené názvy kontraktov, ikony auditov, kategórie ako DEX, mosty alebo NFT trhy a rizikové skóre – všetko pre lepšiu orientáciu používateľa.
- Simulácia výsledkov: Pred potvrdením transakcie ukázať simulované zmeny (prenesené tokeny, aktualizované zostatky, vykonané volania) a príjemcov, čím sa zvyšuje transparentnosť.
- Jasné označenie siete: Veľký a výrazný štítok so sieťou (Ethereum, L2, testnet) zabránia chybám spôsobeným nesprávnym reťazcom.
- Blokovanie neznámych alebo nečitateľných formátov: Ak peňaženka nevie bezpečne dekódovať formát, automaticky zamietne podpis do časovej verifikácie.
Vzorové obrazovky a mentálny model používateľa
- Sign Permit: Zobraziť token (napr. USDC), prijímateľa (dApp XYZ), možnosť úpravy limitu a platnosti, prepínač automatického zrušenia, história povolení pre daný token.
- ApprovalForAll: Informácie o kolekcii NFT, príslušnom trhu, rozsahu povolenia (všetky položky vs. len konkrétne tokeny), odporúčania vypnúť povolenie po predaji.
- Sign-in (SIWE): Jasne uvedená doména, účel prihlásenia, platnosť podpisu a explicitné potvrdenie, že nejde o žiadne práva k tokenom.
- Varovanie pri nečitateľných podpisoch: Informačný banner oznamujúci vysoké riziko podpísania kódu alebo hexadecimálnych blobov so žiadosťou o ďalšiu kontrolu alebo odmietnutie.
Schémy na zníženie rizika v návrhu peňaženiek
- Just-in-time schválenia: Peňaženka sama navrhne dočasné alebo limitované povolenie počas potvrdenia swapu namiesto neobmedzených práv.
- Automatické zrušenie povolení (auto-revoke): Plánovanie, ktoré po stanovenom čase zruší povolenie na 0; možnosť nastavenia pravidiel pre jednotlivé tokeny a dApps.
- Session keys: Pre decentralizované aplikácie a hry umožňujú nastavovať cieľové adresy, denné rozpočty a automatické vypršanie platnosti s viditeľným indikátorom aktívnej relácie.
- Antifishingová vrstva: Kontrola Punycode-domén, upozornenie pri rozdieloch v doméne (napr. app.example vs. app-example) a sledovanie parametrov URL či referrerov.
- Adresné bezpečnostné prvky: Kontrola checksum, zvýrazňovanie znakov podobných znakom v ENS, blokovanie alebo varovanie pred imitačnými adresami.
Užívateľské rituály odporúčané pre nováčikov
- Skontroluj tieto štyri kritické parametre: spender, value, deadline, chainId. V UI by mal byť jednoduchý checklist s tooltipmi na vysvetlenie.
- Postup pri pochybnostiach: Zavrieť podpisový modál, overiť povolenia a adresy v bezpečnostnom dashboarde, prípadne revoke niektorých práv.
- Použiť sandbox účet: Predvolené používanie sekundárneho účtu s minimálnym zostatkom pre interakciu s novými dApps.
- Čítaj si podpis nahlas: Accessibility trik, ktorý pomáha používateľovi lepšie si uvedomiť, čo podpisuje – ak nevie podpis slovne opísať, nemal by ho schváliť.
Špecifiká podľa štandardov tokenov a aplikácií
- ERC-20 Permit a Permit2: Editovateľný limit, možnosť nastaviť povolenie „len na jednu transakciu“ a vizualizovať zostávajúci rozpočet.
- ERC-721 a ERC-1155: Preferovať schválenie na úrovni jednotlivých tokenov namiesto všeobecných povolení ApprovalForAll, ktoré by mali byť jasne vysvetlené a doplnené o dočasné prepínače.
- Mosty (Bridges): Zobraziť tok operácií, ako je uzamknutie, mintovanie alebo unwrap, indikovať protistranové adresy a rozlíšiť oficiálnych canonical od tretích strán.
Simulácia transakcií a prehľad zmien štátu ako posledná obrana
Dôležité UX prvky zahŕňajú možnosť simulovať danú transakciu a jasne zobraziť očakávané dôsledky, napríklad „Z účtu A odíde 100 USDC na adresu B; povolenie pre kontrakt C sa nastaví na 1 000 USDC do 31.12.2025“. V situáciách neistoty by mala peňaženka upozorniť bannerom o možných nepredvídateľných dôsledkoch, napríklad pri interakcii so smart kontraktmi, ktoré môžu mať samo-deštrukčný alebo proxy charakter.
Rizikové skóre a reputačný kontext kontraktov a dApps
- Známosť kontraktu: Overovanie zdroja, audity, dĺžka existencie a počet používateľov kontraktu.
- História incidentov: Výstrahy pre dApps s nedávnymi exploitmi či zmenami implementácie.
- Správanie dApp: Neobvyklé žiadosti o povolenia, ako sú neprimerané limity alebo absencia platnosti expirácie.
Account Abstraction (EIP-4337) a nová úroveň UX
Abstrakcia účtov prináša moduly, paymasterov a profilované session keys, ktoré vyžadujú nové UX princípy:
- Limity paymasterov: Denný rozpočet plynu, povolené aplikácie dApps s možnosťou dočasného zamrznutia či vypnutia.
- Prehľad modulov: Kto a čo môže volať, s možnosťou okamžitého vypnutia daného modulu jednoduchým kliknutím.
- Obnova účtu: Intuitívne používateľské rozhranie pre sociálne alebo multisig obnovenie s jasnými rolami, prahmi a časovými oneskoreniami pred aktiváciou.
Zavedenie týchto praktík a dizajnových princípov do používateľského prostredia peňaženiek môže výrazne znížiť riziko nesprávnych alebo škodlivých podpisov. Vývojári by mali klásť dôraz na transparentnosť, edukáciu používateľov a automatizované bezpečnostné mechanizmy, ktoré podporujú správne rozhodnutia aj laikov. Spojením technických riešení s jasnou komunikáciou a používateľským komfortom vytvoríme dôveryhodnejšie a bezpečnejšie obdobie pre interakciu s kryptomenami a decentralizovanými aplikáciami.