Вы можете просто объединить серийный номер устройства, имя / код функции и некоторую секретную соль и хешировать результат с помощью SHA1 (или другого алгоритма безопасного хеширования). Устройство сравнивает данный хеш с хешем, сгенерированным для каждой функции, и, если оно находит совпадение, оно активирует эту функцию.
Кстати, чтобы уменьшить количество символов, я бы предложил использовать base64 в качестве кодировки после прохода хеширования.
SHA-1 выглядит наилучшим образом. Однако из примера вывода ключей SHA-1 видно, что они довольно длинные (40 символов). Получу ли я достаточные результаты, если беру результат с 40 символами и, скажем, усекаю все, кроме последних 16 символов?
Как правило, урезать хэши не очень хорошая идея, они предназначены для использования всей длины выходных данных, чтобы обеспечить хорошую безопасность и устойчивость к коллизиям. Тем не менее, вы могли бы сократить количество символов, используя base64 вместо шестнадцатеричных символов, оно бы увеличилось с 40 до 27.
Hex: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
Base64: qUqP5cyxm6YcTAhz05Hph5gvu9M
--- редактировать ---
На самом деле @Nick Johnson утверждает с убедительными аргументами, что хэши могут быть усечены без больших последствий для безопасности (очевидно, увеличивая вероятность коллизий в два раза для каждого отбрасываемого бита).
Вам также следует использовать HMAC вместо того, чтобы наивно добавлять или добавлять ключ к хешу. В Википедии:
Разработка спецификации HMAC была мотивирована существованием
атаки на более тривиальные механизмы объединения ключа с хешем
функция. Например, можно принять ту же безопасность, что и HMAC
обеспечение может быть достигнуто с MAC = H (ключ ∥ сообщение). Тем не менее, это
Метод страдает серьезным недостатком: с большинством хеш-функций он
легко добавлять данные в сообщение, не зная ключа и получить
другой действительный MAC. Альтернатива, добавление ключа с помощью MAC =
H (сообщение ∥ ключ), страдает от проблемы, что злоумышленник, который может
найти коллизию в хеш-функции (без ключа) имеет коллизию в
MAC. Использование MAC = H (ключ ∥ сообщение ∥ ключ) лучше, но разнообразно
службы безопасности предположили уязвимости с этим подходом,
даже когда используются два разных ключа.
Подробнее о последствиях для безопасности для этого и усечения длины см. В разделах 5 и 6 RFC2104 .