ท่องโลก Nostr ให้ปลอดภัยด้วย Nostr Signing Device (NSD) แบบ DIY

NSD Oct 21, 2023

หลายท่านที่ได้ท่องโลก Nostr มาเป็นระยะเวลาหนึ่งแล้ว ก็คงจะมีความรู้ความเข้าใจเกี่ยวกับ Private key หรือ nsec เป็นอย่างดี สิ่งนี้เปรียบเสมือนกุญแจดอกสำคัญที่เราจะนำมันมาใช้ในการยืนยันตัวตนและลงนาม (sign) เพื่อสร้าง event ต่างๆ ใน Nostr หาก Private key ของท่านถูกเปิดเผยแก่ผู้อื่นก็คงจะไม่ดีแน่ครับ เพราะอาจมีผู้ไม่หวังดีสามารถแอบแฝงใช้บัญชีของท่านได้

ทางเลือกหนึ่งที่น่าสนใจในการเก็บรักษา Private key ของเราไว้ก็คือการใช้ Nostr Signing Device หรือ NSD คืออุปกรณ์ฮาร์ดแวร์ที่ช่วยเก็บกุญแจการเข้าสู่ระบบ Nostr ของท่านไว้และสามารถทำการลงนาม event ต่างๆ ให้เราได้ คล้ายกับ Hardware Wallet ที่สามารถเก็บกุญแจและลงนามในการทำธุรกรรมในระบบ Bitcoin

หลักการทำงานของ NSD ในเบื้องต้นจะทำงานร่วมกับ NIP-07 โดยข้อมูลของ event ที่กำลังถูกสร้างขึ้นจะถูกส่งจากไคลเอนท์ไปยัง NSD ผ่าน serial port เพื่อทำการลงนาม แล้วส่งลายเซ็นต์ (signature) กลับมาให้ไคลเอนท์

ในปัจจุบันท่านสามารถหาซื้อ NSD ได้ที่เว็บ LNbits ซึ่งราคาจะอยู่ที่ประมาณ 20 ปอนด์ หรือประมาณ 900 บาท

image

NSD ของ LNbits ที่กล่าวมาข้างต้นนั้นเป็น opensource ที่เปิดเผยซอร์สโค้ดทุกอย่าง ซึ่งเราสามารถนำมาใช้เพื่อพัฒนาเองได้ โดยมีต้นทุนอุปกรณ์ที่ถูกกว่าการซื้อในเว็บมากครับ ดังนั้นบทความนี้ผมก็จะพาท่านผู้อ่านมาสร้าง NSD แบบ DIY เป็นของตัวเองกันครับ

เริ่มต้นเราก็มาหาซื้ออุปกรณ์กันก่อนนะครับ เราจะใช้ฮาร์ดแวร์หลักคือบอร์ดพัฒนา ESP32 รุ่นใดก็ได้ โดยรุ่นที่ทาง LNbits แนะนำก็คือ LILYGO T-Display S3 เพราะเป็นรุ่นที่ตรงกับ NSD ของ LNbits อีกรุ่นหนึ่งที่ผมแนะนำก็คือ LILYGO T-Dongle S3 ส่วนตัวผมจะเลือกใช้ตัวนี้เพราะว่ามี usb ติดมาด้วย ทำให้ใช้งานได้สะดวกเหมือน thumb drive นอกจากหากท่านมีงบน้อยก็จะสามารถเลือกใช้ ESP32 บอร์ดเปล่าแบบที่ไม่มีจอก็ได้ครับซึ่งรุ่นนี้ราคาถูกที่สุดประมาณ 200 บาท โดยผมได้ทำตารางเปรียบเทียบ ดังนี้

ESP32 Link Price(THB)
LILYGO T-Display S3 https://s.click.aliexpress.com/e/_Ddy7739 ≈728
LILYGO T-Dongle S3 https://s.click.aliexpress.com/e/_DmQCPyj ≈546
ESP32-WROOM https://shopee.co.th/search?keyword=esp32 80~300

ทีนี้พอเรามีอุปกรณ์กันแล้ว ก็มาติดตั้งซอฟต์แวร์กันครับ โดยเราจะใช้ซอฟต์แวร์ Arduino IDE สำหรับอัพโหลดโปรแกรมลงบอร์ด สามารถดาวน์โหลดได้ที่

https://www.arduino.cc/en/software

เมื่อทำการติดตั้ง Arduino IDE แล้วเปิดโปรแกรมครั้งแรก ให้ทำการติดตั้ง ESP32 Board ก่อนครับ โดยเข้าไปที่ File > Preferences

image

ในหน้าต่าง Preferences นี้ ให้ทำการคัดลอกข้อความ

https://dl.espressif.com/dl/package_esp32_index.json

วางลงในช่อง “Additional Board Manager URLs” แล้วกด OK

image

จากนั้นไปที่ Arduino IDE แล้วไปที่ Tools > Board > Boards Manager…

image

ในหน้าต่าง Boards Manager ให้พิมพ์ในช่องค้นหาว่า ESP32 จากนั้นให้กด Install แล้วรอการดาวน์โหลดและติดตั้งจนเสร็จ

image

เมื่อติดตั้งเรียบร้อย กลับมาที่ Arduino IDE แล้วไปที่ Tools > Board > … ก็จะพบรายการบอร์ด ESP32 ให้เลือกบอร์ดที่ท่านใช้งานได้เลยครับ

image

ถ้าหากว่าไม่เจอรุ่นที่ตรงกัน ให้เลือก “ESP32S3 Dev Module” ก็ได้ครับ

ขั้นตอนต่อมาเราก็จะมาทำการโหลดซอร์สโค้ดของ NSD กันครับ โดยซอร์สโค้ดจะอยู่ใน Github ตามลิ้งนี้

https://github.com/lnbits/nostr-signing-device

สำหรับท่านใดที่เลือกใช้ LILYGO T-Dongle S3 แบบเดียวกับผม ซึ่งมีขนาดความละเอียดจอที่เล็กกว่า NSD รุ่น T-Display ของ LNbits ผมจึงทำการ fork ซอร์สโค้ดใหม่และได้ทำการแก้ ui ให้เข้ากับขนาดจอแสดงผลของ T-Dongle โดยผมได้อัพโหลดโค้ดลงใน Github ตามลิงก์นี้ครับ

https://github.com/AlbiziaLebbeck/nostr-signing-device

เมื่อโหลดซอร์สโค้ดของ NSD เรียบร้อยแล้ว ก็ให้ทำการคัดลอกไฟล์ในไดเรคทอรี่ libraries ทั้งหมดประกอบไปด้วย

  • ArduinoJson
  • QRCode
  • TFT_eSPI
  • tiny-AES-c
  • uBitcoin

มาวางไว้ที่ไดเรคทอรี่ libraries ของ Arduino ซึ่งท่านสามารถทราบได้จากหน่าต่าง File > Preferences ในช่อง “Sketchbook location:”

image

เมื่อท่านทำการลง libraries เรียบร้อย ก็ให้เปิดไฟล์ snsd > snsd.ino นะครับ เราก็เห็นซอร์สโค้ดทั้งหมด ดังรูปด้านล่าง

image

ทีนี้เราก็พร้อมสำหรับการอัพโหลดโปรแกรมแล้วครับ ให้ท่านทำการเชื่อมต่อบอร์ด ESP32 ด้วย usb แล้วไปที่ Tools > Port: เพื่อทำการเลือก Port ที่ตรงกับบอร์ด ESP32 ของท่าน

image

ตรวจสอบการตั้งค่า board ตามรูปด้านล่างนะครับ

image

พร้อมแล้วก็กดปุ่ม Upload ตามรูปด้านล่างได้เลยครับ

image

เมื่ออัพโหลดสำเร็จ ก็จะปรากฏคำว่า “Done Uploading” เป็นอันสิ้นสุดการติดตั้ง

image

หาก NSD ของท่านมีหน้าจอแสดงผล ก็จะปรากฏโลโก้ดังรูปข้างล่าง

image

ในการใช้งานเบื้องต้น ให้ท่านทำการบันทึก Private key ของท่านลง NSD ก่อนนะครับ โดยให้ไปที่ Tools > Serial Monitor ก็จะเจอหน้าต่าง Serial Monitor แล้วให้ทำการตั้ง Baud rate เป็น 9600 ดังรูปด้านล่าง

image

image

หลังจากนั้นให้พิมคำสั่ง \restore ตามด้วย Private key ของท่านในรูปแบบเลขฐานสิบหก สำหรับ nsec ไม่รองรับนะครับให้ท่านทำการแปลงเป็นเลขฐานสิบหกเสียก่อน

image

เมื่อบันทึก Private key เรียบร้อยแล้ว สามารถตรวจสอบ Public key ได้ด้วยคำสั่ง /public-key ครับ
ตอนนี้ NSD ของเราก็พร้อมใช้งานแล้วครับ

ในการใช้งานนั้น เราจะใช้งานร่วมกับส่วนขยายของเบราวเซอร์ Chrome (Microsoft Edge ก็ใช้ได้) ที่มีชื่อว่า Horse ซึ่งจะช่วยให้เว็บไซต์ไคลเอนท์ Nostr สามารถติดต่อกับ NSD ของเราด้วย NIP-07 ผ่าน web serial port โดยสามารถติดตั้งได้ที่ลิงก์นี้ ครับ

https://chrome.google.com/webstore/detail/horse/ogdjeglchjlenflecdcoonkngmmipcoe

ในการใช้งานก็เพียงแค่เชื่อมต่อ NSD ของท่านเข้ากับคอมพิวเตอร์ แล้วเข้าใช้งานเว็บไซต์ไคลเอนท์ Nostr ด้วย NIP-07 โดยเลือกใช้ส่วนขยาย Horse เว็บเบราวเซอร์จะให้ท่านเลือก serial port ที่เชื่อมต่อ NSD ของท่าน

image

หาก NSD ของท่านมีหน้าจอแสดงผล ก็จะปรากฏข้อความ Signed Message ดังรูป

image

อย่างไรก็ตามในการเข้าใช้งานบางไคลเอนท์จะยังไม่รองรับกับส่วนขยาย Horse ทำให้ท่านไม่สามารถเข้าสู่ระบบด้วย NSD ของท่านได้ อาจจะต้องรอการพัฒนาปรุงอีกซักระยะเวลาหนึ่งนะครับ สำหรับไคลเอนท์ที่ผมได้ลองทดสอบแล้วว่าใช้ได้ก็จะมีดังนี้ครับ

หวังว่าบทความนี้จะเป็นประโยชน์กับชาว Nostr ทุกท่านนะครับ หากมีข้อสงสัยประการใดสามารถสอบถามมาได้ที่ Nostr ของผม pruks@siamstr.com
สุดท้ายนี้ ขอให้ทุกท่านท่องโลก Nostr ได้อย่างเพลิดเพลินและปลอดภัยด้วย NSD ของท่านเองนะครับ

Tags

Pruk

Bitcoiner, Researcher, Beer lover and Coffee addict