Вопрос или проблема
У меня есть файл, который будет зашифрован в состоянии покоя с использованием GPG. У меня есть открытые и закрытые ключи для этого файла. Я хотел бы отправить его кому-то еще. Для этого он должен быть зашифрован с использованием их (другого) открытого ключа, чтобы они могли его расшифровать.
Самый простой способ:
- Расшифровать своим ключом
- Записать его в временное место
- Зашифровать другим ключом
По соображениям безопасности я не могу записать его в временное место, потому что в этот момент он не будет зашифрован. Поэтому я хотел бы расшифровать своим ключом и зашифровать другим ключом в один шаг, храня данные в памяти вместо записи их в папку. Можно ли это сделать из командной строки GPG?
Я не могу зашифровать своим ключом и отправить им открытый ключ для расшифровки, он должен начинаться как зашифрованный моим ключом и завершаться как зашифрованный их ключом.
Один из способов обойти это в Linux — использовать ramfs
.
Создайте временный каталог/точку монтирования, а затем смонтируйте ramfs к нему
mkdir /mnt/tmp
mount -t ramfs -o size=4 ramfs /mnt/tmp
Сохраните временный файл в /mnt/tmp
. Этот файл останется в ОЗУ. Однако будьте осторожны, так как если вы сохраните очень большой файл в ramfs, он потребует всю вашу память и, вероятно, приведет к сбою системы.
По завершении размонтируйте его
umount /mnt/tmp
Я не эксперт в этом, но:
Вы можете зашифровать каждый файл с помощью случайного симметричного ключа и сохранить этот ключ, зашифрованный вашим открытым ключом.
Когда вам нужно предоставить доступ к файлу, вам нужно только расшифровать симметричный ключ и зашифровать его открытым ключом получателя.
Ответ или решение
Можно ли использовать GPG для расшифровки и шифрования с другим ключом за один шаг?
Безусловно, ваша задача — обеспечить безопасность данных на протяжении всего процесса, не записывая их на временный носитель в незашифрованном виде. Рассмотрим, как можно эффективно решить вашу проблему с помощью GPG и некоторых утилит Linux.
Основная задача
Ваша цель состоит в том, чтобы расшифровать файл, зашифрованный вашим ключом, и сразу же зашифровать его с использованием открытого ключа получателя, не сохраняя данные в незащищённом виде. Стандартные команды GPG не поддерживают такую цепочку операций «в один шаг» напрямую, но существуют обходные решения.
Решение с использованием потоков
Вы можете использовать конвейеры (pipes) командной строки в Unix/Linux для обработки данных в памяти. Это позволяет избежать записи промежуточных результатов на диск. Вот шаги, которые вам нужно будет выполнить:
- Расшифровка с использованием вашего приватного ключа
- Шифрование с использованием открытого ключа получателя
Вот пример команды, которая может выполнить эти действия:
gpg --decrypt yourfile.gpg | gpg --encrypt -r recipient@example.com -o encrypted_for_recipient.gpg
Здесь yourfile.gpg
— зашифрованный файл, который вы хотите расшифровать; recipient@example.com
— адрес электронной почты получателя, чей открытый ключ будет использоваться для нового шифрования; а encrypted_for_recipient.gpg
— имя файла, в который будет сохранено зашифрованное сообщение.
Примечания по безопасности
-
Безопасность потоков: При использовании команды выше данные передаются через стандартный вывод и ввод, что означает, что они находятся в памяти и не сохраняются на диске в незашифрованном виде.
-
Зависимости от GPG: Убедитесь, что у вас установлены необходимые ключи и что вы обладаете правами для их использования.
-
Проверка: После завершения операции и перед отправкой файла получателю, убедитесь, что он корректно расшифровывается с использованием их открытого ключа.
Альтернативные подходы
Как было упомянуто в обсуждении, существует способ использования симметричного шифрования для повышения безопасности. Вы можете зашифровать файл с помощью случайного симметричного ключа, а затем зашифровать этот ключ с использованием вашего открытого ключа. Это более сложный процесс, но обеспечивает дополнительный уровень безопасности:
- Генерируйте симметричный ключ.
- Защищайте файл этим ключом.
- Шифруйте сам ключ с использованием вашего публичного ключа.
- При передаче файла, получатель должен сначала расшифровать симметричный ключ, а затем использовать его для расшифровки файла.
Заключение
Хотя стандартные команды GPG не позволяют напрямую выполнить поиск и шифрование в одно действие, можно использовать конвейеры в командной строке для достижения вашей цели без временных файлов. Это решение обеспечивает сохранность данных в памяти и минимизирует риски безопасности. Обязательно убедитесь, что все ключи настроены и доступны для использования перед проведением операций.