【问题标题】:tweetnacl api and different key pairstweetnacl api 和不同的密钥对
【发布时间】:2016-02-23 14:45:10
【问题描述】:

tweetnacl library 提供了两个函数来生成公钥和私钥对:crypto_box_keypair(pk,sk);crypto_sign_keypair(pk,sk);

  1. 第一个函数初始化旨在用于 使用crypto_box(c,m,mlen,n,pk,sk); API 加密消息并 稍后使用crypto_box_open(c,n,pk,sk) 函数解密这些。 好的示例代码似乎很难找到。 Here is one 为 库 libsodium 是基于 NaCl 的 tweetnacl。

  2. 然而,第二个函数初始化一个密钥对,可用于 使用crypto_sign(sm,&smlen,m,mlen,sk); API 签署消息,并 稍后使用crypto_sign_open(m,&mlen,sm,smlen,pk);验证签名

查看密钥生成代码时,我发现在这两种情况下,密钥生成都以 256 位随机数开始,但产生的结果不同 公钥到底。事实上,返回的 512 位签名 sk 密钥包含公钥 pk 的副本,可以说是上半部分

我浏览了所有我能找到的文档,但并不多。 目前我得出的结论是,没有正确的方法可以为这两个设施使用相同的单个密钥对。我说的对吗?

【问题讨论】:

  • 将密钥用于多种用途可能会使您的系统遭受严重攻击。始终将密钥用于其预期的单一目的。
  • 这个问题的背景是:要建立对从其他人收到的公钥的信任,有必要验证这是原始公钥(通过其他方式)。例如,密钥的所有者可以将它的十六进制表示形式写在纸上并将其交给某人。当然,这是一个困难的过程。因此,如果这样的密钥对可以用于两种操作(例如在 PGP 中),将会很有帮助。
  • 或者您可以为两个不同的用例生成两个密钥对,即right thing to do

标签: c digital-signature public-key-encryption


【解决方案1】:

它们不是同一种密钥对。两者的密钥生成都可能从一个 32 字节的种子开始,但是这两种密钥对中生成的公钥和私钥之间的关系是不同的,所以不能互换使用。私有签名密钥包含其公钥这一事实与此无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多