本文介紹了 “使用以太坊登錄” 這一提案如何改善目前 “連接錢包” 交互的問題。

原文:Why Sign-In with Ethereum is a Game-Changer - Part 1(blog.spruceid.com)

作者: Rocco

翻譯: EthereumCN

“使用以太坊登錄” (Sign-In with Ethereum, SIWE) 顛覆了用戶在互聯網上的選擇。

用戶不再需要向一些大型中間商妥協,現在可以使用控制其區塊鏈賬戶的同一個私鑰直接登錄 (不需要經過中間商)。通過 SIWE,我們開闢了另一條道路,大公司不再能剝奪用戶訪問服務的能力,也不能監視他們的行為。

SIWE 是一個完全公開的認證標準,通過與 dapp、app、錢包、安全公司等社區成員的公開討論來實現。你可以在網站 login.xyz  上找到所有的會議記錄和筆記。這種方法與科技巨頭或政府供應商的專有身份系統的封閉式開發大相徑庭 (受到隱私和數字權力倡導者的抗議)

相比之下,Sign-In with Ethereum (EIP-4361)  為以太坊賬戶定義了一種開放的知識共享 (creative commons, CC) 簽名格式,以安全地驗證任何基於網絡的服務。SIWE 由社區構建,獲得以太坊基金會和 ENS 的直接支持,並且 Spruce 於去年年底開始負責該項目。我很高興能在這裡討論 “使用以太坊登錄” 的意義,以及對於 Web3 的所有構建者來說它是如何超越 “連接錢包” 的。

連接錢包 vs. 使用以太坊登錄

“連接錢包” 這個按鈕是現在 dapp 的主要功能。點擊這個按鈕,用戶就開始了與 Web3 和區塊鏈交互的旅程。

通過連接錢包,應用程序可以知道你使用的是哪個賬戶;然而,僅此而已。你的錢包更容易了解你想用哪個賬戶來與智能合約互動、發送加密貨幣,甚至通過 dapp 對信息進行簽名。連接錢包的功能非常簡單—— dapp 對你 “毫無記憶”,只是為簡單的交互搭建了一個平台。

當應用程序想要和用戶進行更豐富的情境交互 (contextual interactions) 時,比如加載用戶的偏好或隱私聊天訊息,我們首先需要確保我們是在和該賬戶背後的實際私鑰持有者對話,而不是某個假裝對賬戶持有控制權的人。“連接錢包” 不提供這種保證,但 SIWE 可以。換句話說,我們需要對用戶進行身份驗證,以便與他們建立一個 session,然後安全地讀寫他們的數據。為了說明兩者的區別,我舉了以下兩個例子—— 連接錢包的 Carl 和建立 session 的 Sam:

(譯者註:Session 在是一種用來在客戶端與服務器端之間保持狀態的解決方案。其基於思路是: 客戶端第一次訪問時,服務器端生成一個 session id  返回給客戶端,當然服務器端也會把這個 session id 存在內存中,客戶端得到這個 session id 後,在後續的每個請求中會把這個 session id 傳回服務器,這樣服務器查詢自己內存就知道這個客戶端曾經訪問過。Session 可以用來實現用戶的登錄認證。服務器端生成的 session id 傳回客戶端后,往往會保存在 cookie 中,所以 Session-based 認證也稱為 Cookie-Based 認證。來源)

Carl 使用 dapp 並有一個很好的體驗。他可以在 Uniswap 上進行交易,在 Aave 上借貸,甚至在 OpenSea 上購買 NFT。進行這幾項操作只需要連接他的錢包。Carl 的操作一直都挺順利的,直到有一天,他遇到了這樣的問題:他希望這些 dapp 能夠記住他的一些情況,以便在他第三次、第四次和第五次使用這些 dapp 時,能給他更好的體驗。

Carl 在想,如果 Uniswap 能自動導入他的優先清算權,Aave 能夠記住他最喜歡的借貸市場,甚至 OpenSea 能記住他的名字而不是 0x2Fe1a3... 這樣的賬戶,他的體驗會好很多。Carl 每次連接他的錢包時都要從頭開始。

Sam 就不會有這樣的問題了。Dapp 對其進行了認證並且建立了 session 之後,相關信息就會被保存下來。即便 Sam 斷開連接並且重新進行認證,session 也會從他離開時的狀態繼續,應用程序仍然記得與他相關的一切。他的信息甚至可以保存在他控制的一個遠程數據庫中。

使 SIWE 一元化

縱觀 Web3 領域,你會發現許多現有的服務提供某種形式的"Sign-In with Ethereum",但沒多少能達到標準的。他們通常會使用它來和用戶建立一個基於 cookie 的 session,該 session 可以管理該賬戶相關的專有元數據。比如,如果你想要給用戶權限在你的網站上自定義他們自己的個人檔案 (像 OpenSea 那樣),你應該在用戶可以做出任何更改之前對他們進行身份驗證,以確保只有用戶可以編輯他們自己的個人檔案。工作流程如下所示:

連接錢包後的第一步是給用戶提供人類可讀的消息,這樣他們才能理解自己進行了什麼交互。在很多案例中,用戶看到的是"LOGIN" (登錄) 字樣,或者一些讓你登錄的文字,甚至有時只是一個任意的數字 (在這裡,對這個隨機的瘋狂的字母和數字集合簽名吧)。那麼相反,我們可以根據現有實踐確定一組必需的字段、設定好許多良好的安全措施和一個在人類可讀和安全運行之間平衡的嚴格語法。此外,錢包不需要改變它們現有界面和實踐,至少可以繼續為用戶提供這類信息。

首先,我們可以接收所有這些混亂的 “SIWE” 信息,並以一種可接受的通用方式向用戶提交請求:

共享信息- 共享界面

對簽名信息格式達成一致後,應用程序和錢包現在可以說同一種語言了。當應用程序向用戶提交簽名請求時,錢包可以檢查該請求,檢查它是否與 EIP-4361 (SIWE) 信息相符,並讓用戶知道他們正在登錄一個網站。

在這一點上,錢包可以呈現一個友好的程式化的界面,讓用戶體驗更佳,並且不對用戶將要採取的行動產生任何懷疑。而不是給用戶一個任意的文本塊來簽名。用戶現在只需點擊一個確認對話框來 “登錄”,因為錢包能夠 “理解” 簽名請求。為了實現完全透明,EIP-4361 規範中聲明所有信息和字段仍然必須在其他子界面 (如詳細視圖) 中可用。

從 EIP-4361 的信息中,我們可以得到一個更清晰的界面:

該規範還為錢包引入了額外的安全要求,例如引入域綁定以防止釣魚攻擊;引入 nonces 以防止重放攻擊,用戶在整個過程中得到了進一步的保護。比如,如果錢包發現一個有效的 SIWE 信息,但是用戶正在對 example.com  進行簽名 (但實際上是在 exampie.com),錢包可以警告用戶該情況:

身份驗證之外

SIWE 信息也可以被理解為訪問特定資源的授權,或者對 session 私鑰的委託,以提高 dapp UX 的功能性和易用性。例如,想像一下,在這樣一個世界裡,用戶可以使用他們保留的數據來豐富他們自己的 session,而不是應用程序保存用戶的數據。想要了解更多信息,強烈建議大家看看這篇文章:https://blog.spruceid.com/from-sign-in-with-ethereum-to-session-keys/

我很快就會發布關於本文的第二部分,敬請關注!在那之前,去實現 SIWE  吧!

聲明:ECN 的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及 ETH 中文站。若需長期轉載,請聯繫 eth@ecn.co 進行授權。

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。