Jak funguje podepisování transakcí v základní webové verzi peněženky
Co se děje při vstupu do peněženky
- Při vstupu do peněženky, kromě běžných dat jako obrázky, přichází ze serveru mitilena.com přes socket seznam kryptoměn s aktuálními kurzy. Kurz se aktualizuje každých 90 sekund pro většinu měn, u méně populárních každé 2 minuty.
- Ve stejný moment se vezmou vaše adresy uložené v prohlížeči nebo aplikaci a odešlou na server. Důležité: odesílají se pouze adresy. Na serveru se zkontroluje jejich zůstatek a seznam se vrátí s aktuálními hodnotami.
- Tím končí hlavní část komunikace. Dále přibližně každé 1,5 minuty kontrolujeme aktualizace zůstatků stejným způsobem.
- Když kliknete na „poslat kryptoměnu“, načteme specifická data — jako
nonce
(číslo další transakce pro vaši adresu v síti konkrétního blockchainu) a aktuální cenu poplatku (aktualizuje se každých pár minut). Kontrola zůstatku probíhá už na klientovi.
Fáze podepisování
- Zadáte privátní klíč — ten se ověřuje pouze na vašem zařízení: zda odpovídá vaší adrese (zda z něj generuje správnou adresu). K tomu se používá lokální knihovna, která se prakticky neaktualizuje, aby se předešlo útokům na dodavatelský řetězec. Pokud je klíč validní, vytvoříme transakci. Vždy se nejprve vytvoří struktura transakce a teprve potom se podepisuje.
- Mohli bychom použít vyšší knihovny, kde jen předáte privátní klíč a vše se udělá automaticky (včetně odeslání). To neděláme. Vždy vytváříme offline transakci, podepíšeme ji, získáme
hex
podepsané transakce, smažeme privátní klíč z paměti a teprve potom odešleme transakci přes server mitilena.com. To vylučuje použití funkcí jakocreateSignBroadcast()
a vylučuje úniky. - Privátní klíč se zdrží v operační paměti zařízení doslova na milisekundy nebo pár sekund, pokud byl zadán přes rozhraní. Zachytit ho za tuto dobu je extrémně obtížné, pokud vaše zařízení není absolutně děravé. I v takovém případě je těžké si představit virus, který by stihl tak rychle zareagovat.
- Tento popis se týká běžného scénáře podepisování přes webovou verzi nebo desktopovou aplikaci, když jste ručně zadali privátní klíč nebo ho naskenovali z papírového nosiče přes QR kód (ano, náš systém to podporuje).
Jak funguje ukládání privátního klíče v paměti
- Pokud jste klikli na „uložit privátní klíč v paměti“, bezpečnost se zvyšuje, protože klíč se už neobjevuje v rozhraní (ani na pár sekund), ale dešifruje se a mizí z paměti za 0,1 sekundy — bez zobrazení. Vytáhnout ho základními viry už není možné — potřebujete virus, který umí skenovat RAM.
- Šifrování probíhá pomocí vašeho PIN kódu, kde musíte použít speciální znaky včetně emotikonů. Používáme
PBKDF2
, kde na generování jednoho klíče se spotřebuje 100-500 tisíc iterací — to efektivně chrání proti brute-force útokům. Prolomení zašifrovaného klíče by vyžadovalo kolosální výpočetní zdroje. Museli byste ho hned připojit na atomovou elektrárnu, aby se to nějak vyplatilo — což je samozřejmě nereálné. - Také se používá sůl, takže duhové tabulky nepomohou. I kdyby útočník nějak dostal zašifrovaný privátní klíč z paměti, nemůže ho dešifrovat — pokud nemáte heslo
12345678
. - Ale celkově, abyste se dostali k zašifrovanému privátnímu klíči ze zařízení, musíte mít úplně kompromitovaný systém. To není jednoduché.
- Výhoda ukládání klíče v paměti — zadáte heslo a privátní klíč se okamžitě dešifruje, ověří, použije a smaže z paměti. V okamžiku odeslání (
broadcasting
) už privátní klíč není v paměti aplikace. Je tam doslova 100 milisekund.
Finální fáze odeslání
- Podepsaný
hex
transakce → server Mitilena udělá broadcast do požadované sítě → dostane potvrzení → odešlehex
zpět na klienta → zobrazí se vám v rozhraní. - Pokud vše proběhlo úspěšně, server mitilena.com uloží data o faktu odeslání (anonymně — i když jste registrovaní, bez IP a dalších identifikátorů, lze vypnout přes sockety). Tato data se používají pro zobrazení historie a ochranu proti falešným záznamům, například z externích blockchain průzkumníků.
Tak technicky funguje odeslání.
Odeslání z NFC karty funguje podobně: privátní klíč se dostane do paměti zařízení jen na 0,1 sekundy a hned zmizí.
Learn how Mitilena protects your private keys during transaction signing. PBKDF2 encryption, 0.1 seconds in memory, complete internet isolation. Maximum security for your funds. Secure Cryptocurrency Transaction Signing in Mitilena: Technical Guide