Git는 왜 암호화 해시 함수를 사용합니까?
Git는 왜 더 빠른 비암호화 해시 함수 대신 암호화 해시 함수인 SHA-1을 사용합니까?
관련 질문:
스택 오버플로 질문 Git는 SHA-1을 버전 번호로 사용하는 이유는 무엇입니까? Git는 커밋에 대한 순차 번호와 반대로 SHA-1을 사용하는 이유를 묻습니다.
TLDR;
- 2005년부터 2018년까지/Git 2.18: SHA-1(아래 참조)
- 2019년, 언젠가 SHA-256으로 전환될 것입니다.
2007년 구글에 Git를 소개했을 때 Linus Torvalds 자신에게서 확인할 수 있습니다.
()내
암호화된 보안 체크섬을 확인합니다.아무도 SHA-1을 깨지 못했지만, 중요한 것은, Git에 관한 한, SHA-1은 보안 기능조차 아니라는 것입니다. 이것은 순전히 일관성 검사입니다.
보안 부품은 다른 곳에 있습니다.많은 사람들은 Git이 SHA-1을 사용하고 SHA-1이 암호화된 보안 기능에 사용된다고 가정합니다. 그들은 그것이 거대한 보안 기능이라고 생각합니다.보안과는 전혀 상관이 없습니다. 단지 얻을 수 있는 최고의 해시일 뿐입니다.좋은 해시가 있으면 데이터를 신뢰할 수 있고, 다른 좋은 기능도 있습니다. 즉, 개체를 해시할 때 해시가 잘 분산되어 있다는 것을 알고 특정 배포 문제에 대해 걱정할 필요가 없습니다.
내부적으로 이는 구현의 관점에서 해시 알고리즘을 사용할 수 있을 정도로 해시가 우수하고 나쁜 사례가 없다는 것을 알 수 있다는 것을 의미합니다.
따라서 암호화 측면을 좋아하는 몇 가지 이유도 있지만 실제로는 데이터를 신뢰할 수 있는 능력에 대한 것입니다.
제가 장담하건대, 여러분이 데이터를 저장한다면, 여러분은 5년 후에, 여러분의 하드 디스크에서 DVD로 변환된 후에, 그것을 따라 복사한 후에, 5년 후에 여러분이 다시 얻을 수 있는 데이터가 여러분이 입력한 것과 정확히 같은 데이터인지 확인할 수 있다는 사실을 믿을 수 있을 것입니다. 이것이 바로 소스 코드 관리 시스템에서 찾아야 하는 것입니다.
Git 2.16으로 2017년 12월 업데이트(2018년 1분기): 대체 SHA를 지원하기 위한 이러한 노력이 진행 중입니다. "Git는 왜 더 현대적인 SHA를 사용하지 않습니까?"를 참조하십시오.
저는 "덩어리에서 SHA-1 충돌을 어떻게 처리할 수 있을까요?"에서 특정 SHA1 접두사로 커밋을 설계할 수 있다고 언급했습니다(아직도 매우 비용이 많이 드는 노력).
그러나 Eric Sink가 "Git: Cryptographic Hashes" (Version Control by Example (2011) 책에서 언급했듯이 요점은 남아 있습니다.
DVCS는 다이제스트가 동일한 두 개의 서로 다른 데이터를 절대로 발견하지 않는 것이 중요합니다.다행히도, 좋은 암호화 해시 함수는 이러한 충돌을 매우 가능성이 없도록 설계되었습니다.
"유전자 프로그래밍으로 최신 비암호화 해시 찾기"와 같은 연구를 고려하지 않는 한 충돌률이 낮은 좋은 비암호화 해시를 찾는 것은 더 어렵습니다.
RAM 한계에 가까운 속도로 작동하는 매우 빠른 비암호화 해시 알고리즘인 "xx 해시"를 예로 들 수 있는 "해싱 속도 향상을 위한 비암호화 해시 알고리즘 사용 고려"도 읽을 수 있습니다.
Git에서 해시를 변경하는 것에 대한 논의는 새로운 것이 아닙니다.
(Linus Torvalds
모질라 코드는 아무것도 남아있지 않지만, 저는 그것으로부터 시작했습니다.돌이켜보면, 나는 이미 정상적으로 차단을 수행한 PPC ASM 코드에서 시작했어야 했지만, 그것은 "20/20" 종류의 사후 판단입니다.
게다가, 모질라 코드는 끔찍한 쓰레기 더미이기 때문에 제가 무언가를 개선할 수 있다고 확신했습니다.그래서 그것은 그것에 대한 일종의 소스입니다, 비록 그것이 실제 남아있는 어떤 코드보다 동기부여 측면에 관한 것일지라도;)
또한 실제 최적화 이득을 측정하는 방법에 대해 주의해야 합니다.
(Linus Torvalds
GCC가 crap code를 생성하고 P4 문제의 일부를 숨기게 하기 때문에 상황이 개선된다고 장담할 수 있습니다.
(존 탭셀 - )
Git를 SHA-1에서 새로운 알고리즘으로 업그레이드하기 위한 엔지니어링 비용이 훨씬 높습니다.어떻게 하면 잘 될 수 있을지 모르겠습니다.
무엇보다도 먼저 새로운 해시 값을 위한 슬롯이 있어도 해당 공간을 읽거나 사용하지 않고 다른 슬롯에 있는 SHA-1 해시 값만 사용할 수 있는 git 버전(이 대화에서는 버전 2라고 부르자)을 배포해야 합니다.
그런 식으로 최종적으로 Git의 최신 버전인 SHA-1 해시 외에도 SHA-3 해시를 생성하는 버전 3을 구축하면 Git 버전 2를 사용하는 사람들은 계속 상호 운용할 수 있습니다.
(그러나 이 논의에 따르면 이들은 취약할 수 있으며 SHA-1 전용 패치를 사용하는 사람들은 취약할 수 있습니다.)
간단히 말해서, 모든 해시로 전환하는 것은 쉽지 않습니다.
2017년 2월 업데이트: 네, 이론적으로 충돌하는 SHA1을 계산하는 것이 가능합니다:산산이 부서진.io
GIT는 어떤 영향을 받습니까?
GIT는 모든 파일 개체 및 커밋의 식별 및 무결성 검사를 위해 SHA-1에 크게 의존합니다.
기본적으로 동일한 헤드 커밋 해시와 서로 다른 내용을 가진 두 개의 GIT 저장소를 생성할 수 있습니다. 예를 들어, 양성 소스 코드와 백도어 저장소가 있습니다.
공격자는 잠재적으로 대상 사용자에게 두 리포지토리 중 하나를 선택적으로 서비스할 수 있습니다.공격자가 직접 충돌을 계산해야 합니다.
그러나:
이 공격에는 9,223,372,036,854,775,808개 이상의 SHA1 계산이 필요했습니다.이를 위해서는 6,500년의 단일 CPU 계산과 110년의 단일 GPU 계산과 동등한 처리 능력이 필요했습니다.
그러니 아직 당황하지 말자구요.
자세한 내용은 "Git가 블롭에서 SHA-1 충돌을 어떻게 처리할 것인가?"를 참조하십시오.
언급URL : https://stackoverflow.com/questions/28792784/why-does-git-use-a-cryptographic-hash-function
'programing' 카테고리의 다른 글
express에서 app.config 사용 (0) | 2023.08.12 |
---|---|
Jenkins 파이프라인 스크립트에서 SQL 스크립트를 실행하려면 작업 전략이 필요합니다. (0) | 2023.08.12 |
Python에서 정렬된 목록에 항목 삽입 (0) | 2023.08.12 |
swift 2.2에서 몇 밀리초 동안 자는 방법? (0) | 2023.08.07 |
엑셀 VBA에서 sql 데이터베이스로 매개 변수를 전달할 때 adDecimal 유형을 사용하는 방법은 무엇입니까? (0) | 2023.08.07 |