แปลง Flash drive เป็น Bitcoin Cold Wallet ด้วย Tails OS + Electrum

เนื้อหานี้ ผมจะทำขั้นตอนต่างๆ ตั้งแต่แปลง flash drive ธรรมดา เพื่อให้เป็น Bitcoin Cold Wallet ทุกขั้นตอน รวมทั้งเทคนิคพิเศษเพื่อสร้างความปลอดภัยให้มากขึ้น สำหรับการเก็บ Bitcoin แบบยาวๆ (เรียกว่า cold wallet) โดยเป็นการทำจริงทุกๆขั้นตอน และมีการโอนทุก Transaction จริง On chain เลย เพื่อให้มั่นใจว่ากระบวนการทั้งหมด สามารถเกิดขึ้นได้จริง

โดยสรุป ของกระบวนการทั้งหมด จะมีลำดับตามนี้ครับ

  • ติดตั้ง Tails OS บน Flash drive
  • Boot Tails OS บน notebook/pc เพื่อรัน Tails OS แบบ Offline mode (ไม่จำเป็นต้องเชื่อมต่อ internet เลย แม้แต่ครั้งเดียว)
  • (ครั้งแรก) Generate seed word ด้วย program Electrum ที่มาพร้อมกับ Tails OS อยู่แล้ว, (ครั้งต่อๆไป) Import seed word เข้า program Electrum
  • สร้าง Master Key (zpub) เพื่อให้ device อื่นๆ หรือ Program อื่นๆ จากเครื่องอื่นที่ต่อ internet ได้ นำไปใช้เป็น Watch only address และ สร้าง transaction กับ Broadcast (แต่ sign transaction ไม่ได้ ต้องให้ electrum เป็นคน sign transaction ให้)
  • รับโอน
  • โอนออก โดยส่งให้ Cold Wallet เป็นคนลงนามธุรกรรม (sign transaction) และ ส่งกลับให้ ไป Broadcast

ทั้งหมดนี้ ก็จะครบทุกกระบวนการที่เราสามารถทำได้แล้ว ในการใช้งาน Cold Wallet ตามปกติ ซึ่งแน่นอน ดูเหมือนว่ามันจะยุ่งยาก แต่เราต้องไม่ลืมว่า เราเน้นที่เรื่องความปลอดภัยในระดับสูง แม้ว่าดูว่ามันจะยุ่งยาก แต่ถ้าแลกกับความปลอดภัย ก็น่าเชื่อได้ว่าจะคุ้มค่าเมื่อเทียบกับทรัพย์สินที่เราจัดเก็บอย่างแน่นอน

แต่ก่อนจะไปลงรายละเอียด ผมคิดว่า เราควรใช้พื้นที่ตรงนี้ มาทำความเข้าใจให้ตรงกันก่อนจะดีกว่า เพื่อให้เข้าใจในรายละเอียดที่เพิ่มมากขึ้น

ทำแบบนี้แตกต่างกับ Hardware Wallet อย่างไร

hardware wallet คือตัวที่สร้าง seed words มา และไม่อนุญาตให้ software ใดๆ เข้าถึง seed words ที่เก็บอยู่ภายในได้ เราทำได้เพียงจดออกมาได้เพียงเท่านั้น และส่วนใหญ่จะบรรจุใน secure chip ซึ่งหมายความว่า การขโมย hardware wallet ไปจากเรา ก็ยังจำเป็นต้องใช้เครื่องมือพิเศษ และ เทคนิคขั้นสูงมาก ในการพยายามดึง seed words ออกมา โดยที่เราไม่ต้องป้อน pin ให้ แต่ว่าล่าสุด Ledger ก็ทำให้ความจริงข้อนี้เริ่มเปลี่ยนแปลงไป เนื่องจากใน Ledger Live รุ่นหลังๆ ของปี 2023 เป็นต้นมา มี Feature ในการทำ recovery seed words ได้ โดยใช้กระบวนการ เข้ารหัส seed words และแบ่งส่วน จากนั้นส่งออกไปเก็บ 3rd party จำนวนหลายเจ้า เพื่อให้เรา recovery กลับมาได้ในภายหลัง นั่นหมายความได้ว่า มี software ที่ถูกเขียนเพิ่มเติมเข้ามา เพื่อเข้าถึง seed words และ เข้ารหัส จากนั้น ส่งออกมาจากตัว hardware ได้แล้ว (ledger ออกมาบอกว่า ยังปลอดภัยเหมือนเดิม หากเราไม่เปิดใช้งาน feature ดังกล่าว แต่ทำไมเราต้องเชื่อใจกันล่ะ?)

ซึ่งวิธีที่เราจะทำกันนี้ แตกต่างกันตรงที่ flash drive ธรรมดา รวมกับ Tails OS ที่สร้างขึ้นมาแบบเน้นความ Privacy ของข้อมูล และ เราจะไม่ต่อ internet เลย รวมทั้ง ไม่เก็บข้อมูลอะไรเอาไว้ใน Tails OS ด้วย หมายความว่า ไม่ได้พึ่งพิงในอุปกรณ์อะไรใดๆเลย แม้กระทั่ง flash drive เองก็ตาม เพราะเมื่อเราได้ seed words จากการสร้างครั้งแรกออกมาแล้ว เรา full format ไปเลยก็ได้ (จริงๆ ก็ไม่จำเป็น เพราะ default เป็นแบบ ไม่เก็บข้อมูลอยู่แล้ว คือเปิดใหม่ ก็เหมือนได้เครื่องใหม่ทุกครั้ง) ดังนั้น เราจะตัดความเชื่อใจในอุปกรณ์ และ software ทั้งหมด ออกไป (จริงๆ ก็ยังต้องเชื่อ Electrum ซึ่งเป็น Open source อ่ะนะ) และเก็บไว้แต่เพียง Seed words เท่านั้น ซึ่งนั่นคือหัวใจที่สำคัญที่สุด และทุกครั้งที่เราจะใช้งาน เราก็แค่ ติดตั้ง Tails OS บน flash drive ใหม่ (หรือเอาของเดิมมาใช้ได้เลย) โดยไม่จำเป็นต้องต่อ internet อะไรเลย แม้ว่า Tails OS จะติด malware หรือมี key logger มาก็ตาม หากว่าเราไม่ต่อ internet ก็ไม่มีทางที่จะส่งข้อมูลอะไรออกจาก machine ที่เรากำลังใช้งานได้อย่างแน่นอน

ปลอดภัยที่สุดมั้ย?

ต้องทำความเข้าใจกันก่อน ว่าไม่มี Solution ใดๆ หรือวิธีการไหน ที่ปลอดภัย “ที่สุด” เพราะว่า การเลือกใช้ แต่ละวิธี ต่างก็มีจุดแข็ง และจุดอ่อน ที่แตกต่างกันไป สำหรับวิธีนี้ ผมแยกจุดแข็ง จุดอ่อน ออกมาได้เป็นดังนี้

จุดแข็ง

  • ลงทุนต่ำ : ปัจจุบัน Flash drive ขนาด 8 GB (ขั้นต่ำที่จำเป็นต่อ Tails OS) ราคาเพียง 69 บาทเท่านั้น (อ้างอิงราคา Sandisk Cruzer blads)
  • ไม่ต้องเชื่อใจผู้ผลิต hardware wallet : เพราะไม่มีใครล่วงรู้ว่าเราจะเอา Linux มาทำเป็น Hardware wallet แบบนี้
  • ไม่มีการรั่วไหลของข้อมูล : เพราะเราไม่ต่อ internet (แต่ก็มีประเด็น ที่มีคนค้านว่า สามารถ hack ระดับ bios ได้นะ แต่นั่นก็คือแบบ…… you are the very important target ถ้าเป็นแบบนั้น อุ้มไปรีดง่ายกว่าแหล่ะ)
  • ไม่มีการบันทึกข้อมูลการใช้งาน : Tails OS default คือ ไม่จัดเก็บข้อมูลการใช้อะไรเลย reboot แล้ว เหมือนได้เครื่องใหม่ทุกครั้ง
  • ไม่สามารถถูก hack ได้ : ก็ในเมื่อ ข้อมูลไม่ได้เก็บอะไรไว้ ถ้าเค้าจะ hack ได้ ก็คือ hack กระดาษที่เราจด seed words เป็นทางเดียวแล้วล่ะ
  • เปิดใช้งาน passphrase ได้ : สิ่งนี้จะทำให้มีความปลอดภัยมากขึ้นไปอีก
  • แลกเปลี่ยนข้อมูลแบบ Air gap : ไม่มีการเสียบสาย, ไม่มีการใช้เครือข่ายใดๆ ในการแลกเปลี่ยนข้อมูลระหว่างกัน มีเพียงอากาศ (QR Code) ที่กั้นระหว่างการแลกเปลี่ยนข้อมูลระหว่างกันเท่านั้น เพราะการดักจับข้อมูลระหว่างสาย หรือ network เกิดขึ้นได้โดยที่เราไม่รู้ตัวเลย
  • เป็น Cold wallet ได้ดีมากกว่า Hot Wallet : เพราะการเข้าถึงที่ยากกว่า และมีความปลอดภัยที่สูงกว่า จึงเหมาะกับการใช้งานเป็น Cold Wallet เก็บยาวๆ นานๆ ถึงจะเกิดธุรกรรมโอนออกทีนึง แต่รับโอนบ่อยๆได้ เพราะ การรับโอน แค่ส่ง address ก็โอนเข้าได้ทันที ไม่จำเป็นต้อง sign transaction แต่อย่างใด

จุดอ่อน

  • ต้องเชื่อใน Electrum : เพราะ seed words ที่เราจะได้ออกมาเป็น Electrum standards ซึ่งมีความแตกต่างจาก standard BIP39 ที่ Wallet ส่วนใหญ่ใช้งานกัน แต่ว่าเรื่องนี้ ไม่ใช่ความผิดพลาดของ Electrum แต่อย่างใด เรื่องมันยาว แต่สรุปสั้นๆ คือ Electrum คือผู้นำในการสร้าง HD Wallet มาก่อนที่จะมี BIP39 และ Electrum เอง ก็ยังช่วยเหลือการ implement BIP39 อีกด้วย
  • ยังอิงกับ seed words ชุดเดียว : เหมือน hardware wallet ที่จะมี seed words ชุดเดียว เพื่อทำธุรกรรมเท่านั้น แต่ว่านี่ก็ถือว่าได้มาตรฐานเพียงพอ และ ปลอดภัยเพียงพอแล้วด้วยเช่นกัน (ท่ายากกว่านี้คือการทำ multi sig wallet ซึ่งจะยากทั้งสร้าง และ การใช้งานเลยทีเดียว)
  • ยุ่งยาก : ผมเคยได้ยินคำกล่าวว่า ความสะดวกจะแปรผกผันกับความปลอดภัยเสมอ คือ ยิ่งใช้งาน ง่าย สะดวก ความปลอดภัยจะยิ่งลดต่ำลง วิธีนี้ เลือกที่จะยืนฝั่งความปลอดภัยเป็นเรื่องหลัก ความสะดวกเป็นเรื่องรอง
  • ขั้นตอนเยอะ : กว่าจะทำ transaction ได้ครั้งนึง ใช้เวลาค่อนข้างเยอะมาก เพราะมีหลายขั้นตอน ยิ่งถ้าต้องติดตั้ง Tails OS ใหม่ทุกครั้ง บอกเลย มีอย่างน้อยครึ่งชั่วโมงแน่นอน กว่าที่เราจะ transfer ออกได้ แต่ว่า นั่นก็เป็นสิ่งที่ควรจะเป็นสำหรับ Cold Wallet อยู่แล้ว เพราะถ้าเราทำ transaction ได้ง่ายมากแปลว่าเราแลกความปลอดภัยออกไปในความสะดวกนั้นแล้ว
  • ต้องมี notebook / pc หนึ่งเครื่อง : เพราะ Tails OS จะรันบน notebook / pc ดังนั้น ถ้าเราไม่มี หรือ เข้าไม่ถึงอุปกรณ์นี้ จะไม่สามารถใช้งานได้ แต่ในประเด็นนี้ ถ้าหน้าสิ่วหน้าขวานสุดๆแล้ว เราก็ยังสามารถนำเอา seed words ที่เรามีอยู่นั้น ไปกรอกใส่ Electrum บนมือถือได้ เพื่อให้ทำงานต่อเนื่องได้เลย แต่การทำแบบนี้ seed words นั้นก็มีความเป็นไปได้ว่า จะไม่ปลอดภัยเหมือนอย่างที่เคยเป็นมาแล้ว แต่ก็เพื่อให้เข้าใจว่า มันจะไม่ถูก locked in ใน Electrum pc/notebook แต่เพียงอย่างเดียว

ถ้าเข้าใจทั้งหมดแล้ว และ พร้อมแล้ว เราไปลุยกันครับ

ทำความรู้จัก Tails OS

Tails OS ถูกออกแบบมาเพื่อใช้เป็นระบบปฏิบัติการแบบ Live System สามารถบูตจาก USB และทำงานโดยไม่จำเป็นต้องติดตั้งหรือทิ้งร่องรอยไว้บนคอมพิวเตอร์ที่ใช้งาน เมื่อ Boot เครื่องระบบจะอ่าน OS จาก Flash drive ของเรา ขึ้นไปเก็บไว้ใน Ram และสร้างพื้นที่ใช้งานต่างๆบน Ram เท่านั้น อีกทั้งเมื่อ shutdown เครื่อง จะมีกระบวนการเข้าไปลบข้อมูลใน Ram อีกด้วย เพื่อให้มั่นใจว่าจะไม่ทิ้งร่องรอยอะไรเอาไว้่

ทุกครั้งที่ reboot เครื่อง ก็จะได้ OS ใหม่ ที่พึ่งเปิดใช้งานครั้งแรกทุกครั้ง (เพราะไม่จำค่าอะไรเลย) จริงอยู่ว่าเราสามารถตั้งให้ Tails OS จำค่าได้ (Persistence storage) แต่ในเนื้อหานี้เราจะไม่ทำแบบนั้น เพื่อความปลอดภัยที่สูงที่สุดนั่นเอง

สิ่งของที่ต้องเตรียม

  • Flash drive ขนาด 8 GB ขึ้นไป ที่ไม่ได้ใช้งานอะไร เพราะจะถูกเขียนทับด้วย Tails OS ข้อแนะนำคือ ควรเป็น Flash drive ที่มีความเร็วก็จะดี จะได้ boot ไม่ช้ามาก
  • PC/Notebook สำหรับ Boot Tails OS ซึ่งควรจะมีกล้อง เพราะต้องใช้ถ่ายภาพ QR Code ในตอนที่ Sign transaction แต่ถ้าไม่มีกล้อง เราสามารถ load เป็นไฟล์เข้าไปก็ได้
  • กระดาษ สำหรับจด Seed words เพื่อเก็บยาวๆ + ปากกา ที่ไม่สามารถลบเลือนด้วยความร้อนได้ (อันนี้ต้องระวัง) หรือเราจะจดเอาไว้ชั่วคราว ไปตอกใส่แผ่นเหล็กทีหลังก็ได้
  • มือถือ Android / iOS ที่ติดตั้ง Electrum wallet เอาไว้ ในเนื้อหานี้ เราจะกำหนดให้มือถือ เป็น Device ที่เชื่อมต่อ internet และ เปิด Wallet ดูแบบ Watch only (ไม่สามารถ sign transaction ได้ด้วยตัวเอง) จะเป็นมือถือที่ใช้ประจำก็ได้ เพราะว่าไม่สามารถสั่งโอนออกได้ จึงมีความปลอดภัยแต่ถ้าใครจะใช้เป็น PC/Notebook อีกเครื่องที่เชื่อมต่อ internet โดยใช้ Electrum เป็น Watch only ก็ได้เช่นกัน คือใช้เพื่อเป็นตัวแทนเครื่องที่ต่อ internet เท่านั้น

ติดตั้ง Tails OS บน flash drive

ทำตามนี้ได้เลยครับ https://tails.net/install/ ผมไม่ขอเอามาลงซ้ำ เนื่องจากเค้าเขียนเอาไว้ดี ละเอียดแล้ว และเผื่อว่ามี update ใดๆก็จะได้ update ใหม่ล่าสุดทันกันเสมอด้วย

โดยสรุปขั้นต้น (สำหรับ Windows) จะเป็นดังนี้

  • download Tails
  • Verify file ที่ download มา ว่าถูกต้อง ครบถ้วน ไม่มีของแถม หรือ ไม่โดนดัดแปลงอะไร
  • download balenaEtcher เพื่อใช้ flash Tails สู่ flash drive
  • ติดตั้ง Tails เข้าสู่ flash drive โดยใช้โปรแกรม balenaEtcher
  • เอา Flash drive ไปเสียบ USB แล้วสั่งให้ pc / notebook boot ด้วย USB ที่มี Tails ติดตั้งเอาไว้

ขออธิบายเพิ่มเติมนิดนึง ตรงนี้ เผื่อคนที่อาจจะไม่ค่อยมีประสบการณ์ให้ได้เข้าใจมากขึ้น

การที่เรา ติดตั้ง Tails OS ลง flash drive แล้วเนี่ย Flash drive ตัวนั้นจะเป็น Bootable device ก็คือ เราสามารถเอา USB ตัวนี้ไปเสียบ pc / notebook แล้วสั่ง boot จาก flash drive ขึ้นมาเป็น Linux มี program อะไรต่างๆพร้อมใช้งาน ตามที่ Tails OS เค้าติดตั้งมาให้เราตั้งแต่แรก โดยที่เราไม่ต้องทำอะไรเพิ่มเติมอีก เรียกว่า Linux Live

แต่ว่า ความยากจะอยู่ขั้นตอนการสั่งให้เครื่องเรา boot ด้วย USB flash drive นี่แหล่ะ ที่แต่ละเครื่อง แต่ละยี่ห้อ จะมีท่าทางที่แตกต่างกัน แต่โดยหลักก็คือ เสียบ USB > restart เครื่องตามปกติ > ตอนที่เครื่องเริ่มต้น จะแสดงยี่ห้อ pc / notebook ให้กด ปุ่มบน keyboard ให้ทัน ซึ่งแต่ละยี่ห้อ จะใช้ปุ่มแตกต่างกัน แต่โดยทั่วไป จะเป็นปุ่ม ESC หรือ F8 หรีอ F12 ต้องลองดู ว่ากดปุ่มไหนแล้วเข้าไปสู่ Boot menu กดซ้ำๆ ไปถ้าไม่ได้แปลว่าปุ่มนั้นยังไม่ใช่

ถ้าเข้า Boot menu ได้ จะมีให้เราเลือกว่าเราจะ Boot windows (ตามเดิม) หรือว่า Boot ด้วย USB ตรงนี้ถึงจะ Boot จาก flash drive ได้

แต่ผมเจอล่าสุด Notebook Asus vivobook ที่ไม่เจอ USB boot แต่เราต้องเข้าไปใน Bios เพื่อไปสร้าง Boot device เพิ่มมาอีกตัวโดยให้ mapping กับ flash drive ตัวนี้ก่อน ถึงจะเจอใน Boot menu หลังจากที่กด ESC ตอน boot เครื่อง อันนี้ จะเป็นสิ่งที่แตกต่างกันไปในแต่ละเครื่อง ไม่มีสูตรสำเร็จหรือ ตายตัวเลย แนะนำให้ปรึกษาเพื่อนที่คุ้นเคยกับการติดตั้ง OS บน Computer มาเยอะๆ จะให้คำปรึกษาได้ดีที่สุด หรือ ง่ายสุด ภาวนาว่า เสียบ USB > restart > กด ESC แล้วมี boot menu และเจอ USB ที่เราเสียบไปให้ boot ได้เลย

และที่สำคัญ เมื่อ boot OS ขึ้นมาได้แล้ว ให้ disconnect network เลย ไม่ว่าจะเป็น สาย หรือ WiFi เราไม่จำเป็นต้องใช้เลย และจะทำให้ปลอดภัยได้มากขึ้นด้วย

เปิด Electrum

กด Activities แล้ว ค้น Electrum แล้วกดเปิด Program ได้เลย

เลือก Non persistence เพื่อแสดงความต้องการ “ไม่ให้เก็บข้อมูลอะไรใน Tails OS นี้” การทำแบบนี้ ข้อดีคือ flash drive นี้ใช้เสร็จแล้ว ทำหายได้ OS เสียหายได้ โดนขโมยได้ เพราะเราไม่ได้เก็บข้อมูลอะไรเอาไว้ในนี้เลย นอกจาก OS ที่พร้อมใช้ทุกครั้งที่ boot ขึ้นมา

เราสามารถตั้งให้ Tails OS เก็บข้อมูลก็ได้ แต่เราจะไม่ทำ เพราะจะเป็นการเพิ่มความเสี่ยงต่อการโดนขโมยและไปเจาะเอา seed words ของเราได้

กำหนดชื่อ wallet เราจะตั้งเป็นอะไรก็ได้ หรือใช้ default เลยก็ได้ ไม่มีความสำคัญ หรือ มีผลอะไรต่อการใช้งานครั้งนี้และครั้งต่อๆไปเลย เป็นเพียงชื่อไฟล์ wallet ที่เก็บในเครื่อง (จนกว่าจะ shutdown) เท่านั้น

สร้าง Wallet ใหม่

กิจกรรมนี้เราจะทำครั้งแรก ครั้งเดียวเท่านั้น เพราะครั้งอื่น หลังจากนี้ เราจะใช้การ import seed words แทน

เลือก Standard wallet ได้เลย

เลือก create new seed เพราะเราต้องการให้ generate seed ใหม่มาให้เรา

หน้าจอต่อไป ระบบจะแสดง seed words ทั้ง 12 คำออกมา ก็ให้เราเตรียม กระดาษ ปากกามาจด

ข้อสำคัญคือ ห้ามถ่ายรูป, ห้ามเก็บใน digital version ไม่ว่าจะที่ไหนก็ตาม, ถ้าเป็นไปได้ ต้องไม่มีสำเนาแบบ digital อื่นใดอีกเลย เพราะจะอันตรายมาก

ถึงขั้นตอนนี้ ผมขอแวะพูดคุย ทำความเข้าใจเรื่องนึงที่สำคัญก่อน เพราะมีคนเข้าใจผิดเยอะมากๆ นั่นก็คือ seed words ชุดที่เราเห็นนี้ เป็นมาตรฐานเฉพาะ ของ Electrum เท่านั้น อันนี้สำคัญมาก เพราะหลายคน เห็นว่าเป็น 12 words จากนั้น เอาไป restore ที่ wallet ตัวอื่น ที่ไม่ใช่ Electrum แล้วพบว่าเป็นกระเป๋าเปล่า เงินหาย address ไม่ตรงกัน ทั้งที่มั่นใจมากๆว่า จดมาอย่างถูกต้อง เรื่องนี้ต้อง note ให้ชัดเจน ว่าเป็น 12 words electrum standard เท่านั้นเลย จะมาอธิบายอีกที ว่าทำไม Electrum ถึงไม่ใช้ standard ปกติ ซึ่งเค้ามีเหตุผลที่ดี และก็เพื่อผู้ใช้งานเองด้วยครับ ตอนนี้จำไว้แค่ว่า seed words ชุดนี้คือ Electrum standard เท่านั้น

Electrum standard vs BIP39 standard

มีท่านผู้อ่านทักเข้ามา เพื่อให้อธิบายในเรื่องนี้โดยละเอียด ผมคิดว่าเป็นเรื่องที่สำคัญเรื่องนึง ที่ทุกท่านควรต้องทราบอย่างชัดเจน โดยเป็นการขยายความต่อจากย่อหน้าบนด้วยเลย

Seed words Electrum standard นี้ จะใช้งานได้กับ Electrum program เท่านั้น ไม่สามารถนำไปใช้งานกับกระเป๋า Wallet อื่นๆได้โดยส่วนใหญ่ (ที่ไม่รองรับ Electrum Standard) สาเหตุเพราะ Seed words ของ Electrum เค้ามีการใส่ Version เข้าไปด้วย เพื่อให้ Electrum detect และสามารถนำไปใช้สร้างกระเป๋าได้อย่างถูกต้อง ไม่ว่าเวลาจะผ่านไปนานเท่าไรก็ตาม

BIP39 standard นี่คือมาตรฐานที่เกิดขึ้นมาหลังจากที่ Electrum สร้าง standard ของตัวเองแล้วประมาณ 2 ปี แต่ว่าได้รับความนิยมอย่างแพร่หลายมากที่สุด ในปัจจุบัน ไม่ว่าจะเป็น Metamask, Rabby หรือกระเป๋า Wallet อะไรทุกยี่ห้อที่เราเคยได้ยินชื่อ เกือบ 100% ต่างใช้งานตาม BIP39 ทั้งหมด โดย BIP39 ได้ตัดเรื่องของ Version ตามที่ Electrum design เอาไว้ตั้งแต่แรกออกไป ซึ่งทำให้เกิดข้อกังวลว่า ถ้าวันนึง ในอนาคต มีการ upgrade word list ขึ้นมา จะส่งผลกระทบให้ Wallet เปิดกระเป๋าออกมาได้ผิดใบ เพราะความแตกต่างของคำ(ถูกใช้ระบุตำแหน่ง) ที่เปลี่ยนไป และ BIP39 standard ไม่มีกลไกในการตรวจสอบเรื่องนี้อีกด้วย ทำให้เกิดเป็น True negative คือ เปิดกระเป๋าขึ้นมาได้ แต่ว่าเป็นกระเป๋าว่างเปล่า

อย่างไรก็ดีเนื้อหานี้ ได้เลือกใช้ Electrum standard เพราะเราจะเชื่อมั่นว่า Electrum program จะยังคงเปิดกระเป๋าเราได้ใบเดิมเสมอ ไม่มีความผิดพลาด (ถ้าผิดพลาด ก็หา electrum version เก่ามาใช้งานได้เช่นกัน)

แต่ถ้าใครจะเปลี่ยนไปใช้ BIP39 standard สามารถสร้างได้ด้วยวิธีที่ที่ยากขึ้น (สำหรับการทำความเข้าใจขั้นสูง เพื่อให้เข้าใจกระบวนการได้มาของ Seed words แบบสุ่ม) และนำมาใช้ใน Electrum ได้ด้วยเช่นกัน ดังเนื้อหา การสร้าง Entropy เพื่อ Generate Seed ด้วยตนเอง ซึ่ง Electrum จะสามารถตรวจสอบ และบอกได้ในทันทีว่านี่คือ BIP39 standard โดยหากเรามีการสร้าง Seed มาจากที่อื่นแล้ว ให้ข้ามไปที่หัวข้อ Import seed words สำหรับการใช้ครั้งต่อๆไป ที่ด้านล่างได้เลย (ต้องใส่ใจกระบวนการสร้าง seed words ให้ดีๆ ให้มั่นใจว่ามีความปลอดภัยในกระบวนการสร้าง เพราะนี้คือจุดตั้งต้นของกระเป๋าเราทั้งหมด)

เทคนิคเพิ่มความปลอดภัยให้กระเป๋า

ในขั้นตอนนี้ เป็น Technique พิเศษ ที่จะเพิ่มความปลอดภัยให้กับกระเป๋าเพิ่มเติมอีก

12 คำ ปลอดภัยพอมั้ย?

12 คำ นั้น มีความปลอดภัยเพียงพอแล้ว สำหรับการใช้งาน ในทุกรูปแบบ เพราะด้วยกำลัง computer ที่มีในปัจจุบัน การสุ่ม 12 คำ เพื่อให้เจอ seed word ที่เราใช้งานนั้น เป็นไปได้ 1 ใน 204812 หรือ 5×1038 หรือ ประมาณ ครึ่งนึง ของจำนวน Atom ที่มีทั้งหมด ใน Galaxy ทางช้างเผือก ที่เราอาศัยอยู่ปัจจุบัน แต่แน่นอนว่า ถ้าเป็น 24 คำ ก็จะเป็น 1 ใน 2×1079 หรือ มีจำนวนที่มากกว่า จำนวน Atom ในจักรวาลเรา ที่มีอยู่ประมาณ 2×1067 atom นั่นเอง ดังนั้น 12 คำ ปลอดภัยเพียงพอแล้ว เพราะด้วยจำนวนขนาดนี้ เราต้องใช้เวลาเป็นพันปี กว่าที่ computer ปัจจุบัน จะสุ่มได้เจอ

อธิบายเพิ่มเติมว่า 12 seed words ที่เรากำลังจดเนี่ย โดยทั่วไป ที่สร้างจาก wallet อื่นที่ไม่ใช่ Electrum จะใช้งานตาม standard BIP39 ก็จะมี 12 คำกับ 24 คำ เหมือนกัน ซึ่งก็เป็นที่พูดคุยกันว่า 12 คำ เนี่ย ปลอดภัยเพียงพอมั้ย ยังไง และทำให้ Electrum สร้าง 24 คำได้มั้ย? ซึ่งจริงๆแล้ว ก็ทำได้ โดยต้องใช้ Command เพื่อสร้าง แต่ standard ที่สร้างมา จะเป็น BIP39 ไม่ใช่ Electrum standard ซึ่งอันนี้ต้องระวังสับสนให้ดีๆ ดังนั้น ใช้ 12 คำจาก Electrum ถือว่ามีความปลอดภัยเพียงพอแล้ว

เนื้อหาที่ซ่อนอยู่ จะเป็นเทคนิคเพื่อเพิ่มความปลอดภัยให้กับกระเป๋าของเรา และเทคนิคพิเศษ เพื่อแยกกระเป๋าออกมาทำเป็นกระเป๋าลับ

--------------------------------------------------------------

เนื้อหาพิเศษ ต้องแลกด้วย Reach เท่านั้น

เนื้อหาส่วนนี้เป็นเนื้อหาพิเศษ จะต้องใช้ reach ในการเข้าอ่านเนื้อหาจุดนี้ เมื่อแลกด้วย reach แล้วจะสามารถอ่านเนื้อหาที่ซ่อนอยู่เพิ่มเติมได้ หากมี reach แล้วกรุณา login ก่อน อ่านรายละเอียดเพิ่มเติมเรื่อง Reach

ขั้นตอนสุดท้ายของการสร้าง ก็คือ กำหนดรหัสผ่าน รหัสนี้ จะใช้ตอนที่เปิด application (หากยังไม่ reboot) และ sign transaction เท่านั้น และใช้เพื่อการ encrypt file ของ wallet เราใน disk ด้วย จะไม่ตั้งก็ได้ เพราะเราจะไม่ได้เก็บอะไรลง disk อยู่แล้ว (หลังจากการ reboot)

Recheck seed words by Address

มาถึงขั้นตอนนี้ ผมแถมพิเศษให้ แต่จริงๆ ควรทำ เพื่อความปลอดภัย ว่าเราได้จด seed words ได้ถูกต้องจริง โดยเราจะทดสอบ recover seed words กัน และเทียบกับ Address ว่าถูกต้องตรงกัน

เราต้องจด address เอาไว้ก่อน เพื่อใช้เทียบ โดยการเปิดให้ show address โดยไปที่เมนู View > Show addresses

จากนั้นเราก็ไปที่ tab Addresses แล้วจด address อันแรกเอาไว้ อันเดียวพอ จดเต็มๆให้ครบทุกตัวอักษรไปเลย ถ้าขี้เกียจ อันนี้ถ่ายรูปได้ ไม่ว่ากัน ไม่มีผลอะไร เพราะยังไงเป็น address ที่ใช้รับ Bitcoin อยู่แล้ว (เป็นข้อมูลที่เปิดเผยได้)

จากนั้น ปิด Program และ restart เครื่องเลย เพราะการ reboot จะเป็นการ clean file ต่างๆที่เคยสร้างเอาไว้ออกไปทั้งหมด ดังนั้น หลังจากที่เราเปิดเครื่องมา เราจะมา import seed words และตรวจสอบ address กันอีกครั้งนึง ต้องได้ตรงกัน ถ้าไม่ตรง แปลว่ามีบางอย่างที่จดมาผิด หรือทำอะไรผิดไปอย่างแน่นอน

ข้อแนะนำอีกอย่างก็คือ จด address อันแรกเอาไว้คู่กับ seed words เก็บเอาไว้เลยก็ดี ถ้าจดหมดไม่ไหว จดหน้า 6 หลัง 6 ก็พอ เพื่อให้มั่นใจว่าเราจะเปิดมาเจอกระเป๋าเดิม หรือใช้เช็คได้ว่ากระเป๋าต้องมี address อะไร

Import seed words สำหรับการใช้ครั้งต่อๆไป

เมื่อเรามี Seed words ในมือแล้ว ในการ boot Tails OS ครั้งต่อๆไป ไม่ว่าจะเป็นการติดตั้ง flash drive ตัวใหม่ หรือตัวเดิมก็ตาม จะไม่แตกต่างกัน เพราะว่า Tails OS ไม่ได้เก็บข้อมูลอะไรเอาไว้ ดังนั้น เราจะเหมือนได้เครื่องใหม่ ไม่เคยใช้งานทุกครั้ง และ Electrum เอง ก็มีความสามารถในการตรวจสอบ Seed words version เพื่อ เลือกสร้างกระเป๋าให้เราได้อย่างถูกต้อง อันนี้ คือข้อดี และเหตุผลของ Seed words ที่สร้างมาจาก Electrum ทำไมจึงมี standard เป็นของตัวเอง แต่ว่าข้อเสียก็คือเอาไปใช้กับ Wallet อื่นที่อิงมาตรฐาน BIP39 ไม่ได้ ดังนั้น แม้ว่าเวลาผ่านไป Electrum ที่พัฒนาไปมากขึ้น แต่เราจะยัง Import seed words ที่สร้างด้วย Electrum มาเปิดกระเป๋าเจอใบเดิมได้อย่างแน่นอน (อย่างน้อยก็ตามที่ Electrum เค้าคิด และ สร้าง standard ให้ตัวเองเอาไว้ จากอดีต จนถึงปัจจุบัน)

เมื่อเราเปิด Tails OS ใหม่ อย่าลืมสิ่งแรก คือ ตัดการเชื่อมต่อ internet ไม่ว่าจะเป็นสาย หรือ WiFi ก็ตาม เพื่อความปลอดภัยในการใช้งานมากที่สุด และมั่นใจได้ว่า จะไม่มีข้อมูลอะไร เล็ดลอดออกไปจาก Tails OS ได้

เปิด Electrum ด้วยการกด Activities ซ้ายบน ค้น Electrum และเปิดขึ้นมาในแบบที่ไม่ใช้ Persistence storage (ดูที่เนื้อหาตอนต้นซ้ำอีกทีได้)

หน้าแรก ไม่ต้องเปลี่ยนอะไรก็ได้ ไม่จำเป็น กด next ได้เลย หน้าจอนี้คือการสร้าง file wallet ใหม่เท่านั้น เพราะไม่เคยมีมาก่อน (หายไปจากการ reboot ล่าสุด)

เลือกแบบ standard wallet เพราะเราสร้าง seed ไว้จาก standard wallet

ตรงนี้เราต้องเลือก I already have a seed เพื่อบอกว่า เราจะทำการ restore จาก seed ที่เรามีในมือแล้วนะ แล้วเราก็เอา seed words มากรอกเข้าไปเลย และตรงนี้ สำคัญมาก ถ้าใครเปิดใช้ custom words เอาไว้ ในตอนที่สร้างกระเป๋า อย่าลืมกดเลือก option Extend seed with custom words ด้วย ไม่อย่างนั้น จะได้คนละ address ทันที เว้นแต่ว่า ต้องการสร้าง Decoy wallet ตามที่ได้อธิบายไว้ในเนื้อหาด้านบนแล้ว

เมื่อเข้ามาได้แล้ว สิ่งแรกที่ต้องตรวจสอบก็คือ Address โดยกด View > Show Addresses แล้วเราก็ตรวจสอบเลข Address อันแรกก็เพียงพอ เพราะถ้ามีแม้แต่สิ่งเดียว ที่เกี่ยวข้องกับ seed หรือ custom words ที่เปลี่ยนแปลงไป จะทำให้ได้กระเป๋าอื่น ที่แตกต่างกันโดยสิ้นเชิงทันที ไม่มีโอกาสที่จะผิดพลาดแค่บางตัวอย่างแน่นอน

นำกระเป๋าไปใช้รับ Bitcoin

ตอนนี้กระเป๋าเราพร้อมใช้งานแล้ว ใน Electrum Offline เราสามารถเอา Address ไปใช้งานเพื่อรับ Bitcoin ได้ทันที แต่ว่าเนื้อหานี้ ผมจะนำเอามือถือ มา copy เอา address ทั้งหมด ออกไปใช้ในการยิง QR เพียงครั้งเดียว ซึ่งมือถือเครื่องนั้นต่อ internet ได้

ให้นำมือถือ ที่ติดตั้ง Electrum เอาไว้แล้ว ให้เปิด Electrum ขึ้นมา

เมื่อเราพบหน้า New Wallet ให้เราตั้งชื่อ โดยขอให้มีอักษรพิเศษหนึ่งตัว เพื่อให้สร้างwalletได้

จากนั้นให้เลือก Standard Wallet เพราะเราสร้างกระเป๋ามาจาก Standard wallet

จากนั้นเราต้องเลือก Use a master key เนื่องจาก master key จะเป็นคีย์หลัก ที่ใช้สร้างเลขกระเป๋าได้ทุกใบ ที่เกิดมาจาก Seed words เดียวกัน โดยที่เราไม่ต้องเอา Seed words มาใส่ในมือถือเลย หมายความว่า master key นี้เราจะสามารถสร้างได้แต่เลขกระเป๋า เหมือนตอนที่เราสร้างใน Metamask / Rabby แต่ว่าจะไม่สามารถใช้สร้าง Private key เพื่อการ sign transaction ได้ เพื่อความปลอดภัยนั่นเอง

ในหน้าจอต่อไป ให้เรากดยิง QR แล้วเราจะไปเปิด QR Code จากหน้า Electrum offline กัน

กลับไปที่ PC/notebook ที่รัน Electrum Offline (ผมขอเรียกว่า Electrum offline ต่อจากนี้ เพื่อให้สื่อถึง Electrum ที่ไม่ได้เชื่อมต่อ internet และ ถือ seed words อยู่) เราจะมากดแสดง Master key กัน

กดที่เมนู Wallet > Information

จากนั้นที่มุมขวาล่างของ Master Public key ให้เรากดเพื่อแสดง QR Code

เรากลับไปที่ Electrum บนมือถือ เราก็ scan QR ตัวนี้เลย หรือ อีกวิธีคือ การพิมพ์ zpub…. ลงไปยาวๆก็ได้เหมือนกัน แต่มันจะยาวมากเลยทีเดียว scan เอาเถอะง่ายกว่า แถมพิมพ์ผิด ก็อาจจะใช้งานไม่ได้อีกต่างหาก เมื่อเสร็จสิ้นขั้นตอนนี้ เราจะได้กระเป๋าทั้งหมดออกมาแล้ว

ถึงจุดนี้ผมไม่สามารถ catpure หน้าจอได้ แต่คิดว่าทุกท่านก็จะเห็นหน้าจอไม่แตกต่างกัน แค่เอามือถือ scan QR ด้วย Electrum

ใช้รับ Bitcoin

ใน Electrum มือถือ กด RECEIVE ที่ด้านล่างได้เลย เราไม่ต้องใส่ message หรือ amount ก็ได้ แล้วหน้าจอต่อไป ก็แค่กดแสดง address เท่านั้น ก็จะได้ QR ที่แสดงแต่ Address ก็เอาไปใช้งานเพื่อรับ Bitcoin ได้เลย

ดู Address ทั้งหมด

กดที่ชื่อกระเป๋าซ้ายบน > Addressed/Coins

เราก็จะเห็นทุกกระเป๋าที่ได้สร้างขึ้นมาจาก Master key เดียวกัน เหมือน Address ใน Electrum offline เป๊ะเลย

ถึงจุดนี้แล้ว ใน Electrum มือถือ เราจะเรียกว่า Watch only wallet กระบวนการนี้ จะไปทำกับกี่ Device ก็ได้ ไม่มีปัญหา โดยใช้การเปิดการ Master key (ที่จะขึ้นต้นด้วย zpub….) เอาไปเปิดใน Application อื่นๆได้ เช่น Blue Wallet ก็ได้เช่นเดียวกัน จะเห็นเหมือนกันทั้งหมด เพราะอยู่บนมาตรฐาน BIP32 เหมือนกันทั้งหมดนั่นเอง (read only)

โอน Bitcoin

มาถึงเรื่องที่สำคัญในกระบวนการสุดท้าย นั่นคือการโอน Bitcoin ออกจากกระเป๋า เพื่อไปยังที่อื่น โดยเราจะเริ่มที่ Electrum มือถือ เริ่มต้นสร้างรายการโอน จากนั้น ต้องส่งต่อรายละเอียดธุรกรรมนั้นๆ ไปให้ Electrum Offline เพื่อ Sign Transaction ก่อนที่จะรับ signature กลับมาให้ Electrum มือถือ ทำหน้าที่ Broadcast ออก เพราะว่า Electrum Offline ไม่ได้เชื่อมต่อ internet และ Electrum มือถือ ไม่มี Private key สำหรับ ลงนามธุรกรรมนั่นเอง จึงต้องแยกกันทำงาน

ถ้าเป็น wallet ปกติ ที่เราคุ้นเคย จะจบใน application เดียวเลย ก็คือ สร้างธุรกรรม > ใช้ private key sign transaction > broadcast transaction

สร้าง Transaction โอน

Electrum มือถือ ให้เราสร้างธุรกรรมโอนออก โดยกดเข้าไปที่ Wallet ที่เราต้องการโอนออก จากนั้นกด SEND ที่ด้านล่าง จากนั้นระบุ Address ผู้รับ และ จำนวนที่จะโอนออกตามปกติการโอน (ของผม เป็นยอดทดสอบ จึงสั่งโอนออกหมด โดยการกด Max)

จากนั้น เลือกค่าธรรมเนียม ผมแนะนำว่าเลือก mempool จะได้ค่าที่ค่อนข้างเป็นปัจจุบัน ไม่ถูก ไม่แพงเกินไป ถ้าอยากให้เร็ว ก็ดันเพิ่ม 1 step ก็ได้ จะได้มั่นใจว่า 1-2 Block ที่จะถึงนี้ น่าจะได้ confirm แน่นอน (แต่ก็ไม่ได้การันตีนะ ขึ้นอยู่กับความหนาแน่นของ network ในช่วงเวลานั้นๆด้วย)

จากนั้นให้เรากด Share จะได้ QR code เพื่อเป็นการส่งออก Transaction information ข้อมูลการทำธุรกรรมนี้ เพื่อส่งต่อให้ Electrum Offline ทำการ sign ต่อไป

Sign Transaction

จากนั้นใช้ Electrum Offline มา load transaction จาก QR โดยเลือกไปที่ Tools > Load transaction > From QR Code แล้วเอา QR ที่ได้จาก Electrum มือถือ มาให้ scan โดยขั้นตอนนี้เราจะเห็นได้ว่า การนำเข้า Transaction นอกจาก QR แล้ว เรายังสามารถใช้ File , Text ได้อีกด้วย (ผมได้ลองทั้งแบบ QR , text file แล้ว ใช้งานได้เหมือนกัน) ซึ่งทั้งสองทางนี้ ไม่ต้องเชื่อมต่อ internet แต่ว่าเราจำเป็นต้องมี interface อื่นเช่น USB drive หรือ พิมพ์เข้าไปตรงๆ สำหรับขั้นตอนนี้ ผมพบว่า Electrum Offline ไม่สามารถใช้งาน PSBT ของ Blue Wallet ได้ (เนื้อหานี้ เลยทำให้ต้องเลือกใช้งาน Electrum บนมือถือ แทน)

จากนั้น เมื่อเรา sign เรียบร้อยแล้ว ก็แสดง QR Code signature ออกมา แล้วใช้ Electrum มือถือ ย้อนกลับไปกดที่หน้ากระเป๋า แล้วกดปุ่ม SEND เพื่อเปิดกล้องขึ้นมาอีกครั้ง แล้วนำไปถ่าย QR จาก Electrum Offline

Broadcast transaction หลังจาก sign

เมื่อเรา เอา Electrum มือถือ ไป Scan QR code ที่ได้มาจาก Electrum Offline หลังจากการ sign แล้ว ในมือถือเราจะมีปุ่ม BROADCAST ก็กดไปได้เลย

เพื่อให้ Bitcoin network รับรู้ว่าเรากำลังจะทำธุรกรรมนี้แล้วนะ

เป็นอันจบกระบวนการ จากนั้นก็รอ Network confirm อย่างเดียว ถ้า fee ไม่ต่ำเกินไป ไม่นานมากก็จะได้ confirm

สรุปส่งท้าย

ตอนนี้ Cold Wallet ก็พร้อมใช้งานแล้วนะครับ ผมแนะนำว่าในตอนที่ค่าธรรมเนียม Bitcoin network ยังไม่แพงมาก อยากให้ลองทำกันดูก่อน โดยใช้จำนวนน้อยๆ ทำซ้ำๆ เพื่อให้คล่องๆ เวลาที่เจอของจริง ก็จะได้ไม่ตื่นเต้นเกินไป และ ถ้าเราลองด้วยจำนวนน้อยๆ เมื่อเกิดความผิดพลาดที่จุดไหน อันไม่สามารถแก้ไขได้ เราก็จะไม่เสียหายเยอะมาก แต่หากเราไม่ทดสอบจนเข้าใจ แล้วทำยอดใหญ่เลยทีเดียว ถ้าเกิดความผิดพลาด อาจจะหน้ามืดเอาได้เลย เพราะความผิดพลาดบางรู้แบบ เราไม่สามารถ revert ได้

กระบวนการพวกนี้ ผมแนะนำว่า ถ้าเป็นไปได้ เราควรเอาออกมาทดสอบทำธุรกรรม ประมาณ 1 ครั้งต่อปี หรือ 1 ครั้ง ต่อ 2 ปี ก็ได้ เพื่อเป็นการทบกวน และเป็นการตรวจสอบว่า ทุกสิ่งอย่าง ยังคงเป็นไปอย่างที่เราคิดและ คาดหวังจะให้เป็น ครั้งนึงใช้เวลาไม่นานมาก แต่คุ้มค่าแน่นอน

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