我已经阅读过讨论我们应该签名然后加密,还是加密然后签名?以及S / MIME,PKCS#7,MOSS,PEM,PGP和XML中的缺陷签名和加密。我的问题与gpg正在做的事情有关。由于以下方面的输出,这在经验上有点难以辨别:
gpg --encrypt --sign <filename>
每次运行时都会更改。(为什么?)
@Jens解释说,部分原因是包含时间戳。有什么方法可以消除这种情况吗?我没有看到gpg选项。
因为选项的顺序可能没有区别,并且由于我不能使用该--detach-sign
选项(无论如何只生成单个输出文件),我怀疑输出代表:
\begin{equation}
E_r (msg\ \| \ E_s (\#msg))
\end{equation}
哪里$E_r$
是使用收件人的公钥$E_s$
进行加密,是使用发件人的私钥加密,$msg$
是邮件,$\#msg$
是邮件的哈希值,$\|$
是连接。即。这将是“签署消息然后加密。”这是正确的吗?
或者是它:
\begin{equation}
E_r (msg) \ \| \ E_s (\#msg)
\end{equation}
换句话说,它是“加密然后签名使用纯文本吗?”我假设它不是 “加密 - 然后签署 - 密文”,($E_r (msg) \ \| \ E_s (\# E_r (msg))$)
因为这将与文中的第1.2节相反上文提到的。
@Jens已经解释说它确实是“签名消息然后加密”。那么我们如何“加密 - 然后使用纯文本进行签名”,输出单个openpgp文件,而不是两个文件,一个是加密数据,另一个是签名?
另外,我已经阅读了论文并且我已经阅读了手册 - 除了代码本身之外,我还会去查看这些内容吗?
@Jens建议跑:
echo 'foo' | gpg --recipient [key-id] --encrypt --sign | gpg --list-packets
我运行它,加密自己并找到下面的输出。有人可以澄清它告诉我们的是什么吗?
[...]
gpg: okay, we are the anonymous recipient.
:encrypted data packet:
length: unknown
mdc_method: 2
gpg: encrypted with RSA key, ID 00000000
:compressed packet: algo=2
:onepass_sig packet: keyid C6701618143AFA1E
version 3, sigclass 0x00, digest 10, pubkey 1, last=1
:literal data packet:
mode b (62), created 1443494042, name="",
raw data: 4 bytes
:signature packet: algo 1, keyid C6701618143AFA1E
version 4, created 1443494042, md5len 0, sigclass 0x00
digest algo 10, begin of digest d7 3a
hashed subpkt 2 len 4 (sig created 2015-09-29)
subpkt 16 len 8 (issuer key ID C6701618143AFA1E)
data: [4095 bits]