2

В моем проекте (приложение для рабочего стола Windows) я использую симметричный ключ для шифрования/дешифрования некоторых конфигураций, которые необходимо защитить. Ключ жестко закодирован в моем коде (C++).Защита симметричного ключа

  1. Каковы риски, с которыми мой ключ будет подвергаться обратной инженерии? (клиенты получат только скомпилированную DLL)
  2. Есть ли способ повысить безопасность управления ключом?
  3. Есть ли открытый исходный код или коммерческие продукты, которые я могу использовать
+2

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

+0

@JohnColeman Да, есть безопасность, безопасность для обычных пользователей. Безопасность направлена ​​против определенного злоумышленника, а не на 100% возможных злоумышленников, что недостижимо. – zaph

+0

@Denisdillo Определите атакующего, какой уровень мастерства и возможностей - любопытный подросток для хорошо финансируемого правительства. Определите значение в денежных единицах. Определите стоимость успешной атаки. Определите устройство, компьютер под управлением Windows 95, устройство iOS, устройство Android и т. Д., Потому что на каждом уровне есть встроенная система безопасности. Защита от владельца устройства практически невозможна, и решение, как правило, относится к DRM, обычно требующему сервера. – zaph

ответ

3

Windows, обеспечивает key storage mechanism как часть API Crypto. Это было бы полезно только для вас, если у вас есть код, генерирующий уникальный случайный ключ для каждого пользователя. Если вы используете один ключ для инсталляции для всех пользователей, он, очевидно, должен быть в вашем коде (или быть полученным из констант, находящихся в вашем коде) и, следовательно, не может быть действительно безопасным.

+1

Хорошая практика, но обратите внимание: она по-прежнему не защищена от владельца устройства. – zaph

+2

Да, я знаю. Уважаемый специалист по безопасности однажды сказал мне: «Мы не можем защитить от неизвестных угроз или против известной угрозы ненадежного, но авторизованного конечного пользователя». –

2

Каковы риски, с которыми мой ключ будет подвергаться обратной инженерии? (клиенты получат только скомпилированную DLL)

100%. Предполагая, конечно, что ключ защищает что-то полезное и интересное. Если это не так, тогда опустите.

Есть ли способ повысить безопасность управления ключом?

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

Есть ли открытым исходным кодом или коммерческие продукты, которые я могу использовать

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

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

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