개발자 도구 · SHA 해시 계산기
눈사태 효과: 변경된 캐릭터가 SHA 해시를 다시 쓰는 이유
· 작동 방식
샤-256 암호화 보안 검증
문자 하나를 변경하면 출력 비트의 대략 절반이 뒤집힙니다. 이 게시물에서는 눈사태 속성, 변조 감지에 이것이 필수적인 이유, 그리고 SHA-2의 라운드가 이를 달성하는 방법에 대해 설명합니다.
해시가 약간 변경될 것으로 예상 - 대부분의 사람들이 가져오는 직관과 설계가 의도적으로 이를 깨뜨리는 이유
대부분의 사람들은 유사한 입력이 유사한 출력을 생성할 것으로 기대합니다. 파일에서 문자 하나를 변경하면 다이제스트가 약간 변경됩니다. 대신, 암호화 해시는 반대 작업을 수행하도록 설계되었습니다. 입력의 단일 비트 변경은 예측할 수 없게 출력 비트의 대략 절반을 뒤집어야 합니다. 이 속성을 눈사태 효과라고 하며 이는 의도적인 것입니다. 이 디자인은 변조 감지라는 특정 목적을 수행합니다.
눈사태 효과는 해싱 세계에서 "거의 일치"가 개념이 아닌 이유입니다. 해시가 정확히 일치하거나 일치하지 않습니다. "충분히 가까운" 것은 없습니다. 이 속성은 해싱을 무결성 검사 및 콘텐츠 주소 지정에 유용하게 만들고 약한 해싱 알고리즘을 보안 목적으로 사용할 수 없게 만듭니다.
눈사태는 광범위한 출력 확산을 의미합니다. 이 기사는 출처가 없는 정확한 확률에 대한 주장을 하지 않습니다.
공식적으로 눈사태 효과는 단일 비트가 다른 두 입력의 경우 출력 다이제스트가 해당 비트의 약 50%만큼 달라야 함을 의미합니다. SHA-256(출력의 256 bits)의 경우 하나의 입력 비트를 변경하면 대략 128 출력 비트가 반전되어야 합니다. 효과는 정확하지 않습니다. 그것은 통계적 속성이다. 그러나 이는 강력합니다. 실제로는 입력의 모든 비트가 출력의 모든 비트와 완전히 혼합됩니다.
왜 대략 절반인가? 진정한 무작위 출력은 다른 무작위 출력과 평균 비트의 정확히 절반이 다르기 때문입니다(비둘기 구멍 원리 및 기본 통계에 따라). 좋은 해시 함수는 무작위성에 가깝습니다. 식별할 수 있는 패턴이 없는 것처럼 보이는 출력이 생성됩니다. 평균적으로 비트 뒤집기가 절반이 되는 것이 무작위성의 특징입니다. 해시가 비트의 10%만 뒤집은 경우 공격자가 패턴을 찾아 악용할 수 있습니다.
변조 감지에 필요한 이유 - 문서에 대한 작은 편집으로 인해 한 눈에 알아볼 수 있을 정도로 거의 동일한 해시가 생성되어서는 안 됩니다.
변조 감지는 눈사태를 기반으로 합니다. 파일을 다운로드하고 SHA-256을 계산하는 경우 예상되는 다이제스트는 ba7816...입니다(예를 들어). 공격자는 1바이트를 변경하여 파일을 수정합니다. 새로운 다이제스트는 ba7816...에서 3d4e92...와 같은 것으로 변경됩니다(완전히 다름). 예상 다이제스트와 비교하여 파일을 확인할 때 불일치는 즉각적이고 총체적입니다. 오해할 여지가 없습니다. 파일이 변조되었습니다.
눈사태가 없으면 공격자는 바이트를 변경할 수 있으며 다이제스트는 ba7817...(16진수 하나 다름)로 약간만 이동할 수 있습니다. 단순 비교에서는 차이점을 놓칠 수 있습니다. 공격자는 파일이 진짜라고 주장하면서 ba78로 시작하는 다이제스트를 생성하는 입력을 검색할 수도 있습니다. Avalanche는 이를 엄청나게 비싸게 만듭니다. 다이제스트가 동일한 4개의 16진수 숫자로 시작하는 두 개의 입력을 찾으려면 설계에서 허용하는 것보다 더 많은 작업이 필요합니다.
라운드 확산 방식 — 전체 상태에 걸쳐 1비트의 영향을 전달하는 회전, 추가 및 비선형 함수
SHA-256의 라운드(및 SHA-512의 라운드)는 변경 사항을 확산시키도록 설계되었습니다. 각 라운드에서는 비선형 함수(선택, 다수)와 회전을 사용하여 데이터를 혼합합니다. 입력의 단일 비트 변경은 메시지 일정에 들어가고 라운드를 통해 전파됩니다. 회전은 비트 위치를 이동시킵니다. 비선형 기능은 비트의 영향을 숨깁니다. 선택 작업에서 제어 비트를 변경하면 선택되는 데이터에 따라 모든 출력 비트를 뒤집을 수 있습니다.
초기 해시 상수, 메시지 일정 상수, 회전량, 라운드 수는 모두 눈사태 효과를 극대화하기 위해 선택되었습니다. 이 숫자는 임의적이지 않습니다. 이는 SHA-2 사양에서 왔으며 광범위하게 암호화되었습니다. 상수나 라운드 횟수를 변경하면 다른 알고리즘이 생성됩니다(아마도 더 약한 알고리즘).
실제 예 — 한 문자씩 다른 두 입력을 해싱하고 다이제스트를 비트별로 비교합니다.
눈사태 테스트는 간단합니다. 입력 abc를 해시하고 다이제스트를 기록해 둡니다. 그런 다음 abc를 해시하고 공백을 추가하거나 한 문자를 다른 문자(abd)로 바꿉니다. 16진수 출력을 비교합니다. SHA-256의 경우 64 16진수 중 대략 절반이 다릅니다. 세어보세요. ToolAcre 게시물의 테스트 벡터: abc는 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad를 생성합니다. 빈 문자열은 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855를 생성합니다. 이러한 다이제스트에는 공통된 16진수 숫자가 없습니다.
입력과 함께 ToolAcre 계산기에서 이것을 시도해 보세요. 문장을 해시합니다. 그런 다음 문자 하나를 변경하고 다시 해시합니다. 서로 다른 16진수를 세어보세요. 대략 절반(대부분의 경우 64 중 32)이 다르다는 것을 알 수 있습니다. 이것이 바로 눈사태 효과입니다. 이는 우연이 아닌 알고리즘 설계의 속성입니다.
Avalanche는 유사성 검색을 제공하지 않거나 자체적으로 충돌 저항을 정량화하지 않습니다.
Avalanche는 유사성 검색이나 대략적인 일치를 생성하지 않습니다. 다이제스트 ba7816이 있고... 유사한 다이제스트를 찾고 싶다면 바로가기가 없습니다. 후보 입력을 추측하거나 무차별 대입하여 각 입력을 해시하고 정확히 일치하는지 확인해야 합니다. 눈사태 효과는 모든 추측이 유사하거나 완전히 다른 결과를 생성할 가능성을 동일하게 만듭니다. 일부 해싱 알고리즘(지역 구분 해싱이라고 함)은 유사성을 유지하도록 설계되었습니다. 거의 중복된 항목을 감지하고 클러스터링하는 데 유용하지만 암호화 해시는 아닙니다.
눈사태는 또한 결정된 충돌 검색으로부터 보호하지 않습니다. 암호 분석가는 여전히 동일한 다이제스트를 생성하는 두 개의 서로 다른 입력을 찾을 수 있지만 검색 공간은 엄청납니다. 결정된 충돌 검색은 시각적 확산과 다른 질문입니다. 이 기사에서는 여기서 파생된 것이 없기 때문에 생일에 따른 수치나 하드웨어 타임라인을 인용하지 않습니다. 방어 가능한 경계는 눈사태만으로는 충돌 저항을 증명하거나 정량화할 수 없다는 것입니다.
요점: 아슬아슬한 상황 없음 — ToolAcre SHA 해시 계산기에서 한 문자 실험을 시도하고 전체 다이제스트 변경 사항을 살펴보세요.
ToolAcre SHA 해시 계산기는 브라우저의 웹 암호화 구현을 통해 SHA 알고리즘을 실행합니다. 이를 사용하여 눈사태를 직접 확인할 수 있습니다. 알고리즘의 모든 정밀도가 출력에 반영되며 Web Crypto 구현은 브라우저 공급업체에서 감사 및 유지 관리됩니다. 실제 입력에서 실제 알고리즘이 실행되는 것을 볼 수 있습니다. 하나의 문자 변경으로 전체 다이제스트를 다시 작성하는 반직관적인 속성은 결함이 아닙니다. 해싱을 작동시키는 기능입니다.
무결성 검사를 위해 해시를 사용하면 눈사태에 의존하게 됩니다. 콘텐츠 주소 지정(예: 컨테이너 이미지 다이제스트)에 이를 사용하는 경우 작은 변경으로 인해 매우 다른 다이제스트가 생성되는 속성에 의존합니다. 디지털 서명(서명이 메시지의 해시에 대해 계산되는 경우)에서 이를 사용하면 눈사태 효과를 통해 메시지를 변조하면 감지 가능한 변경이 생성됩니다. 이 속성은 해시 기반 보안의 기초입니다.