Autentizace Lightningem

Platby budoucnosti
5 min readNov 1, 2022

--

Většina lidí si pod pojmem Lightning Network představí platební síť pro rychlé a levné platby bitcoinem. Věděli jste ale, že se pomocí své lightningové peněženky můžete jednoduše, bezpečně a anonymně přihlašovat k určitým službám?

Photo by Towfiqu barbhuiya on Unsplash

Hesla?

Mezi nejčastější způsoby autentizace na internetu v dnešní době patří jméno a heslo. Je to desítky let starý koncept, který funguje relativně dobře. Jaké má ale nevýhody?

Uživatelé často volí kvůli pohodlí jednoduchá hesla, která lze uhádnout či prolomit hrubou silou. Případně používají stejná hesla napříč více službami, což vede k faktu, že pokud určité heslo unikne, mohou se útočníci zmocnit identity na několika platformách zároveň. Stačí totiž vyzkoušet stejnou kombinaci i jinde.

Lightning?

Co kdybychom tu ale měli alternativní způsob přihlašování, kde bychom nepotřebovali ani uživatelské jméno, ani heslo a celý tento koncept by byl dostatečně bezpečný? Že to není reálné?

Technologií, kterou si v tomto článku představíme, je autentizační protokol LNURL-auth. LNURL je sada protokolů, které rozšiřují možnosti Lightning Network (jeden z nich jsme si již představili v článku o lightningové adrese) a konkrétně LNURL-auth se stará o přihlašování.

A jak si to mám v praxi představit? Jednoduše — otevřete si webovou stránku podporující tuto technologii, svojí lightningovou peněženkou vyfotíte QR kód (jako kdybyste platili klasickou fakturu) a jste přihlášeni. Jednoduší to už být nemůže. Jak to ale funguje a je to vůbec bezpečné?

Princip

Nedílnou součástí všech lightningových peněženek je privátní klíč. Stejně jako u on-chain Bitcoinu se jedná o náhodné číslo, které nesmíte nikomu prozradit a jehož znalostí dokládáte vlastnictví vašich bitcoinů.

V praxi to funguje tak, že vám webová stránka odešle náhodná data, které vy svým privátním klíčem podepíšete a naopak jí vrátíte dvojici — podpis a veřejný klíč. Služba následně podpis ověří a pokud je v pořádku, tak jste úspěšně potvrdili svoji identitu. A to konkrétně znalostí privátního klíče, jelikož ten vlastníte pouze vy a bez něj nelze platný podpis vytvořit.

Reálně se nepoužívá identický klíč, který máte jako důkaz vlastnictví vašich bitcoinů ale v závislosti na URL webové stránky se odvodí odlišný klíč pro každou webovou stránku.

Pro někoho to může znít složitě ale reálně jde pouze o to, že vaše identita je svázaná s vaším privátním klíčem a pokud vám jej nikdo nezcizí, stačí pouze jednoduše fotit QR kódy a přihlašovat se tak k různým službám.

Vaší jedinou starostí je si tento klíč bezpečně uchovat — k tomu vám ale většinou slouží (snad již všem) známá seed-phrase (12 až 24 slov sloužících k obnově hlavního privátního klíče).

Photo by regularguy.eth on Unsplash

Výhody a nevýhody

Jaké jsou výhody oproti klasickému přihlašování jménem a heslem?

  • Nemusíte si vytvářet ani pamatovat či ukládat žádné heslo.
  • Nepotřebujete vyplňovat ani uživatelské jméno, pouze “fotíte QR kódy”.
  • Vaše heslo (v tomto případě privátní klíč) nikdy neputuje po síti, takže jej nelze odposlechnout.
  • Váš privátní klíč je pro každou službu odvozen jinak, tudíž nelze vaši identitu korelovat napříč více službami (jako například v případě použití stejného e-mailu či uživatelského jména).
  • Rychlost a jednoduchost.

A co nevýhody?

  • Zatím velmi málo služeb podporuje tento typ přihlašování.
  • Musíte mít lightningovou peněženku, která tuto technologii podporuje.
  • Kdokoliv získá plný přístup k vaší peněžence, má vaší identitu.
  • Jste zodpovědní za bezpečné uschování vaší seed-phrase.

Praxe

Z přechozích odstavců je jasné, že budete potřebovat lightningovou peněženku. Zrovna v tomto konkrétním případě bych silně doporučoval nějakou, kde opravdu vlastníte svoje privátní klíče (tzv. non-custodial), tedy například Phoenix či Breez.

Podpora pro tuto funkci je i v případě BlueWallet ale vzhledem k tomu, že je ve výchozím stavu custodial (provozovatel drží privátní klíče za vás), pro tento případ bych ji nedoporučoval. Peněženky Wallet of Satoshi ani Muun technologii LNURL-auth zatím nepodporují.

Následně je nutné si peněženku důkladně zálohovat, jelikož při její ztrátě přijdete i o svoji identitu. A samozřejmostí by mělo být nastavení nějaké autentizace při přístupu k peněžence (PIN, otisk prstu, faceID apod.).

Někomu se může zdát tento způsob uložení identity nebezpečný, ale pokud se případný útočník dostane přes biometriku do vašeho telefonu a následně i do samotné peněženky, tak vám stejným způsobem může vykrást hesla z libovolného password manageru…

A to je vše — peněženku jako takovou nemusíte využívat k placení, dokonce na ní nemusíte mít ani jeden satoshi.

A kde že si můžete přihlašování Lightningem vyzkoušet? Stránek je více ale pro účely tohoto článku zmíním oblíbené fórum zaměřené na Bitcoin a Lightning Network — stacker.news.

Závěr

Autentizace Lightningem je zajímavý koncept, který je velmi bezpečný, anonymní a díky pouhému focení QR kódů i uživatelsky přívětivý.

Samotná technologie je ale zatím v naprostém počátku a tak si budeme muset na širší podporu, jak na straně služeb tak i peněženek, ještě nějakou dobu počkat.

Zároveň je ale také nutné upozornit na fakt, že zde není nijak řešeno ověřování reálné osoby a kdokoliv si může vytvořit nespočet klíčů, potažmo peněženek — tedy identit. Tato problematika tedy musí být řešena separátně.

Každopádně za zkoušku nic nedáte, takže směle do toho!

Chcete být informováni ihned jakmile vydám další článek ohledně Bitcoinu, Lightning Network nebo ekonomie? Sledujte mne na Twitteru!

Přídavek!

Cože, to je vše? Jestliže jste tak trochu geek a zajímají vás podobné koncepty do hloubky, tak se společně podíváme na protokol LNURL-auth více technicky. Pokud to naopak není nic pro vás, s klidem můžete využít magického křížku vpravo nahoře :)

Každá rozumná (non-custodial) peněženka má master private key (pokud ne, máme řešení i na tento případ). Derivační cesta m/138'/0 obsahuje tzv. hashingKey. Ten vložím spolu s URL služby do HMAC funkce:

output = HMAC-SHA256(hashingKey, doména z URL)

Z výstupu vezmu prvních 16 bajtů a rozdělím je na 4 stejně velké části. Získám tím derivační cestu pro tzv. linkingKey, tedy klíč, který je pro každou službu (URL) unikátní:

linkingKey = m/138'/<část1>/<část2>/<část3>/<část4>

Peněženka po naskenování QR kódu dekóduje bech32 a získá HTTPS odkaz, například:

https://web.cz?tag=login&k1=nahodna_data&action=login

Parametr tag nám říká, že se jedná o LNURL-auth a action specifikuje přihlášení (může se dále jednat například i o registraci apod.). Velmi důležitý parametr k1 obsahuje 32 bajtů náhodných dat, které musíme podepsat naším linkingPrivKey.

Po odsouhlasení přihlašovacího dialogu uživatelem odpoví peněženka stejnou URL, jenom za ní přilepí parametry sig a key:

  • sig = podepsaná náhodná data k1 nad křivkou secp256k1 s využitím privátního klíče linkingPrivKey
  • key = veřejný klíč linkingKey
https://web.cz?tag=login&k1=nahodna_data&action=login&sig=podpis&key=verejny_klic

Služba následně podpis ověří a pokud je správný, přiřadí uživateli identitu na základě jeho linkingKey, alternativně mu vytvoří novou, pokud se jedná o registraci.

Detailněji:

--

--