Я уже читал обсуждение. Должны ли мы подписать, затем зашифровать или зашифровать, а затем подписать? и документ « Неисправный знак и шифрование» в 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]