วิธีสร้างกระเป๋าเก็บ Bitcoin แบบเลือกคำมาสร้าง Seed Phrase เอง

วิธีสร้างกระเป๋าเก็บ Bitcoin แบบเลือกคำมาสร้าง Seed Phrase เอง

ปกติเวลาเราจะสร้างกระเป๋าสำหรับเก็บ 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

6=0110

ท่านสามารถลองใช้เครื่องมือนี้ในการแปลงดูได้ครับ (เครื่องมือแปลง Hex เป็น Binary

ดังนั้นเราจะรู้คำสุดท้ายแล้วนะครับว่าคือคำว่าอะไร โดยคำ 3bits จากคำที่ 24 มาต่อกับ 8bits ที่เราเพิ่งได้มาจาก การแปลงเมื่อสักครู่ เราก็จะได้


01100100110

ถ้าเราแปลงจาก Binary เป็นเลขฐาน10 เพื่อจะได้เอาไปดูใน BIP39 Word List เราจะได้ลำดับที่ 806 อย่างลืม +1 เนื่องจาก Binary เริ่มจาก 0 เพราะฉะนั้นคำในลำดับที่  807 คือคำว่า gospel ถ้าใครทำได้อย่างนี้แล้วถือว่าคุณคำนวน Check Sum เป็นแล้ว

ในขึ้นตอนการแปลงเลขฐาน 16 เป็น เลขฐาน 10 ถ้าในใช้คำสั่งเป็นสามารถใช้แบบนี้ได้เลยนะครับ

#echo "$((2#01100100110))"

=806 

=806+1

=807

= gospel

เราใช้เหรียญหรือลูกเต๋าสุ่ม 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 เอง

กลับไปยังบล็อก

แสดงความคิดเห็น

โปรดทราบว่าความคิดเห็นจะต้องได้รับการอนุมัติก่อนที่จะได้รับการเผยแพร่