这个问题出现在“如何以不那么黑客的方式显示我的加密密钥的使用标志? ”的评论中,似乎值得以问答形式回答,因为答案实际上并不明显。
要查看 Torvald 的 OpenPGP 密钥 449FA3AB,我使用gpg2 --list-keys 449FA3AB,它输出
$ gpg2 --list-keys 449FA3AB
pub 1024D/449FA3AB 1999-10-05 [expired: 2001-10-04]
uid [ expired] Linus Torvalds <torvalds@transmeta.com>
Run Code Online (Sandbox Code Playgroud)
通常,此命令还会列出子键,但不会为 Torvald 的键打印子键。然而,当请求批量输出时,包含一个。
$ gpg2 --with-colons --list-keys 449FA3AB
tru::1:1414619239:1414879758:3:1:5
pub:e:1024:17:956EB7BF449FA3AB:939086351:1002158351::-:::sca:
uid:e::::939086351::81A3799583B9B1B391E4C428112F302FF2ADF462::Linus Torvalds <torvalds@transmeta.com>:
sub:e:2048:16:71CE8207BFF491C5:939086545:1002158545:::::e:
Run Code Online (Sandbox Code Playgroud)
似乎这个 Torvalds-key 有一些隐藏子键的特殊功能。这里发生了什么?
我正在尝试使用
gpg2 --import ~/.gnupg/secring.gpg
Run Code Online (Sandbox Code Playgroud)
gpg2 要求提供密钥环中所有密钥的密码。
为什么在这个阶段需要密码(我应该只在使用密钥时提供它们)以及如何防止这种情况,即在不提供密码的情况下导入密钥环?
系统为 Arch Linux,内核 4.7.6。谢谢。
GnuPG 是这些令人讨厌的工具之一,它具有不可编写脚本的命令行。
我想gpg --gen-key在脚本中运行,其余的过程是简单的命令。有没有人有这方面的运气?似乎支持输入密码,但不支持它询问的其他问题,密钥类型、密钥大小、到期时间、名称。
如果您使用该--yes选项,它仍会显示确认对话框。
有什么办法openssl可以使用一些更友好的工具来生成密钥吗?
对于 WPA,有计算器可以确定破解密码所需的时间,但我没有发现 OpenPGP 的任何内容。
破解 1024 位 OpenPGP 加密电子邮件需要多长时间(取决于 CPU 能力)?
我也对 2048 和 4096 等其他键大小感兴趣。
虽然我可以使用该--edit-key命令确定我对单个 OpenPGP 公钥设置的信任级别,但是否有一种简单的方法可以从命令行列出所有公钥及其信任级别?
我正在尝试生成可以嵌入二维码的非常小的 OpenPGP 加密文件。
然而,与例如 OpenSSL 相比,GnuPG 似乎为简单的 'a' 输入产生了非常大的结果:
$ echo -n a|openssl enc -aes-256-ctr|wc -c
17
$ echo -n a|gpg --symmetric -o-|wc -c
71
Run Code Online (Sandbox Code Playgroud)
通过阅读手册,其中一个区别是 OpenSSL 默认只包含一个 8 字节的标头和一个 8 字节的盐,而 GnuPG 还包含一个盐、校验和和压缩。关闭这些后,文件大小变小但仍然很高:
$ echo -n a|gpg --symmetric --compress-algo none --disable-mdc --s2k-mode 0 -o-|wc -c
35
Run Code Online (Sandbox Code Playgroud)
有什么方法可以进一步优化 OpenPGP 加密的消息(同时保持 AES 启用)?
我正在使用 Mountain Lion,当我使用 gpg 加密文件时,一个烦人的 GUI 提示我输入密码。我想在终端中提示输入密码,而不是在外部 GUI 中。例如,我可能正在远程执行此操作。
有没有办法让 gpg for mac 在终端中询问密码而在 GUI 提示中没有?
更新:这对于 gpg2 来说似乎很难,所以我已经降级为 gpg1。用 gpg2 (MacGPG2) 尝试了一切,但没有任何效果。糟透了!使用 gpg1 工作正常!
我将以下 GPG 公钥存储在名为publickey.pubASCII Armor (Radix-64) 并以 ASCII Armor (Radix-64) 编码的文件中:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzNko/QAAAEEANZ2kpN/oMkz4tqzxvKPZws/XwsD0Y+E5/y7P2DIw4uHS/4N
syQbgkdrZhPBlXDv68DQioHXWsb904qyr7iZB1LC5ItK9MgqlK+Z2mvPqsGbHM8J
+oYib8kf2zJ6HvrYrP7NYB0tN9YYum2ICtx+hIi6aKGXdB1ATA5erwYmu0N9AAUR
tClSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPokAlQMF
EDNko/QOXq8GJrtDfQEBKVoD/2K/+4pcwhxok+FkuLwC5Pnuh/1oeOYHiKYwx0Z3
p09RLvDtNldr6VD+aL9JltxdPTARzZ8M50UqoF9jMr25GifheFYhilww41OVZA3e
cLXlLgda1+t0vWs3Eg/i2b0arQQDaIq7PeRdjdEDgwnG4xBaqaAqfgxwOXJ+LPWF
hiXZ
=K7lL
-----END PGP PUBLIC KEY BLOCK-----
Run Code Online (Sandbox Code Playgroud)
如果我输入:
$ gpg --with-fingerprint publickey.pub
Run Code Online (Sandbox Code Playgroud)
我得到了钥匙的指纹:
密钥指纹 = 00 C9 21 8E D1 AB 70 37 DD 67 A2 3A 0A 6F 8D A5
那么,GPG 是如何做到的呢?我的意思是,是否有一个命令我可以在不使用的情况下运行gpg并且仍然获得相同的指纹?例如,使用 SSH,给定公钥,我可以执行以下操作:
$ cat ~/.ssh/id_rsa.pub | awk '{print $2}' | base64 -D | md5
Run Code Online (Sandbox Code Playgroud)
这将返回与以下内容相同的哈希值:
$ ssh-keygen -l -f ~/.ssh/id_rsa.pub …Run Code Online (Sandbox Code Playgroud) 我来自使用带有 OpenSSL 的普通旧 RSA 来满足我所有的非对称加密需求,我学到了相当多的知识,但是我很难围绕 OpenPGP 协议进行思考。因此,这将是几个问题。
在我的 Debian 盒子中,使用 GnuPG,在当前钥匙串中创建主密钥时,我注意到子密钥的默认创建。在阅读了一些之后,我了解到 GnuPG 以这种方式自动管理密钥;严格用于签名的主密钥和严格用于加密的子密钥。这让我相信他们只是为私钥和公钥使用了不同的名称:主密钥(如私钥)用于签署只有子密钥(公钥)可以解密的数据,但子密钥(公钥)只能加密数据,然后只能通过主密钥(私钥)解密。我在这个假设中是否正确,还是它们完全是 2 个单独的密钥对?
如果它们是两个单独的密钥对,那么什么在数学上将子密钥绑定到主密钥?
是否只是 GnuPG 使用这种方法,其中会自动创建子密钥以进行加密,还是 OpenPGP 协议强制要求这样做?
当我将密钥上传到密钥服务器时,上传的是哪个密钥,我的主密钥还是子密钥?或两者?
当我使用该--export功能时,当我指定我的 UID 时会导出哪个 OpenPGP 密钥?
是否有某种配置方法pinentry-mac,我目前使用它来输入 OpenPGP 卡(Yubikey)的密码,或者使用其他程序将密码存储在 macOS“钥匙串”中,以便我只需使用“TouchID” '而不是输入它?