當用戶登錄到web2服務時需要使用用戶名或電子郵件地址和密碼。然而以太坊登錄( Sign-In with Ethereum )將會改變這一方式。

通常在登錄“web2”服務時,我們需要使用用戶名或電子郵件地址和密碼。然後,該服務可以在他們的內部數據庫中查找我們的用戶名或電子郵件地址,看看相應的密碼是否與我們提供的密碼匹配。生成用於進一步身份驗證的隨機密鑰,通常存儲在cookie中。這種提交給【大登錄】( 大登錄指的是在很多個互聯網服務上使用同一個登錄方式(例如:Facebook、Google、Weixin等))的方式往往依賴於大型互聯網公司和電子郵件提供商,它們正是對用戶身份擁有最終控制權的中心化實體。

以太坊登錄(EIP-4361)的出現改變了這個規則,它為那些希望對自己的數字身份承擔更多控制和責任的用戶提供了一種新的自我託管選項。用戶不再需要向一些大型中間商妥協,現在可以使用控制其區塊鏈賬戶的同一個私鑰直接登錄(不需要經過中間商)。大公司不再能剝奪用戶訪問服務的能力,也不能監視他們的行為。

使用以太坊登錄有望回歸用戶權力。

什麼是EIP-4361:使用以太坊登錄?


它是以太坊賬戶建立會話(sessions)的鏈下認證。

以太坊登錄(EIP-4361)描述了以太坊帳戶如何通過簽名由范圍、會話詳細信息和安全機制參數化的標準消息格式來驗證鏈下服務。 EIP-4361的目標是為中心化身份提供者提供一種自我託管的替代方案,提高基於以太坊身份驗證的鏈下服務的互操作性,並為錢包供應商提供一致的機器可讀消息格式,以實現更好的用戶體驗和同意管理。換句話說,EIP-4361的目的是希望通過使用web3服務(如錢包和dapps)常用的方法來改變我們登錄web2服務的方式。

已經有許多服務支持使用消息簽名驗證以太坊帳戶的工作流(workflows),例如建立一個基於cookie的web會話,該會話可以管理關於驗證地址的特權元數據。這是一個標準化登錄工作流和提高現有服務互操作性的機會,同時也為錢包供應商提供了一種可靠的方法,可以將簽名請求識別為以太坊登錄請求,以改善用戶體驗。

以太坊登錄的工作原理如下:

1 該錢包為用戶提供了一個結構化的明文消息或等效的接口,用於使用EIP-191簽名數據格式進行簽名。在簽名之前,消息前綴是EIP-191中定義的為\x19Ethereum Signed Message:\n<length of message>。該消息必須包含以太坊地址、請求籤名的域、消息的版本、鏈標識符chain-id、用於範圍的uri、依賴方( relying party )可接受的nonce和發出的時間戳

2 然後將簽名提交給依賴方,由依賴方檢查簽名的有效性和消息內容。

3 其他字段,包括過期時間、not-before、請求id、語句和資源,可以被合併為登錄過程的一部分。

4 依賴方可以進一步獲取與以太坊地址相關的數據,例如來自以太坊區塊鏈(例如,ENS,賬戶餘額,EIP-20/EIP-721/EIP-1155資產所有權),或其他可能或可能不被允許的數據源。

事例消息

詳解EIP-4361:什麼是以太坊登錄|Tokenview

以太坊登錄(EIP-4361)為以太坊賬戶定義了一種開放的創意共享(CC)簽名格式,用戶登錄不需要使用用戶名和密碼的組合,只需用自己的私鑰對消息進行簽名,就完成了。並且可以安全地驗證任何基於網絡的服務。 EIP-4361是在以太坊基金會和ENS的直接支持下,由社區創建的。

以太坊登錄對Web 3 的重要性?

對於Web3的所有建設者來說,以太坊登錄比連接錢包(Connect Wallet)的意義要大得多。連接錢包是當前進入Web3 dapps 的主要方式。通過連接錢包,用戶就可以開始和區塊鏈進行交互,但連接錢包並沒有使應用程序記錄你的任何信息,只是為簡單的交互創建了一個前端顯示。而以太坊登錄允許用戶和應用程序之間建立會話(session),可以進行更為豐富的情景互動,安全地讀寫他們的數據。

我們用Connected Carl (使用連接的Carl)和Session Sam(使用會話的Sam)這兩個例子來進行闡釋。

“Connected Carl ”使用dapp。他可以在Uniswap上進行交易,在Aave上進行借貸,甚至在OpenSea上購買NFT,只需要連接他的錢包。一段時間,Carl的事情進行得相當順利,直到有一天,他遇到了一個問題:他希望這些dapp能記住他,以便在他第三次、第四次、第五次使用這些dapp時,能給他更好的體驗。

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

“Session Sam”就沒有這個問題。在與dapps進行認證並建立會話後,這些信息被保存下來。即使Sam斷開連接並再次認證,薩姆也會從他離開的地方繼續,並且在應用程序中仍然記得關於他的一切。他的信息甚至可以保存在他控制的一個遠程數據庫中。

連接錢包的功能非常簡單,僅僅是通知一下dapp,讓它知道你正在使用的是哪個賬戶, dapp 也對你毫無記憶,只是為簡單的交互搭建了一個平台。但以太坊登錄對用戶進行身份驗證,以便與他們建立一個session,你和dapp之間進行的種種情境交互,會被安全地讀寫記錄。

創建以太坊登錄界面

錢包創建以太坊登錄界面如下:

1 錢包實現者必須在默認情況下和簽名之前向用戶顯示以太坊登錄簽名請求中的以下術語:域、地址、語句和資源。其他現有術語也必須在默認或通過擴展接口簽署之前提供給用戶。

2 錢包實現者向用戶顯示明文消息時,應該要求用戶在簽名前滾動到文本區域的底部。

3 錢包實現者可以通過將ABNF術語解析為接口中使用的數據元素來構建自定義的登錄以太坊用戶界面。上面的顯示規則仍然適用於自定義界面。

在用戶體驗上,錢包可以呈現一個友好的風格化的界面,讓用戶體驗更佳。例如通常給用戶提示的簽名信息是LOGIN 。相較而言,“使用以太坊登錄”的信息較為雜亂,但我們可以把它用一種公認的通用方式來向用戶提出請求。有了一個商定的簽名信息格式之後,應用程序和錢包就可以說同樣的語言。當應用程序向用戶提出簽名請求時,錢包就可以檢查該請求,檢查它是否適合作為EIP-4361消息,並讓用戶知道他們正在簽署進入一個網站(由此也可以得到一個更簡潔的界面)。

該規範還為錢包引入了額外的安全要求,如防止網絡釣魚攻擊的域名綁定和防止重放攻擊的nonce設置,用戶在整個體驗過程中得到進一步保護。例如,如果錢包發現一個有效的以太坊登錄信息,但用戶簽署的是example.com,但實際上是在exampie.com ,錢包可以警告用戶這種情況。

解析ENS數據

EIP-4361與以太坊名稱服務(ENS)巧妙集成。依賴方或錢包還可以對ENS數據進行解析,因為這可以通過顯示與地址相關的人性化信息來改善用戶體驗。如果一個地址有一個主ENS名稱,服務可以查找這個主ENS名稱並基於它解析數據。例如,可以將自己的首選用戶名、頭像、電子郵件地址或其他任意信息存儲在ENS名稱中。這樣就可以控制自己的數據,並且不需要web2服務來存儲關於用戶的這些信息。這可能會導致未來使用經過身份驗證、簽名的EIP-191消息登錄到身份驗證的應用程序成為標準,完全消除電子郵件/密碼組合。

可解析的ENS數據包括:

主ENS名稱。
ENS頭像。
ENS文檔中指定的任何其他可解析資源。

如果對ENS數據進行解析,實施人員應採取預防措施,以保護用戶隱私和同意,因為作為解析過程的一部分,他們的地址可能被轉發到第三方服務。

參考文章

https://ethereum.org/en/governance/#what-is-an-eip

https://eips.ethereum.org/EIPS/eip-4361

https://blog.spruceid.com/sign-in-with-ethereum-is-a-game-changer-part-1/

https://blog.mycrypto.com/sign-in-with-ethereum-an-alternative-to-centralized-identity-providers/