Расшифруйте и зашифруйте файл, используя gpg, без повторного ввода пароля
[Обратите внимание: моя проблема похожа на это. И связано с этим]
По сути, я хочу отредактировать симметрично зашифрованное поле и затем снова зашифровать его, используя ту же фразу-пароль, без необходимости повторного ввода.
Это выглядит так:
gpg --output $file_to_edit --decrypt $ecrypted_file
echo "Some edit" >> $file_to_edit
gpg --output $ecrypted_file --symmetric $file_to_edit
Сейчас, gpg
запрашивает 3 раза пароль (1 для расшифровки и 2 для шифрования). Что я хотел бы, это ввести пароль только один раз (для расшифровки) и, если он правильный, использовать его снова для шифрования. Есть ли безопасный способ сделать это?
1 ответ
Есть несколько вариантов, но все они могут оставить вам расшифрованный файл на диске, ожидая, что его можно будет восстановить позже. У Шреда даже могут быть проблемы с безопасным удалением файла (если есть журнал / журнал, избыточные записи / RAID, временные кэши, сжатые файловые системы), а также SSD может также поменять секторы без вывода сообщений. Даже используя tmpfs
Файловая система может быть записана для обмена. И программа редактирования, которую вы используете, может оставить еще больше временных / кэшированных файлов. Если вся ваша файловая система и своп зашифрованы, это очень помогает, но тогда вам действительно нужно больше шифрования?
Если вы просто сохраняете основной текст (например, пароли), я бы предложил использовать специальную программу, такую как KeePass(X/XC), LastPass и т. Д. Или другой метод шифрования, который шифрует файлы, такие как eCryptfs, EncFS или который шифрует устройства, такие как LUKS или преемник TrueCrypt.
Но только с GPG, вы можете использовать один из этих вариантов
--passphrase-fd n
Прочитайте фразу-пароль из файлового дескриптора n. Только первая строка будет считана из файлового дескриптора n. Если вы используете 0 для n, фраза-пароль будет считана из STDIN. Это можно использовать только в том случае, если указана только одна фраза-пароль.Обратите внимание, что эта фраза-пароль используется только в том случае, если также была указана опция --batch. Это отличается от GnuPG версии 1.x.
--passphrase-file file
Прочитайте фразу из файлаfile
, Только первая строка будет прочитана из файлаfile
, Это можно использовать только в том случае, если указана только одна фраза-пароль. Очевидно, что парольная фраза, хранящаяся в файле, имеет сомнительную безопасность, если другие пользователи могут читать этот файл. Не используйте эту опцию, если вы можете избежать этого. Обратите внимание, что эта фраза-пароль используется только в том случае, если также была указана опция --batch. Это отличается от GnuPG версии 1.x.--passphrase string
Используйте строку в качестве пароля. Это можно использовать только в том случае, если указана только одна фраза-пароль. Очевидно, это очень сомнительная безопасность в многопользовательской системе. Не используйте эту опцию, если вы можете избежать этого. Обратите внимание, что эта фраза-пароль используется только в том случае, если также была указана опция --batch. Это отличается от GnuPG версии 1.x.
Для указанных выше вариантов вам, вероятно, понадобится --pinentry-mode loopback
(позволяет вводить новую информацию, например, новое имя файла, если есть конфликт) или --batch
в противном случае gpg просто проигнорирует параметры парольной фразы и все равно попросит у агента парольную фразу (ошибка IMO). Это также может быть полезно:
--passphrase-repeat n
Укажите, сколько раз gpg будет запрашивать новую фразу-пароль. Это полезно для запоминания ключевой фразы. По умолчанию 1 повторение.
Вы можете ввести пароль только один раз и read
/ сохранить его в переменной shell/bash (скажем, $password
), вспоминая позже --passphrase="$password"
, Что-то вроде
until gpg --pinentry-mode loopback --passphrase="$password" --output $file_to_edit $ecrypted_file;
do read -r password;
done
#Got out of the loop with a correct password, now
echo "Some edit" >> $file_to_edit
gpg --pinentry-mode loopback --passphrase="$password" --output $ecrypted_file --yes --symmetric $file_to_edit
(--yes
переписать)