Я хочу отправить файл вместе с моим программным обеспечением, содержимое которого необходимо скрыть от пользователей моего программного обеспечения (онлайн-аутентификация невозможна, так как программное обеспечение должно быть исполняемым из сети).Я делаю это, зашифровывая файл с помощью 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 символов в двоичное содержимое, составляющее исполняемый файл, расшифровать файл, используя каждую строку, а затем проверить, правильно ли он анализируется.
Я знаю, что ононевозможно полностью защитить ключ, если он присутствует в исходном коде в каком-либо формате, но какие типичные приемы могут быть использованы для усложнения жизни злоумышленника в этой ситуации?
Очевидное решение, которое приходит на ум, - это разделить ключ на несколько подстрок и разбросать их по всему коду или вставить фиктивные символы в середине строки, но у меня нет нулевых знаний в области безопасности программного обеспечения, поэтомуБуду рад услышать другие предложения.