我为app实现了加密消息的android实现。
服务器端在libsodium库中使用crypto_kx_client_session_keys
来创建客户端和服务器之间的共享密钥。
我使用java设计的NaCl库,其中没有这样的方法(旧的libsodium API用法)。
所以我在crypto_scalarmult_curve25519
(Diffie Hellman)中共享秘密,但最终的共享密钥与服务器的密钥不匹配。
我的代码:
// Shared secret generation
crypto_scalarmult_curve25519(result, serverPublicKey: PublicKey, clientSecretKey: PrivateKey)
// Shared secret decrypt (with SecretBox)
crypto_secretbox_xsalsa20poly1305_open(message, ciphertext, ciphertext.length, nonce, sharedkey)
是否有可能以不同的方式制作相同的共享密钥?或者我需要手动编写类似的方法吗?
答案 0 :(得分:0)
crypto_scalarmult()
的输出不应直接用作密钥。必须对其进行散列,最好是双方都知道的其他数据,例如所涉及的公钥。请参阅crypto_scalarmult()上的libsodium文档,其中还介绍了crypto_kx()
的作用。
话虽如此,scalarmult()
+ hash + secretbox()
序列已作为单个高级API存在于两个库中,并称为crypto_box()
。