tweetnacl library提供两个函数来生成公钥和密钥对:crypto_box_keypair(pk,sk);
和crypto_sign_keypair(pk,sk);
:
第一个函数初始化用于
使用crypto_box(c,m,mlen,n,pk,sk);
API加密消息并
稍后使用crypto_box_open(c,n,pk,sk)
函数对其解密。
好的示例代码似乎很难找到。Here is one用于
库libsodium是基于NaCl的tweetnacl。
但是,第二个函数初始化一个密钥对,该密钥对可用于
使用crypto_sign(sm,&smlen,m,mlen,sk);
API对消息进行签名,然后
稍后使用crypto_sign_open(m,&mlen,sm,smlen,pk);
验证签名
在查看密钥生成代码时,我发现在这两种情况下,密钥生成都以256位随机数开始,但产生的结果不同
最后是公钥。实际上,返回的512位签名sk
密钥在其上半部分包含公钥pk
的副本。
我查阅了所有我能找到的文件,这些文件并不多。
目前,我得出的结论是,对于这两个设施,没有合适的方法使用相同的单密钥对。我说得对吗?
最佳答案
它们不是同一种密钥对。这两种类型的密钥生成都可以从32字节的种子开始,但这两种类型的密钥对中生成的公钥和私钥之间的关系不同,因此不能互换使用它们。私有签名密钥包含其公钥这一事实与此无关。