購物車

網絡安全把關不求人! MetaMask錢包簽名前要留神!

2022-09-20

MetaMask 是一個非常出名且最多人使用的 EVM (以太坊虛擬機器) 加密數字錢包,相信任何熟悉加密數字領域的人或多或少都有使用過 MetaMask 錢包。 然而,隨著越來越多人進入加密數字領域,因此而衍生的數字騙案亦逐漸增多,而因為不熟悉區塊鏈的運作模式,而導致的數字資產被盜的個案,則更是層出不窮。

曾經有朋友就發生過這樣的情況,自己明明沒有做任何交易,但發現自己錢包內的數字資產被無故轉移,他確定助記詞並沒有洩露給他人,但自己曾多次使用該錢包登入不同網站,參與不同的 dApp 互動等,因此,非常有可能問題就出在簽名上。

這次我們就以 MetaMask 為例,來說說關於區塊鏈的三個簽名問題

所謂簽名,實際上就是一個身份認證的過程。就如同你去銀行提款,銀行除了接收你的操作指示以外,還必不可少要進行身份認證,確保你是真正的賬戶擁有者。銀行的身份認證可以是用密碼,簽名,印章等方式進行。

ad-banner1

區塊鏈簽名

區塊鏈上的交易亦是如此, 當你進行一個交易時,除了要指示區塊鏈「要做什麼」,還需要進行身份認證,確保你是真正的賬戶擁有者,才可進行相應操作。 這個身份認證,就是我們所說的「簽名」。

簽名的具體做法,是使用你保存在區塊鏈錢包(如 MetaMask)中的私鑰(Private Key)透過加密演算法,對你發出的指示做數字簽署,而這個簽署,是可以透過與你的地址公鑰(Public Key)比對從而認證確實是你發出的相應指示,而完成認證過程。另外,「簽名」這個動作,可以是不需要上鏈的。在沒有網路的情況下亦可進行。

因此,只要擁有一個有效的交易簽名,配合對應的交易指令(例如轉賬),即可正常完成一次交易。

說到這裡,相信聰明的讀者都能夠看出其中的玄機,在整個過程中交易簽名是重中之重。換句話說,騙徒可以偽造一個交易,騙取你的交易簽名,然後騙徒便可以憑藉這個簽名,執行該偽造交易,從而導致你在莫名其妙的情況下,損失資產。而交易簽名洩露,也就是許多數字資產被盜的元兇之一。

Personal Sign

常見Web3 登入的簽署

Personal Sign 可以用於簽署一段 UTF-8 編碼的文字,使用這種方法,MetaMask會清楚顯示被簽名的內容 ,這種方式常見於網站登入。

上面我們說到的 OpenSea 登入, 就是使用了 Personal Sign 這個方式。

personal-sign

Eth_Sign

用戶需要提高警覺的簽署

ethsign 是 MetaMask 很早期提供的簽名方法,這個方法需要傳入一個 32 byte 的雜湊數 (Hash) 以供簽名,而雜湊數可以是由任何內容得到,因此,僅憑這個無意義的雜湊數,簽名者完全不會知道自己正在簽署什麼內容,這個內容可能是一個交易,一個授權,也可能是網站登入請求,又或者其它任何內容,因此有非常大的風險,現在 MetaMask 已經開始對這類的簽名請求彈出紅色警告,以警示用家,避免墮入騙局。

噹噹,敲敲鐘。 ethsign 是一個非常危險的簽名方式,這也是許多騙案所使用的簽名方法。 上面我們說到的 OpenSea 登入, 就是使用了 Personal Sign 這個方式。

eth-sign

EIP712 Sign

一種更高級、更安全的交易簽名方法

EIP712 Sign是一種更安全的簽名標準,這個標準規定了簽名數據的結構,也加入了對數據的作用域限制,如 domain,驗證合約地址等。

ERC712 簽名經常會被用在執行 metatransaction 等合約執行中,例如 OpenSea NFT 上架,降低價格等過程都會出現 EIP712 簽名請求。

這個標準的好處是,簽名者可以清楚看到自己在簽署的內容,很大程度上降低被釣魚的風險。 但是,這並不等於這種簽名是絕對安全的,簽名時,一定要看清楚究竟在簽署什麼內容。

personal-sign

 

簽名示例

Frank 為三種簽名都做了一個示例,有興趣的讀者可以去簽名示例看看原始碼,親自嘗試一下。

 

結語

綜上所述,絕對不可以認為簽名不上鏈,沒有風險。相反,區塊鏈的簽名其實可以認為是無所不能,特別是使用 ethsign 的方式彈出的簽名,無論是開發團隊還是個人都要加倍小心。

 

Frank Shi

UD區塊鏈技術主管

.擁有深入層面區塊鏈技術知識

.致力研究及參與區塊鏈項目開發及Web3 應用未來發展