home · Posts · Archive · Tags

web3 世界裡的驗證機制,以Tezos為例

在web3的世界裡面,區塊鏈錢包取代了過去綁定社交帳號登入的功能,以下面在Tezos上的NFT交易平台objkt為例,可以看到sync取代login的按鈕。

objkt

如下圖,點選sync後,objkt會與您的錢包(temple wallet)互動,然後請您簽署一份payload:

temple wallet

點選簽名完後即可登入頁面,但他到底是怎麼做的,首先我們要來複習一下數位簽章的一些基礎。

數位簽章 (Digital signature)

數位簽章被廣泛應用在許多領域如證書、email、blockchain等等。簡單來說我們需要驗證東西『是否為某人所發』,可以使用數位簽章來達成此事。如下圖,假這今天Bob要證明某個訊息是否為Alice所發出,首先Alice使用私鑰(private key/secret key)來對message做簽章,然後將簽完的message(簽章,signature)送給Bob,此時Bob只要使用Alice的Public key及收到signature,去驗證訊息是否為Alice所發。

https://en.wikipedia.org/wiki/Digital_signature

若我們要知道前端使用者是誰,可以利用上面概念及wallet本身的簽署功能,如下圖,首先frontend(React)會將從server送來的payload利用私鑰做簽名,產生signature,然後送給server,此時server只要檢查送過來的signature是不是當初發的即可,這樣就可以知到這『確實是某人』所簽。

簡單邏輯

了解上面後,由於我們需要做登入,這邊是以確認使用者後即發JWT(json web token)來做例子,其實就很間單的三個步驟:encode、sign、verify,他的登入流程如下:

  1. frontend對server發請求,告訴server誰要登入(address)。
  2. server將使用者資訊encode成錢包可接受的資料格式payload。
  3. server將payload(0501…為SigningType)回傳。
  4. frontend與wallet互動,利用wallet簽署(sign)payload。
  5. frontend將signature回傳。
  6. server接收到signature後,利用公鑰vk verify使用者資訊。
  7. 通過後server發送JWT給前端。

詳細流程

由於這是NTU DApp的期末作業,因尚未公開參考code的部分之後再公開~

最後感謝實驗室大神同學陳冠廷給我一些驗證的建議。

參考

Ref

👈Go Back

@alanhc