Libsodium密钥交换(共享秘密)以不同的方式

时间:2017-12-04 19:50:49

标签: java libsodium

我为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)

是否有可能以不同的方式制作相同的共享密钥?或者我需要手动编写类似的方法吗?

1 个答案:

答案 0 :(得分:0)

crypto_scalarmult()的输出不应直接用作密钥。必须对其进行散列,最好是双方都知道的其他数据,例如所涉及的公钥。请参阅crypto_scalarmult()上的libsodium文档,其中还介绍了crypto_kx()的作用。

话虽如此,scalarmult() + hash + secretbox()序列已作为单个高级API存在于两个库中,并称为crypto_box()