Git은 왜 암호화 해시 기능을 사용합니까?
Git 이 더 빠른 비 암호 해시 함수 대신 암호화 해시 함수 SHA-1을 사용하는 이유는 무엇 입니까?
관련 질문 :
스택 오버플로 질문 Git은 왜 SHA-1을 버전 번호로 사용합니까? Git이 커밋을 위해 순차적 인 숫자 대신 SHA-1을 사용하는 이유를 묻습니다.
TLDR;
- 2005 년부터 2018 년까지 / Git 2.18 : SHA-1 (아래 참조)
- 2019, 어느 시점 에서 SHA-256으로 전환됩니다
당신은에서 그것을 확인할 수 있습니다 리누스 토발즈 (Linus Torvalds) 자신, 그가 2007 년에 구글의 뒷면에 힘내을 발표 할 때 :
(강조 광산)
암호로 안전한 것으로 간주되는 체크섬을 확인합니다. 아무도 SHA-1을 깰 수 없었지만 요점은 git에 관한 한 SHA-1은 보안 기능조차 아닙니다. 순전히 일관성 검사 입니다.
보안 부품은 다른 곳에 있습니다. 많은 사람들은 git이 SHA-1을 사용하고 SHA-1이 암호로 안전한 것들에 사용되기 때문에 거대한 보안 기능이라고 생각합니다. 그것은 보안과 전혀 관련이 없으며 얻을 수있는 최고의 해시 일뿐입니다.좋은 해시를 사용하면 데이터를 신뢰할 수 있고 다른 좋은 기능도 생길 수 있습니다. 객체를 해시하면 해시가 잘 분산되어 있음을 알고 특정 배포 문제에 대해 걱정할 필요가 없습니다. .
내부적으로는 구현 관점에서 해시가 너무 좋아서 해싱 알고리즘을 사용할 수 있으며 나쁜 경우가 없다는 것을 알 수 있습니다.
따라서 암호화 측면도 좋아할만한 이유가 있지만 실제로는 데이터를 신뢰할 수있는 기능에 관한 것입니다.
데이터를 git에 넣으면 5 년 후 하드 디스크에서 DVD로 변환 한 후 새로운 기술로 복사 한 후 5 년 후에 데이터를 확인할 수 있다는 사실을 신뢰할 수 있습니다. 다시 가져 오는 것은 입력 한 것과 정확히 동일한 데이터입니다. 소스 코드 관리 시스템에서 실제로 찾아야 할 것입니다 .
Git 2.16 (2017 년 1 분기)으로 2017 년 12 월 업데이트 : 대체 SHA를 지원하기위한 이러한 노력이 진행 중입니다. " Git이 왜 최신 SHA를 사용하지 않습니까? "를 참조하십시오.
" git에서 blob에서 SHA-1 충돌을 어떻게 처리 할까? "에서 언급 했는데 특정 SHA1 접두사를 사용하여 커밋을 엔지니어링 할 수 있습니다 (여전히 비용이 많이 드는 노력). 그러나 Eric Sink 가 " Git : Cryptographic Hashes "( Version Control by Example (2011)) 책 에서 언급했듯이 요점은 여전히 남아 있습니다 .
DVCS는 동일한 다이제스트가있는 두 개의 서로 다른 데이터 조각을 절대 만나지 않는 것이 중요합니다. 다행스럽게도 좋은 암호화 해시 함수는 이러한 충돌을 극소화시키지 않도록 설계되었습니다.
" 유전자 프로그래밍으로 최첨단 비 암호 해시 찾기 "와 같은 연구를 고려하지 않는 한 낮은 충돌 률로 우수한 비 암호 해시 를 찾기가 더 어렵습니다 .
또한 " 해싱 속도 향상을 위해 비 암호 해시 알고리즘 사용 고려 "를 읽을 수 있습니다. 예를 들어 , 매우 빠른 비 암호 해시 알고리즘 인 " xxhash "는 RAM 제한에 가까운 속도로 작동합니다.
Git에서 해시 변경에 대한 토론은 새로운 것이 아닙니다.
- 하나 그것은 (2009 년 8 월) 최적화 ,하지만 당신은 라이센스 문제를 가지고해야합니다 :
(리누스 토발즈)
모질라 코드 에는 실제로 남아있는 것이 없지만 시작했습니다. 돌이켜 보면 아마도 이미 블로킹을 잘못 수행 한 PPC asm 코드에서 시작했을 것입니다. 그러나 이것은 "20/20 hindsight"종류의 것입니다.
게다가, 모질라 코드는 무시 무시한 더미 였고, 내가 일을 개선 할 수 있다고 확신 한 이유입니다. 따라서 실제 남은 코드보다 동기 부여 측면에 더 가깝더라도 소스의 일종입니다.)
실제 최적화 이득을 측정하는 방법에 주의해야합니다.
(리누스 토발즈)
gcc가 쓰레기 코드를 생성하게하여 P4 문제 중 일부를 숨기므로 사물을 개선한다는 것을 거의 보장 할 수 있습니다.
- 또는 완전히 변경 (2010 년 1 월)
(예 : SHA-3으로, 그러나 다른 해시에도 적용됨) :
(존 탭셀- johnflux
)
git을 SHA-1에서 새로운 알고리즘으로 업그레이드하는 데 드는 엔지니어링 비용은 훨씬 높습니다 . 어떻게 잘 할 수 있는지 잘 모르겠습니다.
우선 우리는 아마도 git 버전을 배포해야합니다 (이 대화에서는 버전 2라고합시다).이 공간을 읽거나 사용하지 않아도 새로운 해시 값을위한 슬롯이있을 수 있습니다. 다른 슬롯에있는 SHA-1 해시 값
우리가 일단 그런 식으로 결국 아직 자식의 새 버전을 배포가,의는 SHA-1 해시에 추가 SHA-3 해시를 생성 버전 3을 부르 자, 자식 버전 2를 사용하는 사람들은 계속 할 수있을 것입니다 간 작동합니다.
(이 토론에 따르면 취약 할 수 있으며 SHA-1 전용 패치에 의존하는 사람들이 취약 할 수 있습니다.)
즉, 전환 어떤 해시 쉽지 않다.
2017 년 2 월 업데이트 : 예, 충돌하는 SHA1을 계산하는 것이 이론상 가능합니다 : shattered.io
GIT는 어떤 영향을 받습니까?
GIT는 모든 파일 개체 및 커밋의 식별 및 무결성 검사를 위해 SHA-1에 크게 의존합니다.
기본적으로 동일한 헤드 커밋 해시와 다른 콘텐츠 (예 : 양성 소스 코드 및 백도어 된 콘텐츠)를 사용하여 두 개의 GIT 리포지토리를 생성 할 수 있습니다.
공격자는 잠재적으로 대상 사용자에게 두 저장소 중 하나를 선택적으로 제공 할 수 있습니다. 이를 위해서는 공격자가 자신의 충돌을 계산해야합니다.
그러나:
이 공격에는 9,223,372,036,854,775,808 SHA1 이상의 계산이 필요했습니다. 이는 6,500 년의 단일 CPU 계산과 110 년의 단일 GPU 계산과 동등한 처리 성능을 갖추 었습니다.
아직 당황하지 마십시오.
" Git은 어떻게 blob에서 SHA-1 충돌을 처리 할까? "를 참조하십시오.
참고URL : https://stackoverflow.com/questions/28792784/why-does-git-use-a-cryptographic-hash-function
'IT박스' 카테고리의 다른 글
익명 메소드를 var에 할당 할 수없는 이유는 무엇입니까? (0) | 2020.06.25 |
---|---|
왜이 줄 xmlns : android =“http://schemas.android.com/apk/res/android”가 레이아웃 xml 파일에서 첫 번째 여야합니까? (0) | 2020.06.25 |
github의 상호 참조 커밋 (0) | 2020.06.25 |
바우어와 함께 부트 스트랩 사용 (0) | 2020.06.25 |
평평한 구조에서 효율적으로 나무를 만드는 법? (0) | 2020.06.25 |