Ответ 1
IV был полностью охвачен другими ответами, поэтому я сосредоточусь только на сохранении ключа.
Первый...
Я не могу исключить, что это невозможно сделать на одном сервере на уровне программного обеспечения.
Все, что сделано в программном обеспечении, может быть отменено в программном обеспечении. Вы можете зашифровать, скрыть и заблокировать его как можно больше сейфов, но ваше приложение все равно должно иметь возможность получить доступ к ключу. Если ваше приложение имеет доступ, то тот, кто имеет тот же уровень доступа, что и ваше приложение, также может получить к нему.
Разработчики уже давно справляются с этой проблемой, и нет серебряной пули.
Все это настроено в среде с одним сервером (приложение плюс dbase), поэтому я не могу отправить/получить ключ ко второму серверу. Кроме того, в этом "специальном" случае Im не может зашифровать ключ контейнером ключей RSA на уровне машинного уровня или пользовательского уровня.
Я могу представить два возможных решения.
Вариант 1:
Сохраните ключ на диске и на уровне ОС настройте доступ к файлу, чтобы только учетная запись, в которой работает ваше приложение, может прочитать файл, в котором содержится ключ. Файл может быть плоским файлом или зашифрованным контейнером который защищен паролем, который ваше приложение знает (до вас, чтобы решить, но зашифрованный контейнер лучше).
Плюсы:
- Перезапускается без вмешательства человека.
Минусы:
- Вы должны сделать право безопасности ОС, и нет места для ошибок.
- Злоумышленник с доступом администратора может перейти к ключу.
Другим подобным вариантом было бы использовать DPAPI вместо файлов для хранения ключа (если вы в состоянии сделать это это с учетом вашего "частного случая" ). Это API, встроенный в окна, который использует пароль для любой учетной записи Windows, которую вы используете (или ваше приложение) для безопасного хранения данных. Только учетная запись Windows, которая хранит данные, может ее восстановить.
Одной из особенно приятных функций DPAPI является то, что если администратор сбрасывает пароль пользователя (посредством управления компьютером), доступ к данным DPAPI пользователей теряется. Злоумышленнику необходимо будет скомпрометировать фактическую учетную запись, которая была использована для хранения данных в первую очередь, без сброса пароля.
Вариант 2:
Требовать, чтобы вводимая фраза вводилась человеком при запуске приложения и выводила ключ шифрования из этой фразы. После того, как у вас есть ключ, отбросьте пропущенную фразу и сохраните ключ только в памяти.
Плюсы:
- Ключ никогда не будет на диске.
- Даже если сервер коренится, переход к ключу не является простой задачей.
Минусы:
- Автоматические перезагрузки невозможны.
- Вам, вероятно, придется делиться фразой доступа с любой обработкой поддержки.
- Вам нужно иметь в виду, что данные, хранящиеся в памяти, могут быть прозрачно записаны на диск в определенных ситуациях.
Или вы можете сделать компромисс между этими двумя системами, где сначала используется фраза прохода для получения ключа шифрования, который хранится в памяти, а ключ временно записывается на диск или зашифрованный контейнер всякий раз, когда приложение изящно перезапускается. Когда перезагрузка завершена, приложение загружает ключ, а затем удаляет его из временного хранилища (и при необходимости не забудьте заменить место на диске, где был сохранен ключ, чтобы он не мог быть восстановлен).