• Авторизация


О GPL 09-11-2009 02:52 к комментариям - к полной версии - понравилось!


Что-то меня штырит, и идеи всякие левые в голову лезут. Вот и пришло мне в голову, что открытый код и продажа скомпилированного софта, каждый экземпляр которого имеет серийный номер и должен быть зарегистрирован, чтобы работать, никак друг другу не противоречат.
Итак, аксиомы: каждый может получить как готовую бинарную сборку, так и исходный код, причём со всем этим каждый волен делать что хочет.
Задача: сделать так, чтобы никто не мог получить работающую копию программы, кроме как купив её у производителя.
Ясно, что раз каждый может получить копию программы, значит объектом продажи могут являться только серийные номера -- ключи, которыми можно запустить программу.
Но раз программа открытая, то и механизм генерации ключей должен быть открытым. Причём надо как-то сделать так, чтобы несмотря на это, он был абсолютно бесполезен, и никто не смог им воспользоваться.
Отсюда ясно, что нельзя просто дать ключ пользователю, надо его постоянно проверять по сети. А что толку? Ведь каждый может поднять у себя сервер ключей, никто не запрещает. Значит, надо сделать алгоритм генерации таким, чтобы ни один нормальный пользователь и ни один нормальный дистрибьютор не смогли им воспользоваться.
И вот после всех этих мыслей всплывает самая феерическая. Берём какую-нибудь NP-полную задачу, причём невероятно сложную, так, чтобы для её решения за время меньшее, чем проходит между провеками ключа, требовалась производительность в сотни терафлопс. Ставим три сервера: сервер условий, параметризующих задачу, сервер решений (чертовски мощная штуковина, на которую денег далеко не у каждого дистрибьютора хватит) и сервер ключей.
В программе имеется алгоритм проверки решений, рабоающий быстро. Каждый пользователь, регистрируясь, получает свой серийный номер, а в компании оставляет открытый ключ для проверки своей цифровой подписи. Закрытый ключ он вместе с содержимым подписи и серийным номером вводит в программу.
Программа подключается к серверу ключей, где происходит верификация подписи. Если всё в порядке, то сервер даёт добро на высылку по этому адресу условий и решения задачи. Программа всё проверяет, и если всё верно, то она может продолжать работать, а серверу ключей отсылает подтвержение проверки. В ответ сервер посылает какой-нибудь совершенно рандомный набор байт (сохранённый, разумеется, в базе, как принадлежащий этому пользователю; генерируется он каждый раз новый), который программа обязана послать серверу в следущий раз.
Если на этапе проверки на сервере ключей не сошёлся серийный номер, цифровая подпись и набор байт, то этот серийный номер блокируется, а пользователю высылается уведомление. Потом ему придётся разбираться с компанией.
Если не сошлись решение и условие, то программа отказывается работать.
Таким образом. совершенно бесполезно копировать программу, всё равно без серийного номера она не запустится. Бесполезно копировать чужой серийный номер: если не совпадёт надор байт, который в первый раз можно получить при регистрации, а в дальнейшем -- только у сервера, то накроется система у всех обладателей этого ключа. Даже если обладатель копии пройдёт проверку раньше владельца подлинного ключа, сбой произодёт когда в сеть выйдёт владелец. Если установить проверки достаточно часто (но каждый раз в рандомное время), то бесполезно будет поднимать собственный сервер -- он просто не будет успевать давать новые ключи. А механизхм верификации истинности сервера прост и надёжен.
Итак, неизменённая копия программы не может быть запущена без покупки ключа. Одна маленькая детать: можно ведь просто выкинуть механизм верификации! Ну, тут есть два пути. Путь первый: тивоизация, и плевать на GPL3, на второй останемся. Иными словами, проверять какое-нибудь хитрое соотношение между хешами исполняемых файлов. Путь поянтный, но плохой: мы признаём свою слабость перед GPL3, да и хеш один раз можно поднатужиться и обратить. Так что гораздо более простой путь второй: спагетти-код. Так хитро вмонтировать части механизма проверки в самые разные места кода, что для их извлечения потребуется практически с нуля переписывать всю программу. Вышая степень мастерства: сделать так, чтобы небольшие куски кода можно было спокойно извлекать и использовать в своих проектах. Но в хоть что-то работающее всё вместе не соберётся без огромных трудов по обработке.
Кстати, это не значит, что я хочу так делать. Я хочу показать, что как бы ни колдовали с лицензией, её всё равно можно обойти, и запретительными мерами ничего не добиться. Можно будет перевести на английский и отправить Столлману, интересно, что будет.
вверх^ к полной версии понравилось! в evernote
Комментарии (2):
DeadSkiF 09-11-2009-12:53 удалить
Ну согласись, Макс, это через чур черезжопно..
Кстати, такая программа будет нарушать введеные РМСом критерии свободного ПО. Правда я не знаю, на сколько формально они отображены в тексте лицензии.... Но по крайней мере устроить мегасрач и заДДОСить сил у комьюнити думаю хватит.
Positron 09-11-2009-23:25 удалить
Ответ на комментарий DeadSkiF # Ничуть не сомневаюсь. Но лулзы обеспечны!


Комментарии (2): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник О GPL | Positron - Проекция мысли | Лента друзей Positron / Полная версия Добавить в друзья Страницы: раньше»