首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECDH私钥大小

ECDH私钥大小
EN

Stack Overflow用户
提问于 2019-01-28 09:15:58
回答 1查看 3.4K关注 0票数 3

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

如果是256位曲线(secp256k1),则键为:

代码语言:javascript
复制
Public: 32 bytes * 2 + 1 = 65 (uncompressed)
Private: 32 bytes

384-bit曲线(secp384r1):

代码语言:javascript
复制
Public: 48 bytes * 2 + 1= 97 (uncompressed)
Private: 48 bytes

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

代码语言:javascript
复制
Public: 66 bytes * 2 + 1 = 133 (uncompressed)
Private: 66 bytes or 65 bytes.

我使用node.js密码模块生成这个密钥。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 04:21:56

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

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

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

现在521位键有点奇怪,顺序的第一个、最重要的字节开始时没有将位设置为1;它只有最小的位设置为1。这意味着,私有值中最重要的字节(通常称为s)更短的可能性要大得多。

当然,确切的机会取决于订单的全部价值:

代码语言:javascript
复制
01FF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
     FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFA
     51868783 BF2F966B 7FCC0148 F709A5D0
     3BB5C9B8 899C47AE BB6FB71E 91386409

但是,您可能会猜到,它非常接近于2中的1,因为后面有许多位设置为1。丢失两个字节的可能性当然是512个字节中的1个,131072中有3个字节(等等)。

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

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

ECDH没有这个问题。共享秘密通常是点的静态编码的X坐标,它是ECDH计算的结果,或者至少是使用密钥派生函数(KDF)从它导出的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54398706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档