Запутывающий ключ расшифровки хранится в исходном коде - PullRequest
0 голосов
/ 25 октября 2018

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

with open("/path/to/executable", 'rb') as readfile:
    content = readfile.read()

to_find = 'C0SH3VKNTKR4CRGH0R8WXD9WR5I1GS'  # example key

for i in range(len(content) - len(to_find)):
substr = content[i:i + len(to_find)]
if substr == to_find:
    print "Found at index %d" % i

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

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

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

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Если вы используете технологию DotNet (MS .Net или DotNet Core), вы можете защитить такие ключи с помощью DPAPI.

По сути, вы используете подход получения ключей для получения / генерации ключа при первом использовании, а затем для защитыКлюч в реестре или файл с использованием DPAPI.

0 голосов
/ 25 октября 2018

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

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

Кажется, что Whitebox-crypto-AES является таким генератором кода.Я никогда не использовал это.Попробуйте ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...