BitCoin ทำงานอย่างไรกันแน่?

คนส่วนใหญ่ในทุกวันนี้คงเริ่มคุ้นเคยกับคำว่าบิทคอยน์ และหลายคนก็รู้ว่าบิทคอยน์นั้นเป็นสกุลเงินดิจิตอลที่มีการทำงานในลักษณะบลอคเชนและคนจำนวนไม่น้อยก็มีบิทคอยน์อยู่ในกระเป๋าอิเล็กโทรนิคหรือ E-Wallet เป็นที่เรียบร้อยแล้วและเคยใช้งานไปบ้างแล้ว

แต่สิ่งที่คนส่วนใหญ่ยังไม่รู้หรือรู้แต่ไม่กระจ่างคือที่มา และกระบวนการในการสร้างบิทคอยน์ ว่ามีขั้นตอนอะไรบ้างกว่าที่จะก่อกำเนิดเป็นบิทคอยน์แต่ละเหรียญ สิ่งที่คนส่วนใหญ่ในปัจจุบันรู้เกี่ยวกับบิทคอยน์คือ มันเป็นสกุลเงินดิจิตอล ทำงานแบบบลอคเชน มีการเข้ารหัสเพื่อความปลอดภัย ใช้ซื้อของบางอย่างได้ ซึ่งสิ่งเหล่านี้เป็นเพียงข้อมูลพื้นฐานเบื้องต้นเท่านั้น

จากบทความในเรื่อง บลอคเชนภาษาชาวบ้าน ได้อธิบายหลักการพื้นฐานเบื้องต้นในการทำงานของบลอคเชน สำหรับการทำงานของบิทคอยน์นั้นค่อนข้างที่จะซับซ้อนกว่า แต่ก็ยืนอยู่บนหลักการพื้นฐานเดียวกัน

ยกตัวอย่างเช่น การทำธุรกรรมทางการเงินในทุกวันนี้เป็นเรื่องง่ายเพียงปลายนิ้วสัมผัส การโอนเงินเข้าออกจากบัญชีเป็นเรื่องปกติที่เกิดขึ้นวันละหลายครั้งหลายหน จนบางทีเราก็สับสนว่าโอนไปให้ใครบ้าง เพราะบัญชีของเราบอกได้เพียงว่าเราโอนไปหมายเลขบัญชีไหน ธนาคารอะไรบ้างเท่านั้น หากเกิดการโอนผิดพลาด แล้วเราต้องการข้อมูลบัญชีปลายทาง การจะขอข้อมูลเหล่านั้นไม่ใช่เรื่องง่าย โดยเฉพาะอย่างยิ่งถ้าเป็นการโอนข้ามธนาคาร

ดังนั้นจึงเกิดแนวคิดในการสร้างบัญชีที่ทุกคนสามารถเห็นความเคลื่อนใหวของบัญชีเหมือนกันหมด และเพื่อป้องกันการผูกขาด การฉ้อโกง บัญชีนี้จะต้องไม่ถูกเก็บไว้ที่ใครคนใดคนหนึ่งเท่านั้น ทุกคนในเนตเวิร์คจะมีสมุดบัญชีเล่มนี้เหมือนกันหมด โดยที่ทุกคนต้องรับผิดชอบในการตรวจสอบข้อมูลในสมุดบัญชีของตนเทียบกับของเพื่อนที่อยู่ในเนตเวิร์คอยู่เสมอ นี่คือต้นกำเนิดของ Distributed Ledger Technology หรือที่เรียกสั้น ๆ ว่า DLT

เมื่อเป็นสมุดบัญชีที่ทุกคนสามารถเพิ่มข้อมูลธุรกรรมของตนลงไปบนนั้นได้เอง ปัญหาถัดมาคือการป้องกันการเพิ่มธุรกรรมโดยที่ผู้ที่มีส่วนเกี่ยวข้องกับธุรกรรมนั้นไม่รับรู้ เช่น นาย A เขียนธุรกรรมว่านาย B โอนเงินให้เขา 100$ โดยที่นาย B ไม่รับรู้เป็นต้น ดังนั้นการเซ็นต์รับทราบจึงเป็นวิธีการแก้ปัญหาที่ถูกต้อง แต่เมื่อทุกอย่างที่เกิดขึ้นนั้นอยู่บนดิจิตอลทั้งหมด การเซนต์รับทราบแบบปกติจึงไม่อาจใช้ได้ จึงมีการคิดค้น Digital Signatures หรือลายเซนต์อิเลคโทรนิคขึ้นมาทดแทน ซึ่งกระบวนการในการเข้ารหัสเพื่อสร้างลายเซนต์อิเลคโทรนิคนั้นประกอบด้วยกุญแจสองดอกคือ Secret Key (SK) และ Public Key (PK) โดย SK จะใช้ในการสร้างลายเซนต์ ส่วน PK จะใช้สำหรับตรวจสอบว่าลายเซนต์นั้นถูกต้องหรือไม่

// ฟังก์ชั่นสำหรับเข้ารหัส E-Signature
var signature= Sign("Message for encrypt",secretKey);

// ฟังก์ชั่นสำหรับตรวจสอบ
var isValid=Verify("Message for encrypt",signature,publicKey);

ดังที่เห็นจากโค๊ดด้านบน การเข้ารหัสนั้นจะไม่ใช่เพียงแค่ SK เพียงอย่างเดียว ต้องประกอบด้วยข้อความเฉพาะตามที่กำหนดด้วย ลายเซนต์ที่สร้างขึ้นจะมีความยาว 256 bit ซึ่งมันยากมากที่จะถอดรหัสหรือตรวจสอบหากไม่มี PK แต่มันก็มีความเป็นไปได้ในการถอดรหัส ซึ่งจะเป็นไปได้แค่ไหนนั้นก็ลองเรา 2 ยกกำลัง 256 ดู

เมื่ออยู่บนโลกของดิจิตอล การมีลายเซ็นต์อิเล็กทรอนิกส์เพียงอย่างเดียวนั้นไม่เพียงพอที่จะป้องกันการคดโกง ลองนึกภาพว่า A เพิ่มข้อมูลธุรกรรมว่า B โอนเงินให้ 100$ และเมื่อ B เซนต์รับทราบเรียบร้อย A ก็สามารถเพิ่มธุรกรรมที่มีลายเซ็นของ B มากเท่าที่ต้องการ ดังนั้นทุกธุรกรรมที่เกิดขึ้นจึงจำเป็นต้องมีตัวเลขเฉพาะกำกับไว้เสมอเพื่อป้องกันการนำไปใช้ซ้ำ

แต่เท่านี้ยังไม่พอ เพื่อป้องกันการจ่ายเงินเกินกว่าที่ตนมีอยู่จริง จึงมีการกำหนดจำนวนเงินที่มีในระบบ ยกตัวอย่างเช่น คุณกับเพื่อนอีกสามคนทุกคนเอาเงินมารวมกันคนละ 100$ แล้วแบ่งให้เท่า ๆ กันแล้วบันทึกในบัญชีตั้งต้นว่าแต่ละคนมีเงินเท่าไหร่ เมื่อมีธุรกรรมเกิดขึ้น จำนวนเงินในธุรกรรมนั้นจะมากกว่าจำเงินในมือไม่ได้ เช่น A โอนให้ B  50$ โอนให้ C 50$ A จะโอนให้ D อีก 20$ ไม่ได้เป็นต้น

หลักการพื้นฐานที่สำคัญของ DLT การตัดคนกลางที่คอยควบคุมทุกอย่างออก เมื่อไม่มีคนกลางคอยควบคุม จึงจำเป็นต้องมีกระบวนการในการบันทึกข้อมูลที่น่าเชื่อถือ วิธีที่ทำให้ข้อมูลน่าเชื่อถือที่สุดคือการประกาศให้ทุกคนในระบบรู้เมื่อมีธุรกรรมใหม่เกิดขึ้น เพื่อให้ทุกคนช่วยกันตรวจสอบและบันทึกข้อมุลธุรกรรมนั้นลงในบัญชีของตน

ปัญหาถัดมาคือ เราจะรู้ได้อย่างไรว่าทุกคนในระบบได้รับข้อมูลเดียวกันกับเรา และทำการบันทึกข้อมูลนั้นลงในบัญชีของตนเองในลำดับเดียวกันกับเรา เราจะรู้ได้อย่างไรว่าข้อมูลบัญชีของแต่ละคนในระบบนั้นตรงกับของเราทุกอย่าง วิธีที่บิทคอยน์แก้ปัญหาคือแทนที่จะส่งเฉพาะบัญชีออกไปก็พ่วงข้อมูลที่มีการเข้ารหัสไว้ชุดหนึ่งไปด้วย เพื่อเป็นตัวเชื่อมต่อระหว่างธุรกรรมแต่ละอัน ซึ่งข้อมูลชุดนี้เรียกว่า Cryptographic Hash ซึ่งข้อมูลชุดนี้ผ่านการเข้ารหัสแบบ SHA256 ซึ่งยาวพอที่จะไม่สามารถปลอมแปลงหรือถอดรหัสได้ (อย่างน้อยก็ในตอนนี้)

Cryptographic Hash นั้นถือเป็นหัวใจหลักของสกุลเงินดิจิตอลส่วนใหญ่ในปัจจุบัน ซึ่งกระบวนการได้มานั้นไม่ได้ซับซ้อนเกินกว่าจะทำความเข้าใจ อย่างแรกที่เราต้องทำความรู้จักกันก่อนก็คือส่วนประกอบของบลอค โดยบิทคอยน์นั้นกำหนดให้แต่ละบลอคที่สร้างขึ้นมานั้นต้องประกอบด้วย Header, Body และ Proof of Work

https://www.youtube.com/watch?v=bBC-nXj3Ng4

โดยนำข้อมูลทั้งหมดนี้มาเข้ารหัสด้วย Hash Function ซึ่งเป็นฟังก์ชันในการเข้ารหัสข้อมูลโดยเราสามารถส่งไฟล์หรือข้อความเข้าไปแล้วจะได้ข้อมูลที่ผ่านการเข้ารหัสออกมา ซึ่งข้อมูลที่ผ่านการเข้ารหัสนี้เรียกว่า Hash หรือ Digest ซึ่งข้อมูลที่ได้มานั้นจะดูเหมือนสุ่ม แต่แท้ที่จริงแล้วไม่ไช่การสุ่ม ถ้าใส่ข้อมูลชุดเดิมเข้าไปจะได้ผลลัพธ์เหมือนเดิมทุกครั้ง แต่ถ้ามีการแก้ไขข้อมูลเพียงตัวอักษรเดียว ผลลัพธ์ที่ได้จะแตกต่างจากเดิมไปอย่างสิ้นเชิง ทำให้ยากต่อการเดาหรือถอดรหัส อย่างน้อยในตอนนี้ก็ยังไม่มีวิธีที่จะทำได้อย่างรวดเร็ว

ปัญหาถัดมาคือการเรียงลำดับข้อมูล สำหรับบลอคเชนแล้วลำดับของข้อมูลที่นำมาเรียงต่อกันนั้นมีความสำคัญเป็นอย่างยิ่ง ทุกคนต้องมีลำดับของบลอคที่ตรงกันเป๊ะ ๆ ซึ่งบิทคอยน์แก้ปัญหาโดยการนำข้อมูลที่ผ่านการเข้ารหัสของบลอคก่อนหน้าใส่เข้าไปในส่วนของ Header ของบลอคใหม่เพื่อบอกตำแหน่งว่าบลอคปัจจุบันนี้อยู่ถัดจากบลอคไหน ด้วยวิธีการผูกเช่นนี้ทำให้สามารถที่จะหาย้อนกลับไปจนถึงจุดเริ่มต้นของสายสัมพันธ์ของบลอคทั้งหมด

https://www.youtube.com/watch?v=bBC-nXj3Ng4

สำหรับบิทคอยนั้น มีหลักการเข้ารหัสที่เหนือชั้นขึ้นไปอีก กล่าวคือทุกครั้งที่มีการประกาศธุรกรรมใหม่ บิทคอยน์กำหนดว่าจะต้องเพิ่มชุดตัวเลขชุดหนึ่งต่อท้ายบลอคที่ประกาศด้วย ซึ่งตัวเลขชุดนี้เรียกว่า Proof of Work ซึ่งจะทำให้ข้อมูลที่ผ่านการเข้ารหัสขึ้นต้นด้วยจำนวน 0 ตามที่กำหนด ซึ่งความยากนั้นจะแปรผันตรงกับจำนวน 0 ที่กำหนด เช่น ข้อมูลที่ผ่านการเข้ารหัสต้องเริ่มต้นด้วย 0 จำนวน 30 ตัว อัตราส่วนความน่าจะเป็นจะเท่ากัน 1 ต่อ 2 ยกกำลัง 30 หรือ 1/1,000,000,000 การเข้ารหัสแบบ SHA256 นั้นเป็นเข้ารหัสแบบปิดลับ จึงไม่สามารถที่จะเดาผลลัพธ์ได้ล่วงหน้า ดังนั้นวิธีเดียวจะได้มาซึ่งเลขชุดนี้คือการสุ่ม ซึ่งนั่นหมายความว่า การสุ่มต้องนำ Header + ข้อมูลธุรกรรมทั้งหมด + ตัวเลขที่สุ่ม ไปเข้ารหัสโดย Hash Function จนกว่าจะได้ผลลัพธ์ของการเข้ารหัสที่ขึ้นต้นด้วย 0 ตามที่กำหนด ซึ่งสำหรับบิทคอยน์นั้นจำนวน 0 จะเพิ่มขึ้นเรื่อย ๆ ซึ่งนั่นหมายความว่าความยากในการสุ่มตัวเลขก็จะยากขึ้นไปเรื่อยด้วย

กระบวนการในการสุ่มหาตัวเลข Proof of Work นั้นจะทำโดยคอมพิวเตอร์ที่มีประสิทธิภาพสูงหรือที่เรียกว่า Miner หรือนักขุด โดยคนที่สุ่มเจอตัวเลขเป็นคนแรกจะได้รับผลตอบแทนเป็นบิทคอยน์ที่เกิดขึ้นใหม่ในระบบตามที่กำหนด เมื่อนักขุดค้นพบข้อมูลตัวเลขที่จะทำให้ข้อมูลที่ผ่านการเข้ารหัสเป็นไปตามข้อกำหนดแล้ว จะทำการส่งข้อมูลนี้ให้กับทุกคนในระบบเพื่อทำการตรวจสอบ โดยการนำข้อมูลไปเข้า Hash Function เพื่อดูว่าผลลัพธ์เป็นไปตามที่กำหนดหรือไม่เมื่อข้อมูลถูกต้อง ต่างก็ทำอัพเดรตข้อมูลในบัญชีของตน กล่าวโดยสรุปคือนักขุดจะคอยฟังว่ามีธุรกรรมเกิดขึ้นในระบบหรือไม่ และทุกคนในระบบจะคอยฟังว่ามีบลอคใหม่เกิดขึ้นในระบบจากนักขุดหรือไม่

http://blog.biner.io/educational/understanding-bitcoin-mining/

ในกรณีที่มีข้อมูลธุรกรรมที่ไม่ตรงกัน ระบบจะเลือกธุรกรรมที่มีประวัติที่ยาวกว่าเป็นหลักเพื่อป้องกันการคดโกง ยกตัวอย่างเช่น A ทำการแก้ไขธุรกรรมในบัญชีแล้วสร้างบลอคที่ถูกต้องทุกประการ จากนั้นส่งไปให้ B โดยตรง เมื่อ B ตรวจสอบแล้วจากนั้นก็บันทึกลงบัญชีของตน โดยบล๊อคนี้จะมีเพียง A กับ B เท่านั้นที่มี ดังนั้นคนในระบบจะไม่รับรู้การเกิดขึ้นของบลอคนี้ เมื่อมีธุรกรรมใหม่เกิดขึ้นในและบลอคที่สร้างใหม่นั้นจะอยู่ในตำแหน่งเดียวกันกับบลอคล่าสุดที่ B มี ทำให้ B ไม่รู้ว่าอันไหนกันแน่ที่เป็นของจริง เพราะบลอคเชนนั้นไม่มีคนกลางคอยกำกับดูแล ทุกคนจึงต้องตรวจสอบข้อมูลของตนเอง เมื่อเหตุการณ์นี้เกิดขึ้น B จะเก็บบลอคทั้งสองไว้ก่อนแล้วรอดูว่าบลอคใหม่ในอนาคตจะต่อที่เส้นไหน นั่นหมายความว่าถ้า A อยากให้ B เลือกของตนเองก็ต้องสร้างธุรกรรมปลอมให้มากกว่าจำนวนบล๊อคที่เหล่านักขุดสร้างมา แต่จะทำอย่างนั้นได้ A ต้องมีคอมพิวเตอร์ที่แรงมากกว่ามากกว่า 50% ของเครื่องคอมพิวเตอร์ในระบบรวมกัน ซึ่งอาจจะหมายถึงครึ่งโลก เท่านี้ยังไม่พอ A ยังต้องโชคดีในการสุ่มตัวเลข Proof of Work ได้ก่อนเสมออีกด้วย

กรณีที่สอง ถ้าหากมีการคดโกงโดยการแก้ใขข้อมูลธุรกรรมในบลอคใดบลอคหนึ่งโดยตรง จะส่งผลให้ตัวเลข Proof of Work ที่ระบุในบลอคนั้นจะใช้ไม่ได้ทันที เพราะหากนำข้อมูลทั้งหมดของบลอคนั้นไปเข้ารหัส จำนวน 0 ที่ได้จะไม่เป็นไปตามที่กำหนด นั่นหมายความว่าบลอคที่อยู่ถัดจากบลอคที่ถูกแก้ไขจะเสียทั้งหมด ถ้าจะแก้ใขก็จะต้องสุ่มหาตัวเลข Proof of Work ของแต่ละบลอคใหม่ทั้งหมดตามลำดับ

ในทางทฤษฏีแล้วการโกงเกิดขึ้นได้ แต่ในทางปฏิบัตินั้นยากมาก ด้วยประสิทธิภาพของคอมพิวเตอร์ในปัจจุบัน ความเป็นไปได้นั้นน้อยมาก แต่หากวันหนึ่งมีคอมพิวเตอร์ที่งานเร็วมาก เช่น Quantum Computer เกิดขึ้น BitCoin ก็ไม่ปลอดภัยอีกต่อไป


Blockchain ฉบับภาษาชาวบ้าน