我已经使用 GPG 一段时间了,对内部工作原理也略知一二。例如,我知道如何用你的公钥加密一个文件,这样只有你才能用你的私钥打开它,整洁。
但实际上发生的是(据我所知):
密码与接收者的公钥不对称加密并存储在文件中。
接收方使用私钥解密密码。
AFAIK 这样做是为了显着提高速度,而且理论上每次都有一个新的秘密会使猜测密码变得更加困难。
所以我的实际问题是,是否可以有多个收件人?
例如..我有10GB的文件,要与5朋友或同事分享,我真的需要重新加密5次,存储50GB或是否有可能5加密随机选择密码(对称加密)次使用 5 个公钥并将它们放在文件头中?
还是我只是向全世界分享了一个我应该申请专利的想法?=)
我已经阅读了讨论我们应该先签名然后加密,还是加密然后签名?以及论文S/MIME、PKCS#7、MOSS、PEM、PGP 和 XML 中的缺陷签名和加密。我的问题与 gpg 正在做什么有关。这有点难以凭经验辨别,因为以下输出:
gpg --encrypt --sign <filename>
Run Code Online (Sandbox Code Playgroud)
每次运行时都会发生变化。(为什么?)
@Jens 解释说,部分原因是包含时间戳。有什么办法可以消除它吗?我没有看到 gpg 选项。
由于选项的顺序可能没有区别,并且由于我无法使用该--detach-sign选项(无论如何只生成一个输出文件),我怀疑输出代表:
\begin{equation}
E_r (msg\ \| \ E_s (\#msg))
\end{equation}
Run Code Online (Sandbox Code Playgroud)
其中$E_r$是用接收者的公钥$E_s$加密,是用发送者的私钥加密,$msg$是消息,$\#msg$是消息的散列,$\|$是连接。IE。这将是“签署消息然后加密”。这样对吗?
或者是它:
\begin{equation}
E_r (msg) \ \| \ E_s (\#msg)
\end{equation}
Run Code Online (Sandbox Code Playgroud)
换句话说,它是“加密然后使用纯文本签名”吗?我假设它不是“加密然后签名密文”,($E_r (msg) \ \| \ E_s (\# E_r (msg))$)因为这与上述论文中的第 1.2 节相反。
@Jens 解释说它确实是“签名消息然后加密”。那么我们如何“加密然后使用纯文本签名”,输出单个 openpgp 文件,而不是两个文件,一个是加密数据,另一个是签名?
另外,我已经阅读了论文并阅读了手册 - 除了代码本身之外,我还可以去哪里查找?
@Jens 建议运行:
echo 'foo' | …Run Code Online (Sandbox Code Playgroud) 我在 Windows 上使用 Kleopatra(实际上是 gpg4win)。我已经创建了 PGP 私钥,我想将它们存储在我的 U 盘上(例如,只有当私钥可用时才能加密文件 - 也就是说,如果 U 盘在驱动器中)。
我怎样才能做到这一点?
谢谢!
我想检查一下 Julien Danjou 用于他的emacs 快照存储库的 gpg 密钥是否可以信任。从 my key 到 Juliens key有很多信任路径。但我不敢相信不应该有任何 gpg 命令从我的本地密钥环中回答这个简单的问题。或者有吗?
显然我不是唯一一个遇到这个问题的人。
我正在尝试生成可以嵌入二维码的非常小的 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 启用)?
我想使用 emacs 编辑使用 gnu 隐私保护加密的文件。我使用 emacs 23 中内置的 gpg 支持,我认为这是一个简单的 pg 助手。我导入在命令行中创建的密钥M-x epa-import-keys。当我保存后缀为 .gpg 的文件时,我首先要在我计算机上安装的密钥中选择收件人。我选择其中之一,我自己创建的密钥。然后我得到了一个问题:Use untrusted key anyway? (y or n). 这是什么意思,我该如何禁用它?gpg 从命令行工作正常。
版本:gpg (GnuPG) 1.4.9,emacs 23.3。
在 gpg (GnuPG) 1.4.2 上导入公钥时出现此错误
gpg: armor header: Version: GnuPG v2.0.14 (GNU/Linux)
gpg: pub xxxxx/xxxxxxxx 2012-05-25 abcd xyz <email@address.com>
gpg: DSA requires the use of a 160 bit hash algorithm
gpg: DSA requires the use of a 160 bit hash algorithm
gpg: key xxxxxxxx: invalid self-signature on user ID "abcd xyz <email@address.com>"
gpg: DSA requires the use of a 160 bit hash algorithm
gpg: DSA requires the use of a 160 bit hash algorithm
gpg: key xxxxxxxx: invalid subkey binding …Run Code Online (Sandbox Code Playgroud) 我在 Twitter 上看到有人发布了相对短的密钥格式。实际的公钥很长。
我有一个 GnuPG 密钥对,其中包含一个主密钥(仅具有认证功能)和 3 个子密钥(分别具有Sign、Encrypt和Authenticate功能)。实际上,当我开始时,我只有子密钥的私钥(我有一个存根,标记为#,而不是主私钥)
我这样做:
gpg --list-secret-keys)。有一个主密钥存根 ( #) 和三个子密钥。gpg -e USER)加密消息gpg -d):好的。gpg --edit-key)。gpg --delete-secret-keys不适用于主密钥(它只是一个存根)或子密钥。gpg --delete-keys)gpg --list-secret-keys:无密钥killall gpg-agent)gpg --receive-keys )gpg --list-secret-keys。我想我没有正确删除私有子项,我想使用命令gpg --edit-key我只删除了公共子项。如果没有主密钥(它只是一个存根),我如何删除私有子密钥?
再次导入秘密主密钥后,我可以通过执行删除主私钥及其三个子密钥gpg --delete-secret-key …
是否有某种配置方法pinentry-mac,我目前使用它来输入 OpenPGP 卡(Yubikey)的密码,或者使用其他程序将密码存储在 macOS“钥匙串”中,以便我只需使用“TouchID” '而不是输入它?
pgp ×10
gnupg ×8
encryption ×5
linux ×2
openpgp ×2
command-line ×1
cryptography ×1
emacs ×1
macos ×1
security ×1
yubikey ×1