Я работаю над игрой MMORPG, построенной на Java, при этом конечный пользователь запускает исполняемый файл Java (клиент) в своей системе, который подключается к нашей игре (серверу).
Иногда вы получаете некоторых игроков, которые менее чем хороши и требуют бана, некоторые люди, однако, действительно настойчивы, которые требуют бана IP, а затем есть третий тип людей, которые имеют знания о компьютерах выше среднего и знают, как измениться ( или маскировать с помощью vpn/прокси) их IP.
Чтобы бороться с этими последними типами людей, мы использовали для создания файла UID где-то в их папке AppData с уникальным ключом, генерируемым при запуске клиента (если файл не найден, он будет генерировать его для них, но недостаток здесь в том, что если кто-то находит этот файл, они могли бы легко просто удалить его, и при следующем запуске он воссоздал бы для них новый и другой)
Некоторое время назад я где-то читал, что Microsoft создает «отпечаток пальца» на основе нескольких системных спецификаций, которые в значительной степени уникальны для каждой системы, но при регенерации будет получен один и тот же ключ, поэтому вы можете переустановить Windows 10 без необходимости использовать какой-либо серийный номер. Возможна ли такая система на чистой Java?
Подводя итог, нам нужен уникальный ключ для каждой машины, на которой он запускается (или, по крайней мере, очень-очень маленькая вероятность создания дубликата ключа), но если код генерации будет запущен снова, он должен сгенерировать тот же ключ.