Cílem této příručky je pomoci vám porozumět logice, která stojí za bitcoinovým skriptem. Protože toho bude příliš mnoho, bude průvodce rozdělen na dvě části.

Bitcoin byl vytvořen pouze pro jeden účel… transakce. Bitcoin dokázal světu ukázat, že platební systém může existovat v decentralizovaném systému peer-to-peer. Co se však děje v zákulisí těchto transakcí? Za každou malou transakcí je na pozadí nějaký kód. Tento kód je bitcoinový skriptovací jazyk nebo zkráceně jen bitcoinový skript.

Nejlepší průvodce skriptem bitcoinů

Úvod do bitcoinového skriptu

Skript je Forthův, zásobníkově založený, reverzně polský, Turingův neúplný jazyk. Ano, to zní velmi komplikovaně, ale opravdu to tak není. Pojďme projít každým termínem zezadu.

Turing Nedokončené

Turingův neúplný jazyk bude mít omezenou funkčnost a nebude schopen dělat skoky nebo smyčky. Proto nemohou vstoupit do nekonečné smyčky. Být Turing Complete znamená, že s ohledem na zdroje a paměť bude program Turing Complete schopen vyřešit jakýkoli problém. Solidity je příkladem jazyka Turing Complete.

Proč tedy není Turing Bitcoin Script dokončen?

Protože to nemusí být. Bitcoinový skript nemusí být tak komplikovaný jako chytrý kontrakt Ethereum. Ve skutečnosti, kdyby byl skript Turing Complete, poskytlo by to nebezpečným stranám svobodu vytvářet komplikované transakce a snížit hashovací rychlost bitcoinové sítě a zpomalit celý systém.

Reverzní polština

Reverzní polská notace je systém, kde operátoři sledují operandy.

Význam:

  • 3 + 4 se zobrazí jako 34+.
  • Takže pro delší komplikovanější částky:
  • 5 * 3 + 4 se zobrazí jako 534 + *.

Na základě zásobníku

Zásobníky jsou jednou z nejpopulárnějších datových struktur. Podle Wikibooks, logicky je lze považovat za lineární strukturu představovanou skutečným fyzickým zásobníkem nebo hromadou, strukturou, kde vkládání a mazání položek probíhá na jednom konci zvaném horní část zásobníku.

Základní myšlenkou zásobníku je LIFO nebo Last In First Out. Zvažte následující hromadu knih:

Nejlepší průvodce skriptem bitcoinů

Jaká byla první kniha, která byla vložena do tohoto zásobníku? Osamělý vlk & Mládě, že? Jaká byla poslední kniha? Zahrady měsíce.

Pokud by někdo vytáhl z tohoto zásobníku knihu, Osamělý vlk & Mládě nebude kniha, kterou si vezmete jako první, Zahrady měsíce budou první, kterou si vezmete.

Proto Last In First Out.

Poslední kniha, která šla na tuto hromádku zásobníku, bude první vyřazenou knihou.

Nyní jsou dvě operace se zásobníky, o kterých potřebujete vědět:

  • Tam.
  • Pop.

Tam: Akt přidání věcí do zásobníku se nazývá tlačení.

Pop: Akt odebrání věcí ze zásobníku se nazývá praskání. Jak již bylo zmíněno dříve, poslední položka, která se dostala do zásobníku, se vyskočí jako první.

Nejlepší průvodce skriptem bitcoinů

Uznání obrázku: Wikimedia

Přesně jako

Tenhle je docela přímočarý. Bitcoinový skript se podobá programovacímu jazyku „Forth“, který je také založen na zásobníku.

Takže teď alespoň víme, co je to skript, pojďme pochopit, jak transakce fungují.

Jak fungují transakce v bitcoinu?

Než budeme pokračovat, obrovský výkřik pro profesora Donalda J. Pattersona a jeho Youtube kanál „djp3“ pro vysvětlení.

Předpokládejme, že Alice chce Bobovi poslat určitý počet bitcoinů. Jak funguje transakční systém v bitcoinech? bitcoinové transakce se velmi liší od transakcí peněženky Fiat. Pokud by Alice dala Bobovi 2 $, fyzicky by z peněženky vzala 2 dolary a dala to Bobovi. V bitcoinech to ale tak nefunguje. Fyzicky nevlastníte žádné bitcoiny, to, co máte, je důkaz, že máte bitcoiny.

Musíte vědět ještě dvě věci:

  • Horníci ověří vaše transakce vložením dat do dolů, které zablokovali. Na oplátku za poskytnutí této služby účtují transakční poplatek.

  • Pokud jde o měnu FIAT, opravdu nesledujete, jak a odkud máte tuto konkrétní poznámku. Např. Otevřete svou peněženku právě teď a vyjměte z ní všechny bankovky a mince. Můžete říct, odkud přesně jste dostali každou konkrétní bankovku a minci? Je pravděpodobné, že ne. V bitcoinech je však brána v úvahu historie každé bitcoinové transakce.

Dobře, tak se nyní podívejme, jak probíhá bitcoinová transakce mezi Alice a Bobem. Transakce má dvě strany, Vstup a Výstup. Celá tato Transakce bude mít název, který nakonec zjistíme. Prozatím se podívejme na dynamiku.

Transakční vstup

Aby se tato transakce uskutečnila, musí Alice získat bitcoiny, které obdržela z různých předchozích transakcí. Pamatujte, jak jsme již řekli, v bitcoinech je každá mince účtována prostřednictvím historie transakcí.

Předpokládejme tedy, že Alice potřebuje vytáhnout bitcoiny z následujících transakcí, které pojmenujeme TX (0), TX (1) a TX (2). Tyto tři transakce budou sečteny a získáte vstupní transakci, kterou budeme nazývat TX (Input).

Schematicky to bude vypadat takto:

Nejlepší průvodce skriptem bitcoinů

Takže to je ze vstupní strany, podívejme se, jak bude vypadat výstupní strana.

Transakční výstup

Výstup v zásadě bude mít počet bitcoinů, které Bob bude vlastnit, po transakci a jakoukoli zbývající změnu, která zbyde, která se poté odešle zpět Alici. Tato změna se poté stane její vstupní hodnotou pro všechny budoucí transakce.

Obrázkové znázornění výstupní strany vypadá takto:

Nejlepší průvodce skriptem bitcoinů

Jedná se o velmi jednoduchou transakci, která má pouze jeden výstup (kromě ZMĚNY), existují transakce, které jsou možné s více výstupy.

Takto vypadá základní rozvržení transakce. Aby to celé mohlo projít, musí být splněny určité podmínky.

Podmínky transakce

  • TX (vstup) > TX (výstup). Vstupní transakce musí být vždy větší než výstupní transakce. V každé transakci je deficit mezi vstupem a výstupem (výstup + změna) transakční poplatky, které těžaři inkasují. Tak:

    Transakční poplatky = TX (vstup) – (TX (výstup) + změna).

  • Na vstupní straně:

    TX (0) + TX (1) + TX (2) = TX (vstup).

    Pokud Alice nemá finanční prostředky potřebné k provedení transakcí, těžaři transakce jednoduše odmítnou.

  • Bob bude muset prokázat, že může poskytnout důkaz potřebný k získání bitcoinů. Alice uzamkne transakce pomocí Bobovy veřejné adresy. K odblokování transakcí a přístupu k poplatkům bude muset předložit svůj soukromý klíč.

  • Alice také musí nejprve ověřit, zda má požadovaná práva k odesílání bitcoinů. Způsob, jakým to dělá, je odhlášení transakce jejím digitálním podpisem (aka jejím soukromým klíčem). Kdokoli to může dekódovat pomocí jejího veřejného klíče a ověřit, že to byla skutečně Alice, která zaslala data. Tento důkaz se nazývá „Podpisová data“. Pamatujte si to, protože to bude později velmi důležité.

Jak se tedy bude jmenovat celá tato transakce?

Vstup (včetně dat podpisu) a výstupní data se sčítají a hashují pomocí hashovacího algoritmu SHA 256. Výstupní hash je název, který je dán této transakci.

Nyní tedy nahlédneme do zákulisí a uvidíme, jak transakce ve skutečnosti vypadá.

Transakce skriptů bitcoinů: zákulisí

Takto vypadá transakce ve formě kódu.

Předpokládejme, že Alice chce Bobovi poslat 0,0015 BTC a za tímto účelem pošle vstupy v hodnotě 0,0015770 BTC. Takto vypadá detail transakce:

Nejlepší průvodce skriptem bitcoinů

Obrázek s laskavým svolením: djp3 youtube kanál.

První řádek, který vidíte:

Nejlepší průvodce skriptem bitcoinů

Je název transakce aka hash vstupní a výstupní hodnoty.

Vin_sz je počet vstupních dat, protože Alice odesílá data pouze pomocí jedné ze svých předchozích transakcí, to je 1.

Vout_sz je 2, protože jedinými výstupy jsou Bob a změna.

Toto jsou vstupní data:

Nejlepší průvodce skriptem bitcoinů

Vidíte vstupní data? Alice používá pouze jednu vstupní transakci (v příkladu, který jsme uvedli výše, bude to TX (0)), to je důvod, proč vin_sz byla 1.

Pod vstupními údaji jsou její podpisová data.

Pod tím vším jsou výstupní data:

Nejlepší průvodce skriptem bitcoinů

První část dat znamená, že Bob získává 0,0015 BTC.

Druhá část znamená, že 0,00005120 BTC je to, co Alice dostává zpět jako změnu.

Nezapomeňte, že vstupní data byla 0,0015770 BTC? To je větší než (0,0015 + 0,00005120). Deficit těchto dvou hodnot je transakční poplatek, který těžaři inkasují.

Bližší pohled na transakční výstupy

Jak jsme viděli výše, každý vstup v transakci se změní na výstupy, některé z těchto výstupů jsou utraceny, zatímco některé jsou nevyčerpané a mění se. Tato změna se také nazývá UTXO nebo Výstup nevyčerpaných transakcí. UTXO se stává vstupy v budoucích transakcích.

Každý výstup transakce se skládá ze dvou částí:

  • Hodnota tohoto výstupu.

  • Kryptografická hádanka, která se nazývá zamykací skript, nebo skript svědka nebo scriptPubKey. Hádanka musí být odemčena, abyste mohli utratit peníze. Tato hádanka je kódována pomocí skriptovacího jazyka bitcoin.

Pojďme se tedy podívat na výstupy transakce a identifikovat v ní výše uvedené části. Kód převzat od Andrease M. Antonopoulose. “Zvládnutí bitcoinů.”

“Vout.”": [

{

"hodnota": 0,01500000,

"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"

},

{

"hodnota": 0,08450000,

"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",

}

]

Dobře, takže v kódu uvedeném výše máme dva výstupy.

Jeden výstup má hodnotu 0,015 BTC, zatímco druhý má hodnotu 0,0845 BTC. Aby bylo možné odemknout hodnotu 0,015, zamykací skript, který je třeba odemknout, vypadá takto:

„ScriptPubKey“: „OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG“

Ještě bližší pohled na transakční vstupy

Nyní se podívejme na druhou stranu mince, na transakční vstupy.

Aby bylo možné provést vstup, peněženka uživatele prochází jejich UTXO a vybírá ty, které mají dostatečnou hodnotu, aby transakce mohla projít.

Např. pokud Alice chce poslat Bobovi 0,15 BTC a zde sada UTXO vypadá takto:

  • UTXO A = 0,09 BTC
  • UTXO B = 0,2 BTC
  • UTXO C = 0,005 BTC

Které UTXO budou vybrány pro tuto transakci? To je pravda, budou vybrány A a B a vše, co zbyde, se stane UTXO pro další transakci Alice.

Nyní se podívejme na vstupní kód.

“Vin.”": [

{

"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",

"vout": 0,

"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 [ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",

"sekvence": 4294967295

}

]

Podívejme se, co každá část vstupního skriptu obsahuje:

  • txid: ID transakce označuje transakci, ze které byl tento UTXO vygenerován. To pomáhá sledovat transakci

  • vout: Toto odkazuje na to, který výstup z dané transakce se používá. Např. pokud tato transakce měla dvě UTXO, první bude označena 0 (protože jak jsme viděli dříve, počítání začíná od 0 a ne 1) a druhá bude označena 1. V tomto případě používáme první UTXO ieUTXO 0.

  • scriptSig: Jak jsme již zmínili, každý UTXO obsahuje zamykací skript. ScriptSig obsahuje data potřebná k odemčení dat.

  • sekvence: Byl zahrnut, aby pomohl lidem aktualizovat jejich transakce před tím, než budou potvrzeny a dokončeny v bloku. Není to tak důležité, aby pomohli porozumět základům.

Serializace transakcí

Nyní to pojďme spojit a podívejme se, co máme. Když je transakce přenášena přes síť, jsou serializovány. Jak říká Andreas Antonopoulos,

“Serializace je proces převodu interní reprezentace datové struktury do formátu, který lze přenášet jeden bajt po druhém, také známý jako bajtový proud.”

V předchozích dvou částech jsme viděli jednoduchou jednu vstupní a jednu výstupní transakci. kdybychom to serializovali a uložili v hexadecimálním formátu, jak by to vypadalo?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

Ano, tento autor si zde náhodou neudělal hlavu na klávesnici … tak to ve skutečnosti vypadá.

Nebojte se však. Brzy to pochopíme. Někde v tomto šestnáctkovém proudu máme vstupní data a naše výstupní data. Najdeme oba!

Serializace výstupu

Serializace výstupní části transakce obsahuje následující části:

Nejlepší průvodce skriptem bitcoinů

Uznání obrázku: Andreas Antonopoulos „Mastering Bitcoin“

Jaké údaje o výstupu vlastně známe?

  • Existují dvě výstupní hodnoty.

  • Jedna výstupní hodnota má hodnotu 0,015 BTC nebo 1 500 000 satoshi

  • V šestnáctkové soustavě je 1 500 000 16 e3 60, což při kódování v malém endianu, tj. Nejméně významná bajtová první notace dává 60 e3 16.

  • Délka scriptPubKey je 25 bajtů, což je 19 v šestnáctkové soustavě.

Poznamenejte si tedy tyto informace, pojďme hledat naše výstupní data.

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

Serializace vstupu

Serializace vstupu obsahuje následující komponenty:

Nejlepší průvodce skriptem bitcoinů

Nyní můžete vyhledat vstup její transakce?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc0025a888ac 00

Dobře, tak co jsme zatím viděli?

  • Výstupy transakce a UTXO.
  • Vstupy transakce.
  • Jak se celá transakce serializuje.

Nyní víme, že UTXO lze použít, pouze pokud jsou odemčené. Víme, že vstupní hodnoty mají scriptSig, který je pomáhá odemknout. Jak na sebe vzájemně působí?

Než se k tomu dostaneme, měli bychom mít představu o tom, jak se výpočty a operace odehrávají v bitcoinovém skriptu.

Jak funguje skript?

Než budeme pokračovat ve skriptu, bude užitečné pochopit, jak funguje systém založený na zásobníku a reverzně polský.

Jednoduché přidání do systému reverzního leštění založeného na zásobníku

Jak jsme již řekli před 3 + 4 v reverzním polském bude vypadat jako 34+, provedeme operaci přidání pomocí zásobníku.

Nejlepší průvodce skriptem bitcoinů

Takto se provede jednoduchá operace přidání do zásobníku. Nyní, když je to hotové, jak by to vypadalo, kdyby to byl scénář?

OP_3 OP_4 OP_ADD

Pouze se změní vzhled, zbytek operace zůstane stejný, jak je uvedeno výše. Předpona „OP_“ je podpisem skriptovacího jazyka.

Pokud chcete základní nátěr na různé Opcodes, které jsou použity ve skriptu pak klikněte sem.

Jednoduché přidání pomocí bitcoinu s skriptem

Předpokládejme, že chceme udělat 2 + 3 = 5.

V reverzní polštině to bude vypadat jako 23 + 5 =.

V zápisu skriptu to bude vypadat takto:

OP_2 OP_3 OP_ADD OP_5 OP_EQUAL

Nejlepší průvodce skriptem bitcoinů Nejlepší průvodce skriptem bitcoinů

Co by se stalo, kdybychom použili postfix VERIFY v EQUAL? To znamená, že místo OP_EQUAL jsme použili OP_EQUALVERIFY?

V okamžiku, kdy přidáte příponu VERIFY, PRAVDA nebo NEPRAVDA, nebude do zásobníku vložen, místo toho skript pokračuje provádění, pokud je pravda, nebo to zastaví provádění, pokud je FALSE.

To se stane, když k operačnímu kódu připojíte výraz „VERIFY“. Mějte to na paměti pro budoucí příklady.

Dobře, vezmeme si poslední příklad.

Jednoduché duplikace ve skriptu

Bereme tento příklad, abychom vám představili nesmírně důležitý operační kód, DUP aka duplikát.

Pojďme, chceme vložit číslo do zásobníku, duplikovat ho a zjistit, zda jsou obě čísla stejná nebo ne (což samozřejmě bude).

Použijeme tento skript:

OP_5 OP_DUP OP_EQUALVERIFY

Nejlepší průvodce skriptem bitcoinů

Dobře, teď máte představu o tom, jak se výpočty zpracovávají v bitcoinovém skriptu, pojďme pokračovat v našich transakcích a podívejte se, jak se provádějí.

Hra zamykání a odemykání

Transakce v bitcoinech jsou neustálou hrou zamykání a odemykání. UTXO jsou uzamčeny pomocí scriptPubKey, zatímco vstupy transakce obsahují scriptSig. Myšlenkou scriptPubKey je nabídnout kryptografickou hádanku, kterou lze odemknout pouze prostřednictvím odpovídajícího scriptSig.

Co se tedy přesně stane a jak se tato hra hraje?

Předpokládejme, že Alice chce poslat Bobovi nějaké bitcoiny. Bobova veřejná adresa je všeobecně známá a ona pošle své bitcoiny na Bobovu veřejnou adresu spolu s podmínkou, Bob musí prokázat, že to je skutečně on, kdo získává bitcoiny.

Pojďme se na chvíli vrátit a vraťme se k některým základním konceptům.

Každý, kdo má bitcoin, má dva klíče:

Veřejný klíč je kryptograficky odvozen od soukromého klíče.

Nyní, aby jim byly zasílány peníze, musí mít každý veřejnou adresu. Veřejnost je provozována prostřednictvím dvou hashovacích algoritmů, SHA-256 a RIPEMD-160. Důvodem, proč to děláme, je zajistit, abyste měli další vrstvu ochrany, KDYŽ v případě, že někdo nějak zjistí, jak vygenerovat váš soukromý klíč pomocí vašeho veřejného klíče (což je nemožné).

Poznámka: Veřejný klíč nejprve prochází SHA-256, aby poskytl 256bitový výstupní hash, a poté se tento hash spustí pomocí RIPEMD-160, který dává 160bitový výstupní hash. Konečný výstup je tedy 160bitový hash.

Dobře, takže Alice pošle peníze na Bobovu veřejnou adresu spolu s podmínkou, že Bob musí prokázat, že je to skutečně on, kdo peníze získal.

Důkazem, který Bob používá k odemknutí prostředků, je jeho digitální podpis, který kryptograficky pochází z jeho soukromého klíče.

Přemýšlejte o transakcích, které Alice pošle Bobovi jako zamčenou hruď, a Bobův podpis jako přístupový kód.

Nyní se vracíme k našemu skriptu.

Alice pošle Bobovi výstup, který má scriptPubKey, který obsahuje Bobovu adresu.

Bob odemkne vstup pomocí svého podpisu scriptSig, který zahrnuje jeho podpis a jeho veřejný klíč.

Jak to tedy v kódu reprezentujeme?

scriptPubKey = OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

Poznámka: Jak OP_HASH160 a OP_CHECKSIG fungují, vám bude brzy jasné.

scriptSig =

Aby mohl odemknout výstup a použít své prostředky, Bob zřetězí nebo se trochu připojí k scriptSig a scriptPubKey takto:

Nejlepší průvodce skriptem bitcoinů

Image Credit: CryptoCompare

Dobře, podívejme se, jak scénář umožňuje chudému Bobovi přístup k jeho prostředkům. Skript právě teď vypadá takto:

OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

Skriptová implementace procesu odblokování / ověření

Dobře, podívejme se, jak funguje implementace skriptu celého procesu ověřování / odemykání.

Právě teď vypadá kód takto

Nejlepší průvodce skriptem bitcoinůNejlepší průvodce skriptem bitcoinů

Nejlepší průvodce skriptem bitcoinů

OP_CHECKSIG se objeví a zkontroluje jejich platnost, aby věděl, že jsou platné podpisy a veřejné adresy.

Po dokončení celého procesu může Bob transakci odemknout a získat přístup ke svým finančním prostředkům.

Gratulujeme! Právě jste prošli celou bitcoinovou transakcí!

Zde vidíte nejběžnější typ bitcoinové transakce: P2PKH aka Platba hash veřejného klíče.

Co je tedy tento záhadný operátor CHECKSIG a jak to funguje? K tomu se musíme podívat na kryptografii za bitcoinem.

Jak funguje CHECKSIG?

Abychom věděli, jak funguje CHECKSIG, budeme potřebovat vědět, co je digitální podpis. Digitální podpis je digitální kód (generovaný a ověřený šifrováním pomocí veřejného klíče), který je připojen k elektronicky přenášenému dokumentu za účelem ověření jeho obsahu a identity odesílatele.

Algoritmus digitálního podpisu používaný bitcoinem je ECDSA nebo algoritmus digitálního podpisu eliptické křivky.

Kryptografie eliptické křivky je to, co používá bitcoin, ethereum atd. pro účely šifrování. Co je to eliptická křivka? Eliptická křivka je jakákoli křivka, která splňuje následující rovnici:

Y ^ 2 = x ^ 3 + ax + b

Kde (x, y) je bod na křivce a a a b jsou konstanty.

Můžete vytvořit nekonečné křivky. Takto vypadá jedna z těchto křivek obecně:

Nejlepší průvodce bitcoiny

Obrázek kreditu: kanál YouTube CSBreakdown

Jaké jsou vlastnosti eliptické křivky?

  • Křivka je symetrická napříč osou x.
  • Jakákoli přímka, která prochází 2 body na křivce, protne křivku ve třetím bodě.
  • Jakákoli tečna na křivce protne křivku ještě v jednom bodě.

Matematika na křivce.

Sčítací vlastnost křivky

Předpokládejme, že na křivce V a A jsou dva body. Pojďme sledovat ty, které jsou na křivce, a protáhněte je přímkou. Tím se křivka protne ve třetím bodě.

Nejlepší průvodce skriptem bitcoinů

Obrázek kreditu: kanál YouTube CSBreakdown

Tento třetí bod budeme nazývat X a na křivce ho budeme odrážet takto:

Nejlepší průvodce skriptem bitcoinů

Obrázek kreditu: kanál YouTube CSBreakdown

Odraz X je bod, který bude mimochodem (V + A). Toto je aditivní vlastnost eliptické křivky.

Zajímavá poznámka. Přidáme-li k sobě dva odrazy aka kdybychom do grafu přidali X a V + A, dostaneme nekonečno. Důvodem je to, že přímka procházející X a (V + A) protíná křivku v nekonečnu.

Násobení křivky

A teď, co když k sobě chceme přidat číslo? Předpokládejme, že máme bod V, co uděláme, abychom našli 2V? Provedeme tečnu V a protneme ji v bodě grafu a pak najdeme odraz bodu na křivce. Tato reflexe bude 2V.

Nejlepší průvodce skriptem bitcoinů

Obrázek kreditu: kanál YouTube CSBreakdown

Toto je také multiplikativní vlastnost grafu, protože nacházíme body, které jsou v podstatě násobením celého čísla se samotným bodem. Nyní předpokládejme, že chceme najít 3V. Spojíme V a 2V a poté promítneme průsečík, například takto:

Nejlepší průvodce skriptem bitcoinů

Obrázek kreditu: kanál YouTube CSBreakdown

Vidíte, jak se body cyklují po grafu? To mu dává jeho bezpečnost.

Matematické vlastnosti eliptické křivky

Vlastnost # 1: Body na křivce tvoří Abelianovu skupinu

Vlastnosti skupiny Abelian jsou následující:

  • Mají identitu.
  • Mají inverze aka odrazy.
  • Body mají asociativní význam pro tři body A, B a C na křivce: (A + B) + C = A + (B + C).
  • Body jsou na křivce uzavřeny.
  • Body mají komutativní význam pro dva body A a B. A + B = B + A.

Vlastnost # 2: Násobení na křivce je rychlé

Veškeré násobení provedené na křivce lze provést velmi rychle. Předpokládejme, že máme bod P a chceme najít 100P. Místo toho, abychom číslo přidali stokrát, můžeme provést následující:

  • Přidejte k sobě bod P a získáte 2P.
  • Přidejte 2P a P a získejte 3P.
  • Přidejte 3P k sobě a získejte 6P.
  • Přidejte 6P k sobě a získejte 12P.
  • Přidejte k sobě 12P a získejte 24P.
  • Přidejte 24P a P a získejte 25P.
  • Přidejte k sobě 25P a získejte 50P.
  • Přidejte 50P k sobě a získejte 100P.

Místo toho, abyste prošli 99 kroky, zkrátíte celou věc na pouhých 8 kroků.

Vlastnost # 3: Rozdělení na křivce je pomalé

Zatímco násobení je rychlé, dělení je velmi pomalé. Předpokládejme, že máme Q = nP a chceme najít hodnotu n vydělením Q číslem P. To opravdu nemůžeme udělat. Budeme muset ručně procházet čísla jeden po druhém, abychom našli hodnotu, která vyhovuje rovnici. Díky tomu je velmi pomalý. Tomu se říká diskrétní logaritmický problém a právě ten dává křivkám funkci padacích dveří, tzn. Je snadné znásobit n a P a získat Q, ale vzhledem k Q a P je nemožné získat n.

Jak tedy ověření podpisu funguje na eliptických křivkách?

(Poznámka: To se konkrétně děje v bitcoinech)

Než uvidíme, jak tento proces funguje, podívejme se na určité proměnné a jejich význam, který použijeme v následujících rovnicích.

Soukromý klíč = d.

Zpráva = z.

Veřejný klíč = Q.

G bude konstantní bod v grafu, který bude poskytován bitcoiny.

„K“ je náhodné číslo, které bude generováno automaticky pro každý jedinečný podpis.

„N“ je další konstanta, kterou poskytne bitcoin.

Dobře, tak se podívejme, jak funguje matematika za ověřováním.

Podepsání zprávy

Veřejný klíč Q = dG. (je nemožné získat soukromý klíč z Q a G kvůli rozdělení na nemožné).

Nyní vynásobíme G náhodným číslem „k“ a tento bod zakreslíme do grafu. Souřadnice tohoto bodu jsou (x, y). tj. (x, y) = kG

Dále určíme dvě hodnoty r a s tak, aby:

r = x mod n.

s = (z + rd) k ^ -1 mod n

Důvod, proč generujeme r a s, je ten, že se jedná o souřadnice našeho podpisu.

Takže pošleme bod (r, s) k ověření.

Ověření zprávy

Ověřovatelé provedou jednoduchou rovnici:

z * s ^ -1 * G + r * s ^ -1 * Q

Hodnota této rovnice nám dá bod (x, y).

Nyní mohou ověřovatelé jednoduše porovnat souřadnice x. Nemají souřadnici x danou přímo od odesílatele, ale mají hodnoty r a n.

A jak už víme, že r = x mod n, a pak mohou jednoduše vyřešit pro x.

Pokud se hodnoty x shodují, znamená to, že podpis je ověřen!

Bonus: Hlubší pohled do matematiky

Podívejme se na rovnici, kterou budou muset ověřovatelé znovu udělat:

Krok 1: z * s ^ -1 * G + r * s ^ -1 * Q

Víme, že Q = d * G, jednoduše dosadíme hodnotu.

Krok 2: z * s ^ -1 * g + r * s ^ -1 * d * G

Můžeme vzít (z + r * d) běžné

Krok 3: (z + r * d) * s ^ -1 * G

Nyní si pamatujte, že jsme již prokázali, že s = (z + r * d) * k ^ -1 mod n, pojďme dosadit hodnoty zde:

Krok 4: (z + r * d) * (z + r * d) ^ – 1 * k * G

The (z + r * d) * (z + r * d) ^ – 1 se navzájem ruší a zbylo nám:

Krok 5: k * G, což je souřadnice (x, y), kterou odesílatel původně poslal.

Co by se mohlo v eliptických křivkách pokazit?

I když je samozřejmé, že eliptické křivky jsou nejlepším způsobem kryptografie, faktem zůstává, že stále má několik slabých míst:

  • Co když byla zvolena špatná křivka? Pokud má křivka smyčku, existuje možnost, že 1001P = P pro jakýkoli bod P na křivce.

  • Může být zvolena slabá křivka, na kterou lze rozdělit.

Má své slabiny, ale jsou to docela zvládnutelné slabosti.

KONEC ČÁSTI 1

To je místo, kde ukončíme část 1 našeho průvodce bitcoinovými skripty. V části 2 se budeme zabývat:

  • Transakce s více podpisy.
  • Zaplaťte za Script Hash.
  • Řízení toku.
  • Časové zámky.

Zůstaňte naladěni na další část!

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me