Безопасное хранение ключа AES - PullRequest
4 голосов
/ 27 июля 2011

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

Ответы [ 3 ]

3 голосов
/ 27 июля 2011

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

  • вы не храните зашифрованный ключ в одной строке, а вместо этого в нескольких строках, которые затем соединяете в функции

  • вы сохраняете файл в относительно «неизвестном» / непопулярном месте, например в изолированном хранилище или в Windows \ Temp, вместо папки приложения

  • вы используете алгоритм асимметричного ключа (делает взломать сложнее ... но в этом случае ... немного)

  • вы помещаете в файл другие вещи (фальшивые), а не только ключ

1 голос
/ 27 июля 2011

Если у вашего целевого хоста есть чип TPM , вы можете воспользоваться этим. OpenSSL может быть настроен на использование TPM с помощью брючного проекта

1 голос
/ 27 июля 2011

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

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

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

...