Blockchain ทำงานยังไง ?

🤔 ทำไม Blockchain ถึงถูกเจาะระบบยาก เวทมนต์ของมันคืออะไร ?

หลังจากบทความแรก เราก็จะรู้แล้วว่า Blockchain สามารถพิสูจน์ได้ว่า เราสามารถเอาคนกลางออกจากระบบได้จริงๆ โดยมันมีหัวใจสำคัญที่ทำให้ Blockchain ทำเรื่องนี้ได้ทั้งๆที่ทั่วโลกไม่สามารถทำได้นั่นก็คือ การที่ตัวระบบใช้หลักของคณิตศาสตร์เข้ามาตรวจสอบนั่นเอง ดังนั้นในบทความนี้เราจะมาดูกันว่า คณิตศาสตร์ที่เขาใช้นั้นมันทำงานยังไงกัน เพื่อที่จะได้เข้าใจแล้วเอาไปสร้าง Blockchain ของตัวเองได้ถูกต้อง (ไม่ต้องห่วงนะสำหรับคนที่ไม่ได้เก่งคณิตศาสตร์ก็สามารถเข้าใจได้)

แนะนำให้อ่าน บทความนี้เป็นหนึ่งในซีรี่ Blockchain ดังนั้นถ้าเพื่อนสนใจบทความทั้งหมดตั้งแต่เริ่มต้นว่า Blockchain คืออะไร แล้วจะเริ่มต้นสร้าง Blockchain เป็นของตัวเองได้ยังไง เพื่อนสามารถกดไปอ่านได้จากลิงค์นี้ครับ 👶 Blockchain และเราก็มีบทความเรื่องอื่นๆที่น่าสนใจซึ่งสามารถกดดูได้จาก Side menu เบย

🤔 ระบบการเงินทั่วไปทำงานยังไง ?

ก่อนที่จะไปดูเวทมนต์ของ Blockchain จริงๆ เราลองมาดูการทำงานของระบบการเงินกันก่อนว่า ในตอนที่เราใช้บัตรเครดิตจ่ายเงินมันมีขั้นตอนอะไรเกิดขึ้นบ้าง ตามรูปเลย

ขั้นตอนในการจ่ายเงินผ่านบัตรเครดิต

อธิบายรูปด้านบนแบบสั้นๆ พอเราจ่ายเงินผ่านบัตรเครดิตปุ๊ปมันจะมีขั้นตอนวุ่นวายๆเพื่อยืนยันว่าเราสามารถจ่ายด้วยบัตรใบนั้นๆได้ (ขั้นตอนที่ 1-8) และหลังจากจ่ายเสร็จก็ต้องรออีกซักพักเงินถึงจะวิ่งจากธนาคารต้นทางไปยังธนาคารปลายทางอีกทีนึง (ขั้นตอนที่ 9-10)

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

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

🤔 ทำไมมันเปิดเผยข้อมูลแต่ไม่ถูก hack ? (ตอนแรก)

คำตอบก็คือเวลาที่จะทำอะไรก็แล้วแต่ในระบบ Blockchain นั่น ทุกๆการดำเนินการจะต้องถูกเข้ารหัสทางคณิตศาสตร์เสียก่อน ซึ่งมันมีอะไรบ้างเราจะลองไล่ดูตั้งแต่ขั้นเริ่มต้นเลยละกัน

💡 Public-Key Cryptography

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

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

ส่วนกุญแจอีกดอกคือ Public Key เอาไว้ตรวจสอบว่าคนที่ดำเนินการนั้นๆเกิดจากคนที่มีกุญแจ private key ที่ตรงข้ามมันจริงๆหรือเปล่า

พูดให้เห็นภาพง่ายขึ้นว่าจะเกิดอะไรขึ้นในระบบ Blockchain โดยสมมุติว่า นาย A ต้องการจะดำเนินการโอนเงิน สิ่งที่นาย A ต้องทำคือใช้ Private Key เข้ารหัสคำขอ แล้วสิ่งที่ได้คืออะไรซักอย่างที่อ่านไม่ออก ซึ่งตัวระบบจะทำการตรวจสอบว่า คำขอโอนเงินนั้นเกิดจากนาย A ตัวจริงหรือเปล่า โดยการนำ Public Key ของนาย A มาลองถอดรหัสเจ้าสิ่งที่อ่านไม่ออกดู ซึ่งถ้ามันถอดรหัสแล้วผลลัพท์คือ ข้อมูลนั้นอ่านออกแล้ว นั่นก็แสดงว่าคำขอนั้นเกิดจากนาย A จริงๆ เพราะในโลกนี้จะมีคนสร้างคำขอที่เข้ารหัสแบบนี้ได้เพียงคนเดียวก็คือคนที่ถือ private key ของนาย A เท่านั้นยังไงล่ะ

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

ตัวอย่างของ Public key ที่ถูกสร้างขั้นมา

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu
ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A
+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw
mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN
QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P
+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB
-----END RSA PUBLIC KEY-----

💡 Digital Fingerprint (Hashes)

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

เช่น ผมเอาคำว่า Hello ไปผ่านกระบวนการ Hashing ผมก็จะได้ตัวเลขชุดด้านล่างนี้ออกมา และไม่ว่าผมจะเอาคำว่า Hello ไปเข้า Hash กี่ครั้งก็ตามผมก็จะได้ตัวเลขชุดนี้กลับมาทุกครั้งนั่นเอง

185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

ซึ่งจากหลักการที่ว่ามานี้ เราจะใช้ในการตรวจสอบว่าข้อมูลมีการแก้ไขหรือเปล่า เพราะถ้ามีคนไปแก้ไขข้อความจาก Hello เป็นอย่างอื่นเช่นเปลี่ยนตัว H เป็นตัวเล็กแบบนี้ hello ค่าตัวเลขก็จะเปลี่ยนไปเลยเช่นกัน ตามผลลัพท์ด้านล่างจะเห็นว่าเลขมันเปลี่ยนเป็นคนละโลกเลยทีเดียว

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

กร็ดความรู้ Hash function มันมีหลายตัวให้เราเล่นเลย ซึ่งแต่ละตัวก็จะได้ความยาวของชุดตัวเลขออกมาไม่เหมือนกัน และผลลัพท์ของชุดตัวเลขก็จะต่างกันด้วย ซึ่งในตัวอย่างผมใช้ Hash function เป็น SHA-256 นะเผื่อใครอยากจะลองเล่นดู

😉 การทำงานจริงๆของ Blockchain

คราวนี้เราจะลองมาดูกันว่าถ้า Alex อยากจะโอนเงินให้ Katie จำนวน $500 มันจะเกิดอะไรขึ้นในระบบ Blockchain บ้างกันนะ

1.อันดับแรกเลย Alex ก็จะกรอกข้อมูลบัญชีของ Katie ลงไปพร้อมกับจำนวนเงินที่ต้องการโอนและ Sign การดำเนินการด้วย Private Key ของเขาลงไป ซึ่งตามที่ได้อธิบายไปในบทความที่แล้วว่าตัว Blockchain มันไม่ได้บอกว่าใครเป็นใคร ดังนั้นบัญชีของ Alex กับ Katie จะถูกเก็บเป็นตัวเลขรหัสบัญชียาวๆเท่านั้น ตามรูปด้านล่างเลย

2.จากการดำเนินการที่เกิดขึ้น ระบบจะทำการสร้างสิ่งที่เรียกว่า Transaction เพื่อบอกว่าใครทำอะไร และทำการบันทึกลายน้ำลงไปด้วย Hash function เพื่อป้องกันมีคนมาแก้ไขการดำเนินการ ตามรูปด้านล่าง

3.ซึ่งในการสร้าง Transaction แต่ละครั้ง ระบบก็จะไปตรวจสอบ Transaction อื่นๆก่อนหน้าเพื่อดูความถูกต้องว่า Alex มีเงินพอที่จะโอนหรือเปล่าด้วย ดังนั้น transaction แต่ละตัวระบบก็จะรู้ความเป็นไปของบัญชีแต่ละบัญชีนั่นเอง

4.พอถึงช่วงเวลานึง ระบบก็จะเอา transaction ที่เกิดขึ้นในช่วงเวลานั้นทั้งหมดมารวมกันในสิ่งที่เรียกว่า Block และระบบก็จะนำข้อมูลทั้งหมดใน Block นั้นไปเข้า Hash function ขึ้นมาเพื่อป้องกันคนมาแก้ไข block นั้นๆ เช่นในตัวอย่าง Block 0 ได้ตัวเลขเป็น 0x23e

5.ถัดมาระบบก็จะนำ block ไปเก็บ โดยมันจะมีการบันทึกไว้ด้วยว่า Block ที่มันสร้างนั้นมันต่อกับ Block รหัสอะไร ซึ่งเราเรียกขั้นตอนนี้ว่าการต่อกันหรือการ Chain กันนั่นเอง

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

6.สุดท้ายระบบก็จะกระจายข้อมูลที่อัพเดทล่าสุดออกไปให้กับเซิฟเวอร์อื่นๆในระบบว่ามีการอัพเดทใหม่เกิดขึ้นแล้ว ซึ่งเซิฟเวอร์อื่นๆก็จะทำการตรวจสอบความถูกต้องของ Block ใหม่ที่เกิดขึ้นว่าทุก transaction สามารถทำได้หรือเปล่า มีการแอบแก้ไขข้อมูลหรือเปล่า Block ที่อ้างอิงก่อนหน้าถูกต้องหรือเปล่า บลาๆ ซึ่งถ้าพบข้อมูลที่ไม่ถูกต้องเกิดขึ้นเซิฟเวอร์อื่นๆก็จะปฏิเสธการอัพเดทนั้นทันที แต่ถ้าข้อมูลนั้นถูกต้องแล้วเซิฟเวอร์พวกนั้นก็จะยึดเอาอัพเดทล่าสุดไปใช้งานต่อเลยนั่นเอง

😉 กติกาในการสร้าง Block

ในขั้นตอนที่ 4 ระบบจะทำการสร้าง Block ขึ้นมา และจะต้องเอาข้อมูลทั้งหมดใน Block ไปเข้า Hash function เพื่อให้ได้ตัวเลขออกมาชุดนึง จริงๆในจุดนนี้มันกติกาพิเศษนิดหน่อย โดยเซิฟเวอร์ที่จะทำการสร้าง Block นั้นจะต้องสุ่มตัวเลขขึ้นมาแล้วใส่ลงไปใน Block ด้วย เพื่อให้ Block ตรงตามรูปแบบในเวลานั้นๆ เช่น ในตอนนี้จะต้องสร้างชุดตัวเลขที่ขึ้นต้นด้วยเลข 0 จำนวน 3 ตัว ระบบก็จะต้องทำการสุ่มตัวเลขลงไปไล่จาก 0,1,2,3 บลาๆ จนกว่าจะได้ชุดตัวเลขที่ขึ้นต้นด้วยเลข 0 จำนวน 3 ตัว ถึงจะสามารถสร้าง Block ได้ ซึ่งเจ้ากติกาข้อนี้มีไว้เพื่อเป็นการให้เซิฟเวอร์ต้องทำงานบางอย่างไม่ใช่จะสามารถสร้าง Block ขึ้นมามั่วซั่วได้ เป็นหลักการเดียวกับการส่งอีเมล์

กติกาข้อนี้จะมีการปรับเปลี่ยนไปเรื่อยๆขึ้นอยู่กับเวลา เช่น ช่วงเวลาที่ผ่านมามีคนสร้าง Block ได้เร็ว ดังนั้นระบบก็จะเปลี่ยนให้มันยากขึ้น เช่นขึ้นต้นด้วยเลข 0 ติดกัน 9 ตัว หรือถ้ามันสร้างได้ช้าก็อาจจะลงความยากลงมาไรงี้

😉 ทำไมมันเปิดเผยข้อมูลแต่ไม่ถูก hack ? (ตอนจบ)

ถ้ามีคนจะ hack เซิฟเวอร์ขึ้นมาจริงๆ เราลองไปดูกันว่าเขาจะ hack จากตรงไหนได้บ้างกัน

💡 Hack ระดับ Transaction

ถ้าจะทำการแก้ไขข้อมูลธุรกรรม เช่นจะแก้ว่า Alex โอนเงินให้ Katie จาก $500 เป็น $10,000 สิ่งแรกที่เขาต้องเจอคือ คน hack จะต้องมีรู้ private key ของ Alex เพราะไม่อย่างนั้นการเข้ารหัสก็จะไม่ถูกต้อง เพราะตอนใช้ Public Key ของ Alex ถอดออกมาก็จะอ่านไม่รู้เรื่องทำให้รู้ว่าคนที่ดำเนินการไม่ใช่ Alex นั่นเอง หรือแอบไปแก้ที่เลขจำนวนเงินตรงๆสิ่งที่เกิดขึ้นก็คือตัวเลขที่เกิดจาก Hash function ก็จะเปลี่ยนไปด้วย และพอระบบตรวจสอบเจอมันก็จะปฏิเสธข้อมูลของ Block นี้อยู่ดีนั่นเอง

💡 Hack ระดับ Block

ถ้ามีการแก้ไขข้อมูลในระดับ Block เกิดขึ้นไม่ว่าจะแก้ไขข้อมูลที่ตัว Block เอง หรือ Transaction ภายใน Block สิ่งที่เกิดขึ้นคือตัวเลข Hash function ของตัว Block ก็จะเปลี่ยนไป ซึ่งถ้าเราไปแก้ Block ที่ผ่านมาซักพักนึงแล้ว ก็จะทำให้ Block ที่อ้างอิงมาหามันหาไม่เจอ ก็จะทำให้โดนเซิฟเวอร์อื่นๆปฏิเสธการแก้ไขไป หรือต่อให้แก้ไขมันทุก Block ได้ทันก่อนที่มันจะอัพเดทกัน ตัว Blockchain เองก็จะมีระบบ Consensus Algorithm ที่ดูว่าเซิฟเวอร์นี้ต่างกับเซิฟเวอร์อื่นหรือเปล่า ซึ่งถ้าเซิฟเวอร์ส่วนใหญ่ตอบว่าไม่เหมือนกับเพื่อนๆ ก็จะทำให้ข้อมูลจากเซิฟเวอร์ที่แปลกปลาดนั้นจะไม่ถูกอัพเดทให้เพื่อนๆได้เลย

และจริงๆในการสร้าง Block มันไม่ได้ง่ายแบบนั้นซะทีเดียว เพราะมันมีกติกาพิเศษในการสร้างที่ว่าไว้ ดังนั้นคนที่เจาะระบบเข้ามาก็ต้องไปสุ่มเลขที่จะสร้าง Block ด้วยเหมือนกัน และจะต้องทำให้เสร็จก่อนที่เซิฟเวอร์จะอัพเดทกันด้วย และยิ่งไปแก้ข้อมูลที่ผ่านมานานแล้วมากเท่าไหร่ จำนวน Block ที่ต้องไปแก้ก็จะยิ่งทวีคูณความนานมากยิ่งขึ้นไปเรื่อยๆ จนแทบจะเรียกว่าเป็นไปไม่ได้เลยนั่นเอง

การอัพเดทกันของเซิฟเวอร์ จริงๆเซิฟเวอร์มันไม่ได้อัพเดทกันหรอก แต่เซิฟเวอร์ทั้งหมดมันแข่งกันสร้าง Block ต่างหาก โดยเซิฟเวอร์ไหนที่สร้าง Block ขึ้นมาและแก้สมการในการสร้าง block ได้ก่อน ก็จะเป็นคนประกาศให้เซิฟเวอร์ทั้งหมดรู้ว่ามีอัพเดทใหม่แล้วนะ แล้วเซิฟเวอร์อื่นๆก็จะมาเช็คความถูกต้องดู ซึ่งถ้าข้อมูลของ block ใหม่นั้นถูก เซิฟเวอร์อื่นๆมันถึงจะเริ่มเอาข้อมูลจาก Block นั้นไป chain ให้กับตัวมันเองอีกที ซึ่งคแบบช้าที่สุดในการอัพเดทกันคือ 10 นาที แต่ปรกติแล้วเร็วมากเป็นหลักวินาทีหรือนาทีเท่านั้น

🎯 บทสรุป

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

จะเห็นว่าความยากในการเจาะระบบ Blockchain มันแทบจะเป็นไปไม่ได้เลยเพราะมันมีการ cross check กันทั้งหมดทั้งระดับ data และ server ดังนั้นกลุ่ม hacker เลยเปลี่ยนเป้าหมายเป็นการไปโกงเจ้าของบัญชีเพื่อเอา Private Key มานั้นง่ายกว่าเยอะ หรือไม่ก็เข้าไปใน Blockchain ที่มีเซิฟเวอร์อยู่ไม่เยอะเท่าไหร่แล้วใช้ Computing power เยอะๆเข้าไปตี 51% attack เอาแทนนั่นเอง

ในบทความนี้จะไม่ได้ลงรายละเอียดถึงเรื่องการขุดเหมือง หรือพวก Mining นะครับ เพราะใบคอร์สนี้จะเน้นไปที่เรื่องของการสร้าง Blockchain แบบพื้นฐานก่อน แล้วเมื่อถึงเรื่องของการทำ Mining ค่อยออกบทความนั้นตามมาอีกที