Расшифруйте и зашифруйте файл, используя gpg, без повторного ввода пароля

458
francescop21

[ Обратите внимание : моя проблема похожа на это . И связано с этим ]

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

Это выглядит так:

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

1 ответ на вопрос

1
Xen2050

Есть несколько вариантов, но все они могут оставить вам расшифрованный файл на диске, ожидая, что его можно будет восстановить позже. У Shred даже могут быть проблемы с безопасным удалением файла (если есть журнал / журнал, избыточные записи / 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перезаписать)

Примечание: `--pinentry-mode` доступен только для gpg 2.x (не для gpg 1.x). Также нет необходимости в опции `--batch` с gpg 1.x. francescop21 5 лет назад 0
That's true, with gpg 1 --passphrase [& --passphrase-file & --passphrase-fd] actually worked without needing extra tricks ;-) Another surprise is that gpg will remember the passphrase for a while (minutes?) and decrypt the same file again *without* asking for the passphrase Xen2050 5 лет назад 1

Похожие вопросы