Можно ли использовать GPG для расшифровки и шифрования другим ключом за один шаг?

Вопрос или проблема

У меня есть файл, который будет зашифрован в состоянии покоя с использованием GPG. У меня есть открытые и закрытые ключи для этого файла. Я хотел бы отправить его кому-то еще. Для этого он должен быть зашифрован с использованием их (другого) открытого ключа, чтобы они могли его расшифровать.

Самый простой способ:

  1. Расшифровать своим ключом
  2. Записать его в временное место
  3. Зашифровать другим ключом

По соображениям безопасности я не могу записать его в временное место, потому что в этот момент он не будет зашифрован. Поэтому я хотел бы расшифровать своим ключом и зашифровать другим ключом в один шаг, храня данные в памяти вместо записи их в папку. Можно ли это сделать из командной строки 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 для обработки данных в памяти. Это позволяет избежать записи промежуточных результатов на диск. Вот шаги, которые вам нужно будет выполнить:

  1. Расшифровка с использованием вашего приватного ключа
  2. Шифрование с использованием открытого ключа получателя

Вот пример команды, которая может выполнить эти действия:

gpg --decrypt yourfile.gpg | gpg --encrypt -r recipient@example.com -o encrypted_for_recipient.gpg

Здесь yourfile.gpg — зашифрованный файл, который вы хотите расшифровать; recipient@example.com — адрес электронной почты получателя, чей открытый ключ будет использоваться для нового шифрования; а encrypted_for_recipient.gpg — имя файла, в который будет сохранено зашифрованное сообщение.

Примечания по безопасности

  1. Безопасность потоков: При использовании команды выше данные передаются через стандартный вывод и ввод, что означает, что они находятся в памяти и не сохраняются на диске в незашифрованном виде.

  2. Зависимости от GPG: Убедитесь, что у вас установлены необходимые ключи и что вы обладаете правами для их использования.

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

Альтернативные подходы

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

  1. Генерируйте симметричный ключ.
  2. Защищайте файл этим ключом.
  3. Шифруйте сам ключ с использованием вашего публичного ключа.
  4. При передаче файла, получатель должен сначала расшифровать симметричный ключ, а затем использовать его для расшифровки файла.

Заключение

Хотя стандартные команды GPG не позволяют напрямую выполнить поиск и шифрование в одно действие, можно использовать конвейеры в командной строке для достижения вашей цели без временных файлов. Это решение обеспечивает сохранность данных в памяти и минимизирует риски безопасности. Обязательно убедитесь, что все ключи настроены и доступны для использования перед проведением операций.

Оцените материал
Добавить комментарий

Капча загружается...