私はすでに議論を読みました 署名してから暗号化するべきですか、それとも暗号化してから署名するべきですか? そして論文 S/MIME、PKCS#7、MOSSでの署名と暗号化の欠陥、PEM、PGP、およびXML 。私の質問は、gpgが何をしているのかと関係があります。これは、次の出力以来、経験的に識別するのが少し困難でした。
gpg --encrypt --sign <filename>
実行するたびに変わります。 (なぜ?)
@Jensは、理由の一部はタイムスタンプが含まれていることであると説明しています。それを排除する方法はありますか? gpgオプションが表示されません。
オプションの順序はおそらく違いがなく、--detach-sign
オプションを使用できないため(出力のファイルは1つしか生成されません)、出力は次のことを表していると思われます。
\begin{equation}
E_r (msg\ \| \ E_s (\#msg))
\end{equation}
ここで、$E_r$
は受信者の公開鍵による暗号化、$E_s$
は送信者の秘密鍵による暗号化、$msg$
はメッセージ、$\#msg$
はメッセージのハッシュ、$\|$
は連結です。 ie。これは「sign-the-message-then-encrypt」になります。これは正しいです?
または代わりに:
\begin{equation}
E_r (msg) \ \| \ E_s (\#msg)
\end{equation}
言い換えれば、それは「平文を暗号化してから署名する」ということですか?それはnot「encrypt-then-sign-the-cyphertext」($E_r (msg) \ \| \ E_s (\# E_r (msg))$)
であると想定しています。これは、セクション1.2のセクション1.2に反するためです。上記の論文。
@Jensは、それは確かに「sign-the-message-then-encrypt」であると説明しています。では、暗号化されたデータと署名の2つのファイルではなく、1つのopenpgpファイルを出力して「encrypt-then-sign-using-the-plain-text」を実行するにはどうすればよいでしょうか。
また、私は論文を読み、マニュアルを読みました-コード自体以外に、これを調べるためにどこに行きますか?
@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]
これは、次の出力以来、経験的に識別するのが少し困難でした。
gpg --encrypt --sign <filename>
実行するたびに変わります。 (なぜ?)
これには2つの理由があります。
署名と暗号化と暗号化と署名-gpgは何をしますか?
GnuPGは最初にメッセージに署名し、次にそれを暗号化します。これは、gpg --list-packets
を使用して確認できます。
echo 'foo' | gpg --recipient [key-id] --encrypt --sign | gpg --list-packets
パケットの順序が示すように、最初に署名してからメッセージを暗号化します。
RFC 4880、OpenPGP の私の理解から、両方の順序が定義されていますが、OpenPGPメッセージは署名、暗号化、圧縮、およびリテラルデータにすることができますが、署名はOpenPGPメッセージに適用され、復号化されたメッセージも形成する必要がありますOpenPGPメッセージ。