Bitcoin ba kamo?
Kabanata 4: Pagmamay-ari ng Bitcoin at ang Wallets

Kabanata 4: Pagmamay-ari ng Bitcoin at ang Wallets

Mambabasa: baguhan at konting advanced sa huli

Paano ba magkaroon ng Bitcoin? Ang pinakaunang paraan ay ang pagmimina ng Bitcoin. Subalit dahil sa pagtatag ng network, tumaas na ang espesipikasyon ng hardware na kailangan para sa pagmimina. Hindi na praktikal sa karaniwang tao. At kailangan may teknikal na kakayahan ka rin para magawa ito, kahit noong pwede pa gamitin ang personal computer.

Paano na para sa mga baguhan? Maaari kang bumili ng Bitcoin sa mga centralized exchanges. Pwede ka rin makipagtransaksyon peer-to-peer. O kaya naman, kumita ka ng Bitcoin sa pamamagitan ng pagtanggap nito bilang bayad sa iyong produkto o serbisyo.

Centralized Exchange

Labag man ito sa prinsipyo ng Bitcoin na magkaroon ng sariling kontrol sa iyong salapi at privacy, ang paggamit ng centralized exchange ang abot-kayang paraan sa isang bagong kukuha palang ng Bitcoin. Ito kasi ay pamilyar, na para kang magbubukas ng account sa bangko o isang app. Marami nang naitayong kumpanya para rito.

May mga modernong bangko na nagbibigay ng ganitong serbisyo. Ang institusyong ganito ay may e-wallet app na piso, kung saan pwede mo gamitin pambili rin ng Bitcoin. Kaso, madalas rin na ang mga ganitong kumpanya ay may iba pang cryptocurrencies na pwedeng bilhin.

Para sa mga marunong sa trading, may mga exchange din na pwede ka magtakda ng hangganan o ano pang kondisyon sa pagbili (halimbawa: limit, market at stop-limit sa spot trading). Maihahalintulad sa pagbili ng stocks ito. At marami ring exchange sa pagitan ng iba’t ibang cryptocurrencies. Sa katanunayan, depende sa lokasyon mo, mas madali ka pang makakahanap ng exchange na para lamang sa cryptocurrencies, dahil hindi sila napipigilan ng mga hangganan ng teritoryo. At ang pagpapalit pabalik sa fiat currency ng bansa mo ay mas mahirap magawa, dahil sa mga restriksyon.

Ang mga lisensyado o may permiso sa gobyerno na magpatakbo ng cryptocurrency exchange na pwedeng lagyan ng fiat currency, ay sumusunod sa patakaran ng KYC – know your customers – na pinapatupad sa mga insititusyong pinansyal. Kaya, kung gagawa ka ng account, kailangan mong magbigay ng pangalan at iba pang impormasyon, kasama pa ang iyong litrato.

Maaari mong tignan at pagpilian ang mga sumusunod na nakarehistrong Virtual Asset Service Providers (VASPs) sa Pilipinas (1 Oktubre 2024). May mga app din ang iba dyan:

  • TopJuan Technologies Corporation
  • Betur Inc. (coins.ph)
  • Bloomsolutions, Inc.
  • Direct Agent 5 (SurgePay mobile app)
  • Maya Philippines, Inc.
  • Moneybees Forex Corp.
  • Philippine Digital Asset Exchange (PDAX)

Bahala ka nang mag-aral at humusga kung ano ang bagay sa iyo. Basta sa umpisa, malamang dadaan ka sa ganito:

Pagbubukas ng account sa centralized exchange

Gaya na rin ng bangko, may hangganan ang halaga o dalas ng mga transaksyon, at minsan depende rin ito sa antas ng beripikasyon na ibibigay mo. Halimbawa, may serbisyo na papayag na mas mataas ang halaga na pwede ideposito o withdraw, kung papayag kang ibigay ang iyong address.

Halimbawang deposit at withdraw limits sa “Level 1 verified account”

Maari ka rin gumamit ng credit card sa iba. Ang mga ito ay kadalasan internasyonal na kumpanya na nakahingi ng permiso mag-opera sa maraming bansa, at nakipagtambal sa iba-ibang payment networks bukod pa sa mga bangko. Kadalasan mahal ang palitan ng dolyar sa piso kapag credit card and gamit mo. Kaya yung pwede sanang e-wallet o kaya bank transfer sa lokal na bangko ang gamitin.

Ang mga centralized exchange ay maaaring may kaltas sa pagpasok at labas mo ng salapi. Pamilyar ka dito kung nag-o-online transfer ka sa pagitan ng magkaibang bangko, at kapag nakaranas ka nang magpadala ng pera gamit ang mga remittance services. May kaltas din sila sa pakikipagpalit mo ng piso sa Bitcoin, na tinatawag na spread. Kumbaga, mas mataas ang palitan kesa kung nakikipag-trade ka diretso sa merkado o market. Ang diperensyang iyon ang kita ng broker. Sa kabaliktaran naman, pag ibebenta mo ang bitcoin para sa piso, mas mababa ang presyo kesa sa market. Ang diperensya uli ang kita ng broker. Yung mga button na Buy o Sell lang, o kaya Quick Buy/Sell, na makikita agad sa interface ng website o app ay malamang ganito ang mekanismo ng mga kaltas.

At gaya ng nabanggit na, kung sanay ka sa stock exchange, forex, etc., pwede ka makipag-trade diretso sa market, para mas maliit ang kaltas. Hanapin mo ang link papunta sa exchange o sa Pro na interface ng website o app.

Advanced exchange interface ng Binance, sa pakikipagpalitan ng Bitcoin at ibang cryptocurrency
Pro interface ng Coins.ph, sa pakikipagpalitan ng Bitcoin sa Piso (PHP)

Peer-to-peer Exchange

Napag-usapan na natin ang ibig sabihin ng peer-to-peer. Magagawa ang pakikipagtransaksyon na ganito kung may mga kakilala kang may Bitcoin. At, kung ang mga kakilala mong iyon ay sang-ayon bitawan ang kanilang Bitcoin!

Sa paraang ito, kailangan lang ng dalawang partido na buksan ang kani-kaniyang wallet. At gamitin ang Send at Receive functions nito.

Pagtratrabaho para sa Bitcoin

Maari ka ring maningil ng bayad na Bitcoin. Kung ikaw ay empleyado ng isang negosyanteng nagbi-Bitcoin, o kaya kung may negosyo ka, at nagpapabayad ka ng Bitcoin. Sa huling halimbawa, pwedeng may nakahanda ka nang QR code na ii-scan ng mga customer para bayaran.

Sa peer-to-peer at pagtratrabaho sa bitcoin, network fees lamang ang mayroon. Wala nang iba pang fee na kukunin ng ibang partido (“third party”). Sa dalawang kaso rin ng pagkakaroon ng bitcoin, dapat ay mayroon ka nang nakahandang wallet.

Pag-usapan muna natin ito. Ang usapan sa transaksyon ay idedetalye naman natin sa susunod na kabanata.

Pagkakaroon ng Bitcoin Wallet

Not your keys, not your coins.

Maraming klase ng bitcoin wallets. Kapag nagbukas ka ng account sa centralized exchange, mayroong wallet na konektado sa iyo. May kapasidad kang maglipat ng bitcoin at tumanggap sa address na nasasaad. Subalit hindi mo ganap na kontrolado and wallet na ganito. Aasa ka na hindi malulugi ang kumpanya at may integridad ang mga may-ari para hindi itakbo, at mawala ang bitcoin mo. Bakit? Dahil wala sa iyo ang susi.

“Not your keys, not your coins.” Kung hindi mo hawak ang susi ng wallet, hindi sayo ang salapi. Ang pangungusap na nabanggit ay naging kasabihan na sa komunidad ng Bitcoin, at pati na sa buong industriya ng cryptocurrency. Tandaan, hindi lahat ng wallet ay magkakapantay. Kailangan mong pumili ng isa na mayroon kang kontrol. Ang mga wallet na nasa centralized exchanges ay custodial. Ang mga wallet na hawak mo ang susi ay non-custodial.

Napag-usapan na natin sa Kabanata 3 ang mga susing tinutukoy: private key at public key. Bawat wallet ay mayroon nito. At dapat pinanghahawakan mo ang mga ito, kahit hindi mo man kita.

May iba’t ibang klase ng Bitcoin wallets. At may iba-iba ring paraan ng pag-uuri. Para sa ating pag-aaral, dun na tayo sa pinakakaraniwan gamitin ngayon: hierarchical deterministic wallets (HD wallets). Ito ay base sa Bitcoin Improvement Proposal bilang 32: BIP-0032. At karaniwan na ring sumusunod ang mga HD wallets sa BIP-0039, kung saan naman nasasaad ang paggamit ng mnemonic code para sa pagkuha ng seed. Palalawakin natin ang mga ito sa bandang huli ng kabanata.

Tala para sa mambabasa: Ang Bitcoin Improvement Proposal (BIP) ay dokumentong tumutukoy sa mga bagong katangian sa disenyo ng Bitcoin software, network, atbp. implementayson. Maaari mong siyasatin ang mga napapaloob dito, lalo na kung programmer ka na gustong tumulong sa pag-audit ng bitcoin code. Makikita ito sa GitHub. Tandaan na ang estado ng isang BIP ay nababago at hindi lahat ay tinatanggap ng komunidad.

Sa mga konsiderasyong nabanggit, ito na ang klasipikasyong ibibigay natin sa wallets: base sa operating system.

  • Mobile – sa anyo ng app para sa smart phones. Madali itong gamitin lalo na kung sanay ka naman na sa mga e-wallets at online banking.
  • Desktop – sa anyo ng app na para sa desktop at laptop.
  • Hardware – ito ay wallet na may dedikadong hardware device. Ito ay pwedeng ikonekta sa computer gamit ang USB, kung kailangan. Pero may mga rekomendasyon para magamit ito ng hindi kailanman ikokonekta, hanggat hindi ka maglilipat ng Bitcoin palabas ng wallet.

Don’t trust, verify!

Mahalagang tandaan na kapag ang wallet mo ay konektado sa internet, ito ay hot wallet. Lahat ng Mobile at Desktop wallet ay hot wallet. At kapag hindi talaga kailanman kumonekta sa internet, ito ay cold wallet. Ito ang pinakamainam na paraan ng pagtatago ng Bitcoin. Subalit kailangang naiintindihan mo paano gamitin ang ganitong wallet at ang mga implikasyon sa pag protekta nito. Kung ikaw ay baguhan pa lamang na maliit palang ang pagmamay-aring Bitcoin, ito ay hindi inirerekomenda.

Kung ang paraan mong makakuha ng Bitcoin ay sa pamamagitan ng pagbili nito, nirerekomenda na ilipat mo iyon palabas ng exchange sa takdang panahon. Pwede ring itakda mo ang halaga kung saan dapat ay ilipat mo na sa non-custodial wallet ang bitcoin. Pwede ka ring magkaroon ng katulad na kaugalian sa paglipat naman mula hot papuntang cold wallet.

Ang website na ito ay nakakatulong sa pagpili ng Bitcoin wallets: https://walletscrutiny.com/. Tandaan, “Don’t trust, verify!” Maaaring magaling ang mga taong nagbibigay ng impormasyon ukol sa Bitcoin. Subalit mainam na gawin natin ang sariling pagsisiyasat. Tao lang naman din sila na pwedeng magkamali. At maaaring hindi naa-update ang mga impormasyon.

Paggamit ng hot Bitcoin wallet

Maraming mapagpipiliang bitcoin wallets na pwedeng i-download sa smart phone o personal computer. Ilan rito ay parehas na may mobile at desktop na version. Itong kaunting nakalista ay wallets para sa Bitcoin lamang. Bahala ka nang sumubok, pag-aralan at maghanap pa ng iba.

  • Blockstream Green
  • Blue Wallet
  • Electrum
  • Mycelium
  • Simple Bitcoin Wallet

Madali lang mag-umpisa:

Paggawa ng bitcoin wallet gamit ang Mobile o Desktop app

Lumikha tayo ng 3 karakter na makikipagtransaksyon sa isa’t isa: Sina Bukoy, Totoy at Caloy. Halimbawa, si Bukoy ay magpapasa ng bitcoin sa kaibigan nyang si Caloy, na isang freelance graphic artist.

Sa wallet ay may Send at Receive na pagpipilian. Kapag pinili ang Send, ay may 2 paraan para magpasa ng bitcoin. Pag-scan ng QR code, o paglagay ng bitcoin address.

Pagbayad o pasa (Send) ng Bitcoin

Sa wallet naman ni Caloy, pipiliin nya ang Receive. At dun, pwede nya ipakita ang QR Code, o kaya naman ang Bitcoin address na dapat makopya ni Bukoy. Kadalasang may Copy button na rin sa tabi ng address para isang pindutan lang. Nakakatulong iyon kung naglilipat ka ng Bitcoin sa iba’t iba mong wallets.

Pagtanggap (Receive) ng Bitcoin

Si Totoy naman ay nasa ibang bansa, pero may pinagawa rin kay Caloy, at magbabayad din ng Bitcoin. Sa sitwasyong ito, na magkalayo ang magtatransaksyon, maaaring magpalit sila ng pribadong mensahe sa isa’t isa. Kokopyahin ni Caloy ang kanyang address na tatanggap, at ibibigay kay Totoy. Si Totoy naman ay kokopyahin ito at ididikit sa nararapat na blangko sa wallet. Pwede rin silang mag-video call saglit gamit ang computer, at ipapakita ni Caloy ang QR code ng address nya sa camera, para i-scan ng smartphone ni Totoy.

Paggamit ng hardware wallet

Ang mga hardware wallet ay may simpleng interface lamang. Kailangan mo i-set-up ito sa umpisa na nakakonekta sa iyong computer. Merong iba na pwedeng sa smart phone ikonekta. May mga magpapa-install muna ng firmware. Yung iba naman ay hindi na kelangan at pupunta na sa paggawa ng bagong wallet.

Ang mga ito ay halimbawa ng hardware wallets. Bahala ka nang humusga kung ano ang nararapat mong bilhin.

  • Blockstream Jade
  • BitBox
  • Coldcard
  • Foundation Passport
  • Trezor

Siguraduhin din na hindi ka gagamit ng peke o pinakialamang (tampered) device. Ang elementaryang paggamit ay pinapakita sa susunod na ilustrasyon:

Pagkakaroon at pag-umpisang gamit ng hardware wallet

Inirerekomenda na huwag gumamit ng electronic na kopya ng mnemonic code o recovery seed. Sa mundo natin na laging online, hindi na bago ang presensya ng hackers na gustong magnakaw.

Ang pag Send at Receive ng Bitcoin ay parehas lang ang konsepto. Pero mas mabagal ang proseso dahil kailangang may wallet kang gamit sa kompyuter o mobile device na syang intermedyaryo, at ang hardware wallet ang may huling kumpirmasyon sa aksyon. At tandaan na ang hardware wallet ang may private key, kaya ito lang ang makakapirma ng transaksyon na Send.

Matapos ang set up, pwedeng hindi mo na ikonekta sa kompyuter ang hardware wallet kung tanggap ka lang naman ng tanggap ng bitcoin. Sa totoo lang, may mga paraan din na hindi nakakonekta ang hardware wallet sa kompyuter, kahit sa pag set up pa lamang. Pero sa susunod na natin ito pag-uusapan.

Kailangan ikonekta sa intermedyaryong wallet sa kompyuter o smart phone ang iyong hardware wallet. Sa ilustrasyon kanina, ipagpalagay na ang pag set up ng wallet ay gamit na ang intermedyaryong desktop wallet.

Para makatanggap ng Bitcoin:

Pagtanggap ng Bitcoin sa iyong hardware wallet

Gaya ng nabanggit, pwede ka makatanggap ng Bitcoin nang hindi naka konekta ang iyong hardware wallet. Pero sa umpisa kailangan mong mailagay ang keystore, na naglalaman ng Extended Public Key (xpub). Ang xpub ay kayang gumawa ng mga receive address, pero walang kakayahan pumirma ng transaksyon (para sa Send). Mapag-uusapan natin ito sa bandang huli ng kabanata.

Pag-import ng keystore para makatanggap ng bitcoin nang hindi na konektado ang hardware wallet

At mula dyan, pwede kang pindot nalang ng pindot ng Receive, nang hindi na kelangan ikonekta ang hardware wallet.

Ngayon, kung ikaw ay magpapadala na ng Bitcoin, kelangan gamitin uli ang hardware wallet. Sa ilustrasyong susunod, ay ikokoneta ang nabanggit sa kompyuter.

Pagbayad o pasa (Send) ng Bitcoin gamit ang hardware wallet.

Basta tandaan na nasa hardware mo ang private key, kaya ito lamang ang makakapirma ng transaksyon.

Sa ibang kabanata, ibabahagi namin ang paraan nang hindi kailanman ikokonekta ang hardware wallet.

Pagkakaiba ng Bitcoin wallet address

Pag-usapan natin ang mga Bitcoin address. Base sa implementasyon, may pagkakaiba sa representasyon ng mga address.

Mabilisang pagkakaiba:

  • Legacy P2PKH – Ito ang unang anyo ng bitcoin address na nag-uumpisa sa “1”. Halimbawa: 1Atyy5h4SSdqWRuS8pzxgTb4bMe7ZpdunP
  • P2SH – Ito ang sumunod na anyo ng address para sa pagbabagong inirekomenda sa BIP-0016 para sa mga komplikadong transaksyon. Ang alinsunod na anyo ng address ay inilathala sa BIP-0013, kung saan tinukoy ang pag-uumpisa sa “3”. Halimbawa: 37paP4uTjmA4Pi85LG6CF9huift3Dw1kFT
  • Native SegWit – Ito ang mga address na nag-uumpisa sa “bc1”. Ito ay nagbunga mula sa pagbabagong hatid ng BIP-0141. At ang pagkuha ng wallet address ay base sa rekomendasyon ng BIP-0084 kaya makikita mo iyon minsang deskripsyon kapag gagawa ka pa lamang ng bagong Bitcoin address. Samantalang ang rekomendasyon para sa itsurang mababasa ng tao ay nasasaad sa BIP-0173. Halimbawang address na ganito: bc1q6m86vk2t8wj2fhn4s3sevg7xzjdwqlll3v73p2
  • Nested SegWit (P2SH-P2WPKH) — Nag-uumpisa rin ang address na ito sa “3”. Pero ito ay gamit bilang intermediyaryo para ang isang wallet na upgraded na sa SegWit ay mapagpadalhan ng wallet na hindi pa upgraded sa SegWit. Ang pagkuha ng wallet address naman ay base sa rekomendasyon ng BIP-0049, na bibigyan nating linaw mamaya.
  • Taproot – Ito ang pinakabagong anyo na nag-uumpisa sa “bc1”. Ang rekomendasyong sumaklaw sa pagkuha ng wallet address dito ay BIP-0086. Pero ang anyo ng address ay kaparehas ng konseptong nasasaad sa BIP-0173 dahil SegWit pa rin naman ito. Itinalaga lang sa isang taproot address ang mas bagong bersyon. Halimbawa: bc1pveaamy78cq5hvl74zmfw52fxyjun3lh7lgt44j03ygx02zyk8lesgk06f6

Mahalang tandaan na kapag ang mga wallet ay hindi sumusuporta sa mas bagong implementasyon, maaaring mawala ang Bitcoin mo. Kaya mas sigurado na magpasa ka lang sa mga magkakaparehong uri. At pag-aralan kung anu-anong mga wallet ang sumusunod sa bagong implementasyon, habang sumusuporta rin sa mga mas luma. Pwede ka naman gumawa ng iba-ibang klaseng address sa loob ng isang wallet software.

Kaya pag-usapan natin ang bawat isa para mas maintindihan. Pero kapag natapos nating pag-usapan muna ang Base 58.

Base 58 na anyo ng Bitcoin address

Ang Base 58 ay sistema ng representasyon ng numero gamit ang pinaghalong numero at alpabeto (alphanumeric). Halimbawa, pamilyar tayo sa decimal system na gamit ang numerong 0 – 9 (“deci” – 10 – bilang ng baseng numero). Minsan, para mas maging siksik pa ang representasyon ng numero, gumagamit ng hexadecimal (base 16) na system. Bukod sa digits na 0, 1, 2…9, dagdag pa ang mga letrang A, B, … F para makabuo ng 16 na base. Ang ganitong mga sistema ay nakakatulong makatipid sa memorya ng kompyuter kapag malalaking halaga ang sangkot. Halimbawa, ang 16 sa decimal ay F sa hexadecimal. Kita mo? Mas maiksi ang itatagong halaga ng kompyuter.

Sa Base 58, gumagamit ng mga numero, at maliliit at malalaking titik sa alpabeto. Pero, tinanggal ang mga nakakalitong numero/letra na: 0 (Zero), O (malaking o), l (maliit na L), I (malaking i). Kaya, 9 na numero, 24 na malalaking letra ng alpabeto, at 25 na maliliit na letra ng alpabeto: 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, m, n, o, p, q, r, s, t, u, v, w, x, y, z.

Bakit ito ang napili? Para mas maiksi basahin kesa kapag nakarepresenta ng mas mababang base na system ang Bitcoin address. At dahil nga tinanggal ang mga nakakalitong numero at titik, mababawasan ang pagkakamali sa pagbasa at sulat nito.

Subalit, makikita mo maya-maya na mapapalitan din ito sa mga mas bagong anyo ng Bitcoin address. Ngayon pag-usapan na natin ang iba-ibang Bitcoin address.

A. Legacy Bitcoin address
Ang unang anyo ng Bitcoin address ay nabubuo kapag ang public key ay dadaan sa 2 hashing functions (SHA-256 at RIPEMD160), tapos ang resulta ay i-e-encode sa Base58Check. Kaya ang isang acronym dito ay P2PKH – Pay to public key hash.

Ilustrasyon ng paggawa ng Bitcoin Address mula sa Pampublikong Susi (Public Key)

Ang Version na dinuduktong sa unahan ng public key hash ay 00. Magdudulot ito ng Base 58 Encode na nag-uumpisa sa 1. Iyan ang isang palatandaan ng legacy bitcoin address.

Ang Check sa Base58Check ay tumutukoy sa pagsama ng Checksum sa gagawing Bitcoin address.

Ang checksum ay maliit na bloke ng data mula sa mas malaking bloke ng data na isinasama sa totoong kailangan na data. Ang paggamit ng checksum ay ginagamit sa information technology upang matignan kung nagkaroon ng pagkakamali sa transmission at storage ng mga data.

Sa ilustrasyon sa taas, makikita na ginamit ang Version at Public Key hash, na syang mahalaga at kailangan na data, upang mag double hash. Tapos, kukunin lamang ang 4 bytes ng resulta at iduduktong doon sa orihinal na data na kailangan.

At nakita mo na kung ano ang detalye ng mahika ng matematika na pinatikim sa Kabanata 2. Sa totoo lang, detalyeng ilustrasyon, hindi ang detalye ng madugong matematika ang pinakita natin. Pero ayos na yan, basta kuha mo na ang konsepto. Tama ba?

Napag-usapan naman na natin sa Kabanata 3 ang komplikasyon ng hashing function na tulad ng SHA-256. Idagdag lang natin na ang ikalawang hashing function na dinadaanan para marating ang public key hash ay RIPEMD-160 (RIPE Message Digest 160) na nagreresulta sa 160 bits o 20 bytes na haba ng hash. Kung saan, RIPE – RACE Integrity Primitives Evaluation; at RACE – Research and Development in Advanced Communications Technologies in Europe. Basta RIPEMD-160!

B. Pay-to-script Hash (P2SH)
Ito ay bunga ng paglalayong masuportahan ang mga mas komplikadong transaksyon habang nakakatipid sa memoryang gamit. Ang pangunahing nagtulak dito ay ang pagkakaroon ng multi-sig (multiple signature) na scripts.

Ang script ay mga instruksyon sa computer programming. Ang direktang instruksyon na maaaring gastusin ang UTXO ng sinumang makakabigay ng tamang signature ay halimbawa ng script.

Ang multi-sig ay kung saan ang transaksyon ay nangangailangan ng M of N na signatures para maipatupad. Halimbawang gamit nito ay sa isang account ng kumpanya, na kailangan may lagda ng kahit ilan sa mga may-ari o pangunahing mga pinuno bago maglabas ng budget. Bigyan natin ng linaw ito sa susunod na mga kabanata. Basta sa madaling sabi, hindi ito praktikal kung lagi mong ipapagawa sa mga magbabayad sa inyo ang ganitong kondisyon. Mangangailangan sila ng espesyal na wallet ng Bitcoin, mas teknikal na kaalaman para sa komplikadong script, at bawat pagbabayad na transaksyon ay malaki ang data na ginagamit, na makakadagdag sa network bukod pa sa mas malaki rin ang fee.

Nakaisip ang mga Bitcoin developers ng paraan upang mas makatipid uli sa memorya. Iminungkahi iyon sa BIP-0016. Iyon ay sa halip na laging ilalagay ang kondisyon na M of N sa script ng bawat pagbabayad, ang hash lang ng script ang gagamitin ng magbabayad. At kailangan nalang patakbuhin ang M of N script na ito kapag gagastusin na ang laman ng wallet. Kaya ang komplikasyon at ang karagdagang fee ay nasa nagpakana na ng multi-sig na kondisyon. Tama lang naman.

Ang resulta, maaring ang script ang gawan ng Base58Check at magiging Bitcoin address. Kaya nagkaroon ng pay to script hash (P2SH) na mga wallet. Halintulad sa ilustrasyon ng paggawa ng Bitcoin address mula sa public key ang paggawa ng address mula sa script.

Ilustrasyon ng paggawa ng Bitcoin Address mula sa Script

Ang Version na dinuruktong sa unahan ng Script Hash ay 05, na kapag dumaan sa Base 58 Encode ay magiging 3 sa unahan. Kaya, iyon ang palatandaan ng isang P2SH Address.

C. Native SegWit
Sa paglalayon uli ng mga Bitcoin developers na makagawa ng progreso sa mekanismo ng transaksyon habang nagtitipid sa memorya, nailathala ang BIP-0141: Segregated Witness (Consensus Layer). Ito ay isang soft fork sa Bitcoin protocol.

Ang witness sa kriptograpiya ay isang solusyon sa itinakdang problema kung saan makakakuha ka ng YES na sagot. Halimbawa, ang signature na gamit sa pagberipika ng bisa ng isang mensahe, na pinag-usapan natin sa digital signature algorithms sa Kabanata 3, ay uri ng witness.

Kapag naging mas komplikado ang transaksyon, ang paggamit ng witness ay lumalaki rin. Isa na dun ang multi-sig, at meron pang ibang advanced transactions na pag-uusapan natin sa susunod na kabanata. At ito pa: ang witness nga ay gamit sa validation. Pero, hindi talaga sya kasama sa epekto ng transaksyon (paggastos ng UTXO na magreresulta sa bagong UTXO).

Kaya naisip ng mga Bitcoin developers na ihiwalay ang mga witness data, dahil kakailanganin lang ang mga ito kapag ang node ay nagbeberipika. Nagdulot ito ng pagdami ng pwedeng maisamang transaksyon sa block. Kaya tumaas ang kapasidad ng mga blocks.

Kasama pa sa pagbabago ay ang gamit na sistema sa pagsulat ng Bitcoin Address: Base32

Sa BIP-0173 ay isinaad ang Base32 na anyo ng address para sa mga native v0-16 (bersyon) na witness outputs. Gaya ng naunang anyo, may kasamang checksum ang Bitcoin address sa bersyong ito. Bech32 and pinaiksing tawag sa checksummed Base32.

Base 32 sa mga bagong Bitcoin Address

May itinakdang mga karakter para sa Base 32 na gamit ng Bitcoin network, na ganito ang pagkakasunud-sunod:

01234567
+0qpzry9x8
+8gf2tvdw0
+16s3jn54kh
+24ce6mua7l

Wala ditong, “1”, “b”, “i”, at “o”. Lahat ng letra ay lower case. Pero makikita mo pa rin ang “b” at “1” sa address, pero hindi bilang kasama ng code data na ginawan ng representasyon. Halimbawa ngang nabanggit kanina: bc1q6m86vk2t8wj2fhn4s3sevg7xzjdwqlll3v73p2. Ang “bc” sa umpisa ng address ay tumutukoy sa “human-readable part” at napili para sa Bitcoin. Ang “1” naman ay tumatayong “separator”. Ang ikaapat na karakter na makikita mo sa mga unang bersyon ng segwit address ay q, na syang tumatayong version 0.

Parte ng Segregated Witness (Segwit) Address

Pinapakita sa itaas na ilustrasyon ang pagbuo ng anyo ng Segregated Witness na Bitcoin address. Kung simpleng isang public key lang at signature ang kelangan, ang address ay Pay-to-witness-public key hash (P2WPKH). Kapag mas komplikado ang script para magastos ang output, susundan ang paraan ng pagbuo ng address na Pay-to-witness-script hash (P2WSH).

Baka magtaka ka, sa paraan ng P2WPKH, double-hash ang gamit at dahil may RIPEMD160, 20 bytes ang kalalabasan nito. Samantalang sa P2WSH, isang SHA-256 lang gamit na magiging 32 bytes. Tama, at kasama yan sa konsiderasyon kapag nagde-decode na ng address. Malalaman kung ano ang P2WPKH at P2WSH. At sa ika-0 na bersyon (mga bc1q…), ang isang palatandaan ay 42 karakter ang haba ng P2WPKH address at may 62 na karakter sa P2WSH.

D. Nested segwit (P2SH-P2WPKH)
Ito ay nanggaling sa pangangailangan na ang mas bagong wallet na may kakayahan ng SegWit ay makatanggap pa rin ng Bitcoin mula sa lumang wallet na hindi pa alam ang SegWit. Sa ganitong pangangailangan, ang isang bagong wallet ay gagawa ng address na P2SH – pwedeng nakapaloob sa P2SH ay P2WPKH o kaya naman P2WSH. Para hindi magkalituhan, inirekomenda sa BIP-0049 ang pagdadaanan ng pagkuha ng address ng nested SegWit.

E. Pay to taproot (P2TR)
Ito ay ikalawa, pero sa computer programming ay Version 1 ng SegWit, at may kalakip na pagbabago sa consensus. Gaya ng implementasyon ng SegWit, ang implementasyon ng taproot ay nagdulot ng soft fork sa Bitcoin protocol, nasasaad sa BIP-0341.

Kasama sa pagbabago ay ang paggamit ng Taproot, Schnorr signatures at Merkle branches. Ipagpapaliban muna natin ang diskusyon ng mga ito. Basta, ang resulta ng mga ito ay mas pinaigting na privacy at nagdagdag ng efficiency at flexibility sa mga scripts na ginagamit.

Sa halimbawang address na: bc1pveaamy78cq5hvl74zmfw52fxyjun3lh7lgt44j03ygx02zyk8lesgk06f6 mapapansin mong yung ikaapat na karakter ay “p” na sa Base 32 ng Bitcoin wallet software ay tumutukoy sa 1 – kasi nga version 1 ito ng SegWit.

Ang nilalaman ng kabanatang ito ay sapat para maumpisahan mo na ang pagmamay-ari ng Bitcoin. May mga paraan upang mas pahigpitin ang seguridad ng Bitcoin na pag-aari mo. At pag-uusapan natin ito sa mas huling kabanata.

Sa ngayon, maghanda sa mas malalim na pag-intindi sa wallet.

Hierarchical Deterministic Wallet – ano nga ba ito?

…parang puno talaga

Sa BIP-0032 tinatalakay ang Hierarchical Deterministic Wallets. Ang wallet ay deterministic kapag gumagamit ito ng seed para makakuha ng private key (na pinanggagalingan ng public key). Ang pares ng private-public keys o key pair ay pwede pang pagkuhanan ng bagong pares ng keys, at manganganak pa ng bagong pares, atbp. Parang kadena (chain) ng mga susi, na lahat nagmula sa iisang seed.

Sa BIP-0032 iminungkahi ang mas advanced na deterministic wallet, kung saan maraming key pair chains ang pwedeng mabuo mula sa iisang seed.

Key Tree ng HD Wallet ayon sa BIP-0032. CKD = Child Key Derivation Function

Ipinapakita sa taas ang key tree na maaaring mabuo sa HD wallet. Ito ang mga antas nun:

  • Master Seed – kung ano ang pagmumulan ng lahat, mula sa entropy ay mabubuo ang seed (buto) byte sequence
  • Master Node (m) – kung nasaan ang master secret key at master chain code na mabubuo mula seed byte sequence; pag-uusapan natin sa isang saglit.
  • Wallets/Accounts (m/i) – mula sa master secret key at master chain code, makakabuo na ng helera ng key pairs at chain codes na bawat isa ay katumbas ang isang account.
  • Wallet Chains (m/i/0 o 1) – Sa bawat wallet, may external at internal na chains. Ang external chain ang pagmumulan ng mga address gamit sa mga bayaran na transaksyon, at ang internal ang para sa mga change (sukli).
  • Addresses (m/i/(0 o 1)/k) – Sa external chain, maraming address na pwedeng buuin; ganun din sa internal chain. Ang external addresses ang naipapakita ng mga tao sa isa’t isa, samantalang ang internal addresses ay yung gagawin ng wallet para dun ibalik ang change (sukli). Pero sa usapang antas na ito, secret key pa ang tinutukoy natin.

Sa dami ng pwedeng sanga, parang puno talaga ang istrakturang napapaloob sa isang HD wallet! Mapapansin mo rin sa ilustrasyon ang gamit na pantukoy sa pagsanga-sanga at kung gaano na kalalim sa loob ng wallet ang mga antas na nabanggit.

Maraming pwedeng mabuo na accounts mula sa master node (m). Sa bawat account (m/0…i), may 2 wallet chains (m/i/(0 o 1)): 0 kapag external, 1 kapag internal. Sa bawat wallet chain, maraming addresses (m/i/(0 o 1)/(0…k)) ang pwedeng mabuo.

Halimbawa, ang ikalimang external o receive address ko sa ikalawang account ay nasa lalim ng private key na may notasyong: m/1/0/4. Hindi direktang Sinabi na address ito. Tandaan, mga susi at chain code ang tinutukoy natin. Kapag maliit na titik m ang umpisa, tumutukoy ito sa private key.

May kaparehas na notasyon pag public key ang tinutukoy: gagamit lang ng malaking titik M. Kaya ang public key sa parehas na lalim sa halimbawa ay: M/1/0/4. At alam mo na, mula pa sa public key (o di kaya’y script) makukuha ang aktwal na Bitcoin address.

Sa Master Seed, binubuo ang seed byte sequence S gamit ang pseudo-random number generator (PRNG). Ang seed byte sequence ay may habang 128 hanggang 512 bits, at 256 bits ang rekomendasyon sa BIP-0032.

Ang randomness na nakukuha ng isang random number generator ay tinatawag na entropy. May ibang wallet na kaya makakuha ng entropy mula sa true random number generator (TRNG). Basta kung hindi man, dapat Cryptographically Secure Pseudo-random Number Generator (CSPRNG). Ang entropy ay nababanggit rin na may kaukulang haba ng bits, gaya ng makikita sa ilustrasyon ng key tree. Kaya baka mapagkamalan mo na ang seed at entropy ay parehas. Hindi. Ang seed ang lumabas na representasyon matapos makakolekta ng entropy ang random number generator.

Pag tapos makapili ng S, dadaan ito sa Hash-based message authentication code (HMAC).

Hash-based message authentication code (HMAC)
Ang ideya ng HMAC ay gumamit ng cryptographic hash function at susi/key para patunayan ang integridad ng mensahe. Ito ay alternatibo sa digital signatures para sa nabanggit na layunin.

HMAC(K, m) = H((K’opad) || H((K’ipad)||m))

Kung saan:
H – cryptographic hash function
m – message/mensaheng papatunayan
K – secret key
K’ – block-sized key – galing sa secret key pero ginawang singhaba ng block (mag-padding kapag mas maiksi, hashing kapag mas mahaba)
|| – concatenation/pagdugtong
⨁ – XOR
opad – outer padding na sinlaki ng block, gamit ang 0x5c na paulit-ulit
ipad – inner padding na sinlaki ng block, gamit ang 0x36 na paulit-ulit

Ang napiling mga sangkap ng HMAC sa BIP-0032 na gagamitin sa pagkuha ng unang key sa master node ay:

  • Key = “Bitcoin seed” (oo yung pariralang yan)
  • Message o data = seed byte sequence S
  • Cryptographic hash function = SHA-512. Kaya HMAC-SHA512 ang tawag.

Ang makukuhang
I = HMAC-SHA512 (“Bitcoin seed”, S)
Ay may habang 512 bits o 64 bytes, at hahatiin sa dalawa na tig 32 bytes. Ang nasa kaliwa IL ay dadaan sa parse256(IL) na syang interpretasyon ng 32 bytes na sequence sa 256 bits na numero, na uunahin ang most significant byte. Ang resultang ito ay ang master secret key. Ang kanang IR naman ay ang gagamiting master chain code.

Ano naman ang chain code? Ito ay karagdagang entropy na ginagamit sa pagkuha ng mga anak o child keys, para hindi lang nakadepende sa magulang o parent key ang deribasyon. Ang kombinasyon ng IL at IR ay tinatawag na extended key.

Ang extended key ay pinagduktong na key at chain code

Ang konseptong key at chain code na kombinasyong gamit sa Child Key Derivation (CKD) Function ay gagamitin mula master node papuntang wallets/accounts, tapos papuntang wallet chains, hanggang addresses. Tignan ang detalye ng mga sumusunod sa BIP-0032 na mismo.

  • Private parent key ➔ Private child key
  • Public parent key ➔ Public child key
  • Private parent key ➔ Public child key

Gamit pa rin ang HMAC-SHA512 sa mga yan, may pagkakaiba lang sa kung anu-ano ang key at data na itatakda.

Banggitin lang din natin na may 232 (mahigit 4 na bilyon!) child keys na mabubuo sa isang extended key. 231 dito ay normal child keys, samantalang 231 dito ay hardened child keys. Anong pagkakaiba? Ang normal child keys ay naka index bilang unang 231: mula 0 ➔ 231 − 1. Ang hardened child keys ay naka index mula 231 ➔ 232 − 1.

Ang parent private key syempre kayang bumuo ng child private keys pati child public keys, mapa normal o hardened. Posible makakuha ng child public keys gamit ang parent public key. Pero gumagana lang ito sa normal child keys. May mga katangiang kanais-nais ang paggamit ng normal child keys. Subalit mas mataas ang seguridad kapag gamit ang hardened child keys. Muli, basahin sa BIP-0032 para mabigyang linaw pa ang mga sitwasyon na ganito.

Sa BIP-0032, ang index sa account level ay nilalagyan ng subscript na H para mas simple ang pagtukoy sa hardened child key. Halimbawa, kung ang index ng unang normal key sa account ay: m/0, ang unang hardened key ay may index na m/0H.

Mnemonic code

Ang paggamit ng mnemonic code ay iminungkahi sa BIP-0039 at naging standard na sa mga hierarchical deterministic (HD) wallets. Ito ay naglalayong mapadali ang pagtatago ng seed ng iyong wallet sa paraang mas kayang tandaan ng tao. Kumpara sa pagsulat at pagkabisado ng mahabang binary o hexadecimal na anyo ng seed, di hamak na mas madali ang paggamit ng mga pamilyar na salita. Kahit na sabihin mong mahirap pa rin kabisaduhin ang grupo ng 12-24 na salita.

Madalas na tinatawag itong seed phrase. Pero ang mnemonic code ay nagsisilbing representasyon ng entropy na sya pang pagmumulan ng seed. Paano malalaman ang mnemonic code?

  • Gamit ang CSPRNG ng wallet, kukuha ng entropy ENT na mula 128-256 bits ang haba, na multiple ng 32 bits.
  • Ang inisyal na halaga ay padadaanin sa SHA-256 para makuha ang checksum CS. Ang checksum ay ang ENT/32 bits sa unahan ng hashed value.
  • Iduduktong ang CS sa ENT. (Magreresulta ito sa dami ng bits na divisible ng 11)
  • Tapos ay hahatiin ENT||CS sa tig-11 bits. Ang dami ng tig-11 bits na lupon ay ang dami ng salita sa mnemonic sentence MS. At ang halaga ng bawat 11-bits ay representasyon ng isa sa 2,048 na mga salitang naka index mula 0 hanggang 2047.

Dami ng bits ng ENT at CS, at dami ng salita sa MS

ENT, bitsCS, bitsENT+CSMS, words
128413212
160516515
192619818
224723121
256826424

Makikita rito ang English word list na rekomendasyon ng BIP-0039: https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

Mapapansin mo siguro na sa mga wallets madalas gamitin ay 12 o 24 na salita.

PBKDF2 – Password-based Key Derivation Function 2 – ito ang gamit na paraan upang mabuo ang seed mula sa mnemonic codes. Ang konsepto ng PBKDF2 ay:

DK = PBKDF2 (P, S, c, HMAC, dkLen)

Kung saan:
DK = derived key
P = password
S = salt (wag ikalito sa seed ha)
c = iteration count
HMAC = hash-based message authentication code
dkLen = derived key length

Pero tandaan na ang DK na tinutukoy natin sa operasyong ito ng wallet ay ang magiging master seed ng wallet. Ang iba pang sangkap:
DK = master seed
P = mnemonic sentence/code na nabuo
S = “mnemonic” + passphrase (optional)
c = 2048 (ang dami!)
HMAC = HMAC-SHA512
dkLen = 512 bits

Kapag nakuha na sa wakas ang master seed, susundin lang ang nabanggit na paraan sa taas para makuha ang master secret key at master chain code, atbp. child keys.

Ang salt ay maaaring maiba dahil sa passphrase. May mga wallet na nagbibigay ng ganitong opsyon. Mas lalo pang magdadagdag ng seguridad ito. Kahit pa sa napakaliit na tsansang parehas ang mnemonic code na nakuha, kapag naglagay ka ng passphrase, ibang halaga ang kalalabasan ng master seed! At kapag may nakakita ng mnemonic code mo, hindi rin sila makakapag back-up ng wallet na makikita at makukuha ang Bitcoin mo kung hindi nila alam ang passphrase. Kasi nga, ibang set ng keys ang mabubuo nila.

Hiwalay din ang pagbuo ng entropy sa paggawa ng seed. Kaya maaari itong maiba sa bawat wallet. Subalit ang pagkakaparehas ng deribasyon mula mnemonic hanggang seed ay magbibigay ng compatibility sa mga iba-ibang wallets, basta sumusunod lang sila sa CKD function na nabanggit sa BIP-0032. Pero kailangan alam mo ang index na ginamit!

Pagdagdag ng purpose at coin type
Dahil nga sa walang katapusang kombinasyon at sanga na pwedeng mabuo sa HD wallet, nagmungkahi ang BIP-0043 na ang antas kasunod ang master node (m), ang mga account/wallet (m/i), ay gamiting “purpose.” Sa pamamagitan nito, matutukoy ang mga susunod na struktura.

m/purpose’/*

Ang mga wallets na alinsunod sa BIP-0032 ay bibigyan na ng 0’ na purpose: m/0’/*. Ang pagkakaroon ng apostrophe (’) ay nangangahulugang hardened derivation. Kaya index ng unang hardened child key ang gamit para sa mga wallets alinsunod sa BIP-0032.

Nabanggit din sa BIP-0043 na kapag mayroong mga software na kailangan ng isa pang istraktura, irekomenda ito sa ibang BIP, at ilagay ang numero nito bilang “purpose”.

Kaya naman, nung nagkaroon ng bagong proposal na BIP-0044 na naglalayong magkaroon ng 5 antas ang HD wallet para maisama ang iba pang klase ng coins:

m/purpose’/coin_type’/account’/change/address_index

44’ ang itinalaga sa purpose’. Buti nalang at 0’ ang coin_type’ na itinalaga para sa Bitcoin. 1’ naman para sa Bitcoin Testnet. Huwag na nating pakialaman yung iba.

Ang account’ ay maraming posibilidad, pero hardened derivation ang gamit. Ang change na tumutukoy sa chain pag BIP-0032, ay nanatiling 0 para sa external, 1 para sa change/internal. Public derivation o ang pagkuha ng normal child keys ang gamit dito. At sa address_index, normal child keys din. Halimbawa, ang Bitcoin address ko na binahagi para makatanggap ng bayad ay galing sa public key ng ikapitong index, sa ikalawa kong account ng isang multi-coin wallet: m/44’/0’/1’/0/6

Banggitin na rin natin, na kaya sa BIP-0049 na nagrekomenda ng deribasyon para sa Nested SegWit (P2SH-P2WPKH) address, m/49’/* ang istraktura nito. Sa BIP-0084 rekomendasyon naman para sa Native SegWit address, m/84’/; at sa single key taproot na rekomendasyon sa BIP-0086, m/86’/ ang istraktura.

Ayan, sana ay naintindihan mo pa lalo ang operasyon ng iyong Bitcoin wallet!