Go-Ethereum

不帶“x19Ethereum 簽名消息”前綴的簽名

  • July 12, 2020

我知道這web3.eth.sign(...)將在消息中添加“\x19Ethereum 簽名消息”前綴並使用 keccak256 進行雜湊處理。無論如何在簽名之前刪除前綴?或者任何我可以用來做沒有前綴的簡單簽名的庫?

ethereumjs-util具有hashPersonalMessage添加前綴並對其進行簽名的方法。

您可以查看程式碼庫並了解它是如何實現的:

exports.hashPersonalMessage = function (message) {
 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
 return exports.sha3(Buffer.concat([prefix, message]))
}

很明顯,您可以如何修改此程式碼段以不添加前綴:)

不,沒有“\x19Ethereum 簽名消息”前綴的簽名是不安全和危險的。

例如,請參閱ricmoo 的https://github.com/ethers-io/ethers.js/issues/555

一般來說,這是不可能的,而且非常不安全。:秒

基本上,允許在沒有前綴的情況下對原始消息進行簽名,使應用程序能夠竊取所有乙太幣、令牌和資產,這就是 MetaMask 不允許您執行此操作的原因,並且它總是會強制為簽名消息添加前綴(即使當消息是一個散列,它仍然會為其添加前綴,只是嵌入的消息長度為 32)。

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