ก่อนอื่นต้องขอย้อนกลับไปบทความก่อนหน้านี้ที่ผมได้เคยเขียนไว้เรื่อง จับมือทำ “อยากมี Multisig Wallet แบบฟรี ๆ และปลอดภัยแน่นอน” ทำอย่างไรดี? ซึ่งเป็นบทความแรกที่ผมเขียน และเป็นประเภท “How to” ให้ท่านผู้อ่านทำตามไปเรื่อย ๆ ทีละขั้นทีละตอน ก็จะสามารถทำได้เหมือนที่ผู้เขียนได้สาธิตไว้แน่นอนครับ
แต่!! ถ้าท่านผู้อ่านที่ได้ลองทำตามบทความที่แล้ว จนสามารถสร้าง Multi-Signature Wallet (แบบ Software Wallet) ได้เป็นที่เรียบร้อยแล้ว บทความนี้จะเป็นบทความต่อเนื่องเสนอแนะไอเดียการสร้าง Highly Secure Device สำหรับไว้ Sign Transaction ด้วย Flash Drive ราคาหลักร้อย แต่เราจะประยุกต์ให้มีลักษณะการทำงานคล้าย Air-gap Wallet ให้มากที่สุด
แต่อย่างไรก็ตาม การกระทำใด ๆ ที่เป็นการนำ BIP39 Seed Phrase มากรอกลงในอุปกรณ์อิเล็กทรอนิกส์ ก็คือการเพิ่มช่องโหว่ของกระบวนการการเก็บรักษาบิตคอยน์
ผู้เขียนจึงอยากจะเน้นย้ำตรงนี้อีกครั้ง “บทความนี้ไม่ได้เหมาะกับทุกคน”
แต่เดี๋ยวผู้เขียนจะมีรายละเอียดต่าง ๆ และข้อควรพิจารณาไว้ให้ท่านผู้อ่านได้ลองศึกษาทำความเข้าใจก่อน
ไปเริ่มต้นกันเลยครับ!
บทความนี้เหมาะกับใคร?
- ผู้ที่สร้าง Wallet ด้วย Tails OS + Sparrow (ทั้ง Single-Signature และ Multi-Signature Wallet) ด้วยวิธีการตามบทความที่แล้วของผมเรื่อง “จับมือทำ “อยากมี Multisig Wallet แบบฟรีๆ และปลอดภัยแน่นอน” ทำอย่างไรดี?”
- ผู้ที่ยังไม่มี Hardware Wallet แต่อยากจะสร้าง Software Wallet ไว้สำหรับเก็บและใช้งานบิตคอยน์บ่อย ๆ (ถ้าจะเก็บอย่างเดียว บทความนี้ก็ไม่จำเป็น)
- ผู้ที่มี Hardware Wallet แล้วอย่างน้อย 1 อัน แต่อยากสร้างเป็น Multisig Wallet โดยการใช้ Hardware Wallet 1 อัน + Software Wallet 2 อัน และบันทึกไฟล์ Sparrow Wallet Database ไว้สำหรับ Sign Transaction (หรือผู้ที่ใช้งานบิตคอยน์นั่นเอง)
- ผู้ที่อยากลองเล่นอะไรใหม่ ๆ หรือทำความเข้าใจระบบใหม่ ๆ
บทความนี้ไม่เหมาะกับใคร?
- ผู้ที่ไม่อยากเพิ่มความเสี่ยงให้กับ Seed ของตนเอง เพราะต้องนำ Seed ไปกรอกใน Sparrow เพื่อสร้าง Software Wallet
- ผู้ที่มี Hardware Wallet แล้ว และใช้งานเบื้องต้นได้เป็นอย่างดี รวมทั้งพึงพอใจกับการใช้งาน Hardware Wallet อยู่แล้ว
- ผู้ที่มีปัญหาเรื่องการจำรหัสผ่าน หรือใช้รหัสผ่านซ้ำ ๆ ในหลาย ๆ เว็บ หรือหลาย ๆ อุปกรณ์ (ซึ่งข้อนี้อันตรายอย่างยิ่ง)
- ผู้ที่มีอาการ Panic Disorder ไม่ว่าจะเป็นเรื่องช่องโหว่ (Exploit) ต่าง ๆ ของระบบคอมพิวเตอร์ กลัวการถูกเจาะข้อมูล/อ่านแรม หรืออื่น ๆ แต่ผู้เขียนขอยืนยันว่ากระบวนการต่าง ๆ ที่กำลังจะนำเสนอนั้น มีความปลอดภัยแน่นอนหากทำตามได้อย่างถูกต้อง และต้องอยู่ในสภาวะแวดล้อมที่ปลอดภัย (แน่นอนว่าต้องใช้คอมพิวเตอร์ของตนเองเท่านั้น)
เกริ่นนำ
สำหรับท่านผู้อ่านที่ได้วิเคราะห์ความต้องการของตนเองแล้ว และอยากจะลองทำตามวิธีการในบทความนี้ เพื่อให้เกิดความมั่นใจต่อความปลอดภัยของข้อมูล ผมอยากจะขอเริ่มต้นจากระบบที่จะนำมาใช้ในบทความนี้ครับ
โดยหลักการ คือ เราจะใช้ Flash Drive จำนวน 1 อัน (ขนาดอย่างน้อย 16 GB) และสร้างเป็น Tails OS ไว้เรียบร้อย (วิธีการสร้าง Tails OS ขออนุญาตไม่กล่าวถึง สามารถไปดูจากในบทความที่แล้วได้เลยครับ) จากนั้นเราจะ Format พื้นที่ที่เป็น Free Space ส่วนที่เหลือของ Flash Drive ให้เป็น Encrypted Drive + Shared Drive
โดยสรุป คือ ไดรฟ์ที่เราจะมีใน Flash Drive นี้เมื่อสร้างเสร็จเรียบร้อยแล้วก็คือ :
- Tails OS Drive : ไดรฟ์ของระบบ Tails OS
- Encrypted Drive : ไดรฟ์นี้จะเข้ารหัสแบบ AES 256 bit และใช้ Passphrase เป็น Masterkey ในการเข้าถึงข้อมูลต่าง ๆ ภายในไดรฟ์
- Shared Drive : ไดรฟ์นี้จะเป็นรูปแบบ FAT32 ปกติธรรมดา ไว้สำหรับถ่ายโอนข้อมูล เช่น ไฟล์ PSBT หรือไว้อัปเดตไฟล์ของตัวโปรแกรม Sparrow
หากว่าท่านใดแคลงใจเกี่ยวกับความปลอดภัยของ Encrypted Drive สามารถไปศึกษาเพิ่มเติมได้จาก Disk Encryption User Guide ซึ่งถ้าจะให้ผู้เขียนสรุปให้ง่าย ๆ คือ เราจะใช้รูปแบบการเข้ารหัสไดรฟ์ที่ชื่อว่า “LUKS (Linux Unified Key Setup)” ซึ่งเป็นการทำงานในระดับชั้นของ Low-Level โดยใช้ Strong Encryption Algorithms และ Passphrase-Based Authentication จึงสามารถมั่นใจในเรื่องของความปลอดภัยได้อย่างแน่นอน
แต่อย่างไรก็ตาม ระดับความปลอดภัยจะขึ้นอยู่กับ “ความยาว” และ “ความยาก” ของ Passphrase ที่เรากำหนดด้วย ซึ่งต้องไม่สามารถคาดเดาได้ เนื่องจากมันเป็น “กำแพงด่านแรก” ในการเข้าถึงข้อมูลที่เป็น Master Private Key ของ Wallet เรา
สาเหตุที่ผู้เขียนกล่าวว่าเป็นกำแพงด่านแรก เพราะว่าเรายังสามารถสร้าง “กำแพงด่านที่สอง” นั่นคือ Sparrow Wallet Password ได้อีกชั้น โดยแนะนำให้ใช้รหัสคนละชุดกันนะครับ
แต่ถ้ามีคนถามว่า “หากเราลืมรหัสผ่านหรือ Passphrase ล่ะ จะทำอย่างไรดี?”
ผู้เขียนขอตอบว่าไม่ยากเลยครับ เราก็แค่ Format Encrypted Drive นั้นใหม่ แล้วตั้ง Passphrase ใหม่ จากนั้นไปนำ Seed ที่เราเก็บไว้ใน Wallet ของเรา มาสร้าง Software Wallet โดยใช้ Sparrow App ใหม่อีกครั้ง แล้วบันทึกไฟล์ Sparrow Wallet Database ลงไปในไดรฟ์ที่เข้ารหัส ก็จะมีอุปกรณ์ไว้ Sign Transaction เช่นเดิมแล้วครับ
วิธีการนี้ถ้าจะเปรียบกับการ Recovery Hardware Wallet ก็คงไม่ต่างกัน
อ้อ….การทำใหม่ทั้งหมดนี้ต้องทำบน Tails OS แบบ Offline Mode เท่านั้นนะครับ
มาเริ่มต้นกันเลย
ถ้าท่านผู้อ่านมาจนถึงตรงนี้ แสดงว่าพร้อมที่จะสำรวจโลก Highly Secure Device ไปพร้อมกันแล้ว..
มาเริ่มกันเลยครับ!
ขั้นตอนที่ 1 : ให้คุณปรับค่าการบูตของ BIOS/UEFI ของคอมพิวเตอร์ตนเอง ให้สามารถบูตเข้า USB Drive ได้นะครับ ซึ่งถ้าเข้าถึงหน้านี้ได้แสดงว่าสามารถบูตเข้า Tails OS ได้สำเร็จ จากนั้นให้เลือก Tails และกด Enter หรือปล่อยไว้ประมาณ 5 วินาที เครื่องก็จะบูตเองโดยอัตโนมัติ
ขั้นตอนที่ 2 : ห้ามลืมตั้งค่า Additional Settings นะครับ โดยเฉพาะ Administration Password กับเลือกเป็น Offline Mode เพื่อ Disable all networking ครับ
ขั้นตอนที่ 3 : เข้าไปยัง Applications > Utilities > Disks เพื่อเข้า Disks Manager Application ของ Tails OS สำหรับการสร้างไดรฟ์ต่อไป
ขั้นตอนที่ 4 : แถบทางซ้ายมือจะมีรายชื่อของ Disk ในคอมพิวเตอร์เราขึ้นมาครับ ให้เลือกตัวที่เป็น Flash Drive โดยการ Confirm จากชื่อของ Device และขนาดของ Drive ครับ (ข้อควรระวังคือห้ามเลือกผิดนะครับ) หรือดูจาก Volumes ที่มี ซึ่งจะมีเพียง Partition ของ Tails OS กับพื้นที่ส่วนของ Free Space เท่านั้น
ขั้นตอนที่ 5 : คลิกที่ส่วนของ Free Space และคลิกที่เครื่องหมาย + เพื่อสร้าง Partition ขึ้นมาใหม่ (Create partition in unallocated space)
ขั้นตอนที่ 6 : กำหนดขนาดของไดรฟ์ได้เลย โดยอันนี้เราจะสร้างเป็น Encrypted Partition นะครับ (ในตัวอย่างสร้างขนาด 10.0 GB) จากนั้นคลิกที่ Next
ขั้นตอนที่ 7 : ให้ตั้งชื่อ Volume และคลิกเลือกตรงเมนู Type เป็น “Internal disk for use with Linux systems only (Ext4)” พร้อมติ๊กที่ “Password protect volume (LUKS)” จากนั้นคลิก Next
**ขั้นตอนนี้เป็นการเลือกว่าเราจะเข้ารหัสแบบ Linux Unified Key Setup (LUKS)**
ขั้นตอนที่ 8 : กำหนด Passphrase สำหรับเข้ารหัสไดรฟ์ให้เรียบร้อย (ยิ่งยาวยิ่งปลอดภัยต่อการ Brute Force Attack) จากนั้นคลิกที่ Create ซึ่งสาเหตุที่เรียกว่า Passphrase นั้นเป็นเพราะเราสามารถตั้งเป็นคำพูด เป็นประโยค หรือเป็นรหัสผ่านทั่ว ๆ ไปก็ได้เช่นกัน
**มีคำแนะนำให้ใช้ตัวใหญ่ตัวเล็กและตัวเลขปน ๆ กัน เพื่อความยากในการเดา**
ขั้นตอนที่ 9 : ถ้าขึ้นหน้าต่าง Authentication Required สำหรับให้กรอก amnesia password ให้คุณนำ Administration Password ที่เพิ่งกำหนดไปในขั้นตอนที่ 2 มากรอกนะครับ (รวมถึงหลาย ๆ ขั้นตอนหลังจากนี้ก็จะมีการถามเช่นเดียวกัน) จากนั้นคลิกที่ Authenticate
ขั้นตอนที่ 10 : ถึงขั้นตอนนี้เราก็จะได้ Encrypted Drive เพิ่มมา 1 อัน โดยจะเห็นว่ามีรายละเอียดเขียนว่า Contents : LUKS Encryption (version 1) – Unlocked หมายถึงว่าเป็นไดรฟ์ที่เข้ารหัสแต่ถูกปลดล็อกไว้ โดยถ้าเราไปเข้าไดรฟ์ที่ Files Application เราก็จะสามารถเข้าถึงไดรฟ์นี้ได้เลย
ขั้นตอนที่ 11 : จากนั้นให้คลิกที่พื้นที่ Free Space ที่เหลือ เพื่อสร้าง Shared Drive สำหรับใช้ร่วมกันระหว่าง Platform ครับ โดยการคลิกที่เครื่องหมาย + เช่นเดิม
ไดรฟ์นี้สร้างขึ้นเพื่อเอาไว้สำหรับวางไฟล์ที่จำเป็น ในกรณีนี้คือการวางไฟล์ PSBT ที่เราสร้างจาก Watch-only Wallet จาก Sparrow ที่เชื่อมต่ออยู่กับ Node ซึ่งอาจจะอยู่บนคอมพิวเตอร์เครื่องเดียวกัน หรือคนละเครื่องกันก็ได้
ขั้นตอนที่ 12 : กำหนดพื้นที่ได้เลยครับ ตามตัวอย่างก็จะใช้พื้นที่ที่เหลือทั้งหมดในการสร้าง Shared Drive ครับ จากนั้นคลิกที่ Next
ขั้นตอนที่ 13 : ให้ตั้งชื่อไดรฟ์ และตรง Type ให้เลือกเป็น “FAT” ครับ เพื่อใช้ร่วมกันได้ทั้ง Windows/Mac/Linux (หากใช้งานร่วมเฉพาะ Windows สามารถเลือก NTFS ได้)
ขั้นตอนที่ 14 : เมื่อถึงขั้นตอนนี้ Flash Drive ของเราก็จะประกอบไปด้วย 3 ไดรฟ์หลัก ดังนี้
- Tails OS Partition (ไดรฟ์ของระบบ Tails OS)
- Encrypted Partition (ไดรฟ์ที่ถูกเข้ารหัส)
- Shared Drive Parition (ไดรฟ์ที่ไม่ถูกเข้ารหัส หรือทำหน้าที่เป็นไดรฟ์ธรรมดาที่สามารถมองเห็นได้จากทุก Operating System)
ขั้นตอนที่ 15 : ถึงตอนนี้ขอให้เรา “Restart” Tails OS และบูตใหม่ก่อน เพื่อเป็นการทดสอบไดรฟ์ที่เราเพิ่งสร้างขึ้นมาว่าถูกเข้ารหัสและปลดล็อกได้ โดยการคลิกที่มุมขวาบน และเลือกเมนู Restart
ขั้นตอนที่ 16 : เมื่อบูตเข้า Tails OS มาใหม่ อย่าลืมตั้งค่า Administration Password และ Set Offline Mode ตามขั้นตอนที่ 2 นะครับ (จำเป็นมาก) จากนั้นไปที่เมนู Applications > Accessories > Files เพื่อเข้าสู่ Files สำหรับเข้าถึงไดรฟ์ (เปรียบเสมือน Windows Explorer หรือ Finder ของ MacOS)
ขั้นตอนที่ 17 : ที่ Files เราจะเห็นไดรฟ์ที่เราสร้างเพิ่มขึ้นมา ให้เราคลิกเมาส์ไปที่ไดรฟ์นั้นครับ โดยจะแบ่งเป็น 2 ไดรฟ์ใหม่ คือ ไดรฟ์ที่ถูกเข้ารหัส และไดรฟ์ที่ไม่ถูกเข้ารหัส
ขั้นตอนที่ 18 : ถ้าเป็นไดรฟ์ที่ Encrypted ต้องกรอก Passphrase ที่เราตั้งค่าไว้ในขั้นตอนที่ 8 จากนั้นคลิกที่ Unlock (หากกรอกรหัสผิดก็กรอกใหม่ได้เรื่อย ๆ ไม่มีการจำกัดจำนวนครั้ง)
ขั้นตอนที่ 19 : กรอก Administration Password เช่นเดิม
ขั้นตอนที่ 20 : ถึงตอนนี้เราก็จะสามารถเข้าถึงข้อมูลในไดรฟ์ที่เข้ารหัสไว้เรียบร้อย โดยไดรฟ์นี้เราจะเก็บไฟล์ Wallet Database ของ Software Wallet ที่สร้างโดย Sparrow
ขั้นตอนที่ 21 : จากนั้นให้คลิกที่ Shared Drive และกรอก Administration Password เช่นเดิม
ขั้นตอนที่ 22 : ไดรฟ์ที่ถูกเข้ารหัสนี้เราจะเก็บไฟล์ Database ของ Software Wallet ที่สร้างโดย Sparrow (ตามตัวอย่างคือ Software Wallet ของ Multisig ทั้ง 2 อัน) ส่วน Shared Drive มีไว้สำหรับ Transfer PSBT File จาก Windows/MacOS เพื่อมา Sign Transaction ใน Tails OS รวมถึงไฟล์อื่น ๆ ที่จำเป็น เช่น App Sparrow ที่อัปเดต (เนื่องจากเราต้องโหลดโปรแกรมจากคอมพิวเตอร์ที่ต่ออินเทอร์เน็ต จึงต้องมีไดรฟ์นี้ไว้แชร์ข้อมูล)
ขั้นตอนที่ 23 : ในที่นี้จะขอไม่กล่าวถึงการรัน Sparrow นะครับ สามารถไปดูวิธีการได้จากบทความที่แล้ว ในภาพจะเป็นตัวอย่างการเปิด Unsigned Transaction จากไฟล์ PSBT ที่เราบันทึกมาจาก Sparrow บน Windows (โดยสร้าง Transaction มาจาก Watch-only Wallet และบันทึกเป็น .psbt)
ขั้นตอนที่ 24 : เลือกไฟล์ .psbt ที่บันทึกไว้ใน Shared Drive (ตามตัวอย่างของผู้เขียน จะแยกโฟลเดอร์ของไฟล์ .psbt ไว้ แต่ไม่จำเป็นต้องทำตามนี้ก็ได้ สามารถวางไฟล์ไว้ที่ Root ของ Shared Drive ได้เลยครับ)
ขั้นตอนที่ 25 : ทำการ Sign Tx (Transaction) โดยใช้เปิดไฟล์ Software Wallet ที่อยู่ใน Encrypted Drive และ Sign Tx ตามปกติ ในตัวอย่างคือ Multisig 2-of-3 จากนั้นคลิกที่ Save Final Transaction ที่ผ่านการ Signed เรียบร้อยแล้ว กลับไปยัง Shared Drive
ขั้นตอนที่ 26 : ให้บันทึกไฟล์ .psbt ที่ผ่านการ Signed Tx แล้วไว้ใน Shared Drive เพื่อนำไป Broadcast ต่อในคอมพิวเตอร์เครื่องที่เชื่อมต่ออินเทอร์เน็ต
ขั้นตอนที่ 27 : ตัวอย่างเมื่อนำไฟล์ PSBT ที่ Signed Tx จาก Tails OS แล้ว มาเปิดใน Sparrow ที่เชื่อมต่อกับ Node ก็พร้อมให้เรา Broadcast Transaction ต่อไป
ถึงตรงนี้ก็เสร็จสิ้นกันไปสำหรับการทำ “Highly Secure Device” ครับ สาเหตุที่ผมกล่าวว่ามันมีลักษณะคล้ายกับ Air-gap Wallet เพราะว่าเราแยกระบบออกมาจากระบบหลักในคอมพิวเตอร์ ถึงแม้ว่าความรู้สึกของเราจะบอกว่ามันคือการ Singed Tx บนคอมพิวเตอร์ก็ตาม แต่หากว่าเราทำแบบรัดกุมทุก ๆ ขั้นตอน ก็สามารถมั่นใจได้ว่า Master Private Key ของเราที่อยู่ใน Encrypted Drive จะไม่มีทางหลุดรอดออกไปสู่โลกอินเทอร์เน็ตอย่างแน่นอน
และระบบ Tails OS นั้นเรียกได้ว่าเป็นระบบที่สร้างความยากต่อผู้ที่ไม่ประสงค์ดี เช่น แอบดักข้อมูลโดยการอ่านใน RAM/ROM (โดยหลักการถือว่ายาก เพราะต้องเข้าถึง Physical ของเป้าหมาย ผู้เขียนจึงแนะนำให้ใช้คอมพิวเตอร์ของตนเองในการทำ) และใช้หลักการที่เรียกว่า “Live” Boot Process หรือการบูตโดยตรงจาก USB/DVD โดยไม่ไปเปลี่ยนแปลงหรือเขียนข้อมูลใด ๆ ลงบน Hard Drive ที่อยู่บนคอมพิวเตอร์
เพื่อให้เกิดความสบายใจยิ่งขึ้น ผู้เขียนขอปิดท้ายด้วยการนำเสนอโครงสร้างของ Flash Drive ที่เราทำเสร็จแล้ว เมื่อมองจากระบบอื่นที่ไม่ใช่ Linux Base ดังนี้
เมื่อลองมองโครงสร้าง Partition จาก Disk Management ของ Windows จะพบว่าไดรฟ์ที่ถูกเข้ารหัสไว้จะไม่สามารถมองเห็นรายละเอียดได้
เช่นเดียวกันกับ Disk Utility ของ macOS ที่ไม่สามารถมองเห็นรายละเอียดของ Partition ที่เข้ารหัสไว้ได้ แต่มองเห็น Partition ส่วนที่เป็น Shared Drive ได้ตามปกติ
สุดท้าย เมื่อลองมองโครงสร้าง Partition จาก EaseUS Partition Master 13.8 พบว่าไดรฟ์ที่ถูกเข้ารหัส ไม่สามารถอ่านข้อมูลได้ โดยมองเป็น Unused Partition ทั้งหมด
บทส่งท้าย
ขอย้อนกลับไปตอนช่วงต้นของบทความเล็กน้อยครับ ตามที่ผู้เขียนได้กล่าวไปว่า “บทความนี้อาจจะไม่ได้เหมาะกับทุกคน” เพราะบางครั้งท่านผู้อ่านก็ไม่มีความจำเป็นต้องทำอะไรที่มันยุ่งยากแบบนี้ ลำพังมีแค่ Hardware Wallet สักอันนึง และเก็บ Seed Phrase ลงบนแผ่นโลหะดี ๆ ก็สบายใจได้แล้ว
แต่อย่างน้อยผู้เขียนอยากให้ไอเดียนี้ได้ถูกนำไปต่อยอด โดยอาจจะมีผู้อ่านบางท่านผ่านตาบทความนี้แล้วเกิดไอเดียใหม่ ๆ ขึ้นมา ก็อยากให้นำไอเดียใหม่ ๆ เหล่านั้นมาช่วยกันต่อยอด หรือพัฒนาบางสิ่งบางอย่างให้ดีมากขึ้นต่อไป
โดยส่วนตัวของผู้เขียนพบว่าไอเดียนี้ช่วยสร้างความมั่นใจในการเก็บรักษาบิตคอยน์ในรูปแบบ Multisig Wallet และมั่นใจว่าเราสามารถใช้บิตคอยน์ที่เรามีได้เมื่อถึงเวลาที่เราต้องใช้ครับ
พบกันใหม่ในบทความหน้า สวัสดีครับ ^_^