您的 USDC 正以昨天的利率產生收益Quicknode 會自動將其移至今日最佳的 Morpho 錢庫中。目前已在 7 條區塊鏈上上線。
制定您的策略金鑰管理:使用者體驗與安全性
金鑰管理之所以重要,是因為金鑰能讓使用者存取可存放資金的錢包/帳戶。以下是您在 dApp 中進行金鑰管理時應「做」與「不應做」的事項……

2019年11月25日 — 閱讀時間 6 分鐘

密鑰管理是加密貨幣產業中的一大隱憂,因為密鑰能存取地址,而地址則可存放資金。若密鑰處理不當,用戶可能會發現自己的資金在未經授權的情況下不翼而飛……
當然,確實有方法可以降低資金遭全數盜取的風險,例如使用多簽名(MultiSig)錢包,但讓我們來談談那些未使用多簽名錢包的絕大多數使用者。
近年來,使用者在與去中心化應用程式互動時,其金鑰管理已有所改善,因為開發者開始將關注事項與主要應用程式邏輯及簽名機制(即金鑰管理)分開處理。
讓我們以 EtherDelta 作為第一個案例研究——這是在 2017 年非常受歡迎的一家交易所。

EtherDelta 是一個專門用於交易以太幣(Ether)和ERC20代幣的去中心化交易平台。MainNet 2016MainNet Ethereum MainNet 正式上線。當時,這是人們以真正去中心化的方式——即在鏈上——進行代幣交易的絕對首選平台,因此為這項技術帶來了許多正面的關注(同時也招來了詐騙者和釣魚者的不當關注)。
使用者在 EtherDelta 上進行交易的主要方式之一,是透過在文字方塊中輸入原始私鑰來「匯入帳戶」;此操作會在「後台」將私鑰以未加密的明文形式儲存於瀏覽器的 LocalStorage 中。

讓我們先來探討這方面的使用者體驗(UX)。保存已匯入帳戶的技術決策,能讓使用者免於在多次造訪時重複匯入該帳戶,從而減少其輸入操作,並讓他們能專注於原本的目的——進行交易。
不妨將此功能視為 Web 2.0 登入視窗中的「記住我」核取方塊——讓使用者能快速使用您的產品,無需擔心手動輸入驗證資訊。
這基本上是這項決策唯一的優點(而且執行得相當糟糕)。
這項決定對隱私與安全造成的影響極為深遠。
雖然對終端使用者而言,減少每次進行交易時需輸入的資料確實很方便,但 EtherDelta 本可以採取以下其中一項或全部措施:
將金鑰管理功能完全從應用程式中移除,並鼓勵使用 MetaMask 之類的工具——將簽署機制交由專用的應用程式處理
在客戶端對原始私鑰進行加密,並強制使用強密碼
若將明文密鑰儲存在 LocalStorage 中,將使您的資金面臨以下風險:
具有讀取權限的惡意瀏覽器擴充功能(不過你可能還有更嚴重的問題)
有人窺視你未上鎖的裝置,並直接查閱 LocalStorage
能夠讀取連網裝置上未加密機密資訊的軟體
如果有人正在使用共用電腦,系統並不會告知該使用者其機密資料將會被儲存
這也助長了用戶的不當行為,因為他們被教導將未經加密的私鑰直接輸入至網際網路,同時也讓他們誤以為主要應用程式邏輯與金鑰管理是相互交織的,而非獨立的關注點。
安全性與便利性成反比
那些將終端使用者的便利性置於安全性之上的應用程式,可說正逐漸失去對使用者的吸引力。
舉例來說,若我們暫且不考慮 EtherDelta 與 Uniswap 背後不同的數學原理,Uniswap 能在不需在主應用程式內處理令人擔憂的金鑰管理的情況下,達到與 EtherDeltanear的效果——它仰賴使用者使用支援 web3 的瀏覽器;而金鑰管理(以及交易簽署)則屬於另一個獨立的考量層面。
可以說,這個生態系統已經演進,已不再像最初那樣——當時與區塊鏈互動的唯一方式是透過命令列,這會讓不熟悉的使用者望而卻步,因為要學習並記住特定的命令(例如簽署交易)是一項艱鉅的任務。

WalletConnect 便是較為成熟的金鑰管理解決方案之一。若在去中心化應用程式(dApp)中正確實作,金鑰管理與應用程式邏輯將完全分開——這意味著該 dApp 不會具備類似錢包的功能(例如 EtherDelta)。
WalletConnect 是一種簡單的協定,供行動錢包用於透過您的手機遠端簽署交易。
與其將私鑰從一個裝置複製並貼上到另一個裝置——此舉會使私鑰暴露給惡意攻擊者——您只需掃描一個 QR 碼,即可透過端對端加密連線連接至您的行動錢包。
一旦您掃描 QR 碼,另一台裝置上的應用程式即可要求在您的手機上對訊息和交易進行安全簽署,而您可透過錢包控制何時結束該會話。
透過 WalletConnect,您可輕鬆地在手機上管理私鑰,同時在不同的桌面裝置,甚至其他裝置(例如平板電腦、POS 系統和電視)上使用相關應用程式。
其架構完全採用自由及開源模式,任何錢包或應用程式皆可使用。目前已有 10 款錢包支援 WalletConnect。
— 佩德羅,WalletConnect
在 dApp 依賴第三方金鑰管理解決方案的架構中,只需透過邏輯指示第三方簽署機制對交易的各個部分進行簽署——這既能提升使用者的使用者體驗,也能增強安全性;
使用者在確認及簽署交易時,將看到一個熟悉的使用者介面
使用者會被教導,諸如私鑰這類機密資訊不應被應用程式知悉——這反過來有助於他們避免成為特定網路釣魚詐騙的受害者;否則,他們可能會因為「這是我使用去中心化應用程式(dApp)時一貫的做法」,而誤以為在線上表單中輸入機密資訊是安全的。
使用者正在縮小其攻擊面。與其將機密資訊散存於多個瀏覽器、多個網域的 LocalStorage 物件中,使其輕易被存取,使用者只需保護一臺裝置,而這臺裝置正是他們確信應是唯一儲存這些機密資訊的裝置。

以 MyCrypto 為例,該平台決定從其網頁應用程式中移除原始機密資料(私鑰、助記詞、金鑰儲存檔),同時在不影響使用者使用體驗的前提下,透過投入安全措施來達成此目標,因為該平台仍允許多種第三方金鑰管理應用程式與其互動。
這意味著在網頁應用程式中,應用程式邏輯與您的機密資訊將完全分離(您也可以自行編譯並執行該應用程式)。
提示:對於希望使用原始密鑰/密碼的用戶,我們提供了一款桌面應用程式
話雖如此,金鑰管理不僅僅關乎簽名機制在去中心化應用程式(dApps)中的運作方式——它還包括(除其他事項外)金鑰的生成過程。在建立新的「錢包」方面,使用者體驗與介面已經歷多次迭代,同時也進行了許多公開審計,以驗證各項解決方案在為使用者生成具有高熵的安全金鑰時,其安全性究竟如何。
然而,這並非沒有風險,因為近年來在金鑰生成過程中已發現多處「後門」。其中一個例子是 MyCrypto 於 2019 年 5 月報導的案例——《披露:在 WalletGenerator.net 上發現金鑰生成漏洞——可能具有惡意》。
在 Web3 領域中,金鑰管理或許是一項棘手的任務,但基於上述所有原因,我強烈建議 dApp 開發者專注於開發自己的 dApp,並仰賴專門負責處理金鑰的第三方應用程式。
需要專案協助或有任何疑問嗎?請透過此表單、TwitterQuicknode 或在Discord 上聯絡我們!
Quicknode 成立於 2017 年,為開發者與企業Quicknode 機構級的區塊鏈基礎設施。憑藉 99.99% 的正常運行時間以及對 80 多條區塊鏈的支持,各團隊得以在無需妥協的情況下,開發並擴展鏈上應用程式。
將最新的工程見解、產品更新及 Web3 新聞直接送至您的收件匣。
已通過 SOC 2 Type II 認證 · ISO 27001