密码学新手,最近在研究BLS签名。写的时候有什么错误还请见谅
我试过生成一个 BLS 密钥对并使用私钥派生一个以太坊账户并签署链上交易。我使用'mattrglobal'库生成BLS密钥,然后将私钥传递给'ethereumjs-wallet'库来派生一个帐户。
const {
generateBls12381G2KeyPair,
} = require("@mattrglobal/node-bbs-signatures");
const {
default: { fromPrivateKey },
} = require("ethereumjs-wallet");
const keyPairTest = (async function () {
const keyPair = await generateBls12381G2KeyPair();
const wallet = fromPrivateKey(Buffer.from(keyPair.secretKey));
console.log(`secretKey: ${Buffer.from(keyPair.secretKey).toString("hex")}`);
console.log(`ethereum address: ${wallet.getAddressString()}`);
})();
虽然我能够推导出以太坊公钥,但我并不期望能够签署有效的以太坊交易,因为我认为不同的曲线参数会阻止我为交易生成有效签名。
然而,通过直接使用 MetaMask 上的私钥(在 Sepolia 测试网上),我能够执行简单的资金转账交易并部署智能合约。
这怎么可能?我是不是忽略了什么?
在我看来,一般不建议对两种不同类型的签名使用相同的密钥,对吗?
我可以使用 BLS12-381 私钥签署以太坊交易吗?
没有。以太坊交易不使用 BLS12-381。
区块链世界中的数字签名通常基于椭圆曲线群。为了签署用户的交易,以太坊使用带有 secp256k1 椭圆曲线的 ECDSA 签名
私钥是一个随机的 256 位数字。您可以在大多数曲线上使用私钥。当 MetaMask 导入您的私钥时,它只会导入一个随机数。