얼마나 많은 정보가 GPG 서명에 포함됩니까?


4

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, 또는 귀하의 열쇠 고리를보고 그 사람에 대한 모든 추가 정보를 "채우고 있습니까?"

답변:


6

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


용도 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에 연결하는 것을 방지하기 위해), 몇 개의 공개 서브 키 패킷 (다시 자체 서명이 있음)으로 시작하는 패킷의 패킷으로 구성됩니다 ).


(키 ID가 두 번인 이유는 모르겠다.) & gt; 마스터 키로 서명했기 때문에 두 번 표시 될 수 있습니까? 아마 그것은 issuer key ID 마스터 키로 keyid 당신이 그걸로 서명했다면 하위 키로?
IQAndreas

좋은 이론,하지만 난 그냥 확인하고 마스터 인증서 / 서명 서브 키 것은 아니에요 (그건 내 열쇠가 뭔지), twing 키 ID는 어느 열쇠가 서명했다. 그것은 시그니처 패킷에서 참조하는 서브 패킷과 관련이있을 것입니다. 그러나 RFC의 어느 비트가 관련이 있는지 잊어 버리고 현재 (미안하다) 그것을 발굴하기에는 너무 피곤합니다. 나는 당신이 그 결론을 어떻게 이끌어 냈는지 알 수 있습니다, 그것은 다소 이해가됩니다.
Ben

1
최근 OpenPGP 패킷 형식에 대해 읽은 것부터 X.509보다 간단합니다. 어떤 의미가 있는지에 대해 많이 말합니다.
grawity

GnuPG가 지정한 해시를 사용했는지 확인하려고합니다. --s2k-digest-algo SHA256 (또한 이리 ). begin of digest eb 31 꽤 쓸모가 없다. 분리 된 서명을 사용할 수있을 때 사용되는 해시를 어떻게 결정할 수 있습니까?
jww
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.