比特派文浩與你探討多重簽名及開源錢包
WhaleEX鯨交所於3月25上線直播功能。首期鯨直播邀請的嘉賓是文浩。文浩是比太錢包創始人、比特派錢包開發者。其比太錢包是一個被bitcoin.org官方推薦的錢包。
鯨交所:最近看到比特派提議將每年的3月22日定為“幣圈多簽日”,請問多重簽名是不是可以一勞永逸的解決錢包安全問題?
文總:多重簽名是從比特幣誕生之後沒多久,比特幣用的人越來越多的時候,核心開發者們設想出來的沒有腳本的P2SH。它能夠設計出來為用戶提供安全的、幾個人共同簽名才能花一筆錢的機制。
它會生成一個比特幣地址,這個地址跟傳統的比特幣地址很像。差別在於標準的比特幣地址是1開頭的,它們是3開頭的,然後你往這個地址上發幣,比如假設是三個人共同管理的地址,最終得由這三個人一起同意才能把花掉這個幣。
如果是2-3的多重簽名,三個人中有兩個人簽名才能夠花這個錢。所以它主要是多重簽名的模式。從比特幣誕生到開始多重簽名,很多人就認為這個會大大改變比特幣資產安全的管理狀況,所以在2015年的時候,大家稱其為多重簽名年。
然後從比特幣開始再到後邊的更多區塊鏈資產,像以太坊也可以做多重簽名。因為以太仿是圖靈完備的智能合約,所以說很多人可以在上面寫自己想要的功能的多重簽名功能,你可以寫出更複雜的合約。 EOS是原生的系統支持多重簽名。
我們提出多重簽名日是因為從多重簽名誕生至今已經有很多年頭,剛才我提到的多重簽名年到現在也有四五年以上的時間,但實際上直到今天仍然有太多的企業和組織,包括幣圈的交易所,存幣平台,雲算力等,仍然將大量的資產存儲在單簽名的地址上,地址是冷是熱我們不清楚。但總體來講,通過區塊鏈上的交易,可以看出這類地址都是一個人掌管私鑰,這就面臨非常高的安全風險和道德風險。
比較巧的是,從昨天到今天我們都知道龍網,再到後續的兩三個交易所,到現在為止已經有三四個交易所被盜。
過去的24個小時裡,交易所報丟幣,到底真丟假丟不清楚。但這幾家交易所連報告丟幣的文案和方案都是一樣的,甚至於內容都是一樣。
這幾家交易所真實情況我們不得而知,但存在這幾家交易所裡的這些用戶將面臨巨大的損失。而大家都知道,實際上都有大量的幣是在單簽名地址上,單個人掌管資產,所以安全風險和道德風險都是很高的,也就是說你沒法證明說這個資產是被盜的還是監守自盜。
甚至一些大型交易所,也依然存在上述情況。這情況指的是什麼意思?我們在鏈上可以看到大量的、價值過億的單簽名地址。我前幾天幫一個幣圈朋友跟踪他們丟的幣的交易記錄時,發現一部分幣流向了一些大型交易所,其USDT的地址都是單簽名地址。
但需要說的是,多重簽名只是一種資產的管理方案。很多人會有一種誤區,說經過多重簽名,我們是不是可以一下子就可以徹底解決問題,我們所有人只要有了多重簽名,幣就永遠不會丟了,這個其實是不對的。
這裡再次強調一點,安全的第一位不是多簽,多簽是第二位的,安全的第一位是冷。無論是對於個人和企業,大額存儲資產,首先你要做的是冷,也就是說你要使用冷錢包或者足夠安全的硬件錢包來管理資產。
多簽只是基於冷的前提下,多人共管資產的解決方案。每當發生大型的黑客盜幣事件的時候,總會有很多人跳出來說,為什麼不用多重簽名?
其實,這種觀點是不對的,被盜幣首先是因為不是冷錢包,至少是不夠冷,像Bitfinex用了Bitgo的多重簽名方案,也被盜了12萬個比特幣。他們的問題是採用了錯誤的多重簽名方案,把本來是冷錢包的方案改成了跟Bitgo合作的熱錢包多重簽名方案,結果被黑客輕鬆盜取了12萬個比特幣。
有諷刺意味的是,Bitfinex將用戶的幣存在了和Bitgo合作的、熱的多重簽名地址中,而把自己的利潤(3萬多個比特幣)則是存放在了自己的冷多重簽名地址,自己的幣沒丟,用戶的幣卻丟了。
從這個例子中可以看出,大額多重簽名存儲,首先得是冷錢包,其次才是合理的採用多重簽名方案,這是Bitfinex花了12萬個比特幣所買來的教訓,理應引起所有的企業和個人的重視。
所以,正確的做法是先要做到冷錢包,比如說使用比特護盾bithd.com這類開源的、安全的硬件錢包,然後再根據企業自己的情況來設計合理的多重簽名方案。
比如說,這三個人使用2/3來管理1000個比特幣,那五個人使用3/5來管理4000個以太坊,另外七個人使用3/7來管理1000000個USDT,諸如此類。
記住,每個多重簽名的參與者都應該是冷錢包才對,既然已經決定要用多重簽名這類複雜邏輯來管理大額資產,為何不確保每個參與者都是冷錢包呢?
以上是給大家解釋我們為什麼會發起多重簽名日,這個意義就是3月22號,我們認為可以拿來當多重簽名日。同時,多重簽名不能一勞永逸的解決錢包安全問題。
02
鯨交所:謝謝浩哥的分享,鯨交所也啟用了智能合約賬戶多重簽名機制,小鯨覺得多簽值得被多多的倡導和實踐,幣圈多簽日是一個很棒的想法,關於多重簽名,我們再深入的聊一聊。
那麼關於比特幣、以太仿、EOS、USDT等都有多重簽名,請問浩哥,這有什麼相同和不同嗎?
文浩:首先從本質上來講的話,比特、以太、EOS等本質上來看,其多重簽名功能本質沒什麼區別,都是想解決多人共管資產的問題,因此目的都是一樣。
如果大家用過一些對公賬戶或者是銀行里多人管理賬戶的話,應該知道如果有一個人申請要花5萬塊錢,然後另一個人得審批兩個Token一起共管資產,這都是對公賬戶管理的基本功能。
像比特幣這類的區塊鏈上,只不過說區塊鏈本身支持這類的功能而已,所以目的都是一樣的。不過由於各個區塊鏈的特點不同,各個區塊鏈的特點不同,其實現的方式便不同。在安全和功能性上,多重簽名實際上有不少差異。
接下來大家講一講技術上的一些差別。
比特幣的多重簽名從最初誕生至今,實際上變化不大,跟今天的使用的大同小異,使用的就是P2SH來做到多人共管資產。
從安全性角度上講,我指的安全不是剛才說的冷錢包安全,或者是什麼硬件錢包安全,我指的安全實際上是從腳本安全或者合約安全和區塊鏈安全這個層面來講。
從合約安全的角度上講,因為P2SH是比特幣最基本的合約,它定義的內容非常簡單,比如我剛才提到的三個人共管資產,實際上就是把這三個人的公鑰做成一個redeem script,然後對它做redeem script之後的結果做Hash。
它的規則非常簡單,定義方式和使用方式都非常簡單,因此你可以把它當成是沒有任何區塊鏈合約風險,也就是說你很難在這塊有什麼安全漏洞。
這個是從安全性角度上講,從功能性角度上講,因為它定義的合約腳本非常安全,非常簡單,所以說上邊只能做這種最基本的定義。比如說你可以定義2-3的多重簽名,也就是說三個人提供公鑰,然後兩個人可以花錢,或者是3-5或者是1-7都行,無所謂,你可以自己靈活的定義這些。它定義的都是幾個人共同管理資產,其中幾個人能夠花這麼一個多重簽名。
說完比特幣之後,我再給大家談以太坊。以太坊的多重簽名功能需要你去編寫智能合約,因為以太坊是圖靈完備的智能合約區塊鏈平台,需要你自己去寫代碼,這種方案的好處就是靈活。
也就是說除了剛才說的比特幣多重簽名,在以太坊上你可以寫很複雜的邏輯。比如說我們可以假定說這個人他有資格花10%的錢,另一個人有資格花30%的錢。當然這裡面還可以加其他邏輯,比如說這個人在某年某月某日之後,他終於開始可以花錢。這些都可以寫,就跟寫程序一樣,你可以寫很多很複雜的邏輯。
所以從這個角度上講,以太坊的智能合約方案的好處就是可以寫出非常功能豐富的多重簽名合約,這是優點。但也有缺點,靈活性和復雜度會增加它的安全性風險。
歷史上以太坊的官方錢包Parity就曾出過非常嚴重的多重簽名合約漏洞(並且在半年的時間裡先後出了兩次大漏洞),曾導致多個採用了Parity多重簽名方案的項目方損失了大量的ETH。
比特護盾bithd.com是全球首個支持以太坊多重簽名的硬件錢包。由於之前兩次的Parity多簽漏洞,我們在選擇多簽合約時是非常慎重的,選擇了在以太坊社區採用最為廣泛、託管資產最多的智能合約,並且,盡可能少提供複雜功能,僅滿足最基本的多簽需求,這是我們在以太坊上支持多籤的基本原則。
像AE這類項目,人家是自己能開源智能合約的,和一些空氣幣的項目他還不太一樣,結果反過頭來很倒霉。
可能是因為目睹了以太坊上的Parity多簽悲劇,EOS多重簽名從一開始就被定義在了系統合約中(而不像是以太坊那樣使用的是任何人自行編寫的合約),因此,從合約安全性上,EOS的多重簽名其實相當於是區塊鏈底層級別保證的合約安全,這其實是有一定好處的,雖然這樣會喪失一些靈活性,但起碼不用擔心寫錯合約而導致巨大風險。比特護盾也是全球首個支持EOS多重簽名功能的硬件錢包。
然後包括EOS多簽,由於從一開始就做到了系統層面,剛才鯨交所這邊有提到鯨交所的智能合約都是多簽管理,一開始就如此做,確保巨鯨的去中心化交易所的公信力。
然後另外一點是我們實際上還知道的一些,就是說,包括我們比太、比特派之前在做幣圈復活節的EOS生態活動的時候,當時有業內的合作夥伴,包括佳能社區等等,它們在CPU資源上給了我們巨大的幫助。
在他們幫助我們時候,我們發現有非常多EOS鏈的項目方都是多簽管理資產,股權管理資產,他們當時大額幣的那種租借都是有七個人簽名的。
再說一下USDT, USDT是基於比特幣的一個擴展鏈,所以本質上來講,USDT的多重簽名,他就跟比特幣的多重簽名是一回事兒,實際上你是真正在多籤的還是比特幣的交易。
也就是說我給你發1萬美金的USDT,實際上我發的還是比特幣。所以說它的多重簽名功能沒這麼複雜。
我們近期會在比特派上做USDT的多重簽名,因為要的人非常多,現在拿硬件錢包來管理大額資產非常多,然後多人共管的也非常多,所以我們會在兩三週之後提供比特護盾的全面多簽功能,不出意外的話,比特護盾也是支持USDT的全球首個多重簽名的硬件錢包。
03
鯨交所:錢包應該開源嗎?為什麼經常聽人說“冷錢包必須開源”呢? “偽開源”為什麼有害?
文浩:關於開源,我們實際上前一段時間就給社區進行了不少的講解。因為尤其是國內社區在這塊現在開始走的有些扭曲。首先開源,大家看我在這上邊放了GITHUB的圖標,提到了開源。
首先我們得知道一點,也就是說今天大家能這麼方便地使用iPhone或者安卓,享受著移動互聯網給大家帶來的快樂,原因是什麼?是開源社區。開源社區世界改變了這個世界,這個是我先簡要鋪墊了一句話。
我接著說一下,首先關於比特幣和區塊鏈錢包軟件本身是否應該開源,這個我認為無所謂。這跟企業的決策有關,如果錢包團隊認為自己生產的產品應該開源,那就開源。
如果是出於一些其他的原因,包括安全性,包括商業化的考慮,說不想開源,也完全可以不開源,所以這不是什麼強制要求。
而且即便是開源或不開源,也可以有自己相關的一些策略。比如有個跟我們私交比較好的團隊,他們使用微軟的協議來做開源,也就是代碼公開,但是禁止第三方借用。
它和其他軟件的那些協議是不一樣的,他是說你可以看我代碼,但你不能把它用於商業,你要用你就違法。
這是微軟當年編撰的一套法律條款。這個在開源社區裡面是不把它認為開源的,所以上面這個團隊的做法,他是選擇代碼開放,但不是開源,我給你開放出代碼的目的是讓你能夠知道我在幹嘛,它是要解決信任問題,所以這都是企業的一個決策。