2017-12-04 12 views
0

私はアプリの暗号メッセージのアンドロイド実装を行います。Libsodium鍵交換(共有秘密)が異なる方法で

サーバ側では、クライアントとサーバの間で共有秘密情報を作成するために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

crypto_scalarmult()の出力をキーとして直接使用しないでください。好ましくは、関係する公開鍵など、両当事者が知っている他のデータでハッシュされなければならない。 crypto_scalarmult()のlibsodiumドキュメントを参照してください。crypto_kx()の内容も説明しています。

つまり、scalarmult() + hash + secretbox()シーケンスは、両方のライブラリに単一のハイレベルAPIとして既に存在し、crypto_box()と呼ばれています。