Вопрос

На этот вопрос уже есть ответ здесь:

Есть ли хороший способ отправить ключи AES вместе с приложением, но при этом сделать их достаточно безопасными?

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

Я знаю, что Java предоставляет механизм, называемый хранилищем ключей, но AFAIK, если код декомпилируется, это хранилище ключей также можно открыть?

Есть идеи?

Заранее спасибо!

Это было полезно?

Решение

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

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

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

Затем вы можете использовать проверку подписи и обмен ключами Диффи-Хеллмана, чтобы «дать» каждому лицензированному экземпляру вашего приложения ключ от сетевого сервера во время выполнения.Это также позволит вам убедиться, что одновременно работает только один экземпляр лицензии.

Другие советы

Вам придется описать приложение лучше.

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

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

Если приложение использует ключ, в какой-то момент ключ окажется в памяти.Тогда достаточно опытный пользователь/злоумышленник сможет это увидеть.Отладчик и точка останова в нужный момент — это все, что им нужно.

Нет, передача частных ключей шифрования — плохая идея.

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

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

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

Безопасность пользователя не должна быть целью.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top