Elliptic Curve หนึ่งในเบื้องหลังความปลอดภัยของ Bitcoin

Datafarm
5 min readFeb 21, 2024

--

ถ้าจะพูดถึงเบื้องหลังความปลอดภัยของการใช้งาน Bitcoin รวมถึง Cryptocurrency อีกหลายประเภทนั้น แน่นอนว่าสิ่งที่เป็นพื้นฐานที่ขาดไม่ได้เลย คือเรื่องของ Cryptography หรือศาสตร์ในการเข้ารหัสนั่นเอง โดยพื้นฐานของ Cryptography ที่หลายคนอาจมองว่าเป็นเรื่องของ Coding หรือ Programing แต่ในความจริงแล้ว Cryptography เป็นเรื่องที่เกี่ยวข้องกับคณิตศาสตร์เป็นส่วนใหญ่ และหนึ่งใน Cryptography ที่สำคัญของระบบและยังคงถูกใช้งานอยู่ในปัจจุบันก็คือ Elliptic Curve

พื้นฐานการเข้ารหัส ฉบับรวบรัด

โดยทั่วไปแล้วการเข้ารหัสที่ถูกใช้งานอยู่ในปัจจุบัน จะถูกแบ่งออกเป็น 2 ประเภทด้วยกัน คือ

1. Symmetric Encryption

เป็นวิธีการเข้ารหัสโดยใช้ Key (รหัสลับ) จำนวน 1 ตัว ในการเข้ารหัสข้อความ และใช้ Key ตัวเดียวกันนี้ในการถอดรหัส กลับมาเป็นข้อความอีกครั้ง โดยรูปแบบของ Symmetric Encryption ที่ถูกใช้ในปัจจุบันคือ AES-128, AES-256 เป็นต้น

Reference: https://www.baeldung.com/wp-content/uploads/sites/4/2021/12/SymEnc.png

2. Asymmetric Encryption

เป็นวิธีการเข้ารหัสโดยใช้ Key จำนวน 2 Key คือ 1. Public Key และ 2. Secret Key (ในบางครั้งจะถูกเรียกว่า Private Key) โดยการใช้งานจะออกแบบให้ใช้งาน Public Key เปิดเผยกับสาธารณะ และ Secret Key เก็บไว้เป็นความลับและไม่เปิดเผยกับคนอื่น สำหรับการใช้งานเข้ารหัสโดยทั่วไปจะใช้วิธีการ ใช้ Public Key ในการเข้ารหัส ข้อความ และใช้ Private Key ในการถอดรหัสข้อความ

Reference: https://www.baeldung.com/wp-content/uploads/sites/4/2021/12/AsymEnc.png

ซึ่งวิธีการนี้จะทำให้คนที่อ่านข้อความเข้ารหัสได้ จะมีเพียงผู้ที่มี Secret Key เท่านั้น

แต่ Asymmetric Encryption นั้น สามารถใช้งานได้ในอีกรูปแบบหนึ่ง คือ ใช้ Private Key ในการเข้ารหัสข้อความ (ในกระบวนการนี้บางครั้งจะถูกเรียกว่าการ signing หรือการเซ็นลายเซ็นดิจิทัล) จากนั้น ส่งข้อความ + ข้อความที่เข้ารหัสแล้ว(บางครั้งจะถูกเรียกว่า Digital Signature) ไปให้ผู้รับที่มี Public Key จากนั้นผู้รับสามารถตรวจสอบได้ว่าผู้ส่งเป็นผู้ที่มี Secret Key อยู่โดยการใช้ Public Key ในการถอดรหัส Digital Signature ว่าตรงกับข้อความต้นฉบับหรือไม่

Reference: https://www.baeldung.com/wp-content/uploads/sites/4/2021/12/AsymSign-1.png

พื้นฐานการ Hash ฉบับรวบรัด

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

  1. ถ้าข้อมูลเป็นชุดเดียวกัน ผลลัพธ์จากการ Hash จะต้องเป็นค่าเดิมเสมอ และผลลัพธ์จะต้องไม่ซ้ำกับข้อมูลชุดอื่น
  2. ไม่ว่าข้อมูลจะมีขนาดเท่าไรขนาดของผลลัพธ์จะเท่าเดิมเสมอ
  3. ฟังก์ชันการ Hash จะต้องไม่สามารถทำการย้อนกลับหาข้อมูลต้นทางได้ และมีการกระจายตัวคาดเดาได้ยาก
Reference: https://miro.medium.com/v2/resize:fit:1100/format:webp/1*KWAeYoTX2TvtkXxpNOi2mQ.png

Elliptic Curve ถูกใช้งานในส่วนไหนของ Bitcoin?

ต้องบอกว่าระบบบัญชีโดยพื้นฐานของ Bitcoin หรือ Cryptocurrency หลาย ๆ ตัวนั้น ไม่ได้ออกแบบมาให้บันทึกบัญชีที่ Server ศูนย์กลางเหมือนบัญชีธนาคารหรือ Application Wallet ต่าง ๆ ที่เราคุ้นเคย ทำให้ระบบที่ออกแบบมาในลักษณะนี้ จะไม่สามารถรู้ได้ว่าใครเป็นเจ้าของบัญชี เนื่องจากไม่ได้มีการสมัครหรือลงทะเบียนเหมือนกับบัญชีธนาคาร

ดังนั้น ระบบบัญชีของ Bitcoin จะใช้วิธีการเข้ารหัสแบบ Asymmetric Encryption โดยให้เจ้าของบัญชีถือ Secret Key (ต่อไปนี้จะเรียกว่า Private Key) ไว้เป็นสิ่งที่ระบุความเป็นเจ้าของบัญชี โดยที่ Private Key นั้น จะเป็นรหัสลับชุดหนึ่งที่มีขนาด 256 bits ซึ่ง Private Key นี้ จะมีที่มาจากการที่เจ้าของบัญชีทำการสุ่มตัวเลขขึ้นมาเองและเก็บไว้เป็นความลับ จากนั้น Private Key นี้ จะต้องนำมาคำนวณหา Public Key ผ่านกระบวนการ วิธีที่เรียกว่า Elliptic Curve (กำลังจะกล่าวถึงต่อไป)

โดยการใช้งานโอนเงินออกจากบัญชีจะเป็นในลักษณะที่เจ้าของบัญชีจะต้องนำ Public Key ของผู้รับเงิน + ข้อมูลธุรกรรมการโอน มารวมกันและทำการ Hash จากนั้นเมื่อเจ้าของบัญชีนำ Private Key ไป signing ข้อมูลหลังจาก Hash เป็น Digital Signature แล้ว ก็จะนับว่าธุรกรรมการโอนเงินจากเจ้าของบัญชีไปสู่บัญชีผู้รับผ่านการตรวจสอบโดยสมบูรณ์ และธุรกรรมก็จะรอให้ถูกบันทึกลงฐานข้อมูลของ Blockchain (ในส่วนนี้อาจจะพูดถึงในบทความถัด ๆ ไป)

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

Reference: Mastering Bitcoin, 3rd Edition

Elliptic Curve มีวิธีการคำนวณอย่างไร?

Elliptic Curve นั้น เป็นกราฟรูปแบบหนึ่งในระบบพีชคณิตแกน 2 มิติ (x,y) เหมือนกับ กราฟเส้นตรง, วงกลม หรือพาลาโบลา ที่เราเคยได้เรียนกันในชั้นมัธยม โดยสมการของ Elliptic Curve จะนิยามด้วย y²=x³+ax+b

โดยหากแทนค่า a = 0 , b = 7

จะได้สมการ y²=x³+7 ที่มีหน้าตาดังรูปด้านล่าง

สมการ Elliptic Curve ที่ระบบ Bitcoin ใช้จะใช้เป็น

y²=x³+7 บนขอบเขตของ ค่าจำนวนเฉพาะ p (Finite field of prime order p)

สามารถเขียนได้อีกรูปแบบคือ (y²) mod p = (x³+7) mod p สมการนี้มีชื่อเรียกว่า secp256k1

โดยมีค่า p = 2²⁵⁶- 2³² - 2⁹- 2⁸ - 2⁷ - 2⁶ - 2⁴ - 1

เพื่อให้ง่ายต่อการทำความเข้าใจผมจะขอใช้ค่า p แทนด้วย p =17

จะเขียนเป็นสมการได้ว่า (y²) mod 17 = (x³+7) mod 17

mod คือ การหารเอาเศษ ตัวอย่างเช่น 26 mod 17 = 9 (คำนวณจาก 26/17 = 1(9/17)) จะเห็นได้ว่าค่าของการ mod จะไม่สามารถเกินตัวเลข 17 ได้ ซึ่งเป็นที่มาของชื่อ Finite field of prime order p = 17

โดยสมการ (y²) mod 17 = (x³+7) mod 17 สามารถ plot เป็นกราฟได้ ดังนี้

Reference: Mastering Bitcoin, 3rd Edition

ตัวอย่างการคำนวณแทนค่าจุด (1,5) บนสมการ (y²) mod 17 = (x³+7) mod 17

  • (y²) mod 17 = (x³+7) mod 17
  • (⁵²) mod 17 = (¹³+7) mod 17
  • 25 mod 17 = 8 mod 17
  • 8 = 8 (สมการเป็นจริง)

นิยามการบวกจุดของ Elliptic Curve

โดยทั่วไปนิยามที่เราเคยเรียนการบวกจุดในพีชคณิตแกน 2 มิตินั้น ในช่วงมัธยมจะเป็นการบวกจุดแบบแกนต่อแกน ตัวอย่างเช่น (2,7) + (8,24) = (10,31) แต่ในนิยามการบวกจุดของ Elliptic Curve นั้น แตกต่างกันออกไป โดยได้นิยามวิธีการบวกจุด 2 จุด บนกราฟ Elliptic Curve โดยการลากเส้นผ่าน จุดทั้ง 2 จากนั้นสะท้อนแกน x

Reference: https://d3i71xaburhd42.cloudfront.net/545081ddc0484503d95d4cf4c7c4b4bcf17beade/6-Figure1-1.png

ตัวอย่างการบวกจุด P+R (เพื่อให้ง่ายต่อการทำความเข้าใจผมจะใช้ทศนิยมแค่ 1 ตำแหน่ง)

  • สมมุติให้จุด P = (0,2.6) และ R = (2,3.9) เป็นจุด 2 จุดบนสมการเส้นโค้ง Elliptic Curve y²=x³+7
  • จะสามารถคำนวณสมการเส้นตรงที่ผ่านจุด (0,2.6) และ (2,3.9) จากการแทนค่า y = mx+c
  • จะได้สมการเส้นตรง y = 0.65x + 2.6 ที่ตัดเส้นโค้ง y²=x³+7 ที่จุด (-1.678,1.51)
  • จากนั้นสะท้อนจุด (-1.678,1.51) ผ่านแกน x จะได้จุด (-1.678,-1.51) (ตัวเลขอาจคลาดเคลื่อนเล็กน้อยจากการปัดเศษทศนิยม)
  • ดังนั้นจากนิยามการบวกจุด จุด P + R = (-1.678,-1.51) ดังภาพ

จากตัวอย่าง หากจุด P และ Q เป็นจุดเดียวกัน สมการเส้นตรงที่ผ่านจุดทั้ง 2 คือเส้นสัมผัสของกราฟเส้นโค้งที่จุดนั้น ๆ นั่นเอง

ตัวอย่างการบวกจุด P+P = 2P

  • สมมุติให้จุด P = (2,3.9) เป็นจุดบนสมการเส้นโค้ง Elliptic Curve y²=x³+7
  • จะสามารถคำนวณสมการเส้นตรงที่ผ่านจุด (2,3.9) จากการแทนค่า y = mx+c
  • โดย m = dy/dx
  • d/dx(y²=x³+7)
  • 2y(dy/dx)=3x²
  • dy/dx = (3x²)/2y
  • แทนค่า (2,3.9) จะได้ 3x²/2y = 12/7.8 = 1.5
  • จะได้สมการ y = 1.5x+0.9 ตัดเส้นโค้ง y²=x³+7 ที่จุด (-1.652,-1.578)
  • จากนั้นสะท้อนจุด (-1.652,-1.578) ผ่านแกน x จะได้จุด (-1.652,1.578) (ตัวเลขอาจคลาดเคลื่อนเล็กน้อยจากการปัดเศษทศนิยม)
  • ดังนั้นจากนิยามการบวกจุด จุด P+P = 2P = (-1.652,1.578) ดังภาพ

ซึ่งวิธีการของ Elliptic Curve จะนิยาม K = k*G

โดย K คือ Public Key, k คือ Private Key และ G เป็นจุดคงที่

จุด G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)

บน curve secp256k1 (นิยามเป็นตัวเลขฐาน 16)

โดยหากเปรียบเทียบโดยเข้าใจง่าย จากตัวอย่าง 2P = (-1.652,1.578) ข้างต้น โดยสมมุติ P = G แล้ว

Private Key = 2

Public Key = จุด (-1.652,1.578) นั่นเองครับ

สรุป

จะเห็นได้ว่าวิธีการคำนวณโดยใช้ Private Key เพื่อหาค่า Public Key นั้น สามารถทำได้ แต่ในทางกลับกัน ถ้ารู้ Public Key การจะคำนวณย้อนกลับไปหา Private Key นั้นกลับทำได้ยาก

โดยหากพิจารณา จุดที่เป็นค่า Public Key การคำนวณย้อนกลับจะสามารถทำได้โดยการสะท้อนแกน x จากนั้นต้องหาค่า จุดบนเส้นโค้ง secp256k1 ที่ทำให้เกิด tangent line ที่ตัดจุดดังกล่าว (ขั้นตอนนี้ทำให้เกิดจุดที่มีความเป็นไปได้ 2จุด) และการคำนวณย้อนกลับนี้จะต้องทำเป็นจำนวน k ครั้ง จนกว่าจะย้อนกลับไปเจอจุด G จึงจะสามารถหาค่า Private Key ได้สำเร็จ

ซึ่งหากพิจารณา จากขนาดของ Private Key ขนาด 256 bits แล้ว ความเป็นไปได้ในการคำนวณย้อนกลับจะมี sample space ของความน่าจะเป็น 2^((2²⁵⁶)-1) ซึ่งตัวเลขนี้จะมากกว่า sample space ของความน่าจะเป็นในการสุ่ม brute force ตัวเลข binary 256 bits ที่มีขนาด sample space = 2²⁵⁶ ซะอีก

จากการวิเคราะห์ดังกล่าวแสดงให้เห็นว่าการ brute force ค่า Private Key เป็นสิ่งที่ทำได้ง่ายว่าการพยายามจะคำนวณย้อนกลับ Elliptic Curve นั่นเอง ซึ่งเป็นหนึ่งในการออกแบบของระบบ แต่การจะ brute force ตัวเลขขนาดใหญ่ในระดับ 2²⁵⁶ bits นั้นกำลังในการประมวลผลของคอมพิวเตอร์ทั่วโลกในปัจจุบันยังคงเป็นสิ่งที่ใช้เวลามากจนเรียกได้ว่ายังไม่สามารถทำได้ ณ ปัจจุบัน แม้จะเป็นกำลังในการประมวลผลใน scale ของ super computer ก็ตาม ทั้งหมดนี้จึงเป็นหนึ่งในเหตุผลด้านความปลอดภัยเบื้องหลังการทำงานของ Bitcoin นั่นเอง

ส่งท้าย (กันสักนิด)

เนื้อหาในบทความนี้ผมพยายามอธิบายการทำงานของ Elliptic Curve โดยใช้พื้นฐานของคณิตศาสตร์ให้เข้าใจง่ายที่สุด โดยมีการปัดเศษส่วนและตัดการพูดถึงการ implement บางส่วนที่ใช้งานในระบบของ bitcoin ออกไป เช่น รูปแบบ form ของ ค่า G ที่ปัจจุบันได้มีการพัฒนาให้ลดขนาดของข้อมูลลง และมีการใช้งานในหลาย ๆ เวอร์ชัน จึงอาจยังไม่สมบูรณ์ 100% ในความครบถ้วนของข้อมูล และถ้าชอบบทความนี้ หรืออยากให้เขียนแนวนี้ต่อไป สามารถให้กำลังใจผู้เขียนผ่านการกดถูกใจ หรือคอมเมนต์เข้ามาพูดคุยกันได้ แล้วเจอกันในบทความต่อไปครับ

Reference

--

--