全網最深入的比特幣生態防釣魚指南(Taproot 升級最新版)
作者:OneKey 中文,來源:作者推特@OneKeyCN
2021年末,Taproot 升級在第 709,632 個區塊生效。那時候的人們,沉浸在以太坊 NFT 的熱潮之中,無人知曉這將是 BTC 最「造富」的一次升級。
Taproot 與 Segwit 升級一起爲 BTC 網絡引入了新特性,也讓區塊數據間接擴容(相當於 1 MB 到 4 MB),成爲了 2023 年至今 BTC 生態爆發的導火索。Taproot Assets、 Ordinals BRC-20、 ARC-20、 Runes 等新資產湧現,也讓 Taproot 的轉账採用率基本一直保持在一半甚至以上。
然而,新資產與新特性的引入也伴隨着新的安全挑战。
比特幣生態有着與以太坊生態不一樣的底層模型。目前 BTC 新資產生態這種「好多東西都有待建設」和「理解門檻偏高」的場面,相信讓很多用戶都感到興奮——畢竟這往往意味着「暴富」的機會。
但這也會對用戶的安全操作意識提出了新的要求,否則很容易不明不白地就丟幣。甚至還出現了如之前 Atomic 市場錯誤使用籤名類型導致黑客攻擊的事故。
下文 OneKey 深入淺出告訴大家如何在安全基礎設施有限的 BTC 生態,最大程度保護資產安全,預防釣魚。
Taproot 升級的具體影響簡析
在講述具體的防釣魚措施之前,我們需要鋪墊下 Taproot 升級的影響。
除了此前提到間接促進了 BTC 多資產生態的繁榮之外,在 BTC 交易底層其實也發生了很大的變化,主要是兩個:Schnorr 籤名和 MAST 技術。而這兩者結合 PSBT (部分籤名交易)之後,便讓黑客釣魚的發揮空間更多了。
一個是 Schnorr 籤名。沒錯,這次升級把白皮書裏的 ECDSA 籤名換掉了。這個籤名的技術特性是多個籤名或者公鑰聚合爲一個。以往需要多個籤名一次次確認的工作,現在只需要驗證一次,直接縮小了籤名的佔用空間。
一個是 MAST 技術。如果說前者是聚合籤名,那么 MAST 就是用來「聚合」多個腳本(對於腳本,你可以理解爲比特幣的有限「智能合約」)。同時,提交驗證解鎖花費的時候,也只需要驗證花費條件其中的一個。很多條件的復雜的腳本的佔用空間可以大大縮小。
這兩個技術對隱私性的影響是最大的,同時也隱含了安全風險的空間。
對於轉账記錄,升級後所有的 UTXO 轉账看起來都一樣。在 Mempool 裏面轉账類型都顯示爲 P2TR ,地址都是 bc1p 开頭相同長度的地址。
在以前,你可以很輕松區分轉账到普通地址(P2PKH / P2WPKH)和轉账到腳本地址(P2SH / P2WSH)的區別。
現在觀察其他人花費掉一個 UTXO 之前,你根本無法分辨轉账到普通地址與轉账到腳本地址的區別。
對於腳本,礦工驗證也只需要暴露腳本的一個花費條件,其他的分支腳本,外界不得而知。
預防比特幣生態新資產釣魚的 5 個心術
顯然,目前 BTC 一層的資產生態的安全基礎設施遠沒有以太坊強大,有許多東西需要用戶先行理解學習。
同時,釣魚的原理也和以太坊不太一樣,很多釣魚攻擊在被發現之前可能整個市場都不太了解。例如 Atomic 市場的*SIGNHASH_NONE 籤名安全事故,Unisat / Xverse 錢包也是後來才加入的安全提醒。
(1)第一個心術:老生常談的加密安全基本功。
也就是注意私鑰離线儲存安全、注意是否爲信任的網址和注意保護電腦不要中招木馬病毒等等。
可是,在 FOMO 的市場中,新項目可能尚未形成信任共識就會有用戶想要去「衝」,這時候接下來的幾個心術就尤爲重要。
(2)第二個心術:明確輸入輸出。
以太坊有「盲籤名」。也就是說在籤名的時候,如果錢包不解析,你只能看到一段亂七八糟的字符,無法預知籤名之後資產會發生什么變化。這也就造成了丟幣的風險。
而在比特幣中,一定會明確一個交易的輸入和輸出,以及輸入輸出的對應的轉账地址。(也就是:「從哪來,來了多少幣」和「到哪裏去,去了多少幣」。)
籤名的時候,不論是否使用 PSBT,交易前後會發生的變化,是一定會明確地顯示在錢包中。所以核對輸入輸出是否符合自己的意圖預期,非常重要。
例如假如黑客想要一次性釣走你的所有 Ordinals 銘文 NFT,在交易的輸入(INPUT)中,一定會顯示你的所有銘文 NFT 都被放進去了。同時輸出(OUTPUT)中會顯示他們都去到了陌生的地址裏。
以使用 Unisat 在 MagicEden 掛單 Ordinals 銘文 NFT 爲例子。當你在 MagiEden 市場掛單一個或者多個銘文 NFT 時,彈出的 PSBT 籤名請求會顯示交易的輸入(INPUT)是你的某一個銘文或者多個銘文,輸出則會顯示,一旦交易成功,你會收到多少的比特幣。
(3)第三個心術:籤名類型要小心。
你可以在這裏看到比特幣目前的籤名類型的科普(https://btcstudy.org/2021/11/09/bitcoin-signature-types-sighash/)。
這裏面唯一需要注意的籤名類型就是 SIGHASH_NONE(0x02)和 SIGHASH_NONE | SIGHASH_ANYONECANPAY(0x82)。這兩個都意味着你「只對交易的輸入籤名,不管交易的輸出」。
對於交易銘文資產而言,安全的籤名類型應該是SIGHASH_SINGLE | SIGHASH_ANYONECANPAY(0x83),能夠通過 PSBT 免信任構造一個完整的交易。這也是 MagicEden、OKX 等主流銘文交易市場使用的籤名類型。
以 Atomic 市場之前錯誤使用 SIGHASH_NONE | SIGHASH_ANYONECANPAY(0x82) 籤名爲例。
當你掛單 Atom 銘文資產的時候,你在籤名的時候確實看到了正確的輸入和輸出,即「規定了我掛單的資產在輸入裏,輸出也有我能收到的錢」。
但是,黑客完全可以拿到這個 PSBT 修改輸出,提交的交易也會被礦工打包,最終讓你收不到掛單的錢。總之是因爲使用的籤名類型只對輸入部分籤名,最終導致「零元購」。
好在,目前主流的 BTC 生態錢包,比如 Unisat 和 Xverse,已經都支持了高亮提醒或者禁止 SIGHASH_NONE 類的籤名類型。如果看到了相關的籤名類型的提示,在非特殊用途的情況下,不要使用這種籤名。
(4)第四個心術:使用腳本要小心。
假如某個項目或者平台,需要你轉账資產到某個腳本地址,你要格外小心。在籤名的時候,你會看到你的資產在輸出中去到了一個陌生的地址。
根據此前的內容你會知道,Taproot 升級後,腳本地址和用戶私鑰地址是一樣的。
假如盜竊者試圖用私鑰地址欺騙,收到的資產是可以直接轉走的。
假如是真的腳本地址。那要看他們是否公开了腳本地址的全部內容。假如是公布不完整的內容,盡管在使用的時候用戶可以正常地籤名操作轉移資產,也有可能隱藏了一個或者多個的惡意 UTXO 解鎖條件。可能會在未來某一天突然「收網」轉走全部的 UTXO 資產。
即使他們开源了整個腳本的內容,目前市面上的錢包也並沒有驗證腳本 MAST 完整性和輸出地址的對應性的功能,需要懂技術的用戶自行使用 Taproot 的算法確認。或者十分信任這個項目和團隊。
好在對於目前的應用,各種銘文資產的交易都不需要使用復雜的腳本,使用 PSBT(部分籤名交易)來規定好輸入和輸出即可。
但是在未來的 BTC L2 操作中,大概率會涉及到復雜多條件的比特幣腳本。例如 Babylon @babylon_chain 的比特幣質押腳本中,就有相對復雜一些的罰沒邏輯和解鎖邏輯。
假如你要使用這種比特幣腳本的原生質押方式,此時开源腳本並驗證安全性、完整性就尤爲重要,否則就需要用戶絕對信任項目方。
(5)第五個心術:關注安全動態,注意防患於未然。
關注安全領域的頭部账號,保證自己能跟上最新釣魚手法,第一時間獲得警告。諸如 SlowMist 的余弦 @evilcos 、Go Plus 安全官方 @GoPlusSecurity 、Scam Sniffer @realScamSniffer 、我們 OneKey 官方账號 @OneKeyCN 。
關於防患於未然,我們可以遷移其他地方的安全經驗。
例如,在以太坊中,有這樣一種釣魚方式——即構造頭尾相似的地址,導致用戶在歷史記錄中錯誤復制而丟失資產。而在構造 BTC 籤名交易的時候,也有可能因爲沒有清楚地檢查輸出的地址而踩到坑。
在 Unisat / Xverse 等主流 BTC 生態錢包中,Taproot 地址展示爲 bc1px…e9wh0 (例),而 bc1p 爲 Taproot 地址的固定开頭。
這相當於只展示了 6 個字母爲用於確認。相對有常用地址通訊錄功能、基本都展示 10 位以上的以太坊的錢包標配,顯然還不夠。
這意味着黑客有不小的可能,去通過生成匹配的地址進行定制化釣魚(盡管目前在比特幣上還不多)。
所以如果做的絕一些,防患於未然,應要核對盡可能完整的地址。
總之......
Study Bitcoin.
Study Bitcoin Security.
隨着 Taproot 爲比特幣引入新資產新場景,我們也必須學習新形式的安全威脅,尤其是不斷演化的釣魚技術。
尤其是現在生態基礎設施不完善的情況,即使是誤操作丟幣、燒幣都時有發生,更別說精心策劃的釣魚了。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。