Подтвердить что ты не робот

Как вы скрываете секретные ключи в коде?

Я некоторое время задавался вопросом, как какое-то программное обеспечение скрывает секретные ключи таким образом, что их невозможно обнаружить тривиально. Всего несколько примеров:

  • Программное обеспечение DVD Player скрывает ключи CSS
  • Программное обеспечение с серийными номерами/регистрационными кодами скрывает ключи/хэши, используемые для проверки серийных номеров

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

Какие стратегии используются, чтобы скрыть эти ключи, чтобы они не могли быть легко найдены?

4b9b3361

Ответ 1

Причины, по которым секретные ключи были так легко обнаружены, - это то, что они были скрыты в программном обеспечении.

Избегайте сокрытия секретов в программном обеспечении любой ценой - обфускация пока доставит вас. Спросите себя: насколько хорошо я могу скрыть ключ от программного обеспечения от кого-то, у кого есть полный доступ к разборке, пользовательскому режиму и отладчикам режима ядра, и никакой дневной работе? Это только вопрос времени, прежде чем он взломается.

Ответ 2

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

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

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

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

Ответ 3

В нижней строке вы не можете. Смотрите другие комментарии здесь по причинам. Даже программное обеспечение для шифрования, такое как PGP/GPG, хранит ключи в файле, а затем настоятельно призывает эти файлы хранить на флеш-накопителе в сейфе или что-то еще безопасное. Клавиши, сохраненные как часть исполняемого кода, будут обнаружены.

Фактически, если вы пытаетесь зашифровать что-либо на клиентской машине, которая будет расшифровываться клиентом как часть обычных операций, это также безумное поручение. Клиентские машины по своей сути небезопасны, и вы не можете контролировать, что они будут делать с вашими данными.

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

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

Прочтите "" Прикладная криптография" Брюса Шнайера за дополнительной информацией.

Ответ 4

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

Ответ 5

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

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

Ответ 6

Вам не всегда нужен ключ для проверки лицензии.

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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