在 Java/Kotlin 中生成 ed25519 密钥
Generating ed25519 keys in Java/Kotlin
我希望在 java/kotlin 中生成 ed25519 密钥。密钥对应该是确定性的,因为如果可以提供一些在生成过程中使用的种子信息,他们可以再次生成相同的密钥对。
我知道可以使用助记符来实现这一点。请告诉我如何处理这个问题。我正在寻找可以帮助我在 java.
中实现这一目标的著名图书馆
您应该使用 libsodium
,这里是文档的 link。
libsodium
是 DJB's NaCl 最积极维护的实现,因此如果您使用 ed25519
或 curve25519
椭圆曲线加密,您应该使用 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);
我希望在 java/kotlin 中生成 ed25519 密钥。密钥对应该是确定性的,因为如果可以提供一些在生成过程中使用的种子信息,他们可以再次生成相同的密钥对。
我知道可以使用助记符来实现这一点。请告诉我如何处理这个问题。我正在寻找可以帮助我在 java.
中实现这一目标的著名图书馆您应该使用 libsodium
,这里是文档的 link。
libsodium
是 DJB's NaCl 最积极维护的实现,因此如果您使用 ed25519
或 curve25519
椭圆曲线加密,您应该使用 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);