【问题标题】:Secp256k1 Curve Signature close to expected signature but missing 2 segementsSecp256k1 曲线签名接近预期签名但缺少 2 段
【发布时间】:2020-03-17 01:27:32
【问题描述】:

私钥:

7a01628988d23fae697fa05fcdae5a82fe4f749aa9f24d35d23f81bee917dfc3

消息:

695369676e65645468697344617461546861744973323536426974734c6f6e67

结果:

205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f743
04ee40d9fe8dd03e6d42bfc7d0e53f75286125a591ed14b39265978ebf3eea36

预期结果:

304402205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f7430220 04ee40d9fe8dd03e6d42bfc7d0e53f75286125a591ed14b39265978ebf3eea36

如您所见,预期结果有 2 个部分,而我的结果没有:

304402 205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f743 0220 04ee40d9fe8dd03e6d42bfc7d0e53f752836125a9811ed36126a5911ed

我在这里遗漏了什么,我的结果是否有一些压缩或发生了什么。

谢谢!

【问题讨论】:

    标签: encryption publish-subscribe bitcoin signature ecdsa


    【解决方案1】:

    我不知道您是如何得到结果的,但预期的结果看起来像 ASN.1/DER 编码中的标准 ECDSA 签名。

    分解:

    • 30: 表示将跟随 ASN.1 SEQUENCE
    • 44:序列的长度,在本例中为 68 个字节
    • 02: 表示将跟随 ASN.1 INTEGER
    • 20:表示整数的长度,本例为32字节
    • 55 ... 43:签名的r值的32字节
    • 02: 表示将跟随 ASN.1 INTEGER
    • 20:表示整数的长度,本例为32字节
    • 04 ... 36签名的s值的32字节

    正如我所说,我不确定您当前拥有的结果使用的是什么类型的编码。它似乎包含能够从字节数组中提取rs 值所需的最少信息,但会丢弃其他所有信息。 (我怀疑它可能是PER 编码或自定义编码方案的某种变体。)

    特别有趣的是,r 整数 (20) 的长度指示符出现在您的结果中。除了实际的rs 值之外,这是成功解析签名所严格需要的唯一附加信息。由于 rs 可能是 32 或 33 个字节,因此您需要一个长度指示器来了解 r 的结束位置和 s 的开始位置。

    【讨论】:

    • 您好,我正在关注这个过程:block.io/api/simple/signing 并使用这个 c# 库进行签名:github.com/Chainers/Cryptography.ECDSA
    • 那么可能值得尝试另一种方法而不是SignCompressedCompact()。或者找到另一个库,因为你使用的那个库的文档很差。
    • 我会尝试寻找另一个库进行签名
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多