Git에서 암호화 서명 커밋 및 태그의 장단점은 무엇입니까?


109

그래서 누군가 동료가 내 작업을 검토했으며 커밋과 태그에 항상 암호로 서명해야한다고 말했습니다. 이유를 물었을 때, 그는 나에게 그것을 설명 할 줄 몰랐고 "그냥 좋은 일이다"고 말했다.

명백한 침팬지 시나리오 를 피하려고 노력하는 이유는 무엇입니까? 실제로 많은 장점과 단점이 있습니까?

내가하는 모든 커밋과 태그에 서명하고 싶은 실질적인 이유는 무엇입니까?


3
나는 당신에게 커밋을 묶는 종이 책이 있다고 가정합니다. git 또는 다른 소스 제어 시스템으로 커밋에 서명 한 적이 없습니다. 동료가 사기 행위의 위험이 있다고 생각하면 회사에 더 큰 보안 문제가있을 수 있습니다.
제임스

@James : 회사 업무는 아니지만 오픈 소스 프로젝트와 비공개 소스 프로젝트에 참여하고 있습니다.
Madara Uchiha

@ 제임스 : "더 큰 보안 문제"--- 무엇처럼? 서명은 그것들을 해결하는 기술적 인 방법이 아닙니까?
zerkms

8
mikegerwitz.com/papers/git-horror-story.html 은 서명 된 커밋 및 태그의 사용 사례의 출발점입니다.

1
SVN 계정을 사용하여 커밋하면 @James 커밋에 서명합니다. git global config로 커밋하면 자신이 저자임을 확인하는 유일한 기관입니다.
Florian Margaine

답변:


102

(이것은 주로 Git Horror Story : 서명 된 커밋을 통한 리포지토리 무결성 (Repository Integrity with Signed Commits)을 기반 으로합니다.

git 저장소가 손상 될 수있는 여러 가지 방법이 있습니다 (이는 보안 결함이 아니며 삶의 사실입니다.이 때문에 git을 사용하지 않아야합니다). 예를 들어, 누군가가 귀하라고 주장하는 저장소로 푸시했을 수 있습니다. 또는 그 문제에 대해 누군가 누군가가 귀하라고 주장 하는 다른 사람의 저장소로 푸시했을 수 있습니다 (누군가도 귀하라고 주장하는 자신의 저장소로 푸시 할 수 있음). 이것은 DVCS에서 삶의 일부일뿐입니다.

예를 들어 :

$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com

거기에서 git 구성을 변경했습니다. 이제 커밋 할 수 있고 커밋이 어떻게 든 프로덕션 빌드로 나아갈 수있게 해주었습니다.

커밋 (및 태그)에 서명하면 특정 커밋 및 태그가 사용자로부터 온 것임을 증명할 수 있습니다 (서명되지 않은 것은 프로덕션 빌드로 만들지 않아야 함). 그것은 커밋에 서명함으로써 그것이 당신의 일이라고 말했습니다.

"귀하의 작업"측면은 저작권 소송에 종종 노출되는 Linux 커널 (및 git)에서 특히 중요합니다. 커밋에 서명하면 소프트웨어에 대한 권리가 있음을 알 수 있으며 원본을 추적합니다. 저작권으로 주장되는 소스에 액세스 할 수없고 소유권 주장이 근거가 없을 수 있습니다. 회사는 몇 년 전에 당신을 위해 일하고 있다는 것을 잊어 버렸을 수 있으며 그들의 지시 에 따라 커널에 자료를 추가하는 등의 일이 있습니다.

모든 커밋에 서명해야하는지에 대한 논쟁이 있습니다. 에서 GPG 서명 자식 커밋? Linus는 다음과 같이 썼다.

각 커밋에 서명하는 것은 완전히 어리 석습니다. 그것은 당신이 그것을 자동화한다는 것을 의미하며, 서명을 덜 가치있게 만듭니다. SHA1의 git DAG-chain이 작동하는 방식으로, 그 중 하나에서 도달 가능한 모든 커밋을 효과적으로 적용 할 수 있도록 하나의 서명 만 있으면됩니다. 따라서 각 커밋에 서명하는 것은 요점이 없습니다.

git 로그인에 대한 생각에 대해 더 많이 읽을 수 있습니다.

그것은 어쨌든 git으로 향했다.

서명 커밋이 불필요하다는 데는 대부분의 합의가있는 것으로 보이지만 서명 태그는 매우 좋습니다. 상단에 링크 된 블로그 게시물은 어쨌든 모든 것에 서명해야한다고 제안합니다. 내가 말했듯이, 모든 커밋이 필요한지 아닌지에 대한 논쟁이 있습니다.

"모든 커밋 서명"토론의 핵심은 아마도 사용하는 워크 플로우와 관련이있을 것입니다. 대부분의 사람들은 지역 저장소에서 많은 커밋을 한 다음 그 세트를 밀어 넣습니다. 최종 컬렉션에 태그를 지정하기에 충분해야합니다 (즉, 모든 변경 사항이 올바른지 가정). 많은 단일 커밋이 이동하는 환경에서 작업하는 경우 태그와 커밋의 구별이 덜 명확 해지며 커밋에 서명하는 것이 더 유용 할 수 있습니다.


5
충분할 수도 있지만 (마지막 태그를 지정하는 것만으로) 왜 모든 커밋에 태그를 지정 하지 않습니까?
22

3
태그를 사용하지 않는 게으른 자식으로서, 나는 이전 의견을 updooting하고 있습니다. 내 워크 스테이션의 git 구성에서 나는 가지고 commit.gpgsign = true있으며 단점을 확인할 수 없습니다. 어리석은 일이지만 너무 비싸지는 않은 것 같습니다.
pnovotnak

3
나는 이것에 @pnovotnak와 함께 갈거야. 왜 안 할래? 내 커밋에 서명하고 다른 개발자가 같은 프로젝트에 관심이없는 사람은 누구입니까? 그러나 해커가 내 신원을 도용하려고하면 서명을 지적 할 수 있습니다. 서명은 장점 만있는 것 같습니다. 서명이 덜 가치가 있다는 데 동의하지만,이를 생각할 필요가없는 것으로 교환합니다. 기본적으로 무료 보안입니다.
Jappie Kerk

2
내 개인적인 의견은 모든 커밋에 서명하는 것이 좋습니다. 내 서명으로 커밋 한 것이 확실하다는 것을 확신 할 수 있지만 바닐라 깃으로 저자를 사칭하는 것은 사소한 일입니다. 차라리 보안이 아닌 다른 사람이라고 생각하는 사람은 무료 검증 이라고 부릅니다 .
berto

1
@JosiahYoder. 아니요, Github은 이메일이 서비스 중이 아니기 때문에 푸시를 거부하지 않습니다. 다른 서비스 (예 : Bitbucket)에서 코드를 호스팅하고 있고 리포지토리를 다른 공급자로 옮기고 싶다고 가정 해 봅시다. 사용자가 리포지토리 (여러 사용자가 여러 번 커밋)를 전송하거나 미러를 만드는 것을 방지 할 수 있습니다. DVCS의 기능입니다.
Ricky Notaro-Garcia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.