※ 本文為 Knuckles 轉寄自 ptt.cc 更新時間: 2023-05-25 20:18:02
看板 DigiCurrency
作者 標題 [閒聊] 舊手機PSBT錢包搭配日常手機並用,BTC良好方案
時間 Wed May 24 14:19:01 2023
註1:這個方法是BTC only,其他幣如果有類似的方法,就麻煩其他熟悉的人分享了
註2:雖然嚴格來說iOS可以透過安裝Python環境來安裝所需的功能,但麻煩度還是太
高了,建議還是以android為主。
註2:雖然嚴格來說iOS可以透過安裝Python環境來安裝所需的功能,但麻煩度還是太
高了,建議還是以android為主。
早前在 #1aPU6Qz- 這篇約略提過了關於舊手機、VMware等方法。這篇將更進一步討論
Re: [新聞] Ledger助記詞恢復功能爭議整理 - DigiCurrency板 - Disp BBS
azuel 拋磚引玉一下,提供幾個可以自己製作近似硬體錢包的方案。 我相信可能有人有更優秀、更方便的方案,請不吝分享。 我的方法: 1. 舊手機 : 1.a 任何退役下來的舊手機,恢復乾淨狀態之後,只安裝軟體錢
azuel 拋磚引玉一下,提供幾個可以自己製作近似硬體錢包的方案。 我相信可能有人有更優秀、更方便的方案,請不吝分享。 我的方法: 1. 舊手機 : 1.a 任何退役下來的舊手機,恢復乾淨狀態之後,只安裝軟體錢
這種方法既方便、又可以在不破壞冷儲存的安全性之下正常交易。
或許早前有過PSBT相關的討論,但因為標題搜尋沒有,所以我也就用有標題的方式再提
一下。
=============================================================
PSBTs (Partially signed bitcoin transactions)
是一種把交易的簽署給分離開來的交易方式。
聽起來很繞名詞,讓我用最實用的方式解釋:
以下所稱交易都指"自己要傳輸BTC給其他人"。
有兩個裝置,一個連接網路的常用手機A,裡面的錢包只有公鑰,是"觀察者錢包"。
這個錢包可以看到自己所有的餘額,可以建立交易,但因為沒有私鑰,所以不能簽署也
不能送出交易。
另一個完全斷網的手機B,裡面的錢包有公鑰私鑰,是完整的錢包。
這個裝置不聯網,看不到餘額,不能建立交易,但它可以在完全斷網的情況下,對手機A
建立的交易簽署,簽署好之後由A送出,完成交易。
這種方式讓連接網路的手機A正常使用錢包,如果發生任何安全性的事件,也只會被盜走
公鑰,錢包就不會被盜走。
================================================================
但手機B斷網,要怎麼把交易簽署好之後回傳給手機A呢?
很簡單,現在的手機都有相機,透過QR code互相傳遞就好了。
1. 手機A發起一個PSBT交易之後,產生一個QR code
2. 手機B掃描QR code之後,完成簽署,產生一個QR code
3. A掃描B新產生的QR code之後,取得簽署,完成交易
只要錢包軟體支援這個功能,一支舊手機就可以變身成coldcard。
(不過當然各有利弊,操作會比coldcard便利,但硬體防護可能還是不及coldcard)
(實體被盜走的話能被破解,但老實說現在硬體錢包可能也都差不多情況就是... )
(實體被盜走的話能被破解,但老實說現在硬體錢包可能也都差不多情況就是... )
以下用Electrum來舉例建立這種環境的方式:
1. 舊手機還原成乾淨狀態,移除所有不必要的app,安裝Electrum,然後斷網。
2. 在斷網的情況下,用Seed還原錢包。或是更加徹底的話,在斷網的情況下建立新
錢包 (還是要記得把Seed抄下來!)。
3. 點選錢包明細,可以看到Master Public Key,這就是你的公鑰,點選旁邊的分享
會產生一個公鑰QR code,稍後要用到。
4. 日常手機安裝Electrum,建立錢包的時候選擇"從Master Key",掃描公鑰QR code。
就這樣而已,這樣就完成了常用手機上的觀察者錢包,以及斷網手機安全存放私鑰。
至於操作,現在Electrum的介面幾乎都簡化集約成點下send之後掃描QR code。
所以目前的操作流程應該是:
1. 手機A點Send,掃描要傳送出去、接收方的Bitcoin地址QR code,建立交易。
2. 輸入轉帳額度、費率設定等,然後點選建立成PSBT交易,產生QR code。
3. 手機B點Send,掃描手機A的QR code,完成簽署,產生QR code。
4. 手機A點Send,掃描手機B的QR code,取得簽署,完成並送出交易。
存放私鑰的手機B,基本可以不用再連接網路了,就算Electrum版本更新,B很可能也
不需要更新。
如果真的必須要更新的話,B的錢包先刪除掉,連接網路,更新Electrum,斷網。然後
在斷網的情況下再用Seed復舊錢包。
如果這樣使用的話,舊手機的要求更低,甚至只要官方需求的最低版本android 5.0以
上即可。如果舊手機壞了,也隨時能取得另外的舊手機,恢復離線私鑰的狀態。
註:
Electrum本身不是BIP 39錢包,所以產生的Seed不能用其他BIP 39錢包復原。
但BIP 39 seed可以再Electrum復原,選擇用seed復原錢包的時候,記得要在option
裡面打開BIP39選項。
但不需要擔心Electrum的官方倒掉之類的,只要你有安裝Electrum的軟體,就算離線
也可以復原錢包,實際運作是完全不依賴官方。
錢包也會自己找Node,並不必須要Electrum的node,甚至你可以連接自己架設的node。
在各個環節都盡量達成trustless,我個人覺得滿好的,雖然GUI有時候有點難用。
後續補充:
Electrum不是曾經被hack過嗎?我先講一下Electrum被hack的事件。
2019年的時候,桌面版的Electrum的通知功能被劫持,駭客送出了"軟體更新"的通知,該
通知點進去安裝的卻是駭客的版本,導致有更新的人被盜取私鑰。
這是一次釣魚攻擊,但Electrum本身的防護是沒有被攻破過的,從2011年至今都沒有。
從釣魚攻擊之後,Electrum方面是修正了這個漏洞,但Electrum也鼓勵下載桌面版、
Python版的人都要用GPG加上開發者ThomasV的公鑰去驗證下載的版本正確。
嚴格來說,安卓版也應該要下載apk與簽名回來驗證,然後用APK安裝。這一篇選擇用
play store安裝的方式來解說,是相對有取捨的方式。等於是信賴Google以及ThomasV的
Google帳號不會被盜取,並不是非常完美。
但雖說Google play不算完美,卻也算是方便性與一定程度的安全性的均衡點,對大多數
的人來說,這種方式建立環境的痛苦度要低很多,也比不驗證就下載要安全。
當然,如果看到這邊的人願意去嘗試驗證、建立這個習慣,確保軟體安全性的話,我很
鼓勵可以去挖一下相關的內容。如果將來這方面需求多了的話,我也能再寫GPG驗證相關
的簡介。
鼓勵可以去挖一下相關的內容。如果將來這方面需求多了的話,我也能再寫GPG驗證相關
的簡介。
所以Electrum本身的安全性還是滿好的。
不過這當然是我個人的喜好,如果有其他軟體錢包也能達到PSBT、也很開源安全的話,
也希望能看有使用經驗的人推薦,沒有一定要Electrum。
剩下的危險就是舊手機被搶走、實體破解取走私鑰。
但那也得要別人知道你這隻舊手機放了私鑰才行。
所以,如果手中有ledger覺得不再願意使用的話,也不用丟掉,還有用途。
駭客可以釣魚攻擊,我們也可以啊,舊的ledger當作餌,這樣瞄準加密貨幣的實體竊盜
更有可能盜取這些ledger回去試圖破解,而不是那隻破爛的舊手機。
把ledger微妙地放在看起來像是很謹慎地藏起來、但又容易被找到的位置,舊手機就和
其他舊品與工具儲藏堆在一塊就好了... 之類的,這種藏匿與誘餌方式很多變化。
以上是一些個人分享,希望能以最簡化的方式呈現相當高強度的安全方式。
如果有什麼問題都可以再討論,如果內容有錯也請多指正,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 136.23.35.37 (臺灣)
※ 作者: azuel 2023-05-24 14:19:01
※ 文章代碼(AID): #1aRQnNO_ (DigiCurrency)
※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1684909143.A.63F.html
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 14:44:33
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 14:53:05
此後的硬體錢包應該會越來越多導入這種完全離線簽署交易的方式
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 14:57:17
這就要把用來簽署的那個離線私鑰裝置給盡量隔離保護好了
不給別人拿走,不拿出去公共場合,使用的時候確保環境安全只有自己一個人
私鑰不論網路或是物理都完全隔離掉,簽署的時候也完全離線
別的protocol我不太清楚,Bitcoin是用BIP 174規範
上述接點完全割斷的話,就只剩下簽署好的交易出去、以及會曝露的只有公鑰了
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 20:47:10
這種處理在錢包軟體還是會留下足跡,有沒有加料應該還是頗明顯
大方向還是新版本不馬上裝,一陣子沒人叫了之後再opt in
如果真有疑慮的話,就自己從source code去compile了
或是compile出來跟下載的版本比對看看
不過entropy attack難度也太高... 是也有說一個地址過度重複使用也會有這個弱點
實際重現應該相當不容易
感謝分享資訊!
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 22:28:24
有很多的attacking vector以前大家都沒有覺得很嚴重,直到事情爆發
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 22:45:18
去找一個自己覺得不錯的open source然後去review code大概要比自己做來得快
不過那個對我這幾篇來說,光譜拉太遠了
我主要是希望在容易推廣達成的方式裡面,去達到合理範圍的最大安全度
主要是讓看的人容易部署,或是因此有獲得一些想法、想到別的適合自己的方式
※ 編輯: azuel (136.23.35.37 臺灣), 05/25/2023 02:28:44
但如果只是這樣的話,交易的時候還是得在一個連接網路的裝置還原私鑰
如果這個連接網路的裝置是已經被放了間諜軟體的話,可能這一瞬間就會丟失私鑰
那麼整個錢包就去了
當然如同早前一篇的方法一樣,使用裝置能確保乾淨安全的話,這也是ok的方法
這篇內文的方法重要的地方在於,交易的時候私鑰也是完全離線
把連接網路發布交易的那一瞬間的弱點也消除
但斷網手機要簽署的時候,看得到要簽署的交易內容
經過簽署之後,會根據私鑰和交易內容生成一個數位簽章
在這之後對內容進行任何修改,都會使簽章無效,交易也會被視為無效
不過當然還是要對軟體方面有一定程度的警戒心
安定且受長期檢視的軟體就盡量不要在新版本出來的時候馬上更新
任何新版本都等待社群檢驗open source一陣子之後再去使用
除非是跟安全性相關的更新
至少長期存放用的金庫錢包在確認安全之前,就盡量不要發起交易這樣
嗯... 稍後可能寫一下關於錢包安全度分級的事情好了
※ 編輯: azuel (136.23.34.69 臺灣), 05/25/2023 13:00:42
--
推 : 推 只不過這麼複雜的程序對一般人而言還是太難1F 05/24 14:44
可能就是對於比較熟悉情況的人會比較有幫助了※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 14:53:05
推 : 類似 airgap wallet/airgap vault app 的功能嗎2F 05/24 14:52
看起來相似,這可能會成為之後安全性的新主流此後的硬體錢包應該會越來越多導入這種完全離線簽署交易的方式
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 14:57:17
推 : 推一個 謝謝分享3F 05/24 15:00
推 : Bither APP也支援air gap錢包4F 05/24 15:08
推 : 我正要推黑鴨大所說的,比太就支援這個功能,以前沒買5F 05/24 16:29
→ : 冷錢包時我也用過
→ : 冷錢包時我也用過
推 : 看來只好再買一隻iPhone 157F 05/24 16:51
推 : 是az大耶!好久沒現身了^^8F 05/24 18:53
hi~推 : 最近剛好看到號稱有SE+開源的Keystone有一種假想攻9F 05/24 19:55
→ : 擊向量是,簽署者夾帶Seed訊息出去
→ : 同樣的問題軟體錢包也會有
雖然我不太確定手段,不過我想把所有的接點都消除就好了?→ : 擊向量是,簽署者夾帶Seed訊息出去
→ : 同樣的問題軟體錢包也會有
這就要把用來簽署的那個離線私鑰裝置給盡量隔離保護好了
不給別人拿走,不拿出去公共場合,使用的時候確保環境安全只有自己一個人
私鑰不論網路或是物理都完全隔離掉,簽署的時候也完全離線
別的protocol我不太清楚,Bitcoin是用BIP 174規範
上述接點完全割斷的話,就只剩下簽署好的交易出去、以及會曝露的只有公鑰了
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 20:47:10
推 : 推個12F 05/24 21:16
推 : 意思是(惡意)簽署者透過某種計劃好的pattern在訊息13F 05/24 22:12
→ : 一點一滴夾帶seed的entropy出去避人耳目
→ : 而(惡意)簽屬方就靠監聽去鎖定有價值的地址
→ : 等到足以構成seed的資訊都流出來
→ : 這種錢包攻擊向量 在離線簽章還是"理論上"存在
喔理解,那基本就是依靠對open source的監督了→ : 一點一滴夾帶seed的entropy出去避人耳目
→ : 而(惡意)簽屬方就靠監聽去鎖定有價值的地址
→ : 等到足以構成seed的資訊都流出來
→ : 這種錢包攻擊向量 在離線簽章還是"理論上"存在
這種處理在錢包軟體還是會留下足跡,有沒有加料應該還是頗明顯
大方向還是新版本不馬上裝,一陣子沒人叫了之後再opt in
如果真有疑慮的話,就自己從source code去compile了
或是compile出來跟下載的版本比對看看
不過entropy attack難度也太高... 是也有說一個地址過度重複使用也會有這個弱點
實際重現應該相當不容易
感謝分享資訊!
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 22:28:24
推 : 是很偏執沒錯。大家都想找個能放心睡大覺的錢包18F 05/24 22:35
→ : Ledger激發了大家對錢包供應商如果作惡的敏感神經
能盡量求好那當然是最好了→ : Ledger激發了大家對錢包供應商如果作惡的敏感神經
有很多的attacking vector以前大家都沒有覺得很嚴重,直到事情爆發
※ 編輯: azuel (136.23.35.37 臺灣), 05/24/2023 22:45:18
推 : 推 用別人的終究做不到去信任 自己做最安全但有難度20F 05/25 01:23
→ : 不過再搭配多簽或mpc方案或許就很接近目標了
自己做也未免太辛苦,寫出來的東西可能反而有漏洞→ : 不過再搭配多簽或mpc方案或許就很接近目標了
去找一個自己覺得不錯的open source然後去review code大概要比自己做來得快
不過那個對我這幾篇來說,光譜拉太遠了
我主要是希望在容易推廣達成的方式裡面,去達到合理範圍的最大安全度
主要是讓看的人容易部署,或是因此有獲得一些想法、想到別的適合自己的方式
※ 編輯: azuel (136.23.35.37 臺灣), 05/25/2023 02:28:44
→ : 刻在不鏽鋼板最安全22F 05/25 08:00
如果離線生成Seed、刻在鋼板上的話,好處是自己不容易損毀鋼板但如果只是這樣的話,交易的時候還是得在一個連接網路的裝置還原私鑰
如果這個連接網路的裝置是已經被放了間諜軟體的話,可能這一瞬間就會丟失私鑰
那麼整個錢包就去了
當然如同早前一篇的方法一樣,使用裝置能確保乾淨安全的話,這也是ok的方法
這篇內文的方法重要的地方在於,交易的時候私鑰也是完全離線
把連接網路發布交易的那一瞬間的弱點也消除
推 : 選擇明文攻擊?23F 05/25 12:02
推 : 連網手機如果遭駭,攻擊者可能將QRcode置換成攻擊者想
→ : 要的內容,舉例來說像把錢包餘額轉到攻擊者錢包,因為
→ : 是QRcode肉眼應該也看不出來,然後斷網手機簽署後,遭
→ : 駭的連網手機取回簽署後交易並廣播。
雖然QR code人類看不懂推 : 連網手機如果遭駭,攻擊者可能將QRcode置換成攻擊者想
→ : 要的內容,舉例來說像把錢包餘額轉到攻擊者錢包,因為
→ : 是QRcode肉眼應該也看不出來,然後斷網手機簽署後,遭
→ : 駭的連網手機取回簽署後交易並廣播。
但斷網手機要簽署的時候,看得到要簽署的交易內容
經過簽署之後,會根據私鑰和交易內容生成一個數位簽章
在這之後對內容進行任何修改,都會使簽章無效,交易也會被視為無效
不過當然還是要對軟體方面有一定程度的警戒心
安定且受長期檢視的軟體就盡量不要在新版本出來的時候馬上更新
任何新版本都等待社群檢驗open source一陣子之後再去使用
除非是跟安全性相關的更新
至少長期存放用的金庫錢包在確認安全之前,就盡量不要發起交易這樣
嗯... 稍後可能寫一下關於錢包安全度分級的事情好了
※ 編輯: azuel (136.23.34.69 臺灣), 05/25/2023 13:00:42
--
※ 看板: DigiCurrency 文章推薦值: 0 目前人氣: 0 累積人氣: 19
回列表(←)
分享