Положение:
Я хочу предоставить услугу веб-сайта, где пользователи могут вводить некоторые данные, например, 15 байтов длинное имя "namedata" и получить код ключа.
Затем этот код можно использовать для разблокировки некоторой функции в игре (предоставленной мной), в которой также используются именованные данные (например, пользовательский лазгун с именем «Лазган из Питера», где «Питер» - именованные данные).
Мой план состоит в том, чтобы зашифровать именованные данные вместе с некоторой короткой подписью (например, 5 байтов "привет") с асимметричным шифрованием (используя закрытый ключ) в код ключа (что-то вроде AsdF-STaCK-0VEr-FL0W-13Abbx).
Затем пользователь вводит код ключа в игру, и игра затем декодирует данные с открытым ключом в именованные данные и подпись, и вуаля, пользователь получает свой «Лазган из Питера».
Проблема:
Проблема (или мое недопонимание?) Заключается в том, что типичное шифрование RSA может использоваться только для шифрования данных длины ключа, например, 1024 бита, что было бы слишком длинно для моего кода ключа - ни один пользователь не хочет вводить коды длиной более 150 символов (при условии, что для каждого введенного символа около 6 бит).
Вопрос:
Какой тип шифрования я должен использовать, чтобы получить приличную безопасность, чтобы только мой сервис веб-сайта мог генерировать «правильные» коды, но пользователю нужно только ввести коды размером с именованные данные + подпись + небольшие накладные расходы?
Примечание. Исполняемый файл игры, очевидно, является общедоступным, и любой сохраненный в нем ключ шифрования может быть считан из него, но сам исполняемый файл не может быть изменен (защита от копирования).