나는 이미 토론을 읽었습니다.서명 후 암호화해야 할까요, 아니면 암호화 후 서명해야 할까요?그리고 종이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]
답변1
이는 다음의 결과 이후 경험적으로 식별하기가 약간 어려웠습니다.
gpg --encrypt --sign <filename>
실행할 때마다 변경됩니다. (왜?)
여기에는 두 가지 이유가 있습니다.
- OpenPGP의 대칭 암호화는 무작위 초기화 벡터(또는 고정된 초기화 벡터를 사용하는 유사한 구성)를 사용합니다.
- 서명 생성 타임스탬프가 포함됩니다.
서명 및 암호화 vs. 암호화 및 서명 - gpg는 무엇을 합니까?
GnuPG는 먼저 메시지에 서명한 다음 암호화합니다. 다음을 사용하여 이를 확인할 수 있습니다 gpg --list-packets
.
echo 'foo' | gpg --recipient [key-id] --encrypt --sign | gpg --list-packets
패킷 순서에 따라 먼저 메시지에 서명한 다음 암호화합니다.
나의 이해에 따르면RFC 4880, 오픈PGP에서는 두 순서가 모두 정의됩니다. OpenPGP 메시지는 서명, 암호화, 압축 및 리터럴 데이터일 수 있지만 서명은 OpenPGP 메시지에 적용되며 해독된 메시지도 OpenPGP 메시지를 형성해야 합니다.