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

Libsodium中签名私钥为何为64字节?与Ed25519标准的差异疑问

为什么Libsodium中Ed25519私钥长度是64字节而不是标准的32字节?

Libsodium里的crypto_sign_SECRETKEYBYTES(对应Ed25519的crypto_sign_ed25519_SECRETKEYBYTES)定义为64字节,这个差异源于Libsodium对Ed25519密钥对的实用化存储设计:

  • 标准Ed25519的私钥核心是32字节的随机种子,公钥是通过对这个种子做SHA-512哈希后,取前32字节作为秘密值,再推导生成的。
  • Libsodium选择将32字节种子 + 对应的32字节公钥合并存储在同一个64字节的私钥变量中,这样在执行签名操作时,不需要重复计算公钥,直接读取存储的公钥部分,提升了调用效率。
  • 如果你需要获取标准定义的32字节私钥(种子),可以用Libsodium提供的crypto_sign_ed25519_sk_to_seed函数从64字节的私钥中提取:
    unsigned char seed[crypto_sign_ed25519_SEEDBYTES];
    crypto_sign_ed25519_sk_to_seed(seed, sk);
    
  • 反过来,如果你已经有32字节的种子,也可以用crypto_sign_ed25519_seed_keypair函数生成包含公钥的64字节私钥:
    unsigned char pk[crypto_sign_PUBLICKEYBYTES];
    unsigned char sk[crypto_sign_SECRETKEYBYTES];
    crypto_sign_ed25519_seed_keypair(pk, sk, seed);
    

这种设计完全符合Ed25519的安全标准,只是Libsodium为了简化开发、提升性能做的封装,本质上和标准Ed25519的密钥体系是一致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:52:07