我是智能合约世界的新手。我对数字签名安全性存有疑问。 我想知道攻击者是否可以重复使用我签名的相同邮件并将其多次发送到另一个地址?
客户端代码示例:
var msg = "hello";
var sh3 = web3.sha3(msg);
web3.eth.sign(account, sh3, (error, result) => {
sendToServer({ sign: result, message: msg });
});
服务器端:
const sign = data.sign;
const message = Buffer.Buffer(data.msg);
const stringToSign = EthJS.sha3(message);
const res = EthJS.fromRpcSig(sign);
const pubKey = EthJS.ecrecover(stringToSign, res.v, res.r, res.s);
const addrBuf = EthJS.pubToAddress(pubKey);
const addr = EthJS.bufferToHex(addrBuf);
console.log(addr);
是的,这段代码是至少第一次某个地址发送消息的有效证据。但是攻击者可以窃取此消息并继续重新发送。此时,服务器无法知道消息是从原始地址发送还是从其他人发送。我的错是什么?