2017-09-20 9 views
3

이 책의 내용은 다음과 같습니다 :git 저장소에서 서명을 확인하기 위해 공개 키를 공유해야합니까?

git의 blob에 공개 키를 수집하는 방법을 보여주기 때문에 공개 키를 추가하고 서명 된 태그를 확인할 수 있습니다.

이 방법이 실제로 안전합니까? 누군가 공개 키 블로블을 변경하고 서명을 다시 할 수 있습니다. 우리는 공개 키를 별도의 허가 된 방식으로 얻어야한다고 생각합니다. 맞습니까? 책에

명령은 다음과 같이 붙여 넣습니다 :

$ git tag -s v1.5 -m 'my signed 1.5 tag' 
You need a passphrase to unlock the secret key for 
user: "Scott Chacon <[email protected]>" 
1024-bit DSA key, ID F721C45A, created 2009-02-09 

$ gpg --list-keys 
/Users/schacon/.gnupg/pubring.gpg 
--------------------------------- 
pub   1024D/F721C45A 2009-02-09 [expires: 2010-02-09] 
uid                  Scott Chacon <[email protected]> 
sub   2048g/45D02282 2009-02-09 [expires: 2010-02-09] 

$ gpg -a --export F721C45A | git hash-object -w --stdin 
659ef797d181633c87ec71ac3f9ba29fe5775b92 

$ git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92 

$ git show maintainer-pgp-pub | gpg --import 
+0

공개 키를 변경하는 PR을받는 이유는 무엇입니까? – ceejayoz

+0

악의적 인 요청을 왜 받아들입니까? 이것은 공격 모델이 아닙니다. 공격자가 저장소 자격 증명을 확보하고 풀 요청을하지 않고 악의적 인 커밋 (새 키 포함)을 업로드 할 수 있다고 생각하십시오. –

+0

신뢰할 수있는 공개 키를 분리되고 인증 된 방식으로 가져 와서 보안을 보증 한 다음 (해당 키가 사용 된 키를 사용하여 서명 된 태그를 확인하면) 태그가 가리키는 커밋과 범하다. 그래서 이것은 내가 저장소를 어디서 얻든지 상관없이 그것을 검증합니다. 귀하의 의견에 따르면, 보안이인가 된 자식 서버에 의해 보증된다면, 왜 우리는 먼저 태그에 서명해야합니까? – TangXC

답변

3

다른 수단을 통해 확인되지 않는 한 물론 검증 된 키를 고려하지 않아야 심지어 불구하고, 당신의 서명 키를 공유에서 아무 문제가 없습니다. 키를 전혀 공유하지 않는 것과 비교할 때 상대방은 서명에 포함 된 지문 참조에 의해 키 서버에서 키를 가져와야합니다. 키는 여전히 신뢰할 수 없지만 키 서버에 대한 종속성이 있습니다.

예를 들어, 키를 포함시키는 것이 유용한 이유는 무엇입니까? 기업의 많은 기업이 서버 시스템에 대해 매우 엄격한 방화벽 규칙을 가지고 있습니다. 리포지토리 서버에 대한 허가를 받거나 (기본적으로 Github 정리가 가능할 수도 있음) 핵심 서버에 대한 참조를 추가하는 것은 지루할 수 있습니다. 소프트웨어를 구축 할 때 저장소에서 키를 가져올 수 있으며 하드 코딩 된 공개 키 지문을 기반으로 신뢰를 발행 할 수 있습니다. 그러나 로컬 키 복사가 업데이트되지 않는 한 롤링 하위 키는 깨진 빌드를 의미하므로 정적으로 키를 로컬에 저장하는 것보다 낫습니다. 저장소에서 키를 가져오고 (공용 기본 키 지문을 통해 유효성을 검사 할 때) 키를 취하면 조치가 취해지지 않습니다.

TOFU의 개념이 있습니다. "처음 사용시 신뢰". 처음으로 키를 가져올 때 (예 : 초기 개발 중) 공격자가 없을 것으로 예상되지만 이후에 조작 된 소스가 배포되지 않도록해야합니다. 로컬 개발 컴퓨터에서 키를 가져 와서 신뢰할 수있는 것으로 설정하는 개발자는 공격 모델 및 수용 가능한 위험에 따라 이미 괜찮을 수도 있습니다.

어쨌든 신뢰할 수있는 출처의 키 (또는 적어도 지문, 또는 never use short key IDs)도 좋습니다. 신뢰할 수있는 인증서가있는 HTTP를 통해 사용할 수있는 웹 사이트가 시작되었습니다. 특히 오픈 소스 프로젝트에 참여하는 경우 오픈 소스 컨퍼런스에서 키를 인증 받으십시오 (또는 최소한 개발자 키가 인증 된 후 프로젝트 키를 인증 할 수 있음).

+0

감사합니다. 답변 해 주셔서 감사합니다. 그러나 나는 아직도 여기에서 혼란 스럽다. git 저장소의 공개 키를 신뢰할 수 있다면 저장소의 태그를 신뢰할 수 있습니다. 맞습니까? 그러면 왜 우리가 처음에 그 꼬리표에 서명해야합니까? – TangXC

+0

글쎄, 그건 내가 말한 바로는 : 당신은 열쇠를 제공 할 수 있지만, 그것은 여전히 ​​다른 수단을 통해 확인해야합니다. 예를 들어 지문 (해시 덤)을 웹 사이트와 비교하면 ...; "두부"신뢰 모델을 적용함으로써; 신뢰의 웹을 사용함으로써. 키 (또는 지문)가 확인되면 괜찮습니다. 사실, OpenPGP 생태권의 대부분은 신뢰할 수없는 키 교환 방법 (OpenPGP 키 서버)에 의존하지만 키 확인 방법을 적용합니다. –