Как создать уникальный идентификатор, который нельзя подделать?
У меня есть клиентское приложение.NET и веб-приложение на PHP-сервере.
В какой-то момент приложение.NET необходимо будет идентифицировать по уникальному идентификатору и передать эти данные веб-серверу по HTTP-сообщению. Веб-сервер ответит некоторыми данными и сохранит уникальный идентификатор в базе данных.
Предположим, у меня есть злонамеренный пользователь, и я хотел бы забанить его по уникальному идентификатору. На мой взгляд, в этом уникальном идентификаторе есть две важные вещи:
- Уникальный идентификатор должен быть действительно уникальным и всегда одинаковым для каждого компьютера
- Пользователь не должен быть в состоянии обмануть систему (забаненный пользователь может создать новый идентификатор и опубликовать его вручную на веб-сервере для получения новых данных)
Как я могу убедиться, что уникальный идентификатор не может быть (легко) сгенерирован пользователем?
Как я могу убедиться, что уникальный идентификатор может быть проверен на сервере для достоверности?
Каков обычный подход (алгоритмы, шифрование?) Здесь?
2 ответа
Хорошо, так что здесь я суммирую:
- Конечно, нет идеальной системы безопасности.
Jeremy Miller
- Ответ Дэна не верный, потому что MySql UUID не зависит от устройства и поэтому не выполняет условие "идентификатор должен быть одинаковым для каждого компьютера"
- Я должен сгенерировать идентификатор (например, UUID), сохранить его где-нибудь на компьютере в зашифрованном виде, включить начальное число в ваш код, а затем передать хэш идентификатора с начальным значением на ваш сервер, требуя, чтобы каждый вызов включал этот хэш вместе с некоторый другой компонент, который вы также включаете в хеш для проверки.
Jeremy Miller
- Этот подход не является надежным, поскольку все локально хранящиеся данные могут быть удалены, но по крайней мере трудно угадать действительный сгенерированный хеш
Создайте UUID для всех приложений и сохраните их в базах данных после проверки и удалите / заблокируйте / пометите UUIDS, чтобы их нельзя было использовать снова
UUID в MYSQL:
http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html
также доступно в postgres и других хранилищах RDBMS
Я создал 10 миллионов списков с uuids несколько раз и никогда не сталкивался.