我可以将 pyNaCl 密封盒与现有的 openssh 密钥对一起使用吗?

Can I use pyNaCl sealed boxes with an existing openssh key pair?

我正在尝试使用 PyNacl 进行非对称加密(public 和私人 ssh 密钥对)以安全地传输数据。

我使用的是通过 ssh-keygen -t ed25519 以 openssh 格式生成的现有密钥对。 (下面我的代码的更多细节)

问题基本上是,以前有人成功地做到过吗?如何做到的?

提取后,我相当有信心使用名为 openssh 密钥解析器的库获取密钥。 (64 字节,32 私有然后 32 public)

"private_public": "b'2\xfbO\xab\xd1\\Ie\xa3\x8b\xc9\x16\xe8\xd5\xfcc\xdc\xa5k+H\tQ\xae\"\x1c5+\x89Q\xe1p\xf5\x01\xe4\xfa\xa1<[5\xc4\x07\xc8\xf5\xd5\xa7\xbb\xa3\xefZm\x99\xd7<y\x96\xda\x89x\x04\xcc\x0e8p'"

我使用 public 密钥创建一个密封盒来进行加密

#load the public key
server_pubk = (OpenPublicKey.from_string(server_pubk_file_content))
#get exactly the key bytes
server_pubk = server_pubk.params.data['public']
#pass the key bytes to nacl
server_pubk = nacl.public.PublicKey(server_pubk)
#now we create the nacl SealedBox 
sealed_box = SealedBox(server_pubk)
#and encrypt a message
encrypted = sealed_box.encrypt(message)

据我所知,这符合预期。我的问题是当我尝试使用私钥创建一个将解密消息的密封盒时。

unseal_box = SealedBox(server_privk)
plaintext = unseal_box.decrypt(encrypted) #does not work with the unhelpful error traceback below :

File "script.py", line 140, in <module>
unseal_box.decrypt(encrypted)
File "/usr/lib/python3.7/site-packages/nacl/public.py", line 361, in decrypt self._private_key,
File "/usr/lib/python3.7/site-packages/nacl/bindings/crypto_box.py", line 318, in crypto_box_seal_open
raising=exc.CryptoError)
File "/usr/lib/python3.7/site-packages/nacl/exceptions.py", line 81, in ensure
raise raising(*args)
nacl.exceptions.CryptoError: An error occurred trying to decrypt the message

我查了一下,发现当我这样做时

server_privk = nacl.public.PrivateKey(server_privk)

创建将由 SealedBox 使用的 PrivateKey 对象,nacl 生成一个 public 密钥(server_privk.public_key 属性),它与我知道的 public 密钥不匹配是正确的并在第一个 SealedBox 中使用。

我尝试将 server_privk.public_key 重新分配给我用来制作第一个盒子的同一个键,但这给了我同样的问题。

我目前的想法是:

任何答案或想法将不胜感激:)

参考资料: openssh 解析器:https://github.com/scottcwang/openssh_key_parser 氯化钠:https://pynacl.readthedocs.io/en/latest/public/

好的,问题解决了,pyNaCl可以和ed25519一起使用,你只需要正确转换密钥即可。 在这里找到了如何做到这一点:gist.github.com/R-VdP/b7ac0106a4fd395ee1c37bfe6f552a36

有点烦人,文档不完整...