libsodium 中使用哪种密钥对类型?每个人有什么不同的能力?

Hos*_*een 4 javascript cryptography public-key libsodium nacl-cryptography

我想使用合适的 libsodium 密钥对作为用户身份,但我还不知道我将提供哪些加密功能。

libsodium 中似乎有 3 种类型的密钥对生成:

crypto_box_keypair()
crypto_kx_keypair()
crypto_sign_keypair()
Run Code Online (Sandbox Code Playgroud)

另外,似乎有 3 种类型的密钥:

// Source: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/libsodium-wrappers/index.d.ts
export type KeyType = 'curve25519' | 'ed25519' | 'x25519';
Run Code Online (Sandbox Code Playgroud)

我不知道哪种密钥类型对应于哪个密钥对生成函数,或者它们是否完全对应。

那么,问题是:

  1. 每个密钥对都设计为与某些函数一起使用(例如,crypto_box_keypair()crypto_box_easy())。密钥对类型和加密功能/能力之间的兼容性矩阵是什么?
  2. 如果有一种按键类型可以与所有功能一起使用,那么它是哪一种呢?

Fra*_*nis 5

如果您想为操作创建密钥对box,请使用crypto_box_keypair()

如果您需要密钥对进行签名,请使用crypto_sign_keypair()

如果您需要密钥对进行密钥交换,请使用crypto_kx_keypair()

不保证用于一项操作的密钥可用于另一项操作。密码学中的良好卫生习惯是永远不要将密钥用于两个不同的目的。

如果您需要派生用于密钥交换和签名的密钥对,则可以使用crypto_kx_seed_keypair()crypto_sign_ed25519_seed_keypair()来实现。还提供了盒子操作crypto_box_seed_keypair()

这些函数确定性地从种子中导出密钥对。该种子可以被视为您实际的密钥,您可以从中计算不同类型的密钥对。