1

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .