รู้หรือไม่ Bitcoin Address เกิดขึ้นจากอะไร!?
ตอนที่ 3 กำเนิน address
จาก 2 ตอนแรกที่ผมกล่าวถึงเรื่องของการทำ encryption และ hash แล้วนั้น มาถึงตอนนี้เราจะเอาองค์ความรู้ใน 2 ตอนแรกมาสร้างเป็น address ของ bitcoin แล้วครับ
จริงๆ แล้วกระบวนการสร้าง address ของ bitcoin ไม่ได้ยากเย็นอะไรเลยครับ ซึ่ง step ของการสร้างเป็นดังนี้
- ทำการสร้างคู่กุญแจขึ้นมาก่อน ซึ่งการสร้างนี้เราจะได้ public key และ private key ขึ้นมา (เรื่องคู่กุญแจดูได้ในตอนที่ 1)
- นำเอา public key ในข้อที่ 1 มาสร้างเป็น hash โดยทำสิ่งที่เรียกว่า double hashing ซึ่ง step ในการสร้าง hash เป็นดังนี้
- สร้าง hash ของ public key ด้วยวิธีการ SHA256
- สร้าง hash อีกครั้งจากข้อ 2.1 ด้วยวิธีการ RIPEMD160
โดยผลลัพธ์จากการ hash นี้เราจะได้ข้อมูลที่มีขนาด 20 byte หรือ 160 bit ตามชื่อ hash function เลยครับ
- เอา hash จากข้อ 2 มา encode ด้วยวิธีการ Base58 Encoding ซึ่งเป็นการ encode ข้อมูลให้มีหน้าตาในแบบที่สามารถใช้ตัวอักษรภาษาอังกฤษรวมถึงอัขระพิเศษบางตัวในการแสดงผลได้ โดยอักขระที่ใช้แสดงผลได้จะประกอบไปด้วย A-Z, a-z, 1-9 ยกเว้น O (ตัวอักษรโอพิมพ์ใหญ์), l (ตัวอักษรแอลพิมพ์เล็ก), I (ตัวอักษรไอพิมพ์ใหญ่)
ซึ่งผลลัพธ์จากข้อนี้ก็จะได้ address มาและครับ แต่ตัว address นี้ก็จะนำมาเพิ่มเติมบางอย่างลงไปให้มันมีคุณสมบัติมากขึ้น มีความน่าเชื่อถือมากขึ้น โดยเค้าจะทำเพิ่มดังนี้ครับ
3.1 เติมสิ่งที่เรียกว่า version prefix ลงไปข้างหน้า address ซึ่งเจ้า version prefix นี้ก็จะสามารถใช้จำแนกได้ว่า address นี้ มีจุดประสงค์เพื่ออะไรType
Version prefix (Hex) ersion prefix (Base58)
Bitcoin Address 0x00
1
Pay-to-Script-Hash Address 0x05
3
Bitcoin Testnet Address 0x6F
m หรือ n
Private Key WIF 0x80
5, K หรือ L
BIP38 Encrypted Private Key 0x0142
6P
BIP32 Extented Public Key 0x0488B21E
xpub
3.2 ใส่สิ่งที่เรียกว่า Checksum ลงไปที่ท้าย address โดยเจ้า Checksum นี้มีไว้เพื่อไว้ยืนยัน address ว่ามีความถูกต้อง ไม่ได้มีตัวอักษรตัวไหนเปลี่ยนไปหรือหายไป ซึ่งวิธีคิดคือ
แต่ก็ไม่ได้ใส่ทั้งค่าที่คำนวณได้นะครับ (เพราะมันยาว) เค้าจะใส่แค่ 4 byte แรกของค่า checksum ที่คำนวนได้ลงไปเท่านั้น
สรุป flow การสร้าง address ของ bitcoin ก็เป็นไปตามรูปด้านล่างครับ
วิธีการสร้าง address ของ bitcoin นั้นไม่ยากเลยใช่ไหมครับ สำหรับในการสร้าง address ของ coin อื่น ๆ นั้นก็จะไม่ต่างจาก bitcoin มากนัก ส่วนมากก็จะปรับเปลี่ยนวิธีการ hash เสียมากกว่าครับ สำหรับเรื่องของการสร้าง address ก็จบเพียงเท่านี้นะครับ ^__^