Безопасно ли использовать SHA-хэш секретного значения в качестве внешнего идентификатора? - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь спроектировать систему, в которой мне нужно хранить секретные значения пользователей в базе данных (строки с открытым и открытым ключами).Само хранение секретов будет осуществляться с помощью HashiCorp Vault.Но у меня есть еще одно требование, запрещающее хранить две равные пары (закрытый ключ + открытый ключ).Поскольку я не могу проверить уникальность ключей перед хранением, я должен хранить хэш оригинальных секретов.Моя идея вычислить хэш SHA из секретных данных и сравнить его с уже сохраненными хешами.Итак, мне интересно, является ли это рабочим решением и могу ли я использовать этот дайджест в качестве внешнего идентификатора для доступа к данным (поскольку хеш подразумевает уникальность ввода данных).Надеюсь на вашу помощь.

1 Ответ

4 голосов
/ 28 марта 2019

Моя идея вычислить хэш SHA из секретных данных и сравнить его с уже сохраненными хешами

Я бы предположил, что криптографический хеш - лучший вариант, если у вас нет другого уникального идентификатора.

(поскольку хеш подразумевает уникальность ввода данных)

И это неверное предположение.Независимо от того, криптографические хеши разработаны так, чтобы иметь ничтожную вероятность столкновения (вероятность того, что два входа имеют одинаковое значение хеш-функции), в основном все еще существует некоторая (очень малая) вероятность.

Для контролируемых (форматированных) входов я бы сказал,вероятность столкновения настолько мала, что вы можете смело использовать хеши в качестве уникальных идентификаторов, но подготовиться к тому, чтобы обрабатывать очень редко случай, когда происходит столкновение (возможно, вы можете опубликовать его и стать известным)

вычислитьХэш SHA из секретных данных

Относительно безопасности - очень сложно (= невозможно) вычислить входное значение на основе его хеша (предполагая, что криптографический хеш в настоящее время считается безопасным)

Осторожноразмера пространства - если вы говорите 1000 известных значений, проверять, какое секретное значение имеет определенный хэш, является тривиальным.Предполагая, что вы храните пары ключей, все должно быть в порядке

...