Обнаружение лицензионного ключа?

Это не реальная ситуация; пожалуйста, не обращайте внимания на юридические вопросы, которые, по вашему мнению, имеют отношение к делу, потому что они этого не делают.

Скажем, у меня есть набор из 200 известных действительных лицензионных ключей для гипотетической части алгоритма лицензирования программного обеспечения, а лицензионный ключ состоит из 5 наборов по 5 буквенно-цифровых символов без учета регистра (все в верхнем регистре). Пример: HXDY6-R3DD7-Y8FRT-UNPVT-JSKON

Возможно ли (или вероятно) экстраполировать другие возможные ключи для системы?

Что, если бы было известно, что набор последовательный; как меняются методы в этой ситуации и какие преимущества это дает?

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

Если вы думаете, что это не относится к Stack Overflow, пожалуйста, по крайней мере, предложите мне другое место, где я могу поискать или задать вопрос. Честно говоря, я не знаю, с чего начать с такой проблемой. Я даже не знаю терминологии для такого рода проблем.


person Ricket    schedule 19.05.2010    source источник
comment
Мне также сказали, что это стандартный алгоритм, поэтому, вероятно, это не что-то простое. Это подозрительно похоже на эксперимент без мыслей.   -  person Michael Mrozek    schedule 20.05.2010
comment
Ладно, фразу убрал. Передо мной поставлена ​​проблема, которую я пытаюсь решить. У него есть известный алгоритм решения (хотя и не известный мне), который я должен попытаться вывести, учитывая эти 200 комбинаций.   -  person Ricket    schedule 20.05.2010
comment
Это намеренно нарушенный алгоритм, как в домашнем задании, где вы должны уметь распознавать режим отказа? Потому что в целом нет известного решения, кроме поиска грубой силы.   -  person Ukko    schedule 20.05.2010
comment
Есть ли сервер лицензирования в задней части или ключи можно использовать в автономном режиме?   -  person BojanG    schedule 20.05.2010
comment
Ключи можно использовать в автономном режиме, так как определенно существует алгоритм, который использовался для генерации ключей и, следовательно, может использоваться для их проверки.   -  person Ricket    schedule 20.05.2010


Ответы (5)


В общем, ответ: «Нет, ничего полезного сделать нельзя».

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

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

person Rex Kerr    schedule 19.05.2010

Предполагая, что система криптографически устойчива, зная, что эти ключи, вам не поможет. Сейчас многие такие системы внедряются парнями, слишком дешевыми, чтобы покупать настоящий кейген, так что у вас все еще есть надежда.

Только небольшая часть оценки конверта говорит, что такой ключ содержит 125 (было 800 ой, спасибо за то, что уловил) бит информации, если вы выбрали достаточно этого места, вы могли бы провести какую-то атаку, но вы речь идет об огромном количестве точек выборки. Но послушайте, какие еще планы у вас были в свободное время?

Даже большие парни напортачили, полдюжины лет назад в способе генерации ключей MSDN произошла ошибка, позволившая провести какую-то атаку методом грубой силы. Вы найдете парней, продающих подписки MSDN на eBay как часть пакета корпоративных лицензий. Вы отправите свою информацию, и они предоставят вам предварительно зарегистрированную учетную запись MSDN через пару дней. Я почти уверен, что они воспользовались ошибкой в ​​реализации и грубо форсировали регистрацию, пока одна из них не застряла.

Компания, на которую я работал, купила ее, Microsoft удостоила ее чести, поскольку мы не были мудры, когда покупали ее, но их интересовал адрес парня, который нам ее продал.

person Ukko    schedule 19.05.2010
comment
Откуда берете 800 бит? При 8 битах на символ это максимум 200 бит (25 * 8). Учитывая, что пространство символов составляет (часто, но не всегда) 2-9 и A-Z, за исключением A, E, I, O, U или 30 возможных символов, я получаю ~ 5 бит / символ или ~ 125 бит. Мы исключаем 0, 1 из-за их двусмысленности с O и I и исключаем гласные, потому что вы удивитесь, как часто случайная строка символов формирует слова, которые кто-то сочтет оскорбительными! - person Bob Kaufman; 20.05.2010
comment
Ой, не могли бы вы поверить, что я пролил кофе на свой конверт ;-) Я догадывался, что на каждую позицию может быть 32 возможных значения, так как 32 - хорошее число, и в нем отсутствуют некоторые случаи, такие как 1 и l. Тогда я взял 32 = 2 ^ 5 и сделал черт знает что. Я умножил 32 * 25 вместо 32 * 5, первое дает вам 800, а второе - правильную оценку 160. Что соответствует вашему 125-битному вычислению с использованием меньшего алфавита. Если меня утешит то, что я подсчитал в уме, думаю, это скорее обвинение ... - person Ukko; 20.05.2010

Как известно, в общем случае это очень сложно решить. Однако если

Мне также сказали, что это стандартный алгоритм

в этом случае вам следует получить список этих «стандартных алгоритмов» и проанализировать их на наличие слабых мест.

Мое наивное предположение состоит в том, что большая часть генерации ключей имеет форму x || hash (x || fixed), где x - это случайно сгенерированное значение для каждого ключа, а fixed - фиксированное значение. Используя эту форму, ключи можно довольно легко проверить (извлечь x, вычислить хэш (x || фиксированный), посмотреть, совпадает ли он).

Предполагая, что вы знаете точный используемый алгоритм, вам нужно будет либо найти слабое место в алгоритме (маловероятно, если они не используют хэш с известными уязвимостями), либо подобрать фиксированное значение, а также т. Д.

Учитывая, что существует множество хэшей, которые не имеют известных уязвимостей, и если вы предполагаете, что ребята, выбравшие фиксированное значение, не глупы ... это может быть сложным файлом cookie, если у вас нет хороших навыков криптоанализа.

Так что проблему очень сложно решить, если ребята, которые разработали алгоритм, не глупы. Но они могут быть ...

person alex    schedule 19.05.2010

Ключи, которые проверяются в автономном режиме, обычно определяются набором некоторых свойств. Некоторые подмножества битов имеют определенные значения или симметрии. Если определенные подмножества байтов, переданные определенным функторам, возвращают ожидаемый результат, то ключ считается действительным.

Если вы исследуете общие алгоритмы генерации ключей, вы, вероятно, сможете придумать целый ряд возможных свойств. Затем вы можете использовать индуктивное логическое программирование, чтобы определить, какие из этих свойств применимы ко всем действительным ключам, но не к недействительным. (Вам также понадобится набор недействительных ключей, но их легко сгенерировать). По результатам теоретически можно написать кейген. Вы также могли бы, вероятно, написать из него статью, если сможете заставить ее работать. Удачи.

Однако, если они проверены онлайн, они могут быть просто псевдослучайными числами, которые проверяются по базе данных. В этом случае вы СОЛНЦЕ.

person patros    schedule 19.05.2010

Система может генерировать ключи случайным образом, а затем проверять клиентов на центральном сервере. Это так же безопасно, как и любой другой алгоритм DRM, то есть совсем нет. В этом случае экстраполяция невозможна.

person Matthew Flaschen    schedule 19.05.2010
comment
Но проблема не в этом; алгоритм действительно существует, и мне нужно его найти. - person Ricket; 20.05.2010
comment
Вам нужно решить свой мысленный эксперимент? Для меня это уже не звучит так гипотетически. - person Chad Birch; 20.05.2010
comment
Мне нужно найти алгоритм, чтобы решить проблему. Услуга за услугу. - person Ricket; 20.05.2010
comment
Есть причина не требовать активации через Интернет: это недопустимо для некоторых клиентов, которые в таком случае могут не купить ваш продукт. - person bobince; 20.05.2010
comment
@bobince, я считаю DRM невыносимым. Извините, если я не разъяснил это. Я хотел сказать, что ключи могут быть случайными. - person Matthew Flaschen; 20.05.2010
comment
Ах, понятно - непонимание «без причины» :-) - person bobince; 20.05.2010