Git/[인강] Git & Github 실무 활용 완벽 가이드

[Git & Github] 18-1. 해시 함수

pakms980319 2025. 5. 2. 13:52

해시 함수

해시 함수는 입력값의 크기와 무관하게 항상 고정된 길이의 출력값을 생성하는 함수이다.

예를 들어 한 글자만 입력해도, 수백 MB짜리 파일을 입력해도 출력값은 항상 일정한 길이이다.

 

Git에서는 이 해시 값을 객체로 식별하는 ID로 사용한다.

이 ID는 객체의 "내용"에서 직접 생성되기 때문에, 내용이 바뀌면 ID도 바뀐다.

이 원리를 내용 주소 지정(content-addressed storage)이라고 부른다.


Git이 사용하는 해시 함수 : SHA-1

Git은 오랫동안 SHA-1(Secure Hash Algorithm 1) 해시 함수를 사용해 왔다.

  • 출력 길이 : 40자리의 16진수 문자열 (160비트)
  • 예시 : f5a1c3e0b1b3f95fa3dfb77deee3a6d1c84e4a59
  • 동일한 입력값에 대해 항상 같은 해시 출력
  • 입력값의 아주 작은 변화도 해시값에 큰 변화를 유발
  • 출력값만으로는 원래 입력값을 추론할 수 없다.

이러한 특정 덕분에 Git은 해시값을 기반으로 중복을 제거하고, 변경 여부를 탐지하고, 데이터 무결성까지 보장할 수 있다.


⚠️ SHA-1의 보안 취약점

시간이 지나면서 SHA-1의 충돌 가능성이 현실화되었다.

  • 2017년, 구글과 네덜란드 CWI 연구소에서 SHAttered 프로젝트를 통해 실제 SHA-1 충돌 사례를 발표
  • 이 공격은 서도 다른 두 입력값이 동일한 SHA-1 해시를 만들어내는 현상으로, 해시 충돌의 실제 가능성을 입증한 첫 사례
  • 충돌이 가능하다는 건, 이론적으로 누군가가 Git의 해시값을 조작해 악의적인 리포지토리를 신뢰 가능한 것처럼 위장 할 수도 있다는 의미

Git의 대응 : SHA-256 지원

이 문제에 대응하여 Git은 SHA-1에서 SHA-256으로의 전환 작업을 시작하였다.

Git v2.29(2020.10 release)부터는 SHA-256 기반 저장소를 실험적으로 지원한다.

 

SHA-256의 특징:

  • 출력 길이 : 64자리의 16진수 문자열 (256 비트)
  • 훨씬 더 강력한 충돌 저항성
  • 현재까지 실제 충돌 사례 없음

❗ 하지만 주의:

  • 기존 저장소는 기본적으로 여전히 SHA-1을 사용
  • SHA-1과 SHA-256 저장소는 호환되지 않는다. 같은 저장소를 SHA-1과 SHA-256 형식으로 동시에 사용할 수 없다.

 

🧪 SHA-256 저장소 생성 예시

 

다음 명령어로 SHA-256 저장소를 새로 생성할 수 있다.

git init --object-format=sha256

 

확인하려면

git rev-parse --show-object-format
# 출력 : sha256

 

기존 저장소는 SHA-256 해시 함수 사용으로 전환이 복잡하고 비추천된다.


🛠️ 정리

속성 SHA-1 SHA-256
길이 40자 (160비트) 64자 (256비트)
충돌 가능성 입증됨 (SHAttered) 현재까지 없음
Git 기본 지원 여부 기본 (기존 저장소에 적용) 선택적 (v2.29+에서 실험적 지원)

 

 

✍️ 마무리

1. Git은 해시 함수를 통해 버전 기록을 안전하게 유지하며, 중복 없이 효율적으로 데이터를 관리하고 있다.

2. 오랜 시간 동안 SHA-1이 Git의 핵심 역할을 해왔지만, 보안 위협에 대응해 SHA-256이라는 새로운 옵션을 도입하였다.

3. Git은 단순히 파일을 저장하는 도구가 아니라, 암호학적으로 안전하게 소스코드를 추적하는 신뢰 가능한 버전 관리 시스템(VCS)이다.


참고

1) https://shattered.io/

 

SHAttered

Isn't SHA-1 deprecated? Today, many applications still rely on SHA-1, even though theoretical attacks have been known since 2005, and SHA-1 was officially deprecated by NIST in 2011. We hope our practical attack on SHA-1 will increase awareness and convinc

shattered.io

2) https://www.postype.com/@cpuu/post/580053

 

Google, SHA-1 해시함수 충돌쌍 공격 발표: CPUU의 Daydreamin'

구글과 네덜란드 CWI 연구소에서 SHA-1 해시함수의 충돌쌍을 생성하는 서비스를 공개하였습니다. 원문 글은 Google Security Blog에 2017년 2월 23일에 업데이트되었습니다. 해당 블로그의 글을 한글화하

www.postype.com