使用 gpg 解密和加密文件,无需重新输入密码

使用 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

有几种选择,但它们都可能在磁盘上留下一个解密文件,等待稍后恢复。 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(允许输入新信息,例如,如果存在冲突,则输入新文件名),否则--batchgpg 将忽略密码选项并仍然向代理询问密码(在我看来是个错误)。这可能也很有用:

  • --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覆盖)

相关内容