我正在寻找在java / kotlin中生成ed25519密钥。密钥对应具有确定性,因为如果可以提供生成过程中使用的一些种子信息,则它们可以再次生成同一对。
我知道可以使用助记符来实现这一目标。请告诉我该如何处理。我正在寻找一个知名的库,可以帮助我在Java中实现这一目标。
答案 0 :(得分:1)
您应该使用libsodium
,这里是文档的link。
libsodium
是DJB的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);