Signature

簽名簡訊應該使用“x19Ethereum 簽名消息”前綴嗎?

  • January 25, 2022

背景:我想在 Trezor 中實現簽名消息功能。

是否有簽署簡訊的標準?

到目前為止,我發現 etherscan.io 對不帶前綴的消息進行簽名,即它簽名keccak(msg),但也接受“帶有 Geth 前綴”的簽名keccak("\x19Ethereum Signed Message\n32"+keccak(msg))keccak("\x19Ethereum Signed Message\n"+strlen(msg)+msg)不接受表格的簽名消息。

MyEtherWallet 只接受沒有任何前綴的簽名消息。

但是,如果沒有前綴,則可能會濫用簽名消息功能來簽署交易。這是故意的嗎?

沒有官方標準(在撰寫本文時),並且在這個 EIP 執行緒EIP #683中已經討論了一段時間

根據問題 #3731

Geth\x19Ethereum Signed Message:\n<length of message>在簽名之前將字元串添加到所有數據中(https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign)。如果您想從 Solidity 驗證這樣的簽名,則必須在進行 ecrecovery 之前在solidity 中添加相同的字元串。

有關的

我認為在簽名時始終使用相同的前綴並不省事。例如,如果您已多次部署智能合約,則可以在每個實例上重放簽名。您應該始終使用自定義前綴,並在簽名之前將合約地址添加到散列中。對於 javascript,您可以使用eth-crypto使用自定義前綴對標誌進行簽名,如教程中所述。

引用自:https://ethereum.stackexchange.com/questions/20962