Share this article

Ang Math sa Likod ng Bitcoin Protocol

Ang pagtingin sa ilalim ng hood ng Bitcoin protocol ay nakakatulong na magbigay ng insight sa mathematical na pundasyon ng digital currency.

Ang ONE dahilan kung bakit ang Bitcoin ay maaaring nakakalito para sa mga nagsisimula ay ang Technology sa likod nito ay muling tinutukoy ang konsepto ng pagmamay-ari.

Ang pagmamay-ari ng isang bagay sa tradisyunal na kahulugan, ito man ay isang bahay o isang kabuuan ng pera, ay nangangahulugan ng alinman sa pagkakaroon ng personal na pag-iingat ng bagay o pagbibigay ng pangangalaga sa isang pinagkakatiwalaang entity tulad ng isang bangko.

Story continues
Don't miss another story.Subscribe to the Crypto Long & Short Newsletter today. See all newsletters

Bitcoin Protocol

Sa Bitcoin iba ang kaso. Ang mga Bitcoin mismo ay hindi nakaimbak sa gitna o lokal at kaya walang ONE entity ang kanilang tagapag-alaga. Umiiral ang mga ito bilang mga tala sa isang distributed ledger na tinatawag na block chain, ang mga kopya nito ay ibinabahagi ng isang volunteer network ng mga konektadong computer. Ang "pagmamay-ari" ng isang Bitcoin ay nangangahulugan lamang ng pagkakaroon ng kakayahang ilipat ang kontrol nito sa ibang tao sa pamamagitan ng paglikha ng isang talaan ng paglilipat sa block chain. Ano ang nagbibigay ng kakayahang ito? Access sa isang ECDSA pribado at pampublikong pares ng susi. Ano ang ibig sabihin nito at paano nito sinisiguro ang Bitcoin?

Tingnan natin ang ilalim ng talukbong.

ECDSA ay maikli para sa Elliptic Curve Digital Signature Algorithm. Ito ay isang proseso na gumagamit ng isang elliptic curve at a may hangganan na larangan upang "pumirma" ng data sa paraang mabe-verify ng mga third party ang pagiging tunay ng lagda habang pinapanatili ng lumagda ang eksklusibong kakayahang gumawa ng lagda. Sa Bitcoin, ang data na nilagdaan ay ang transaksyon na naglilipat ng pagmamay-ari.

Ang ECDSA ay may hiwalay na mga pamamaraan para sa pagpirma at pagpapatunay. Ang bawat pamamaraan ay isang algorithm na binubuo ng ilang mga operasyon sa aritmetika. Ginagamit ng algorithm sa pag-sign ang pribadong key, at ang proseso ng pag-verify ay gumagamit ng pampublikong key. Magpapakita kami ng isang halimbawa nito mamaya.

Ngunit una, isang crash course sa mga elliptic curve at may hangganan na mga field.

Elliptic curves

Ang isang elliptic curve ay kinakatawan sa algebraically bilang isang equation ng form:

y2 = x3 + ax + b

Para sa a = 0 at b = 7 (ang bersyon na ginamit ng Bitcoin), ganito ang LOOKS :

matematika sa likod ng Bitcoin
matematika sa likod ng Bitcoin

Ang mga elliptic curve ay may mga kapaki-pakinabang na katangian. Halimbawa, ang isang non-vertical na linya na nagsa-intersect sa dalawang non-tangent point sa curve ay palaging mag-intersect sa ikatlong punto sa curve. Ang isang karagdagang pag-aari ay ang isang non-vertical line na tangent sa curve sa ONE punto ay magsa-intersect nang eksakto sa ONE pang punto sa curve.

Magagamit natin ang mga katangiang ito upang tukuyin ang dalawang operasyon: pagdaragdag ng punto at pagdodoble ng punto.

Pagdaragdag ng punto, P + Q = R, ay tinukoy bilang ang pagmuni-muni sa pamamagitan ng x-axis ng ikatlong intersecting point R' sa isang linya na kinabibilangan ng P at Q. Pinakamadaling maunawaan ito gamit ang isang diagram:

matematika sa likod ng Bitcoin
matematika sa likod ng Bitcoin

Katulad nito, pagdodoble ng punto, P + P = R ay tinukoy sa pamamagitan ng paghahanap ng line tangent sa puntong madodoble, P, at pagkuha ng repleksyon sa pamamagitan ng x-axis ng intersecting point R' sa kurba upang makuha R. Narito ang isang halimbawa kung ano ang magiging hitsura nito:

pagdodoble ng punto
pagdodoble ng punto

Magkasama, ginagamit ang dalawang operasyong ito para sa pagpaparami ng scalar, R = a P, tinukoy sa pamamagitan ng pagdaragdag ng punto P sa sarili a beses. Halimbawa:

R = 7P

R = P + (P + (P + (P + (P + (P + P))))))

Ang proseso ng scalar multiplication ay karaniwang pinasimple sa pamamagitan ng paggamit ng kumbinasyon ng point addition at point doubling operations. Halimbawa:

R = 7P

R = P + 6P

R = P + 2 (3P)

R = P + 2 (P + 2P)

dito, 7P ay pinaghiwa-hiwalay sa dalawang hakbang sa pagdodoble ng punto at dalawang hakbang sa pagdaragdag ng punto.

May hangganan na mga patlang

Ang isang may hangganan na patlang, sa konteksto ng ECDSA, ay maaaring isipin bilang isang paunang natukoy na hanay ng mga positibong numero kung saan ang bawat pagkalkula ay dapat mahulog. Anumang numero sa labas ng hanay na ito ay "balot sa paligid" upang mahulog sa loob ng hanay.

Ang pinakasimpleng paraan upang isipin ito ay ang pagkalkula ng mga natitira, na kinakatawan ng modulus (mod) operator. Halimbawa, ang 9/7 ay nagbibigay ng 1 na may natitirang 2:

9 mod 7 = 2

Narito ang aming finite field ay modulo 7, at lahat ng mod operations sa field na ito ay nagbubunga ng resulta na nasa loob ng range mula 0 hanggang 6.

Pinagsasama-sama ito

Gumagamit ang ECDSA ng mga elliptic curve sa konteksto ng isang may hangganang field, na lubos na nagbabago sa kanilang hitsura ngunit hindi sa kanilang mga pinagbabatayan na equation o mga espesyal na katangian. Ang parehong equation na naka-plot sa itaas, sa isang may hangganan na larangan ng modulo 67, ay ganito ang LOOKS :

matematika sa likod ng Bitcoin
matematika sa likod ng Bitcoin

Isa na itong set ng mga puntos, kung saan ang lahat ng x at y ang mga halaga ay mga integer sa pagitan ng 0 at 66. Tandaan na ang "curve" ay nananatili pa rin ang pahalang na simetrya nito.

Ang pagdaragdag at pagdodoble ng punto ay bahagyang naiiba na sa paningin. Ang mga linyang iginuhit sa graph na ito ay balot sa pahalang at patayong mga direksyon, tulad ng sa isang laro ng Asteroids, na nagpapanatili ng parehong slope. Kaya ang pagdaragdag ng mga puntos (2, 22) at (6, 25) LOOKS ganito:

matematika sa likod ng Bitcoin
matematika sa likod ng Bitcoin

Ang ikatlong intersecting point ay (47, 39) at ang reflection point nito ay (47, 28).

Bumalik sa ECDSA at Bitcoin

Ang isang protocol tulad ng Bitcoin ay pumipili ng isang set ng mga parameter para sa elliptic curve at ang finite field representation nito na naayos para sa lahat ng user ng protocol. Kasama sa mga parameter ang equation ginamit, ang PRIME modulo ng bukid, at a base point na bumabagsak sa kurba. Ang utos ng base point, na hindi independyenteng pinili ngunit isang function ng iba pang mga parameter, ay maaaring isipin na graphical bilang ang dami ng beses na maidaragdag ang punto sa sarili nito hanggang sa ang slope nito ay walang katapusan, o isang patayong linya. Ang base point ay pinili upang ang order ay isang malaking PRIME number.

Gumagamit ang Bitcoin ng napakalaking numero para sa base point, PRIME modulo, at order nito. Sa katunayan, lahat ng praktikal na aplikasyon ng ECDSA ay gumagamit ng napakalaking halaga. Ang seguridad ng algorithm ay umaasa sa mga value na ito na malaki, at samakatuwid ay hindi praktikal sa brute force o reverse engineer.

Sa kaso ng Bitcoin:

Elliptic curve equation: y2 = x3 + 7

PRIME modulo = 2256 – 232 – 29 – 28 – 27 – 26 – 24 - 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

Base point = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1 FD1078B44 FD1078B4 9C47D08F FB10D4B8

Order = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

Sino ang pumili ng mga numerong ito, at bakit? Ang isang mahusay na deal ng pananaliksik, at isang patas na halaga ng intriga, pumapalibot sa pagpili ng naaangkop na mga parameter. Pagkatapos ng lahat, ang isang malaki, tila random na numero ay maaaring magtago ng isang backdoor na paraan ng muling pagtatayo ng pribadong key. Sa madaling sabi, ang partikular na pagsasakatuparan na ito ay napupunta sa pangalan ng secp256k1 at bahagi ng isang pamilya ng mga solusyon sa elliptic curve sa may hangganan na mga field na iminungkahi para gamitin sa cryptography.

Mga pribadong susi at pampublikong susi

Sa pag-alis ng mga pormalidad na ito, nasa posisyon na tayo ngayon upang maunawaan ang mga pribado at pampublikong susi at kung paano nauugnay ang mga ito. Narito ito sa maikling salita: Sa ECDSA, ang pribadong key ay isang hindi mahuhulaan na napiling numero sa pagitan ng 1 at ng order. Ang pampublikong susi ay hinango mula sa pribadong key sa pamamagitan ng scalar multiplication ng base point nang ilang beses na katumbas ng halaga ng pribadong key. Ipinahayag bilang isang equation:

public key = pribadong key * base point

Ito ay nagpapakita na ang maximum na posibleng bilang ng mga pribadong key (at sa gayon ay Bitcoin address) ay katumbas ng pagkakasunud-sunod.

Sa isang tuluy-tuloy na field maaari naming i-plot ang tangent line at matukoy ang pampublikong key sa The Graph, ngunit may ilan mga equation na nagagawa ang parehong bagay sa konteksto ng may hangganan na mga patlang. Pagdaragdag ng punto ng p + q upang mahanap r ay tinukoy bilang bahagi ng mga sumusunod:

c = (qy - py) / (qx - px)

rx = c2 - px - qx

ry = c (px - rx) - py

At pagdodoble ng punto upang mahanap r ay ang mga sumusunod:

c = (3px2 + a) / 2py

rx = c2 - 2px

ry = c (px - rx) - py

Sa pagsasagawa, ang pag-compute ng pampublikong susi ay pinaghiwa-hiwalay sa isang bilang ng mga pagdodoble ng punto at mga operasyon sa pagdaragdag ng punto simula sa base point.

Patakbuhin natin ang likod ng halimbawa ng sobre gamit ang maliliit na numero, upang makakuha ng intuwisyon tungkol sa kung paano binuo at ginagamit ang mga susi sa pagpirma at pag-verify. Ang mga parameter na gagamitin namin ay:

Equation: y2 = x3 + 7 (na ibig sabihin, a = 0 at b = 7)

PRIME Modulo: 67

Base Point: (2, 22)

Order: 79

Pribadong susi: 2

Una, hanapin natin ang pampublikong susi. Dahil pinili namin ang pinakasimpleng posibleng pribadong key na may halaga = 2, mangangailangan lamang ito ng isang solong puntong pagdodoble ng operasyon mula sa base point. Ang pagkalkula ay ganito ang LOOKS :

c = (3 * 22 + 0) / (2 * 22) mod 67

c = (3 * 4) / (44) mod 67

c = 12 / 44 mod 67

Dito kailangan nating mag-pause para sa BIT sleight-of-hand: paano natin gagawin ang paghahati sa konteksto ng isang may hangganan na field, kung saan ang resulta ay dapat palaging isang integer? Kailangan nating i-multiply sa kabaligtaran, kung aling espasyo ang hindi nagpapahintulot sa amin na tukuyin dito (tinutukoy ka namin sa dito at dito kung interesado). Sa sitwasyong nasa kamay, kakailanganin mong magtiwala sa amin sa sandaling ito:

44-1 = 32

Gumagalaw pakanan:

c = 12 * 32 mod 67

c = 384 mod 67

c = 49

rx = (492 - 2 * 2) mod 67

rx = (2401 - 4) mod 67

rx = 2397 mod 67

rx = 52

ry = (49 * (2 - 52) - 22) mod 67

ry = (49 * (-50) - 22) mod 67

ry = (-2450 - 22) mod 67

ry = -2472 mod 67

ry = 7

Ang aming pampublikong susi sa gayon ay tumutugma sa punto (52, 7). Lahat ng iyon ay gumagana para sa isang pribadong key ng 2!

Ang operasyong ito - mula sa pribado tungo sa pampublikong susi - ay madaling computation kung ihahambing sa pagsisikap na magtrabaho nang paatras upang matukoy ang pribadong susi mula sa pampublikong susi, na habang sa teoryang posible ay hindi magagawa sa pagkalkula dahil sa malalaking parameter na ginagamit sa aktwal na elliptic cryptography.

Samakatuwid, ang pagpunta mula sa pribadong susi patungo sa pampublikong susi ay sa pamamagitan ng disenyo ng isang one-way na paglalakbay.

Tulad ng pribadong key, ang pampublikong susi ay karaniwang kinakatawan ng isang hexadecimal string. Ngunit teka, paano tayo makakakuha mula sa isang punto sa isang eroplano, na inilarawan ng dalawang numero, patungo sa isang solong numero? Sa isang hindi naka-compress na pampublikong key ang dalawang 256- BIT na numero na kumakatawan sa x at y ang mga coordinate ay magkakadikit lang sa ONE mahabang string. Maari rin nating samantalahin ang symmetry ng elliptic curve para makabuo ng compressed public key, sa pamamagitan ng pagpapanatiling x halaga at pagpuna kung aling kalahati ng curve ang punto. Mula sa bahagyang impormasyong ito maaari naming mabawi ang parehong mga coordinate.

Pag-sign ng data gamit ang pribadong key

Ngayong mayroon na tayong pribado at pampublikong pares ng susi, pumirma tayo ng ilang data!

Ang data ay maaaring kahit anong haba. Ang karaniwang unang hakbang ay ang pag-hash ng data upang makabuo ng isang numero na naglalaman ng parehong bilang ng mga bit (256) bilang ang pagkakasunud-sunod ng curve. Dito, para sa pagiging simple, laktawan namin ang hakbang sa pag-hash at pipirmahan na lang ang raw data z. Tatawagan namin G ang base point, ang order, at d ang pribadong susi. Ang recipe para sa pagpirma ay ang mga sumusunod:

  • Pumili ng ilang integer k sa pagitan ng 1 at n - 1.
  • Kalkulahin ang punto (x, y) = k * G, gamit ang scalar multiplication.
  • Hanapin ang r = x mod n. Kung r = 0, bumalik sa hakbang 1.
  • Hanapin ang s = (z + r * d) / k mod n. Kung s = 0, bumalik sa hakbang 1.
  • Ang pirma ay ang pares (r, s)

Bilang paalala, sa hakbang 4, kung ang mga numero ay nagreresulta sa isang fraction (na sa totoong buhay ay halos palaging ganoon), ang numerator ay dapat na i-multiply sa kabaligtaran ng denominator. Sa hakbang 1, mahalaga iyon k hindi mauulit sa iba't ibang lagda at hindi ito mahuhulaan ng ikatlong partido. Ibig sabihin, k dapat alinman sa random o nabuo sa pamamagitan ng mga deterministikong paraan na pinananatiling Secret mula sa mga ikatlong partido. Kung hindi, posibleng kunin ang pribadong key mula sa hakbang 4, dahil , z, r, k at kilala lahat. Maaari mong basahin ang tungkol sa isang nakaraang pagsasamantala ng ganitong uri dito.

Piliin natin ang ating data upang maging numero 17, at Social Media ang recipe. Ang aming mga variable:

z = 17 (data)

n = 79 (order)

G = (2, 22) (base point)

d = 2 (pribadong key)

  • Pumili ng random na numero:

k = rand(1, n - 1)

k = rand(1, 79 - 1)

k = 3 (talaga bang random ito? OK nakuha mo kami, ngunit gagawin nitong mas simple ang aming halimbawa!)

  1. Kalkulahin ang punto. Ginagawa ito sa parehong paraan tulad ng pagtukoy sa pampublikong susi, ngunit para sa kaiklian, iwanan natin ang aritmetika para sa pagdaragdag ng punto at pagdodoble ng punto.

(x, y) = 3G

(x, y) = G + 2G

(x, y) = (2, 22) + (52, 7)

(x, y) = (62, 63)

x = 62

y = 63

  1. Hanapin r:

r = x mod n

r = 62 mod 79

r = 62

  1. Hanapin :

s = (z + r * d) / k mod n

s = (17 + 62 * 2) / 3 mod 79

s = (17 + 124) / 3 mod 79

s = 141 / 3 mod 79

s = 47 mod 79

s = 47

Tandaan na sa itaas ay nagawa naming hatiin ng 3 dahil ang resulta ay isang integer. Sa totoong buhay na mga kaso, gagamitin namin ang kabaligtaran ng k (tulad ng dati, nagtago kami ng ilang madugong detalye sa pamamagitan ng pag-compute nito sa ibang lugar):

s = (z + r * d) / k mod n

s = (17 + 62 * 2) / 3 mod 79

s = (17 + 124) / 3 mod 79

s = 141 / 3 mod 79

s = 141 * 3-1 mod 79

s = 141 * 53 mod 79

s = 7473 mod 79

s = 47

  1. Ang aming lagda ay ang pares (r, ) = (62, 47).

Tulad ng pribado at pampublikong mga susi, ang lagda na ito ay karaniwang kinakatawan ng isang hexadecimal string.

Pag-verify ng lagda gamit ang pampublikong susi

Mayroon na kaming ilang data at lagda para sa data na iyon. Ang isang third party na may aming pampublikong key ay maaaring makatanggap ng aming data at lagda, at i-verify na kami ang mga nagpadala. Tingnan natin kung paano ito gumagana.

Sa Q bilang pampublikong susi at ang iba pang mga variable na tinukoy tulad ng dati, ang mga hakbang para sa pag-verify ng isang lagda ay ang mga sumusunod:

  • I-verify na ang r at s ay nasa pagitan ng 1 at n - 1.
  • Kalkulahin ang w = s-1 mod n
  • Kalkulahin ang u = z * w mod n
  • Kalkulahin ang v = r * w mod n
  • Kalkulahin ang punto (x, y) = uG + vQ
  • I-verify na r = x mod n. Ang lagda ay hindi wasto kung ito ay hindi.

Bakit gumagana ang mga hakbang na ito? Nilaktawan namin ang patunay, ngunit maaari mong basahin ang mga detalye dito. Social Media natin ang recipe at tingnan kung paano ito gumagana. Ang aming mga variable, muli:

z = 17 (data)

(r, s) = (62, 47) (pirma)

n = 79 (order)

G = (2, 22) (base point)

Q = (52, 7) (public key)

  • I-verify iyon r at nasa pagitan ng 1 at - 1. Suriin at suriin.

r: 1 <= 62 < 79

s: 1 <= 47 < 79

  1. Kalkulahin w:

w = s-1 mod n

w = 47-1 mod 79

w = 37

  1. Kalkulahin u:

u = zw mod n

u = 17 * 37 mod 79

u = 629 mod 79

u = 76

  1. Kalkulahin v:

v = rw mod n

v = 62 * 37 mod 79

v = 2294 mod 79

v = 3

  1. Kalkulahin ang punto (x, y):

(x, y) = uG + vQ

Hatiin natin ang pagdodoble at pagdaragdag sa punto uG at vQ magkahiwalay.

uG = 76G

uG = 2(38G)

uG = 2( 2(19G) )

uG = 2( 2(G + 18G) )

uG = 2( 2(G + 2(9G) ) )

uG = 2( 2(G + 2(G + 8G) ) )

uG = 2( 2(G + 2(G + 2(4G) ) ) )

uG = 2( 2(G + 2(G + 2( 2(2G) ) ) ) ) )

Magpahinga sandali upang pahalagahan na sa pamamagitan ng paggamit ng trick sa pagpapangkat, binabawasan namin ang 75 sunod-sunod na pagpapatakbo ng karagdagan sa anim na operasyon lamang ng pagdoble ng punto at dalawang pagpapatakbo ng pagdaragdag ng punto. Ang mga trick na ito ay magiging kapaki-pakinabang kapag ang mga numero ay talagang malaki.

Gumagawa ng aming paraan mula sa loob palabas:

uG = 2( 2(G + 2(G + 2( 2( 2(2, 22) ) ) ) ) )

uG = 2( 2(G + 2(G + 2( 2(52, 7) ) ) ) )

uG = 2( 2(G + 2(G + 2(25, 17) ) ) )

uG = 2( 2(G + 2( (2, 22) + (21, 42) ) ) )

uG = 2( 2(G + 2(13, 44) ) )

uG = 2( 2( (2, 22) + (66, 26) ) )

uG = 2( 2(38, 26) )

uG = 2(27, 40)

uG = (62, 4)

At ngayon para sa vQ:

vQ = 3Q

vQ = Q + 2Q

vQ = Q + 2(52, 7)

vQ = (52, 7) + (25, 17)

vQ = (11, 20)

Pagsasama-sama ng mga ito:

(x, y) = uG + vQ

(x, y) = (62, 4) + (11, 20)

(x, y) = (62, 63)

Malinaw na ang hakbang 5 ang bulto ng gawain. Para sa huling hakbang,

  1. I-verify na r = x mod n

r = x mod n

62 = 62 mod 79

62 = 62

Ang aming lagda ay may bisa!

Konklusyon

Para sa inyo na nakakita ng lahat ng mga equation at lumaktaw sa ibaba, ano ang natutunan natin?

Nakabuo kami ng ilang intuwisyon tungkol sa malalim na kaugnayang pangmatematika na umiiral sa pagitan ng pampubliko at pribadong mga susi. Nakita namin kung paano kahit sa pinakasimpleng mga halimbawa ang matematika sa likod ng mga lagda at pag-verify ay mabilis na nagiging kumplikado, at maaari naming pahalagahan ang napakalaking kumplikado na dapat kasangkot kapag ang mga parameter na kasangkot ay 256- BIT na mga numero. Nakita namin kung paano ang matalinong paggamit ng pinakasimpleng mga pamamaraan sa matematika ay maaaring lumikha ng one-way na "trap door" na mga function na kinakailangan upang mapanatili ang impormasyon asymmetry na tumutukoy sa pagmamay-ari ng isang Bitcoin. At mayroon kaming bagong tuklas na kumpiyansa sa katatagan ng sistema, basta't maingat naming pinangangalagaan ang kaalaman ng aming mga pribadong susi.

Sa madaling salita, ito ang dahilan kung bakit karaniwang sinasabi na ang Bitcoin ay “backed by math”.

Kung naghintay ka sa mga masalimuot na bahagi, umaasa kaming nagbigay ito sa iyo ng kumpiyansa na gawin ang susunod na hakbang at subukan ang matematika nang mag-isa (a modular arithmetic Calculator ginagawang mas madali ang finite field math). Nalaman namin na ang pagdaan sa mga hakbang ng pagpirma at pag-verify ng data sa pamamagitan ng kamay ay nagbibigay ng mas malalim na pag-unawa sa cryptography na nagbibigay-daan sa natatanging anyo ng pagmamay-ari ng bitcoin.

Ang artikulong ito ay muling nai-publish dito nang may pahintulot mula sa may-akda. Orihinal na nai-publish noong Chain.com. Ang may-akda ay nagbibigay ng espesyal na pasasalamat kay Steven Phelps para sa tulong sa artikulong ito.

Si Eric Rykwalder ay isang software engineer at ONE sa Chain.commga tagapagtatag.

Eric Rykwalder

Si Eric Rykwalder ay isang software engineer at ONE sa mga tagapagtatag ng Chain.com, isang Bitcoin API para sa mga developer.

Picture of CoinDesk author Eric Rykwalder