【发布时间】:2015-11-06 11:53:27
【问题描述】:
libsodium 是一个很棒的加密库,而 GnuPG 是一个很棒的密钥管理和签名软件。
GnuPG recently released support for Ed25519 signing keys, and submitted a draft to the IETF.
我想通过我的 Web 应用程序通过 GnuPG 离线使用 Sodium 生成的密钥。这将使我不必每次签名时都用我的私钥信任服务器,而且我不必在我的客户端上使用特殊软件(即使我必须编写它),因为我已经拥有并且信任 GnuPG。
我该怎么做?如何将 libsodium 私钥转换为 OpenPGP 兼容的私钥包?
【问题讨论】:
-
我什至无法在任何地方找到 libsodium 的密钥格式规范。很高兴知道现代加密库在这方面可能比旧的库甚至更糟。
-
这是一个公钥:
\xef'\x07Ga#\xfe\xbc7\x8a\x00\xb3o\xbe\x92}k_\xa8\x8aH\x99cEN\x84\xf7<\x05\xe2\xd8\x8a和对应的密钥:\x88\xf2\xe6`\xb2\xd9W@\xd7\x8e`1'\xb9\x16XE\xe8_bq\xa7e\n\xb5\x13~o\xe7b\x9f\xd9\xef'\x07Ga#\xfe\xbc7\x8a\x00\xb3o\xbe\x92}k_\xa8\x8aH\x99cEN\x84\xf7<\x05\xe2\xd8\x8a公钥是 32 字节长;密钥 64 个字节(但最后 32 个字节是公钥) 也许我应该在我的问题中提到这一点,但我要转换的密钥是用crypto_sign_keypair()生成的。 -
@MaartenBodewes 我认为 LibSodium 使用相同的 format as Supercop。即与公钥连接的种子。通过使用 SHA-512 对种子进行散列,您可以获得用于确定性散列的 256 位秘密前缀和一个 256 位值,在处理几个位后,该值变为私有标量。
-
我担心发现这一点将涉及阅读源代码并自己执行实际转换。我称之为一个项目。
-
不知道是什么,但为了 500 声望,我今天会学到一些新东西
lol
标签: cryptography elliptic-curve openpgp nacl-cryptography