在 Java/Kotlin 中生成 ed25519 密钥

Generating ed25519 keys in Java/Kotlin

我希望在 java/kotlin 中生成 ed25519 密钥。密钥对应该是确定性的,因为如果可以提供一些在生成过程中使用的种子信息,他们可以再次生成相同的密钥对。

我知道可以使用助记符来实现这一点。请告诉我如何处理这个问题。我正在寻找可以帮助我在 java.

中实现这一目标的著名图书馆

您应该使用 libsodium,这里是文档的 link

libsodiumDJB's NaCl 最积极维护的实现,因此如果您使用 ed25519curve25519 椭圆曲线加密,您应该使用 libsodium.

Java/Kotlin 中有 number 个绑定。

它真的很容易使用而且很安全,例如,它在常数时间内执行标量乘法。

为了回答您关于确定性的问题,libsodium 提供了一种从种子生成确定性密钥的机制。请注意,您需要确保您的种子有足够的熵才能安全。

你应该调用 int crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk, const unsigned char *seed);generate 来自种子的 ed25519 密钥对。

Here 是一个库,它提供了对 Java:

中该函数的绑定
    /**
     * Deterministically generate a public and secret key.
     * Store the seed somewhere if you want to generate these
     * keys again.
     * @param publicKey Public key will be populated here of size {@link #PUBLICKEYBYTES}.
     * @param secretKey Secret key will be populated here of size {@link #SECRETKEYBYTES}.
     * @param seed A random seed of size {@link #SEEDBYTES}.
     * @return True if generated successfully.
     */
    boolean cryptoKxSeedKeypair(byte[] publicKey, byte[] secretKey, byte[] seed);