Ang Value Overflow Bug ng Bitcoin noong 2010
Talaan
1. PanimulaNoong mga unang taon ng Bitcoin, at katulad ng mga ibang softwares, hindi naman ito perpekto at marami itong bugs o kahinaan sa sistema. At isa rito ang yung tinatawag na
Value Overflow Bug. Ito ay nangyari noong Agost 15, 2010. And bug na to, na-exploit ay gumawa ng transaksyon na napakalaking halaga na lagpas sa 21 million supply ng Bitcoin.
2. Ang Kalagayan ng Bitcoin noong 2010Kung susuriin natin ang estado ng Bitcoin nung panahon na yun, na halos 1 taon pa lang tumatakbo, konti pa lang ang gumagamit, mga nag mine at maliit palang software developer community nito. At dahil nakapa bata pa nito, hindi pa talaga na tutuklasan ang kahinaan nito at ang mga bug sa sistema. Si Satoshi pa lang talaga naman ang nag-iisa nag maintain ng code nito at mangilan ngilan lang na developer.
3. Ano ang Value Overflow BugAng Value Overflow Bug as isang bug sa code ng Bitcoin na nagbigay sa isang transaksyon ng ng 184,467,440,737 BTC (halos 184 billion BTC) sa block 74638 mula sa 21 million supply lamang. At kung titingnan mo naman talaga, hindi ito pwede mangyari, pero paano nakalusot ito?
4. Paano Nangyari ang InsidenteIto ay nangyari noong Agosto 15, 2010 na may makitang anomalya sa Bitcoin blockchain na mayroon nakapalaking halaga. At natuklasan na may bug ang Bitcoin software na tinatawag na Value Overflow Bug. Ang bug na ito ay integer overflow sa C++ code ng Bitcoin. Ang code ay sinusuri ang transaksyon, at binibilang ang output. At kung sobrang laki ng value, nag overflow ang signed-64 bit integer.
if (output_value > input_value)
reject transaction
Sa madaling salita, pinagsama ang outputs, nagkaroon ng overflow, nakita nang sistema na maliit ang resulta, itinuring nya itong valid at tinanggap ng network ang transaksyon.
At isa sa mga nakapansin nito ay si Jeff Garzik at madali syang nag open ng thread sa komunidad para tanungin ang beripikayin ang nasabing transaksyon.
The "value out" in this block #74638 is quite strange:
{
"hash" : "0000000000790ab3f22ec756ad43b6ab569abf0bddeb97c67a6f7b1470a7ec1c",
"ver" : 1,
"prev_block" : "0000000000606865e679308edf079991764d88e8122ca9250aef5386962b6e84",
"mrkl_root" : "618eba14419e13c8d08d38c346da7cd1c7c66fd8831421056ae56d8d80b6ec5e",
"time" : 1281891957,
"bits" : 469794830,
"nonce" : 28192719,
"n_tx" : 2,
"tx" : [
{
"hash" : "012cd8f8910355da9dd214627a31acfeb61ac66e13560255bfd87d3e9c50e1ca",
"ver" : 1,
"vin_sz" : 1,
"vout_sz" : 1,
"lock_time" : 0,
"in" : [
{
"prev_out" : {
"hash" : "0000000000000000000000000000000000000000000000000000000000000000",
"n" : 4294967295
},
"coinbase" : "040e80001c028f00"
}
],
"out" : [
{
"value" : 50.51000000,
"scriptPubKey" : "0x4F4BA55D1580F8C3A8A2C78E8B7963837C7EA2BD8654B9D96C51994E6FCF6E65E1CF9A844B044EEA125F26C26DBB1B207E4C3F2A098989DA9BA5BA455E830F7504 OP_CHECKSIG"
}
]
},
{
"hash" : "1d5e512a9723cbef373b970eb52f1e9598ad67e7408077a82fdac194b65333c9",
"ver" : 1,
"vin_sz" : 1,
"vout_sz" : 2,
"lock_time" : 0,
"in" : [
{
"prev_out" : {
"hash" : "237fe8348fc77ace11049931058abb034c99698c7fe99b1cc022b1365a705d39",
"n" : 0
},
"scriptSig" : "0xA87C02384E1F184B79C6ACF070BEA45D5B6A4739DBFF776A5D8CE11B23532DD05A20029387F6E4E77360692BB624EEC1664A21A42AA8FC16AEB9BD807A4698D0CA8CDB0021024530 0x965D33950A28B84C9C19AB64BAE9410875C537F0EB29D1D21A60DA7BAD2706FBADA7DF5E84F645063715B7D0472ABB9EBFDE5CE7D9A74C7F207929EDAE975D6B04"
}
],
"out" : [
{
"value" : 92233720368.54277039,
"scriptPubKey" : "OP_DUP OP_HASH160 0xB7A73EB128D7EA3D388DB12418302A1CBAD5E890 OP_EQUALVERIFY OP_CHECKSIG"
},
{
"value" : 92233720368.54277039,
"scriptPubKey" : "OP_DUP OP_HASH160 0x151275508C66F89DEC2C5F43B6F9CBE0B5C4722C OP_EQUALVERIFY OP_CHECKSIG"
}
]
}
],
"mrkl_tree" : [
"012cd8f8910355da9dd214627a31acfeb61ac66e13560255bfd87d3e9c50e1ca",
"1d5e512a9723cbef373b970eb52f1e9598ad67e7408077a82fdac194b65333c9",
"618eba14419e13c8d08d38c346da7cd1c7c66fd8831421056ae56d8d80b6ec5e"
]
}
92233720368.54277039 BTC? Is that UINT64_MAX, I wonder?
5. Paano Ito Naayos ng mga DeveloperAt matapos na matuklasan ito, dali daling ang usap ang mga developers at miners kasama na si Satoshi at kung paano mare-resolba ito. At sa loob lamang ng 5 oras naayos na ito at ang labas na si Satoshi ng bagong version ng Bitcoin. Kasama na rito ang mahigpit na pag validate sa mga susunod na blocks.
Heto yung diskusyon ng komunidad:
overflow bug SERIOUS.seems a block at height 74638 has expoited a bug in the net. It uses an integer overflow to make a negative total transaction. The two transaction outputs are:
out Value:92233720368.54(7ffffffffff85ee0) out Value:92233720368.54(7ff
ffffffff85ee0)
We need a fix asap
Edit:
(satoshi)
0.3.10 patch download links here:
http://bitcointalk.org/index.php?topic=827.0 At ito ang opisyal na pag labas ni Satoshi ng fix: Version 0.3.10 - block 74638 overflow PATCH!
6. Ang Pagkakaroon ng Hard ForkAt dahil dito, nagkaroon ng hard fork ang komunidad para maayos ito. At pag ganitong may hard fork, magkakaroon na ng bagong chain at yung may maling transaksyon ay hindi na validated ng mga lumang nodes
Meron din akong thread tungkol sa usapin na to:
Pamamahala sa Bitcoin: Soft Fork at Hard Fork
7. Mga Aral na Natutunan ng KomunidadIsa siguro sa natutunan ni Satoshi at ang komunidad na rin na kahit gaano katatag ang isang sistema, meron at meron parin talagang lalabas na bug. At ang komunidad ng Bitcoin at laging mapag matyag sa mga ganitong issue at mabilis ang koordinasyon ng isa't isang. Maganda ring sabihin na dahil open-source ang code ng Bitcoin, kahit sino ay pwede makita kung ano ang nangyayari sa loob at kung ano ang mali dito.
8. KonklusyonAng issue na to noong 2010 ay nagsilbing malaking hamon sa seguridad ng Bitcon network. Isipin mo na lang kung hindi ito nakita ng komunidad at hindi agarang na solusyuhan, maaring naging malaking problema ito noong kasisimula pa lamang ng Bitcoin.
9. Sources at Links•
Value overflow incide•
What was the bug for Bitcoin value overflow in 2010•
Github