얼마나 많은 정보가 GPG 서명에 포함됩니까? ID 92861D99 gpg: Good signature from “Richard

GPG로 다른 사람의 서명을 확인한다고 가정 해 보겠습니다.

$ gpg --decrypt statement.txt.sig
"I am not a crook."
gpg: Signature made 17 Nov 1973 9:31:50 AM CDT using RSA key ID 92861D99
gpg: Good signature from "Richard Nixon <rnixon@whitehouse.gov>"
gpg:                 aka "[jpeg image of size 19022]"

그만큼 statement.txt.sig 파일에는 분명히 서명 된 진술 / 데이터와 서명 한 사람의 공개 키가 포함됩니다. 그러나, 거기있다 훨씬 더 많은 정보 서명자의 공개 키에 포함 된 JPEG 이미지는 물론 전체 이름 및 전자 메일 주소와 같은 출력에 포함됩니다.

GPG에서 추가 데이터를 가져 오는 위치는 어디입니까? 파일에 포함 되었습니까? statement.txt.sig, 또는 귀하의 열쇠 고리를보고 그 사람에 대한 모든 추가 정보를 “채우고 있습니까?”



답변

아니요, 정보는 공개 키 링에 보관 된 인증서 (또는 키 서버에서 다운로드 한 인증서)에서 가져옵니다. 서명에는 올바른 인증서를 찾는 데 필요한 몇 가지 정보 만 포함됩니다.


용도 gpg --list-packets 또는 pgpdump:

$ echo Foo. > foo.txt
$ gpg --detach-sign foo.txt
$ gpg --list-packets < foo.txt.sig
:signature packet: algo 1,  키 ID D24F6CB2C1B52632  버전 4, 생성 된 1410762670, md5len 0, sigclass 0x00
    알 고 10 소화, 소화 시작 25 58
    해시 된 subpkt 2 len 4 (sig created 2014-09-15)  subpkt 16 len 8 (발급자 키 ID D24F6CB2C1B52632)  데이터 : [4091 비트] 

분리 된 서명에는 알고리즘, 서명 타임 스탬프 및 서명자의 8 바이트 키 ID가 포함 된 “서명”패킷 하나가 있습니다.이 ID는 키링에서 서명자의 인증서를 조회하는 데 사용됩니다. (해당 keyid가있는 공개 키가없는 경우 GnuPG는 공개 키 서버에서 공개 키를 찾으려고 시도합니다.)

(키 ID가 두 번인 이유는 모르겠다.)

GnuPG는 keyid를 검색하여 서명자에 관한 모든 것을 얻습니다. – 실제 공개 키와 확인하는 서명, 서명자를 설명하는 데 사용 된 userid 필드 (이름, 주소, 사진).


참고 : 예에는 4 바이트의 짧은 키 ID가 있습니다.이 키는 의도적이거나 우발적 인 몇 가지 알려진 단축 키 충돌이 있었기 때문에 매우 나쁩니다. 사용 keyid-format long ~ / .gnupg / gnupg.conf 파일에 더 긴 keyid를 표시하게 만들지 만 의도적으로 충돌하기 쉽습니다. 항상 새 키를 가져올 때 지문을 확인하십시오.

그러나 시그니처 패킷은 항상 8 바이트의 keyid를 유지합니다. 일부 사람들은 지문을 사용자 정의 필드 (표기법)에 넣도록 GnuPG를 구성하지만 불행하게도 소프트웨어 자체에서는 사용하지 않습니다.


서명으로 돌아 가기. 네가했다면 gpg --list-packets 일반 (인라인) 시그니처에는 다음과 같은 것들이 더 많이 있습니다.

:compressed packet: algo=1
: onepass_sig 패킷 :  키 ID D24F6CB2C1B52632
    버전 3, sigclass 0x00, 다이제스트 10, 게시 키 1, 마지막 = 1 : 리터럴 데이터 패킷 :  모드 b (62), 생성 됨 1410762587, name = "",
    원시 데이터 : 5 바이트
: 서명 패킷 : algo 1, keyid D24F6CB2C1B52632
    버전 4, 생성 된 1410762587, md5len 0, sigclass 0x00
    소화기 10, 소화기 시작 31
    해시 된 subpkt 2 len 4 (sig created 2014-09-15)
    subpkt 16 len 8 (발급자 키 ID D24F6CB2C1B52632)
    데이터 : [4095 비트] 

실제 서명 된 메시지는 일반적으로 DEFLATE를 사용하여 압축 된 “리터럴 데이터”패킷에 있습니다 ( pgpdump 사용중인 실제 알고리즘을 보여줍니다).

앞에는 “onepass_sig”패킷이 있습니다. 그 목적은 전체 메시지의 끝까지 읽을 필요없이 keyid를 제공하는 것입니다. 따라서 GnuPG는 keyid 검색을 시작하고 즉시 메시지 확인을 계속할 수 있습니다. (파이프에서 읽을 때, 예. cat|gpg, 앞으로 및 뒤로 찾는 것은 불가능합니다. 모든 것은 한 번에 읽어야합니다.)


원하는 경우 서명자의 키 (인증서)를 사용하여이를 수행 할 수 있습니다. 먼저 파일로 내 보냅니다.

# gpg --export D24F6CB2C1B52632 | gpg --list-packets
:public key packet:
    version 4, algo 1, created 1256993643, expires 0
    pkey[0]: [4096 bits]
    pkey[1]: [17 bits]
    keyid: D24F6CB2C1B52632
:user ID packet: "Mantas Mikul\xc4\x97nas "
:signature packet: algo 1, keyid D24F6CB2C1B52632
    version 4, created 1256993643, md5len 0, sigclass 0x13
    digest algo 10, begin of digest 5a e2
 [더 많은 줄] 

또한 인증서는 공개 키, 각각에 대한 자체 서명이있는 사용자 ID (텍스트 레이블) (가짜 사용자 ID를 pubkey에 연결하는 것을 방지하기 위해), 몇 개의 공개 서브 키 패킷 (다시 자체 서명이 있음)으로 시작하는 패킷의 패킷으로 구성됩니다 ).


답변