Я работаю над приложением, которое я хотел бы продать однажды - раньше, чем позже! Я хотел бы разработать достаточно простую схему серийных номеров для ее защиты.
- Простая комбинация цифра / буква длиной не более 25-30 буквенно-цифровых символов (например, ключи продукта Microsoft)
- Не требует, чтобы пользователь вводил какую-либо личную информацию (например, адрес электронной почты) в рамках проверки
Я думал об этом (очень немного) и думаю, что криптография с открытым ключом - хорошее место для начала. Я мог бы сгенерировать строку, которая идентифицирует лицензию (например, серийный номер SKU + plain ole '), хэширует ее, шифрует и кодирует серийный номер + идентификатор в 25-значный (или около того) буквенно-цифровой ключ. Затем приложение декодирует ключ в серийный номер и «подпись», генерирует хэш идентификатора, расшифровывает «подпись» с использованием соответствующего открытого ключа и сравнивает его с сгенерированным хешем идентификатора.
По сути, ключ продукта содержит две части данных: серийный номер, на который пользователь претендует, и своего рода подпись, которую программа может использовать для проверки этой заявки. Я не знаю, достаточно ли для всего этого 25 буквенно-цифровых символов (каждый из которых кодирует 5 битов, что дает реалистичный результат в 120 битах). Но это не обязательно должно быть криптографически безопасно, просто достаточно, чтобы коды не могли быть легко угаданы. Я в порядке с короткими ключами и короткими хэшами.
Что касается реализации, то приложение написано на Objective-C для Mac OS X, но, учитывая простоту внедрения кода в приложения Cocoa, я, вероятно, напишу проверочный код на прямом C.