Каков наилучший способ хранения ключа шифрования AES?

Мы используем Tomcat для нашего веб-приложения Java. В папке WEB-INF есть файл свойств.

Шифрование AES будет использоваться для генерации ключа и шифрования пароля. Зашифрованный пароль будет сохранен в файле свойств. Где должен храниться ключ шифрования? Является ли хорошей идеей поместить ключ и зашифрованный пароль в один файл свойств? Или ключ должен храниться вне каталога "webapps"?

4 ответа

Решение

В Windows вы можете использовать реестр и DPAPI. Использование реестра - отстой, но это необходимая боль, если вы хотите добиться абсолютной безопасности и использовать операционную систему для хранения ценных данных.

На другой OS X вы можете использовать связку ключей.

В Linux я бы использовал права доступа к файлу для защиты файла.

Что вы предлагаете:

Является ли хорошей идеей поместить ключ и зашифрованный пароль в один файл свойств?

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

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

Рассматривали ли вы класс KeyStore в Java API. Это часть Java криптографической архитектуры Sun.

У меня есть следующие предложения,

  1. Не храните ключ в WAR. Мы оставляем за собой ответственность за ключ к каждой установке. На самом деле мы можем защитить его, сохранив ключевые файлы на смарт-карте.

  2. Убедитесь, что ваши ключи имеют версии, чтобы вы могли регулярно вращать их.

  3. Храните парольные фразы для генерации ключа вместо исходного материала ключа. Это облегчает добавление новых ключей (вам не нужно беспокоиться об алгоритме или размере ключа и т. Д.). Это также добавляет некоторую неизвестность.

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

Другие вопросы по тегам