我正在寻求帮助以找出如何将密钥与密码绑定以使用 GPG 加密文件。我已经测试了许多选项(--encrypt、--sign、--recipient、--symmetric 等),但在所有这些选项中,即使在我不使用密码的机器中,我也能够仅输入密码来解密文件没有公共或私人/秘密密钥。
有没有办法强制用户拥有密钥并被要求输入密码?
我对任何其他强制双重安全检查以解密受保护文件的想法持开放态度。
我在 Linux 上使用 GnuPG 2.0.9 版。
我的测试命令行包括:
我尝试使用以下不同的语法来保护我的文件:###
gpg --encrypt --symmetric --sign file.txt
gpg --symmetric --sign file.txt
gpg --symmetric --recipient file.txt
gpg -sb file.txt
gpg --default-key AFAEF918 --encrypt file.txt
Run Code Online (Sandbox Code Playgroud)
在所有尝试中,即使在没有公钥/私钥的一台计算机中,受保护的文件也仅通过输入密码被解密。
/root/.gnupg/secring.gpg
sec 1024D/AFAEF918 2016-02-12
uid TEST User (TEST Dev GPG Key)
ssb 2048g/50B959DD 2016-02-12
谢谢,
首先阅读GPG MiniHOWTO,并按照其中的示例进行操作。
然后根据需要参阅GPG 手册以获取更多信息。
如果可能的话
试验时,请使用 -v 和 -vv 以查看有关正在发生的事情的更多信息。
--symmetric 是专门的对称加密,不应该使用密钥 - 它仅使用密码短语,因此预计只能使用密码短语进行解密。
最简单的 --symmetric 命令行加密是
gpg -v --symmetric test.txt
Run Code Online (Sandbox Code Playgroud)
尽管我强烈建议选择更好的密码和更多的密钥派生迭代次数,即
gpg -v --cipher-algo AES256 --s2k-mode 3 --s2k-digest-algo SHA512 --s2k-count 65600000 --symmetric test.txt
Run Code Online (Sandbox Code Playgroud)
对于带有 SHA-512 摘要和大量密钥迭代计数的 AES256 加密(也请从我列出的内容中增加它),或
gpg -v --cipher-algo CAMELLIA256 --s2k-mode 3 --s2k-digest-algo SHA512 --s2k-count 65600000 --symmetric test.txt
Run Code Online (Sandbox Code Playgroud)
否则为 CAMELLIA256 如上所述。
-sb 是两种签名形式,作用与 -b 相同。这首先不会加密,它只是用一个分离的签名来签名;更完整的用法是:
gpg -u <mykeyid> -b test.txt
Run Code Online (Sandbox Code Playgroud)
对于分离的签名
签名加加密的公钥示例是:
gpg -v --local-user <mykeyidToSign> --recipient <theirkeyidToEncryptTo> --sign --encrypt test.txt
Run Code Online (Sandbox Code Playgroud)
我还推荐在生成密钥时使用更强的密码短语加密和摘要算法
gpg --s2k-mode 3 --s2k-digest-algo SHA512 --s2k-count 95600000 --cert-digest-algo SHA512 --gen-key
gpg --edit-key <mynewkey>
Run Code Online (Sandbox Code Playgroud)
并且,如上所述,请进一步增加 --s2k-count。
这不仅创建了强大的密码派生,而且还设置了强大的现代密钥自签名 (--cert-digest-algo)。一些旧的或受限的 GPG 或 PGP 软件可能不支持新的 SHA512 自签名;如果需要,您可以在那里使用 SHA256,但我现在很少看到 SHA512 问题(如果有的话,他们应该升级)。
通过将首选项设置为您可以使用的最强默认值来跟进,例如
gpg --edit-key <mynewkey>
setpref AES256 CAMELLIA256 AES192 CAMELLIA192 AES CAMELLIA128 3DES SHA512 SHA384 SHA256 SHA224 SHA1 BZIP2 ZIP ZLIB
save
Run Code Online (Sandbox Code Playgroud)
这一步是安全的,因为任何正确配置的发送软件都会简单地沿着列表向下查找匹配的第一个密码、匹配的第一个散列和匹配的第一个压缩。
请注意密码(在生成密钥时输入,可随
passwd
Run Code Online (Sandbox Code Playgroud)
--edit-key 模式下的命令,用于加密私钥;使用公钥的任何人都不会使用它,并且应该像私钥本身一样保密。
如果您希望收件人同时拥有私钥和双方(发件人和收件人)都知道的密码,那么您必须运行 GPG 两次,即
gpg -v --cipher-algo CAMELLIA256 --s2k-mode 3 --s2k-digest-algo SHA512 --s2k-count 65600000 --symmetric test.txt
Run Code Online (Sandbox Code Playgroud)
首先使用对称加密,这将是第二次解密(加密洋葱的“内部”层)。
gpg -v --local-user <mykeyidToSign> --recipient <theirkeyidToEncryptTo> --sign --encrypt test.txt.gpg
Run Code Online (Sandbox Code Playgroud)
然后对之前加密的文件使用公钥加密;注意这个在 test.txt.gpg 上,并输出 test.txt.gpg.gpg
接收者(或他们的自动化过程)将首先用他们的私钥解密公钥部分并验证签名。然后,如果它是全公司或团队密钥,他们可以将消息路由到拥有对称密钥的预期收件人。
gpg -v --decrypt test.txt.gpg
Run Code Online (Sandbox Code Playgroud)