git commit 을 gpg 로 암호화하기
개요
- 원문 링크: https://help.github.com/articles/managing-commit-signature-verification/
- git commit 과 tag에 sign 을 하여, Github 에 push, merge 될때에 그 출처를 좀 더 신뢰할 수 있도록 해준다.
- gpg 다운로드 하기: https://www.gnupg.org/download/index.html
- 비동기 암호화의 signature 기능을 이용하는 것이다.
전자 서명
- git commit 의 전자서명에 한해서만 설명해본다.
- 세세한 사항은 오류가 있을 수 있으니 개념이해로만 볼 것
1) public / private key를 생성하고, public key 를 Github 에 알려준다. 2) commit 또는 tag 내용을 SHA256 같은 해시함수로 암호화 해준다. - 해시함수는 어떠한 크기의 데이터든 같은 크기의 메시지로 만들어준다. - 예를 들면 영화 한편을 256 비트의 메시지로 바꿔준다. → 이 해시함수의 결과를 private key 로 암호화 해준다. 3) commit 와 최종암호화된 signature 를 Github 에 전달한다. - Signature 는 commit → 해시함수 먹이고 → private key로 먹인것 4) Github 은 두 값을 비교하여 같은지 verify 한다. - commit 을 해시함수 먹인 값 - signature 를 public key로 복호화 해준 값 |
프로세스
1. 내 컴퓨터에 public key / private key 가 있어야 한다.
1) 있는지 확인하기
2) 없거나 있어도 새로 만들고 싶다면 생성하기
- 암호화 방법 설정
- 유효기간 설정
- 이름, 이메일, 코멘트 설정
- Passphrase - 사용할 암호 설정 (실제 key 사용시에 수시로 물어봄)
2. 내 컴퓨터에 있는 key 의 public key 를 export 하기
1) 생성된 key 의 key ID 알아보기
- 아래 노란색이 key ID 이다.
2) public key를 ASCII 형대로 export 해주기
- export 된 값을 화면에 뿌려줄거다. 이걸 전부 복사해둔다.
-----BEGIN PGP PUBLIC KEY BLOCK----- 로 시작해서 -----END PGP PUBLIC KEY BLOCK----- 로 끝나는 모든 내용 |
3. 깃헙에 public key알려주기
1) Commit 을 해싱하고, private key 로 암호화한 Signature 를 만들고
2) Commit 과 Signature 를 깃헙에 보내면
3) 깃헙은 이렇게 제공받은 public key로 Signature 를 복호화한다.
Github >> Setting >> SSH and GPG keys >> New GPG key 로 들어가서
Public key를 붙여넣고 Add GPG key 하면 된다.
4. 로컬의 내 git 에도 어떤 key 를 사용할지 알려줘야 한다.
Key ID 를 아래와 같이 설정해준다. .gitconfig 에 바로 넣어줘도 되겠다.
사용해보기
무조건 자동으로 싸인하는 방법
git config commit.gpgsign true |
로컬 저장소에서 무조건 싸인 |
git config --global commit.gpgsign true. |
모든 로컬 저장소에 적용 |
Commit 할때마다 싸인하는 방법
- 이렇게 하면 passPhrase 를 물어볼 것임. Gpg4Win 을 쓰면 이것도 안할 수 있음 (근데 보안인데 해주지 뭐)
깃헙에서 확인
싸인한 commit (또는 tag)는 아래와 같이 보인다.