我已经重新安装了我的操作系统(Ubuntu 16.04)并且有一个旧的 .gnupg 目录,其中包含:
gpg-agent.conf
gpg-agent-info-<hostname>
gpg.conf
private-keys-v1.d
pubring.gpg
secring.gpg
S.gpg-agent
trustdb.gpg
Run Code Online (Sandbox Code Playgroud)
我想将旧的公钥和私钥导入新的 gnupg。(我没有简单地将 .gnupg 目录复制到新安装中,因为我知道新的 gnupg2 在数据库格式上有一些差异,这些差异是新 EC 加密选项的一部分。)
以下对公钥有效,但对私钥无效:
gpg --export --keyring=~/.gnupg.old/pubring.gpg | gpg --import
gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg | gpg --import
Run Code Online (Sandbox Code Playgroud)
后者回应:
gpg: can't open `~/.gnupg/secring.gpg' <== New Secret Keyring
gpg: WARNING: nothing exported
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
Run Code Online (Sandbox Code Playgroud)
请注意,它无法打开我的新秘密戒指。尝试导出到文件时出现相同的错误:
gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg > secret.asc
gpg: can't open `~/.gnupg/secring.gpg' <== New Secret Keyring
gpg: WARNING: nothing exported
Run Code Online (Sandbox Code Playgroud)
由于我的密钥已剥离了主密钥的私有部分,我也尝试了相同的方法,使用--export-secret-subkeys
,但响应是相同的。在导出后放置我的密钥 …
我已经阅读了讨论我们应该先签名然后加密,还是加密然后签名?以及论文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)