Go-Ethereum
不帶“x19Ethereum 簽名消息”前綴的簽名
我知道這
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)。