You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BouncyCastle生成SHA-256withPLAIN-ECDSA确定性签名是否可行?

可以通过BouncyCastle实现确定性ECDSA签名,你当前使用的普通ECDSA签名逻辑采用随机k值生成签名,因此相同输入每次签名结果不同,只要替换为遵循RFC6979规范的确定性k生成逻辑即可实现需求。

修改后的代码示例

var curve = SecNamedCurves.GetByName("secp256r1");
var domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);

var keyParameters = new ECPrivateKeyParameters(
                        new Org.BouncyCastle.Math.BigInteger(1, privateKey),
                        domain);

// 替换为RFC6979规范的确定性ECDSA签名器,算法名按实际使用的哈希调整,比如SHA1、SHA512对应修改前缀
ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSARFC6979");
// 如果需要输出PLAIN格式(r+s拼接,不是DER编码),可以手动构造签名器:
// var signer = new DsaDigestSigner(new ECDsaSigner(new HMacDsaKCalculator(DigestUtilities.GetDigest("SHA-256"))), DigestUtilities.GetDigest("SHA-256"), new PlainDsaEncoding());

signer.Init(true, keyParameters);
signer.BlockUpdate(message, 0, message.Length);
var signature = signer.GenerateSignature();

注意事项

  • 如果你需要保留原有PLAIN-ECDSA的输出格式(r值和s值直接拼接,而非默认DER编码格式),请使用代码注释中手动构造签名器的写法,输出格式和原有逻辑完全一致,仅将k值生成逻辑改为确定性派生。
  • RFC6979是行业通用的确定性签名规范,安全性和传统随机k的ECDSA完全一致,不存在额外安全风险。

内容的提问来源于stack exchange,提问作者Warrick FitzGerald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:15:02