2016-04-21 3 views
-2

Мы разрабатываем приложение PHP, которое хранит личную и анонимную информацию («отчеты») в базе данных MySQL.Безопасное шифрование или создание уникального идентификатора для внешней связи в PHP?

Для каждого человека может быть несколько «отчетов», которые отправляются в регистр третьей стороны.

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

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

Какой метод шифрования можно использовать для шифрования идентификатора человека, поэтому он всегда даст тот же результат? Если посмотреть (например) libsodium extension docs, я бы подумал, что мы должны будем использовать тот же самый номер каждый раз, когда мы шифруем идентификатор человека. Это, похоже, очень обескураживает.
Та же проблема будет применяться при использовании шифрования AES, с помощью РНР openssl_encrypt где:

Выдает ошибку уровня E_WARNING если пустое значение передается в через параметр IV.

+1

Почему хеширование не работает, если оно находится в отдельной колонке в ваших записях? – mitkosoft

ответ

0

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

+

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

Да, даже не беспокойтесь о «клавише» против части «iv/nonce». Просто используйте defuse/php-encryption или Halite. Они оба дают вам аутентифицированное шифрование, и все, что вам нужно дать, это либо message, либо key.

+0

Спасибо за упоминание Halite, я не сталкивался с этой библиотекой обертки. Проблема с использованием одного из этих методов, который хранит iv/nonce в шифрованном тексте, будет производить разные результаты каждый раз, если потребуется снова зашифровать идентификатор пользователя. –

+0

Да, вам нужно индексировать этот набор данных? Используйте отдельный столбец и храните HMAC-SHA256 (имя пользователя, отдельноKeyForHMACPurposesOnly). –