Схема генерации серийного номера бедного человека
Я хотел бы получить простую схему / алгоритм для генерации серийных номеров на основе уникального аппаратного идентификатора (идентификатор процессора, сетевой адрес Mac или серийный номер жесткого диска).
Я хотел бы, чтобы схема работала только в одном направлении - чтобы приложение на клиентской машине могло проверять серийный номер, но не генерировать его. (Так что было бы не просто взломать).
Теперь, скорее всего, большинство из вас порекомендует какой-то тип шифрования пар открытого и секретного ключей RSA, который может работать достаточно надежно - у клиента нет закрытого ключа RSA, поэтому он не может «генерировать» серийный номер.
Но главная проблема с подписью RSA состоит в том, что она слишком велика - ее размер подписи составляет 128 или 256 байт в зависимости от размера ключа RSA (Размер подписи RSA?)
Я хочу, чтобы серийный номер был простым копированием и вставкой из почты в регистрационную форму - максимум 64 символа, в идеале 32 байта.Хорошо, теперь вы, вероятно, скажете, что такого рода защита недостаточно хороша для взлома методом "грубой силы", когда вы просто пробуете все комбинации, чтобы определить правильный серийный номер.
Но я бы сказал, что обычно вам нужно нанять «дорогого» хакера или команду хакеров, чтобы создать такое приложение для взлома.
Также я думаю, что можно изменить алгоритм генерации серийного номера для следующих версий приложения или использовать многократное прохождение, чтобы резко снизить грубую силу.
В качестве основы я бы предпочел использовать обычный C или C ++ (не C #), предпочтительно Windows / wincrypt.h или любой существующий простой исходный код на C (желательно не огромные сторонние библиотеки).
Можно ли создать пару открытых / закрытых ключей RSA, чтобы длина подписи составляла 32 символа?