cryptography - Diffie-Hellman 椭圆曲线私钥的长度

标签 cryptography elliptic-curve diffie-hellman

我正在使用 FIPS 186-3 推荐的 Diffie-Hellman 椭圆曲线曲线。我正在尝试确定私钥的最大长度,根据 RFC 5915,它应该是:

ceiling (log2(n)/8) ,其中 n 是曲线的阶数

对于 P-256 曲线,我得到的最大长度为 32,这对应于我在代码中看到的内容(假设是无符号表示)。然而,对于 P-521 曲线,我得到的最大长度为 65,但我在代码中得到的私钥长度为 66。以下是 P-521 曲线中的 66 字节私钥示例:

5367794175793176027889969828113014603157344894208126643379049713388781962338446363455749219733919077469072043715066195336 337088038146192289964998476049182286

十六进制:

01 90 59 2F 64 1C 73 AB F8 57 C4 F0 F2 A3 17 DD 5E 5F 64 B1 3C 61 15 8F E2 AC 34 DD 3F FC 6F 9B F1 38 9B 66 0F 27 34 60 75 E3 32 B0 B2 80 DF 9F 2A FE 交流 FF 82 BE 36 00 77 7A 92 B1 CB F7 7F 98 6E 4E

其公钥是(没有前导 0x04 字节):

01 F0 64 36 14 25 89 F8 7E 0D 5F 0E F9 26 36 D7 5C 4A 45 D7 9C 86 BD F8 C5 B9 A7 AA C4 C2 EB 56 52 DD BD BE E1 A0 5B DD A1 1F D8 79 D8 BA 2A 18 68 56 C0 D7 0A 4D D6 2B AB BD 8E D9 33 7F B1 FF E5 18 00 B2 06 21 D9 DA C1 BA A2 E7 43 69 06 FF 03 2F 05 FC 0E 44 74 A1 A3 3B 2E 7E B1 68 01 B2 7 F B9 94 EB 8C C7 47 D7 02 A5 46 4E 88 32 59 DD 27 DE 72 C2 6D 8D B4 3B D0 45 67 31 AF 8E 1C 30 87 42 38 9F

有人知道为什么可以获得 66 字节长度的私钥吗?根据FIPS 186-3文档,P-521曲线的顺序为:

n = 6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321 113864768612440380340372808892707005449

上限 (log2(n)/8) = 65。

问候, -马丁·兰斯勒

最佳答案

根据Python(我可能以某种方式误用),log2(n)/8是65.125,所以它的上限是66。

n 的长度为 521 位(正如我所预期的那样 - 我通过打印出十六进制表示进行检查,该表示以“1”开头,有 131 个十六进制数字)。 521/8 为 65.125。

关于cryptography - Diffie-Hellman 椭圆曲线私钥的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162422/

相关文章:

ruby - 如何用另一种语言解密由 Ruby 的 `symmetric-encryption` gem 加密的数据?

java - 将 P-256 DH java 字符串转换为 java PublicKey

javascript - 斯坦福 Javascript 加密库 (SJCL) : How to build sjcl. js 并包含 CBC 模式

java - Android 中的 Diffie Hellman key 交换

Ruby/openssl:将椭圆曲线点八位字节字符串转换为 OpenSSL::PKey::EC::Point

java - 如何在X25519中为PrivateKey生成PublicKey?

python-3.x - Python matplotlib 无法在椭圆曲线 y^2+x^3+x^2=0 上绘制Acnode(孤立点)

node.js - Electron 在单独的线程上运行加密 Diffie Hellman key 生成

ios - 我想在 openssl 中更改 diffiehellman 的 P 和 G 值

python - 将解密的 RSA 值转换为字符串