Introduction to Cryptography

Bithope
3 min readApr 23, 2022

--

Bitcoin EP.1 Introduction to Cryptography
Bitcoin EP.1 Introduction to Cryptography

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

Hashing function concept

Hashing function คือโลกที่ซับซ้อนในการเข้ารหัสในที่นี้ผมขออธิบายแบบเข้าใจง่ายๆเพื่อให้คนทั่วไปสามารถทำความเข้าใจได้ไม่ยาก ขอเปรียบเทียบอัลกอริทึมของการเข้ารหัสกล่องวิเศษกล่องหนึ่งที่เราสามารถใส่บางอย่างลงไปมันก็จะปล่อยบางอย่างออกมา Hashing function เป็นระบบที่คุณใส่บางอย่างลงไป และมันจะส่งข้อมูลออกมาที่เราเรียกว่า hash ในกล่องวิเศษนี้จะมีสมการทางคณิตศาสตร์ที่ซับซ้อนมากมาย ในกรณี bitcoin ได้ใช้ Hashing function รูปแบบที่เรียกว่า SHA-256 กล่าวคือไม่ว่าเราจะใส่อะไรลงไปในกล่อง มันจะออกมาเป็นตัวเลข 0 กับ 1 จำนวน 256 bit เสมอ ซึ่งคอมพิวเตอร์ได้แปลงค่าออกมาเป็นเลขฐาน 16 จำนวน 64 ตัวอักษร (ทั้งตัวเลขและตัวอักษร) Hashing function ในปัจจุบันมีมากมายหลายแบบ ในที่นี่จะขอเน้นไปที่ SHA-256

Hashing function

5 ข้อสำคัญเกี่ยวกับ Hashing function

  1. เป็นการเข้ารหัสแบบทางเดียว (one way) กล่าวคือ เราไม่สามารถถอดรหัส Hash กลับไปเป็นข้อมูลต้นฉบับได้
  2. คอมพิวเตอร์สามารถคำนวณ หรือสร้างค่า Hash ได้อย่างรวดเร็ว ตามรูปตัวอย่าง การเข้ารหัส Hash เราสามารถใส่ข้อมูล แล้วคอมพิวเตอร์สามารถคำนวณได้ทันที
  3. เมื่อ input เปลี่ยนแปลงแค่เล็กน้อยค่า Hash ที่ออกมาจะเปลี่ยนแปลงไปอย่างมหาศาล ทำให้ค่า Hash นั้นมีความปลอดภัยและคาดเดาได้ยากมาก
  4. Hashing function เป็นกระบวนการหา data fingerprint ที่ขนาด output เท่ากัน
  5. ถ้าเราใส่ข้อมูล input ด้วยข้อมูลชุดเดียวกัน output ที่ออกมาจะเหมือนกันทุกประการเสมอ
Public key concept

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

Private key = คีย์ที่เป็นความลับ
Public key = คีย์สาธารณะ หรือคีย์แชร์
Lock = encrypt (การเข้ารหัสข้อมูล)
Unlock = decrypt (การถอดรหัสข้อมูล)

ตัวอย่างการนำ กุญแจคู่มาใช้งานในการส่งข้อความลับ Bob ต้องการส่งข้อความลับถึง Alice ว่า “Come to my house at 6 p.m. Friday 14 December” โดยการใช้ Public key ของ Alice ในการเข้ารหัสขอมูล (encrypt) หลังจากข้อความเข้ารหัสถูกส่งไปยัง Alice เมื่อ Alice ต้องการอ่านข้อความ จะต้องทำการถอดรหัส (decrypt) โดยใช้ Private key ของ Alice

ตัวอย่างการนำ กุญแจคู่มาใช้งานในการส่งข้อความลับ
ตัวอย่างการนำ กุญแจคู่มาใช้งานในการส่งข้อความลับ
Digital Signature concept
Digital Signature concept

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

ตัวอย่างการใช้งาน Digital Signature (Sign) ในการเซ็นรับรองข้อความการโอนเงิน จาก Bob ไปยัง Alice มีอยู่ 2 ขั้นตอนคือ

  1. นำข้อความ “I, Bob agree to pay Alice $5” ไป Hash เราจะได้ค่า hash มาหนึ่งค่า
  2. นำค่า Hash ที่ได้มาเข้ารหัสข้อมูล (encrypt) ด้วย Private key ของ Bob เราจะได้ชุดข้อมูล Digital Signature เปรียบเสมือนลายเซ็นหรือลายนิ้วมือ ที่รับรองความถูกต้องของข้อความไว้
ตัวอย่างการใช้งาน Digital Signature (Sign)
ตัวอย่างการใช้งาน Digital Signature (Sign)

ตัวอย่าง ทุกคนสามารถตรวจสอบ Digital Signature (Verify) ว่า Bob เป็นคนเซ็นต์รับรองข้อความนี้จริงหรือไม่ การตรวจสอบข้อความมีการทำงานอยู่ 2 ส่วนควบคู่กันไป คือ

  1. นำข้อความ “I, Bob agree to pay Alice $5” ไป Hash เราจะได้ค่า hash มาหนึ่งค่า
  2. นำ Digital Signature ที่ได้มาทำการถอดรหัส (decrypt) ด้วย Public key ของ Bob
ตัวอย่าง ทุกคนสามารถตรวจสอบ Digital Signature (Verify)

ตอนนี้เรามีค่า Hash และข้อความที่ได้จากการถอดรหัส นำทั้ง 2 ค่าที่ได้มาเปรียบเทียบว่าตรงกันหรือไม่ ถ้าตรงกันแสดงว่า Bob ได้เซ็นต์กำกับข้อความการโอนเงินนี้จริง ถ้าค่าที่ได้มาไม่ตรงกันแสดงว่าข้อความขั้นต้นนั้นมีการแก้ไข หรือ Bob ไม่ได้เป็นคนเซ็นต์รับรองไว้

Address
Bitcoin Address

ที่อยู่บิทคอยน์เปรียบเสมือนเลขบัญชีธนาคาร ไว้สำหรับรับ Bitcoin สร้างมาจาก public key ผ่านการเข้ารหัสแบบทางเดียว ออกมาเป็น Bitcoin address ที่เราจำได้ง่ายกว่า public key ที่มีขนาดข้อมูลยาวจำได้ยากกว่า และไม่สามารถคำนวณกลับจาก bitcoin address ไปหา public key ได้

ปัจจุบัน bitcoin address มักจะถูกเข้ารหัสเป็น Base58check รูปด้านล่าง แสดงให้เห็นถึงกระบวนการเปลี่ยนแปลงจาก public key ไปสู่ bitcoin address แบบสังเขป

กระบวนการเปลี่ยนแปลงจาก public key ไปสู่ bitcoin address

ขอแนะนำเว็บไซต์ bitaddress.org ที่สามารถเข้าไปทดลองสร้าง Bitcoin Address และสามารถแสดงผลออกมาในรูปแบบต่างๆ ตามรูป

bitaddress.org
bitaddress.org
Bitcoin Wallet
Wallet

กระเป๋าสตางค์ในระบบบิทคอยน์ คือ ซอฟต์แวร์บริหารจัดการคีย์สาธารณะและคีย์ส่วนตัวรวมไปถึงการลงนามธุรกรรม (signing transactions) หลายคนคิดว่า bitcoin wallet คือที่สำหรับเก็บบิทคอยน์ ในหลักการแล้วมันคือพวงกุญแจ

ปัจจุบัน wallet ส่วนใหญ่จะเป็นแบบ Deterministic คือ คีย์ทุกๆคีย์จะถูกสร้างมาจาก seed ผ่านกระบวนการ hash รูปแบบต่างๆ ตามรูปด้านล่าง คือ HD Wallets มาตรฐาน BIP-32 ที่พัฒนาขึ้นเพื่อให้ง่ายต่อการจัดเก็บและบริหารคีย์ จาก seed แค่ชุดเดียว

HD Wallets มาตรฐาน BIP-32
HD Wallets มาตรฐาน BIP-32

Seed, Mnemonic Code (BIP-39) คือมาตรฐานในการสร้าง seed จากคำภาษาอังกฤษจำนวน 2048 ที่ง่ายต่อการจำกว่า seed ในรูปแบบเลขฐานสิบหก

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

--

--

No responses yet