
วิธีสร้างกระเป๋าเก็บ Bitcoin แบบเลือกคำมาสร้าง Seed Phrase เอง
Share
ปกติเวลาเราจะสร้างกระเป๋าสำหรับเก็บ Bitcoin ถ้าใครมี Hardware Wallet หรือใช้ Software มันจะสุ่มคำ 12 หรือ 24 คำ ให้เรา หลายๆ คนมักจะสงสัยว่า แล้วมีทางที่เราจะเลือกเองได้ไหม เพราะ Software มันสุ่มให้เราก็ไม่ไว้ใจ คำตอบคือสามารถสุ่มเองได้ครับ แต่ต้องเข้าใจหลักการเพราะ คำสุดท้ายสุ่มไม่ได้ต้องคำนวนเนื่องจากเป็น Check Sum สำหรับเนื้อหาในตอนนี้ผมจะทำให้ทุกท่านสามารถสร้างชุดคำ Seed Pharse เองได้ด้วยเหรียญที่มีอยู่ในบ้าน
หลักการทำงานของ Seed Phrase
ก่อนจะไปที่เนื้อหายาก ๆ ขอพูดถึงหลักการทำงานของ Seed Phrase แบบคร่าวๆ ก่อนเผื่อใครที่อ่านบทความที่แล้วไปจะได้รำลึกได้บ้างว่ามันทำงานยังไง และจะได้เข้าใจในบทความนี้อย่างลึกซึ้ง ถ้าใครยังไม่ได้อ่านผมแนะนำให้ไปอ่านบทความนี้ก่อนนะครับ “Seed Phrase คืออะไร ทำไมถึงสำคัญ” คำที่ Hardware หรือ Software Wallet สุ่มให้เรา มันเป็นเพียงเครื่องหมายที่ทำให้เราจำได้ง่าย หากผิดพลาดยังมีที่ให้กลับมาทบทวนดูว่าเขียนอะไรผิด ตรงไหน หรือ สูญหายบางคำก็พอที่จะสุ่มได้
จากรูปจะเห็นได้ว่าคำหรือ Seed Word ใช้เป็นแค่เพียงเครื่องหมายเพื่อแปลงเป็น Binary Code ในขั้นตอนสุดท้าย (raw binary code ก่อนจะแปลงเป็น master seed) โดยที่ Seed Word นั้นเอาไปเทียบกับ BIP39 Word List เมื่อได้ลำดับแล้ว จำเป็นจะต้องเอาไป -1 เนื่องจากใน Word List มันเริ่มจาก 1 แต่ใน Binary Code นั้นเริ่มจาก 0 แต่ละคำจะแปลงเป็น Binary Code 11 หลักด้วยกัน ดังนั้นถ้ามี 24 คำ จะเท่ากับ 11*24 = 264 แต่ Raw Binary Code ใช้เพียงแค่ 256bits สำหรับ Seed Word 24 คำ ดังนั้นถ้าเราเอา 264-256 = 8 ซึง 8bits นี้แหละที่เป็น Check Sum ในคำสุดท้ายที่ทำให้เราสุ่มคำนี้ไม่ได้ ต้องมาจากการคำนวน ดังนั้นในคำสุดท้ายที่มี 11bits จะใช้ไปใน raw binary code 3bits อีก 8bits จะเป็น Check Sum ถ้างงแนะนำให้ดู VDO นี้ครับ
Check Sum คืออะไร สำคัญยังไงใน Seed Phrase
Check Sum เป็นชุดข้อมูลขนาดเล็กที่สร้างขึ้นจากชุดข้อมูลดิจิทัลอื่นเพื่อวัตถุประสงค์ในการตรวจจับข้อผิดพลาดหรือความถูกต้องของข้อมูลที่อาจเกิดขึ้นระหว่างการส่งหรือจัดเก็บ
กระบวนการที่สร้าง Check Sum นี้เรียกว่า Function Check Sum หรือ Algorithm Check Sum ขึ้นอยู่กับเป้าหมายในการออกแบบ Check Sum ที่ดีมักจะให้ค่าที่แตกต่างกันอย่างมาก แม้ว่าจะมีการเปลี่ยนแปลงเล็กน้อยต่อข้อมูลที่ป้อนเข้าไปใน Function โดยเฉพาะอย่างยิ่งกับฟังก์ชันแฮชที่ใช้ใน Blockchain มันจึงถูกนำมาใช้ตรวจจับข้อผิดพลาดในการสร้างกระเป๋าและใช้ยืนยันความสมบูรณ์ของ Seed Phrase
มาเข้าใจ Check Sum ใน Seed Phrase ให้มากยิ่งขึ้น
ตอนผมศึกษาเรื่องนี้ใหม่ๆ นะมันจะงง ๆ มันต้องคอยมาอ่านแล้วไล่ทีละหลักเพราะมันเป็น Binary Code ส่วนตัวแล้วผมไม่นะนำให้ไปสุ่มคำเลยจนกว่าจะเข้าใจวิธีการคำนวน Check Sum ก่อน ผมแนะนำให้เราลองคำนวนหาเองโดยที่รู้อยู่แล้วว่าผลลัพธ์เป็นอะไรเราจะได้รู้ว่าที่เราทำนั้นผิดหรือใหม่ ผมแนะนำให้ใช้เครื่องมือนี้นะครับ “เครื่องมือสร้าง Seed Phrase” แล้วลอง Copy 24 คำนี้ไปวางดูนะครับ เพื่อนๆ ควรได้ผลลัพธ์เดียวกันกับผม
dial shy about twelve cart giggle news outside snow twice cupboard coil mechanic maid canyon cage treat toss spring remind race protect soldier gospel |
วิธีการใช้งานผมไม่สอนนะครับ แนะนำให้ไปดูใน VDO นี้
อย่าลืมเลือก Option “Show entropy details” เพื่อให้เราเห็น ถ้าเราดูใน Raw Binary Code เราจะเห็นเลยว่าคำสุดท้าย มีแค่ 3bits
Raw Binary (256bits)
00111101000 11000111100 00000000011 11101011000 00100011000 01100001111 10010101001 10011101100 11001101100 11101011010 00110101110 00101101010 10001010001 10000110000 00100001110 00100000001 11100111110 11100101101 11010011001 10110101110 10110000011 10101100101 11001110100 011 |
อีกแปดหลักเอามาเป็น Check Sum
Binary Checksum
00100110 |
วิธีการคำนวน Check Sum
จากชุด Seed Phrase ในตัวอย่าง ผมอยากให้เราสมมุติว่าเราไม่รู้ว่าคำสุดท้ายคืออะไร เพราะฉะนั้นตอนสุ่มคำมา 23 คำแล้วคำสุดท้ายเราสุ่มมาแค่ 3bits ก็พอ วิธีการคำนวน Check Sum คือให้เราเราเอาค่า Raw Binary ทั้งหมดมาต่อกันโดยที่เอาช่องว่างออกให้หมดรูปร่างหน้าตาจะประมาณนี้ มีอยู่ทั้งหมด 256 หลัก(256bits นั่นเอง)
0011110100011000111100000000000111110101100000100011000011000011111001010100110011101100110011011001110101101000110101110001011010101000101000110000110000001000011100010000000111100111110111001011011101001100110110101110101100000111010110010111001110100011 |
หลังจากนั้นเอาไปเข้าคำสั่ง Check Sum ของ SHA256
#echo 0011110100011000111100000000000111110101100000100011000011000011111001010100110011101100110011011001110101101000110101110001011010101000101000110000110000001000011100010000000111100111110111001011011101001100110110101110101100000111010110010111001110100011 | shasum -a 256 -0 |
ผลลัพท์ที่ได้คือ
262bc48039658c37ded8139f3c6359f40b1419c182e5ae9f36c075e249b86f58 ^- |
ผลลัพท์ที่ได้เป็นเลขฐาน 16 นะครับเราต้องการ 8bits ซึ่งในเลขฐาน 16 1หลักประกอบไปด้วย 4 bits ในที่นี้เราจึงดึงมาเฉพาะสองตัวแรกใน Check Sum ก็เพียงพอที่จะทำให้เราสามารถตรวจสอบความถูกต้องของชุดคำเราในอนาคตได้แล้วครับ
2=0010
|
ท่านสามารถลองใช้เครื่องมือนี้ในการแปลงดูได้ครับ (เครื่องมือแปลง Hex เป็น Binary)
ดังนั้นเราจะรู้คำสุดท้ายแล้วนะครับว่าคือคำว่าอะไร โดยคำ 3bits จากคำที่ 24 มาต่อกับ 8bits ที่เราเพิ่งได้มาจาก การแปลงเมื่อสักครู่ เราก็จะได้
01100100110
ถ้าเราแปลงจาก Binary เป็นเลขฐาน10 เพื่อจะได้เอาไปดูใน BIP39 Word List เราจะได้ลำดับที่ 806 อย่างลืม +1 เนื่องจาก Binary เริ่มจาก 0 เพราะฉะนั้นคำในลำดับที่ 807 คือคำว่า gospel ถ้าใครทำได้อย่างนี้แล้วถือว่าคุณคำนวน Check Sum เป็นแล้ว
ในขึ้นตอนการแปลงเลขฐาน 16 เป็น เลขฐาน 10 ถ้าในใช้คำสั่งเป็นสามารถใช้แบบนี้ได้เลยนะครับ
|
เราใช้เหรียญหรือลูกเต๋าสุ่ม Seed Word ได้อย่างไร
หลักการง่ายๆ ครับ จริงๆ เราต้องการแค่สุ่มตัวเลข 0 หรือ 1 มาให้ได้ 256 หลัก ถ้าคุณหาอะไรก็ได้มาสุ่มแล้วคุณกำหนดกฎได้ว่าการสุ่มที่ได้ผลแบบนี้เท่ากับ 0 ได้ผลแบบนี้เท่ากับ 1 ก็ถือว่าใช้ได้แล้วครับ ในการทดลองผม ทดลองใช้เหรียญทั้งหมด 11 เหรียญครับผมก็จะสุ่มทั้งหมด 24 ครั้ง โดยครั้งสุดท้ายผมสุ่มแค่ 3bits พอ ผลลัพท์ที่ผมสุ่มได้เป็นตามนี้เลยครับ
โดยผมกำหนดว่าถ้าหัวให้เป็น 1 ถ้าก้อยให้เป็น 0 ส่วนถ้าใครใช้ลูกเต๋าคุณอาจต้องตั้งกฏว่า 1-3 เป็นต่ำเท่ากับ 0 และ 4-6 = สูงเป็น 1 คุณมีเหรียญ หรือลูกเต๋ากี่ลูกก็คำนวนเอาทำยังไงก็ได้ต้องได้ 256bits สมมุติว่าคุณมีเหรียญ 256 เหรียญคุณสามารถสุ่มได้ในคราวเดียวของการสุ่มได้เลยนะครับ
เอา Raw Binary 256bits มาคำนวน Check Sum
หลังจากที่เราสุ่มแล้วเช่นเดิมครับ เราเอาเลขพวกนั้นมาเรียงกันโดยไม่ให้มีช่องว่าง เราจะได้ Raw Binary 256bits มาคำนวน Check Sum รูปร่างหน้าตาเป็นแบบนี้ครับ
0011111100110100100000101100010011111001101001010100001100101111001011100000101000100100111100110001001100000010001001110100010010000100110010111001111010100011111000110011010000100010110111100111001010001101101011011001001101100100001000000010100110110001
หลังจากนั้นต้องเอาไป Run คำสั่งใน Command Line
#echo 0011111100110100100000101100010011111001101001010100001100101111001011100000101000100100111100110001001100000010001001110100010010000100110010111001111010100011111000110011010000100010110111100111001010001101101011011001001101100100001000000010100110110001 | shasum -a 256 -0 |
ผล Check Sum ที่ได้คือ
39d987b42f78626a3020e0a3a0d1354509d14268cf6bad84cddf4233dd8dd664 ^- |
เองสองหลักแรกของ Check Sum มาคำนวนโดยแปลจากฐาน 16 เป็น ฐาน 2
3=0011 9=1001 |
เอาไปรวมกับสามตัวสุดท้ายใน Raw Binary เราจะได้คำสุดท้ายแบบนี้นะครับ
00100111001 |
เอา Binary ที่ได้มาหาคำใน BIP39 Word List เพื่อจด
No. |
Binary Code |
Decimal |
BIP Index (+1) |
Seed Word |
1 |
00111111001 |
505 |
506 |
dish |
2 |
10100100000 |
1312 |
1313 |
piano |
3 |
10110001001 |
1417 |
1418 |
raise |
4 |
11110011010 |
1946 |
1947 |
viable |
5 |
01010100001 |
673 |
674 |
feature |
6 |
10010111100 |
1212 |
1213 |
nurse |
7 |
10111000001 |
1473 |
1474 |
return |
8 |
01000100100 |
548 |
549 |
duty |
9 |
11110011000 |
1944 |
1945 |
vessel |
10 |
10011000000 |
1216 |
1217 |
object |
11 |
10001001110 |
1182 |
1183 |
mean |
12 |
10001001000 |
1096 |
1097 |
math |
13 |
01001100101 |
613 |
614 |
erosion |
14 |
11001111010 |
1658 |
1659 |
soon |
15 |
10001111100 |
1148 |
1149 |
moon |
16 |
01100110100 |
820 |
821 |
grief |
17 |
00100010110 |
278 |
279 |
carpet |
18 |
11110011100 |
1948 |
1949 |
vicious |
19 |
10100011011 |
1307 |
1308 |
pet |
20 |
01011011001 |
729 |
730 |
forest |
21 |
00110110010 |
434 |
435 |
curve |
22 |
00010000000 |
128 |
129 |
avoid |
23 |
10100110110 |
1334 |
1335 |
plug |
24 |
00100111001 |
313 |
314 |
cheese |
Seed Phrase ที่ผมสุ่มด้วยเหรียญ 24 คำจะเป็นดังนี้ครับ
dish piano raise viable feature nurse return duty vessel object mean math erosion soon moon grief carpet vicious pet forest curve avoid plug cheese
บทสรุปการสุ่ม Seed Phrase เอง
ในการสุ่ม Seed Phrase เองถ้าเราสุ่มผิด กระเป๋าจะไม่ยอมให้เรา Import เข้าไปนะครับ มันจะตรวจสอบก่อน และเราเองก็มีเครื่องมือในการตรวจสอบด้วย เราสามารถใช้เครื่องมือนี้ในการตรวจสอบก็ได้ครับ ถ้าคำนวนผิดมันจะแจ้งว่า Seed Phrase ไม่ถูก ผมแนะนำให้ Download Software มาที่เครื่องนะครับ แล้วก็ระหว่างทำให้ปิด Internet ด้วยนะครับ
อีกเรื่องที่ต้องระวังเลยคือการ Run คำสั่ง ใน Shell มันจะมี History เก็บไว้ อย่าลืมเคลียร์ History ด้วยนะครับด้วยคำสั่ง
#rm ~/.bash_history
สำหรับผมบน Mac มันจะเป็น zsh
#rm ~/.zsh_history
การสุ่มเองก็มีโอกาสทิ้งทำซ้ำได้นะครับ ระมัดระวังเรื่องนี้ให้ดีๆ วิธีการก็คือ เลือกมาทั้งหมด 23 คำ ส่วนคำที่ 24 สุ่มมาแค่ 3bits ก็พอ แล้วก็มาคำนวน Check Sum ซึ่งผมมาคิดดูแล้ว เผลอๆ สร้างผ่าน hardware wallet อาจง่ายกว่า หรืออาจปลอดภัยกว่า เพราะถ้าเราไม่สุ่มแบบ สุ่มจริงๆ แล้วเราไปเลือกคำที่เอามาเรียงกันแล้วอ่านง่าย อาจมีความเสี่ยงนะครับ เพราะมันอาจสุ่มเพื่อทำซ้ำได้ ผมแนะนำให้สุ่มแบบ โยนจริงๆ ไม่ใช่เราไปเลือกคำเอานะครับ หวังว่าบทความนี้น่าจะทำให้ทุกท่านเข้าใจมากยิ่งขึ้นกับเรื่อง Seed Phrase นะครับ ถ้าใครงง อาจดู VDO นี้เพื่อให้เห็นภาพจากการ Random Seed Word เอง