Eu já li a discussão Devemos assinar-então-criptografar, ou criptografar-depois-assinar? e o papel Sinal com defeito & Criptografar em S / MIME,
PKCS # 7, MOSS, PEM, PGP e XML . Minha pergunta tem a ver com o que o gpg está fazendo. Isso tem sido um pouco difícil de discernir empiricamente, desde a saída de:
gpg --encrypt --sign <filename>
Altera cada vez que eu o executo. (Por quê?)
@Jens explicou que parte do motivo é que um timestamp é incluído. Existe alguma maneira de eliminar isso? Eu não estou vendo uma opção de gpg.
Como a ordem das opções presumivelmente não faz diferença, e como não posso usar a opção --detach-sign
(apenas um único arquivo de saída é produzido, independentemente), suspeito que a saída represente:
\begin{equation}
E_r (msg\ \| \ E_s (\#msg))
\end{equation}
em que $E_r$
é criptografia com a chave pública do destinatário, $E_s$
é criptografia com a chave privada do remetente, $msg$
é a mensagem, $\#msg$
é o hash da mensagem e $\|$
é concatenação. ie. isto seria "assine-a-mensagem-então-criptografe". Isto está correto?
Ou é em vez disso:
\begin{equation}
E_r (msg) \ \| \ E_s (\#msg)
\end{equation}
Em outras palavras, é "criptografar, em seguida, assinar usando o texto simples"? Estou assumindo que não é "encrypt-then-sign-the-cyphertext" ($E_r (msg) \ \| \ E_s (\# E_r (msg))$)
, pois isso seria contrário à Seção 1.2 do documento mencionado acima.
@Jens explicou que é de fato “sign-the-message-then-encrypt”. Então, como é que vamos “criptografar, em seguida, assinar usando o texto simples”, com a saída de um único arquivo openpgp , em vez de dois arquivos, um dos dados criptografados e outro a assinatura?
Além disso, li os artigos & Eu li os manuais - onde, além do próprio código, eu procuraria isso?
@Jens sugeriu correr:
echo 'foo' | gpg --recipient [key-id] --encrypt --sign | gpg --list-packets
Eu o executei, criptografando para mim mesmo e encontrei a saída abaixo. Alguém poderia elucidar o que está nos dizendo?
[...]
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]