Какой тип пары ключей использовать в libsodium?Каковы различные возможности каждого? - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу использовать подходящую пару ключей libsodium в качестве идентификатора пользователя, но пока не знаю, какие функции криптографии я предоставлю.

Похоже, в libsodium есть три типа генерации пары ключей:

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() с crypto_box_easy()).Какова матрица совместимости между типами пар ключей и криптографическими функциями / возможностями?
  2. Если есть тип ключа, который можно использовать со всеми функциями, какая из них?

1 Ответ

0 голосов
/ 11 февраля 2019

Если вы хотите создать пару ключей для операции box, используйте crypto_box_keypair().

Если вам нужна пара ключей для подписи, используйте crypto_sign_keypair().

Если вам нужна пара ключей для обмена ключами, используйте crypto_kx_keypair().

Не гарантируется, что ключ для одной операции пригоден для другой операции.И хорошая гигиена в криптографии - никогда не использовать ключ для двух разных целей.

Если вам нужно получить как пару ключей для обмена ключами, так и для подписи, вы можете использовать crypto_kx_seed_keypair() и crypto_sign_ed25519_seed_keypair() дляэтот.Блочная операция также обеспечивает crypto_box_seed_keypair().

Эти функции детерминистически выводят пару ключей из начального числа.Это семя можно считать вашим действительным секретным ключом, из которого вы можете вычислять различные типы пар ключей.

...