Как создать уникальный идентификатор, который нельзя подделать?

У меня есть клиентское приложение.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 несколько раз и никогда не сталкивался.

Другие вопросы по тегам