เคส Coldcard คือเคสเดียวกับตอนที่สหรัฐยึด Bitcoin จากกัมพูชา บั๊กเดียวกันที่ขโมยเงินไปนับหมื่นล้าน

เคส Coldcard คือเคสเดียวกับตอนที่สหรัฐยึด Bitcoin จากกัมพูชา บั๊กเดียวกันที่ขโมยเงินไปนับหมื่นล้าน

ไล่เส้นเวลาบั๊ก weak entropy ตัวเดียวกัน ตั้งแต่ Milk Sad ปี 2023 ย้อนไปถึงเหมือง LuBian ปี 2020 คดีแก๊งพูชากัมพูชา จนถึง Coldcard ปี 2026

เวลา 01:36 น. ตามเวลาสากล ของวันที่ 30 กรกฎาคม 2026 ในบล็อกที่ 960188 ของเครือข่าย Bitcoin มีธุรกรรมชุดหนึ่งเริ่มทยอยเข้ามา ไม่มีใครสังเกตเห็นความผิดปกติในตอนนั้น เพราะมันดูเหมือนธุรกรรมปกติทุกประการ ลายเซ็นถูกต้อง ยืนยันผ่านทุกกฎของโปรโตคอล ไม่มีการแฮกเซิร์ฟเวอร์ ไม่มีมัลแวร์ ไม่มีใครถูกฟิชชิ่งหลอกให้กรอกอะไรทั้งสิ้น

ภายในเวลา 15 นาที บล็อกที่ 960188 ถึง 960191 ถูกเติมเต็มไปด้วยธุรกรรมที่ดูดเงินออกจากกระเป๋า Coldcard กว่า 500 ที่อยู่ รวมมูลค่า 594.5 BTC หรือราว 38 ล้านดอลลาร์ในทันที และนี่เป็นแค่ระลอกแรกจากทั้งหมดสามระลอกที่จะตามมาในอีกไม่กี่วันข้างหน้า จนยอดความเสียหายรวมพุ่งไปแตะ 1,367.05 BTC หรือประมาณ 88.6 ล้านดอลลาร์

คำถามที่ทุกคนถามตอนนั้นคือ "เกิดอะไรขึ้น" แต่คำถามที่สำคัญกว่าซึ่งแทบไม่มีใครถามในตอนแรกคือ "เคยเกิดเรื่องแบบนี้มาก่อนหรือเปล่า"

คำตอบคือ เคย และไม่ใช่แค่ครั้งเดียว เส้นทางของบั๊กตัวนี้ ถ้าลากย้อนกลับไปให้สุด จะพาไปเจอกับเหมืองขุด Bitcoin ที่หายไปเงียบๆ กลางดึกของปี 2020 คดีอาชญากรรมข้ามชาติที่ใหญ่ที่สุดคดีหนึ่งในประวัติศาสตร์ และคำถามที่ยังไม่มีใครตอบได้ว่า ระหว่างรัฐบาลกับอาชญากร ใครกันแน่ที่ใช้ช่องโหว่นี้ก่อน

กลไกที่ทุกเคสในเรื่องนี้พังตรงจุดเดียวกัน

ก่อนจะเล่าเรื่องต่อ ต้องเข้าใจก่อนว่าทำไมสิ่งที่ควรจะ "เป็นไปไม่ได้" ถึงเกิดขึ้นได้ซ้ำแล้วซ้ำเล่า

กุญแจส่วนตัว (Private Key) ของ Bitcoin ทุกดอกบนโลก ไม่ได้เกิดจากใครนั่งคิดเลขขึ้นมาเอง แต่เกิดจากการสุ่มตัวเลขขนาดมหึมาขึ้นมาหนึ่งค่า ตัวเลขนี้ยาว 256 บิต หรือพูดง่ายๆ คือมีความเป็นไปได้มากถึง 2 ยกกำลัง 256 แบบ ตัวเลขนี้มากกว่าจำนวนอะตอมทั้งหมดที่ประเมินว่ามีอยู่ในจักรวาลที่มองเห็นได้ นี่คือเหตุผลที่คนในวงการพูดกันหนักแน่นว่า "จะ brute-force เดา Private Key ของ Bitcoin ไม่มีทางเป็นไปได้ในทางปฏิบัติ"

แต่ประโยคนั้นเป็นจริงได้ก็ต่อเมื่อแหล่งที่มาของความสุ่มนั้นสุ่มจริง ตัวที่ทำหน้าที่นี้เรียกว่า RNG (Random Number Generator) และสำหรับงานด้านความปลอดภัยระดับนี้ มันต้องเป็น RNG เกรดพิเศษที่เรียกว่า CSPRNG (Cryptographically Secure PRNG) ซึ่งดึงความสุ่มจากแหล่งที่คาดเดาไม่ได้จริง เช่น สัญญาณรบกวนทางไฟฟ้าในชิปฮาร์ดแวร์เฉพาะทาง ไม่ใช่จากสูตรคำนวณที่ย้อนกลับได้

ปัญหาคือ ถ้าใครสักคน ไม่ว่าจะตั้งใจหรือพลาดโดยไม่รู้ตัว แอบสลับแหล่งความสุ่มนั้นไปใช้ตัวที่อ่อนแอกว่า เช่น ใช้แค่เวลาปัจจุบันของเครื่อง หรือใช้ตัวสร้างเลขสุ่มแบบเก่าที่ไม่ได้ออกแบบมาเพื่องานเข้ารหัส (อย่าง Mersenne Twister ซึ่งนิยมใช้ในเกมหรือการจำลองสถิติ ไม่ใช่การป้องกันทรัพย์สิน) พื้นที่ความเป็นไปได้ของกุญแจจะหดจาก 2 ยกกำลัง 256 เหลือแค่หลักสิบบิตเท่านั้น เช่น 32 บิต ก็คือแค่ 4,294,967,296 แบบ ซึ่งคอมพิวเตอร์เกมมิ่งเครื่องเดียวไล่ครบได้ในเวลาไม่กี่วัน

และนี่คือส่วนที่น่ากลัวที่สุดของเรื่องทั้งหมด บั๊กประเภทนี้ไม่มีสัญญาณเตือนเลยแม้แต่นิดเดียว วอลเล็ตจะสร้าง Seed Phrase ออกมาให้ดูปกติทุกอย่าง แอปไม่ฟ้อง error ไม่มี warning ไม่มีหน้าจอสีแดง เจ้าของกระเป๋าจะไม่มีทางรู้เลยว่ากุญแจของตัวเองอ่อนแอ จนกว่าจะมีใครสักคนไล่คำนวณเจอก่อนแล้วโอนเหรียญออกไปเงียบๆ บางครั้งอาจจะรอเป็นวัน เป็นเดือน หรืออย่างที่จะเห็นต่อไปนี้ อาจรอเป็นปี

ไดอะแกรมเปรียบเทียบ CSPRNG ปกติ กับ PRNG อ่อนแอ ที่ทำให้กุญแจ Bitcoin ถูก brute-force ได้

บทที่หนึ่ง เหมืองที่หายไปในความเงียบ

ย้อนกลับไปเดือนพฤษภาคม 2020 LuBian คือหนึ่งในเหมืองขุด Bitcoin ที่ทรงอิทธิพลที่สุดในโลก ควบคุมกำลังขุดคิดเป็นเกือบ 6% ของทั้งเครือข่าย Bitcoin ทั่วโลก อยู่ในระดับเดียวกับเหมืองยักษ์ใหญ่ที่ทุกคนในวงการรู้จัก

จนกระทั่งคืนวันที่ 28 ธันวาคม 2020 บางอย่างเกิดขึ้นกับกระเป๋าเงินของ LuBian กว่า 90% ของยอดคงเหลือทั้งหมดถูกดูดออกไปในการโจมตีครั้งเดียว รวมมูลค่า 127,426 BTC หรือราว 3,500 ล้านดอลลาร์ตามราคาตอนนั้น มูลค่านี้ในปัจจุบันพุ่งไปแตะระดับ 14,000 ล้านดอลลาร์ขึ้นไปแล้ว

สิ่งที่แปลกประหลาดที่สุดของเคสนี้ไม่ใช่ขนาดความเสียหาย แต่คือความเงียบ LuBian ไม่เคยแถลงข่าว ไม่เคยแจ้งความต่อสาธารณะ ไม่เคยขอความช่วยเหลือจากบริษัทความปลอดภัยไซเบอร์เจ้าไหนที่มีการบันทึกไว้ สิ่งเดียวที่บริษัทนี้ทำ คือส่งข้อความเล็กๆ แนบไปกับธุรกรรม Bitcoin ไปยังกระเป๋าของผู้ขโมยกว่า 1,500 ครั้ง ครั้งละ 1.4 BTC วิงวอนขอร้องให้คืนเงิน เหมือนคนตะโกนใส่ห้องมืดที่ไม่รู้ว่ามีใครอยู่ในนั้นหรือเปล่า ไม่มีใครตอบกลับสักครั้งเดียว จากนั้น LuBian ก็ค่อยๆ ลดขนาดกิจการลงเรื่อยๆ จนเงียบหายไปจากวงการโดยไม่มีใครตั้งคำถาม

เหรียญก้อนมหึมานั้นนอนนิ่งอยู่ในกระเป๋าเดิม ไม่เคยขยับสักครั้ง เป็นเวลาเกือบห้าปีเต็ม

บทที่สอง นักโบราณคดีแห่งบล็อกเชน

เดือนสิงหาคม 2025 บริษัทวิเคราะห์บล็อกเชน Arkham Intelligence กำลังทำสิ่งที่ทำเป็นประจำ คือไล่สแกนธุรกรรมเก่าๆ บนเชนเพื่อหารูปแบบที่ผิดปกติ นี่คืองานที่คล้ายกับโบราณคดีมากกว่าจะเป็นงานสืบสวนแบบทั่วไป เพราะบล็อกเชนไม่เคยลบอะไรทิ้งเลย ทุกธุรกรรมตั้งแต่วันแรกยังอยู่ครบ รอเพียงให้มีใครสักคนมาต่อจิ๊กซอว์ให้ถูกชิ้น

สิ่งที่ Arkham เจอเมื่อไล่ตามเส้นทางของกระเป๋า LuBian คือรูปแบบที่คุ้นเคยอย่างประหลาด กุญแจส่วนตัวของกระเป๋าเหล่านั้นไม่ได้ถูกแฮกด้วยวิธีสลับซับซ้อนอะไร แต่ถูกสร้างขึ้นมาด้วยอัลกอริทึมสุ่มที่อ่อนแอ ระดับที่นักวิจัยซึ่งใช้ชื่อในวงการว่า Milky Sad ระบุว่า กุญแจของ LuBian สามารถไล่คำนวณเจอได้ด้วยคอมพิวเตอร์ทั่วไปเครื่องเดียวภายในเวลาไม่กี่วันเท่านั้น นี่คือรูปแบบความผิดพลาดเดียวกับที่เคยพบในกรณีอื่นมาก่อน เพียงแต่คราวนี้ไม่ใช่กระเป๋าของผู้ใช้รายบุคคล แต่คือกระเป๋าของเหมืองขุดระดับโลกทั้งเหมือง

รายงานของ Arkham ที่เผยแพร่วันที่ 2 สิงหาคม 2025 จุดชนวนให้เกิดคำถามใหญ่ขึ้นมาทันที ถ้ากุญแจของ LuBian อ่อนแอขนาดนั้นจริง ก็แปลว่าใครก็ตามที่มีความรู้พอและคอมพิวเตอร์ที่แรงพอ ก็สามารถไล่คำนวณเจอกุญแจเดียวกันนี้ได้เช่นกัน คำถามจึงไม่ใช่แค่ "ใครขโมยไป" แต่คือ "มีคนอื่นที่รู้เรื่องนี้มาก่อนหน้า Arkham ตั้งนานแล้วหรือเปล่า"

ไทม์ไลน์ 127,426 BTC หายจากเหมือง LuBian ธันวาคม 2020 ถึง Arkham เปิดโปงสิงหาคม 2025

บทที่สาม ชื่อที่โลกรู้จักมาก่อน Milk Sad

ย้อนกลับไปก่อนหน้ารายงานของ Arkham สองปี วงการ Bitcoin เคยเจอกับปัญหาแบบเดียวกันมาแล้วครั้งหนึ่ง เพียงแต่ตอนนั้นยังไม่มีใครรู้ว่ามันเชื่อมโยงกับเรื่องที่ใหญ่กว่ามากในอนาคต

เดือนกรกฎาคม 2023 ผู้ถือ Bitcoin สองรายสังเกตเห็นว่าเหรียญของตัวเองหายไปโดยไม่มีสาเหตุ ทั้งที่สร้าง Seed Phrase ด้วยขั้นตอนที่เชื่อว่าปลอดภัยที่สุดเท่าที่จะทำได้ กลุ่มนักวิจัยด้านความปลอดภัยรวมตัวกันสืบสวน และไล่ตามจนเจอต้นตอที่เครื่องมือชื่อ Libbitcoin Explorer หรือ bx ซึ่งเป็นโปรเจกต์เก่าแก่ที่นักพัฒนาจำนวนไม่น้อยใช้สร้าง Seed Phrase มานานหลายปี

คำสั่ง bx seed ในเวอร์ชัน 3.0.0 ถึง 3.6.0 ใช้ Mersenne Twister (mt19937) เป็นแหล่งสุ่ม ทั้งที่ไม่ได้ถูกออกแบบมาเพื่องานเข้ารหัสตั้งแต่แรก และแย่ไปกว่านั้นคือมันถูกป้อนค่าตั้งต้นด้วยแค่เวลาปัจจุบันของระบบ ผลคือพื้นที่ความเป็นไปได้ทั้งหมดเหลือแค่ราว 32 บิต นักวิจัยพิสูจน์ว่าคอมพิวเตอร์เกมมิ่งเครื่องเดียวไล่ครบได้ในเวลาไม่กี่วัน

ทีมนักวิจัยยื่นเรื่องแจ้งช่องโหว่ไปยังทีม Libbitcoin ปลายเดือนกรกฎาคม แต่ถูกโต้แย้งว่าไม่ใช่บั๊ก จนต้องยกระดับไปขอเลขอ้างอิงอย่างเป็นทางการ CVE-2023-39910 ก่อนเปิดเผยต่อสาธารณะวันที่ 8 สิงหาคม 2023 พร้อมตั้งชื่อเล่นให้ช่องโหว่นี้ว่า Milk Sad ที่มาของชื่อค่อนข้างขำร้าย เพราะ "milk" กับ "sad" คือสองคำแรกของ Seed Phrase ตัวอย่างที่ทีมวิจัยสุ่มเจอตอนทดสอบระบบ

ผลกระทบที่ยืนยันได้ตอนนั้นคือกระเป๋า Bitcoin กว่า 2,600 ใบถูกไล่เจอว่าใช้กุญแจในกลุ่มเสี่ยง มีเงินถูกขโมยไปแล้วจริงรวมมูลค่ากว่า 900,000 ดอลลาร์ ทั้ง Bitcoin และเหรียญอื่นที่ใช้เครื่องมือเดียวกันสร้างกุญแจอย่าง Ethereum, Zcash, Dogecoin และ Solana ที่สำคัญคือทีมวิจัยพบว่าไม่ได้มีแค่ bx เท่านั้นที่พลาดแบบนี้ ซอฟต์แวร์วอลเล็ตอื่นอย่าง Trust Wallet เวอร์ชันเบราว์เซอร์เอ็กซ์เทนชัน และ Cake Wallet ก็เคยมีจุดอ่อนคล้ายกันมาก่อน

ตอนนั้นโลกรู้จักแค่ชื่อ Milk Sad ยังไม่มีใครรู้ว่าอัลกอริทึมพังแบบเดียวกันเป๊ะ ได้เคยถูกใช้เก็บเกี่ยว Bitcoin ก้อนใหญ่ที่สุดก้อนหนึ่งในประวัติศาสตร์ไปแล้วตั้งแต่สามปีก่อนหน้านั้น เพียงแต่ยังไม่มีใครขุดเจอศพในสวนหลังบ้าน

บทที่สี่ เมื่อเหรียญที่หายไปโผล่มาในคดีที่ใหญ่ที่สุดในประวัติศาสตร์สหรัฐฯ

กลับมาที่กระเป๋า LuBian หลังรายงานของ Arkham เผยแพร่ นักสืบบนเชนเริ่มไล่ตามเส้นทางของเหรียญต่อ และพบว่ากระเป๋าที่ถือครอง 127,426 BTC ก้อนนั้น สุดท้ายเชื่อมโยงกับ Chen Zhi หรือชื่อเล่น Vincent นักธุรกิจชาวกัมพูชาวัย 37 ปี ผู้ก่อตั้งและประธานกลุ่มบริษัท Prince Holding Group ที่ตั้งฐานอยู่ในกัมพูชา

วันที่ 14 ตุลาคม 2025 กระทรวงยุติธรรมสหรัฐฯ (DOJ) เปิดฟ้องคดีต่อ Chen Zhi และ Prince Group อย่างเป็นทางการ เอกสารฟ้องระบุว่าเครือข่ายนี้บริหารแคมป์ scam ขนาดใหญ่ในกัมพูชา ที่มีการกักขังบังคับให้คนงานทำหน้าที่หลอกลวงเหยื่อผ่านรูปแบบที่เรียกว่า pig butchering หรือที่คนไทยเรียกกันติดปากว่า "พูชา" คือการตีสนิทเหยื่อผ่านช่องทางออนไลน์ สร้างความไว้ใจอย่างเป็นขั้นเป็นตอนเป็นเวลาหลายสัปดาห์หรือหลายเดือน ก่อนหลอกให้ลงทุนในแพลตฟอร์มคริปโตปลอมจนหมดตัว เอกสารของ DOJ ระบุว่าช่วงพีคที่สุดเครือข่ายนี้ทำเงินได้สูงถึงวันละ 30 ล้านดอลลาร์

พร้อมกับการฟ้องคดี DOJ ยื่นคำร้องยึดทรัพย์มูลค่ารวมกว่า 14,000-15,000 ล้านดอลลาร์ ซึ่งรวมถึง Bitcoin จำนวน 127,271 BTC ที่อยู่ในความครอบครองของรัฐบาลสหรัฐฯ อยู่แล้วในขณะนั้น ตัวเลขนี้ใกล้เคียงกับยอดที่ LuBian สูญเสียไปในปี 2020 อย่างมีนัยสำคัญ จนแทบเป็นไปไม่ได้ที่จะเป็นเรื่องบังเอิญ และถูกจัดว่าเป็นการยึดทรัพย์ครั้งใหญ่ที่สุดในประวัติศาสตร์สหรัฐฯ

เส้นทางเหรียญจากเหมือง LuBian สู่เครือข่าย Prince Group และคดียึดทรัพย์ของ DOJ ภาพจาก Arkham Intelligence แสดงเส้นทางเงินจากกระเป๋า LuBian ผ่านที่อยู่ผู้ขโมย ไปยังที่อยู่ของรัฐบาลสหรัฐฯ

ภาพ: การวิเคราะห์เส้นทางธุรกรรมบนเชนโดย Arkham Intelligence เผยแพร่ครั้งแรกทางเพจ Blockchain Review แสดงเส้นทางเงินจากกระเป๋า LuBian ไหลผ่านที่อยู่ที่ระบุว่าเป็นผู้ขโมย ก่อนไปจบที่ที่อยู่ที่ระบุว่าเป็นของรัฐบาลสหรัฐฯ พร้อมมูลค่าจริงที่ปรากฏบนเชน

บทที่ห้า คำถามที่ยังไม่มีใครกล้าตอบ

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

แต่มีรายละเอียดหนึ่งที่ทำให้เรื่องทั้งหมดพลิกไปเป็นคนละทาง คำแถลงอย่างเป็นทางการของ DOJ ไม่ได้พูดถึง LuBian เลยแม้แต่คำเดียว ทั้งที่ตัวเลข BTC ที่ยึดได้กับตัวเลขที่ LuBian สูญเสียไปนั้นตรงกันแทบเป๊ะ DOJ อธิบายเพียงว่าเหรียญเหล่านี้เป็นทรัพย์สินที่ได้จากการฟอกเงินของเครือข่าย Chen Zhi โดยไม่ได้ลงรายละเอียดเลยว่ากลุ่มนี้ได้เหรียญจำนวนมหาศาลขนาดนั้นมาด้วยวิธีไหน หรือได้มาตั้งแต่เมื่อไหร่

ความเงียบตรงจุดนี้เองที่จุดชนวนให้ ศูนย์ตอบสนองฉุกเฉินไวรัสคอมพิวเตอร์แห่งชาติจีน (CVERC) ซึ่งเป็นหน่วยงานความมั่นคงไซเบอร์ของรัฐบาลจีน ออกรายงานทางเทคนิคกล่าวหาสหรัฐฯ ว่า แท้จริงแล้วเหตุการณ์ LuBian ปี 2020 อาจไม่ใช่การโจรกรรมโดยอาชญากรทั่วไป แต่เป็นปฏิบัติการแฮกที่มีรัฐสหรัฐฯ อยู่เบื้องหลัง ตั้งแต่แรก ไม่ใช่แค่การยึดทรัพย์สินที่ได้จากอาชญากรรมตามกระบวนการยุติธรรมปกติอย่างที่แถลงต่อสาธารณะ รายงานตั้งข้อสังเกตไว้ตรงๆ ว่า ถ้าเรื่องนี้เป็นแค่การไล่ตามเส้นทางเงินของแก๊งอาชญากรรมธรรมดา เหตุใด DOJ จึงไม่กล่าวถึงจุดเริ่มต้นของเหรียญเหล่านี้เลยแม้แต่ประโยคเดียว

ฝั่งสหรัฐฯ ปฏิเสธข้อกล่าวหานี้ แต่ก็ยังไม่มีคำชี้แจงทางเทคนิคเพิ่มเติมต่อสาธารณะว่ารัฐบาลได้ Bitcoin ก้อนนี้มาอย่างไรกันแน่ และที่สำคัญที่สุดคือเรื่องนี้ยังไม่เคยผ่านการไต่สวนในชั้นศาลใดๆ ทั้งสิ้น ข้อกล่าวหาของทั้งสองฝั่งยังคงเป็นเพียงข้อกล่าวหา ไม่ใช่ข้อเท็จจริงที่พิสูจน์แล้วในทางกฎหมาย

สิ่งที่ยืนยันได้แน่ชัดในตอนนี้มีอยู่แค่สามอย่าง หนึ่ง Bitcoin ก้อนนี้มีต้นตอมาจากช่องโหว่ประเภท weak entropy แบบเดียวกับที่ Milk Sad เคยเปิดโปงไว้ สอง เหรียญหายไปจาก LuBian อย่างเงียบเชียบตั้งแต่ปี 2020 โดยไม่มีใครรู้ตัวจนถึงปี 2025 และสาม สุดท้ายเหรียญก้อนเดียวกันนี้ก็ไปโผล่อยู่ในความครอบครองของรัฐบาลสหรัฐฯ ผ่านคดีที่พัวพันกับเครือข่ายพูชาข้ามชาติที่ใหญ่ที่สุดเท่าที่เคยมีการดำเนินคดีมา ส่วนคำถามว่า "ใครกันแน่ที่กดปุ่มเดากุญแจก่อน" ยังคงเป็นปริศนาที่รอคำตอบอยู่

บทที่หก ประวัติศาสตร์ย้อนกลับมาซ้ำรอยในกระเป๋าฮาร์ดแวร์

หลายคนอาจคิดว่าเรื่อง weak entropy เป็นแค่ปัญหาของซอฟต์แวร์วอลเล็ตเก่าๆ ที่ไม่มีใครใช้แล้ว หรือเป็นแค่เรื่องของอดีตที่ผ่านไปแล้ว แต่ต้นเดือนกรกฎาคม 2026 บริษัทวิจัยความปลอดภัย Coinspect เผยแพร่งานวิจัยชื่อ Ill Bloom (ภายหลังได้เลขอ้างอิง CVE-2026-71851) ที่พบช่องโหว่ weak-PRNG แบบเดียวกันซ้ำอีกครั้งในซอฟต์แวร์วอลเล็ต 5 เจ้าที่ยังมีคนใช้งานอยู่จริงในปัจจุบัน สร้างความเสียหายรวมประมาณ 5 ล้านดอลลาร์ นับเป็นสัญญาณเตือนล่วงหน้าเพียงไม่กี่สัปดาห์ ก่อนเรื่องใหญ่กว่าจะระเบิดขึ้น

และนั่นพากลับมาสู่คืนวันที่ 30 กรกฎาคม 2026 ที่เล่าไว้ตอนเปิดเรื่อง เวลา 13:19 น. ผู้ใช้รายหนึ่งโพสต์ข้อความสั้นๆ ลงใน Reddit บอกว่ากระเป๋า Coldcard ของตัวเองถูกดูดเงินหมดโดยไม่ทราบสาเหตุ ตอนนั้นยังไม่มีใครรู้ว่านี่คือจุดเริ่มต้นของอะไร ภายในไม่กี่ชั่วโมงถัดมา นักวิจัยความปลอดภัยหลายคนเริ่มเทียบโพสต์ของกันและกัน แล้วยืนยันตรงกันเมื่อเวลา 17:35 น. ว่านี่ไม่ใช่เคสเดี่ยว แต่เป็นปัญหาเชิงระบบที่กระทบผู้ใช้จำนวนมาก ช่วงแรก CEO ของ Coinkite ที่ใช้ชื่อ NVK เข้าใจผิดว่าเป็นเคส Seed หลุดจากภายนอกอุปกรณ์ ก่อนจะแก้ไขความเข้าใจในเวลาต่อมา เมื่อทีมวิศวกรไล่โค้ดจนเจอต้นตอที่แท้จริง

สิ่งที่พวกเขาเจอ ทำให้ทุกคนในทีมต้องนิ่งไปพักหนึ่ง เพราะต้นตอของบั๊กนี้ไม่ได้เพิ่งเกิดขึ้นเมื่อไม่กี่วันก่อน แต่ฝังตัวเงียบๆ อยู่ในโค้ดมานานกว่าห้าปีแล้ว

ย้อนกลับไปเดือนมีนาคม 2021 ตอนที่ Coinkite อัปเกรดไลบรารีชื่อ libngu เพื่อเปลี่ยนไปใช้ libsecp256k1 ในการคำนวณ ระหว่างการอัปเกรดนั้น ฟังก์ชันสร้าง Seed ถูกเปลี่ยนไปเรียกใช้ ngu.random.bytes() ซึ่งควรจะชี้ไปที่ ชิป TRNG (True Random Number Generator) บนฮาร์ดแวร์โดยตรง แต่สัญลักษณ์ rng_get() ในโค้ดกลับถูกผูกไว้กับ Yasmarang ซึ่งเป็น PRNG แบบซอฟต์แวร์ล้วนๆ ที่ MicroPython ใช้งานทั่วไป ไม่ได้ออกแบบมาเพื่อความปลอดภัยด้านการเข้ารหัสแต่อย่างใด

จุดที่ทำให้บั๊กนี้หลุดรอดการตรวจสอบมาได้นานถึงห้าปีคือ ฟังก์ชันทั้งสองตัวมีรูปแบบ (signature) เหมือนกันทุกประการ ทำให้ตอน compile โค้ดผ่านฉลุยไม่มี error เตือนเลยแม้แต่บรรทัดเดียว ยิ่งไปกว่านั้น คำสั่งพรีโปรเซสเซอร์ที่ควรใช้ #if เพื่อเช็คค่าของ flag กลับใช้ #ifndef ซึ่งเช็คแค่ว่า flag ถูกนิยามไว้หรือยัง โดยไม่สนใจว่าค่าจะเป็นอะไร เมื่อ macro ถูกกำหนดเป็นศูนย์ในบางเงื่อนไข ตัว build ก็ยังคงผ่านสำเร็จเหมือนไม่มีอะไรผิดปกติเลยสักนิด เป็นความผิดพลาดระดับตัวอักษรเดียวที่ซ่อนอยู่ในภูเขาโค้ด รอวันที่จะถูกค้นพบ

ผลลัพธ์คือ อุปกรณ์ Coldcard รุ่น Mk2/Mk3 บนเฟิร์มแวร์ 4.0.1 ถึง 4.1.9 มีพื้นที่ความเป็นไปได้ของกุญแจเหลือแค่ราว 40 บิตเท่านั้น ส่วนรุ่น Mk4, Mk5 และ Q แม้จะยังได้ entropy เสริมจากชิปความปลอดภัย SE1/SE2 อยู่บ้าง ทำให้สถานการณ์ไม่เลวร้ายเท่ารุ่นเก่า (ประเมินไว้ที่ราว 72 บิต) แต่ก็ยังต่ำกว่ามาตรฐาน 128 บิตขึ้นไปที่ควรจะเป็นอย่างมีนัยสำคัญเช่นกัน

Coinkite ออกประกาศแจ้งเตือนอย่างเป็นทางการภายในคืนวันที่ 30 กรกฎาคม และปล่อยเฟิร์มแวร์ฉุกเฉินในวันถัดมาคือ 31 กรกฎาคม (เวอร์ชัน 5.6.0 สำหรับ Mk4/Mk5 และ 1.5.0Q สำหรับรุ่น Q) แต่ระหว่างนั้นการโจมตีก็ทยอยเกิดต่อเนื่องเป็นสามระลอก จนยอดความเสียหายรวมพุ่งไปถึง 1,367.05 BTC หรือราว 88.6 ล้านดอลลาร์ จากที่อยู่ทั้งหมด 4,585 แห่ง

จุดหนึ่งที่ Coinkite ย้ำหนักมากในคำแนะนำที่ตามมาคือ ผู้ใช้ทั้ง 500 กระเป๋าที่โดนดูดในระลอกแรกไม่มีรายไหนตั้งค่า BIP-39 Passphrase เลยสักราย เพราะ Passphrase คือคำหรือวลีเพิ่มเติมที่ผู้ใช้เป็นคนคิดและพิมพ์เอง ไม่เคยผ่านการสุ่มจากตัวอุปกรณ์แม้แต่น้อย ต่อให้ตัว RNG ในเครื่องพังสนิท กุญแจสุดท้ายที่ได้จริงก็ยังผสมกับสิ่งที่อุปกรณ์ไม่มีทางรู้หรือเดาได้อยู่ดี ผู้ใช้ที่ตั้ง Passphrase ไว้จึงรอดพ้นจากการโจมตีรอบนี้ไปทั้งหมด เหมือนเป็นชั้นเกราะที่ไม่มีใครคาดคิดว่าจะสำคัญขนาดนี้ จนกระทั่งวันที่มันถูกทดสอบจริง

Coinkite เองยังหยิบยกเคส Milk Sad และเคส Randstorm (ช่องโหว่ในวอลเล็ตบนเบราว์เซอร์ยุค 2011-2015) ขึ้นมาเป็นบทเรียนอ้างอิงตอนอธิบายเหตุการณ์ของตัวเอง เพราะรู้ดีว่านี่ไม่ใช่ครั้งแรกที่บั๊กประเภทนี้เกิดขึ้น และคงไม่ใช่ครั้งสุดท้าย

ไดอะแกรมอธิบายบั๊ก Coldcard ที่ ngu.random.bytes() ชี้ไป PRNG ซอฟต์แวร์ Yasmarang แทนชิปสุ่มฮาร์ดแวร์จริง

เรียงเส้นเวลาทั้งหมดให้เห็นภาพเดียวกัน

ลองเรียงทุกเคสที่เล่ามาต่อกันดูอีกครั้งจะเห็นภาพชัดขึ้นมาก

  • ธันวาคม 2020 เหมือง LuBian สูญเสีย 127,426 BTC จากกุญแจที่สร้างด้วยอัลกอริทึมอ่อนแอ เรื่องนี้เงียบสนิทมาเกือบห้าปี
  • สิงหาคม 2023 ช่องโหว่ bx seed ในซอฟต์แวร์ Libbitcoin Explorer ถูกตั้งชื่อว่า Milk Sad สร้างความเสียหายกว่า 900,000 ดอลลาร์ นี่คือครั้งแรกที่โลกรู้จักรูปแบบบั๊กนี้อย่างเป็นทางการ
  • สิงหาคม 2025 Arkham เผยแพร่รายงานที่เชื่อมโยงเหรียญของ LuBian เข้ากับอัลกอริทึมอ่อนแอแบบเดียวกัน หลังเงียบหายไปนานเกือบห้าปี
  • ตุลาคม 2025 DOJ ยึด Bitcoin จำนวนใกล้เคียงกับที่ LuBian สูญเสียไปแบบแทบเป๊ะ ผูกเข้ากับคดีแก๊งพูชากัมพูชาของ Chen Zhi กลายเป็นการยึดทรัพย์ครั้งใหญ่ที่สุดในประวัติศาสตร์สหรัฐฯ โดยไม่เคยกล่าวถึง LuBian แม้แต่คำเดียว
  • ต้นกรกฎาคม 2026 Ill Bloom เปิดโปงบั๊กแบบเดียวกันอีกครั้งในซอฟต์แวร์วอลเล็ต 5 เจ้า
  • 30-31 กรกฎาคม 2026 Coldcard ฮาร์ดแวร์วอลเล็ตชื่อดัง สูญเสียกว่า 88.6 ล้านดอลลาร์จากบั๊กเดียวกัน ที่ซ่อนอยู่เงียบๆ มานานกว่าห้าปีเช่นกัน

ตัวเลขห้าปีปรากฏขึ้นซ้ำสองครั้งในเรื่องนี้อย่างน่าประหลาดใจ ห้าปีที่ LuBian เงียบก่อนถูกเปิดโปง และห้าปีที่บั๊กของ Coldcard ซ่อนตัวอยู่ในโค้ดก่อนถูกใช้งานจริง ไม่มีใครยืนยันได้ว่านี่คือความบังเอิญหรือคือธรรมชาติของบั๊กประเภทนี้ ที่ต้องใช้เวลานานขนาดนั้นกว่าใครสักคนจะสังเกตเห็น

ทุกเคสมีจุดร่วมเดียวกันคือ CSPRNG ที่ควรใช้งานจริง ถูกแทนที่ด้วยแหล่งความสุ่มที่คาดเดาได้ อย่างเงียบๆ ไม่มี error ไม่มีคำเตือน ไม่มีอะไรผิดปกติให้เห็นเลยจากภายนอก ต่างกันแค่ว่าใครเป็นคนพบก่อน และพบเร็วแค่ไหน ที่น่าคิดยิ่งกว่านั้นคือ หลายเคสไม่ได้เกิดจากความตั้งใจร้ายของนักพัฒนาเลยด้วยซ้ำ อย่างเคส Coldcard คือบั๊กจากการตั้งค่า build เพียงจุดเดียวที่หลุดผ่านการตรวจโค้ดมานานหลายปี เพราะระบบตรวจสอบไม่ได้ถูกออกแบบมาให้จับความผิดพลาดแบบนี้ได้ตั้งแต่แรก

บทส่งท้าย คำถามที่ยังตอบไม่ได้

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

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

สิ่งที่พอพูดได้แน่ๆ คืออัลกอริทึมอ่อนแอแบบเดียวกับที่ทำให้ LuBian เสียเหรียญไปทั้งเหมืองในปี 2020 เพิ่งพิสูจน์ตัวเองอีกครั้งว่ายังใช้งานได้จริงกับ Coldcard ในปี 2026 ห่างกันเกือบหกปี คนละบริบท คนละแพลตฟอร์ม แต่รากบั๊กเดียวกันเป๊ะ คำถามที่ควรถามต่อจากนี้จึงไม่ใช่ "จะเกิดอีกไหม" เพราะคำตอบค่อนข้างชัดว่าเกิดแน่ แต่เป็น "ตอนนี้มีกระเป๋าเงินอีกกี่ใบที่นอนเงียบอยู่ในสภาพเดียวกัน โดยที่เจ้าของยังไม่รู้ตัว"

ถ้าให้พูดตรงๆ ผมคิดว่าคำแนะนำที่ทำได้จริงมีอยู่แค่ไม่กี่ข้อ อัปเดตเฟิร์มแวร์เสมอ อย่าไว้ใจเครื่องมือสร้าง seed ที่ไม่มีใครดูแลต่อแล้ว และถ้าจะให้ชัวร์สุด ตั้ง BIP-39 Passphrase เพิ่มอีกชั้น เพราะนั่นเป็นชั้นเดียวในเรื่องนี้ที่ไม่ต้องพึ่ง RNG ของใครเลย ส่วนคำถามใหญ่เรื่องใครขโมยเหรียญกัมพูชาไปก่อนใคร คงต้องรอดูกันต่อว่าชั้นศาลหรือหลักฐานบนเชนจะไล่ทันความจริงได้เร็วแค่ไหน

บทความทั้งหมด