gpt4 book ai didi

node.js - ECDH 私钥大小

转载 作者:太空宇宙 更新时间:2023-11-03 21:48:36 27 4
gpt4 key购买 nike

我知道 ECDH 中的 key 大小取决于椭圆曲线的大小。

如果是256位曲线(secp256k1), key 将为:

Public: 32 bytes * 2 + 1 = 65 (uncompressed)
Private: 32 bytes

384 位曲线 (secp384r1):

Public: 48 bytes * 2 + 1= 97 (uncompressed)
Private: 48 bytes

但是对于521位曲线(secp521r1)情况非常奇怪:

Public: 66 bytes * 2 + 1 = 133 (uncompressed)
Private: 66 bytes or 65 bytes.

我使用 node.js 加密模块来生成此 key 。

为什么521位曲线的私钥值是可变的?

最佳答案

其他曲线的私钥也是可变的,但在编码为字节时它们不太可能表现出这种差异。

公钥被编码为两个静态大小整数,前缀为未压缩点指示符04。大小与 key 大小(以字节为单位)相同。

私钥实际上并没有预先建立的编码。它是 1..N-1 范围内的单个随机值(或向量),其中 N 是曲线的阶数。现在,如果您将此值编码为可变大小无符号数字,那么通常它将与 key 的大小相同(以字节为单位)。然而,它可能偶然小一个字节、两个、三个或更多字节。当然,它小得多的可能性非常低。

现在 521 位 key 有点奇怪,顺序的第一个最高有效字节不是以设置为 1 的位开始的;它只有最低有效位设置为1。这意味着私有(private)值的最高有效字节(通常称为s)更有可能是字节更短。

确切的机会当然取决于订单的总值(value):

01FF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFA
51868783 BF2F966B 7FCC0148 F709A5D0
3BB5C9B8 899C47AE BB6FB71E 91386409

但正如您可能猜到的那样,它非常接近 2 中的 1,因为之后有许多位设置为 1。丢失两个字节的概率当然是 512 中的 1,丢失三个字节的概率是 131072 中的 1(等等)。

<小时/>

请注意,ECDSA 签名大小也可能会波动。 X9.42 签名方案使用两个 DER 编码的有符号整数。如果最高有效字节的最高有效位设置为 1,则它们被签名的事实可能会引入全部设置为零的字节,否则该值将被解释为负数。事实上,它由两个数字 r 和 s 组成,并且 DER 编码的大小也取决于编码整数的大小,这使得完整编码的大小相当难以预测。

ECDSA 签名的另一种不太常见的(平面)编码使用与公钥相同的静态大小的整数,在这种情况下,它只是 N 字节大小的两倍。

<小时/>

ECDH 不存在此问题。通常,共享 secret 是作为 ECDH 计算结果的点的静态编码 X 坐标,或者至少是使用 key 导出函数 (KDF) 从中导出的值。

关于node.js - ECDH 私钥大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54398706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com