Skip to main content

A guide on setting up GPG keys for Git

· 5 min read
유기한
Principal Engineer @ Samsung

gpgimage

🔹 Git 서명(GPG)을 사용하는 이유는?

Git에서 GPG(GNU Privacy Guard) 서명을 사용하는 이유는 커밋 및 태그의 신뢰성을 보장하고, 코드가 신뢰할 수 있는 사람에 의해 변경되었음을 증명하기 위해서입니다.

✅ 1. GPG 서명의 주요 목적

1) 커밋 및 태그의 신뢰성 검증

서명된 커밋은 "이 커밋이 실제로 내가 한 것이 맞다"는 것을 증명할 수 있습니다.

조직에서는 특정 개발자가 직접 승인한 코드인지 확인할 수 있습니다.

2) 코드 변경의 무결성 보장

GPG 서명을 통해 MITM 공격(중간자 공격)이나 악의적인 코드 변경을 방지할 수 있습니다.

GitHub와 같은 플랫폼에서는 서명되지 않은 커밋이 있을 경우, 해당 코드의 신뢰성을 의심할 수 있습니다.

3) GitHub, GitLab 등의 플랫폼에서 "Verified" 뱃지 표시

GitHub는 GPG 서명된 커밋에 대해 Verified 라벨을 붙여주며, 이는 신뢰할 수 있는 변경이라는 의미입니다.

미서명 커밋은 신뢰할 수 없거나, 변경자가 위조될 가능성이 있습니다.

GitHub 예시

✅ Verified - 서명된 커밋

❌ Unverified - 서명되지 않은 커밋

4) 조직 및 팀 내 코드 신뢰성 강화

기업이나 오픈소스 프로젝트에서는 GPG 서명을 필수적으로 요구하기도 합니다.

"이 커밋이 진짜 팀원이 한 것인지?"를 검증할 수 있는 중요한 요소입니다.

✅ 2. GPG 서명 없이도 코드 커밋이 가능한데, 꼭 필요할까?

개인 프로젝트에서는 필요하지 않을 수도 있습니다.

하지만, 오픈소스 프로젝트, 보안이 중요한 환경, 기업 개발팀에서는 필수적으로 사용됩니다.

GitHub/GitLab 등의 플랫폼에서 보안 정책으로 서명을 강제할 수도 있음.

✅ 3. GPG 서명을 Git에 적용하는 방법

🔹 1) GPG 키 생성

gpg --full-generate-key
  • 키 유형 선택 (RSA and RSA 추천)
  • 키 크기 (4096 추천)
  • 만료 날짜 설정
  • 이름, 이메일 입력

🔹 2) GPG 공개 키 확인

gpg --list-secret-keys --keyid-format LONG

결과 예시

result

  • 3AA5C34371567BD2 부분이 GPG 키 ID입니다.

🔹 3) Git에 GPG 서명 키 등록

git config --global user.signingkey 3AA5C34371567BD2

🔹 4) GPG 자동 서명 설정

git config --global commit.gpgSign true
  • 이제 모든 커밋이 자동으로 GPG 서명됩니다.

🔹 5) GitHub에 GPG 공개 키 등록

gpg --armor --export 3AA5C34371567BD2

armor

  • 출력된 내용을 GitHub → Settings → SSH and GPG keys에 추가.

🔹 6) 서명된 커밋 만들기

git commit -S -m "서명된 커밋 메시지"

✅ 4. 결론: GPG 서명을 사용해야 할까?

🔹 필요한 경우

  • 오픈소스 프로젝트에서 코드의 신뢰성을 보장하려는 경우
  • 보안이 중요한 프로젝트에서 변경 내역을 검증해야 하는 경우
  • 기업 개발팀이 서명된 커밋을 요구하는 경우
  • GitHub에서 "Verified" 표시를 받고 싶은 경우

🔹 필요하지 않은 경우

  • 개인 프로젝트이거나, GPG 서명을 관리하기 번거로운 경우
  • 보안보다는 빠른 개발이 중요한 경우

결론

  • 보안이 중요한 프로젝트라면 GPG 서명은 필수적이며, 신뢰할 수 있는 코드 변경을 보장하는 강력한 방법입니다!