Генерация простых лицензий со встроенными датами истечения срока действия в XML - правильно ли я это делаю? - PullRequest
2 голосов
/ 11 января 2012

В настоящее время я занимаюсь разработкой простых приложений (в ActionScript 3, если это актуально), и я хотел встроить простую систему регистрации, основанную на файле XML (который будет создан сценарием PHP), который позволил бы моим файлам'expire' после определенной даты.

Для меня эта система выглядит правильно, но я хотел бы услышать мнение экспертов на случай, если я упустил что-то очевидное - или я понял это совершенно неправильно.

Основываясь на том, что я прочитал на stackoverflow и других сайтах, я придумал следующую структуру XML:

<LICENSE>
     <NAME>Joe Cool</NAME>
     <COMPANY>Doggy Dogdog</COMPANY>
     <APP>Flash Tester</APP>
     <VERSION>1.02</VERSION>
     <EXPIRES>01/10/2012</EXPIRES>
     <SERIAL>e923b5e370cd3cb7ac72c1482d088bd7</SERIAL>
</LICENSE>

Поле на самом деле представляет собой простой хэш MD5 всех элементов, составляющих лицензию,с добавленной «солью» (которая должна оставаться в секрете), чтобы пользователи не могли создавать свои собственные MD5-хэши.«Расшифрованная» лицензия выглядит следующим образом:

Joe Cool - Doggy Dogdog - Flash Tester - 1.02 - salt - 01/10/2012

При запуске мое приложение загружает данные XML, добавляет «соль» и вычисляет из этого MD5.Затем он сравнит сгенерированный хеш MD5 с хешем, хранящимся в XML.Несовпадение хэша указывает на подделку файла XML.А загруженную дату из XML можно сравнить с текущей датой, чтобы убедиться, что срок действия приложения не истек.

Я знаю, что MD5 не настолько безопасен, и т. Д., Но я не защищаю ядерные бункеры с этим, поэтому яготов обменять безопасность на скорость и простоту.Я попытался сторнировать MD5, полученный из исходной строки, в нескольких онлайн-поисках MD5, и все они до сих пор терпели неудачу.

Наконец, я знаю, что мне придется хранить «соль» где-то в приложении,но я полагаю, что любой, кто действительно решил реинжиниринг, сломал бы любую систему, которую я в любом случае поставил бы на место, так что я могу жить с этой идеей.

1 Ответ

0 голосов
/ 11 января 2012

Разве не было бы тривиально просто изменить часы компьютера, чтобы использовать это навсегда?

И, как вы упомянули, было бы также довольно легко декомпилировать файл, найти соль и сгенерировать произвольный файл лицензии..

Но любая система, подобная этой, будет сделкой типа «безопасность по неясности», поэтому, если вы не хотите хранить свою логику на стороне сервера, это будет в значительной степени так же безопасно, как и собирается получить:)

РЕДАКТИРОВАТЬ: Я думаю, что другой способ нарушить проверку, если это .swf-файл, это загрузить его в другой SWF-файл, который уже содержит класс md5, который вы используете, ноизмененный таким образом, он всегда возвращает известное значение (скажем, «1»), а затем изменяет лицензионный ключ в xml, чтобы соответствовать этому.

...