หลาย ๆ คนยังไม่เข้าใจการทำงานของ Seed phrase ทำให้มีคำถามมากมายว่า ทำแบบโน้นแบบนี้ได้ไหม และไม่ได้ตระหนักถึงความสำคัญของ Seed phrase เพราะความเข้าใจผิดคิดว่ามันเหมือนกับ Password ทำให้คิดว่าถ้าลืม หรือสูญหายก็คงมีวิธีกู้กลับมาได้ ความเข้าใจเดิม ๆ เอามาใช้กับในโลกคริปโทฯ ไม่ได้เลย ความเข้าใจผิด ๆ หลาย ๆ อย่างทำให้คนสูญเสียเหรียญไปแล้วมากมาย หนึ่งในนั้นก็มีผู้เขียนด้วย นั่นจึงเป็นเหตุให้ผมเข้าใจเรื่องพวกนี้เป็นอย่างดีและต้องคอยย้ำเตือนกันตลอด
Seed กับ Seed Phrase (บางทีเราก็ใช้คำว่า Seed Word) ไม่เหมือนกัน
คำว่า Phrase มันหมายถึงวลี ดังนั้นบางทีก็เรียกเป็น Word ที่แปลว่าคำซึ่งให้ความหมายไม่ได้ต่างกัน Seed Phrase จึงหมายถึงชุดของวลี หรือคำที่ประกอบรวมกันแล้วได้เป็น Seed นั่นเอง ดังนั้นถ้าแปลง่ายๆ
“Seed เป็นผลลัพท์ของ Seed Phrase นั่นเอง”
Seed ไม่ใช่ Private Key แต่มันเป็น Master Private Key
Seed ความหมายของมันคือเมล็ดพันธุ์ ผมชอบในความหมายที่คนคิดออกแบบมามาก เพราะมันหมายถึงเรามีเมล็ดพันธุ์ที่เราเอาลงไปปลูกเมื่อไหร่ก็ออกมาได้ผลเหมือนเดิม Seed ถูกใช้เป็นหัวเชื้อในการสร้าง Private Key ถูกนำเสนอขึ้นมาใน BIP32 (Bitcoin improvement proposal no 32) ทำให้เราสามารถสร้าง Wallet Address ได้แบบเรียกได้ว่าไม่จำกัด โดยมีโครงสร้างที่สามารถนำไปใช้กับหลาย ๆ Chain ได้ นั่นคือสาเหตุว่าทำไมกระเป๋า หรือ Hardware Wallet สามารถเก็บได้หลาย ๆ เหรียญ หลาย ๆ Chain ใน Seed Phrase ชุดเดียว
ถ้าดูจากรูปจะเห็นได้ว่า จะเห็นได้ว่าเราสามารถกำหนด Path สำหรับเหรียญแต่ละ Chain ได้ ต้องเรียกได้ว่ามาตรฐานนี้ทำให้ Software ที่จัดการเรื่องกระเป๋าหรือ Wallet ใช้เป็นพื้นฐานเลยทีเดียว เป็นการยกระดับการเก็บบิทคอยน์และเหรียญอื่น ๆ ในยุคนั้น
การสร้าง Entropy 128 bits ใน Master Seed ทำยังไง
เอาจริง ๆ แค่คำว่า Entropy ก็ปวดหัวแล้วป่ะ มันเป็นคำที่ใช้ในควอนตัมฟิสิกส์ ที่อธิบายได้ยากมาก แล้วมนุษย์ธรรมดา ๆ อย่างเราจะทำยังไงล่ะ คนใช้ไม่ควรต้องมาปวดหัวครับ และผมขออธิบายเรื่อง Entropy ใน VDO นะครับ ขี้เกียจพิมพ์ ตามไปดูได้ที่ช่อง Bitcast ได้ครับ เพื่อไม่ให้คนใช้ปวดหัวเค้าจึงคิดมาตรฐานเพิ่มขึ้นมาใน BIP39 (Bitcoin improvement proposal no.39) ให้คุณ ซึ่งสามารถสร้าง Entropy 128 bits จากการสุ่มคำมา 12 คำ ซึ่งก็เพียงพอกับความปลอดภัยแล้ว แต่กระเป๋าส่วนใหญ่จะใช้ 24 คำ ซึ่งจะทำให้เราได้ Entropy 256 bits ใน Master seed
กระบวนการแปลงคำ 24 คำเป้น Entropy 256 bits ใน Master seed
ใน BIP39 จะมีคำทั้งหมด 2048 คำเราสามารถเข้าไปดูได้ที่นี่ ในการแปลงคำจากรายการที่เราสุ่มได้เราจำเป็นจะต้องรู้อีกสองเรื่องด้วยกันก็คือ
1) การแปลงคำเป็นลำดับ(Decimal)
ซึ่งลำดับทีได้จะเป็นตัวเลขในเชิงของคอมพิวเตอร์เรียกว่า Decimal ซึ่งวิธีการแปลงมันไม่ได้ยากเพราะว่าเรามีทะเบียนคำอยู่แล้ว เช่น คำว่า abadon เราไปดูในทะเบียนจะพบว่ามันเป็นลำดับที่ 1 หรือคำว่า charge อยู่ลำดับที่ 309 คำว่า undo อยู่ลำดับที่ 1896 คำว่า Zoo อยู่ลำดับสุดท้ายคือ 2048 ในกระบวนการนี้ยังถือได้ว่าคุยกันเป็นภาษามนุษย์อยู่ ยังไม่ได้ยากอะไร แล้วผมก็คิดว่าคนออกแบบเค้าก็ออกแบบมาดี คือให้คนรู้อยู่แค่นี้ ที่เหลือกให้ซอฟท์แวร์หรืออุปกรณ์ที่เรียกว่า Hardware Wallet จัดการ เพราะถ้าให้คุณจำคำ หรือจดคำยังไงก็ง่ายกว่าจด Entropy หรือ Master Private Key เองแน่นอน นั่นคือที่มาที่ไปของ BIP39
No |
Seed Phrase |
Index |
1 |
differ |
495 |
2 |
luxury |
1067 |
3 |
chase |
310 |
4 |
spawn |
1670 |
5 |
february |
675 |
6 |
phrase |
1311 |
7 |
light |
1037 |
8 |
hotel |
882 |
9 |
since |
1610 |
10 |
woman |
2024 |
11 |
change |
306 |
12 |
purchase |
1394 |
13 |
addict |
27 |
14 |
member |
1111 |
15 |
song |
1658 |
16 |
joy |
965 |
17 |
drill |
536 |
18 |
jungle |
969 |
19 |
basic |
153 |
20 |
usage |
1917 |
21 |
dinner |
499 |
22 |
program |
1376 |
23 |
situate |
1614 |
24 |
regret |
1446 |
2) การแปลงลำดับเป็นเลขฐานสอง (Binary)
ในขั้นตอนของการแปลง Binary นั้น ถ้าเข้าใจ ในขั้นตอนนี้มันเริ่มเป็นภาษาคอมพิวเตอร์แล้ว คนจะเริ่มงง ๆ เพราะเรากำลังจะสื่อสารกับคอมพิวเตอร์เราต้องทำให้มันเป็น Binary ซึ่งจะมี 0 กับ 1 เท่านั้น โดยแต่ละตำแหน่งจะแปลงเป็น Binary ได้ 11 bits ถ้าเราจะให้ได้ Entropy 256 bits 11 bits x 24 = 264 ซึ่งจะเกิน 256 มา 8 bits ซึ่ง 8 bits สุดท้ายนี้แหละที่มันจะเอามาเป็น Check Sum ในคำสุดท้าย นั่นคือสาเหตุที่มีหลาย ๆ คนถามผมว่า เราเลือกคำเองได้ไหม คำตอบคือ ได้นะ แต่คุณต้องมาคำนวน Check Sum คำสุดท้ายเอง ซึ่งมันต้องเข้าใจระดับนึงเลยถึงจะทำได้ ส่วนใหญ่ผมจึงตอบว่าทำไม่ได้ไป แต่จริง ๆ แล้วทำได้นะ เดี๋ยวผมจะเขียนบทความเกี่ยวกับวิธีการ Random คำเองโดยใช้ลูกเต่าในการสุ่มคำมาให้พร้อมกับวิธีการคำนวน Check Sum แต่วันนี้เข้าใจเรื่องการทำงานของ Seed Phrase ก่อนว่า ที่มาที่ไปมันเป็นยังไง ผมจะทำเปรียบเทียบให้ดูว่าในกรณีที่ผมแปลง Seed Phrase เป็น Binanry นั้นต้องทำอย่างไร
No |
Seed Phrase |
Index |
Index -1 |
Binary |
1 |
differ |
495 |
494 |
00111101110 |
2 |
luxury |
1067 |
1066 |
10000101010 |
3 |
chase |
310 |
309 |
00100110101 |
4 |
spawn |
1670 |
1669 |
11010000101 |
5 |
february |
675 |
674 |
01010100010 |
6 |
phrase |
1311 |
1310 |
10100011110 |
7 |
light |
1037 |
1036 |
10000001100 |
8 |
hotel |
882 |
881 |
01101110001 |
9 |
since |
1610 |
1609 |
11001001001 |
10 |
woman |
2024 |
2023 |
11111100111 |
11 |
change |
306 |
305 |
00100110001 |
12 |
purchase |
1394 |
1393 |
10101110001 |
13 |
addict |
27 |
26 |
00000011010 |
14 |
member |
1111 |
1110 |
10001010110 |
15 |
song |
1658 |
1657 |
11001111001 |
16 |
joy |
965 |
964 |
01111000100 |
17 |
drill |
536 |
535 |
01000010111 |
18 |
jungle |
969 |
968 |
01111001000 |
19 |
basic |
153 |
152 |
00010011000 |
20 |
usage |
1917 |
1916 |
11101111100 |
21 |
dinner |
499 |
498 |
00111110010 |
22 |
program |
1376 |
1375 |
10101011111 |
23 |
situate |
1614 |
1613 |
11001001101 |
24 |
regret |
1446 |
1445 |
10110100101 |
Index ต้องปรับให้เข้ากับฐานของ Binary
เราจำเป็นต้องเอา Index - 1 สาเหตุเพราะว่า ค่าที่เป็น Binary ที่เริ่มต้นในภาษาคอมพิวเตอร์คือ 00000000000 ดังน้นใน Index 1 หมายถึง 0 ใน Binary จึงทำให้เราต้องลบ 1 แล้วค่อยเอาค้านั้นไปแปลงเป็น Binary ซึ่งเราสามารถใช้ เครื่องมือออนไลน์ทั่วๆ ไปได้ หรือจะใช้ตารางนี้ในการเทียบ Binary ก็ได้เหมือนกัน
ถ้าเราแปลงถูกหมดรูปร่างหน้าตาของ Raw Binary Code เที่เป็น Entropy 256 bits หน้าตาจะประมาณนี้
00111101110 10000101010 00100110101 11010000101 01010100010 10100011110 10000001100 01101110001 11001001001 11111100111 00100110001 10101110001 00000011010 10001010110 11001111001 01111000100 01000010111 01111001000 00010011000 11101111100 00111110010 10101011111 11001001101 101
จะมีทั้งหมด 256 ตำแหน่งซึ่งตัวสุดท้ายใช้แค่สามตำแหน่งอีก 8 ตำแหน่งเป็น Check Sum หน้าตา Check Sum ก็จะประมาณนี้
Binary Check Sum: 10100101
หน้าตาของ BIP39 Seed หน้าจะประมาณนี้ครับ
384c3bf4ffd10ca423e4f25aeb8a69be90c5297f8f822676f85deef402c35eea0b712cdf51bdbd7d86f952c48acc5014a3fab133e749e78d2022ed01aa03c2b9
ซึ่งเราะจะได้ Seed ที่ทำหน้าที่เหมือน Master Private Key ที่ทำให้เราสามารถสร้างกระเป๋าได้เรียกว่าไม่จำกัดภายใต้ Seed นี้
บทสรุป
หวังว่าบทความนี้จะทำให้ทุกท่านเข้าใจเรื่องของหน้าที่ Seed Phrase มากขึ้น จากคำถามว่าเราสามารถเลือก คำเองเลยได้ไหม คำตอบก็คือ ได้แต่เราต้องรู้วิธีคำนวน Check Sum ในคำสุดท้ายซึ่งต้องใช้ความเข้าใจ แต่ถ้าทุกท่านสนใจจริง ๆ เดี๋ยวรอบทความที่ 2 ที่เราจะใช้ลูกเต๋าในการสุ่มคำขึ้นมาเพื่อสร้าง Seed ครับ
Ref:
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
https://trezor.io/learn/a/what-is-bip32
https://armantheparman.com/dicev1/
https://drive.google.com/file/d/1lzrMrCkEq6ylfWh1p-CT7i4EpqZEU_g9/view
1 ความคิดเห็น
ผมมี Seed phrase ที่จดไว้แล้ว, แต่ผมต้องการตรวจสอบความถูกต้องของ Seed phrase ที่ผมจดไว้,
มีวิธีตรวจสอบความถูกต้อง Seed phrase ของตัวเองใหมครับ “Trezor”