2009-04-18 4 views
37

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

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

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

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

+2

Но как Adobe делает это с помощью Photoshop, например? – Jeena

+17

Одно слово: безуспешно. – dmckee

ответ

35

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

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

+22

Отвечает ли это на вопрос? –

+1

Как вы сказали: «Это только вопрос времени, прежде чем он взломается». Таким образом, это является причиной того, что эта стратегия может быть воспринята с учетом того, что этот ключ истечет раньше, чем аппаратные защищенные ключи. – kdmin

1

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

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

+7

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

0

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

+3

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

2

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

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

+1

Какое у вас программное обеспечение? – shoosh

+8

Весь процесс вашего бизнеса кажется совершенно обратным и временным. – Hejazzman

5

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

+0

Обычно людям не так сложно найти даже скрытые ключи, если они полны решимости сделать это. –

-2

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

6

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

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

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

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

Прочтите "Applied Cryptography" от Bruce Schneier для получения дополнительной информации.

+1

Заявление «Даже программное обеспечение для шифрования, такое как PGP/GPG, хранит ключи в файле», вводит в заблуждение. PGP шифрует эти ключи, используя кодовую фразу, известную только пользователю. PGP также использует защищенную память для ключей, гарантируя, что они никогда не кэшируются в HD и PGP проходит через большие длины, чтобы затруднить поиск ключа с помощью проверки памяти. Если бы я смог изменить этот ответ, я бы это сделал. – MrEvil

+0

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

12

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

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

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

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

1

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

+0

Этот вид защиты - только один уровень, чем программное обеспечение. Вы можете реплицировать USB-ключ, используя любой сброс памяти. Случай, который вы делаете дальше, и попробуйте проверить пользователей онлайн-пользователей по указанному ключевому идентификатору, тогда вы можете также установить сеть. Не существует истинного способа защиты кода. Лучший способ сделать это - это разочарование людей, пытающихся взломать его, и регулярно обновлять систему. Маленький таймфрейм между вами и тем, кто может взломать вас, - ваш единственный друг здесь. – erm3nda

+0

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

0

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

ТОЛЬКО для обеспечения безопасного ключа шифрования если он понадобится, он будет введен вручную пользователем.

Смежные вопросы