В приложении я хочу хранить конфиденциальные данные (которые могут быть сколь угодно большими), чтобы впоследствии их можно было использовать для исследований. Дело в том, что я не хочу, чтобы данные лежали незащищенными, поэтому я хочу зашифровать их перед сохранением.
На другом компьютере (в более надежной среде) я хочу расшифровать эти данные позже. Расшифровка должна быть возможной с помощью легкодоступных инструментов, например OpenSSL. Теперь мой вопрос: как мне все это сделать?
Я уже знаю абстрактные шаги:
- Раз и навсегда сгенерируйте пару открытый/закрытый ключ.
- Зашифруйте
byte[]
в Java с помощью открытого ключа и сохраните его где-нибудь. - Скопируйте зашифрованные данные на «более безопасный» компьютер.
- Расшифруйте сохраненные данные с помощью простой командной строки OpenSSL.
Чего мне сейчас не хватает, так это деталей:
- Какая пара ключей мне нужна?
- Какую схему шифрования следует использовать? (вероятно, это что-то вроде «rsa-шифровать симметричный ключ, а затем шифровать данные с помощью этого ключа»)
- Как выглядит простая командная строка OpenSSL?
[Обновление от 13 февраля 2011 г.]
После небольшого исследования я нашел страницу, которая точно описывает, что я хочу сделать: резервных копий/" rel="nofollow">http://blog.altudov.com/2010/09/27/using-openssl-for-asymmetric-encryption-of-backups/. В основном ответом на мой шаг 4 является эта командная строка:
openssl smime -decrypt \
-in data.smime -binary -inform DER \
-inkey key.pem \
-out data
Теперь мой вопрос: как я могу создать файл из Java, формат которого совместим с OpenSSL, чтобы я мог распаковать его с помощью этой командной строки? Я хочу делать это сотни раз в секунду, поэтому вызов внешнего процесса кажется слишком медленным. Вот почему я хочу сделать это прямо на Java.