4

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

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

crypto_box_keypair()
crypto_kx_keypair()
crypto_sign_keypair()

此外,似乎有 3 种类型的键:

// Source: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/libsodium-wrappers/index.d.ts
export type KeyType = 'curve25519' | 'ed25519' | 'x25519';

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

所以,问题:

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

1 回答 1

4

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

如果您需要用于签名的密钥对,请使用crypto_sign_keypair().

如果您需要用于密钥交换的密钥对,请使用crypto_kx_keypair().

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

如果您需要为密钥交换和签名派生密钥对,您可以使用crypto_kx_seed_keypair()and crypto_sign_ed25519_seed_keypair()。盒子操作也提供crypto_box_seed_keypair()

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

于 2019-02-11T11:35:54.170 回答