年初寫過一篇文章談「隨機對資安的重要性」,最近 Coldcard 冷錢包被破解新聞,為它補上超強佐證。

Coldcard 在某段期間生產的比特幣冷錢包因為,程式誤使用不夠安全的軟體偽隨機數產生器 (PRNG),導致駭客可依據縮小暴力破解私密金鑰的計算範圍,從而在 41 分鐘內破解了 1,196 個錢包,大批盜走超過七千萬美元的比特幣。

當今大家每天在用的數位憑證、線上交易、電子簽章、區塊鏈加密貨幣,背後全靠公私鑰演算法。其之所以難被攻破,一大部分來自作為祕密金鑰的一長串數字為隨機生成,只要保密得宜(例如鎖在晶片裡永遠不傳出來),攻擊者想破解只能靠猜,逐一試遍所有可能組合,演算法後面的數學難題讓你就算擁有全世界所有 CPU/GPU,照樣算到宇宙毁滅也算不完。(量子電腦出現改變這個前題,某些原本要算幾萬年的數學難題變成可在 24 小時內解開,但這又是另外一個故事了)

網路錢包裡的加密貨幣價值連城,但一向只認私鑰不認人,因此錢包的私密金鑰自然讓駭客垂涎三尺,一旦能猜對,錢包裡的錢任你拿。

保管錢包私鑰可以寫在紙上、存進電腦、交由交易所保管,但如果怕紙不見被偷、電腦被駭中木馬、交易所被搶,一個更保險的選擇是實體冷錢包,將私鑰永遠鎖在專屬硬體裡,社絕被複製或竊取的風險。

這回的 Coldcard 被破解,演算法及運作原理本身沒問題,問題出在 Coldcard 某個版本起的程式碼被改壞,生成金鑰時原本該用硬體隨機數產生器確保 2256 的隨機範圍(術語叫有效熵),不小心被改成非密碼學安全的軟體隨機數產生器,只由「晶片 UID (32bit) + 系統計時器 (8萬種可能) + 生成時間」決定隨機性,讓隨機範圍掉到只剩 240,用現代 GPU 破解完全不是難題,而駭客不需要拿到冷錢包,也不必知道主人是誰住在哪裡,單憑網路可查到該錢包的公鑰就能試著破解,一旦推算出私鑰,便能假冒本人把加密貨幣轉走。

Coldcard 冷錢包主人沒有犯任何錯,錢包也好好的躺在抽屜/保險箱裡,全因廠商有一行程式庫路徑指錯,人在家中坐,錢往雲端流。而且即便是更新了韌體,原本的錢包由於金鑰不安全,必須重新建立新錢包把錢移過去才算解除危機。

而 AI 在這次事件也軋了一角。由於 Coldcard 的 Firmware 程式碼是開源的,因此有人懷疑攻擊者是用 AI 分析了歷史記錄找到這段漏洞。而有趣的是,Coldcard 說自己在事件發生前幾週前才用最好的 AI 模型分析過程式碼,沒發現這個漏洞 (我猜可能只掃了最新版)。

雖說 Security by Obscurity (企圖靠不公開演算法/程式讓人猜不到來實現安全) 不可取 (像是之前悠遊卡被高中生破解的案例),但如果當初 Coldcard 沒大方開源,這次的攻擊要成功的難度會再上升。但不開源又會被人質疑產品的安全性,說你遮遮掩掩不願接受公開檢驗,肯定有鬼... 嘿,這真是個難題。

【延伸閱讀】


Comments

# by 小雞

2的40次方符號大小反了

# by Jeffrey

to 小雞,謝,已更正。

Post a comment