Рейтинг:1

Лучшая практика для создания установочного ключа старого стиля

флаг ps
vsz

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

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

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

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

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

kelalaka avatar
флаг in
Хакеры всегда найдут способ обойти защиту вашего ключа, пока ваше приложение жизнеспособно. См. в игровой индустрии.
флаг ps
vsz
@kelalaka: конечно, да, я никогда не говорил, что нет, но если 100% пользовательской базы не полагается на хакеров, будет много тех, для кого это работает. Тот факт, что достаточно мотивированный взломщик может открыть любой замок, не означает, что мы никогда не должны запирать свои двери.
Рейтинг:2
флаг my

Однако существуют ли какие-либо современные, более совершенные подходы к созданию таких «автономных установочных ключей»?

Есть два очевидных подхода:

  • Одним из них является использование кода аутентификации сообщения (MAC); это криптографический алгоритм, который принимает строку и секретный ключ и генерирует «метку»; идея состоит в том, что, не зная секретного ключа, трудно сгенерировать другую пару строк/тегов, которая проверяется.

Итак, что вы должны сделать как производитель, так это выбрать случайный секретный ключ (который вы вставите в свои продукты). Чтобы сгенерировать «ключ продукта» (этикетку, прикрепленную к продукту), вы должны взять порядковый номер, запустить его через MAC для создания тега и сделать порядковый номер и тег ключом продукта.

Затем, когда продукт установлен, пользователь вводит ключ продукта; программное обеспечение разделяет порядковый номер и тег; затем он запускает порядковый номер через MAC (используя секретный ключ, который вставил производитель) и сравнивает этот вычисленный тег с тегом, который был в ключе продукта — если они совпадают, вы продолжаете установку.

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

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

  • Другой подход — использовать алгоритм подписи с открытым ключом (с короткой подписью).

Эта идея аналогична, за исключением того, что производитель генерирует пару открытого/закрытого ключа и вставляет открытый ключ в устройство.

Производитель использует закрытый ключ для создания «ключей продукта»; при установке программное обеспечение использует свою копию открытого ключа для проверки ключа продукта.

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

Недостатком является длина тега - даже алгоритмы с самой короткой подписью (я считаю, что это BLS) по-прежнему имеют умеренно длинные подписи (например, 256 бит для 100 бит безопасности); и, в отличие от случая с MAC, их нельзя обрезать.

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.